From 1ff268479ed9e5c912c1123abe64c05ba387a436 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Tue, 14 Nov 2023 09:45:55 +0100 Subject: [PATCH 001/129] Added the possibility to use custom scopes for performing login with Microsoft EntraID. Signed-off-by: Daniel Doberenz --- .changeset/rotten-lemons-cry.md | 5 +++++ docs/auth/microsoft/provider.md | 4 ++++ plugins/auth-backend-module-microsoft-provider/config.d.ts | 1 + .../src/authenticator.ts | 5 ++++- 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 .changeset/rotten-lemons-cry.md diff --git a/.changeset/rotten-lemons-cry.md b/.changeset/rotten-lemons-cry.md new file mode 100644 index 0000000000..7664eadf2b --- /dev/null +++ b/.changeset/rotten-lemons-cry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-microsoft-provider': minor +--- + +Added the possibility to use custom scopes for performing login with Microsoft EntraID. diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index 999e1f40d2..a6081382e5 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -28,6 +28,7 @@ On the **API permissions** tab, click on `Add Permission`, then add the followin - `openid` - `profile` - `User.Read` +- Optional custom permissions you defined in the configuration file Your company may require you to grant [admin consent](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/user-admin-consent-overview) for these permissions. Even if your company doesn't require admin consent, you may wish to do so as it means users don't need to individually consent the first time they access backstage. @@ -54,6 +55,8 @@ auth: clientSecret: ${AZURE_CLIENT_SECRET} tenantId: ${AZURE_TENANT_ID} domainHint: ${AZURE_TENANT_ID} + scope: + - user.read ``` The Microsoft provider is a structure with three mandatory configuration keys: @@ -65,6 +68,7 @@ The Microsoft provider is a structure with three mandatory configuration keys: Leave blank if your app registration is multi tenant. When specified, this reduces login friction for users with accounts in multiple tenants by automatically filtering away accounts from other tenants. For more details, see [Home Realm Discovery](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/home-realm-discovery-policy) +- `scope` (optional): List of scopes for the App Registration. The default and mandatory value is ['user.read']. ## Adding the provider to the Backstage frontend diff --git a/plugins/auth-backend-module-microsoft-provider/config.d.ts b/plugins/auth-backend-module-microsoft-provider/config.d.ts index aa78f72271..91fffc2361 100644 --- a/plugins/auth-backend-module-microsoft-provider/config.d.ts +++ b/plugins/auth-backend-module-microsoft-provider/config.d.ts @@ -28,6 +28,7 @@ export interface Config { clientSecret: string; domainHint?: string; callbackUrl?: string; + scope?: string[]; }; }; }; diff --git a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts index 52ef1ddd90..8446881a4d 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts @@ -31,6 +31,9 @@ export const microsoftAuthenticator = createOAuthAuthenticator({ const clientSecret = config.getString('clientSecret'); const tenantId = config.getString('tenantId'); const domainHint = config.getOptionalString('domainHint'); + const scope: string[] = config.getOptionalStringArray('scope') || [ + 'user.read', + ]; const helper = PassportOAuthAuthenticatorHelper.from( new ExtendedMicrosoftStrategy( @@ -39,7 +42,7 @@ export const microsoftAuthenticator = createOAuthAuthenticator({ clientSecret: clientSecret, callbackURL: callbackUrl, tenant: tenantId, - scope: ['user.read'], + scope: scope, }, ( accessToken: string, From abfaf8c5024cede9010b0820fcbbd660a663664d Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Wed, 15 Nov 2023 07:18:13 +0100 Subject: [PATCH 002/129] Changed the configuration property to additionalScopes and added a tested helper function to combine lists of scopes. Signed-off-by: Daniel Doberenz --- docs/auth/microsoft/provider.md | 4 +- .../config.d.ts | 2 +- .../src/authenticator.ts | 8 +-- .../src/scopes.test.ts | 50 +++++++++++++++++++ .../src/scopes.ts | 30 +++++++++++ 5 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/scopes.ts diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index a6081382e5..efddcbb9ea 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -55,8 +55,8 @@ auth: clientSecret: ${AZURE_CLIENT_SECRET} tenantId: ${AZURE_TENANT_ID} domainHint: ${AZURE_TENANT_ID} - scope: - - user.read + additionalScopes: + - Mail.Send ``` The Microsoft provider is a structure with three mandatory configuration keys: diff --git a/plugins/auth-backend-module-microsoft-provider/config.d.ts b/plugins/auth-backend-module-microsoft-provider/config.d.ts index 91fffc2361..df63e9ccf4 100644 --- a/plugins/auth-backend-module-microsoft-provider/config.d.ts +++ b/plugins/auth-backend-module-microsoft-provider/config.d.ts @@ -28,7 +28,7 @@ export interface Config { clientSecret: string; domainHint?: string; callbackUrl?: string; - scope?: string[]; + additionalScopes?: string[]; }; }; }; diff --git a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts index 8446881a4d..93058b7eec 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts @@ -21,6 +21,7 @@ import { PassportProfile, } from '@backstage/plugin-auth-node'; import { ExtendedMicrosoftStrategy } from './strategy'; +import { scopeHelper } from './scopes'; /** @public */ export const microsoftAuthenticator = createOAuthAuthenticator({ @@ -31,9 +32,10 @@ export const microsoftAuthenticator = createOAuthAuthenticator({ const clientSecret = config.getString('clientSecret'); const tenantId = config.getString('tenantId'); const domainHint = config.getOptionalString('domainHint'); - const scope: string[] = config.getOptionalStringArray('scope') || [ - 'user.read', - ]; + const scope = scopeHelper( + ['user.read'], + config.getOptionalStringArray('additionalScopes'), + ); const helper = PassportOAuthAuthenticatorHelper.from( new ExtendedMicrosoftStrategy( diff --git a/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts b/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts new file mode 100644 index 0000000000..412f87a601 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts @@ -0,0 +1,50 @@ +/* + * Copyright 2023 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 { scopeHelper } from './scopes'; + +describe('microsoftScopeHelper', () => { + it('default scope only with undefined additional scopes', () => { + const scopeResult = scopeHelper(['default']); + expect(scopeResult.length).toBe(1); + expect(scopeResult).toEqual(expect.arrayContaining(['default'])); + }); + + it('default scope only with empty additional scopes', () => { + const scopeResult = scopeHelper(['default'], []); + expect(scopeResult.length).toBe(1); + expect(scopeResult).toEqual(expect.arrayContaining(['default'])); + }); + + it('default scope with mutually exclusive additional scopes', () => { + const scopeResult = scopeHelper(['default'], ['secondScope', 'thirdScope']); + expect(scopeResult.length).toBe(3); + expect(scopeResult).toEqual( + expect.arrayContaining(['default', 'secondScope', 'thirdScope']), + ); + }); + + it('default scope with overlapping additional scopes', () => { + const scopeResult = scopeHelper( + ['default', 'secondScope'], + ['default', 'secondScope', 'thirdScope'], + ); + expect(scopeResult.length).toBe(3); + expect(scopeResult).toEqual( + expect.arrayContaining(['default', 'secondScope', 'thirdScope']), + ); + }); +}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/scopes.ts b/plugins/auth-backend-module-microsoft-provider/src/scopes.ts new file mode 100644 index 0000000000..2165180382 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/scopes.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2023 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. + */ + +/** + * Combine two arrays of scopes without duplicates + * @param defaultScopes Default scopes + * @param additionalScopes Optional additional scopes + * @returns List of scopes + * @public + */ +export const scopeHelper = function ( + defaultScopes: string[], + additionalScopes?: string[], +): string[] { + const scope: string[] = defaultScopes.concat(additionalScopes || []); + return scope.filter((value, index) => scope.indexOf(value) === index); +}; From 4248af8b474c994076ee9a9e40c1ea37b2331d42 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Wed, 15 Nov 2023 08:53:22 +0100 Subject: [PATCH 003/129] Fixed yarn lint error. Signed-off-by: Daniel Doberenz --- plugins/auth-backend-module-microsoft-provider/src/scopes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/auth-backend-module-microsoft-provider/src/scopes.ts b/plugins/auth-backend-module-microsoft-provider/src/scopes.ts index 2165180382..f70f69c01f 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/scopes.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/scopes.ts @@ -21,10 +21,10 @@ * @returns List of scopes * @public */ -export const scopeHelper = function ( +export const scopeHelper = ( defaultScopes: string[], additionalScopes?: string[], -): string[] { +): string[] => { const scope: string[] = defaultScopes.concat(additionalScopes || []); return scope.filter((value, index) => scope.indexOf(value) === index); }; From 6ecec4282b41ea2731d293310398592881748095 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Thu, 16 Nov 2023 10:39:09 +0100 Subject: [PATCH 004/129] Adapt new configuration key name to the documentation. Signed-off-by: Daniel Doberenz --- docs/auth/microsoft/provider.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index efddcbb9ea..46da74cc31 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -68,7 +68,7 @@ The Microsoft provider is a structure with three mandatory configuration keys: Leave blank if your app registration is multi tenant. When specified, this reduces login friction for users with accounts in multiple tenants by automatically filtering away accounts from other tenants. For more details, see [Home Realm Discovery](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/home-realm-discovery-policy) -- `scope` (optional): List of scopes for the App Registration. The default and mandatory value is ['user.read']. +- `additionalScopes` (optional): List of scopes for the App Registration. The default and mandatory value is ['user.read']. ## Adding the provider to the Backstage frontend From ab8ad0f9830057b7d71fbd44857ac40b03740ed1 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Thu, 23 Nov 2023 10:10:37 +0100 Subject: [PATCH 005/129] Extended test cases to validate the use of additionalScopes Signed-off-by: Daniel Doberenz --- .../src/authenticator.test.ts | 1 + .../auth-backend-module-microsoft-provider/src/module.test.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/auth-backend-module-microsoft-provider/src/authenticator.test.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.test.ts index 35d35c464c..21a60a229b 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.test.ts @@ -113,6 +113,7 @@ describe('microsoftAuthenticator', () => { tenantId: 'tenantId', clientId: 'clientId', clientSecret: 'clientSecret', + additionalScopes: ['User.Read.All'], }), }); }); diff --git a/plugins/auth-backend-module-microsoft-provider/src/module.test.ts b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts index 21f9a7e845..2ef92c0b44 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/module.test.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts @@ -38,6 +38,7 @@ describe('authModuleMicrosoftProvider', () => { clientId: 'my-client-id', clientSecret: 'my-client-secret', tenantId: 'my-tenant-id', + additionalScopes: ['User.Read.All'], }, }, }, @@ -66,7 +67,7 @@ describe('authModuleMicrosoftProvider', () => { expect(startUrl.pathname).toBe('/my-tenant-id/oauth2/v2.0/authorize'); expect(Object.fromEntries(startUrl.searchParams)).toEqual({ response_type: 'code', - scope: 'user.read', + scope: 'user.read User.Read.All', client_id: 'my-client-id', redirect_uri: `http://localhost:${server.port()}/api/auth/microsoft/handler/frame`, state: expect.any(String), From 8462a2e3d0b32a72bf4e428158b7243b0e04150a Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Tue, 5 Dec 2023 13:07:03 +0100 Subject: [PATCH 006/129] Use loadash instead of own implementation and fixed documentation. Signed-off-by: Daniel Doberenz --- docs/auth/microsoft/provider.md | 2 +- .../src/authenticator.ts | 4 +- .../src/scopes.test.ts | 50 ------------------- .../src/scopes.ts | 30 ----------- 4 files changed, 3 insertions(+), 83 deletions(-) delete mode 100644 plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts delete mode 100644 plugins/auth-backend-module-microsoft-provider/src/scopes.ts diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index 46da74cc31..245e3ffe75 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -28,7 +28,7 @@ On the **API permissions** tab, click on `Add Permission`, then add the followin - `openid` - `profile` - `User.Read` -- Optional custom permissions you defined in the configuration file +- Optional custom scopes you defined in the app-config.yaml file. Your company may require you to grant [admin consent](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/user-admin-consent-overview) for these permissions. Even if your company doesn't require admin consent, you may wish to do so as it means users don't need to individually consent the first time they access backstage. diff --git a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts index 93058b7eec..1b6eb87fae 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts @@ -21,7 +21,7 @@ import { PassportProfile, } from '@backstage/plugin-auth-node'; import { ExtendedMicrosoftStrategy } from './strategy'; -import { scopeHelper } from './scopes'; +import { union } from 'lodash'; /** @public */ export const microsoftAuthenticator = createOAuthAuthenticator({ @@ -32,7 +32,7 @@ export const microsoftAuthenticator = createOAuthAuthenticator({ const clientSecret = config.getString('clientSecret'); const tenantId = config.getString('tenantId'); const domainHint = config.getOptionalString('domainHint'); - const scope = scopeHelper( + const scope = union( ['user.read'], config.getOptionalStringArray('additionalScopes'), ); diff --git a/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts b/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts deleted file mode 100644 index 412f87a601..0000000000 --- a/plugins/auth-backend-module-microsoft-provider/src/scopes.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2023 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 { scopeHelper } from './scopes'; - -describe('microsoftScopeHelper', () => { - it('default scope only with undefined additional scopes', () => { - const scopeResult = scopeHelper(['default']); - expect(scopeResult.length).toBe(1); - expect(scopeResult).toEqual(expect.arrayContaining(['default'])); - }); - - it('default scope only with empty additional scopes', () => { - const scopeResult = scopeHelper(['default'], []); - expect(scopeResult.length).toBe(1); - expect(scopeResult).toEqual(expect.arrayContaining(['default'])); - }); - - it('default scope with mutually exclusive additional scopes', () => { - const scopeResult = scopeHelper(['default'], ['secondScope', 'thirdScope']); - expect(scopeResult.length).toBe(3); - expect(scopeResult).toEqual( - expect.arrayContaining(['default', 'secondScope', 'thirdScope']), - ); - }); - - it('default scope with overlapping additional scopes', () => { - const scopeResult = scopeHelper( - ['default', 'secondScope'], - ['default', 'secondScope', 'thirdScope'], - ); - expect(scopeResult.length).toBe(3); - expect(scopeResult).toEqual( - expect.arrayContaining(['default', 'secondScope', 'thirdScope']), - ); - }); -}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/scopes.ts b/plugins/auth-backend-module-microsoft-provider/src/scopes.ts deleted file mode 100644 index f70f69c01f..0000000000 --- a/plugins/auth-backend-module-microsoft-provider/src/scopes.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2023 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. - */ - -/** - * Combine two arrays of scopes without duplicates - * @param defaultScopes Default scopes - * @param additionalScopes Optional additional scopes - * @returns List of scopes - * @public - */ -export const scopeHelper = ( - defaultScopes: string[], - additionalScopes?: string[], -): string[] => { - const scope: string[] = defaultScopes.concat(additionalScopes || []); - return scope.filter((value, index) => scope.indexOf(value) === index); -}; From 78c0190eb024b4190f0bb9c6a95bfc8fa32f2b60 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Tue, 5 Dec 2023 13:35:21 +0100 Subject: [PATCH 007/129] Added loadash to plugin package.json. Signed-off-by: Daniel Doberenz --- .../auth-backend-module-microsoft-provider/package.json | 1 + yarn.lock | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 4b94acbbbf..082ca6246b 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -28,6 +28,7 @@ "@backstage/plugin-auth-node": "workspace:^", "express": "^4.18.2", "jose": "^4.6.0", + "loadash": "^1.0.0", "node-fetch": "^2.6.7", "passport": "^0.6.0", "passport-microsoft": "^1.0.0" diff --git a/yarn.lock b/yarn.lock index 6534e7d908..8a35a2a062 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4994,6 +4994,7 @@ __metadata: "@types/passport-microsoft": ^1.0.0 express: ^4.18.2 jose: ^4.6.0 + loadash: ^1.0.0 msw: ^1.0.0 node-fetch: ^2.6.7 passport: ^0.6.0 @@ -33780,6 +33781,13 @@ __metadata: languageName: node linkType: hard +"loadash@npm:^1.0.0": + version: 1.0.0 + resolution: "loadash@npm:1.0.0" + checksum: 05a105fa9773a7c15963ea783507daa4d488a7a5b782ba77d84dbfaa40b01eb6a3a6cb1a160e67c4af339c7aa9209f9bfb8ef35eefffe98838930f05752ea550 + languageName: node + linkType: hard + "loader-runner@npm:^4.2.0": version: 4.2.0 resolution: "loader-runner@npm:4.2.0" From 17e7834724458c32c69b5434ef347e72c13e354d Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Wed, 6 Dec 2023 06:58:42 +0100 Subject: [PATCH 008/129] Added loadash to plugin package.json the correct way. Signed-off-by: Daniel Doberenz --- package.json | 3 ++- .../auth-backend-module-microsoft-provider/package.json | 1 - yarn.lock | 9 +-------- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index a13b7463f2..a676d2c2d3 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,8 @@ "@backstage/errors": "workspace:^", "@changesets/changelog-github": "^0.4.8", "@manypkg/get-packages": "^1.1.3", - "@useoptic/optic": "^0.50.10" + "@useoptic/optic": "^0.50.10", + "lodash": "^4.17.21" }, "devDependencies": { "@backstage/cli": "workspace:*", diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 082ca6246b..4b94acbbbf 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -28,7 +28,6 @@ "@backstage/plugin-auth-node": "workspace:^", "express": "^4.18.2", "jose": "^4.6.0", - "loadash": "^1.0.0", "node-fetch": "^2.6.7", "passport": "^0.6.0", "passport-microsoft": "^1.0.0" diff --git a/yarn.lock b/yarn.lock index 8a35a2a062..6c8f6e2b0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4994,7 +4994,6 @@ __metadata: "@types/passport-microsoft": ^1.0.0 express: ^4.18.2 jose: ^4.6.0 - loadash: ^1.0.0 msw: ^1.0.0 node-fetch: ^2.6.7 passport: ^0.6.0 @@ -33781,13 +33780,6 @@ __metadata: languageName: node linkType: hard -"loadash@npm:^1.0.0": - version: 1.0.0 - resolution: "loadash@npm:1.0.0" - checksum: 05a105fa9773a7c15963ea783507daa4d488a7a5b782ba77d84dbfaa40b01eb6a3a6cb1a160e67c4af339c7aa9209f9bfb8ef35eefffe98838930f05752ea550 - languageName: node - linkType: hard - "loader-runner@npm:^4.2.0": version: 4.2.0 resolution: "loader-runner@npm:4.2.0" @@ -41327,6 +41319,7 @@ __metadata: fs-extra: 10.1.0 husky: ^8.0.0 lint-staged: ^15.0.0 + lodash: ^4.17.21 minimist: ^1.2.5 node-gyp: ^10.0.0 prettier: ^2.2.1 From ba3a413525a256a17ca21de0a165424b7f039c47 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz <136574802+LichtBlick-PENG-Daniel@users.noreply.github.com> Date: Mon, 11 Dec 2023 09:44:22 +0100 Subject: [PATCH 009/129] Change from minor update to patch Co-authored-by: Philipp Hugenroth Signed-off-by: Daniel Doberenz <136574802+LichtBlick-PENG-Daniel@users.noreply.github.com> --- .changeset/rotten-lemons-cry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/rotten-lemons-cry.md b/.changeset/rotten-lemons-cry.md index 7664eadf2b..2bcc4c2ea7 100644 --- a/.changeset/rotten-lemons-cry.md +++ b/.changeset/rotten-lemons-cry.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-auth-backend-module-microsoft-provider': minor +'@backstage/plugin-auth-backend-module-microsoft-provider': patch --- Added the possibility to use custom scopes for performing login with Microsoft EntraID. From 14e01166323e55d78536c64a97f0c4fa18832843 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Tue, 19 Dec 2023 06:48:06 +0100 Subject: [PATCH 010/129] Installed loadash to plugin Signed-off-by: Daniel Doberenz --- plugins/auth-backend-module-microsoft-provider/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 4b94acbbbf..027d112c0d 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -30,7 +30,8 @@ "jose": "^4.6.0", "node-fetch": "^2.6.7", "passport": "^0.6.0", - "passport-microsoft": "^1.0.0" + "passport-microsoft": "^1.0.0", + "lodash": "^4.17.21" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", From 133858966bc960f75d0287dcbf5427363c5c8f4b Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Tue, 19 Dec 2023 06:56:13 +0100 Subject: [PATCH 011/129] Specified allowed scopes in the documentation Signed-off-by: Daniel Doberenz --- docs/auth/microsoft/provider.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index 245e3ffe75..bb8a7db6e4 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -28,7 +28,7 @@ On the **API permissions** tab, click on `Add Permission`, then add the followin - `openid` - `profile` - `User.Read` -- Optional custom scopes you defined in the app-config.yaml file. +- Optional custom scopes of the `Microsoft Graph` API defined in the app-config.yaml file. Your company may require you to grant [admin consent](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/user-admin-consent-overview) for these permissions. Even if your company doesn't require admin consent, you may wish to do so as it means users don't need to individually consent the first time they access backstage. From f24207eb6c1a1b1dc977bb1b14616d1a05b92de5 Mon Sep 17 00:00:00 2001 From: GoFightNguyen Date: Sun, 24 Dec 2023 22:08:15 +0000 Subject: [PATCH 012/129] catalog: export defaultColumnsFunc Signed-off-by: GoFightNguyen --- plugins/catalog/api-report.md | 3 +++ .../catalog/src/components/CatalogTable/CatalogTable.tsx | 6 +++++- plugins/catalog/src/components/CatalogTable/index.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index bef24b50d8..e2225f5ba6 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -245,6 +245,9 @@ export interface DefaultCatalogPageProps { tableOptions?: TableProps['options']; } +// @public (undocumented) +export const defaultColumnsFunc: CatalogTableColumnsFunc; + // @public export class DefaultEntityPresentationApi implements EntityPresentationApi { static create( diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 006210bb1d..c68e1b06a6 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -77,7 +77,11 @@ const refCompare = (a: Entity, b: Entity) => { return toRef(a).localeCompare(toRef(b)); }; -const defaultColumnsFunc: CatalogTableColumnsFunc = ({ filters, entities }) => { +/** @public */ +export const defaultColumnsFunc: CatalogTableColumnsFunc = ({ + filters, + entities, +}) => { const showTypeColumn = filters.type === undefined; return [ diff --git a/plugins/catalog/src/components/CatalogTable/index.ts b/plugins/catalog/src/components/CatalogTable/index.ts index f5d1ca1bb7..e1d96a6f8f 100644 --- a/plugins/catalog/src/components/CatalogTable/index.ts +++ b/plugins/catalog/src/components/CatalogTable/index.ts @@ -14,6 +14,6 @@ * limitations under the License. */ -export { CatalogTable } from './CatalogTable'; +export { CatalogTable, defaultColumnsFunc } from './CatalogTable'; export type { CatalogTableProps } from './CatalogTable'; export type { CatalogTableRow, CatalogTableColumnsFunc } from './types'; From 9f734489937f13fb6ea080b5001b31c8c87045e4 Mon Sep 17 00:00:00 2001 From: GoFightNguyen Date: Sun, 24 Dec 2023 22:17:42 +0000 Subject: [PATCH 013/129] catalog: rename to defaultCatalogTableColumnsFunc from defaultColumnsFunc Signed-off-by: GoFightNguyen --- plugins/catalog/api-report.md | 2 +- plugins/catalog/src/components/CatalogTable/CatalogTable.tsx | 4 ++-- plugins/catalog/src/components/CatalogTable/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index e2225f5ba6..718e974302 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -246,7 +246,7 @@ export interface DefaultCatalogPageProps { } // @public (undocumented) -export const defaultColumnsFunc: CatalogTableColumnsFunc; +export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc; // @public export class DefaultEntityPresentationApi implements EntityPresentationApi { diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index c68e1b06a6..fe79607a0c 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -78,7 +78,7 @@ const refCompare = (a: Entity, b: Entity) => { }; /** @public */ -export const defaultColumnsFunc: CatalogTableColumnsFunc = ({ +export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({ filters, entities, }) => { @@ -126,7 +126,7 @@ export const defaultColumnsFunc: CatalogTableColumnsFunc = ({ /** @public */ export const CatalogTable = (props: CatalogTableProps) => { const { - columns = defaultColumnsFunc, + columns = defaultCatalogTableColumnsFunc, tableOptions, subtitle, emptyContent, diff --git a/plugins/catalog/src/components/CatalogTable/index.ts b/plugins/catalog/src/components/CatalogTable/index.ts index e1d96a6f8f..a33cc4a9b5 100644 --- a/plugins/catalog/src/components/CatalogTable/index.ts +++ b/plugins/catalog/src/components/CatalogTable/index.ts @@ -14,6 +14,6 @@ * limitations under the License. */ -export { CatalogTable, defaultColumnsFunc } from './CatalogTable'; +export { CatalogTable, defaultCatalogTableColumnsFunc } from './CatalogTable'; export type { CatalogTableProps } from './CatalogTable'; export type { CatalogTableRow, CatalogTableColumnsFunc } from './types'; From ebc733e67774e1ddbd94321bc3fd7857f72e123b Mon Sep 17 00:00:00 2001 From: GoFightNguyen Date: Sun, 24 Dec 2023 22:28:52 +0000 Subject: [PATCH 014/129] catalog: extract defaultCatalogTableColumnsFunc to separate file Signed-off-by: GoFightNguyen --- .../components/CatalogTable/CatalogTable.tsx | 47 +------------- .../defaultCatalogTableColumnsFunc.tsx | 65 +++++++++++++++++++ .../src/components/CatalogTable/index.ts | 3 +- 3 files changed, 68 insertions(+), 47 deletions(-) create mode 100644 plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index fe79607a0c..d21cca27c6 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -47,6 +47,7 @@ import React, { ReactNode, useMemo } from 'react'; import { columnFactories } from './columns'; import { CatalogTableColumnsFunc, CatalogTableRow } from './types'; import { PaginatedCatalogTable } from './PaginatedCatalogTable'; +import { defaultCatalogTableColumnsFunc } from './defaultCatalogTableColumnsFunc'; /** * Props for {@link CatalogTable}. @@ -77,52 +78,6 @@ const refCompare = (a: Entity, b: Entity) => { return toRef(a).localeCompare(toRef(b)); }; -/** @public */ -export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({ - filters, - entities, -}) => { - const showTypeColumn = filters.type === undefined; - - return [ - columnFactories.createTitleColumn({ hidden: true }), - columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), - ...createEntitySpecificColumns(), - columnFactories.createMetadataDescriptionColumn(), - columnFactories.createTagsColumn(), - ]; - - function createEntitySpecificColumns(): TableColumn[] { - const baseColumns = [ - columnFactories.createSystemColumn(), - columnFactories.createOwnerColumn(), - columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), - columnFactories.createSpecLifecycleColumn(), - ]; - switch (filters.kind?.value) { - case 'user': - return []; - case 'domain': - case 'system': - return [columnFactories.createOwnerColumn()]; - case 'group': - case 'template': - return [ - columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), - ]; - case 'location': - return [ - columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), - columnFactories.createSpecTargetsColumn(), - ]; - default: - return entities.every(entity => entity.metadata.namespace === 'default') - ? baseColumns - : [...baseColumns, columnFactories.createNamespaceColumn()]; - } - } -}; - /** @public */ export const CatalogTable = (props: CatalogTableProps) => { const { diff --git a/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx b/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx new file mode 100644 index 0000000000..5948dedee6 --- /dev/null +++ b/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx @@ -0,0 +1,65 @@ +/* + * Copyright 2023 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 { TableColumn } from '@backstage/core-components'; +import { columnFactories } from './columns'; +import { CatalogTableColumnsFunc, CatalogTableRow } from './types'; + +/** @public */ +export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({ + filters, + entities, +}) => { + const showTypeColumn = filters.type === undefined; + + return [ + columnFactories.createTitleColumn({ hidden: true }), + columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), + ...createEntitySpecificColumns(), + columnFactories.createMetadataDescriptionColumn(), + columnFactories.createTagsColumn(), + ]; + + function createEntitySpecificColumns(): TableColumn[] { + const baseColumns = [ + columnFactories.createSystemColumn(), + columnFactories.createOwnerColumn(), + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + columnFactories.createSpecLifecycleColumn(), + ]; + switch (filters.kind?.value) { + case 'user': + return []; + case 'domain': + case 'system': + return [columnFactories.createOwnerColumn()]; + case 'group': + case 'template': + return [ + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + ]; + case 'location': + return [ + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + columnFactories.createSpecTargetsColumn(), + ]; + default: + return entities.every(entity => entity.metadata.namespace === 'default') + ? baseColumns + : [...baseColumns, columnFactories.createNamespaceColumn()]; + } + } +}; diff --git a/plugins/catalog/src/components/CatalogTable/index.ts b/plugins/catalog/src/components/CatalogTable/index.ts index a33cc4a9b5..d69ed0b3a2 100644 --- a/plugins/catalog/src/components/CatalogTable/index.ts +++ b/plugins/catalog/src/components/CatalogTable/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ -export { CatalogTable, defaultCatalogTableColumnsFunc } from './CatalogTable'; +export { CatalogTable } from './CatalogTable'; +export { defaultCatalogTableColumnsFunc } from './defaultCatalogTableColumnsFunc'; export type { CatalogTableProps } from './CatalogTable'; export type { CatalogTableRow, CatalogTableColumnsFunc } from './types'; From e541c0ec551cee11c12278ea865830f5c29c5f5a Mon Sep 17 00:00:00 2001 From: GoFightNguyen Date: Sun, 24 Dec 2023 23:25:19 +0000 Subject: [PATCH 015/129] catalog: changeset Signed-off-by: GoFightNguyen --- .changeset/seven-dots-serve.md | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .changeset/seven-dots-serve.md diff --git a/.changeset/seven-dots-serve.md b/.changeset/seven-dots-serve.md new file mode 100644 index 0000000000..79f8f62abb --- /dev/null +++ b/.changeset/seven-dots-serve.md @@ -0,0 +1,35 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Exported `defaultCatalogTableColumnsFunc` to create a seam for defining the columns in [CatalogTable](https://github.com/backstage/backstage/blob/master/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx) of some Kinds while using the default columns for the others. +This is useful for defining the columns of a custom Kind or to redefine the columns for a built-in Kind. + +```diff +// packages/app/src/App.tsx + +import { + CatalogEntityPage, + CatalogIndexPage, + catalogPlugin, ++ CatalogTable, ++ CatalogTableColumnsFunc, ++ defaultCatalogTableColumnsFunc, +} from '@backstage/plugin-catalog'; + ++ const myColumnsFunc: CatalogTableColumnsFunc = (entityListContext) => { ++ if (entityListContext.filters.kind?.value === 'MyKind') { ++ return [ ++ CatalogTable.columns.createNameColumn(), ++ CatalogTable.columns.createOwnerColumn() ++ ]; ++ } ++ ++ return defaultCatalogTableColumnsFunc(entityListContext); ++ }; + +... + +- } /> ++ } /> +``` From 93ce28dfa3d153942d7bc0c8dbc24052eb7f5844 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Sun, 24 Dec 2023 17:10:39 -0700 Subject: [PATCH 016/129] remove relative URL from changeset Signed-off-by: Jason Nguyen --- .changeset/seven-dots-serve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/seven-dots-serve.md b/.changeset/seven-dots-serve.md index 79f8f62abb..1518fb20cc 100644 --- a/.changeset/seven-dots-serve.md +++ b/.changeset/seven-dots-serve.md @@ -2,7 +2,7 @@ '@backstage/plugin-catalog': minor --- -Exported `defaultCatalogTableColumnsFunc` to create a seam for defining the columns in [CatalogTable](https://github.com/backstage/backstage/blob/master/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx) of some Kinds while using the default columns for the others. +Exported `defaultCatalogTableColumnsFunc` to create a seam for defining the columns in `` of some Kinds while using the default columns for the others. This is useful for defining the columns of a custom Kind or to redefine the columns for a built-in Kind. ```diff From 7db77f9487244c1c27f805d998cb66c80e3860e6 Mon Sep 17 00:00:00 2001 From: GoFightNguyen Date: Tue, 26 Dec 2023 21:09:38 +0000 Subject: [PATCH 017/129] catalog: export defaultCatalogTableColumnsFunc through CatalogTable.defaultColumnsFunc instead of directly Signed-off-by: GoFightNguyen --- .changeset/seven-dots-serve.md | 5 ++--- plugins/catalog/api-report.md | 4 +--- plugins/catalog/src/components/CatalogTable/CatalogTable.tsx | 1 + .../CatalogTable/defaultCatalogTableColumnsFunc.tsx | 2 ++ plugins/catalog/src/components/CatalogTable/index.ts | 1 - 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.changeset/seven-dots-serve.md b/.changeset/seven-dots-serve.md index 1518fb20cc..f48ab1f19c 100644 --- a/.changeset/seven-dots-serve.md +++ b/.changeset/seven-dots-serve.md @@ -2,7 +2,7 @@ '@backstage/plugin-catalog': minor --- -Exported `defaultCatalogTableColumnsFunc` to create a seam for defining the columns in `` of some Kinds while using the default columns for the others. +Exported `CatalogTable.defaultColumnsFunc` to create a seam for defining the columns in `` of some Kinds while using the default columns for the others. This is useful for defining the columns of a custom Kind or to redefine the columns for a built-in Kind. ```diff @@ -14,7 +14,6 @@ import { catalogPlugin, + CatalogTable, + CatalogTableColumnsFunc, -+ defaultCatalogTableColumnsFunc, } from '@backstage/plugin-catalog'; + const myColumnsFunc: CatalogTableColumnsFunc = (entityListContext) => { @@ -25,7 +24,7 @@ import { + ]; + } + -+ return defaultCatalogTableColumnsFunc(entityListContext); ++ return CatalogTable.defaultColumnsFunc(entityListContext); + }; ... diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 718e974302..feda3fd70d 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -182,6 +182,7 @@ export const CatalogTable: { ): TableColumn; createNamespaceColumn(): TableColumn; }>; + defaultColumnsFunc: CatalogTableColumnsFunc; }; // @public @@ -245,9 +246,6 @@ export interface DefaultCatalogPageProps { tableOptions?: TableProps['options']; } -// @public (undocumented) -export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc; - // @public export class DefaultEntityPresentationApi implements EntityPresentationApi { static create( diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index d21cca27c6..7da12d7138 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -226,6 +226,7 @@ export const CatalogTable = (props: CatalogTableProps) => { }; CatalogTable.columns = columnFactories; +CatalogTable.defaultColumnsFunc = defaultCatalogTableColumnsFunc; function toEntityRow(entity: Entity) { const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, { diff --git a/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx b/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx index 5948dedee6..85f44d3f51 100644 --- a/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx +++ b/plugins/catalog/src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx @@ -18,6 +18,8 @@ import { TableColumn } from '@backstage/core-components'; import { columnFactories } from './columns'; import { CatalogTableColumnsFunc, CatalogTableRow } from './types'; +// The defaultCatalogTableColumnsFunc symbol is not directly exported, but through the +// CatalogTable.defaultColumnsFunc field. /** @public */ export const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({ filters, diff --git a/plugins/catalog/src/components/CatalogTable/index.ts b/plugins/catalog/src/components/CatalogTable/index.ts index d69ed0b3a2..f5d1ca1bb7 100644 --- a/plugins/catalog/src/components/CatalogTable/index.ts +++ b/plugins/catalog/src/components/CatalogTable/index.ts @@ -15,6 +15,5 @@ */ export { CatalogTable } from './CatalogTable'; -export { defaultCatalogTableColumnsFunc } from './defaultCatalogTableColumnsFunc'; export type { CatalogTableProps } from './CatalogTable'; export type { CatalogTableRow, CatalogTableColumnsFunc } from './types'; From 445511769f57c6ab7ee4c3d5c5036c1250c56d38 Mon Sep 17 00:00:00 2001 From: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:36:44 -0600 Subject: [PATCH 018/129] Update github-apps.md Provide information on troubleshooting a specific error with GitHub Apps integration Signed-off-by: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> --- docs/integrations/github/github-apps.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index cc84704799..495f789f7e 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -139,3 +139,13 @@ integration: - `Variables`: `Read & write` (if templates include GitHub Action Repository Variables) - `Secrets`: `Read & write` (if templates include GitHub Action Repository Secrets) - `Environments`: `Read & write` (if templates include GitHub Environments) + + ### Troubleshooting + + `HttpError: This endpoint requires you to be authenticated.` + +This message tends to wrap a `NotFoundError: No app installation found` under the hood, which +is the reuslt of not installing the app in your organization. Even if created via the `backstage-cli` +as a member and app manager of your organization, the app will not automatically install. You +must posses the `Owner` role in the organization to see the `Install` menu under your +app settings, then manually press `Install` to authorize the application. From 5de1455df0de0b6cb828b66501bc4df7aae19d9a Mon Sep 17 00:00:00 2001 From: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:38:52 -0600 Subject: [PATCH 019/129] Update github-apps.md Fix indentation Signed-off-by: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> --- docs/integrations/github/github-apps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 495f789f7e..5e55e638ff 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -140,9 +140,9 @@ integration: - `Secrets`: `Read & write` (if templates include GitHub Action Repository Secrets) - `Environments`: `Read & write` (if templates include GitHub Environments) - ### Troubleshooting +### Troubleshooting - `HttpError: This endpoint requires you to be authenticated.` +`HttpError: This endpoint requires you to be authenticated.` This message tends to wrap a `NotFoundError: No app installation found` under the hood, which is the reuslt of not installing the app in your organization. Even if created via the `backstage-cli` From fe30d259228002a725820166d5c5384919b15f2e Mon Sep 17 00:00:00 2001 From: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:21:30 -0600 Subject: [PATCH 020/129] Update docs/integrations/github/github-apps.md Co-authored-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Signed-off-by: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> --- docs/integrations/github/github-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 5e55e638ff..bdff95c8e9 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -145,7 +145,7 @@ integration: `HttpError: This endpoint requires you to be authenticated.` This message tends to wrap a `NotFoundError: No app installation found` under the hood, which -is the reuslt of not installing the app in your organization. Even if created via the `backstage-cli` +is the result of not installing the app in your organization. Even if created via the `backstage-cli` as a member and app manager of your organization, the app will not automatically install. You must posses the `Owner` role in the organization to see the `Install` menu under your app settings, then manually press `Install` to authorize the application. From cd5114c6a57e081af733268c2532c333db90eeef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Prokopowicz?= Date: Sat, 6 Jan 2024 21:03:56 +0100 Subject: [PATCH 021/129] auth-backend-module-okta-provider: add "additionalScopes" to config schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Prokopowicz --- .changeset/brown-items-hammer.md | 5 +++++ plugins/auth-backend-module-okta-provider/config.d.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/brown-items-hammer.md diff --git a/.changeset/brown-items-hammer.md b/.changeset/brown-items-hammer.md new file mode 100644 index 0000000000..9d26d4f417 --- /dev/null +++ b/.changeset/brown-items-hammer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-okta-provider': patch +--- + +Added missing "additionalScopes" option to configuration schema. diff --git a/plugins/auth-backend-module-okta-provider/config.d.ts b/plugins/auth-backend-module-okta-provider/config.d.ts index f047c96739..42688528ee 100644 --- a/plugins/auth-backend-module-okta-provider/config.d.ts +++ b/plugins/auth-backend-module-okta-provider/config.d.ts @@ -29,6 +29,7 @@ export interface Config { authServerId?: string; idp?: string; callbackUrl?: string; + additionalScopes?: string; }; }; }; From 25e6212fedcffef69e0873480ac1470b3e456402 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Wed, 10 Jan 2024 14:41:47 +0530 Subject: [PATCH 022/129] new faq draft Signed-off-by: npiyush97 --- docs/faq/FAQ.md | 19 +++++++++ docs/faq/adoption.md | 7 +++ docs/faq/corefeatures.md | 7 +++ docs/faq/deployment.md | 7 +++ docs/faq/framework.md | 7 +++ docs/faq/product-faq.md | 68 +++++++++++++++++++++++++++++ docs/{FAQ.md => faq/technical.md} | 71 ++----------------------------- microsite/sidebars.json | 10 ++++- 8 files changed, 128 insertions(+), 68 deletions(-) create mode 100644 docs/faq/FAQ.md create mode 100644 docs/faq/adoption.md create mode 100644 docs/faq/corefeatures.md create mode 100644 docs/faq/deployment.md create mode 100644 docs/faq/framework.md create mode 100644 docs/faq/product-faq.md rename docs/{FAQ.md => faq/technical.md} (75%) diff --git a/docs/faq/FAQ.md b/docs/faq/FAQ.md new file mode 100644 index 0000000000..4b50a38818 --- /dev/null +++ b/docs/faq/FAQ.md @@ -0,0 +1,19 @@ +--- +id: FAQ +title: FAQ +description: All FAQ related to Questions +--- + +## FAQS + +[Product FAQS](../faq/product-faq.md) + +[Technical FAQS](../faq/technical.md) + +[Adoption FAQS](../faq/adoption.md) + +[Deployment FAQS](../faq/deployment.md) + +[Framework FAQS](../faq/framework.md) + +[Core features FAQS](../faq/corefeatures.md) diff --git a/docs/faq/adoption.md b/docs/faq/adoption.md new file mode 100644 index 0000000000..0939fef069 --- /dev/null +++ b/docs/faq/adoption.md @@ -0,0 +1,7 @@ +--- +id: Adoption FAQs +title: Adoption FAQs +description: All FAQs related to Adoption +--- + +## ADOPTION FAQ diff --git a/docs/faq/corefeatures.md b/docs/faq/corefeatures.md new file mode 100644 index 0000000000..8a46929797 --- /dev/null +++ b/docs/faq/corefeatures.md @@ -0,0 +1,7 @@ +--- +id: CORE FEATURES FAQs +title: Core Features FAQs +description: All FAQs related to Core Features +--- + +## Core Features FAQs diff --git a/docs/faq/deployment.md b/docs/faq/deployment.md new file mode 100644 index 0000000000..a67586bc2a --- /dev/null +++ b/docs/faq/deployment.md @@ -0,0 +1,7 @@ +--- +id: DEPLOYMENT FAQs +title: Deployment FAQs +description: All FAQs related to DEPLOYMENT +--- + +## Deployment FAQs diff --git a/docs/faq/framework.md b/docs/faq/framework.md new file mode 100644 index 0000000000..409a273bfb --- /dev/null +++ b/docs/faq/framework.md @@ -0,0 +1,7 @@ +--- +id: FRAMEWORK FAQs +title: Framework FAQs +description: All FAQ related to FRAMEWORK +--- + +## FRAMEWORK FAQs diff --git a/docs/faq/product-faq.md b/docs/faq/product-faq.md new file mode 100644 index 0000000000..68d8918ad0 --- /dev/null +++ b/docs/faq/product-faq.md @@ -0,0 +1,68 @@ +--- +id: Product FAQs +title: Product FAQs +description: All FAQs related to Product +--- + +## Product FAQs + +### Can we call Backstage something different? So that it fits our company better? + +Yes, Backstage is just a platform for building your own developer portal. We +happen to call our internal version Backstage, as well, as a reference to our +music roots. You can call your version whatever suits your team, company, or +brand. + +### Is Backstage a monitoring platform? + +No, but it can be! Backstage is designed to be a developer portal for all your +infrastructure tooling, services, and documentation. So, it's not a monitoring +platform — but that doesn't mean you can't integrate a monitoring tool into +Backstage by writing [a plugin](#what-is-a-plugin-in-backstage). + +### How is Backstage licensed? + +Backstage was released as open source software by Spotify and is licensed under +[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +### Why did we open source Backstage? + +We hope to see Backstage become the infrastructure standard everywhere. When we +saw how much Backstage improved developer experience and productivity +internally, we wanted to share those gains. After all, if Backstage can create +order in an engineering environment as open and diverse as ours, then we're +pretty sure it can create order (and boost productivity) anywhere. To learn +more, read our blog post, +"[What the heck is Backstage anyway?](https://backstage.io/blog/2020/03/18/what-is-backstage)" + +### Will Spotify's internal plugins be open sourced, too? + +Yes, we've already started releasing open source versions of some of the plugins +we use here, and we'll continue to do so. +[Plugins](#what-is-a-plugin-in-backstage) are the building blocks of +functionality in Backstage. We have over 120 plugins inside Spotify — many of +those are specialized for our use, so will remain internal and proprietary to +us. But we estimate that about a third of our existing plugins make good open +source candidates. (And we'll probably end up writing some brand new ones, too.) + +### What's the roadmap for Backstage? + +We envision three phases, which you can learn about in +[our project roadmap](overview/roadmap.md). Even though the open source version +of Backstage is relatively new compared to our internal version, we have already +begun work on various aspects of all three phases. Looking at the +[milestones for active issues](https://github.com/backstage/backstage/milestones) +will also give you a sense of our progress. + +### My company doesn't have thousands of developers or services. Is using Backstage excessive for our needs? + +Not at all! A core reason to adopt Backstage is to standardize how software is +built at your company. It's easier to decide on those standards as a small +company, and grows in importance as the company grows. Backstage sets a +foundation, and an early investment in your infrastructure becomes even more +valuable as you grow. + +### Our company has a strong design language system/brand that we want to incorporate. Does Backstage support this? + +Yes! The Backstage UI is built using Material UI. With the theming capabilities +of Material UI, you are able to adapt the interface to your brand guidelines. diff --git a/docs/FAQ.md b/docs/faq/technical.md similarity index 75% rename from docs/FAQ.md rename to docs/faq/technical.md index 7b935140e6..a79c673799 100644 --- a/docs/FAQ.md +++ b/docs/faq/technical.md @@ -1,73 +1,10 @@ --- -id: FAQ -title: FAQ -description: All FAQ related to Backstage +id: Technical FAQs +title: Technical FAQs +description: All FAQs related to Technical --- -## Product FAQ - -### Can we call Backstage something different? So that it fits our company better? - -Yes, Backstage is just a platform for building your own developer portal. We -happen to call our internal version Backstage, as well, as a reference to our -music roots. You can call your version whatever suits your team, company, or -brand. - -### Is Backstage a monitoring platform? - -No, but it can be! Backstage is designed to be a developer portal for all your -infrastructure tooling, services, and documentation. So, it's not a monitoring -platform — but that doesn't mean you can't integrate a monitoring tool into -Backstage by writing [a plugin](#what-is-a-plugin-in-backstage). - -### How is Backstage licensed? - -Backstage was released as open source software by Spotify and is licensed under -[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -### Why did we open source Backstage? - -We hope to see Backstage become the infrastructure standard everywhere. When we -saw how much Backstage improved developer experience and productivity -internally, we wanted to share those gains. After all, if Backstage can create -order in an engineering environment as open and diverse as ours, then we're -pretty sure it can create order (and boost productivity) anywhere. To learn -more, read our blog post, -"[What the heck is Backstage anyway?](https://backstage.io/blog/2020/03/18/what-is-backstage)" - -### Will Spotify's internal plugins be open sourced, too? - -Yes, we've already started releasing open source versions of some of the plugins -we use here, and we'll continue to do so. -[Plugins](#what-is-a-plugin-in-backstage) are the building blocks of -functionality in Backstage. We have over 120 plugins inside Spotify — many of -those are specialized for our use, so will remain internal and proprietary to -us. But we estimate that about a third of our existing plugins make good open -source candidates. (And we'll probably end up writing some brand new ones, too.) - -### What's the roadmap for Backstage? - -We envision three phases, which you can learn about in -[our project roadmap](overview/roadmap.md). Even though the open source version -of Backstage is relatively new compared to our internal version, we have already -begun work on various aspects of all three phases. Looking at the -[milestones for active issues](https://github.com/backstage/backstage/milestones) -will also give you a sense of our progress. - -### My company doesn't have thousands of developers or services. Is using Backstage excessive for our needs? - -Not at all! A core reason to adopt Backstage is to standardize how software is -built at your company. It's easier to decide on those standards as a small -company, and grows in importance as the company grows. Backstage sets a -foundation, and an early investment in your infrastructure becomes even more -valuable as you grow. - -### Our company has a strong design language system/brand that we want to incorporate. Does Backstage support this? - -Yes! The Backstage UI is built using Material UI. With the theming capabilities -of Material UI, you are able to adapt the interface to your brand guidelines. - -## Technical FAQ +## Technical FAQs ### What technology does Backstage use? diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 5dd5ce93f8..81bd0daec0 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -472,7 +472,15 @@ "architecture-decisions/adrs-adr012", "architecture-decisions/adrs-adr013" ], - "FAQ": ["FAQ"], + "FAQ": [ + "faq/FAQ", + "faq/Product FAQs", + "faq/Technical FAQs", + "faq/Adoption FAQs", + "faq/DEPLOYMENT FAQs", + "faq/FRAMEWORK FAQs", + "faq/CORE FEATURES FAQs" + ], "Accessibility": ["accessibility/index"] } } From 7295dc81193c19bf4312409410f6544397d89282 Mon Sep 17 00:00:00 2001 From: Erik Minekus Date: Wed, 10 Jan 2024 11:26:52 +0100 Subject: [PATCH 023/129] Fix typo in VisitsStorageApi.ts Signed-off-by: Erik Minekus --- plugins/home/src/api/VisitsStorageApi.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/home/src/api/VisitsStorageApi.ts b/plugins/home/src/api/VisitsStorageApi.ts index c72d4c5d64..a7cd063455 100644 --- a/plugins/home/src/api/VisitsStorageApi.ts +++ b/plugins/home/src/api/VisitsStorageApi.ts @@ -130,16 +130,16 @@ export class VisitsStorageApi implements VisitsApi { } return new Promise((resolve, reject) => { - const subsription = this.storageApi + const subscription = this.storageApi .observe$(storageKey) .subscribe({ next: next => { const visits = next.value ?? []; - subsription.unsubscribe(); + subscription.unsubscribe(); resolve(visits); }, error: err => { - subsription.unsubscribe(); + subscription.unsubscribe(); reject(err); }, }); From b45d981c435ab56cade2693ceae5ad5d07c59d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Prokopowicz?= Date: Thu, 11 Jan 2024 18:36:16 +0100 Subject: [PATCH 024/129] Update .changeset/brown-items-hammer.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vincenzo Scamporlino Signed-off-by: Michał Prokopowicz --- .changeset/brown-items-hammer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/brown-items-hammer.md b/.changeset/brown-items-hammer.md index 9d26d4f417..fa023a026b 100644 --- a/.changeset/brown-items-hammer.md +++ b/.changeset/brown-items-hammer.md @@ -2,4 +2,4 @@ '@backstage/plugin-auth-backend-module-okta-provider': patch --- -Added missing "additionalScopes" option to configuration schema. +Added missing `additionalScopes` option to configuration schema. From a3f1fa30f5edd174a9c3145639fc6410fc3e610b Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 12 Jan 2024 01:14:22 +0100 Subject: [PATCH 025/129] auth-backend: use externalized microsoft auth implementation again This reverts commit 96c4f54bf6070db12676e9af0bf75d0d479c3d72. PR #20706 fixed the issues that required the revert of the implementation. Relates-to: PR #20706 Relates-to: PR #20732 Relates-to: PR #20734 Relates-to: PR #20120 Relates-to: PR #22184 Signed-off-by: Patrick Jungermann --- .changeset/dull-fireants-repeat.md | 5 + plugins/auth-backend/api-report.md | 6 +- plugins/auth-backend/config.d.ts | 12 - plugins/auth-backend/package.json | 1 + .../microsoft/__testUtils__/fake.test.ts | 90 ---- .../providers/microsoft/__testUtils__/fake.ts | 126 ----- .../src/providers/microsoft/provider.test.ts | 450 ------------------ .../src/providers/microsoft/provider.ts | 303 ++---------- yarn.lock | 3 +- 9 files changed, 39 insertions(+), 957 deletions(-) create mode 100644 .changeset/dull-fireants-repeat.md delete mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/provider.test.ts diff --git a/.changeset/dull-fireants-repeat.md b/.changeset/dull-fireants-repeat.md new file mode 100644 index 0000000000..4e849bfbaf --- /dev/null +++ b/.changeset/dull-fireants-repeat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Use the externalized `auth-backend-module-microsoft-provider` again. diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index d80648a10f..f6d0716c13 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -531,9 +531,9 @@ export const providers: Readonly<{ | undefined, ) => AuthProviderFactory_2; resolvers: Readonly<{ - emailLocalPartMatchingUserEntityName: () => SignInResolver; - emailMatchingUserEntityProfileEmail: () => SignInResolver; - emailMatchingUserEntityAnnotation(): SignInResolver; + emailMatchingUserEntityProfileEmail: () => SignInResolver_2; + emailLocalPartMatchingUserEntityName: () => SignInResolver_2; + emailMatchingUserEntityAnnotation: () => SignInResolver_2; }>; }>; oauth2: Readonly<{ diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index 34139593d3..44848bf653 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -180,18 +180,6 @@ export interface Config { }; }; /** @visibility frontend */ - microsoft?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - tenantId: string; - callbackUrl?: string; - }; - }; - /** @visibility frontend */ onelogin?: { [authEnv: string]: { clientId: string; diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index f05551736a..0cc72db917 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -43,6 +43,7 @@ "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^", "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", + "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^", "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^", diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts deleted file mode 100644 index dee37f0f6b..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2023 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 { FakeMicrosoftAPI } from './fake'; - -describe('FakeMicrosoftAPI', () => { - const api = new FakeMicrosoftAPI(); - - describe('#token', () => { - it('exchanges auth codes', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('supports scopes for the first requested audience only', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('someaudience/somescope User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(false); - }); - - it('special openid scopes do not count towards the 1-audience limit', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('openid offline_access User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('refreshes tokens', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'refresh_token', - refresh_token: api.generateRefreshToken( - 'email openid profile User.Read', - ), - }), - ); - - expect( - api.tokenHasScope(access_token, 'email openid profile User.Read'), - ).toBe(true); - }); - it('requires `openid` scope for ID token', () => { - const { id_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(id_token).toBeUndefined(); - }); - it('requires `offline_access` scope for refresh token', () => { - const { refresh_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(refresh_token).toBeUndefined(); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts deleted file mode 100644 index 9b3ca09c57..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2023 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 { decodeJwt } from 'jose'; - -type Claims = { aud: string; scp: string }; - -export class FakeMicrosoftAPI { - generateAccessToken(scope: string): string { - return this.tokenWithClaims(this.allClaimsForScope(scope)).access_token; - } - generateAuthCode(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - generateRefreshToken(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - token(formData: URLSearchParams): { - access_token: string; - scope: string; - refresh_token?: string; - id_token?: string; - } { - const scopeParameter = formData.get('scope'); - const claims = - (scopeParameter && this.allClaimsForScope(scopeParameter)) ?? - formData.get('grant_type') === 'refresh_token' - ? this.decodeClaims(formData.get('refresh_token')!) - : this.decodeClaims(formData.get('code')!); - return { - ...this.tokenWithClaims(claims), - ...(this.hasScope(claims, 'offline_access') && { - refresh_token: this.encodeClaims(claims), - }), - ...(this.hasScope(claims, 'openid') && { - id_token: 'header.e30K.microsoft', - }), - }; - } - tokenHasScope(token: string, scope: string): boolean { - const { aud, scp } = decodeJwt(token); - return this.hasScope({ aud: aud as string, scp: scp as string }, scope); - } - private tokenWithClaims(claims: Claims): { - access_token: string; - scope: string; - } { - const filteredClaims = { - ...claims, - scp: claims.scp - .split(' ') - .filter(s => s !== 'offline_access') - .join(' '), - }; - return { - access_token: `header.${Buffer.from( - JSON.stringify(filteredClaims), - ).toString('base64')}.signature`, - scope: this.scopeFromClaims(filteredClaims), - }; - } - private allClaimsForScope(scope: string): Claims { - const scopes = scope.split(' ').map(this.parseScope); - const firstAudience = scopes - .map(({ aud }) => aud) - .find(aud => aud !== 'openid'); - return { - aud: firstAudience ?? '00000003-0000-0000-c000-000000000000', - scp: scopes - .filter(({ aud }) => aud === 'openid' || aud === firstAudience) - .map(({ scp }) => scp) - .join(' '), - }; - } - // auth codes and refresh tokens in this fake system are base64-encoded JSON - // strings of claims - private encodeClaims(claims: Claims): string { - return Buffer.from(JSON.stringify(claims)).toString('base64'); - } - private decodeClaims(encoded: string): Claims { - return JSON.parse(Buffer.from(encoded, 'base64').toString()); - } - private hasScope(claims: Claims, scope: string): boolean { - return this.scopeFromClaims(claims).includes(scope); - } - private parseScope(s: string): Claims { - if (s.includes('/')) { - const [aud, scp] = s.split('/'); - return { aud, scp }; - } - switch (s) { - case 'email': - case 'openid': - case 'offline_access': - case 'profile': { - return { aud: 'openid', scp: s }; - } - default: - return { aud: '00000003-0000-0000-c000-000000000000', scp: s }; - } - } - private scopeFromClaims(claims: Claims): string { - return claims.scp - .split(' ') - .map(this.parseScope) - .map(({ aud, scp }) => - aud === 'openid' || - claims.aud === '00000003-0000-0000-c000-000000000000' - ? scp - : `${claims.aud}/${scp}`, - ) - .join(' '); - } -} diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts deleted file mode 100644 index 7bbfd085d6..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright 2020 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 { microsoft } from './provider'; -import { getVoidLogger } from '@backstage/backend-common'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import { ConfigReader } from '@backstage/config'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { AuthProviderRouteHandlers, AuthResolverContext } from '../types'; -import express from 'express'; -import crypto from 'crypto'; -import { FakeMicrosoftAPI } from './__testUtils__/fake'; - -describe('MicrosoftAuthProvider', () => { - const nonce = 'AAAAAAAAAAAAAAAAAAAAAA=='; // 16 bytes of zeros in base64 - const state = Buffer.from( - `nonce=${encodeURIComponent(nonce)}&env=development`, - ).toString('hex'); - const mockBackstageToken = `header.${Buffer.from( - JSON.stringify({ sub: 'user:default/mock' }), - 'utf8', - ).toString('base64')}.backstage`; - - const server = setupServer(); - const microsoftApi = new FakeMicrosoftAPI(); - let provider: AuthProviderRouteHandlers; - let response: jest.Mocked; - - setupRequestMockHandlers(server); - - beforeEach(() => { - provider = microsoft.create({ - signIn: { - resolver: microsoft.resolvers.emailMatchingUserEntityAnnotation(), - }, - })({ - providerId: 'microsoft', - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - globalConfig: { - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - }, - config: new ConfigReader({ - development: { - tenantId: 'tenantId', - clientId: 'clientId', - clientSecret: 'clientSecret', - }, - }), - logger: getVoidLogger(), - resolverContext: { - issueToken: jest.fn(), - findCatalogUser: jest.fn(), - signInWithCatalogUser: async _ => ({ - token: mockBackstageToken, - }), - } as AuthResolverContext, - }) as AuthProviderRouteHandlers; - - server.use( - rest.post( - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/token', - async (req, res, ctx) => { - return res( - ctx.json({ - ...microsoftApi.token(new URLSearchParams(await req.text())), - token_type: 'Bearer', - expires_in: 123, - ext_expires_in: 123, - }), - ); - }, - ), - rest.get('https://graph.microsoft.com/v1.0/me/', (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - return res( - ctx.json({ - id: 'conrad', - displayName: 'Conrad', - surname: 'Ribas', - givenName: 'Francisco', - mail: 'conrad@example.com', - }), - ); - }), - rest.get( - 'https://graph.microsoft.com/v1.0/me/photos/*', - async (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; - return res( - ctx.set('Content-Length', imageBuffer.byteLength.toString()), - ctx.set('Content-Type', 'image/jpeg'), - ctx.body(imageBuffer), - ); - }, - ), - ); - response = { - cookie: jest.fn(), - end: jest.fn(), - json: jest.fn(), - setHeader: jest.fn(), - status: jest.fn(), - } as unknown as jest.Mocked; - response.status.mockReturnValue(response); - }); - - describe('#start', () => { - const randomBytes = jest.spyOn( - crypto, - 'randomBytes', - ) as unknown as jest.MockedFunction<(size: number) => Buffer>; - - afterEach(() => { - randomBytes.mockRestore(); - }); - - it('redirects to authorize URL', async () => { - randomBytes.mockReturnValue(Buffer.from(nonce, 'base64')); - - await provider.start( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - } as unknown as express.Request, - response, - ); - - expect(response.setHeader).toHaveBeenCalledWith( - 'Location', - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize' + - '?response_type=code' + - `&redirect_uri=${encodeURIComponent( - 'http://backstage.test/api/auth/microsoft/handler/frame', - )}` + - `&scope=${encodeURIComponent('email openid profile User.Read')}` + - `&state=${state}` + - '&client_id=clientId', - ); - }); - }); - - describe('#handle', () => { - it('returns provider info and profile with photo data', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode('aks-audience/user.read'), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - scope: 'aks-audience/user.read', - expiresInSeconds: 123, - }, - profile: {}, - }, - }), - ), - ), - ); - }); - - it('sets refresh token', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email offline_access openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.cookie).toHaveBeenCalledWith( - 'microsoft-refresh-token', - microsoftApi.generateRefreshToken( - 'email offline_access openid profile User.Read', - ), - { - domain: 'backstage.test', - httpOnly: true, - maxAge: 86400000000, - path: '/api/auth/microsoft', - sameSite: 'lax', - secure: false, - }, - ); - }); - - it('omits photo data when fetching it fails', async () => { - server.use( - rest.get('https://graph.microsoft.com/v1.0/me/photos/*', (_, res) => - res.networkError('remote hung up'), - ), - ); - - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - }); - - describe('#refresh', () => { - it('returns provider info and profile with photo data', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - }), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'aks-audience/user.read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'aks-audience/user.read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - expiresInSeconds: 123, - scope: 'aks-audience/user.read', - }, - profile: {}, - }); - }); - - it('returns backstage identity', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - backstageIdentity: expect.objectContaining({ - token: mockBackstageToken, - }), - }), - ); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 8fc8459f10..8947c7432b 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -14,218 +14,25 @@ * limitations under the License. */ -import express from 'express'; -import passport from 'passport'; -import { Strategy as MicrosoftStrategy } from 'passport-microsoft'; -import { - encodeState, - OAuthAdapter, - OAuthEnvironmentHandler, - OAuthHandlers, - OAuthProviderOptions, - OAuthRefreshRequest, - OAuthResponse, - OAuthResult, - OAuthStartRequest, -} from '../../lib/oauth'; -import { - executeFetchUserProfileStrategy, - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - OAuthStartResponse, - SignInResolver, - AuthResolverContext, -} from '../types'; +import { SignInResolver, AuthHandler } from '../types'; +import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import fetch from 'node-fetch'; -import { decodeJwt } from 'jose'; -import { Profile as PassportProfile } from 'passport'; -import { BACKSTAGE_SESSION_EXPIRATION } from '../../lib/session'; - -type PrivateInfo = { - refreshToken: string; -}; - -type Options = OAuthProviderOptions & { - signInResolver?: SignInResolver; - authHandler: AuthHandler; - logger: LoggerService; - resolverContext: AuthResolverContext; - authorizationUrl?: string; - tokenUrl?: string; -}; - -export class MicrosoftAuthProvider implements OAuthHandlers { - private readonly _strategy: MicrosoftStrategy; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly logger: LoggerService; - private readonly resolverContext: AuthResolverContext; - - constructor(options: Options) { - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.logger = options.logger; - this.resolverContext = options.resolverContext; - - this._strategy = new MicrosoftStrategy( - { - clientID: options.clientId, - clientSecret: options.clientSecret, - callbackURL: options.callbackUrl, - authorizationURL: options.authorizationUrl, - tokenURL: options.tokenUrl, - passReqToCallback: false, - skipUserProfile: ( - accessToken: string, - done: (err: unknown, skip: boolean) => void, - ) => { - done(null, this.skipUserProfile(accessToken)); - }, - }, - ( - accessToken: any, - refreshToken: any, - params: any, - fullProfile: passport.Profile, - done: PassportDoneCallback, - ) => { - done(undefined, { fullProfile, accessToken, params }, { refreshToken }); - }, - ); - } - - private skipUserProfile = (accessToken: string): boolean => { - const { aud, scp } = decodeJwt(accessToken); - const hasGraphReadScope = - aud === '00000003-0000-0000-c000-000000000000' && - (scp as string) - .split(' ') - .map(s => s.toLowerCase()) - .includes('user.read'); - return !hasGraphReadScope; - }; - - async start(req: OAuthStartRequest): Promise { - return await executeRedirectStrategy(req, this._strategy, { - scope: req.scope, - state: encodeState(req.state), - }); - } - - async handler(req: express.Request) { - const { result, privateInfo } = await executeFrameHandlerStrategy< - OAuthResult, - PrivateInfo - >(req, this._strategy); - - return { - response: await this.handleResult(result), - refreshToken: privateInfo.refreshToken, - }; - } - - async refresh(req: OAuthRefreshRequest) { - const { accessToken, refreshToken, params } = - await executeRefreshTokenStrategy( - this._strategy, - req.refreshToken, - req.scope, - ); - - return { - response: await this.handleResult({ - params, - accessToken, - ...(!this.skipUserProfile(accessToken) && { - fullProfile: await executeFetchUserProfileStrategy( - this._strategy, - accessToken, - ), - }), - }), - refreshToken, - }; - } - - private async handleResult(result: { - fullProfile?: PassportProfile; - params: { - id_token?: string; - scope: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; - }): Promise { - let profile = {}; - if (result.fullProfile) { - const photo = await this.getUserPhoto(result.accessToken); - result.fullProfile.photos = photo ? [{ value: photo }] : undefined; - ({ profile } = await this.authHandler( - result as OAuthResult, - this.resolverContext, - )); - } - - const expiresInSeconds = - result.params.expires_in === undefined - ? BACKSTAGE_SESSION_EXPIRATION - : Math.min(result.params.expires_in, BACKSTAGE_SESSION_EXPIRATION); - - return { - providerInfo: { - accessToken: result.accessToken, - scope: result.params.scope, - expiresInSeconds, - ...{ idToken: result.params.id_token }, - }, - profile, - ...(result.fullProfile && - this.signInResolver && { - backstageIdentity: await this.signInResolver( - { result: result as OAuthResult, profile }, - this.resolverContext, - ), - }), - }; - } - - private async getUserPhoto(accessToken: string): Promise { - try { - const res = await fetch( - 'https://graph.microsoft.com/v1.0/me/photos/48x48/$value', - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - const data = await res.buffer(); - - return `data:image/jpeg;base64,${data.toString('base64')}`; - } catch (error) { - this.logger.warn( - `Could not retrieve user profile photo from Microsoft Graph API: ${error}`, - ); - return undefined; - } - } -} + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, + adaptOAuthSignInResolverToLegacy, +} from '../../lib/legacy'; +import { + microsoftAuthenticator, + microsoftSignInResolvers, +} from '@backstage/plugin-auth-backend-module-microsoft-provider'; /** - * Auth provider integration for Microsoft auth + * Auth provider integration for GitLab auth * * @public */ @@ -241,75 +48,21 @@ export const microsoft = createAuthProviderIntegration({ * Configure sign-in for this provider, without it the provider can not be used to sign users in. */ signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ resolver: SignInResolver; }; }) { - return ({ providerId, globalConfig, config, logger, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const tenantId = envConfig.getString('tenantId'); - - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - const authorizationUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`; - const tokenUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`; - - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ fullProfile, params }) => ({ - profile: makeProfileInfo(fullProfile ?? {}, params.id_token), - }); - - const provider = new MicrosoftAuthProvider({ - clientId, - clientSecret, - callbackUrl, - authorizationUrl, - tokenUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - logger, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); - }, - resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, - /** - * Looks up the user by matching their email to the `microsoft.com/email` annotation. - */ - emailMatchingUserEntityAnnotation(): SignInResolver { - return async (info, ctx) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Microsoft profile contained no email'); - } - - return ctx.signInWithCatalogUser({ - annotations: { - 'microsoft.com/email': profile.email, - }, - }); - }; - }, + return createOAuthProviderFactory({ + authenticator: microsoftAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, + resolvers: adaptOAuthSignInResolverToLegacy({ + emailLocalPartMatchingUserEntityName: + commonSignInResolvers.emailLocalPartMatchingUserEntityName(), + emailMatchingUserEntityProfileEmail: + commonSignInResolvers.emailMatchingUserEntityProfileEmail(), + emailMatchingUserEntityAnnotation: + microsoftSignInResolvers.emailMatchingUserEntityAnnotation(), + }), }); diff --git a/yarn.lock b/yarn.lock index ce3c3512b8..fa69052d87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4724,7 +4724,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": +"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:^, @backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider" dependencies: @@ -4854,6 +4854,7 @@ __metadata: "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^" "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" + "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^" "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^" From e9cdfd382059e959bc03188c50db7e51a79f4fb2 Mon Sep 17 00:00:00 2001 From: Erik Minekus Date: Sun, 14 Jan 2024 15:41:35 +0100 Subject: [PATCH 026/129] Add changeset Signed-off-by: Erik Minekus --- .changeset/ten-planets-guess.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/ten-planets-guess.md diff --git a/.changeset/ten-planets-guess.md b/.changeset/ten-planets-guess.md new file mode 100644 index 0000000000..c8510dc6b2 --- /dev/null +++ b/.changeset/ten-planets-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': patch +--- + +Fix typo in VisitsStorageApi From 1dcaccf5d3b77442cf9e4c8d12970551ba7600d0 Mon Sep 17 00:00:00 2001 From: Daniel Doberenz Date: Mon, 15 Jan 2024 10:09:45 +0100 Subject: [PATCH 027/129] Installed loadash to plugin Signed-off-by: Daniel Doberenz --- plugins/auth-backend-module-microsoft-provider/package.json | 4 ++-- yarn.lock | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 027d112c0d..8ed7533463 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -28,10 +28,10 @@ "@backstage/plugin-auth-node": "workspace:^", "express": "^4.18.2", "jose": "^4.6.0", + "lodash": "^4.17.21", "node-fetch": "^2.6.7", "passport": "^0.6.0", - "passport-microsoft": "^1.0.0", - "lodash": "^4.17.21" + "passport-microsoft": "^1.0.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 6c8f6e2b0f..9b0479ea9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4994,6 +4994,7 @@ __metadata: "@types/passport-microsoft": ^1.0.0 express: ^4.18.2 jose: ^4.6.0 + lodash: ^4.17.21 msw: ^1.0.0 node-fetch: ^2.6.7 passport: ^0.6.0 From 7271ed37620633f3bf82646bf65bbc82d8bc1718 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 16 Jan 2024 13:13:02 +0100 Subject: [PATCH 028/129] core-compact-api: convertLegacyApp throws in case of invalid elements are found Signed-off-by: Vincenzo Scamporlino --- .../src/collectLegacyRoutes.test.tsx | 54 +++++++++++++++++++ .../src/collectLegacyRoutes.tsx | 10 ++-- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx index 240aa33e2c..b99d581983 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx @@ -279,4 +279,58 @@ describe('collectLegacyRoutes', () => { screen.findByText('plugins: test'), ).resolves.toBeInTheDocument(); }); + + it('should throw if invalid Route has been detected', async () => { + const plugin = createPlugin({ + id: 'test', + }); + const routeRef = createRouteRef({ id: 'test' }); + const Page = plugin.provide( + createRoutableExtension({ + name: 'Test', + mountPoint: routeRef, + component: () => + Promise.resolve(() => { + const app = useApp(); + return
plugins: {app.getPlugins().map(p => p.getId())}
; + }), + }), + ); + + expect(() => + collectLegacyRoutes( + + } /> + } /> +
+ , + ), + ).toThrow(/Invalid has no path', async () => { + const plugin = createPlugin({ + id: 'test', + }); + const routeRef = createRouteRef({ id: 'test' }); + const Page = plugin.provide( + createRoutableExtension({ + name: 'Test', + mountPoint: routeRef, + component: () => + Promise.resolve(() => { + const app = useApp(); + return
plugins: {app.getPlugins().map(p => p.getId())}
; + }), + }), + ); + + expect(() => + collectLegacyRoutes( + + } /> + , + ), + ).toThrow(/ element with invalid path/); + }); }); diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index 4d560b81d5..847c0805cb 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -173,9 +173,8 @@ export function collectLegacyRoutes( (route: ReactNode) => { // TODO(freben): Handle feature flag and permissions framework wrapper elements if (!React.isValidElement(route) || route.type !== Route) { - return; + throw new Error('Invalid element has been detected.'); } - const routeElement = route.props.element; const path: string | undefined = route.props.path; const plugin = getComponentData( @@ -186,7 +185,12 @@ export function collectLegacyRoutes( routeElement, 'core.mountPoint', ); - if (!plugin || !path) { + if (path === undefined) { + throw new Error( + ` element with invalid path has been detected. Please make sure to pass the path's props`, + ); + } + if (!plugin) { return; } From 1184990aad38983137be735d874d86460f87e2f1 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 16 Jan 2024 13:14:27 +0100 Subject: [PATCH 029/129] core-compact-api: add collectLegacyRoutes changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/wet-emus-work.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/wet-emus-work.md diff --git a/.changeset/wet-emus-work.md b/.changeset/wet-emus-work.md new file mode 100644 index 0000000000..413670a325 --- /dev/null +++ b/.changeset/wet-emus-work.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-compat-api': patch +--- + +collectLegacyRoutes throws in case invalid element is found From 57c115c86b29eb18d84a70f646996d123f24ba30 Mon Sep 17 00:00:00 2001 From: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> Date: Tue, 16 Jan 2024 14:00:49 -0600 Subject: [PATCH 030/129] Update docs/integrations/github/github-apps.md Co-authored-by: Frank Kong <50030060+Zaperex@users.noreply.github.com> Signed-off-by: Jake Taylor <147415933+jrtaylorJH@users.noreply.github.com> --- docs/integrations/github/github-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index bdff95c8e9..96363bc719 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -147,5 +147,5 @@ integration: This message tends to wrap a `NotFoundError: No app installation found` under the hood, which is the result of not installing the app in your organization. Even if created via the `backstage-cli` as a member and app manager of your organization, the app will not automatically install. You -must posses the `Owner` role in the organization to see the `Install` menu under your +must possess the `Owner` role in the organization to see the `Install` menu under your app settings, then manually press `Install` to authorize the application. From f89777d76f7d2811a2afc6ae2c7853ed6b5c4110 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Fri, 8 Sep 2023 10:59:17 -0400 Subject: [PATCH 031/129] WIP:Copying gitlab folder into new oidc module Signed-off-by: Ruben Vallejo --- .../.eslintrc.js | 1 + .../README.md | 8 ++ .../catalog-info.yaml | 10 +++ .../config.d.ts | 34 ++++++++ .../dev/index.ts | 26 ++++++ .../package.json | 45 +++++++++++ .../src/authenticator.ts | 77 ++++++++++++++++++ .../src/index.ts | 25 ++++++ .../src/module.test.ts | 79 +++++++++++++++++++ .../src/module.ts | 48 +++++++++++ .../src/resolvers.ts | 50 ++++++++++++ .../src/types.d.ts | 25 ++++++ 12 files changed, 428 insertions(+) create mode 100644 plugins/auth-backend-module-oidc-provider/.eslintrc.js create mode 100644 plugins/auth-backend-module-oidc-provider/README.md create mode 100644 plugins/auth-backend-module-oidc-provider/catalog-info.yaml create mode 100644 plugins/auth-backend-module-oidc-provider/config.d.ts create mode 100644 plugins/auth-backend-module-oidc-provider/dev/index.ts create mode 100644 plugins/auth-backend-module-oidc-provider/package.json create mode 100644 plugins/auth-backend-module-oidc-provider/src/authenticator.ts create mode 100644 plugins/auth-backend-module-oidc-provider/src/index.ts create mode 100644 plugins/auth-backend-module-oidc-provider/src/module.test.ts create mode 100644 plugins/auth-backend-module-oidc-provider/src/module.ts create mode 100644 plugins/auth-backend-module-oidc-provider/src/resolvers.ts create mode 100644 plugins/auth-backend-module-oidc-provider/src/types.d.ts diff --git a/plugins/auth-backend-module-oidc-provider/.eslintrc.js b/plugins/auth-backend-module-oidc-provider/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend-module-oidc-provider/README.md b/plugins/auth-backend-module-oidc-provider/README.md new file mode 100644 index 0000000000..968c8a57dd --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/README.md @@ -0,0 +1,8 @@ +# Auth Module: GitLab Provider + +This module provides an GitLab auth provider implementation for `@backstage/plugin-auth-backend`. + +## Links + +- [Repository](https://oidc.com/backstage/backstage/tree/master/plugins/auth-backend-module-oidc-provider) +- [Backstage Project Homepage](https://backstage.io) diff --git a/plugins/auth-backend-module-oidc-provider/catalog-info.yaml b/plugins/auth-backend-module-oidc-provider/catalog-info.yaml new file mode 100644 index 0000000000..896738898b --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-oidc-provider + title: '@backstage/plugin-auth-backend-module-oidc-provider' + description: The oidc-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-oidc-provider/config.d.ts b/plugins/auth-backend-module-oidc-provider/config.d.ts new file mode 100644 index 0000000000..ba141d9555 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/config.d.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2020 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. + */ + +export interface Config { + auth?: { + providers?: { + /** @visibility frontend */ + oidc?: { + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + audience?: string; + callbackUrl?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-oidc-provider/dev/index.ts b/plugins/auth-backend-module-oidc-provider/dev/index.ts new file mode 100644 index 0000000000..4d027a19c2 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/dev/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2023 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'; +import { authPlugin } from '@backstage/plugin-auth-backend'; +import { authModuleOidcProvider } from '../src'; + +const backend = createBackend(); + +backend.add(authPlugin); +backend.add(authModuleOidcProvider); + +backend.start(); diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json new file mode 100644 index 0000000000..4bb750cd3f --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/plugin-auth-backend-module-oidc-provider", + "description": "The oidc-provider backend module for the auth plugin.", + "version": "0.1.0-next.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "express": "^4.18.2", + "passport": "^0.6.0", + "passport-oidc2": "^5.0.0" + }, + "devDependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "supertest": "^6.3.3" + }, + "configSchema": "config.d.ts", + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts new file mode 100644 index 0000000000..a68b7b269d --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -0,0 +1,77 @@ +/* + * Copyright 2023 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 { Strategy as GitlabStrategy } from 'passport-oidc2'; +import { + createOAuthAuthenticator, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; + +/** @public */ +export const oidcAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: + PassportOAuthAuthenticatorHelper.defaultProfileTransform, + initialize({ callbackUrl, config }) { + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const baseUrl = + config.getOptionalString('audience') || 'https://oidc.com'; + + return PassportOAuthAuthenticatorHelper.from( + new GitlabStrategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + baseURL: baseUrl, + authorizationURL: `${baseUrl}/oauth/authorize`, + tokenURL: `${baseUrl}/oauth/token`, + profileURL: `${baseUrl}/api/v4/user`, + }, + ( + accessToken: string, + refreshToken: string, + params: any, + fullProfile: PassportProfile, + done: PassportOAuthDoneCallback, + ) => { + done( + undefined, + { fullProfile, params, accessToken }, + { refreshToken }, + ); + }, + ), + ); + }, + + async start(input, helper) { + return helper.start(input, { + accessType: 'offline', + prompt: 'consent', + }); + }, + + async authenticate(input, helper) { + return helper.authenticate(input); + }, + + async refresh(input, helper) { + return helper.refresh(input); + }, +}); diff --git a/plugins/auth-backend-module-oidc-provider/src/index.ts b/plugins/auth-backend-module-oidc-provider/src/index.ts new file mode 100644 index 0000000000..4b5ddc123a --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 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. + */ + +/** + * The oidc-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { oidcAuthenticator } from './authenticator'; +export { authModuleOidcProvider } from './module'; +export { oidcSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts new file mode 100644 index 0000000000..a8e19e362a --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -0,0 +1,79 @@ +/* + * Copyright 2023 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 { authPlugin } from '@backstage/plugin-auth-backend'; +import { authModuleOidcProvider } from './module'; +import request from 'supertest'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; + +describe('authModuleOidcProvider', () => { + it('should start', async () => { + const { server } = await startTestBackend({ + features: [ + authPlugin, + authModuleOidcProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + providers: { + oidc: { + development: { + clientId: 'my-client-id', + clientSecret: 'my-client-secret', + }, + }, + }, + }, + }, + }), + ], + }); + + const agent = request.agent(server); + + const res = await agent.get('/api/auth/oidc/start?env=development'); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('oidc-nonce', { + domain: 'localhost', + path: '/api/auth/oidc/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://oidc.com'); + expect(startUrl.pathname).toBe('/oauth/authorize'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + response_type: 'code', + scope: 'read_user', + client_id: 'my-client-id', + redirect_uri: `http://localhost:${server.port()}/api/auth/oidc/handler/frame`, + state: expect.any(String), + }); + + expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ + env: 'development', + nonce: decodeURIComponent(nonceCookie.value), + }); + }); +}); diff --git a/plugins/auth-backend-module-oidc-provider/src/module.ts b/plugins/auth-backend-module-oidc-provider/src/module.ts new file mode 100644 index 0000000000..790d522494 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/module.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2023 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 { createBackendModule } from '@backstage/backend-plugin-api'; +import { + authProvidersExtensionPoint, + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { gitlabAuthenticator } from './authenticator'; +import { gitlabSignInResolvers } from './resolvers'; + +/** @public */ +export const authModuleGitlabProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'gitlab-provider', + register(reg) { + reg.registerInit({ + deps: { + providers: authProvidersExtensionPoint, + }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'gitlab', + factory: createOAuthProviderFactory({ + authenticator: gitlabAuthenticator, + signInResolverFactories: { + ...gitlabSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-oidc-provider/src/resolvers.ts b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts new file mode 100644 index 0000000000..755ed08aa0 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts @@ -0,0 +1,50 @@ +/* + * Copyright 2023 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 { + createSignInResolverFactory, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the GitLab auth provider. + * + * @public + */ +export namespace gitlabSignInResolvers { + /** + * Looks up the user by matching their GitLab username to the entity name. + */ + export const usernameMatchingUserEntityName = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { result } = info; + + const id = result.fullProfile.username; + if (!id) { + throw new Error(`GitLab user profile does not contain a username`); + } + + return ctx.signInWithCatalogUser({ entityRef: { name: id } }); + }; + }, + }); +} diff --git a/plugins/auth-backend-module-oidc-provider/src/types.d.ts b/plugins/auth-backend-module-oidc-provider/src/types.d.ts new file mode 100644 index 0000000000..96535294ee --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/types.d.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2020 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. + */ + +declare module 'passport-gitlab2' { + import { Request } from 'express'; + import { StrategyCreated } from 'passport'; + + export class Strategy { + constructor(options: any, verify: any); + authenticate(this: StrategyCreated, req: Request, options?: any): any; + } +} From c541201b1b2856b1cde74a079d90aad7bcad51a4 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Mon, 18 Sep 2023 11:38:10 -0400 Subject: [PATCH 032/129] WIP: oidc auth provider module migration Signed-off-by: Ruben Vallejo --- .../README.md | 4 +- .../package.json | 12 +- .../src/authenticator.ts | 100 ++++++--- .../src/module.test.ts | 211 +++++++++++++++--- .../src/module.ts | 14 +- .../src/resolvers.ts | 29 ++- .../src/types.d.ts | 25 --- yarn.lock | 54 +++++ 8 files changed, 352 insertions(+), 97 deletions(-) delete mode 100644 plugins/auth-backend-module-oidc-provider/src/types.d.ts diff --git a/plugins/auth-backend-module-oidc-provider/README.md b/plugins/auth-backend-module-oidc-provider/README.md index 968c8a57dd..e586f32fd7 100644 --- a/plugins/auth-backend-module-oidc-provider/README.md +++ b/plugins/auth-backend-module-oidc-provider/README.md @@ -1,6 +1,6 @@ -# Auth Module: GitLab Provider +# Auth Module: Oidc Provider -This module provides an GitLab auth provider implementation for `@backstage/plugin-auth-backend`. +This module provides an Oidc auth provider implementation for `@backstage/plugin-auth-backend`. ## Links diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index 4bb750cd3f..09bd1033a0 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -25,16 +25,22 @@ "dependencies": { "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "express": "^4.18.2", - "passport": "^0.6.0", - "passport-oidc2": "^5.0.0" + "openid-client": "^5.5.0", + "passport": "^0.6.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@backstage/plugin-auth-backend": "workspace:^", + "@backstage/config": "workspace:^", + "cookie-parser": "^1.4.6", + "express-promise-router": "^4.1.1", + "express-session": "^1.17.3", + "jose": "^4.14.6", + "msw": "^1.3.1", "supertest": "^6.3.3" }, "configSchema": "config.d.ts", diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts index a68b7b269d..7a7d57d7e2 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -14,64 +14,110 @@ * limitations under the License. */ -import { Strategy as GitlabStrategy } from 'passport-oidc2'; +import { + Issuer, + ClientAuthMethod, + TokenSet, + UserinfoResponse, + Strategy as OidcStrategy, +} from 'openid-client'; import { createOAuthAuthenticator, + decodeOAuthState, + encodeOAuthState, + PassportDoneCallback, PassportOAuthAuthenticatorHelper, PassportOAuthDoneCallback, + PassportOAuthPrivateInfo, PassportProfile, } from '@backstage/plugin-auth-node'; +import { OidcAuthResult } from '@backstage/plugin-auth-backend'; /** @public */ export const oidcAuthenticator = createOAuthAuthenticator({ defaultProfileTransform: PassportOAuthAuthenticatorHelper.defaultProfileTransform, - initialize({ callbackUrl, config }) { + async initialize({ callbackUrl, config }) { const clientId = config.getString('clientId'); const clientSecret = config.getString('clientSecret'); - const baseUrl = - config.getOptionalString('audience') || 'https://oidc.com'; + const customCallbackUrl = config.getOptionalString('callbackUrl'); + const callbackUrl2 = customCallbackUrl || callbackUrl; + const metadataUrl = config.getString('metadataUrl'); + const tokenEndpointAuthMethod = config.getOptionalString( + 'tokenEndpointAuthMethod', + ) as ClientAuthMethod; + const tokenSignedResponseAlg = config.getOptionalString( + 'tokenSignedResponseAlg', + ); + const initializedScope = config.getOptionalString('scope'); + const initializedPrompt = config.getOptionalString('prompt'); + const issuer = await Issuer.discover( + `${metadataUrl}/.well-known/openid-configuration`, + ); + const client = new issuer.Client({ + access_type: 'offline', // this option must be passed to provider to receive a refresh token + client_id: clientId, + client_secret: clientSecret, + redirect_uris: [callbackUrl2], + response_types: ['code'], + token_endpoint_auth_method: + tokenEndpointAuthMethod || 'client_secret_basic', + id_token_signed_response_alg: tokenSignedResponseAlg || 'RS256', + scope: initializedScope || '', + }); - return PassportOAuthAuthenticatorHelper.from( - new GitlabStrategy( + const helper = PassportOAuthAuthenticatorHelper.from( + new OidcStrategy( { - clientID: clientId, - clientSecret: clientSecret, - callbackURL: callbackUrl, - baseURL: baseUrl, - authorizationURL: `${baseUrl}/oauth/authorize`, - tokenURL: `${baseUrl}/oauth/token`, - profileURL: `${baseUrl}/api/v4/user`, + client, + passReqToCallback: false, }, ( - accessToken: string, - refreshToken: string, - params: any, - fullProfile: PassportProfile, - done: PassportOAuthDoneCallback, + tokenset: TokenSet, + userinfo: UserinfoResponse, + done: PassportDoneCallback, ) => { + if (typeof done !== 'function') { + throw new Error( + 'OIDC IdP must provide a userinfo_endpoint in the metadata response', + ); + } done( undefined, - { fullProfile, params, accessToken }, - { refreshToken }, + { tokenset, userinfo }, + { + refreshToken: tokenset.refresh_token, + }, ); }, ), ); + + return { helper, client, initializedScope, initializedPrompt }; }, - async start(input, helper) { + async start(input, implementation) { + const { initializedScope, initializedPrompt, helper } = + await implementation; + const options: Record = { + scope: input.scope || initializedScope || 'openid profile email', + state: input.state, + }; + const prompt = initializedPrompt || 'none'; + if (prompt !== 'auto') { + options.prompt = prompt; + } + return helper.start(input, { - accessType: 'offline', - prompt: 'consent', + ...options, }); }, - async authenticate(input, helper) { - return helper.authenticate(input); + async authenticate(input, implementation) { + return (await implementation).helper.authenticate(input); }, - async refresh(input, helper) { - return helper.refresh(input); + async refresh(input, implementation) { + return (await implementation).helper.refresh(input); }, }); diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index a8e19e362a..406cc3229e 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -18,39 +18,190 @@ import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { authPlugin } from '@backstage/plugin-auth-backend'; import { authModuleOidcProvider } from './module'; import request from 'supertest'; -import { decodeOAuthState } from '@backstage/plugin-auth-node'; +import { + AuthProviderRouteHandlers, + AuthResolverContext, + createOAuthRouteHandlers, + decodeOAuthState, +} from '@backstage/plugin-auth-node'; +import { setupServer } from 'msw'; +import { ClientMetadata, IssuerMetadata } from 'openid-client'; +import { rest } from 'msw'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { Server } from 'http'; +import { AddressInfo } from 'net'; +import express from 'express'; +import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; +import cookieParser from 'cookie-parser'; +import passport from 'passport'; +import session from 'express-session'; +import { oidcAuthenticator } from './authenticator'; +import { ConfigReader } from '@backstage/config'; +import Router from 'express-promise-router'; describe('authModuleOidcProvider', () => { - it('should start', async () => { - const { server } = await startTestBackend({ - features: [ - authPlugin, - authModuleOidcProvider, - mockServices.rootConfig.factory({ - data: { - app: { - baseUrl: 'http://localhost:3000', - }, - auth: { - providers: { - oidc: { - development: { - clientId: 'my-client-id', - clientSecret: 'my-client-secret', - }, - }, - }, - }, - }, + let app: express.Express; + let backstageServer: Server; + let appUrl: string; + let providerRouteHandler: AuthProviderRouteHandlers; + let idToken: string; + let publicKey: JWK; + + const mswServer = setupServer(); + setupRequestMockHandlers(mswServer); + + const issuerMetadata = { + issuer: 'https://oidc.test', + authorization_endpoint: 'https://oidc.test/as/authorization.oauth2', + token_endpoint: 'https://oidc.test/as/token.oauth2', + revocation_endpoint: 'https://oidc.test/as/revoke_token.oauth2', + userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', + introspection_endpoint: 'https://oidc.test/as/introspect.oauth2', + jwks_uri: 'https://oidc.test/pf/JWKS', + scopes_supported: ['openid'], + claims_supported: ['email'], + response_types_supported: ['code'], + id_token_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], + token_endpoint_auth_signing_alg_values_supported: [ + 'RS256', + 'RS512', + 'HS256', + ], + request_object_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], + }; + + const clientMetadata = { + authHandler: async input => ({ + profile: { + displayName: input.userinfo.email, + }, + }), + resolverContext: {} as AuthResolverContext, + callbackUrl: 'https://oidc.test/callback', + clientId: 'testclientid', + clientSecret: 'testclientsecret', + metadataUrl: 'https://oidc.test/.well-known/openid-configuration', + tokenEndpointAuthMethod: 'none', + tokenSignedResponseAlg: 'none', + }; + + beforeAll(async () => { + const keyPair = await generateKeyPair('ES256'); + const privateKey = await exportJWK(keyPair.privateKey); + publicKey = await exportJWK(keyPair.publicKey); + publicKey.alg = privateKey.alg = 'ES256'; + + idToken = await new SignJWT({ + sub: 'test', + iss: 'https://pinniped.test', + iat: Date.now(), + aud: 'clientId', + exp: Date.now() + 10000, + }) + .setProtectedHeader({ alg: privateKey.alg, kid: privateKey.kid }) + .sign(keyPair.privateKey); + }); + + beforeEach(async () => { + jest.clearAllMocks(); + + mswServer.use( + rest.get( + 'https://oidc.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ), + ), + rest.get('https://oidc.test/oauth2/authorize', async (req, res, ctx) => { + const callbackUrl = new URL(req.url.searchParams.get('redirect_uri')!); + callbackUrl.searchParams.set('code', 'authorization_code'); + callbackUrl.searchParams.set( + 'state', + req.url.searchParams.get('state')!, + ); + callbackUrl.searchParams.set('scope', 'test-scope'); + return res( + ctx.status(302), + ctx.set('Location', callbackUrl.toString()), + ); + }), + ); + + const secret = 'secret'; + app = express() + .use(cookieParser(secret)) + .use( + session({ + secret, + saveUninitialized: false, + resave: false, + cookie: { secure: false }, }), - ], + ) + .use(passport.initialize()) + .use(passport.session()); + await new Promise(resolve => { + backstageServer = app.listen(0, '0.0.0.0', () => { + appUrl = `http://127.0.0.1:${ + (backstageServer.address() as AddressInfo).port + }`; + resolve(null); + }); }); - const agent = request.agent(server); + mswServer.use(rest.all(`${appUrl}/*`, req => req.passthrough())); - const res = await agent.get('/api/auth/oidc/start?env=development'); + providerRouteHandler = createOAuthRouteHandlers({ + authenticator: oidcAuthenticator, + appUrl, + baseUrl: `${appUrl}/api/auth`, + isOriginAllowed: _ => true, + providerId: 'oidc', + config: new ConfigReader({ + metadataUrl: 'https://oidc.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + resolverContext: { + issueToken: async _ => ({ token: '' }), + findCatalogUser: async _ => ({ + entity: { + apiVersion: '', + kind: '', + metadata: { name: '' }, + }, + }), + signInWithCatalogUser: async _ => ({ token: '' }), + }, + }); - expect(res.status).toEqual(302); + const router = Router(); + router + .use( + '/api/auth/pinniped/start', + providerRouteHandler.start.bind(providerRouteHandler), + ) + .use( + '/api/auth/pinniped/handler/frame', + providerRouteHandler.frameHandler.bind(providerRouteHandler), + ); + app.use(router); + }); + + afterEach(() => { + backstageServer.close(); + }); + + it('should start', async () => { + const agent = request.agent(''); + + const startResponse = await agent.get( + `${appUrl}/api/auth/oidc/start?env=development`, + ); + expect(startResponse.status).toEqual(302); const nonceCookie = agent.jar.getCookie('oidc-nonce', { domain: 'localhost', @@ -60,14 +211,16 @@ describe('authModuleOidcProvider', () => { }); expect(nonceCookie).toBeDefined(); - const startUrl = new URL(res.get('location')); + const startUrl = new URL(startResponse.get('location')); expect(startUrl.origin).toBe('https://oidc.com'); expect(startUrl.pathname).toBe('/oauth/authorize'); expect(Object.fromEntries(startUrl.searchParams)).toEqual({ response_type: 'code', scope: 'read_user', client_id: 'my-client-id', - redirect_uri: `http://localhost:${server.port()}/api/auth/oidc/handler/frame`, + redirect_uri: `http://localhost:${ + (backstageServer.address() as AddressInfo).port + }/api/auth/oidc/handler/frame`, state: expect.any(String), }); @@ -75,5 +228,5 @@ describe('authModuleOidcProvider', () => { env: 'development', nonce: decodeURIComponent(nonceCookie.value), }); - }); + }, 70000); }); diff --git a/plugins/auth-backend-module-oidc-provider/src/module.ts b/plugins/auth-backend-module-oidc-provider/src/module.ts index 790d522494..5680cd8603 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.ts @@ -19,13 +19,13 @@ import { commonSignInResolvers, createOAuthProviderFactory, } from '@backstage/plugin-auth-node'; -import { gitlabAuthenticator } from './authenticator'; -import { gitlabSignInResolvers } from './resolvers'; +import { oidcAuthenticator } from './authenticator'; +import { oidcSignInResolvers } from './resolvers'; /** @public */ -export const authModuleGitlabProvider = createBackendModule({ +export const authModuleOidcProvider = createBackendModule({ pluginId: 'auth', - moduleId: 'gitlab-provider', + moduleId: 'oidc-provider', register(reg) { reg.registerInit({ deps: { @@ -33,11 +33,11 @@ export const authModuleGitlabProvider = createBackendModule({ }, async init({ providers }) { providers.registerProvider({ - providerId: 'gitlab', + providerId: 'oidc', factory: createOAuthProviderFactory({ - authenticator: gitlabAuthenticator, + authenticator: oidcAuthenticator, signInResolverFactories: { - ...gitlabSignInResolvers, + ...oidcSignInResolvers, ...commonSignInResolvers, }, }), diff --git a/plugins/auth-backend-module-oidc-provider/src/resolvers.ts b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts index 755ed08aa0..930ff462f2 100644 --- a/plugins/auth-backend-module-oidc-provider/src/resolvers.ts +++ b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts @@ -22,13 +22,13 @@ import { } from '@backstage/plugin-auth-node'; /** - * Available sign-in resolvers for the GitLab auth provider. + * Available sign-in resolvers for the Oidc auth provider. * * @public */ -export namespace gitlabSignInResolvers { +export namespace oidcSignInResolvers { /** - * Looks up the user by matching their GitLab username to the entity name. + * Looks up the user by matching their Oidc username to the entity name. */ export const usernameMatchingUserEntityName = createSignInResolverFactory({ create() { @@ -40,11 +40,32 @@ export namespace gitlabSignInResolvers { const id = result.fullProfile.username; if (!id) { - throw new Error(`GitLab user profile does not contain a username`); + throw new Error(`Oidc user profile does not contain a username`); } return ctx.signInWithCatalogUser({ entityRef: { name: id } }); }; }, }); + + /** + * Looks up the user by matching their email to the `google.com/email` annotation. Still working out this resolver..... + */ + export const emailMatchingUserEntityAnnotation = createSignInResolverFactory({ + create() { + return async (info: SignInInfo, ctx) => { + const email = info.result.iapToken.email; + + if (!email) { + throw new Error('Google IAP sign-in result is missing email'); + } + + return ctx.signInWithCatalogUser({ + annotations: { + 'google.com/email': email, + }, + }); + }; + }, + }); } diff --git a/plugins/auth-backend-module-oidc-provider/src/types.d.ts b/plugins/auth-backend-module-oidc-provider/src/types.d.ts deleted file mode 100644 index 96535294ee..0000000000 --- a/plugins/auth-backend-module-oidc-provider/src/types.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2020 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. - */ - -declare module 'passport-gitlab2' { - import { Request } from 'express'; - import { StrategyCreated } from 'passport'; - - export class Strategy { - constructor(options: any, verify: any); - authenticate(this: StrategyCreated, req: Request, options?: any): any; - } -} diff --git a/yarn.lock b/yarn.lock index 53cd19f848..6e6721b99e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4672,6 +4672,30 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + cookie-parser: ^1.4.6 + express: ^4.18.2 + express-promise-router: ^4.1.1 + express-session: ^1.17.3 + jose: ^4.14.6 + msw: ^1.3.1 + openid-client: ^5.5.0 + passport: ^0.6.0 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend-module-okta-provider@workspace:^, @backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider" @@ -31245,6 +31269,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^4.14.4": + version: 4.14.6 + resolution: "jose@npm:4.14.6" + checksum: eae81a234e7bf1446b1bd80722b3462b014e3835b155c3a7799c1c5043163a53a0dc28d347004151b031e6b7b863403aabf8814d9cc217ce21f8c2f3ebd4b335 + languageName: node + linkType: hard + "jose@npm:^4.14.6, jose@npm:^4.15.4, jose@npm:^4.6.0": version: 4.15.4 resolution: "jose@npm:4.15.4" @@ -35636,6 +35667,18 @@ __metadata: languageName: node linkType: hard +"openid-client@npm:^5.5.0": + version: 5.5.0 + resolution: "openid-client@npm:5.5.0" + dependencies: + jose: ^4.14.4 + lru-cache: ^6.0.0 + object-hash: ^2.2.0 + oidc-token-hash: ^5.0.3 + checksum: d2617b5bb0d9a0da338aeb7489bcbe3a79df9681189c7b61c2a3284289eee7110dfee2b04b49a9fdd4f064b7e2057ddb0becfedd9c19388e7788ae15b24c8e4c + languageName: node + linkType: hard + "oppa@npm:^0.4.0": version: 0.4.0 resolution: "oppa@npm:0.4.0" @@ -36273,6 +36316,17 @@ __metadata: languageName: node linkType: hard +"passport@npm:^0.6.0": + version: 0.6.0 + resolution: "passport@npm:0.6.0" + dependencies: + passport-strategy: 1.x.x + pause: 0.0.1 + utils-merge: ^1.0.1 + checksum: ef932ad671d50de34765c7a53cd1e058d8331a82a6df09265a9c6c1168911aee4a7b5215803d0101110ab7f317e096b4954ca7e18fb2c33b9929f0bd17dbe159 + languageName: node + linkType: hard + "passport@npm:^0.7.0": version: 0.7.0 resolution: "passport@npm:0.7.0" From 55c639839a42a5d38354267ef6018c1c208ee8b0 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Mon, 18 Sep 2023 15:48:06 -0400 Subject: [PATCH 033/129] Working module tests Signed-off-by: Ruben Vallejo --- .../src/module.test.ts | 60 +++++++------------ 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index 406cc3229e..f85afec0c3 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -14,9 +14,6 @@ * limitations under the License. */ -import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; -import { authPlugin } from '@backstage/plugin-auth-backend'; -import { authModuleOidcProvider } from './module'; import request from 'supertest'; import { AuthProviderRouteHandlers, @@ -24,8 +21,7 @@ import { createOAuthRouteHandlers, decodeOAuthState, } from '@backstage/plugin-auth-node'; -import { setupServer } from 'msw'; -import { ClientMetadata, IssuerMetadata } from 'openid-client'; +import { setupServer } from 'msw/node'; import { rest } from 'msw'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { Server } from 'http'; @@ -52,12 +48,12 @@ describe('authModuleOidcProvider', () => { const issuerMetadata = { issuer: 'https://oidc.test', - authorization_endpoint: 'https://oidc.test/as/authorization.oauth2', - token_endpoint: 'https://oidc.test/as/token.oauth2', - revocation_endpoint: 'https://oidc.test/as/revoke_token.oauth2', + authorization_endpoint: 'https://oidc.test/oauth2/authorize', + token_endpoint: 'https://oidc.test/oauth2/token', + revocation_endpoint: 'https://oidc.test/oauth2/revoke_token', userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', introspection_endpoint: 'https://oidc.test/as/introspect.oauth2', - jwks_uri: 'https://oidc.test/pf/JWKS', + jwks_uri: 'https://oidc.test/jwks.json', scopes_supported: ['openid'], claims_supported: ['email'], response_types_supported: ['code'], @@ -70,21 +66,6 @@ describe('authModuleOidcProvider', () => { request_object_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], }; - const clientMetadata = { - authHandler: async input => ({ - profile: { - displayName: input.userinfo.email, - }, - }), - resolverContext: {} as AuthResolverContext, - callbackUrl: 'https://oidc.test/callback', - clientId: 'testclientid', - clientSecret: 'testclientsecret', - metadataUrl: 'https://oidc.test/.well-known/openid-configuration', - tokenEndpointAuthMethod: 'none', - tokenSignedResponseAlg: 'none', - }; - beforeAll(async () => { const keyPair = await generateKeyPair('ES256'); const privateKey = await exportJWK(keyPair.privateKey); @@ -93,7 +74,7 @@ describe('authModuleOidcProvider', () => { idToken = await new SignJWT({ sub: 'test', - iss: 'https://pinniped.test', + iss: 'https://oidc.test', iat: Date.now(), aud: 'clientId', exp: Date.now() + 10000, @@ -181,11 +162,11 @@ describe('authModuleOidcProvider', () => { const router = Router(); router .use( - '/api/auth/pinniped/start', + '/api/auth/oidc/start', providerRouteHandler.start.bind(providerRouteHandler), ) .use( - '/api/auth/pinniped/handler/frame', + '/api/auth/oidc/handler/frame', providerRouteHandler.frameHandler.bind(providerRouteHandler), ); app.use(router); @@ -196,15 +177,15 @@ describe('authModuleOidcProvider', () => { }); it('should start', async () => { - const agent = request.agent(''); + const agent = request.agent(backstageServer); const startResponse = await agent.get( - `${appUrl}/api/auth/oidc/start?env=development`, + `/api/auth/oidc/start?env=development`, ); expect(startResponse.status).toEqual(302); const nonceCookie = agent.jar.getCookie('oidc-nonce', { - domain: 'localhost', + domain: '127.0.0.1', path: '/api/auth/oidc/handler', script: false, secure: false, @@ -212,21 +193,24 @@ describe('authModuleOidcProvider', () => { expect(nonceCookie).toBeDefined(); const startUrl = new URL(startResponse.get('location')); - expect(startUrl.origin).toBe('https://oidc.com'); - expect(startUrl.pathname).toBe('/oauth/authorize'); + expect(startUrl.origin).toBe('https://oidc.test'); + expect(startUrl.pathname).toBe('/oauth2/authorize'); expect(Object.fromEntries(startUrl.searchParams)).toEqual({ response_type: 'code', - scope: 'read_user', - client_id: 'my-client-id', - redirect_uri: `http://localhost:${ - (backstageServer.address() as AddressInfo).port - }/api/auth/oidc/handler/frame`, + scope: 'openid profile email', + client_id: 'clientId', + redirect_uri: `${appUrl}/api/auth/oidc/handler/frame`, state: expect.any(String), + prompt: 'none', + code_challenge: expect.any(String), + code_challenge_method: `S256`, }); expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ env: 'development', nonce: decodeURIComponent(nonceCookie.value), }); - }, 70000); + }); + + // TODO: This seems to be the place for integration testing, so far only have test that hit metadata endpoints along with /start but might be missing responses for handler? }); From a3c911e6365b60e45392b71df1a03e0384d90e24 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Wed, 27 Sep 2023 17:47:22 -0400 Subject: [PATCH 034/129] authenticator alongside passing unit tests Signed-off-by: Ruben Vallejo --- .../config.d.ts | 5 +- .../src/authenticator.test.ts | 394 ++++++++++++++ .../src/authenticator.ts | 124 +++-- .../src/module.test.ts | 69 ++- .../src/resolvers.ts | 51 +- plugins/auth-backend/package.json | 1 + .../src/providers/oidc/provider.test.ts | 189 ------- .../src/providers/oidc/provider.ts | 486 +++++++++--------- yarn.lock | 38 +- 9 files changed, 825 insertions(+), 532 deletions(-) create mode 100644 plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts delete mode 100644 plugins/auth-backend/src/providers/oidc/provider.test.ts diff --git a/plugins/auth-backend-module-oidc-provider/config.d.ts b/plugins/auth-backend-module-oidc-provider/config.d.ts index ba141d9555..803b9add73 100644 --- a/plugins/auth-backend-module-oidc-provider/config.d.ts +++ b/plugins/auth-backend-module-oidc-provider/config.d.ts @@ -25,8 +25,11 @@ export interface Config { * @visibility secret */ clientSecret: string; - audience?: string; + metadataUrl: string; callbackUrl?: string; + tokenSignedResponseAlg?: string; + scope?: string; + prompt?: string; }; }; }; diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts new file mode 100644 index 0000000000..6f22517361 --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts @@ -0,0 +1,394 @@ +/* + * Copyright 2023 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 { + OAuthAuthenticatorAuthenticateInput, + OAuthAuthenticatorRefreshInput, + OAuthAuthenticatorStartInput, + OAuthState, + decodeOAuthState, + encodeOAuthState, +} from '@backstage/plugin-auth-node'; +import { oidcAuthenticator } from './authenticator'; +import { setupServer } from 'msw/node'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; +import { rest } from 'msw'; +import express from 'express'; + +describe('oidcAuthenticator', () => { + let implementation: any; + let oauthState: OAuthState; + let idToken: string; + let publicKey: JWK; + + const mswServer = setupServer(); + setupRequestMockHandlers(mswServer); + + const issuerMetadata = { + issuer: 'https://oidc.test', + authorization_endpoint: 'https://oidc.test/oauth2/authorize', + token_endpoint: 'https://oidc.test/oauth2/token', + revocation_endpoint: 'https://oidc.test/oauth2/revoke_token', + userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', + introspection_endpoint: 'https://oidc.test/introspect.oauth2', + jwks_uri: 'https://oidc.test/jwks.json', + scopes_supported: [ + 'openid', + 'offline_access', + 'oidc:request-audience', + 'username', + 'groups', + ], + claims_supported: ['email', 'username', 'groups', 'additionalClaims'], + response_types_supported: ['code'], + id_token_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], + token_endpoint_auth_signing_alg_values_supported: [ + 'RS256', + 'RS512', + 'HS256', + ], + request_object_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], + }; + + beforeAll(async () => { + const keyPair = await generateKeyPair('RS256'); + const privateKey = await exportJWK(keyPair.privateKey); + publicKey = await exportJWK(keyPair.publicKey); + publicKey.alg = privateKey.alg = 'RS256'; + + idToken = await new SignJWT({ + sub: 'test', + iss: 'https://oidc.test', + iat: Date.now(), + aud: 'clientId', + exp: Date.now() + 10000, + }) + .setProtectedHeader({ alg: privateKey.alg, kid: privateKey.kid }) + .sign(keyPair.privateKey); + }); + + beforeEach(() => { + mswServer.use( + rest.get( + 'https://oidc.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ), + ), + rest.get('https://oidc.test/jwks.json', async (_req, res, ctx) => + res(ctx.status(200), ctx.json({ keys: [{ ...publicKey }] })), + ), + rest.post('https://oidc.test/oauth2/token', async (req, res, ctx) => { + return res( + req.headers.get('Authorization') + ? ctx.json({ + access_token: 'accessToken', + id_token: idToken, + refresh_token: 'refreshToken', + scope: 'testScope', + token_type: '', + }) + : ctx.status(401), + ); + }), + rest.get( + 'https://oidc.test/idp/userinfo.openid', + async (_req, res, ctx) => + res( + ctx.status(200), + ctx.json({ + sub: 'test', + name: 'Alice Adams', + given_name: 'Alice', + family_name: 'Adams', + email: 'alice@test.com', + }), + ), + ), + ); + + implementation = oidcAuthenticator.initialize({ + callbackUrl: 'https://backstage.test/callback', + config: new ConfigReader({ + metadataUrl: 'https://oidc.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + }); + + oauthState = { + nonce: 'nonce', + env: 'env', + }; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('#start', () => { + let fakeSession: Record; + let startRequest: OAuthAuthenticatorStartInput; + + beforeEach(() => { + fakeSession = {}; + startRequest = { + state: encodeOAuthState(oauthState), + req: { + method: 'GET', + url: 'test', + session: fakeSession, + }, + } as unknown as OAuthAuthenticatorStartInput; + }); + + it('redirects to authorization endpoint returned from OIDC metadata endpoint', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const url = new URL(startResponse.url); + + expect(url.protocol).toBe('https:'); + expect(url.hostname).toBe('oidc.test'); + expect(url.pathname).toBe('/oauth2/authorize'); + }); + + it('initiates authorization code grant', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('response_type')).toBe('code'); + }); + + it('passes client ID from config', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('client_id')).toBe('clientId'); + }); + + it('passes callback URL from config', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('redirect_uri')).toBe( + 'https://backstage.test/callback', + ); + }); + + it('generates PKCE challenge', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('code_challenge_method')).toBe('S256'); + expect(searchParams.get('code_challenge')).not.toBeNull(); + }); + + it('stores PKCE verifier in session', async () => { + await oidcAuthenticator.start(startRequest, implementation); + expect(fakeSession['oidc:oidc.test'].code_verifier).toBeDefined(); + }); + + // without the offline_access scope refresh should not work should we add in the test that is a required scope to test for? curently dont see that by defualt in the provider implementation. + it('requests default scopes if none are provided in config', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + const scopes = searchParams.get('scope')?.split(' ') ?? []; + + expect(scopes).toEqual( + expect.arrayContaining(['openid', 'profile', 'email']), + ); + }); + + it('encodes OAuth state in query param', async () => { + const startResponse = await oidcAuthenticator.start( + startRequest, + implementation, + ); + const { searchParams } = new URL(startResponse.url); + const stateParam = searchParams.get('state'); + const decodedState = decodeOAuthState(stateParam!); + + expect(decodedState).toMatchObject(oauthState); + }); + + it('fails when request has no session', async () => { + return expect( + oidcAuthenticator.start( + { + state: encodeOAuthState(oauthState), + req: { + method: 'GET', + url: 'test', + }, + } as unknown as OAuthAuthenticatorStartInput, + implementation, + ), + ).rejects.toThrow('authentication requires session support'); + }); + }); + + describe('#authenticate', () => { + let handlerRequest: OAuthAuthenticatorAuthenticateInput; + + beforeEach(() => { + handlerRequest = { + req: { + method: 'GET', + url: `https://test?code=authorization_code&state=${encodeOAuthState( + oauthState, + )}`, + session: { + 'oidc:oidc.test': { + state: encodeOAuthState(oauthState), + }, + }, + } as unknown as express.Request, + }; + }); + + it('exchanges authorization code for access token', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + const accessToken = handlerResponse.session.accessToken; + + expect(accessToken).toEqual('accessToken'); + }); + + it('exchanges authorization code for refresh token', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + const refreshToken = handlerResponse.session.refreshToken; + + expect(refreshToken).toEqual('refreshToken'); + }); + + it('returns granted scope', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + const responseScope = handlerResponse.session.scope; + + expect(responseScope).toEqual('testScope'); + }); + + it('fails without authorization code', async () => { + handlerRequest.req.url = 'https://test.com'; + return expect( + oidcAuthenticator.authenticate(handlerRequest, implementation), + ).rejects.toThrow('Unexpected redirect'); + }); + + it('fails without oauth state', async () => { + return expect( + oidcAuthenticator.authenticate( + { + req: { + method: 'GET', + url: `https://test?code=authorization_code}`, + session: { + ['oidc:pinniped.test']: { + state: { handle: 'sessionid', code_verifier: 'foo' }, + }, + }, + } as unknown as express.Request, + }, + implementation, + ), + ).rejects.toThrow( + 'Authentication failed, did not find expected authorization request details in session, req.session["oidc:oidc.test"] is undefined', + ); + }); + + it('fails when request has no session', async () => { + return expect( + oidcAuthenticator.authenticate( + { + req: { + method: 'GET', + url: 'https://test.com', + } as unknown as express.Request, + }, + implementation, + ), + ).rejects.toThrow('authentication requires session support'); + }); + }); + + describe('#refresh', () => { + let refreshRequest: OAuthAuthenticatorRefreshInput; + + beforeEach(() => { + refreshRequest = { + scope: '', + refreshToken: 'otherRefreshToken', + req: {} as express.Request, + }; + }); + + it('gets new refresh token', async () => { + const refreshResponse = await oidcAuthenticator.refresh( + refreshRequest, + implementation, + ); + + expect(refreshResponse.session.refreshToken).toBe('refreshToken'); + }); + + it('gets access token', async () => { + const refreshResponse = await oidcAuthenticator.refresh( + refreshRequest, + implementation, + ); + + expect(refreshResponse.session.accessToken).toBe('accessToken'); + }); + + it('gets id token', async () => { + const refreshResponse = await oidcAuthenticator.refresh( + refreshRequest, + implementation, + ); + + expect(refreshResponse.session.idToken).toBe(idToken); + }); + }); +}); diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts index 7a7d57d7e2..7a7ebafe5c 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -23,15 +23,10 @@ import { } from 'openid-client'; import { createOAuthAuthenticator, - decodeOAuthState, - encodeOAuthState, - PassportDoneCallback, PassportOAuthAuthenticatorHelper, PassportOAuthDoneCallback, - PassportOAuthPrivateInfo, - PassportProfile, } from '@backstage/plugin-auth-node'; -import { OidcAuthResult } from '@backstage/plugin-auth-backend'; +// import { BACKSTAGE_SESSION_EXPIRATION } from '@backstage/plugin-auth-backend/src/lib/session'; /** @public */ export const oidcAuthenticator = createOAuthAuthenticator({ @@ -40,9 +35,9 @@ export const oidcAuthenticator = createOAuthAuthenticator({ async initialize({ callbackUrl, config }) { const clientId = config.getString('clientId'); const clientSecret = config.getString('clientSecret'); + const metadataUrl = config.getString('metadataUrl'); const customCallbackUrl = config.getOptionalString('callbackUrl'); const callbackUrl2 = customCallbackUrl || callbackUrl; - const metadataUrl = config.getString('metadataUrl'); const tokenEndpointAuthMethod = config.getOptionalString( 'tokenEndpointAuthMethod', ) as ClientAuthMethod; @@ -66,39 +61,54 @@ export const oidcAuthenticator = createOAuthAuthenticator({ scope: initializedScope || '', }); - const helper = PassportOAuthAuthenticatorHelper.from( - new OidcStrategy( - { - client, - passReqToCallback: false, - }, - ( - tokenset: TokenSet, - userinfo: UserinfoResponse, - done: PassportDoneCallback, - ) => { - if (typeof done !== 'function') { - throw new Error( - 'OIDC IdP must provide a userinfo_endpoint in the metadata response', - ); - } - done( - undefined, - { tokenset, userinfo }, - { - refreshToken: tokenset.refresh_token, - }, + const strategy = new OidcStrategy( + { + client, + passReqToCallback: false, + }, + ( + tokenset: TokenSet, + userinfo: UserinfoResponse, + done: PassportOAuthDoneCallback, + ) => { + if (typeof done !== 'function') { + throw new Error( + 'OIDC IdP must provide a userinfo_endpoint in the metadata response', ); - }, - ), + } + + const expiresInSeconds = !tokenset.expires_in + ? 3600 + : Math.min(tokenset.expires_in!, 3600); + + done( + undefined, + { + fullProfile: { + provider: 'oidc', + id: userinfo.sub, + displayName: userinfo.name!, + }, + accessToken: tokenset.access_token!, + params: { + scope: tokenset.scope!, + expires_in: expiresInSeconds, + }, + }, + { + refreshToken: tokenset.refresh_token, + }, + ); + }, ); - return { helper, client, initializedScope, initializedPrompt }; + const helper = PassportOAuthAuthenticatorHelper.from(strategy); + + return { helper, client, initializedScope, initializedPrompt, strategy }; }, - async start(input, implementation) { - const { initializedScope, initializedPrompt, helper } = - await implementation; + async start(input, ctx) { + const { initializedScope, initializedPrompt, helper, strategy } = await ctx; const options: Record = { scope: input.scope || initializedScope || 'openid profile email', state: input.state, @@ -108,16 +118,48 @@ export const oidcAuthenticator = createOAuthAuthenticator({ options.prompt = prompt; } - return helper.start(input, { - ...options, + return new Promise((resolve, reject) => { + strategy.error = reject; + + return helper + .start(input, { + ...options, + }) + .then(resolve); }); }, - async authenticate(input, implementation) { - return (await implementation).helper.authenticate(input); + async authenticate(input, ctx) { + return (await ctx).helper.authenticate(input); }, - async refresh(input, implementation) { - return (await implementation).helper.refresh(input); + async refresh(input, ctx) { + const { client } = await ctx; + const tokenset = await client.refresh(input.refreshToken); + if (!tokenset.access_token) { + throw new Error('Refresh failed'); + } + const userinfo = await client.userinfo(tokenset.access_token); + + return new Promise((resolve, reject) => { + if (!tokenset.access_token) { + reject(new Error('Refresh Failed')); + } + resolve({ + fullProfile: { + provider: 'oidc', + id: userinfo.sub, + displayName: userinfo.name!, + }, + session: { + accessToken: tokenset.access_token!, + tokenType: tokenset.token_type ?? 'bearer', + scope: tokenset.scope!, + expiresInSeconds: tokenset.expires_in, + idToken: tokenset.id_token, + refreshToken: tokenset.refresh_token, + }, + }); + }); }, }); diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index f85afec0c3..5e01ae343f 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -67,10 +67,10 @@ describe('authModuleOidcProvider', () => { }; beforeAll(async () => { - const keyPair = await generateKeyPair('ES256'); + const keyPair = await generateKeyPair('RS256'); const privateKey = await exportJWK(keyPair.privateKey); publicKey = await exportJWK(keyPair.publicKey); - publicKey.alg = privateKey.alg = 'ES256'; + publicKey.alg = privateKey.alg = 'RS256'; idToken = await new SignJWT({ sub: 'test', @@ -109,6 +109,36 @@ describe('authModuleOidcProvider', () => { ctx.set('Location', callbackUrl.toString()), ); }), + rest.get('https://oidc.test/jwks.json', async (_req, res, ctx) => + res(ctx.status(200), ctx.json({ keys: [{ ...publicKey }] })), + ), + rest.post('https://oidc.test/oauth2/token', async (req, res, ctx) => { + return res( + req.headers.get('Authorization') + ? ctx.json({ + access_token: 'accessToken', + id_token: idToken, + refresh_token: 'refreshToken', + scope: 'testScope', + token_type: '', + }) + : ctx.status(401), + ); + }), + rest.get( + 'https://oidc.test/idp/userinfo.openid', + async (_req, res, ctx) => + res( + ctx.status(200), + ctx.json({ + sub: 'test', + name: 'Alice Adams', + given_name: 'Alice', + family_name: 'Adams', + email: 'alice@test.com', + }), + ), + ), ); const secret = 'secret'; @@ -212,5 +242,38 @@ describe('authModuleOidcProvider', () => { }); }); - // TODO: This seems to be the place for integration testing, so far only have test that hit metadata endpoints along with /start but might be missing responses for handler? + it('#authenticate exchanges authorization code for a access_token', async () => { + const agent = request.agent(''); + + // make /start request with audience parameter + const startResponse = await agent.get( + `${appUrl}/api/auth/oidc/start?env=development`, + ); + // follow redirect to authorization endpoint + const authorizationResponse = await agent.get( + startResponse.header.location, + ); + // follow redirect to token_endpoint + const handlerResponse = await agent.get( + authorizationResponse.header.location, + ); + + expect(handlerResponse.text).toContain( + encodeURIComponent( + JSON.stringify({ + type: 'authorization_response', + response: { + profile: { + displayName: 'Alice Adams', + }, + providerInfo: { + accessToken: 'accessToken', + scope: 'testScope', + expiresInSeconds: 3600, + }, + }, + }), + ), + ); + }); }); diff --git a/plugins/auth-backend-module-oidc-provider/src/resolvers.ts b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts index 930ff462f2..5367ab5216 100644 --- a/plugins/auth-backend-module-oidc-provider/src/resolvers.ts +++ b/plugins/auth-backend-module-oidc-provider/src/resolvers.ts @@ -14,12 +14,7 @@ * limitations under the License. */ -import { - createSignInResolverFactory, - OAuthAuthenticatorResult, - PassportProfile, - SignInInfo, -} from '@backstage/plugin-auth-node'; +import { commonSignInResolvers } from '@backstage/plugin-auth-node'; /** * Available sign-in resolvers for the Oidc auth provider. @@ -28,44 +23,16 @@ import { */ export namespace oidcSignInResolvers { /** - * Looks up the user by matching their Oidc username to the entity name. + * A oidc resolver that looks up the user using the local part of + * their email address as the entity name. */ - export const usernameMatchingUserEntityName = createSignInResolverFactory({ - create() { - return async ( - info: SignInInfo>, - ctx, - ) => { - const { result } = info; - - const id = result.fullProfile.username; - if (!id) { - throw new Error(`Oidc user profile does not contain a username`); - } - - return ctx.signInWithCatalogUser({ entityRef: { name: id } }); - }; - }, - }); + export const emailLocalPartMatchingUserEntityName = + commonSignInResolvers.emailLocalPartMatchingUserEntityName; /** - * Looks up the user by matching their email to the `google.com/email` annotation. Still working out this resolver..... + * A oidc resolver that looks up the user using their email address + * as email of the entity. */ - export const emailMatchingUserEntityAnnotation = createSignInResolverFactory({ - create() { - return async (info: SignInInfo, ctx) => { - const email = info.result.iapToken.email; - - if (!email) { - throw new Error('Google IAP sign-in result is missing email'); - } - - return ctx.signInWithCatalogUser({ - annotations: { - 'google.com/email': email, - }, - }); - }; - }, - }); + export const emailMatchingUserEntityProfileEmail = + commonSignInResolvers.emailMatchingUserEntityProfileEmail; } diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index a2b4d01b6c..ca92d4c9dd 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -45,6 +45,7 @@ "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^", + "@backstage/plugin-auth-backend-module-oidc-provider": "workspace:^", "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", diff --git a/plugins/auth-backend/src/providers/oidc/provider.test.ts b/plugins/auth-backend/src/providers/oidc/provider.test.ts deleted file mode 100644 index 7161ef1d6b..0000000000 --- a/plugins/auth-backend/src/providers/oidc/provider.test.ts +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright 2020 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 { Config, ConfigReader } from '@backstage/config'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import express from 'express'; -import { Session } from 'express-session'; -import { UnsecuredJWT } from 'jose'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { ClientMetadata, IssuerMetadata } from 'openid-client'; -import { OAuthAdapter } from '../../lib/oauth'; -import { oidc, OidcAuthProvider, Options } from './provider'; -import { AuthResolverContext } from '../types'; - -const issuerMetadata = { - issuer: 'https://oidc.test', - authorization_endpoint: 'https://oidc.test/as/authorization.oauth2', - token_endpoint: 'https://oidc.test/as/token.oauth2', - revocation_endpoint: 'https://oidc.test/as/revoke_token.oauth2', - userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', - introspection_endpoint: 'https://oidc.test/as/introspect.oauth2', - jwks_uri: 'https://oidc.test/pf/JWKS', - scopes_supported: ['openid'], - claims_supported: ['email'], - response_types_supported: ['code'], - id_token_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], - token_endpoint_auth_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], - request_object_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], -}; - -const clientMetadata: Options = { - authHandler: async input => ({ - profile: { - displayName: input.userinfo.email, - }, - }), - resolverContext: {} as AuthResolverContext, - callbackUrl: 'https://oidc.test/callback', - clientId: 'testclientid', - clientSecret: 'testclientsecret', - metadataUrl: 'https://oidc.test/.well-known/openid-configuration', - tokenEndpointAuthMethod: 'none', - tokenSignedResponseAlg: 'none', -}; - -describe('OidcAuthProvider', () => { - const worker = setupServer(); - setupRequestMockHandlers(worker); - - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('hit the metadata url', async () => { - const handler = jest.fn((_req, res, ctx) => { - return res( - ctx.status(200), - ctx.set('Content-Type', 'application/json'), - ctx.json(issuerMetadata), - ); - }); - worker.use( - rest.get('https://oidc.test/.well-known/openid-configuration', handler), - ); - const provider = new OidcAuthProvider(clientMetadata); - const { strategy } = (await (provider as any).implementation) as any as { - strategy: { - _client: ClientMetadata; - _issuer: IssuerMetadata; - }; - }; - // Assert that the expected request to the metadaurl was made. - expect(handler).toHaveBeenCalledTimes(1); - const { _client, _issuer } = strategy; - expect(_client.client_id).toBe(clientMetadata.clientId); - expect(_issuer.token_endpoint).toBe(issuerMetadata.token_endpoint); - }); - - it('OidcAuthProvider#handler successfully invokes the oidc endpoints', async () => { - const sub = 'alice'; - const iss = 'https://oidc.test'; - const iat = Date.now(); - const aud = clientMetadata.clientId; - const exp = Date.now() + 10000; - const jwt = await new UnsecuredJWT({ iss, sub, aud, iat, exp }) - .setIssuer(iss) - .setAudience(aud) - .setSubject(sub) - .setIssuedAt(iat) - .setExpirationTime(exp) - .encode(); - const requestSequence: Array = []; - - // The array of expected requests executed by the provider handler - const requests: Array<{ - method: 'get' | 'post'; - url: string; - payload: object; - }> = [ - { - method: 'get', - url: 'https://oidc.test/.well-known/openid-configuration', - payload: issuerMetadata, - }, - { - method: 'post', - url: 'https://oidc.test/as/token.oauth2', - payload: { - id_token: jwt, - access_token: 'test', - authorization_signed_response_alg: 'HS256', - }, - }, - { - method: 'get', - url: 'https://oidc.test/idp/userinfo.openid', - payload: { - sub: 'alice', - email: 'alice@oidc.test', - }, - }, - ]; - worker.use( - ...requests.map(r => { - return rest[r.method](r.url, (_req, res, ctx) => { - requestSequence.push(r.url); - return res( - ctx.status(200), - ctx.set('Content-Type', 'application/json'), - ctx.json(r.payload), - ); - }); - }), - ); - const provider = new OidcAuthProvider(clientMetadata); - const req = { - method: 'GET', - url: 'https://oidc.test/?code=test2', - session: { 'oidc:oidc.test': 'test' } as any as Session, - } as express.Request; - await provider.handler(req); - expect(requestSequence).toEqual([0, 1, 2].map(i => requests[i].url)); - }); - - it('oidc.create', async () => { - const handler = jest.fn((_req, res, ctx) => { - return res( - ctx.status(200), - ctx.set('Content-Type', 'application/json'), - ctx.json(issuerMetadata), - ); - }); - worker.use( - rest.get('https://oidc.test/.well-known/openid-configuration', handler), - ); - const config: Config = new ConfigReader({ - testEnv: { - ...clientMetadata, - metadataUrl: 'https://oidc.test/.well-known/openid-configuration', - }, - } as any); - const provider = oidc.create()({ - globalConfig: { - appUrl: 'https://oidc.test', - baseUrl: 'https://oidc.test', - }, - config, - } as any) as OAuthAdapter; - expect(provider.start).toBeDefined(); - // Cast provider as any here to be able to inspect private members - await (provider as any).handlers.get('testEnv').handlers.implementation; - // Assert that the expected request to the metadaurl was made. - expect(handler).toHaveBeenCalledTimes(1); - }); -}); diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index b6608aebbd..ce8809c55a 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -14,278 +14,282 @@ * limitations under the License. */ -import express from 'express'; -import { - Client, - ClientAuthMethod, - Issuer, - Strategy as OidcStrategy, - TokenSet, - UserinfoResponse, -} from 'openid-client'; -import { - encodeState, - OAuthAdapter, - OAuthEnvironmentHandler, - OAuthHandlers, - OAuthProviderOptions, - OAuthRefreshRequest, - OAuthResponse, - OAuthStartRequest, -} from '../../lib/oauth'; -import { - executeFrameHandlerStrategy, - executeRedirectStrategy, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - AuthResolverContext, - OAuthStartResponse, - SignInResolver, -} from '../types'; +import { AuthHandler, SignInResolver } from '../types'; +import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; -import { BACKSTAGE_SESSION_EXPIRATION } from '../../lib/session'; + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, +} from '../../lib/legacy'; -type PrivateInfo = { - refreshToken?: string; -}; +import { oidcAuthenticator } from '@backstage/plugin-auth-backend-module-oidc-provider'; -type OidcImpl = { - strategy: OidcStrategy; - client: Client; -}; +// type PrivateInfo = { +// refreshToken?: string; +// }; -/** - * authentication result for the OIDC which includes the token set and user information (a profile response sent by OIDC server) - * @public - */ -export type OidcAuthResult = { - tokenset: TokenSet; - userinfo: UserinfoResponse; -}; +// type OidcImpl = { +// strategy: OidcStrategy; +// client: Client; +// }; -export type Options = OAuthProviderOptions & { - metadataUrl: string; - scope?: string; - prompt?: string; - tokenEndpointAuthMethod?: ClientAuthMethod; - tokenSignedResponseAlg?: string; - signInResolver?: SignInResolver; - authHandler: AuthHandler; - resolverContext: AuthResolverContext; -}; +// /** +// * authentication result for the OIDC which includes the token set and user information (a profile response sent by OIDC server) +// * @public +// */ +// export type OidcAuthResult = { +// tokenset: TokenSet; +// userinfo: UserinfoResponse; +// }; -export class OidcAuthProvider implements OAuthHandlers { - private readonly implementation: Promise; - private readonly scope?: string; - private readonly prompt?: string; +// export type Options = OAuthProviderOptions & { +// metadataUrl: string; +// scope?: string; +// prompt?: string; +// tokenEndpointAuthMethod?: ClientAuthMethod; +// tokenSignedResponseAlg?: string; +// signInResolver?: SignInResolver; +// authHandler: AuthHandler; +// resolverContext: AuthResolverContext; +// }; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly resolverContext: AuthResolverContext; +// export class OidcAuthProvider implements OAuthHandlers { +// private readonly implementation: Promise; +// private readonly scope?: string; +// private readonly prompt?: string; - constructor(options: Options) { - this.implementation = this.setupStrategy(options); - this.scope = options.scope; - this.prompt = options.prompt; - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.resolverContext = options.resolverContext; - } +// private readonly signInResolver?: SignInResolver; +// private readonly authHandler: AuthHandler; +// private readonly resolverContext: AuthResolverContext; - async start(req: OAuthStartRequest): Promise { - const { strategy } = await this.implementation; - const options: Record = { - scope: req.scope || this.scope || 'openid profile email', - state: encodeState(req.state), - }; - const prompt = this.prompt || 'none'; - if (prompt !== 'auto') { - options.prompt = prompt; - } - return await executeRedirectStrategy(req, strategy, options); - } +// constructor(options: Options) { +// this.implementation = this.setupStrategy(options); +// this.scope = options.scope; +// this.prompt = options.prompt; +// this.signInResolver = options.signInResolver; +// this.authHandler = options.authHandler; +// this.resolverContext = options.resolverContext; +// } - async handler(req: express.Request) { - const { strategy } = await this.implementation; - const { result, privateInfo } = await executeFrameHandlerStrategy< - OidcAuthResult, - PrivateInfo - >(req, strategy); +// async start(req: OAuthStartRequest): Promise { +// const { strategy } = await this.implementation; +// const options: Record = { +// scope: req.scope || this.scope || 'openid profile email', +// state: encodeState(req.state), +// }; +// const prompt = this.prompt || 'none'; +// if (prompt !== 'auto') { +// options.prompt = prompt; +// } +// return await executeRedirectStrategy(req, strategy, options); +// } - return { - response: await this.handleResult(result), - refreshToken: privateInfo.refreshToken, - }; - } +// async handler(req: express.Request) { +// const { strategy } = await this.implementation; +// const { result, privateInfo } = await executeFrameHandlerStrategy< +// OidcAuthResult, +// PrivateInfo +// >(req, strategy); - async refresh(req: OAuthRefreshRequest) { - const { client } = await this.implementation; - const tokenset = await client.refresh(req.refreshToken); - if (!tokenset.access_token) { - throw new Error('Refresh failed'); - } - if (!tokenset.scope) { - tokenset.scope = req.scope; - } - const userinfo = await client.userinfo(tokenset.access_token); + // async refresh(req: OAuthRefreshRequest) { + // const { client } = await this.implementation; + // const tokenset = await client.refresh(req.refreshToken); + // if (!tokenset.access_token) { + // throw new Error('Refresh failed'); + // } + // if (!tokenset.scope) { + // tokenset.scope = req.scope; + // } + // const userinfo = await client.userinfo(tokenset.access_token); +// return { +// response: await this.handleResult(result), +// refreshToken: privateInfo.refreshToken, +// }; +// } - return { - response: await this.handleResult({ tokenset, userinfo }), - refreshToken: tokenset.refresh_token, - }; - } +// async refresh(req: OAuthRefreshRequest) { +// const { client } = await this.implementation; +// const tokenset = await client.refresh(req.refreshToken); +// if (!tokenset.access_token) { +// throw new Error('Refresh failed'); +// } +// const userinfo = await client.userinfo(tokenset.access_token); - private async setupStrategy(options: Options): Promise { - const issuer = await Issuer.discover(options.metadataUrl); - const client = new issuer.Client({ - access_type: 'offline', // this option must be passed to provider to receive a refresh token - client_id: options.clientId, - client_secret: options.clientSecret, - redirect_uris: [options.callbackUrl], - response_types: ['code'], - token_endpoint_auth_method: - options.tokenEndpointAuthMethod || 'client_secret_basic', - id_token_signed_response_alg: options.tokenSignedResponseAlg || 'RS256', - scope: options.scope || '', - }); +// return { +// response: await this.handleResult({ tokenset, userinfo }), +// refreshToken: tokenset.refresh_token, +// }; +// } - const strategy = new OidcStrategy( - { - client, - passReqToCallback: false, - }, - ( - tokenset: TokenSet, - userinfo: UserinfoResponse, - done: PassportDoneCallback, - ) => { - if (typeof done !== 'function') { - throw new Error( - 'OIDC IdP must provide a userinfo_endpoint in the metadata response', - ); - } - done( - undefined, - { tokenset, userinfo }, - { - refreshToken: tokenset.refresh_token, - }, - ); - }, - ); - strategy.error = console.error; - return { strategy, client }; - } +// private async setupStrategy(options: Options): Promise { +// const issuer = await Issuer.discover(options.metadataUrl); +// const client = new issuer.Client({ +// access_type: 'offline', // this option must be passed to provider to receive a refresh token +// client_id: options.clientId, +// client_secret: options.clientSecret, +// redirect_uris: [options.callbackUrl], +// response_types: ['code'], +// token_endpoint_auth_method: +// options.tokenEndpointAuthMethod || 'client_secret_basic', +// id_token_signed_response_alg: options.tokenSignedResponseAlg || 'RS256', +// scope: options.scope || '', +// }); - // Use this function to grab the user profile info from the token - // Then populate the profile with it - private async handleResult(result: OidcAuthResult): Promise { - const { profile } = await this.authHandler(result, this.resolverContext); +// const strategy = new OidcStrategy( +// { +// client, +// passReqToCallback: false, +// }, +// ( +// tokenset: TokenSet, +// userinfo: UserinfoResponse, +// done: PassportDoneCallback, +// ) => { +// if (typeof done !== 'function') { +// throw new Error( +// 'OIDC IdP must provide a userinfo_endpoint in the metadata response', +// ); +// } +// done( +// undefined, +// { tokenset, userinfo }, +// { +// refreshToken: tokenset.refresh_token, +// }, +// ); +// }, +// ); +// strategy.error = console.error; +// return { strategy, client }; +// } - const expiresInSeconds = - result.tokenset.expires_in === undefined - ? BACKSTAGE_SESSION_EXPIRATION - : Math.min(result.tokenset.expires_in, BACKSTAGE_SESSION_EXPIRATION); +// Use this function to grab the user profile info from the token +// Then populate the profile with it +// private async handleResult(result: OidcAuthResult): Promise { +// const { profile } = await this.authHandler(result, this.resolverContext); - let backstageIdentity = undefined; - if (this.signInResolver) { - backstageIdentity = await this.signInResolver( - { - result, - profile, - }, - this.resolverContext, - ); - } +// const expiresInSeconds = +// result.tokenset.expires_in === undefined +// ? BACKSTAGE_SESSION_EXPIRATION +// : Math.min(result.tokenset.expires_in, BACKSTAGE_SESSION_EXPIRATION); - return { - backstageIdentity, - providerInfo: { - idToken: result.tokenset.id_token, - accessToken: result.tokenset.access_token!, - scope: result.tokenset.scope!, - expiresInSeconds, - }, - profile, - }; - } -} +// let backstageIdentity = undefined; +// if (this.signInResolver) { +// backstageIdentity = await this.signInResolver( +// { +// result, +// profile, +// }, +// this.resolverContext, +// ); +// } + +// return { +// backstageIdentity, +// providerInfo: { +// idToken: result.tokenset.id_token, +// accessToken: result.tokenset.access_token!, +// scope: result.tokenset.scope!, +// expiresInSeconds, +// }, +// profile, +// }; +// } +// } /** * Auth provider integration for generic OpenID Connect auth * * @public */ +// export const oidc = createAuthProviderIntegration({ +// create(options?: { +// authHandler?: AuthHandler; + +// signIn?: { +// resolver: SignInResolver; +// }; +// }) { +// return ({ providerId, globalConfig, config, resolverContext }) => +// OAuthEnvironmentHandler.mapConfig(config, envConfig => { +// const clientId = envConfig.getString('clientId'); +// const clientSecret = envConfig.getString('clientSecret'); +// const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); +// const callbackUrl = +// customCallbackUrl || +// `${globalConfig.baseUrl}/${providerId}/handler/frame`; +// const metadataUrl = envConfig.getString('metadataUrl'); +// const tokenEndpointAuthMethod = envConfig.getOptionalString( +// 'tokenEndpointAuthMethod', +// ) as ClientAuthMethod; +// const tokenSignedResponseAlg = envConfig.getOptionalString( +// 'tokenSignedResponseAlg', +// ); +// const scope = envConfig.getOptionalString('scope'); +// const prompt = envConfig.getOptionalString('prompt'); + +// const authHandler: AuthHandler = options?.authHandler +// ? options.authHandler +// : async ({ userinfo }) => ({ +// profile: { +// displayName: userinfo.name, +// email: userinfo.email, +// picture: userinfo.picture, +// }, +// }); + +// const provider = new OidcAuthProvider({ +// clientId, +// clientSecret, +// callbackUrl, +// tokenEndpointAuthMethod, +// tokenSignedResponseAlg, +// metadataUrl, +// scope, +// prompt, +// signInResolver: options?.signIn?.resolver, +// authHandler, +// resolverContext, +// }); + +// return OAuthAdapter.fromConfig(globalConfig, provider, { +// providerId, +// callbackUrl, +// }); +// }); +// }, +// resolvers: { +// /** +// * Looks up the user by matching their email local part to the entity name. +// */ +// emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, +// /** +// * Looks up the user by matching their email to the entity email. +// */ +// emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, +// }, +// }); + export const oidc = createAuthProviderIntegration({ create(options?: { - authHandler?: AuthHandler; + /** + * The profile transformation function used to verify and convert the auth response + * into the profile that will be presented to the user. + */ + authHandler?: AuthHandler; + /** + * Configure sign-in for this provider, without it the provider can not be used to sign users in. + */ signIn?: { - resolver: SignInResolver; + resolver: SignInResolver; }; }) { - return ({ providerId, globalConfig, config, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - const metadataUrl = envConfig.getString('metadataUrl'); - const tokenEndpointAuthMethod = envConfig.getOptionalString( - 'tokenEndpointAuthMethod', - ) as ClientAuthMethod; - const tokenSignedResponseAlg = envConfig.getOptionalString( - 'tokenSignedResponseAlg', - ); - const scope = envConfig.getOptionalString('scope'); - const prompt = envConfig.getOptionalString('prompt'); - - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ userinfo }) => ({ - profile: { - displayName: userinfo.name, - email: userinfo.email, - picture: userinfo.picture, - }, - }); - - const provider = new OidcAuthProvider({ - clientId, - clientSecret, - callbackUrl, - tokenEndpointAuthMethod, - tokenSignedResponseAlg, - metadataUrl, - scope, - prompt, - signInResolver: options?.signIn?.resolver, - authHandler, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); - }, - resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, + return createOAuthProviderFactory({ + authenticator: oidcAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, }); diff --git a/yarn.lock b/yarn.lock index 6e6721b99e..16979362ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4672,7 +4672,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider": +"@backstage/plugin-auth-backend-module-oidc-provider@workspace:^, @backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider" dependencies: @@ -4777,6 +4777,7 @@ __metadata: "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^" + "@backstage/plugin-auth-backend-module-oidc-provider": "workspace:^" "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" @@ -31276,13 +31277,20 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.14.6, jose@npm:^4.15.4, jose@npm:^4.6.0": +"jose@npm:^4.14.6, jose@npm:^4.15.1": version: 4.15.4 resolution: "jose@npm:4.15.4" checksum: dccad91cb3357f36423774a0b89ad830dd84b31090de65cd139b85488439f16a00f8c59c0773825e8a1adb0dd9d13ad725ad66e6ea33880ecb3959bb99e1ea5b languageName: node linkType: hard +"jose@npm:^4.6.0": + version: 4.15.2 + resolution: "jose@npm:4.15.2" + checksum: 8f0cab1eef31243abe14a935b2b330cd95f10f9b69808fd642088ae5000e50e566664934537d2c6413ab2f6b54acd8265a5033da05157aa1260c5f1d7e57fab0 + languageName: node + linkType: hard + "joycon@npm:^3.0.1": version: 3.1.0 resolution: "joycon@npm:3.1.0" @@ -35655,19 +35663,7 @@ __metadata: languageName: node linkType: hard -"openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.4.3": - version: 5.6.4 - resolution: "openid-client@npm:5.6.4" - dependencies: - jose: ^4.15.4 - lru-cache: ^6.0.0 - object-hash: ^2.2.0 - oidc-token-hash: ^5.0.3 - checksum: 69843f078dacbbc6bad6d65ca6689414ac73f095dfe2f8e606822e6cfc9d9cd7d0dfaf2649352eda604653806f0ea65326ad2d6266da897e4740ec93d26d21f6 - languageName: node - linkType: hard - -"openid-client@npm:^5.5.0": +"openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.5.0": version: 5.5.0 resolution: "openid-client@npm:5.5.0" dependencies: @@ -35679,6 +35675,18 @@ __metadata: languageName: node linkType: hard +"openid-client@npm:^5.4.3": + version: 5.6.1 + resolution: "openid-client@npm:5.6.1" + dependencies: + jose: ^4.15.1 + lru-cache: ^6.0.0 + object-hash: ^2.2.0 + oidc-token-hash: ^5.0.3 + checksum: 9d939cec57540e6dd3f67e9a248ec5ecec3b439b7ab5bd2e9fb4481bd03e8d030deedd87a447348194be7f3e93e84085841b0414033caf86479870f526cdbc2f + languageName: node + linkType: hard + "oppa@npm:^0.4.0": version: 0.4.0 resolution: "oppa@npm:0.4.0" From 1964cb7d8805f4b78a75a920c411b68b4cbf9a39 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Thu, 28 Sep 2023 10:59:18 -0400 Subject: [PATCH 035/129] Working oidc authenticator with passing unit and module tests Signed-off-by: Ruben Vallejo --- .../config.d.ts | 1 + .../dev/index.ts | 6 +- .../src/authenticator.test.ts | 53 +++- .../src/authenticator.ts | 32 ++- .../src/index.ts | 2 +- .../src/module.test.ts | 8 +- .../auth-backend/src/providers/oidc/index.ts | 1 - .../src/providers/oidc/provider.ts | 242 ------------------ 8 files changed, 84 insertions(+), 261 deletions(-) diff --git a/plugins/auth-backend-module-oidc-provider/config.d.ts b/plugins/auth-backend-module-oidc-provider/config.d.ts index 803b9add73..16131c0761 100644 --- a/plugins/auth-backend-module-oidc-provider/config.d.ts +++ b/plugins/auth-backend-module-oidc-provider/config.d.ts @@ -27,6 +27,7 @@ export interface Config { clientSecret: string; metadataUrl: string; callbackUrl?: string; + tokenEndpointAuthMethod?: string; tokenSignedResponseAlg?: string; scope?: string; prompt?: string; diff --git a/plugins/auth-backend-module-oidc-provider/dev/index.ts b/plugins/auth-backend-module-oidc-provider/dev/index.ts index 4d027a19c2..d3c18c1d48 100644 --- a/plugins/auth-backend-module-oidc-provider/dev/index.ts +++ b/plugins/auth-backend-module-oidc-provider/dev/index.ts @@ -15,12 +15,10 @@ */ import { createBackend } from '@backstage/backend-defaults'; -import { authPlugin } from '@backstage/plugin-auth-backend'; -import { authModuleOidcProvider } from '../src'; const backend = createBackend(); -backend.add(authPlugin); -backend.add(authModuleOidcProvider); +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('../src')); backend.start(); diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts index 6f22517361..4d21db8442 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts @@ -103,7 +103,7 @@ describe('oidcAuthenticator', () => { id_token: idToken, refresh_token: 'refreshToken', scope: 'testScope', - token_type: '', + expires_in: 3600, }) : ctx.status(401), ); @@ -119,6 +119,7 @@ describe('oidcAuthenticator', () => { given_name: 'Alice', family_name: 'Adams', email: 'alice@test.com', + picture: 'http://testPictureUrl/photo.jpg', }), ), ), @@ -127,7 +128,7 @@ describe('oidcAuthenticator', () => { implementation = oidcAuthenticator.initialize({ callbackUrl: 'https://backstage.test/callback', config: new ConfigReader({ - metadataUrl: 'https://oidc.test', + metadataUrl: 'https://oidc.test/.well-known/openid-configuration', clientId: 'clientId', clientSecret: 'clientSecret', }), @@ -219,7 +220,6 @@ describe('oidcAuthenticator', () => { expect(fakeSession['oidc:oidc.test'].code_verifier).toBeDefined(); }); - // without the offline_access scope refresh should not work should we add in the test that is a required scope to test for? curently dont see that by defualt in the provider implementation. it('requests default scopes if none are provided in config', async () => { const startResponse = await oidcAuthenticator.start( startRequest, @@ -310,6 +310,53 @@ describe('oidcAuthenticator', () => { expect(responseScope).toEqual('testScope'); }); + it('returns a default session.tokentype field', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + const tokenType = handlerResponse.session.tokenType; + + expect(tokenType).toEqual('bearer'); + }); + + it('returns defined fullProfile with picture and email', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + const displayName = handlerResponse.fullProfile.displayName; + const email = handlerResponse.fullProfile.emails![0].value; + const picture = handlerResponse.fullProfile.photos![0].value; + + expect(displayName).toEqual('Alice Adams'); + expect(email).toEqual('alice@test.com'); + expect(picture).toEqual('http://testPictureUrl/photo.jpg'); + }); + + it('returns defined response with an idToken', async () => { + const handlerResponse = await oidcAuthenticator.authenticate( + handlerRequest, + implementation, + ); + + expect(handlerResponse).toMatchObject({ + fullProfile: { + displayName: 'Alice Adams', + id: 'test', + provider: 'oidc', + }, + session: { + accessToken: 'accessToken', + expiresInSeconds: 3600, + idToken, + refreshToken: 'refreshToken', + scope: 'testScope', + tokenType: 'bearer', + }, + }); + }); + it('fails without authorization code', async () => { handlerRequest.req.url = 'https://test.com'; return expect( diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts index 7a7ebafe5c..a95010e353 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -26,7 +26,6 @@ import { PassportOAuthAuthenticatorHelper, PassportOAuthDoneCallback, } from '@backstage/plugin-auth-node'; -// import { BACKSTAGE_SESSION_EXPIRATION } from '@backstage/plugin-auth-backend/src/lib/session'; /** @public */ export const oidcAuthenticator = createOAuthAuthenticator({ @@ -46,9 +45,8 @@ export const oidcAuthenticator = createOAuthAuthenticator({ ); const initializedScope = config.getOptionalString('scope'); const initializedPrompt = config.getOptionalString('prompt'); - const issuer = await Issuer.discover( - `${metadataUrl}/.well-known/openid-configuration`, - ); + + const issuer = await Issuer.discover(metadataUrl); const client = new issuer.Client({ access_type: 'offline', // this option must be passed to provider to receive a refresh token client_id: clientId, @@ -77,9 +75,18 @@ export const oidcAuthenticator = createOAuthAuthenticator({ ); } - const expiresInSeconds = !tokenset.expires_in - ? 3600 - : Math.min(tokenset.expires_in!, 3600); + const emails = userinfo.email ? [{ value: userinfo.email }] : undefined; + const photos = userinfo.picture + ? [{ value: userinfo.picture }] + : undefined; + const name = + userinfo.family_name && userinfo.given_name + ? { + familyName: userinfo.family_name, + givenName: userinfo.given_name, + middleName: userinfo.middle_name, + } + : undefined; done( undefined, @@ -88,11 +95,17 @@ export const oidcAuthenticator = createOAuthAuthenticator({ provider: 'oidc', id: userinfo.sub, displayName: userinfo.name!, + username: userinfo.preferred_username, + name, + emails, + photos, }, accessToken: tokenset.access_token!, params: { + id_token: tokenset.id_token, scope: tokenset.scope!, - expires_in: expiresInSeconds, + expires_in: tokenset.expires_in!, + token_type: tokenset.token_type, }, }, { @@ -139,6 +152,9 @@ export const oidcAuthenticator = createOAuthAuthenticator({ if (!tokenset.access_token) { throw new Error('Refresh failed'); } + if (!tokenset.scope) { + tokenset.scope = input.scope; + } const userinfo = await client.userinfo(tokenset.access_token); return new Promise((resolve, reject) => { diff --git a/plugins/auth-backend-module-oidc-provider/src/index.ts b/plugins/auth-backend-module-oidc-provider/src/index.ts index 4b5ddc123a..b14d350d4d 100644 --- a/plugins/auth-backend-module-oidc-provider/src/index.ts +++ b/plugins/auth-backend-module-oidc-provider/src/index.ts @@ -21,5 +21,5 @@ */ export { oidcAuthenticator } from './authenticator'; -export { authModuleOidcProvider } from './module'; +export { authModuleOidcProvider as default } from './module'; export { oidcSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index 5e01ae343f..09ad38b84c 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -17,7 +17,6 @@ import request from 'supertest'; import { AuthProviderRouteHandlers, - AuthResolverContext, createOAuthRouteHandlers, decodeOAuthState, } from '@backstage/plugin-auth-node'; @@ -121,6 +120,7 @@ describe('authModuleOidcProvider', () => { refresh_token: 'refreshToken', scope: 'testScope', token_type: '', + expires_in: 3600, }) : ctx.status(401), ); @@ -136,6 +136,7 @@ describe('authModuleOidcProvider', () => { given_name: 'Alice', family_name: 'Adams', email: 'alice@test.com', + picture: 'http://testPictureUrl/photo.jpg', }), ), ), @@ -172,7 +173,7 @@ describe('authModuleOidcProvider', () => { isOriginAllowed: _ => true, providerId: 'oidc', config: new ConfigReader({ - metadataUrl: 'https://oidc.test', + metadataUrl: 'https://oidc.test/.well-known/openid-configuration', clientId: 'clientId', clientSecret: 'clientSecret', }), @@ -264,9 +265,12 @@ describe('authModuleOidcProvider', () => { type: 'authorization_response', response: { profile: { + email: 'alice@test.com', + picture: 'http://testPictureUrl/photo.jpg', displayName: 'Alice Adams', }, providerInfo: { + idToken, accessToken: 'accessToken', scope: 'testScope', expiresInSeconds: 3600, diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts index 6b2282411c..c4343b1547 100644 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ b/plugins/auth-backend/src/providers/oidc/index.ts @@ -15,4 +15,3 @@ */ export { oidc } from './provider'; -export type { OidcAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index ce8809c55a..18170e104e 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -22,255 +22,13 @@ import { adaptLegacyOAuthHandler, adaptLegacyOAuthSignInResolver, } from '../../lib/legacy'; - import { oidcAuthenticator } from '@backstage/plugin-auth-backend-module-oidc-provider'; -// type PrivateInfo = { -// refreshToken?: string; -// }; - -// type OidcImpl = { -// strategy: OidcStrategy; -// client: Client; -// }; - -// /** -// * authentication result for the OIDC which includes the token set and user information (a profile response sent by OIDC server) -// * @public -// */ -// export type OidcAuthResult = { -// tokenset: TokenSet; -// userinfo: UserinfoResponse; -// }; - -// export type Options = OAuthProviderOptions & { -// metadataUrl: string; -// scope?: string; -// prompt?: string; -// tokenEndpointAuthMethod?: ClientAuthMethod; -// tokenSignedResponseAlg?: string; -// signInResolver?: SignInResolver; -// authHandler: AuthHandler; -// resolverContext: AuthResolverContext; -// }; - -// export class OidcAuthProvider implements OAuthHandlers { -// private readonly implementation: Promise; -// private readonly scope?: string; -// private readonly prompt?: string; - -// private readonly signInResolver?: SignInResolver; -// private readonly authHandler: AuthHandler; -// private readonly resolverContext: AuthResolverContext; - -// constructor(options: Options) { -// this.implementation = this.setupStrategy(options); -// this.scope = options.scope; -// this.prompt = options.prompt; -// this.signInResolver = options.signInResolver; -// this.authHandler = options.authHandler; -// this.resolverContext = options.resolverContext; -// } - -// async start(req: OAuthStartRequest): Promise { -// const { strategy } = await this.implementation; -// const options: Record = { -// scope: req.scope || this.scope || 'openid profile email', -// state: encodeState(req.state), -// }; -// const prompt = this.prompt || 'none'; -// if (prompt !== 'auto') { -// options.prompt = prompt; -// } -// return await executeRedirectStrategy(req, strategy, options); -// } - -// async handler(req: express.Request) { -// const { strategy } = await this.implementation; -// const { result, privateInfo } = await executeFrameHandlerStrategy< -// OidcAuthResult, -// PrivateInfo -// >(req, strategy); - - // async refresh(req: OAuthRefreshRequest) { - // const { client } = await this.implementation; - // const tokenset = await client.refresh(req.refreshToken); - // if (!tokenset.access_token) { - // throw new Error('Refresh failed'); - // } - // if (!tokenset.scope) { - // tokenset.scope = req.scope; - // } - // const userinfo = await client.userinfo(tokenset.access_token); -// return { -// response: await this.handleResult(result), -// refreshToken: privateInfo.refreshToken, -// }; -// } - -// async refresh(req: OAuthRefreshRequest) { -// const { client } = await this.implementation; -// const tokenset = await client.refresh(req.refreshToken); -// if (!tokenset.access_token) { -// throw new Error('Refresh failed'); -// } -// const userinfo = await client.userinfo(tokenset.access_token); - -// return { -// response: await this.handleResult({ tokenset, userinfo }), -// refreshToken: tokenset.refresh_token, -// }; -// } - -// private async setupStrategy(options: Options): Promise { -// const issuer = await Issuer.discover(options.metadataUrl); -// const client = new issuer.Client({ -// access_type: 'offline', // this option must be passed to provider to receive a refresh token -// client_id: options.clientId, -// client_secret: options.clientSecret, -// redirect_uris: [options.callbackUrl], -// response_types: ['code'], -// token_endpoint_auth_method: -// options.tokenEndpointAuthMethod || 'client_secret_basic', -// id_token_signed_response_alg: options.tokenSignedResponseAlg || 'RS256', -// scope: options.scope || '', -// }); - -// const strategy = new OidcStrategy( -// { -// client, -// passReqToCallback: false, -// }, -// ( -// tokenset: TokenSet, -// userinfo: UserinfoResponse, -// done: PassportDoneCallback, -// ) => { -// if (typeof done !== 'function') { -// throw new Error( -// 'OIDC IdP must provide a userinfo_endpoint in the metadata response', -// ); -// } -// done( -// undefined, -// { tokenset, userinfo }, -// { -// refreshToken: tokenset.refresh_token, -// }, -// ); -// }, -// ); -// strategy.error = console.error; -// return { strategy, client }; -// } - -// Use this function to grab the user profile info from the token -// Then populate the profile with it -// private async handleResult(result: OidcAuthResult): Promise { -// const { profile } = await this.authHandler(result, this.resolverContext); - -// const expiresInSeconds = -// result.tokenset.expires_in === undefined -// ? BACKSTAGE_SESSION_EXPIRATION -// : Math.min(result.tokenset.expires_in, BACKSTAGE_SESSION_EXPIRATION); - -// let backstageIdentity = undefined; -// if (this.signInResolver) { -// backstageIdentity = await this.signInResolver( -// { -// result, -// profile, -// }, -// this.resolverContext, -// ); -// } - -// return { -// backstageIdentity, -// providerInfo: { -// idToken: result.tokenset.id_token, -// accessToken: result.tokenset.access_token!, -// scope: result.tokenset.scope!, -// expiresInSeconds, -// }, -// profile, -// }; -// } -// } - /** * Auth provider integration for generic OpenID Connect auth * * @public */ -// export const oidc = createAuthProviderIntegration({ -// create(options?: { -// authHandler?: AuthHandler; - -// signIn?: { -// resolver: SignInResolver; -// }; -// }) { -// return ({ providerId, globalConfig, config, resolverContext }) => -// OAuthEnvironmentHandler.mapConfig(config, envConfig => { -// const clientId = envConfig.getString('clientId'); -// const clientSecret = envConfig.getString('clientSecret'); -// const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); -// const callbackUrl = -// customCallbackUrl || -// `${globalConfig.baseUrl}/${providerId}/handler/frame`; -// const metadataUrl = envConfig.getString('metadataUrl'); -// const tokenEndpointAuthMethod = envConfig.getOptionalString( -// 'tokenEndpointAuthMethod', -// ) as ClientAuthMethod; -// const tokenSignedResponseAlg = envConfig.getOptionalString( -// 'tokenSignedResponseAlg', -// ); -// const scope = envConfig.getOptionalString('scope'); -// const prompt = envConfig.getOptionalString('prompt'); - -// const authHandler: AuthHandler = options?.authHandler -// ? options.authHandler -// : async ({ userinfo }) => ({ -// profile: { -// displayName: userinfo.name, -// email: userinfo.email, -// picture: userinfo.picture, -// }, -// }); - -// const provider = new OidcAuthProvider({ -// clientId, -// clientSecret, -// callbackUrl, -// tokenEndpointAuthMethod, -// tokenSignedResponseAlg, -// metadataUrl, -// scope, -// prompt, -// signInResolver: options?.signIn?.resolver, -// authHandler, -// resolverContext, -// }); - -// return OAuthAdapter.fromConfig(globalConfig, provider, { -// providerId, -// callbackUrl, -// }); -// }); -// }, -// resolvers: { -// /** -// * Looks up the user by matching their email local part to the entity name. -// */ -// emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, -// /** -// * Looks up the user by matching their email to the entity email. -// */ -// emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, -// }, -// }); - export const oidc = createAuthProviderIntegration({ create(options?: { /** From 5d2fcba0646b95ad4e81fdd5e46e0f6c3448dd5d Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Fri, 29 Sep 2023 12:30:50 -0400 Subject: [PATCH 036/129] PR chores, changeset,apireport Signed-off-by: Ruben Vallejo --- .changeset/lemon-cameras-remember.md | 5 +++ .changeset/old-students-smoke.md | 5 +++ .../api-report.md | 42 +++++++++++++++++++ .../package.json | 2 +- .../src/authenticator.test.ts | 4 +- .../src/authenticator.ts | 4 +- .../src/module.test.ts | 23 +--------- plugins/auth-backend/api-report.md | 6 +-- plugins/auth-backend/config.d.ts | 16 ------- .../auth-backend/src/providers/oidc/index.ts | 1 + .../src/providers/oidc/provider.ts | 25 +++++++++++ yarn.lock | 36 +++------------- 12 files changed, 92 insertions(+), 77 deletions(-) create mode 100644 .changeset/lemon-cameras-remember.md create mode 100644 .changeset/old-students-smoke.md create mode 100644 plugins/auth-backend-module-oidc-provider/api-report.md diff --git a/.changeset/lemon-cameras-remember.md b/.changeset/lemon-cameras-remember.md new file mode 100644 index 0000000000..29cd88602f --- /dev/null +++ b/.changeset/lemon-cameras-remember.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Migrated oidc auth provider to new `@backstage/plugin-auth-backend-module-oidc-provider` module package. diff --git a/.changeset/old-students-smoke.md b/.changeset/old-students-smoke.md new file mode 100644 index 0000000000..8e072c5203 --- /dev/null +++ b/.changeset/old-students-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-oidc-provider': minor +--- + +Created new `@backstage/plugin-auth-backend-module-oidc-provider` module package to house oidc auth provider migration. diff --git a/plugins/auth-backend-module-oidc-provider/api-report.md b/plugins/auth-backend-module-oidc-provider/api-report.md new file mode 100644 index 0000000000..cf3335b13b --- /dev/null +++ b/plugins/auth-backend-module-oidc-provider/api-report.md @@ -0,0 +1,42 @@ +## API Report File for "@backstage/plugin-auth-backend-module-oidc-provider" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { BaseClient } from 'openid-client'; +import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportOAuthResult } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; +import { Strategy } from 'openid-client'; + +// @public (undocumented) +const authModuleOidcProvider: () => BackendFeature; +export default authModuleOidcProvider; + +// @public (undocumented) +export const oidcAuthenticator: OAuthAuthenticator< + Promise<{ + helper: PassportOAuthAuthenticatorHelper; + client: BaseClient; + initializedScope: string | undefined; + initializedPrompt: string | undefined; + strategy: Strategy; + }>, + PassportProfile +>; + +// @public +export namespace oidcSignInResolvers { + const emailLocalPartMatchingUserEntityName: SignInResolverFactory< + unknown, + unknown + >; + const emailMatchingUserEntityProfileEmail: SignInResolverFactory< + unknown, + unknown + >; +} +``` diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index 09bd1033a0..6962c1f340 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-oidc-provider", "description": "The oidc-provider backend module for the auth plugin.", - "version": "0.1.0-next.1", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts index 4d21db8442..b44f89e7c7 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts @@ -348,13 +348,15 @@ describe('oidcAuthenticator', () => { }, session: { accessToken: 'accessToken', - expiresInSeconds: 3600, idToken, refreshToken: 'refreshToken', scope: 'testScope', tokenType: 'bearer', }, }); + expect( + Math.abs(handlerResponse.session.expiresInSeconds! - 3600), + ).toBeLessThan(5); }); it('fails without authorization code', async () => { diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts index a95010e353..97b0af8d7f 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -36,7 +36,6 @@ export const oidcAuthenticator = createOAuthAuthenticator({ const clientSecret = config.getString('clientSecret'); const metadataUrl = config.getString('metadataUrl'); const customCallbackUrl = config.getOptionalString('callbackUrl'); - const callbackUrl2 = customCallbackUrl || callbackUrl; const tokenEndpointAuthMethod = config.getOptionalString( 'tokenEndpointAuthMethod', ) as ClientAuthMethod; @@ -51,7 +50,7 @@ export const oidcAuthenticator = createOAuthAuthenticator({ access_type: 'offline', // this option must be passed to provider to receive a refresh token client_id: clientId, client_secret: clientSecret, - redirect_uris: [callbackUrl2], + redirect_uris: [customCallbackUrl || callbackUrl], response_types: ['code'], token_endpoint_auth_method: tokenEndpointAuthMethod || 'client_secret_basic', @@ -84,7 +83,6 @@ export const oidcAuthenticator = createOAuthAuthenticator({ ? { familyName: userinfo.family_name, givenName: userinfo.given_name, - middleName: userinfo.middle_name, } : undefined; diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index 09ad38b84c..d2487da450 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -245,39 +245,18 @@ describe('authModuleOidcProvider', () => { it('#authenticate exchanges authorization code for a access_token', async () => { const agent = request.agent(''); - - // make /start request with audience parameter const startResponse = await agent.get( `${appUrl}/api/auth/oidc/start?env=development`, ); - // follow redirect to authorization endpoint const authorizationResponse = await agent.get( startResponse.header.location, ); - // follow redirect to token_endpoint const handlerResponse = await agent.get( authorizationResponse.header.location, ); expect(handlerResponse.text).toContain( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - profile: { - email: 'alice@test.com', - picture: 'http://testPictureUrl/photo.jpg', - displayName: 'Alice Adams', - }, - providerInfo: { - idToken, - accessToken: 'accessToken', - scope: 'testScope', - expiresInSeconds: 3600, - }, - }, - }), - ), + encodeURIComponent(`"accessToken":"accessToken"`), ); }); }); diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index d80648a10f..d097ae2881 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -340,7 +340,7 @@ export type OAuthStartResponse = { // @public @deprecated (undocumented) export type OAuthState = OAuthState_2; -// @public +// @public @deprecated export type OidcAuthResult = { tokenset: TokenSet; userinfo: UserinfoResponse; @@ -564,10 +564,10 @@ export const providers: Readonly<{ create: ( options?: | { - authHandler?: AuthHandler | undefined; + authHandler?: AuthHandler | undefined; signIn?: | { - resolver: SignInResolver; + resolver: SignInResolver; } | undefined; } diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index 34139593d3..2b80324fcd 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -149,22 +149,6 @@ export interface Config { }; }; /** @visibility frontend */ - oidc?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - callbackUrl?: string; - metadataUrl: string; - tokenEndpointAuthMethod?: string; - tokenSignedResponseAlg?: string; - scope?: string; - prompt?: string; - }; - }; - /** @visibility frontend */ auth0?: { [authEnv: string]: { clientId: string; diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts index c4343b1547..6b2282411c 100644 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ b/plugins/auth-backend/src/providers/oidc/index.ts @@ -15,3 +15,4 @@ */ export { oidc } from './provider'; +export type { OidcAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index 18170e104e..f6804265cd 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -23,6 +23,21 @@ import { adaptLegacyOAuthSignInResolver, } from '../../lib/legacy'; import { oidcAuthenticator } from '@backstage/plugin-auth-backend-module-oidc-provider'; +import { TokenSet, UserinfoResponse } from 'openid-client'; +import { + commonByEmailLocalPartResolver, + commonByEmailResolver, +} from '../resolvers'; + +/** + * authentication result for the OIDC which includes the token set and user information (a profile response sent by OIDC server) + * @public + * @deprecated No longer used + */ +export type OidcAuthResult = { + tokenset: TokenSet; + userinfo: UserinfoResponse; +}; /** * Auth provider integration for generic OpenID Connect auth @@ -50,4 +65,14 @@ export const oidc = createAuthProviderIntegration({ signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), }); }, + resolvers: { + /** + * Looks up the user by matching their email local part to the entity name. + */ + emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, + /** + * Looks up the user by matching their email to the entity email. + */ + emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, + }, }); diff --git a/yarn.lock b/yarn.lock index 16979362ca..1e41fd83c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31270,24 +31270,10 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.14.4": - version: 4.14.6 - resolution: "jose@npm:4.14.6" - checksum: eae81a234e7bf1446b1bd80722b3462b014e3835b155c3a7799c1c5043163a53a0dc28d347004151b031e6b7b863403aabf8814d9cc217ce21f8c2f3ebd4b335 - languageName: node - linkType: hard - -"jose@npm:^4.14.6, jose@npm:^4.15.1": - version: 4.15.4 - resolution: "jose@npm:4.15.4" - checksum: dccad91cb3357f36423774a0b89ad830dd84b31090de65cd139b85488439f16a00f8c59c0773825e8a1adb0dd9d13ad725ad66e6ea33880ecb3959bb99e1ea5b - languageName: node - linkType: hard - -"jose@npm:^4.6.0": - version: 4.15.2 - resolution: "jose@npm:4.15.2" - checksum: 8f0cab1eef31243abe14a935b2b330cd95f10f9b69808fd642088ae5000e50e566664934537d2c6413ab2f6b54acd8265a5033da05157aa1260c5f1d7e57fab0 +"jose@npm:^4.14.6, jose@npm:^4.15.1, jose@npm:^4.6.0": + version: 4.15.3 + resolution: "jose@npm:4.15.3" + checksum: b76eeccc1d40d0eaf26dfaadc0f88fc15802c9105ab66a24ee223bd84369f7cb217f4a2cb852f5080ff6996170b3a73db2b2d26878b8905d99c36ca432628134 languageName: node linkType: hard @@ -35663,19 +35649,7 @@ __metadata: languageName: node linkType: hard -"openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.5.0": - version: 5.5.0 - resolution: "openid-client@npm:5.5.0" - dependencies: - jose: ^4.14.4 - lru-cache: ^6.0.0 - object-hash: ^2.2.0 - oidc-token-hash: ^5.0.3 - checksum: d2617b5bb0d9a0da338aeb7489bcbe3a79df9681189c7b61c2a3284289eee7110dfee2b04b49a9fdd4f064b7e2057ddb0becfedd9c19388e7788ae15b24c8e4c - languageName: node - linkType: hard - -"openid-client@npm:^5.4.3": +"openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.4.3, openid-client@npm:^5.5.0": version: 5.6.1 resolution: "openid-client@npm:5.6.1" dependencies: From 002010c8f60e9cbbea4c3297c86c9c668cd5e9f5 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 5 Jan 2024 18:56:32 -0500 Subject: [PATCH 037/129] authHandler/signInResolver backwards compatibility Signed-off-by: Jamie Klassen --- .../api-report.md | 24 ++- .../src/authenticator.test.ts | 52 +++--- .../src/authenticator.ts | 172 +++++++++--------- .../src/index.ts | 1 + plugins/auth-backend/api-report.md | 13 +- plugins/auth-backend/package.json | 1 - plugins/auth-backend/src/providers/index.ts | 1 - .../auth-backend/src/providers/oidc/index.ts | 1 - .../src/providers/oidc/provider.test.ts | 169 +++++++++++++++++ .../src/providers/oidc/provider.ts | 57 +++--- yarn.lock | 1 - 11 files changed, 337 insertions(+), 155 deletions(-) create mode 100644 plugins/auth-backend/src/providers/oidc/provider.test.ts diff --git a/plugins/auth-backend-module-oidc-provider/api-report.md b/plugins/auth-backend-module-oidc-provider/api-report.md index cf3335b13b..d96d9952a0 100644 --- a/plugins/auth-backend-module-oidc-provider/api-report.md +++ b/plugins/auth-backend-module-oidc-provider/api-report.md @@ -7,10 +7,10 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import { BaseClient } from 'openid-client'; import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; -import { PassportOAuthResult } from '@backstage/plugin-auth-node'; -import { PassportProfile } from '@backstage/plugin-auth-node'; import { SignInResolverFactory } from '@backstage/plugin-auth-node'; import { Strategy } from 'openid-client'; +import { TokenSet } from 'openid-client'; +import { UserinfoResponse } from 'openid-client'; // @public (undocumented) const authModuleOidcProvider: () => BackendFeature; @@ -18,16 +18,24 @@ export default authModuleOidcProvider; // @public (undocumented) export const oidcAuthenticator: OAuthAuthenticator< - Promise<{ - helper: PassportOAuthAuthenticatorHelper; - client: BaseClient; + { initializedScope: string | undefined; initializedPrompt: string | undefined; - strategy: Strategy; - }>, - PassportProfile + promise: Promise<{ + helper: PassportOAuthAuthenticatorHelper; + client: BaseClient; + strategy: Strategy; + }>; + }, + OidcAuthResult >; +// @public +export type OidcAuthResult = { + tokenset: TokenSet; + userinfo: UserinfoResponse; +}; + // @public export namespace oidcSignInResolvers { const emailLocalPartMatchingUserEntityName: SignInResolverFactory< diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts index b44f89e7c7..717083562c 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.test.ts @@ -281,81 +281,75 @@ describe('oidcAuthenticator', () => { }); it('exchanges authorization code for access token', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - const accessToken = handlerResponse.session.accessToken; + const accessToken = authenticatorResult.session.accessToken; expect(accessToken).toEqual('accessToken'); }); it('exchanges authorization code for refresh token', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - const refreshToken = handlerResponse.session.refreshToken; + const refreshToken = authenticatorResult.session.refreshToken; expect(refreshToken).toEqual('refreshToken'); }); it('returns granted scope', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - const responseScope = handlerResponse.session.scope; + const responseScope = authenticatorResult.session.scope; expect(responseScope).toEqual('testScope'); }); it('returns a default session.tokentype field', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - const tokenType = handlerResponse.session.tokenType; + const tokenType = authenticatorResult.session.tokenType; expect(tokenType).toEqual('bearer'); }); - it('returns defined fullProfile with picture and email', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + it('returns picture and email', async () => { + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - const displayName = handlerResponse.fullProfile.displayName; - const email = handlerResponse.fullProfile.emails![0].value; - const picture = handlerResponse.fullProfile.photos![0].value; - expect(displayName).toEqual('Alice Adams'); - expect(email).toEqual('alice@test.com'); - expect(picture).toEqual('http://testPictureUrl/photo.jpg'); + expect(authenticatorResult).toMatchObject({ + fullProfile: { + userinfo: { + email: 'alice@test.com', + picture: 'http://testPictureUrl/photo.jpg', + name: 'Alice Adams', + }, + }, + }); }); - it('returns defined response with an idToken', async () => { - const handlerResponse = await oidcAuthenticator.authenticate( + it('returns idToken', async () => { + const authenticatorResult = await oidcAuthenticator.authenticate( handlerRequest, implementation, ); - expect(handlerResponse).toMatchObject({ - fullProfile: { - displayName: 'Alice Adams', - id: 'test', - provider: 'oidc', - }, + expect(authenticatorResult).toMatchObject({ session: { - accessToken: 'accessToken', idToken, - refreshToken: 'refreshToken', - scope: 'testScope', - tokenType: 'bearer', }, }); expect( - Math.abs(handlerResponse.session.expiresInSeconds! - 3600), + Math.abs(authenticatorResult.session.expiresInSeconds! - 3600), ).toBeLessThan(5); }); diff --git a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts index 97b0af8d7f..ba6bc9d142 100644 --- a/plugins/auth-backend-module-oidc-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-oidc-provider/src/authenticator.ts @@ -23,15 +23,35 @@ import { } from 'openid-client'; import { createOAuthAuthenticator, + OAuthAuthenticatorResult, + PassportDoneCallback, + PassportHelpers, PassportOAuthAuthenticatorHelper, - PassportOAuthDoneCallback, + PassportOAuthPrivateInfo, } from '@backstage/plugin-auth-node'; +/** + * authentication result for the OIDC which includes the token set and user + * profile response + * @public + */ +export type OidcAuthResult = { + tokenset: TokenSet; + userinfo: UserinfoResponse; +}; + /** @public */ export const oidcAuthenticator = createOAuthAuthenticator({ - defaultProfileTransform: - PassportOAuthAuthenticatorHelper.defaultProfileTransform, - async initialize({ callbackUrl, config }) { + defaultProfileTransform: async ( + input: OAuthAuthenticatorResult, + ) => ({ + profile: { + email: input.fullProfile.userinfo.email, + picture: input.fullProfile.userinfo.picture, + displayName: input.fullProfile.userinfo.name, + }, + }), + initialize({ callbackUrl, config }) { const clientId = config.getString('clientId'); const clientSecret = config.getString('clientSecret'); const metadataUrl = config.getString('metadataUrl'); @@ -45,81 +65,53 @@ export const oidcAuthenticator = createOAuthAuthenticator({ const initializedScope = config.getOptionalString('scope'); const initializedPrompt = config.getOptionalString('prompt'); - const issuer = await Issuer.discover(metadataUrl); - const client = new issuer.Client({ - access_type: 'offline', // this option must be passed to provider to receive a refresh token - client_id: clientId, - client_secret: clientSecret, - redirect_uris: [customCallbackUrl || callbackUrl], - response_types: ['code'], - token_endpoint_auth_method: - tokenEndpointAuthMethod || 'client_secret_basic', - id_token_signed_response_alg: tokenSignedResponseAlg || 'RS256', - scope: initializedScope || '', + const promise = Issuer.discover(metadataUrl).then(issuer => { + const client = new issuer.Client({ + access_type: 'offline', // this option must be passed to provider to receive a refresh token + client_id: clientId, + client_secret: clientSecret, + redirect_uris: [customCallbackUrl || callbackUrl], + response_types: ['code'], + token_endpoint_auth_method: + tokenEndpointAuthMethod || 'client_secret_basic', + id_token_signed_response_alg: tokenSignedResponseAlg || 'RS256', + scope: initializedScope || '', + }); + + const strategy = new OidcStrategy( + { + client, + passReqToCallback: false, + }, + ( + tokenset: TokenSet, + userinfo: UserinfoResponse, + done: PassportDoneCallback, + ) => { + if (typeof done !== 'function') { + throw new Error( + 'OIDC IdP must provide a userinfo_endpoint in the metadata response', + ); + } + + done( + undefined, + { tokenset, userinfo }, + { refreshToken: tokenset.refresh_token }, + ); + }, + ); + + const helper = PassportOAuthAuthenticatorHelper.from(strategy); + return { helper, client, strategy }; }); - const strategy = new OidcStrategy( - { - client, - passReqToCallback: false, - }, - ( - tokenset: TokenSet, - userinfo: UserinfoResponse, - done: PassportOAuthDoneCallback, - ) => { - if (typeof done !== 'function') { - throw new Error( - 'OIDC IdP must provide a userinfo_endpoint in the metadata response', - ); - } - - const emails = userinfo.email ? [{ value: userinfo.email }] : undefined; - const photos = userinfo.picture - ? [{ value: userinfo.picture }] - : undefined; - const name = - userinfo.family_name && userinfo.given_name - ? { - familyName: userinfo.family_name, - givenName: userinfo.given_name, - } - : undefined; - - done( - undefined, - { - fullProfile: { - provider: 'oidc', - id: userinfo.sub, - displayName: userinfo.name!, - username: userinfo.preferred_username, - name, - emails, - photos, - }, - accessToken: tokenset.access_token!, - params: { - id_token: tokenset.id_token, - scope: tokenset.scope!, - expires_in: tokenset.expires_in!, - token_type: tokenset.token_type, - }, - }, - { - refreshToken: tokenset.refresh_token, - }, - ); - }, - ); - - const helper = PassportOAuthAuthenticatorHelper.from(strategy); - - return { helper, client, initializedScope, initializedPrompt, strategy }; + return { initializedScope, initializedPrompt, promise }; }, async start(input, ctx) { - const { initializedScope, initializedPrompt, helper, strategy } = await ctx; + const { initializedScope, initializedPrompt, promise } = ctx; + const { helper, strategy } = await promise; const options: Record = { scope: input.scope || initializedScope || 'openid profile email', state: input.state, @@ -140,12 +132,32 @@ export const oidcAuthenticator = createOAuthAuthenticator({ }); }, - async authenticate(input, ctx) { - return (await ctx).helper.authenticate(input); + async authenticate( + input, + ctx, + ): Promise> { + const { strategy } = await ctx.promise; + const { result, privateInfo } = + await PassportHelpers.executeFrameHandlerStrategy< + OidcAuthResult, + PassportOAuthPrivateInfo + >(input.req, strategy); + + return { + fullProfile: result, + session: { + accessToken: result.tokenset.access_token!, + tokenType: result.tokenset.token_type ?? 'bearer', + scope: result.tokenset.scope!, + expiresInSeconds: result.tokenset.expires_in, + idToken: result.tokenset.id_token, + refreshToken: privateInfo.refreshToken, + }, + }; }, async refresh(input, ctx) { - const { client } = await ctx; + const { client } = await ctx.promise; const tokenset = await client.refresh(input.refreshToken); if (!tokenset.access_token) { throw new Error('Refresh failed'); @@ -160,11 +172,7 @@ export const oidcAuthenticator = createOAuthAuthenticator({ reject(new Error('Refresh Failed')); } resolve({ - fullProfile: { - provider: 'oidc', - id: userinfo.sub, - displayName: userinfo.name!, - }, + fullProfile: { userinfo, tokenset }, session: { accessToken: tokenset.access_token!, tokenType: tokenset.token_type ?? 'bearer', diff --git a/plugins/auth-backend-module-oidc-provider/src/index.ts b/plugins/auth-backend-module-oidc-provider/src/index.ts index b14d350d4d..4e951382bb 100644 --- a/plugins/auth-backend-module-oidc-provider/src/index.ts +++ b/plugins/auth-backend-module-oidc-provider/src/index.ts @@ -21,5 +21,6 @@ */ export { oidcAuthenticator } from './authenticator'; +export type { OidcAuthResult } from './authenticator'; export { authModuleOidcProvider as default } from './module'; export { oidcSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index d097ae2881..16f257d17d 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -25,6 +25,7 @@ import { LoggerService } from '@backstage/backend-plugin-api'; import { OAuth2ProxyResult as OAuth2ProxyResult_2 } from '@backstage/plugin-auth-backend-module-oauth2-proxy-provider'; import { OAuthEnvironmentHandler as OAuthEnvironmentHandler_2 } from '@backstage/plugin-auth-node'; import { OAuthState as OAuthState_2 } from '@backstage/plugin-auth-node'; +import { OidcAuthResult } from '@backstage/plugin-auth-backend-module-oidc-provider'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { prepareBackstageIdentityResponse as prepareBackstageIdentityResponse_2 } from '@backstage/plugin-auth-node'; @@ -34,9 +35,7 @@ import { SignInInfo as SignInInfo_2 } from '@backstage/plugin-auth-node'; import { SignInResolver as SignInResolver_2 } from '@backstage/plugin-auth-node'; import { TokenManager } from '@backstage/backend-common'; import { TokenParams as TokenParams_2 } from '@backstage/plugin-auth-node'; -import { TokenSet } from 'openid-client'; import { UserEntity } from '@backstage/catalog-model'; -import { UserinfoResponse } from 'openid-client'; import { WebMessageResponse as WebMessageResponse_2 } from '@backstage/plugin-auth-node'; // @public @deprecated @@ -340,12 +339,6 @@ export type OAuthStartResponse = { // @public @deprecated (undocumented) export type OAuthState = OAuthState_2; -// @public @deprecated -export type OidcAuthResult = { - tokenset: TokenSet; - userinfo: UserinfoResponse; -}; - // @public @deprecated (undocumented) export const postMessageResponse: ( res: express.Response, @@ -564,10 +557,10 @@ export const providers: Readonly<{ create: ( options?: | { - authHandler?: AuthHandler | undefined; + authHandler?: AuthHandler | undefined; signIn?: | { - resolver: SignInResolver; + resolver: SignInResolver; } | undefined; } diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index ca92d4c9dd..918e359610 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -75,7 +75,6 @@ "passport-auth0": "^1.4.3", "passport-bitbucket-oauth2": "^0.1.2", "passport-github2": "^0.1.12", - "passport-gitlab2": "^5.0.0", "passport-google-oauth20": "^2.0.0", "passport-microsoft": "^1.0.0", "passport-oauth2": "^1.6.1", diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index 8173a7fbc3..c8140f864e 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -29,7 +29,6 @@ export type { } from './cloudflare-access'; export type { GithubOAuthResult } from './github'; export type { OAuth2ProxyResult } from './oauth2-proxy'; -export type { OidcAuthResult } from './oidc'; export type { SamlAuthResult } from './saml'; export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap'; diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts index 6b2282411c..c4343b1547 100644 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ b/plugins/auth-backend/src/providers/oidc/index.ts @@ -15,4 +15,3 @@ */ export { oidc } from './provider'; -export type { OidcAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/oidc/provider.test.ts b/plugins/auth-backend/src/providers/oidc/provider.test.ts new file mode 100644 index 0000000000..f2172a796d --- /dev/null +++ b/plugins/auth-backend/src/providers/oidc/provider.test.ts @@ -0,0 +1,169 @@ +/* + * Copyright 2024 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 { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { getVoidLogger } from '@backstage/backend-common'; +import { LoggerService } from '@backstage/backend-plugin-api'; +import { Config, ConfigReader } from '@backstage/config'; +import { + AuthProviderConfig, + AuthResolverContext, + CookieConfigurer, +} from '@backstage/plugin-auth-node'; +import express from 'express'; +import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; +import { oidc } from './provider'; + +describe('oidc.create', () => { + const userinfo = { + sub: 'test', + iss: 'https://oidc.test', + aud: 'clientId', + nonce: 'foo', + }; + const server = setupServer(); + setupRequestMockHandlers(server); + + let publicKey: JWK; + let tokenset: object; + let providerFactoryOptions: { + providerId: string; + globalConfig: AuthProviderConfig; + config: Config; + logger: LoggerService; + resolverContext: AuthResolverContext; + baseUrl: string; + appUrl: string; + isOriginAllowed: (origin: string) => boolean; + cookieConfigurer?: CookieConfigurer; + }; + + beforeAll(async () => { + const keyPair = await generateKeyPair('RS256'); + const privateKey = await exportJWK(keyPair.privateKey); + publicKey = await exportJWK(keyPair.publicKey); + publicKey.alg = privateKey.alg = 'RS256'; + + tokenset = { + id_token: await new SignJWT({ + iat: Date.now(), + exp: Date.now() + 10000, + ...userinfo, + }) + .setProtectedHeader({ alg: privateKey.alg, kid: privateKey.kid }) + .sign(keyPair.privateKey), + access_token: 'accessToken', + }; + }); + + beforeEach(() => { + server.use( + rest.get( + 'https://oidc.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.json({ + issuer: 'https://oidc.test', + token_endpoint: 'https://oidc.test/oauth2/token', + userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', + jwks_uri: 'https://oidc.test/jwks.json', + }), + ), + ), + rest.post('https://oidc.test/oauth2/token', (_req, res, ctx) => + res(ctx.json(tokenset)), + ), + rest.get('https://oidc.test/jwks.json', async (_req, res, ctx) => + res(ctx.json({ keys: [{ ...publicKey }] })), + ), + rest.get( + 'https://oidc.test/idp/userinfo.openid', + async (_req, res, ctx) => res(ctx.json(userinfo)), + ), + ); + providerFactoryOptions = { + providerId: 'myoidc', + baseUrl: 'http://backstage.test/api/auth', + appUrl: 'http://backstage.test', + isOriginAllowed: _ => true, + globalConfig: { + baseUrl: 'http://backstage.test/api/auth', + appUrl: 'http://backstage.test', + isOriginAllowed: _ => true, + }, + config: new ConfigReader({ + development: { + metadataUrl: 'https://oidc.test/.well-known/openid-configuration', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }), + logger: getVoidLogger(), + resolverContext: { + issueToken: jest.fn(), + findCatalogUser: jest.fn(), + signInWithCatalogUser: jest.fn(), + }, + }; + }); + + it('invokes authHandler with tokenset and userinfo response', async () => { + const authHandler = jest.fn(); + const provider = oidc.create({ authHandler })(providerFactoryOptions); + const state = Buffer.from('nonce=foo&env=development').toString('hex'); + + await provider.frameHandler( + { + method: 'GET', + url: `http://backstage.test/api/auth/myoidc/handler/frame?code=blahblah&state=${state}`, + query: { state }, + cookies: { 'myoidc-nonce': 'foo' }, + session: { 'oidc:oidc.test': { state, nonce: 'foo' } }, + } as unknown as express.Request, + { setHeader: jest.fn(), end: jest.fn() } as unknown as express.Response, + ); + + expect(authHandler).toHaveBeenCalledWith( + { tokenset, userinfo }, + providerFactoryOptions.resolverContext, + ); + }); + + it('invokes sign-in resolver with tokenset and userinfo response', async () => { + const resolver = jest.fn(); + const provider = oidc.create({ signIn: { resolver } })( + providerFactoryOptions, + ); + const state = Buffer.from('nonce=foo&env=development').toString('hex'); + + await provider.frameHandler( + { + method: 'GET', + url: `http://backstage.test/api/auth/myoidc/handler/frame?code=blahblah&state=${state}`, + query: { state }, + cookies: { 'myoidc-nonce': 'foo' }, + session: { 'oidc:oidc.test': { state, nonce: 'foo' } }, + } as unknown as express.Request, + { setHeader: jest.fn(), end: jest.fn() } as unknown as express.Response, + ); + + expect(resolver).toHaveBeenCalledWith( + expect.objectContaining({ result: { tokenset, userinfo } }), + providerFactoryOptions.resolverContext, + ); + }); +}); diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index f6804265cd..9bc78c48d2 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -15,30 +15,23 @@ */ import { AuthHandler, SignInResolver } from '../types'; -import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { oidcAuthenticator } from '@backstage/plugin-auth-backend-module-oidc-provider'; -import { TokenSet, UserinfoResponse } from 'openid-client'; + createOAuthProviderFactory, + AuthResolverContext, + BackstageSignInResult, + OAuthAuthenticatorResult, + SignInInfo, +} from '@backstage/plugin-auth-node'; +import { + oidcAuthenticator, + OidcAuthResult, +} from '@backstage/plugin-auth-backend-module-oidc-provider'; import { commonByEmailLocalPartResolver, commonByEmailResolver, } from '../resolvers'; -/** - * authentication result for the OIDC which includes the token set and user information (a profile response sent by OIDC server) - * @public - * @deprecated No longer used - */ -export type OidcAuthResult = { - tokenset: TokenSet; - userinfo: UserinfoResponse; -}; - /** * Auth provider integration for generic OpenID Connect auth * @@ -50,19 +43,39 @@ export const oidc = createAuthProviderIntegration({ * The profile transformation function used to verify and convert the auth response * into the profile that will be presented to the user. */ - authHandler?: AuthHandler; + authHandler?: AuthHandler; /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. + * Configure sign-in for this provider; convert user profile respones into + * Backstage identities. */ signIn?: { - resolver: SignInResolver; + resolver: SignInResolver; }; }) { + const authHandler = options?.authHandler; + const signInResolver = options?.signIn?.resolver; return createOAuthProviderFactory({ authenticator: oidcAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + profileTransform: + authHandler && + (( + result: OAuthAuthenticatorResult, + context: AuthResolverContext, + ) => authHandler(result.fullProfile, context)), + signInResolver: + signInResolver && + (( + info: SignInInfo>, + context: AuthResolverContext, + ): Promise => + signInResolver( + { + result: info.result.fullProfile, + profile: info.profile, + }, + context, + )), }); }, resolvers: { diff --git a/yarn.lock b/yarn.lock index 1e41fd83c7..eb6ade926f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4819,7 +4819,6 @@ __metadata: passport-auth0: ^1.4.3 passport-bitbucket-oauth2: ^0.1.2 passport-github2: ^0.1.12 - passport-gitlab2: ^5.0.0 passport-google-oauth20: ^2.0.0 passport-microsoft: ^1.0.0 passport-oauth2: ^1.6.1 From 7e85338c1f31a846ad4b3f5e5d4607cb7ae78c0c Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Mon, 8 Jan 2024 14:52:19 -0500 Subject: [PATCH 038/129] return to using startTestBackend following the example of #21445 Signed-off-by: Jamie Klassen --- .../src/module.test.ts | 105 ++++++------------ 1 file changed, 33 insertions(+), 72 deletions(-) diff --git a/plugins/auth-backend-module-oidc-provider/src/module.test.ts b/plugins/auth-backend-module-oidc-provider/src/module.test.ts index d2487da450..216c101049 100644 --- a/plugins/auth-backend-module-oidc-provider/src/module.test.ts +++ b/plugins/auth-backend-module-oidc-provider/src/module.test.ts @@ -15,30 +15,21 @@ */ import request from 'supertest'; -import { - AuthProviderRouteHandlers, - createOAuthRouteHandlers, - decodeOAuthState, -} from '@backstage/plugin-auth-node'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { + mockServices, + setupRequestMockHandlers, + startTestBackend, +} from '@backstage/backend-test-utils'; import { Server } from 'http'; -import { AddressInfo } from 'net'; -import express from 'express'; import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; -import cookieParser from 'cookie-parser'; -import passport from 'passport'; -import session from 'express-session'; -import { oidcAuthenticator } from './authenticator'; -import { ConfigReader } from '@backstage/config'; -import Router from 'express-promise-router'; +import { authModuleOidcProvider } from './module'; describe('authModuleOidcProvider', () => { - let app: express.Express; let backstageServer: Server; let appUrl: string; - let providerRouteHandler: AuthProviderRouteHandlers; let idToken: string; let publicKey: JWK; @@ -142,65 +133,35 @@ describe('authModuleOidcProvider', () => { ), ); - const secret = 'secret'; - app = express() - .use(cookieParser(secret)) - .use( - session({ - secret, - saveUninitialized: false, - resave: false, - cookie: { secure: false }, - }), - ) - .use(passport.initialize()) - .use(passport.session()); - await new Promise(resolve => { - backstageServer = app.listen(0, '0.0.0.0', () => { - appUrl = `http://127.0.0.1:${ - (backstageServer.address() as AddressInfo).port - }`; - resolve(null); - }); - }); - - mswServer.use(rest.all(`${appUrl}/*`, req => req.passthrough())); - - providerRouteHandler = createOAuthRouteHandlers({ - authenticator: oidcAuthenticator, - appUrl, - baseUrl: `${appUrl}/api/auth`, - isOriginAllowed: _ => true, - providerId: 'oidc', - config: new ConfigReader({ - metadataUrl: 'https://oidc.test/.well-known/openid-configuration', - clientId: 'clientId', - clientSecret: 'clientSecret', - }), - resolverContext: { - issueToken: async _ => ({ token: '' }), - findCatalogUser: async _ => ({ - entity: { - apiVersion: '', - kind: '', - metadata: { name: '' }, + const backend = await startTestBackend({ + features: [ + authModuleOidcProvider, + import('@backstage/plugin-auth-backend'), + mockServices.rootConfig.factory({ + data: { + app: { baseUrl: 'http://localhost' }, + auth: { + session: { secret: 'test' }, + providers: { + oidc: { + development: { + metadataUrl: + 'https://oidc.test/.well-known/openid-configuration', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }, + }, + }, }, }), - signInWithCatalogUser: async _ => ({ token: '' }), - }, + ], }); - const router = Router(); - router - .use( - '/api/auth/oidc/start', - providerRouteHandler.start.bind(providerRouteHandler), - ) - .use( - '/api/auth/oidc/handler/frame', - providerRouteHandler.frameHandler.bind(providerRouteHandler), - ); - app.use(router); + backstageServer = backend.server; + const port = backend.server.port(); + appUrl = `http://localhost:${port}`; + mswServer.use(rest.all(`http://*:${port}/*`, req => req.passthrough())); }); afterEach(() => { @@ -216,7 +177,7 @@ describe('authModuleOidcProvider', () => { expect(startResponse.status).toEqual(302); const nonceCookie = agent.jar.getCookie('oidc-nonce', { - domain: '127.0.0.1', + domain: 'localhost', path: '/api/auth/oidc/handler', script: false, secure: false, From ef3cad4d00a77111fcfb973f0f0d970574b84b03 Mon Sep 17 00:00:00 2001 From: Diego Mondragon Date: Fri, 8 Dec 2023 09:27:59 -0800 Subject: [PATCH 039/129] Added telemetry header GCP Cloud build Signed-off-by: Diego Mondragon --- .changeset/soft-beans-tease.md | 5 ++ .../cloudbuild/src/api/CloudbuildClient.ts | 51 ++++++++----------- 2 files changed, 27 insertions(+), 29 deletions(-) create mode 100644 .changeset/soft-beans-tease.md diff --git a/.changeset/soft-beans-tease.md b/.changeset/soft-beans-tease.md new file mode 100644 index 0000000000..3f3210a8ce --- /dev/null +++ b/.changeset/soft-beans-tease.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cloudbuild': minor +--- + +Add telemetry HTTP header Google Cloud Platform diff --git a/plugins/cloudbuild/src/api/CloudbuildClient.ts b/plugins/cloudbuild/src/api/CloudbuildClient.ts index cb6747e803..e5dfc47f60 100644 --- a/plugins/cloudbuild/src/api/CloudbuildClient.ts +++ b/plugins/cloudbuild/src/api/CloudbuildClient.ts @@ -20,6 +20,7 @@ import { ActionsGetWorkflowResponseData, } from '../api/types'; import { OAuthApi } from '@backstage/core-plugin-api'; +import packageinfo from '../../package.json'; /** @public */ export class CloudbuildClient implements CloudbuildApi { @@ -29,33 +30,21 @@ export class CloudbuildClient implements CloudbuildApi { projectId: string; runId: string; }): Promise { - await fetch( + await this.request( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( options.projectId, )}/builds/${encodeURIComponent(options.runId)}:retry`, - { - method: 'POST', - headers: new Headers({ - Accept: '*/*', - Authorization: `Bearer ${await this.getToken()}`, - }), - }, + 'POST', ); } async listWorkflowRuns(options: { projectId: string; }): Promise { - const workflowRuns = await fetch( + const workflowRuns = await this.request( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( options.projectId, )}/builds`, - { - headers: new Headers({ - Accept: '*/*', - Authorization: `Bearer ${await this.getToken()}`, - }), - }, ); const builds: ActionsListWorkflowRunsForRepoResponseData = @@ -68,16 +57,10 @@ export class CloudbuildClient implements CloudbuildApi { projectId: string; id: string; }): Promise { - const workflow = await fetch( + const workflow = await this.request( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( options.projectId, )}/builds/${encodeURIComponent(options.id)}`, - { - headers: new Headers({ - Accept: '*/*', - Authorization: `Bearer ${await this.getToken()}`, - }), - }, ); const build: ActionsGetWorkflowResponseData = await workflow.json(); @@ -89,16 +72,10 @@ export class CloudbuildClient implements CloudbuildApi { projectId: string; id: string; }): Promise { - const workflow = await fetch( + const workflow = await this.request( `https://cloudbuild.googleapis.com/v1/projects/${encodeURIComponent( options.projectId, )}/builds/${encodeURIComponent(options.id)}`, - { - headers: new Headers({ - Accept: '*/*', - Authorization: `Bearer ${await this.getToken()}`, - }), - }, ); const build: ActionsGetWorkflowResponseData = await workflow.json(); @@ -114,4 +91,20 @@ export class CloudbuildClient implements CloudbuildApi { 'https://www.googleapis.com/auth/cloud-platform', ); } + + async request(url: string, method: string = 'GET'): Promise { + const requestHeaders = { + Accept: '*/*', + Authorization: `Bearer ${await this.getToken()}`, + ...(process.env.NODE_ENV === 'production' + ? { + 'User-Agent': `backstage/cloudbuild/${packageinfo.version}`, + } + : {}), + }; + return fetch(url, { + method, + headers: requestHeaders, + }); + } } From f8cb33d4a4b376c489dbb35dd26619165ceaa520 Mon Sep 17 00:00:00 2001 From: Diego Mondragon Date: Tue, 12 Dec 2023 14:36:12 -0800 Subject: [PATCH 040/129] Change request method access modifier Signed-off-by: Diego Mondragon --- plugins/cloudbuild/src/api/CloudbuildClient.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/cloudbuild/src/api/CloudbuildClient.ts b/plugins/cloudbuild/src/api/CloudbuildClient.ts index e5dfc47f60..4aa080dbcb 100644 --- a/plugins/cloudbuild/src/api/CloudbuildClient.ts +++ b/plugins/cloudbuild/src/api/CloudbuildClient.ts @@ -92,7 +92,10 @@ export class CloudbuildClient implements CloudbuildApi { ); } - async request(url: string, method: string = 'GET'): Promise { + private async request( + url: string, + method: string = 'GET', + ): Promise { const requestHeaders = { Accept: '*/*', Authorization: `Bearer ${await this.getToken()}`, From 18afd35ef7c8db71dff250c7e10da54ce3b505a1 Mon Sep 17 00:00:00 2001 From: Diego Mondragon Date: Thu, 18 Jan 2024 12:51:44 -0800 Subject: [PATCH 041/129] GCP CloudBuild plugin: change to use custom http header Signed-off-by: Diego Mondragon --- plugins/cloudbuild/src/api/CloudbuildClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/cloudbuild/src/api/CloudbuildClient.ts b/plugins/cloudbuild/src/api/CloudbuildClient.ts index 4aa080dbcb..06f393b433 100644 --- a/plugins/cloudbuild/src/api/CloudbuildClient.ts +++ b/plugins/cloudbuild/src/api/CloudbuildClient.ts @@ -101,7 +101,7 @@ export class CloudbuildClient implements CloudbuildApi { Authorization: `Bearer ${await this.getToken()}`, ...(process.env.NODE_ENV === 'production' ? { - 'User-Agent': `backstage/cloudbuild/${packageinfo.version}`, + 'X-Goog-Api-Client': `backstage/cloudbuild/${packageinfo.version}`, } : {}), }; From 324b9702091806b4df60648afe8ed63ead90b529 Mon Sep 17 00:00:00 2001 From: Aramis Date: Thu, 18 Jan 2024 16:21:39 -0500 Subject: [PATCH 042/129] feat(openapi-tooling): use info.title as the pluginId the current approach to pass pluginId to the client is opaque and using package name as a title isn't super descriptive. Signed-off-by: Aramis --- .../catalog-client/src/generated/apis/DefaultApi.client.ts | 2 +- packages/catalog-client/src/generated/apis/index.ts | 2 +- packages/catalog-client/src/generated/index.ts | 2 +- .../generated/models/AnalyzeLocationEntityField.model.ts | 2 +- .../models/AnalyzeLocationExistingEntity.model.ts | 2 +- .../models/AnalyzeLocationGenerateEntity.model.ts | 2 +- .../src/generated/models/AnalyzeLocationRequest.model.ts | 2 +- .../src/generated/models/AnalyzeLocationResponse.model.ts | 2 +- .../generated/models/CreateLocation201Response.model.ts | 2 +- .../src/generated/models/CreateLocationRequest.model.ts | 2 +- .../src/generated/models/EntitiesBatchResponse.model.ts | 2 +- .../src/generated/models/EntitiesQueryResponse.model.ts | 2 +- .../models/EntitiesQueryResponsePageInfo.model.ts | 2 +- .../catalog-client/src/generated/models/Entity.model.ts | 2 +- .../src/generated/models/EntityAncestryResponse.model.ts | 2 +- .../models/EntityAncestryResponseItemsInner.model.ts | 2 +- .../src/generated/models/EntityFacet.model.ts | 2 +- .../src/generated/models/EntityFacetsResponse.model.ts | 2 +- .../src/generated/models/EntityLink.model.ts | 2 +- .../src/generated/models/EntityMeta.model.ts | 2 +- .../src/generated/models/EntityRelation.model.ts | 2 +- .../src/generated/models/ErrorError.model.ts | 2 +- .../src/generated/models/ErrorRequest.model.ts | 2 +- .../src/generated/models/ErrorResponse.model.ts | 2 +- .../src/generated/models/GetEntitiesByRefsRequest.model.ts | 2 +- .../generated/models/GetLocations200ResponseInner.model.ts | 2 +- .../catalog-client/src/generated/models/Location.model.ts | 2 +- .../src/generated/models/LocationInput.model.ts | 2 +- .../src/generated/models/LocationSpec.model.ts | 2 +- .../src/generated/models/ModelError.model.ts | 2 +- .../src/generated/models/NullableEntity.model.ts | 2 +- .../src/generated/models/RecursivePartialEntity.model.ts | 2 +- .../generated/models/RecursivePartialEntityMeta.model.ts | 2 +- .../models/RecursivePartialEntityMetaAllOf.model.ts | 2 +- .../models/RecursivePartialEntityRelation.model.ts | 2 +- .../src/generated/models/RefreshEntityRequest.model.ts | 2 +- .../generated/models/ValidateEntity400Response.model.ts | 2 +- .../models/ValidateEntity400ResponseErrorsInner.model.ts | 2 +- .../src/generated/models/ValidateEntityRequest.model.ts | 2 +- packages/catalog-client/src/generated/models/index.ts | 2 +- packages/catalog-client/src/generated/pluginId.ts | 2 +- .../templates/typescript-backstage/pluginId.mustache | 6 +----- plugins/catalog-backend/src/schema/openapi.generated.ts | 7 ++----- plugins/catalog-backend/src/schema/openapi.yaml | 3 +-- plugins/search-backend/src/schema/openapi.yaml | 2 +- plugins/todo-backend/src/schema/openapi.yaml | 2 +- 46 files changed, 47 insertions(+), 55 deletions(-) diff --git a/packages/catalog-client/src/generated/apis/DefaultApi.client.ts b/packages/catalog-client/src/generated/apis/DefaultApi.client.ts index 65b8699370..8905e3295a 100644 --- a/packages/catalog-client/src/generated/apis/DefaultApi.client.ts +++ b/packages/catalog-client/src/generated/apis/DefaultApi.client.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/apis/index.ts b/packages/catalog-client/src/generated/apis/index.ts index ad2f72c5b2..51dcca33fe 100644 --- a/packages/catalog-client/src/generated/apis/index.ts +++ b/packages/catalog-client/src/generated/apis/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/index.ts b/packages/catalog-client/src/generated/index.ts index 0cf3e9cc49..bb399e97a0 100644 --- a/packages/catalog-client/src/generated/index.ts +++ b/packages/catalog-client/src/generated/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts index a1c1e1f669..ff905977f8 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts index 5ede0fb60b..06a64b0b25 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts index 886aac05d9..aae5eeccf9 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts index e8e9542f5a..0e0d51d001 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts index bf60aa8018..398771b13c 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts b/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts index d090d80bf2..d5e6a4baa1 100644 --- a/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts +++ b/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts b/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts index 6ef950072e..267b6e0e47 100644 --- a/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts +++ b/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts b/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts index d09b2cc086..deebdd46d7 100644 --- a/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts b/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts index 10d4747caf..1231a62ea9 100644 --- a/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts b/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts index 8a7d5b39bb..06135e2187 100644 --- a/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/Entity.model.ts b/packages/catalog-client/src/generated/models/Entity.model.ts index 59ef9bc741..c7bc507cd4 100644 --- a/packages/catalog-client/src/generated/models/Entity.model.ts +++ b/packages/catalog-client/src/generated/models/Entity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts b/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts index 08076fcf36..8db41427b5 100644 --- a/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts b/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts index 7713c21295..2ca69a66e1 100644 --- a/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts +++ b/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityFacet.model.ts b/packages/catalog-client/src/generated/models/EntityFacet.model.ts index 3872091d77..2652d1ae8a 100644 --- a/packages/catalog-client/src/generated/models/EntityFacet.model.ts +++ b/packages/catalog-client/src/generated/models/EntityFacet.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts b/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts index 0ff37e4f2f..af7a80bd13 100644 --- a/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityLink.model.ts b/packages/catalog-client/src/generated/models/EntityLink.model.ts index f52f9f2df0..7b0b6898fb 100644 --- a/packages/catalog-client/src/generated/models/EntityLink.model.ts +++ b/packages/catalog-client/src/generated/models/EntityLink.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityMeta.model.ts b/packages/catalog-client/src/generated/models/EntityMeta.model.ts index cb0fd28fdc..063edd2d60 100644 --- a/packages/catalog-client/src/generated/models/EntityMeta.model.ts +++ b/packages/catalog-client/src/generated/models/EntityMeta.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/EntityRelation.model.ts b/packages/catalog-client/src/generated/models/EntityRelation.model.ts index 1107f7563c..a5112bfe67 100644 --- a/packages/catalog-client/src/generated/models/EntityRelation.model.ts +++ b/packages/catalog-client/src/generated/models/EntityRelation.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ErrorError.model.ts b/packages/catalog-client/src/generated/models/ErrorError.model.ts index 9dbfa22813..372770fa86 100644 --- a/packages/catalog-client/src/generated/models/ErrorError.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorError.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ErrorRequest.model.ts b/packages/catalog-client/src/generated/models/ErrorRequest.model.ts index e6306b87f5..bc2817f79f 100644 --- a/packages/catalog-client/src/generated/models/ErrorRequest.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ErrorResponse.model.ts b/packages/catalog-client/src/generated/models/ErrorResponse.model.ts index 1f55c34b4a..a266f9d3cc 100644 --- a/packages/catalog-client/src/generated/models/ErrorResponse.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts b/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts index bdda7c2fa6..acdb340c7e 100644 --- a/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts +++ b/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts b/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts index 134306cce7..4fd3623229 100644 --- a/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts +++ b/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/Location.model.ts b/packages/catalog-client/src/generated/models/Location.model.ts index 27e47a5a25..f5b608a2eb 100644 --- a/packages/catalog-client/src/generated/models/Location.model.ts +++ b/packages/catalog-client/src/generated/models/Location.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/LocationInput.model.ts b/packages/catalog-client/src/generated/models/LocationInput.model.ts index 8de7e3e6c9..6bdbe090f2 100644 --- a/packages/catalog-client/src/generated/models/LocationInput.model.ts +++ b/packages/catalog-client/src/generated/models/LocationInput.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/LocationSpec.model.ts b/packages/catalog-client/src/generated/models/LocationSpec.model.ts index 80db2cadf2..21d4342cec 100644 --- a/packages/catalog-client/src/generated/models/LocationSpec.model.ts +++ b/packages/catalog-client/src/generated/models/LocationSpec.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ModelError.model.ts b/packages/catalog-client/src/generated/models/ModelError.model.ts index 989e755c9a..3e3b90ebdd 100644 --- a/packages/catalog-client/src/generated/models/ModelError.model.ts +++ b/packages/catalog-client/src/generated/models/ModelError.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/NullableEntity.model.ts b/packages/catalog-client/src/generated/models/NullableEntity.model.ts index 36aff86ba8..802fc00faa 100644 --- a/packages/catalog-client/src/generated/models/NullableEntity.model.ts +++ b/packages/catalog-client/src/generated/models/NullableEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts index 8de7824550..3bfcc348b9 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts index b21cc1bb21..c56277e2b0 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts index 5111cd7f9f..f53190f323 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts index 50635b69f4..8fcbfd4138 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts b/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts index 573523385b..08358b6849 100644 --- a/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts +++ b/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts b/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts index 0031b2edc2..18e4a47c98 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts b/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts index 6223df27af..5753d9dd18 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts b/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts index d5ce1be5c9..31f68d7ad6 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/models/index.ts b/packages/catalog-client/src/generated/models/index.ts index 5a93dbb33a..d6c81becb5 100644 --- a/packages/catalog-client/src/generated/models/index.ts +++ b/packages/catalog-client/src/generated/models/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/catalog-client/src/generated/pluginId.ts b/packages/catalog-client/src/generated/pluginId.ts index c8c8ce1ca3..b45379f0b0 100644 --- a/packages/catalog-client/src/generated/pluginId.ts +++ b/packages/catalog-client/src/generated/pluginId.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. diff --git a/packages/repo-tools/templates/typescript-backstage/pluginId.mustache b/packages/repo-tools/templates/typescript-backstage/pluginId.mustache index 8bc8461cc9..a71829bb84 100644 --- a/packages/repo-tools/templates/typescript-backstage/pluginId.mustache +++ b/packages/repo-tools/templates/typescript-backstage/pluginId.mustache @@ -1,6 +1,2 @@ -{{#servers}} -{{#-last}} -export const pluginId = "{{url}}"; -{{/-last}} -{{/servers}} \ No newline at end of file +export const pluginId = "{{appName}}"; \ No newline at end of file diff --git a/plugins/catalog-backend/src/schema/openapi.generated.ts b/plugins/catalog-backend/src/schema/openapi.generated.ts index fe64c75373..20dfa2c978 100644 --- a/plugins/catalog-backend/src/schema/openapi.generated.ts +++ b/plugins/catalog-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -22,7 +22,7 @@ import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; export const spec = { openapi: '3.0.3', info: { - title: '@backstage/plugin-catalog-backend', + title: 'catalog', version: '1', description: 'The Backstage backend plugin that provides the Backstage catalog', @@ -36,9 +36,6 @@ export const spec = { { url: '/', }, - { - url: 'catalog', - }, ], components: { examples: {}, diff --git a/plugins/catalog-backend/src/schema/openapi.yaml b/plugins/catalog-backend/src/schema/openapi.yaml index d3ef718286..51283d5fbc 100644 --- a/plugins/catalog-backend/src/schema/openapi.yaml +++ b/plugins/catalog-backend/src/schema/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.0.3 info: - title: '@backstage/plugin-catalog-backend' + title: catalog version: '1' description: The Backstage backend plugin that provides the Backstage catalog license: @@ -9,7 +9,6 @@ info: contact: {} servers: - url: / - - url: catalog components: examples: {} headers: {} diff --git a/plugins/search-backend/src/schema/openapi.yaml b/plugins/search-backend/src/schema/openapi.yaml index 79bb84dfe0..47f7e0a1e5 100644 --- a/plugins/search-backend/src/schema/openapi.yaml +++ b/plugins/search-backend/src/schema/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.0.3 info: - title: '@backstage/plugin-search-backend' + title: search version: '1' description: The Backstage backend plugin that provides search functionality. license: diff --git a/plugins/todo-backend/src/schema/openapi.yaml b/plugins/todo-backend/src/schema/openapi.yaml index 8023144f48..7408927b99 100644 --- a/plugins/todo-backend/src/schema/openapi.yaml +++ b/plugins/todo-backend/src/schema/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: - title: '@backstage/plugin-todo-backend' + title: todo version: '1' description: The Backstage backend plugin that provides source code todo comment browsing. license: From 04907c39c20f8f5ebc2dd306d57c40973580310c Mon Sep 17 00:00:00 2001 From: Aramis Date: Thu, 18 Jan 2024 16:27:49 -0500 Subject: [PATCH 043/129] update documentation and add changeset Signed-off-by: Aramis --- .changeset/afraid-numbers-invite.md | 15 +++++++++++++++ .changeset/nine-bulldogs-camp.md | 8 ++++++++ docs/openapi/generate-client.md | 11 ++++------- 3 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 .changeset/afraid-numbers-invite.md create mode 100644 .changeset/nine-bulldogs-camp.md diff --git a/.changeset/afraid-numbers-invite.md b/.changeset/afraid-numbers-invite.md new file mode 100644 index 0000000000..ee81341d3a --- /dev/null +++ b/.changeset/afraid-numbers-invite.md @@ -0,0 +1,15 @@ +--- +'@backstage/repo-tools': minor +--- + +Updates the OpenAPI client template to support the new format for identifying plugin ID. You should now use `info.title` like so, + +```diff +info: ++ title: yourPluginId +- title: @internal/plugin-*-backend + +servers: + - / +- - yourPluginId +``` diff --git a/.changeset/nine-bulldogs-camp.md b/.changeset/nine-bulldogs-camp.md new file mode 100644 index 0000000000..f397bb9ab7 --- /dev/null +++ b/.changeset/nine-bulldogs-camp.md @@ -0,0 +1,8 @@ +--- +'@backstage/catalog-client': minor +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-search-backend': minor +'@backstage/plugin-todo-backend': minor +--- + +Updates the OpenAPI specification title to plugin ID instead of package name. diff --git a/docs/openapi/generate-client.md b/docs/openapi/generate-client.md index 4afa7d64d7..f2c7c64574 100644 --- a/docs/openapi/generate-client.md +++ b/docs/openapi/generate-client.md @@ -8,15 +8,12 @@ description: Documentation on how to create a client for a given OpenAPI spec ### Prerequisites -1. Add your plugin ID as the last `servers` item, like this, +1. Set your OpenAPI file's `info.title` to your pluginID like so, ```yaml -servers: - # first value, used for OpenAPI router validation. - - url: / - - # final value, pluginId. - - url: catalog +info: + # your pluginId + title: catalog ``` 2. Find or create a new plugin to house your new generated client. Currently, we do not support generating an entirely new plugin and instead just generate client files. From ebd45bcc5d4ac8c70a01f60f7729d6d6e564d302 Mon Sep 17 00:00:00 2001 From: Aramis Date: Thu, 18 Jan 2024 18:21:40 -0500 Subject: [PATCH 044/129] revert prettier license year changes Signed-off-by: Aramis --- packages/catalog-client/src/generated/apis/DefaultApi.client.ts | 2 +- packages/catalog-client/src/generated/apis/index.ts | 2 +- packages/catalog-client/src/generated/index.ts | 2 +- .../src/generated/models/AnalyzeLocationEntityField.model.ts | 2 +- .../src/generated/models/AnalyzeLocationExistingEntity.model.ts | 2 +- .../src/generated/models/AnalyzeLocationGenerateEntity.model.ts | 2 +- .../src/generated/models/AnalyzeLocationRequest.model.ts | 2 +- .../src/generated/models/AnalyzeLocationResponse.model.ts | 2 +- .../src/generated/models/CreateLocation201Response.model.ts | 2 +- .../src/generated/models/CreateLocationRequest.model.ts | 2 +- .../src/generated/models/EntitiesBatchResponse.model.ts | 2 +- .../src/generated/models/EntitiesQueryResponse.model.ts | 2 +- .../src/generated/models/EntitiesQueryResponsePageInfo.model.ts | 2 +- packages/catalog-client/src/generated/models/Entity.model.ts | 2 +- .../src/generated/models/EntityAncestryResponse.model.ts | 2 +- .../generated/models/EntityAncestryResponseItemsInner.model.ts | 2 +- .../catalog-client/src/generated/models/EntityFacet.model.ts | 2 +- .../src/generated/models/EntityFacetsResponse.model.ts | 2 +- .../catalog-client/src/generated/models/EntityLink.model.ts | 2 +- .../catalog-client/src/generated/models/EntityMeta.model.ts | 2 +- .../catalog-client/src/generated/models/EntityRelation.model.ts | 2 +- .../catalog-client/src/generated/models/ErrorError.model.ts | 2 +- .../catalog-client/src/generated/models/ErrorRequest.model.ts | 2 +- .../catalog-client/src/generated/models/ErrorResponse.model.ts | 2 +- .../src/generated/models/GetEntitiesByRefsRequest.model.ts | 2 +- .../src/generated/models/GetLocations200ResponseInner.model.ts | 2 +- packages/catalog-client/src/generated/models/Location.model.ts | 2 +- .../catalog-client/src/generated/models/LocationInput.model.ts | 2 +- .../catalog-client/src/generated/models/LocationSpec.model.ts | 2 +- .../catalog-client/src/generated/models/ModelError.model.ts | 2 +- .../catalog-client/src/generated/models/NullableEntity.model.ts | 2 +- .../src/generated/models/RecursivePartialEntity.model.ts | 2 +- .../src/generated/models/RecursivePartialEntityMeta.model.ts | 2 +- .../generated/models/RecursivePartialEntityMetaAllOf.model.ts | 2 +- .../generated/models/RecursivePartialEntityRelation.model.ts | 2 +- .../src/generated/models/RefreshEntityRequest.model.ts | 2 +- .../src/generated/models/ValidateEntity400Response.model.ts | 2 +- .../models/ValidateEntity400ResponseErrorsInner.model.ts | 2 +- .../src/generated/models/ValidateEntityRequest.model.ts | 2 +- packages/catalog-client/src/generated/models/index.ts | 2 +- packages/catalog-client/src/generated/pluginId.ts | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/packages/catalog-client/src/generated/apis/DefaultApi.client.ts b/packages/catalog-client/src/generated/apis/DefaultApi.client.ts index 8905e3295a..65b8699370 100644 --- a/packages/catalog-client/src/generated/apis/DefaultApi.client.ts +++ b/packages/catalog-client/src/generated/apis/DefaultApi.client.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/apis/index.ts b/packages/catalog-client/src/generated/apis/index.ts index 51dcca33fe..ad2f72c5b2 100644 --- a/packages/catalog-client/src/generated/apis/index.ts +++ b/packages/catalog-client/src/generated/apis/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/index.ts b/packages/catalog-client/src/generated/index.ts index bb399e97a0..0cf3e9cc49 100644 --- a/packages/catalog-client/src/generated/index.ts +++ b/packages/catalog-client/src/generated/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts index ff905977f8..a1c1e1f669 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationEntityField.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts index 06a64b0b25..5ede0fb60b 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationExistingEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts index aae5eeccf9..886aac05d9 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationGenerateEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts index 0e0d51d001..e8e9542f5a 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts b/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts index 398771b13c..bf60aa8018 100644 --- a/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts +++ b/packages/catalog-client/src/generated/models/AnalyzeLocationResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts b/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts index d5e6a4baa1..d090d80bf2 100644 --- a/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts +++ b/packages/catalog-client/src/generated/models/CreateLocation201Response.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts b/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts index 267b6e0e47..6ef950072e 100644 --- a/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts +++ b/packages/catalog-client/src/generated/models/CreateLocationRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts b/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts index deebdd46d7..d09b2cc086 100644 --- a/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesBatchResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts b/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts index 1231a62ea9..10d4747caf 100644 --- a/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesQueryResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts b/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts index 06135e2187..8a7d5b39bb 100644 --- a/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts +++ b/packages/catalog-client/src/generated/models/EntitiesQueryResponsePageInfo.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/Entity.model.ts b/packages/catalog-client/src/generated/models/Entity.model.ts index c7bc507cd4..59ef9bc741 100644 --- a/packages/catalog-client/src/generated/models/Entity.model.ts +++ b/packages/catalog-client/src/generated/models/Entity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts b/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts index 8db41427b5..08076fcf36 100644 --- a/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntityAncestryResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts b/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts index 2ca69a66e1..7713c21295 100644 --- a/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts +++ b/packages/catalog-client/src/generated/models/EntityAncestryResponseItemsInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityFacet.model.ts b/packages/catalog-client/src/generated/models/EntityFacet.model.ts index 2652d1ae8a..3872091d77 100644 --- a/packages/catalog-client/src/generated/models/EntityFacet.model.ts +++ b/packages/catalog-client/src/generated/models/EntityFacet.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts b/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts index af7a80bd13..0ff37e4f2f 100644 --- a/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts +++ b/packages/catalog-client/src/generated/models/EntityFacetsResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityLink.model.ts b/packages/catalog-client/src/generated/models/EntityLink.model.ts index 7b0b6898fb..f52f9f2df0 100644 --- a/packages/catalog-client/src/generated/models/EntityLink.model.ts +++ b/packages/catalog-client/src/generated/models/EntityLink.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityMeta.model.ts b/packages/catalog-client/src/generated/models/EntityMeta.model.ts index 063edd2d60..cb0fd28fdc 100644 --- a/packages/catalog-client/src/generated/models/EntityMeta.model.ts +++ b/packages/catalog-client/src/generated/models/EntityMeta.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/EntityRelation.model.ts b/packages/catalog-client/src/generated/models/EntityRelation.model.ts index a5112bfe67..1107f7563c 100644 --- a/packages/catalog-client/src/generated/models/EntityRelation.model.ts +++ b/packages/catalog-client/src/generated/models/EntityRelation.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ErrorError.model.ts b/packages/catalog-client/src/generated/models/ErrorError.model.ts index 372770fa86..9dbfa22813 100644 --- a/packages/catalog-client/src/generated/models/ErrorError.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorError.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ErrorRequest.model.ts b/packages/catalog-client/src/generated/models/ErrorRequest.model.ts index bc2817f79f..e6306b87f5 100644 --- a/packages/catalog-client/src/generated/models/ErrorRequest.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ErrorResponse.model.ts b/packages/catalog-client/src/generated/models/ErrorResponse.model.ts index a266f9d3cc..1f55c34b4a 100644 --- a/packages/catalog-client/src/generated/models/ErrorResponse.model.ts +++ b/packages/catalog-client/src/generated/models/ErrorResponse.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts b/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts index acdb340c7e..bdda7c2fa6 100644 --- a/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts +++ b/packages/catalog-client/src/generated/models/GetEntitiesByRefsRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts b/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts index 4fd3623229..134306cce7 100644 --- a/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts +++ b/packages/catalog-client/src/generated/models/GetLocations200ResponseInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/Location.model.ts b/packages/catalog-client/src/generated/models/Location.model.ts index f5b608a2eb..27e47a5a25 100644 --- a/packages/catalog-client/src/generated/models/Location.model.ts +++ b/packages/catalog-client/src/generated/models/Location.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/LocationInput.model.ts b/packages/catalog-client/src/generated/models/LocationInput.model.ts index 6bdbe090f2..8de7e3e6c9 100644 --- a/packages/catalog-client/src/generated/models/LocationInput.model.ts +++ b/packages/catalog-client/src/generated/models/LocationInput.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/LocationSpec.model.ts b/packages/catalog-client/src/generated/models/LocationSpec.model.ts index 21d4342cec..80db2cadf2 100644 --- a/packages/catalog-client/src/generated/models/LocationSpec.model.ts +++ b/packages/catalog-client/src/generated/models/LocationSpec.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ModelError.model.ts b/packages/catalog-client/src/generated/models/ModelError.model.ts index 3e3b90ebdd..989e755c9a 100644 --- a/packages/catalog-client/src/generated/models/ModelError.model.ts +++ b/packages/catalog-client/src/generated/models/ModelError.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/NullableEntity.model.ts b/packages/catalog-client/src/generated/models/NullableEntity.model.ts index 802fc00faa..36aff86ba8 100644 --- a/packages/catalog-client/src/generated/models/NullableEntity.model.ts +++ b/packages/catalog-client/src/generated/models/NullableEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts index 3bfcc348b9..8de7824550 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntity.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts index c56277e2b0..b21cc1bb21 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityMeta.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts index f53190f323..5111cd7f9f 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityMetaAllOf.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts b/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts index 8fcbfd4138..50635b69f4 100644 --- a/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts +++ b/packages/catalog-client/src/generated/models/RecursivePartialEntityRelation.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts b/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts index 08358b6849..573523385b 100644 --- a/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts +++ b/packages/catalog-client/src/generated/models/RefreshEntityRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts b/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts index 18e4a47c98..0031b2edc2 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntity400Response.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts b/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts index 5753d9dd18..6223df27af 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntity400ResponseErrorsInner.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts b/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts index 31f68d7ad6..d5ce1be5c9 100644 --- a/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts +++ b/packages/catalog-client/src/generated/models/ValidateEntityRequest.model.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/models/index.ts b/packages/catalog-client/src/generated/models/index.ts index d6c81becb5..5a93dbb33a 100644 --- a/packages/catalog-client/src/generated/models/index.ts +++ b/packages/catalog-client/src/generated/models/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/packages/catalog-client/src/generated/pluginId.ts b/packages/catalog-client/src/generated/pluginId.ts index b45379f0b0..c8c8ce1ca3 100644 --- a/packages/catalog-client/src/generated/pluginId.ts +++ b/packages/catalog-client/src/generated/pluginId.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. From 552e762784265d74f9564d0c25c5f287e98afeb1 Mon Sep 17 00:00:00 2001 From: Aramis Date: Thu, 18 Jan 2024 18:22:00 -0500 Subject: [PATCH 045/129] fix generated files Signed-off-by: Aramis --- plugins/search-backend/src/schema/openapi.generated.ts | 4 ++-- plugins/todo-backend/src/schema/openapi.generated.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/search-backend/src/schema/openapi.generated.ts b/plugins/search-backend/src/schema/openapi.generated.ts index 2586b7a5bf..cc38a6b293 100644 --- a/plugins/search-backend/src/schema/openapi.generated.ts +++ b/plugins/search-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -22,7 +22,7 @@ import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; export const spec = { openapi: '3.0.3', info: { - title: '@backstage/plugin-search-backend', + title: 'search', version: '1', description: 'The Backstage backend plugin that provides search functionality.', diff --git a/plugins/todo-backend/src/schema/openapi.generated.ts b/plugins/todo-backend/src/schema/openapi.generated.ts index effe851790..2308ec0ab5 100644 --- a/plugins/todo-backend/src/schema/openapi.generated.ts +++ b/plugins/todo-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Backstage Authors + * Copyright 2024 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. @@ -22,7 +22,7 @@ import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; export const spec = { openapi: '3.0.3', info: { - title: '@backstage/plugin-todo-backend', + title: 'todo', version: '1', description: 'The Backstage backend plugin that provides source code todo comment browsing.', From 126c2f9e7aa5297166f8b6ee0d60c99cf11df1eb Mon Sep 17 00:00:00 2001 From: Aramis Date: Thu, 18 Jan 2024 18:26:26 -0500 Subject: [PATCH 046/129] add changeset Signed-off-by: Aramis --- .changeset/long-suns-bow.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/long-suns-bow.md diff --git a/.changeset/long-suns-bow.md b/.changeset/long-suns-bow.md new file mode 100644 index 0000000000..837482500f --- /dev/null +++ b/.changeset/long-suns-bow.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-search-backend': minor +'@backstage/plugin-todo-backend': minor +--- + +Updates the OpenAPI spec to use plugin as `info.title` instead of package name. From c03f977e046e8d27308ac2709ef61baace38c1be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 07:43:48 +0000 Subject: [PATCH 047/129] fix(deps): update dependency graphiql to v3.1.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-f58dd5c.md | 5 +++++ plugins/api-docs/package.json | 2 +- yarn.lock | 20 ++------------------ 3 files changed, 8 insertions(+), 19 deletions(-) create mode 100644 .changeset/renovate-f58dd5c.md diff --git a/.changeset/renovate-f58dd5c.md b/.changeset/renovate-f58dd5c.md new file mode 100644 index 0000000000..8a226034ea --- /dev/null +++ b/.changeset/renovate-f58dd5c.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Updated dependency `graphiql` to `3.1.0`. diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 7159aec206..d6473d64d8 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -46,7 +46,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", - "graphiql": "3.0.10", + "graphiql": "3.1.0", "graphql": "^16.0.0", "graphql-config": "^5.0.2", "graphql-ws": "^5.4.1", diff --git a/yarn.lock b/yarn.lock index 25f67aaed4..e9516e9728 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4448,7 +4448,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 "@types/swagger-ui-react": ^4.18.0 - graphiql: 3.0.10 + graphiql: 3.1.0 graphql: ^16.0.0 graphql-config: ^5.0.2 graphql-ws: ^5.4.1 @@ -28409,23 +28409,7 @@ __metadata: languageName: node linkType: hard -"graphiql@npm:3.0.10": - version: 3.0.10 - resolution: "graphiql@npm:3.0.10" - dependencies: - "@graphiql/react": ^0.20.2 - "@graphiql/toolkit": ^0.9.1 - graphql-language-service: ^5.2.0 - markdown-it: ^12.2.0 - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - checksum: f85b5e82cd2280325dedb28d42580119df46b6724a913a571b7a8183c2bf23d4832edf45570d6c8a0af18ba576f50c9b39219a8537277cba626f0411e6ed55bb - languageName: node - linkType: hard - -"graphiql@npm:^3.0.6": +"graphiql@npm:3.1.0, graphiql@npm:^3.0.6": version: 3.1.0 resolution: "graphiql@npm:3.1.0" dependencies: From 98181f627c1a1841e27ae828d8611484e8d686d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:10:32 +0000 Subject: [PATCH 048/129] fix(deps): update dependency json-schema-to-ts to v2.12.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 25f67aaed4..818865fba7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31616,13 +31616,13 @@ __metadata: linkType: hard "json-schema-to-ts@npm:^2.6.2": - version: 2.9.2 - resolution: "json-schema-to-ts@npm:2.9.2" + version: 2.12.0 + resolution: "json-schema-to-ts@npm:2.12.0" dependencies: "@babel/runtime": ^7.18.3 "@types/json-schema": ^7.0.9 - ts-algebra: ^1.2.0 - checksum: 64bf7226511a3719075d28e715fbd203576088b6ebcf494d6c5ee2bcf5b24d6081fa0cfce22ce254ad8798b7044603db4e4d19779c6f5765285fb9ddaa0756ef + ts-algebra: ^1.2.2 + checksum: 6dc4bc836591d888beb20e8bf45dfa3b75df4a331f18675bd2e39a2262e105e0dc86012031fff0be408499a07ae8bc30f5a879c24696189b2c30a34edd5fa72f languageName: node linkType: hard @@ -42475,10 +42475,10 @@ __metadata: languageName: node linkType: hard -"ts-algebra@npm:^1.2.0": - version: 1.2.0 - resolution: "ts-algebra@npm:1.2.0" - checksum: 471d3a049dbceadf2355f980e4d0a4cba413b50e66f0c8fb5eece876c238f7d2a270e1c85aa9ebd04349ae70335715f8e6d87338fd8cf755d12e285e884b3d91 +"ts-algebra@npm:^1.2.2": + version: 1.2.2 + resolution: "ts-algebra@npm:1.2.2" + checksum: eea0c08fba10c4a758086079c575a32c4c050f50087e06fcc1ccd53b045bdf7bdb0ab9597a52a241a714f058ff047cedbddcb1539de5e66bb424aa5b33c677a1 languageName: node linkType: hard From 9dfd57d778cb22db7d0870567545d4d4712563b2 Mon Sep 17 00:00:00 2001 From: David Festal Date: Tue, 16 Jan 2024 19:33:34 +0100 Subject: [PATCH 049/129] Short-term fix to the frontend injected config caching Signed-off-by: David Festal --- .changeset/shy-carrots-decide.md | 5 +++++ plugins/app-backend/src/lib/config.ts | 9 ++++++--- plugins/app-backend/src/service/router.ts | 14 +++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 .changeset/shy-carrots-decide.md diff --git a/.changeset/shy-carrots-decide.md b/.changeset/shy-carrots-decide.md new file mode 100644 index 0000000000..5f64f3d4bd --- /dev/null +++ b/.changeset/shy-carrots-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app-backend': patch +--- + +Do not force caching of the Javascript asset that contains the injected config. diff --git a/plugins/app-backend/src/lib/config.ts b/plugins/app-backend/src/lib/config.ts index 6959253336..05b304075e 100644 --- a/plugins/app-backend/src/lib/config.ts +++ b/plugins/app-backend/src/lib/config.ts @@ -31,7 +31,9 @@ type InjectOptions = { /** * Injects configs into the app bundle, replacing any existing injected config. */ -export async function injectConfig(options: InjectOptions) { +export async function injectConfig( + options: InjectOptions, +): Promise { const { staticDir, logger, appConfigs } = options; const files = await fs.readdir(staticDir); @@ -52,7 +54,7 @@ export async function injectConfig(options: InjectOptions) { injected, ); await fs.writeFile(path, newContent, 'utf8'); - return; + return path; } else if (content.includes('__APP_INJECTED_CONFIG_MARKER__')) { logger.info(`Replacing injected env config in ${jsFile}`); @@ -61,10 +63,11 @@ export async function injectConfig(options: InjectOptions) { injected, ); await fs.writeFile(path, newContent, 'utf8'); - return; + return path; } } logger.info('Env config not injected'); + return undefined; } type ReadOptions = { diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index 40e291c19d..158121bb95 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -114,6 +114,7 @@ export async function createRouter( logger.info(`Serving static app content from ${appDistDir}`); + let injectedConfigPath: string | undefined; if (!disableConfigInjection) { const appConfigs = await readConfigs({ config, @@ -121,7 +122,7 @@ export async function createRouter( env: process.env, }); - await injectConfig({ appConfigs, logger, staticDir }); + injectedConfigPath = await injectConfig({ appConfigs, logger, staticDir }); } const router = Router(); @@ -132,8 +133,15 @@ export async function createRouter( const staticRouter = Router(); staticRouter.use( express.static(resolvePath(appDistDir, 'static'), { - setHeaders: res => { - res.setHeader('Cache-Control', CACHE_CONTROL_MAX_CACHE); + setHeaders: (res, path) => { + if (path === injectedConfigPath) { + logger.info( + `Serving in the injected Javascript file with max caching disabled`, + ); + res.setHeader('Cache-Control', 'no-cache'); + } else { + res.setHeader('Cache-Control', CACHE_CONTROL_MAX_CACHE); + } }, }), ); From 2c27289bd1bf38f37065c69d0bcf808713e01d84 Mon Sep 17 00:00:00 2001 From: David Festal Date: Wed, 17 Jan 2024 15:58:54 +0100 Subject: [PATCH 050/129] fix review comment Signed-off-by: David Festal --- plugins/app-backend/src/service/router.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index 158121bb95..6575b32612 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -135,9 +135,6 @@ export async function createRouter( express.static(resolvePath(appDistDir, 'static'), { setHeaders: (res, path) => { if (path === injectedConfigPath) { - logger.info( - `Serving in the injected Javascript file with max caching disabled`, - ); res.setHeader('Cache-Control', 'no-cache'); } else { res.setHeader('Cache-Control', CACHE_CONTROL_MAX_CACHE); From 48604402dcd5d40157f11ecf83f067036ee0aa65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:16:27 +0000 Subject: [PATCH 051/129] fix(deps): update dependency ws to v8.16.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 7c5f8e3917..8fffed5a4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44615,7 +44615,22 @@ __metadata: languageName: node linkType: hard -"ws@npm:*, ws@npm:8.14.2, ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.14.2, ws@npm:^8.8.0": +"ws@npm:*, ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.14.2, ws@npm:^8.8.0": + version: 8.16.0 + resolution: "ws@npm:8.16.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: feb3eecd2bae82fa8a8beef800290ce437d8b8063bdc69712725f21aef77c49cb2ff45c6e5e7fce622248f9c7abaee506bae0a9064067ffd6935460c7357321b + languageName: node + linkType: hard + +"ws@npm:8.14.2": version: 8.14.2 resolution: "ws@npm:8.14.2" peerDependencies: From 326f556251a6611ac1914416f494a62c7c431675 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Fri, 19 Jan 2024 07:56:51 -0700 Subject: [PATCH 052/129] simplify changeset Signed-off-by: Jason Nguyen --- .changeset/seven-dots-serve.md | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/.changeset/seven-dots-serve.md b/.changeset/seven-dots-serve.md index f48ab1f19c..80919b5d28 100644 --- a/.changeset/seven-dots-serve.md +++ b/.changeset/seven-dots-serve.md @@ -2,33 +2,4 @@ '@backstage/plugin-catalog': minor --- -Exported `CatalogTable.defaultColumnsFunc` to create a seam for defining the columns in `` of some Kinds while using the default columns for the others. -This is useful for defining the columns of a custom Kind or to redefine the columns for a built-in Kind. - -```diff -// packages/app/src/App.tsx - -import { - CatalogEntityPage, - CatalogIndexPage, - catalogPlugin, -+ CatalogTable, -+ CatalogTableColumnsFunc, -} from '@backstage/plugin-catalog'; - -+ const myColumnsFunc: CatalogTableColumnsFunc = (entityListContext) => { -+ if (entityListContext.filters.kind?.value === 'MyKind') { -+ return [ -+ CatalogTable.columns.createNameColumn(), -+ CatalogTable.columns.createOwnerColumn() -+ ]; -+ } -+ -+ return CatalogTable.defaultColumnsFunc(entityListContext); -+ }; - -... - -- } /> -+ } /> -``` +Exported `CatalogTable.defaultColumnsFunc` for defining the columns in `` of some Kinds while using the default columns for the others. From 2067689453dee0a61ebcbda60e9eba78cb95cf01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Fri, 19 Jan 2024 16:11:36 +0100 Subject: [PATCH 053/129] fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/hot-tips-doubt.md | 5 +++++ packages/backend-openapi-utils/api-report.md | 6 +++--- packages/backend-openapi-utils/src/types/common.ts | 4 ++-- packages/backend-openapi-utils/src/types/params.ts | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 .changeset/hot-tips-doubt.md diff --git a/.changeset/hot-tips-doubt.md b/.changeset/hot-tips-doubt.md new file mode 100644 index 0000000000..464ddec302 --- /dev/null +++ b/.changeset/hot-tips-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-openapi-utils': patch +--- + +Internal updates due to `json-schema-to-ts` diff --git a/packages/backend-openapi-utils/api-report.md b/packages/backend-openapi-utils/api-report.md index 0d78ec9671..8e702b8c23 100644 --- a/packages/backend-openapi-utils/api-report.md +++ b/packages/backend-openapi-utils/api-report.md @@ -7,7 +7,7 @@ import type { ContentObject } from 'openapi3-ts'; import type core from 'express-serve-static-core'; import { Express as Express_2 } from 'express'; import { FromSchema } from 'json-schema-to-ts'; -import { JSONSchema7 } from 'json-schema-to-ts'; +import { JSONSchema } from 'json-schema-to-ts'; import { middleware } from 'express-openapi-validator'; import type { OpenAPIObject } from 'openapi3-ts'; import type { ParameterObject } from 'openapi3-ts'; @@ -62,7 +62,7 @@ type ComponentTypes = Extract< // @public (undocumented) type ConvertAll> = { - [Index in keyof T]: T[Index] extends JSONSchema7 + [Index in keyof T]: T[Index] extends JSONSchema ? FromSchema : T[Index]; } & { @@ -463,7 +463,7 @@ type ParameterSchema< Schema extends ImmutableParameterObject['schema'], > = SchemaRef extends infer R ? R extends ImmutableSchemaObject - ? R extends JSONSchema7 + ? R extends JSONSchema ? FromSchema : never : never diff --git a/packages/backend-openapi-utils/src/types/common.ts b/packages/backend-openapi-utils/src/types/common.ts index f9dedf2f84..a43ad4449f 100644 --- a/packages/backend-openapi-utils/src/types/common.ts +++ b/packages/backend-openapi-utils/src/types/common.ts @@ -18,7 +18,7 @@ * Pulled from https://github.com/varanauskas/oatx. */ -import { FromSchema, JSONSchema7 } from 'json-schema-to-ts'; +import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { ImmutableContentObject, ImmutableOpenAPIObject, @@ -221,7 +221,7 @@ export type TuplifyUnion< * @public */ export type ConvertAll> = { - [Index in keyof T]: T[Index] extends JSONSchema7 + [Index in keyof T]: T[Index] extends JSONSchema ? FromSchema : T[Index]; } & { length: T['length'] }; diff --git a/packages/backend-openapi-utils/src/types/params.ts b/packages/backend-openapi-utils/src/types/params.ts index 208cbd4e9a..969657bac7 100644 --- a/packages/backend-openapi-utils/src/types/params.ts +++ b/packages/backend-openapi-utils/src/types/params.ts @@ -36,7 +36,7 @@ import { SchemaRef, ValueOf, } from './common'; -import { FromSchema, JSONSchema7 } from 'json-schema-to-ts'; +import { FromSchema, JSONSchema } from 'json-schema-to-ts'; /** * @public @@ -96,7 +96,7 @@ export type ParameterSchema< Schema extends ImmutableParameterObject['schema'], > = SchemaRef extends infer R ? R extends ImmutableSchemaObject - ? R extends JSONSchema7 + ? R extends JSONSchema ? FromSchema : never : never From c12a86ca918ccfe6488c37359b9d59912a7403ef Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Fri, 19 Jan 2024 20:46:06 +0530 Subject: [PATCH 054/129] fix a11y issue in devtools plugin Signed-off-by: npiyush97 --- .changeset/fifty-adults-watch.md | 5 ++++ .../Content/ConfigContent/ConfigContent.tsx | 2 +- .../Content/InfoContent/InfoContent.tsx | 27 +++++++++---------- 3 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 .changeset/fifty-adults-watch.md diff --git a/.changeset/fifty-adults-watch.md b/.changeset/fifty-adults-watch.md new file mode 100644 index 0000000000..8bff1c28cd --- /dev/null +++ b/.changeset/fifty-adults-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-devtools': patch +--- + +Refactored code to improve accessibility by moving elements outside the `ul` tag and placing them appropriately. Also adjusted theme to offer better contrast. diff --git a/plugins/devtools/src/components/Content/ConfigContent/ConfigContent.tsx b/plugins/devtools/src/components/Content/ConfigContent/ConfigContent.tsx index aba46f85b7..4bd4bc95c6 100644 --- a/plugins/devtools/src/components/Content/ConfigContent/ConfigContent.tsx +++ b/plugins/devtools/src/components/Content/ConfigContent/ConfigContent.tsx @@ -87,7 +87,7 @@ export const ConfigContent = () => { src={configInfo.config as object} name="config" enableClipboard={false} - theme={theme.palette.type === 'dark' ? 'monokai' : 'rjv-default'} + theme={theme.palette.type === 'dark' ? 'chalk' : 'rjv-default'} /> diff --git a/plugins/devtools/src/components/Content/InfoContent/InfoContent.tsx b/plugins/devtools/src/components/Content/InfoContent/InfoContent.tsx index fcbea53603..d32f8619ba 100644 --- a/plugins/devtools/src/components/Content/InfoContent/InfoContent.tsx +++ b/plugins/devtools/src/components/Content/InfoContent/InfoContent.tsx @@ -23,6 +23,7 @@ import ListItem from '@material-ui/core/ListItem'; import ListItemAvatar from '@material-ui/core/ListItemAvatar'; import ListItemText from '@material-ui/core/ListItemText'; import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import Alert from '@material-ui/lab/Alert'; import React from 'react'; @@ -38,6 +39,7 @@ import { DevToolsInfo } from '@backstage/plugin-devtools-common'; const useStyles = makeStyles((theme: Theme) => createStyles({ paperStyle: { + display: 'flex', marginBottom: theme.spacing(2), }, flexContainer: { @@ -123,22 +125,17 @@ export const InfoContent = () => { secondary={about?.backstageVersion} /> - - { - copyToClipboard({ about }); - }} - className={classes.copyButton} - > - - - - - - - + + From fb2f3943409711cc1b210445377edd0be8a3ca60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:10:54 +0000 Subject: [PATCH 055/129] fix(deps): update react-router monorepo to v6.21.3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8501156914..27d7cc2248 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14826,10 +14826,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.13.1": - version: 1.13.1 - resolution: "@remix-run/router@npm:1.13.1" - checksum: cebbf0a8cf31cafd818d8ce42d5b6a0bfdd0e1f81b9ffb7a88c5d7a9d2a81d1fdf098cc8610d34ef3d6cfe7bc778b2ca1fe336a740eb7a175d1234d017927f8a +"@remix-run/router@npm:1.14.2": + version: 1.14.2 + resolution: "@remix-run/router@npm:1.14.2" + checksum: 8be55596f64563de95dea04c147ab67c4e6c9b72277c92d4de257dbb326e2aa16ad2adbdec32eb2c985808c642933ac895220654b8c899e4f4bd38f9fd97ff6e languageName: node linkType: hard @@ -38604,15 +38604,15 @@ __metadata: linkType: hard "react-router-dom@npm:^6.3.0": - version: 6.20.1 - resolution: "react-router-dom@npm:6.20.1" + version: 6.21.3 + resolution: "react-router-dom@npm:6.21.3" dependencies: - "@remix-run/router": 1.13.1 - react-router: 6.20.1 + "@remix-run/router": 1.14.2 + react-router: 6.21.3 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 137b12fd3c3fd2a9469367946353c8ccd4e31473c6ec650eeb2d9e9f256f64b031fafaecb2ae4dc47bbab817c8d089b1f07a0db74699df7d874850e511cd5380 + checksum: bcf668aa1428ca3048d7675f1ae3fe983c8792357a0ed59a1414cb1d682227727aad7c44c4222c6774b8d01bf352478845f7f3f668ebfcaa177208ef64e10bdc languageName: node linkType: hard @@ -38627,14 +38627,14 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.20.1, react-router@npm:^6.3.0": - version: 6.20.1 - resolution: "react-router@npm:6.20.1" +"react-router@npm:6.21.3, react-router@npm:^6.3.0": + version: 6.21.3 + resolution: "react-router@npm:6.21.3" dependencies: - "@remix-run/router": 1.13.1 + "@remix-run/router": 1.14.2 peerDependencies: react: ">=16.8" - checksum: 046efa4b101c64de823f0c838948a50ad53f3ccdd7887604d93c1ccf19c4e797935cab602aa001d793544445412ebeb95c2c7f880e3e86ca447772db574789d7 + checksum: 7e6297d5b67ae07d2e8564e036dbb15ebd706b41c22238940f47eee9b21ffb76d41336803c3b33435f1ebe210226577e32df3838bcbf2cd7c813fa357c0a4fac languageName: node linkType: hard From 6a74ffda10922c8f2decd0cfe6f88244777522de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:11:19 +0000 Subject: [PATCH 056/129] fix(deps): update rjsf monorepo to v5.16.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-47c1714.md | 11 ++++ plugins/home-react/package.json | 2 +- plugins/home/package.json | 8 +-- plugins/scaffolder-react/package.json | 8 +-- plugins/scaffolder/package.json | 8 +-- yarn.lock | 80 +++++++++++++-------------- 6 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 .changeset/renovate-47c1714.md diff --git a/.changeset/renovate-47c1714.md b/.changeset/renovate-47c1714.md new file mode 100644 index 0000000000..4544d36713 --- /dev/null +++ b/.changeset/renovate-47c1714.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/utils` to `5.16.1`. +Updated dependency `@rjsf/core` to `5.16.1`. +Updated dependency `@rjsf/material-ui` to `5.16.1`. +Updated dependency `@rjsf/validator-ajv8` to `5.16.1`. diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 896d9e46f2..e01c99f079 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -38,7 +38,7 @@ "@backstage/core-plugin-api": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@rjsf/utils": "5.15.1", + "@rjsf/utils": "5.16.1", "@types/react": "^16.13.1 || ^17.0.0" }, "peerDependencies": { diff --git a/plugins/home/package.json b/plugins/home/package.json index 9eff9d6110..64ad13cc2b 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -60,10 +60,10 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "@rjsf/core": "5.15.1", - "@rjsf/material-ui": "5.15.1", - "@rjsf/utils": "5.15.1", - "@rjsf/validator-ajv8": "5.15.1", + "@rjsf/core": "5.16.1", + "@rjsf/material-ui": "5.16.1", + "@rjsf/utils": "5.16.1", + "@rjsf/validator-ajv8": "5.16.1", "@types/react": "^16.13.1 || ^17.0.0", "lodash": "^4.17.21", "luxon": "^3.4.3", diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index f8390667be..fd6bcf5076 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -59,10 +59,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^23.0.0", - "@rjsf/core": "5.15.1", - "@rjsf/material-ui": "5.15.1", - "@rjsf/utils": "5.15.1", - "@rjsf/validator-ajv8": "5.15.1", + "@rjsf/core": "5.16.1", + "@rjsf/material-ui": "5.16.1", + "@rjsf/utils": "5.16.1", + "@rjsf/validator-ajv8": "5.16.1", "@types/json-schema": "^7.0.9", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 8652c380ba..40364e2da7 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -68,10 +68,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^23.0.0", - "@rjsf/core": "5.15.1", - "@rjsf/material-ui": "5.15.1", - "@rjsf/utils": "5.15.1", - "@rjsf/validator-ajv8": "5.15.1", + "@rjsf/core": "5.16.1", + "@rjsf/material-ui": "5.16.1", + "@rjsf/utils": "5.16.1", + "@rjsf/validator-ajv8": "5.16.1", "@types/react": "^16.13.1 || ^17.0.0", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/yarn.lock b/yarn.lock index 8501156914..7c66988af4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6876,7 +6876,7 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@rjsf/utils": 5.15.1 + "@rjsf/utils": 5.16.1 "@types/react": ^16.13.1 || ^17.0.0 "@types/react-grid-layout": ^1.3.2 peerDependencies: @@ -6906,10 +6906,10 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core": 5.15.1 - "@rjsf/material-ui": 5.15.1 - "@rjsf/utils": 5.15.1 - "@rjsf/validator-ajv8": 5.15.1 + "@rjsf/core": 5.16.1 + "@rjsf/material-ui": 5.16.1 + "@rjsf/utils": 5.16.1 + "@rjsf/validator-ajv8": 5.16.1 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -8289,10 +8289,10 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^23.0.0 - "@rjsf/core": 5.15.1 - "@rjsf/material-ui": 5.15.1 - "@rjsf/utils": 5.15.1 - "@rjsf/validator-ajv8": 5.15.1 + "@rjsf/core": 5.16.1 + "@rjsf/material-ui": 5.16.1 + "@rjsf/utils": 5.16.1 + "@rjsf/validator-ajv8": 5.16.1 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -8352,10 +8352,10 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^23.0.0 - "@rjsf/core": 5.15.1 - "@rjsf/material-ui": 5.15.1 - "@rjsf/utils": 5.15.1 - "@rjsf/validator-ajv8": 5.15.1 + "@rjsf/core": 5.16.1 + "@rjsf/material-ui": 5.16.1 + "@rjsf/utils": 5.16.1 + "@rjsf/validator-ajv8": 5.16.1 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -14847,38 +14847,38 @@ __metadata: languageName: node linkType: hard -"@rjsf/core@npm:5.15.1": - version: 5.15.1 - resolution: "@rjsf/core@npm:5.15.1" +"@rjsf/core@npm:5.16.1": + version: 5.16.1 + resolution: "@rjsf/core@npm:5.16.1" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 - markdown-to-jsx: ^7.3.2 - nanoid: ^3.3.6 + markdown-to-jsx: ^7.4.0 + nanoid: ^3.3.7 prop-types: ^15.8.1 peerDependencies: - "@rjsf/utils": ^5.12.x + "@rjsf/utils": ^5.16.x react: ^16.14.0 || >=17 - checksum: d03f05563e7eafbcb3ea72b41867ec1b95547ed95609b10d0af6c09e880f119d50ad3bd76d2c6a903fa7c6c3286007684d43ce0a0c318d910f0e2a35cd7ef8de + checksum: 2f88dc6af9dda8ec5c8cbac63f3f9e776a11fe363ce938aa7b5c7a3baaa84a7a2f3796ebf55b361a8cb65267a1715ab880a4743636fb88e06b0240d07f0e4c7b languageName: node linkType: hard -"@rjsf/material-ui@npm:5.15.1": - version: 5.15.1 - resolution: "@rjsf/material-ui@npm:5.15.1" +"@rjsf/material-ui@npm:5.16.1": + version: 5.16.1 + resolution: "@rjsf/material-ui@npm:5.16.1" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 - "@rjsf/core": ^5.12.x - "@rjsf/utils": ^5.12.x + "@rjsf/core": ^5.16.x + "@rjsf/utils": ^5.16.x react: ^16.14.0 || >=17 - checksum: cd282bdeadbb291402e2064e1983e9da8515881bac2011a428a85addf3fcf2935d25333a333d4d3373a61fe6993c7598737c5af75bba008018dd2c7754195ba6 + checksum: ca237b699d74246622f4a29078674bfbf9c8238adec7fda6a5062e064d11c6f15c6dba117daa21fe3ac778fa2e884fb2366b5c5bb5e9490f91f9b611f7f010fe languageName: node linkType: hard -"@rjsf/utils@npm:5.15.1": - version: 5.15.1 - resolution: "@rjsf/utils@npm:5.15.1" +"@rjsf/utils@npm:5.16.1": + version: 5.16.1 + resolution: "@rjsf/utils@npm:5.16.1" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -14887,21 +14887,21 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: ec0d56bf2627d55759a59090db0d59402244a6fae64528f66dde1f5de2eaaf2a6841dea7bbb185eb36fd344b3abd4825b2b422f3b1b0bb05365847073aa1e790 + checksum: 0c69527de4ab6f9d6ec4d1a5e05a31a0a38062d40abe2a2da7bc2324b20b08b0e90c188977ac4408f3b004c758c28097444746f3215e21e184c11cad7e9278c1 languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.15.1": - version: 5.15.1 - resolution: "@rjsf/validator-ajv8@npm:5.15.1" +"@rjsf/validator-ajv8@npm:5.16.1": + version: 5.16.1 + resolution: "@rjsf/validator-ajv8@npm:5.16.1" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 lodash: ^4.17.21 lodash-es: ^4.17.21 peerDependencies: - "@rjsf/utils": ^5.12.x - checksum: d32538968d9a9a664a44ffee1b24a835142aaacda3c1ad4671f6d6a4ed564e68e5dea4f37d1c62ee2c03f8a5b55174c0815040eff3c7814260c1181f945adced + "@rjsf/utils": ^5.16.x + checksum: ab26fc02ad86c7ff36e69aa1285b43a67aa65b2a47e3741a67c243131f74848e55f7215a20416c1a636703aa7f95af7d4270eda9818253f7ea2b3c5f86a26980 languageName: node linkType: hard @@ -33239,12 +33239,12 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.3.2": - version: 7.3.2 - resolution: "markdown-to-jsx@npm:7.3.2" +"markdown-to-jsx@npm:^7.4.0": + version: 7.4.0 + resolution: "markdown-to-jsx@npm:7.4.0" peerDependencies: react: ">= 0.14.0" - checksum: 8885c6343b71570b0a7ec16cd85a49b853a830234790ee7430e2517ea5d8d361ff138bd52147f650790f3e7b3a28a15c755fc16f8856dd01ddf09a6161782e06 + checksum: 59959d14d7927ed8a97e42d39771e2b445b90fa098477fb6ab040f044d230517dc4a95ba38a4f924cfc965a96b32211d93def150a6184f0e51d2cefdc8cb415d languageName: node linkType: hard @@ -34699,7 +34699,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": +"nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: From 005e9b8e7fd90338e7db409c30b3c9682b40eaa7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:11:58 +0000 Subject: [PATCH 057/129] fix(deps): update typescript-eslint monorepo to v6.19.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 97 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8501156914..b0cd3a41e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19252,14 +19252,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^6.12.0": - version: 6.14.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.14.0" + version: 6.19.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.19.0" dependencies: "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.14.0 - "@typescript-eslint/type-utils": 6.14.0 - "@typescript-eslint/utils": 6.14.0 - "@typescript-eslint/visitor-keys": 6.14.0 + "@typescript-eslint/scope-manager": 6.19.0 + "@typescript-eslint/type-utils": 6.19.0 + "@typescript-eslint/utils": 6.19.0 + "@typescript-eslint/visitor-keys": 6.19.0 debug: ^4.3.4 graphemer: ^1.4.0 ignore: ^5.2.4 @@ -19272,25 +19272,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ec688fd71b21576bfe0e4176889fddf3c13d8b07792461b84017d689ed11a9bffbf4d2ab61e9bdb254e43d2c1e159d5c2fc21bdfa6a6c2d64f9e1956a668fbe8 + checksum: 9880567d52d4e6559e2343caeed68f856d593b42816b8f705cd98d5a5b46cc620e3bebaaf08bbc982061bba18e5be94d6c539c0c816e8772ddabba0ad4e9363e languageName: node linkType: hard "@typescript-eslint/parser@npm:^6.7.2": - version: 6.14.0 - resolution: "@typescript-eslint/parser@npm:6.14.0" + version: 6.19.0 + resolution: "@typescript-eslint/parser@npm:6.19.0" dependencies: - "@typescript-eslint/scope-manager": 6.14.0 - "@typescript-eslint/types": 6.14.0 - "@typescript-eslint/typescript-estree": 6.14.0 - "@typescript-eslint/visitor-keys": 6.14.0 + "@typescript-eslint/scope-manager": 6.19.0 + "@typescript-eslint/types": 6.19.0 + "@typescript-eslint/typescript-estree": 6.19.0 + "@typescript-eslint/visitor-keys": 6.19.0 debug: ^4.3.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 5fbe8d7431654c14ba6c9782d3728026ad5c90e02c9c4319f45df972e653cf5c15ba320dce70cdffa9fb7ce4c4263c37585e7bc1c909d1252d0a599880963063 + checksum: 0ac91ff83fdf693de4494b45be79f25803ea6ca3ee717e4f96785b7ffc1da0180adb0426b61bc6eff5666c8ef9ea58c50efbd4351ef9018c0050116cbd74a62b languageName: node linkType: hard @@ -19304,22 +19304,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/scope-manager@npm:6.14.0" +"@typescript-eslint/scope-manager@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/scope-manager@npm:6.19.0" dependencies: - "@typescript-eslint/types": 6.14.0 - "@typescript-eslint/visitor-keys": 6.14.0 - checksum: 0b577d42db925426a9838fe61703c226e18b697374fbe20cf9b93ba30fe58bf4a7f7f42491a4d24b7f3cc12d9a189fe3524c0e9b7708727e710d95b908250a14 + "@typescript-eslint/types": 6.19.0 + "@typescript-eslint/visitor-keys": 6.19.0 + checksum: 47d9d1b70cd64f9d1bb717090850e0ff1a34e453c28b43fd0cecaea4db05cacebd60f5da55b35c4b3cc01491f02e9de358f82a0822b27c00e80e3d1a27de32d1 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/type-utils@npm:6.14.0" +"@typescript-eslint/type-utils@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/type-utils@npm:6.19.0" dependencies: - "@typescript-eslint/typescript-estree": 6.14.0 - "@typescript-eslint/utils": 6.14.0 + "@typescript-eslint/typescript-estree": 6.19.0 + "@typescript-eslint/utils": 6.19.0 debug: ^4.3.4 ts-api-utils: ^1.0.1 peerDependencies: @@ -19327,7 +19327,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 09988f25279598840673c41ba44b03756f2dfb31284ab72af97c170711a0f31e5c53d6b120aa83f31438565e82aae1a1ca4d1ed0de4890654dd6a6a33d88202c + checksum: a88f022617be636f43429a7c7c5cd2e0e29955e96d4a9fed7d03467dc4a432b1240a71009d62213604ddb3522be9694e6b78882ee805687cda107021d1ddb203 languageName: node linkType: hard @@ -19338,10 +19338,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/types@npm:6.14.0" - checksum: 624e6c5227f596dcc9757348d09c5a09b846a62938b8b4409614cf8108013b64ed8b270c32e87ea8890dd09ed896b82e92872c3574dbf07dcda11a168d69dd1f +"@typescript-eslint/types@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/types@npm:6.19.0" + checksum: 1371b5ba41c1d2879b3c2823ab01a30cf034e476ef53ff2a7f9e9a4a0056dfbbfecd3143031b05430aa6c749233cacbd01b72cea38a9ece1c6cf95a5cd43da6a languageName: node linkType: hard @@ -19363,38 +19363,39 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.14.0" +"@typescript-eslint/typescript-estree@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.19.0" dependencies: - "@typescript-eslint/types": 6.14.0 - "@typescript-eslint/visitor-keys": 6.14.0 + "@typescript-eslint/types": 6.19.0 + "@typescript-eslint/visitor-keys": 6.19.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 + minimatch: 9.0.3 semver: ^7.5.4 ts-api-utils: ^1.0.1 peerDependenciesMeta: typescript: optional: true - checksum: 495d7616463685bfd8138ffa9fbc0a7f9130ff8a3f6f85775960b4f0a3fdc259ae53b104cdfe562b60310860b5a6c8387307790734555084aa087e3bb9c28a69 + checksum: 919f9588840cdab7e0ef6471f4c35d602523b142b2cffeabe9171d6ce65eb7f41614d0cb17e008e0d8e796374821ab053ced35b84642c3b1d491987362f2fdb5 languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/utils@npm:6.14.0" +"@typescript-eslint/utils@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/utils@npm:6.19.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 "@types/json-schema": ^7.0.12 "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.14.0 - "@typescript-eslint/types": 6.14.0 - "@typescript-eslint/typescript-estree": 6.14.0 + "@typescript-eslint/scope-manager": 6.19.0 + "@typescript-eslint/types": 6.19.0 + "@typescript-eslint/typescript-estree": 6.19.0 semver: ^7.5.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 36e8501cb85647947189f31017c36d6f6ac7ef0399fa0e18eb64f1b83e00f1e8ace1d9ac5015ef4d9c1b820179f1def8d61d7ea9e5d61433eb848cf5c49dc8b0 + checksum: 05a26251a526232b08850b6c3327637213ef989453e353f3a8255433b74893a70d5c38369c528b762e853b7586d7830d728b372494e65f37770ecb05a88112d4 languageName: node linkType: hard @@ -19426,13 +19427,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.14.0" +"@typescript-eslint/visitor-keys@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.19.0" dependencies: - "@typescript-eslint/types": 6.14.0 + "@typescript-eslint/types": 6.19.0 eslint-visitor-keys: ^3.4.1 - checksum: fc593c4e94d5739be7bd88e42313a301bc9806fad758b6a0a1bafd296ff41522be602caf4976beec84e363b0f56585bb98df3c157f70de984de721798501fd8a + checksum: 35b11143e1b55ecf01e0f513085df2cc83d0781f4a8354dc10f6ec3356f66b91a1ed8abadb6fb66af1c1746f9c874eabc8b5636882466e229cda5d6a39aada08 languageName: node linkType: hard From cd1a1bae673fcb28af0c49d32efb248dfdafa4f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:54:00 +0000 Subject: [PATCH 058/129] chore(deps): update actions/cache action to v4 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/uffizzi-preview.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uffizzi-preview.yaml b/.github/workflows/uffizzi-preview.yaml index 2c1c353847..47029df5e0 100644 --- a/.github/workflows/uffizzi-preview.yaml +++ b/.github/workflows/uffizzi-preview.yaml @@ -76,7 +76,7 @@ jobs: - name: Cache Manifests File if: ${{ steps.event.outputs.ACTION != 'closed' }} - uses: actions/cache@v3.3.3 + uses: actions/cache@v4.0.0 with: path: manifests.rendered.yml key: ${{ steps.hash.outputs.MANIFESTS_FILE_HASH }} @@ -140,7 +140,7 @@ jobs: - name: Fetch cached Manifests File id: cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: manifests.rendered.yml key: ${{ needs.cache-manifests-file.outputs.manifests-cache-key }} From 7fe1460bb59e422569448f30ec69bbcb8c4626e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 18:25:33 +0000 Subject: [PATCH 059/129] fix(deps): update docusaurus monorepo to v0.0.0-5809 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- microsite/package.json | 8 +- microsite/yarn.lock | 2497 +++++++++++++++------------------------- 2 files changed, 945 insertions(+), 1560 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index 53309fb358..637327f83e 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -18,7 +18,7 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "0.0.0-5703", + "@docusaurus/module-type-aliases": "0.0.0-5809", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^2.0.0", "@types/luxon": "^3.0.0", @@ -30,9 +30,9 @@ }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "0.0.0-5703", - "@docusaurus/plugin-client-redirects": "0.0.0-5703", - "@docusaurus/preset-classic": "0.0.0-5703", + "@docusaurus/core": "0.0.0-5809", + "@docusaurus/plugin-client-redirects": "0.0.0-5809", + "@docusaurus/preset-classic": "0.0.0-5809", "@swc/core": "^1.3.46", "clsx": "^2.0.0", "docusaurus-plugin-sass": "^0.2.3", diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a2489da001..1841fcb678 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -197,55 +197,55 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.8.3": - version: 7.22.13 - resolution: "@babel/code-frame@npm:7.22.13" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.8.3": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" dependencies: - "@babel/highlight": ^7.22.13 + "@babel/highlight": ^7.23.4 chalk: ^2.4.2 - checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.20 - resolution: "@babel/compat-data@npm:7.22.20" - checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/compat-data@npm:7.23.5" + checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744 languageName: node linkType: hard -"@babel/core@npm:^7.19.6, @babel/core@npm:^7.22.9": - version: 7.23.0 - resolution: "@babel/core@npm:7.23.0" +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.23.3": + version: 7.23.7 + resolution: "@babel/core@npm:7.23.7" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.0 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.23.0 - "@babel/helpers": ^7.23.0 - "@babel/parser": ^7.23.0 + "@babel/code-frame": ^7.23.5 + "@babel/generator": ^7.23.6 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helpers": ^7.23.7 + "@babel/parser": ^7.23.6 "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.0 - "@babel/types": ^7.23.0 + "@babel/traverse": ^7.23.7 + "@babel/types": ^7.23.6 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 + checksum: 32d5bf73372a47429afaae9adb0af39e47bcea6a831c4b5dcbb4791380cda6949cb8cb1a2fea8b60bb1ebe189209c80e333903df1fa8e9dcb04798c0ce5bf59e languageName: node linkType: hard -"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/generator@npm:7.23.0" +"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" dependencies: - "@babel/types": ^7.23.0 + "@babel/types": ^7.23.6 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 + checksum: 1a1a1c4eac210f174cd108d479464d053930a812798e09fee069377de39a893422df5b5b146199ead7239ae6d3a04697b45fc9ac6e38e0f6b76374390f91fc6c languageName: node linkType: hard @@ -267,16 +267,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": - version: 7.22.15 - resolution: "@babel/helper-compilation-targets@npm:7.22.15" +"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: - "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.15 - browserslist: ^4.21.9 + "@babel/compat-data": ^7.23.5 + "@babel/helper-validator-option": ^7.23.5 + browserslist: ^4.22.2 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 + checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 languageName: node linkType: hard @@ -371,9 +371,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-module-transforms@npm:7.23.0" +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0, @babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-module-imports": ^7.22.15 @@ -382,7 +382,7 @@ __metadata: "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 + checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 languageName: node linkType: hard @@ -455,10 +455,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-string-parser@npm:7.22.5" - checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90 languageName: node linkType: hard @@ -469,10 +469,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-validator-option@npm:7.22.15" - checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d +"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e languageName: node linkType: hard @@ -487,34 +487,34 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.0": - version: 7.23.1 - resolution: "@babel/helpers@npm:7.23.1" +"@babel/helpers@npm:^7.23.7": + version: 7.23.8 + resolution: "@babel/helpers@npm:7.23.8" dependencies: "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.0 - "@babel/types": ^7.23.0 - checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + "@babel/traverse": ^7.23.7 + "@babel/types": ^7.23.6 + checksum: 8b522d527921f8df45a983dc7b8e790c021250addf81ba7900ba016e165442a527348f6f877aa55e1debb3eef9e860a334b4e8d834e6c9b438ed61a63d9a7ad4 languageName: node linkType: hard -"@babel/highlight@npm:^7.22.13": - version: 7.22.20 - resolution: "@babel/highlight@npm:7.22.20" +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" dependencies: "@babel/helper-validator-identifier": ^7.22.20 chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 languageName: node linkType: hard -"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/parser@npm:7.23.0" +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" bin: parser: ./bin/babel-parser.js - checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 + checksum: 140801c43731a6c41fd193f5c02bc71fd647a0360ca616b23d2db8be4b9739b9f951a03fc7c2db4f9b9214f4b27c1074db0f18bc3fa653783082d5af7c8860d5 languageName: node linkType: hard @@ -1593,7 +1593,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": version: 7.23.1 resolution: "@babel/runtime@npm:7.23.1" dependencies: @@ -1613,32 +1613,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.0": - version: 7.23.2 - resolution: "@babel/traverse@npm:7.23.2" +"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/traverse@npm:7.23.7" dependencies: - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.0 + "@babel/code-frame": ^7.23.5 + "@babel/generator": ^7.23.6 "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-function-name": ^7.23.0 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.23.0 - "@babel/types": ^7.23.0 - debug: ^4.1.0 + "@babel/parser": ^7.23.6 + "@babel/types": ^7.23.6 + debug: ^4.3.1 globals: ^11.1.0 - checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d + checksum: d4a7afb922361f710efc97b1e25ec343fab8b2a4ddc81ca84f9a153f22d4482112cba8f263774be8d297918b6c4767c7a98988ab4e53ac73686c986711dd002e languageName: node linkType: hard -"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.0 - resolution: "@babel/types@npm:7.23.0" +"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" dependencies: - "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-string-parser": ^7.23.4 "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 + checksum: 68187dbec0d637f79bc96263ac95ec8b06d424396678e7e225492be866414ce28ebc918a75354d4c28659be6efe30020b4f0f6df81cc418a2d30645b690a8de0 languageName: node linkType: hard @@ -1689,12 +1689,12 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/core@npm:0.0.0-5703" +"@docusaurus/core@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/core@npm:0.0.0-5809" dependencies: - "@babel/core": ^7.22.9 - "@babel/generator": ^7.22.9 + "@babel/core": ^7.23.3 + "@babel/generator": ^7.23.3 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-transform-runtime": ^7.22.9 "@babel/preset-env": ^7.22.9 @@ -1703,13 +1703,13 @@ __metadata: "@babel/runtime": ^7.22.6 "@babel/runtime-corejs3": ^7.22.6 "@babel/traverse": ^7.22.8 - "@docusaurus/cssnano-preset": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/cssnano-preset": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5809 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.5.1 autoprefixer: ^10.4.14 @@ -1736,7 +1736,6 @@ __metadata: html-minifier-terser: ^7.2.0 html-tags: ^3.3.1 html-webpack-plugin: ^5.5.3 - import-fresh: ^3.3.0 leven: ^3.1.0 lodash: ^4.17.21 mini-css-extract-plugin: ^2.7.6 @@ -1758,7 +1757,6 @@ __metadata: tslib: ^2.6.0 update-notifier: ^6.0.2 url-loader: ^4.1.1 - wait-on: ^7.0.1 webpack: ^5.88.1 webpack-bundle-analyzer: ^4.9.0 webpack-dev-server: ^4.15.1 @@ -1769,76 +1767,73 @@ __metadata: react-dom: ^18.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 0e2912a09964778db626dc190317badb074f2f5e09157b8070f281eff69ce2e89846529584ce9bf6e6898293409c353adc80572484aceda1d2136aa2b0b334ca + checksum: 4b448bc4fc5df42de82afb7fd6e05aa1faec9edd4b534f982bd36efadc75e10f5fd94275286ee28be0c849f22504f4441a9918d179bfe1a0783f341bb6ccac3e languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5703" +"@docusaurus/cssnano-preset@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5809" dependencies: cssnano-preset-advanced: ^5.3.10 postcss: ^8.4.26 postcss-sort-media-queries: ^4.4.1 tslib: ^2.6.0 - checksum: 5f6e2a69765fb18de7d8f5e3037bf4f08695034762fca092229ae0ba9a40e9b76048914ffbf6b1d339d496e23580f47aa419f51f446c98fca0ba8d500a06e396 + checksum: 92ec22fb1dfcc8d85cd55f9f365a22809ea65d2181ace4610889e804a322c9fccf983eacbf56b8d848515d505eb1cdc9a8ac6d8d0409dd764d6cd784d029826e languageName: node linkType: hard -"@docusaurus/logger@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/logger@npm:0.0.0-5703" +"@docusaurus/logger@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/logger@npm:0.0.0-5809" dependencies: chalk: ^4.1.2 tslib: ^2.6.0 - checksum: 9ee30b054388e5a618876316df50b73a7c4c8300ce205ace3c09f689a1a38b85d51891a1f0613341fd038a0d06290f0675d64c3e9e5b87f1eee3cb76fd45b55c + checksum: 818f0493308a3261efbd098ca7b37cc76b15280e133f5aa7d8e344e8e39b54e8d07cd011f494b964be6ef39740ec0edf3d4829361e40fb1dbb3027599fc08fdd languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/mdx-loader@npm:0.0.0-5703" +"@docusaurus/mdx-loader@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/mdx-loader@npm:0.0.0-5809" dependencies: - "@babel/parser": ^7.22.7 - "@babel/traverse": ^7.22.8 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 - "@mdx-js/mdx": ^2.1.5 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 + "@mdx-js/mdx": ^3.0.0 "@slorber/remark-comment": ^1.0.0 escape-html: ^1.0.3 - estree-util-value-to-estree: ^2.1.0 + estree-util-value-to-estree: ^3.0.1 file-loader: ^6.2.0 fs-extra: ^11.1.1 - hastscript: ^7.1.0 image-size: ^1.0.2 - mdast-util-mdx: ^2.0.0 - mdast-util-to-string: ^3.2.0 - rehype-raw: ^6.1.1 - remark-directive: ^2.0.1 - remark-emoji: ^2.2.0 + mdast-util-mdx: ^3.0.0 + mdast-util-to-string: ^4.0.0 + rehype-raw: ^7.0.0 + remark-directive: ^3.0.0 + remark-emoji: ^4.0.0 remark-frontmatter: ^5.0.0 - remark-gfm: ^3.0.1 + remark-gfm: ^4.0.0 stringify-object: ^3.3.0 tslib: ^2.6.0 - unified: ^10.1.2 - unist-util-visit: ^2.0.3 + unified: ^11.0.3 + unist-util-visit: ^5.0.0 url-loader: ^4.1.1 - vfile: ^5.3.7 + vfile: ^6.0.1 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: d57b08d7d676b9246be129af06a803fc55162359578e486456cb96a2372809c2093ef4115c926cf8e8be35e285b35d3ea444d808d46afb78edf66b49f58474fb + checksum: d92126b7b32aa5b73c9556e9e04ddf4055992301d4df0cc0d1de5a618fa48e9133038ef8ee15395bbc1fa1c66552bd5cb8c901a2239130e1ee6499d679f0eae5 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5703" +"@docusaurus/module-type-aliases@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5809" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5809 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1848,19 +1843,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: b0dbf719f3c6510b6706f36310b185bdf8a8a2ab5d3b0b76f8962b08d3b1a86783c3f4c23455c03d528500871f0a18ede4e03a0df8c7a44096b91097a5ffda7d + checksum: 3bd545d550989111b00274f3f06df9367895688060afb08b6c7ec3b4967768a78f5d2e1bf7a1b43d77276b116e62f077f0131cc8f1b7e4acbc1db9d3d49471aa languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5703" +"@docusaurus/plugin-client-redirects@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 eta: ^2.2.0 fs-extra: ^11.1.1 lodash: ^4.17.21 @@ -1868,21 +1863,21 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: ac246eeb75028acd6a1d8804572fb89bac5575facf82c35ca3c8441d916980c183f5342a768d31cccc95f2034657bd25cfda24d480a2b8b4abdd693a51d9754e + checksum: d0b9b842f184e0b21ae9fcb718b8eccb7d0103ed847c7e27b782ba67b6eaba1875f3de796823363ccfbc648d6721a5d8ac1512ffc61e55e9c1d9a47bc7ad1646 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5703" +"@docusaurus/plugin-content-blog@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/mdx-loader": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^11.1.1 @@ -1890,31 +1885,30 @@ __metadata: reading-time: ^1.5.0 srcset: ^4.0.0 tslib: ^2.6.0 - unist-util-visit: ^2.0.3 + unist-util-visit: ^5.0.0 utility-types: ^3.10.0 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 46e4a4fac407a8014ce0918933a476b03adca3d3b7e76b27a87bf0eeeb446f20e25db60b292f743652f3ad88232824f7a1541fcb7d27bcdbf9cb6d1c94e9a1b5 + checksum: 40981493af1fd0f835e3a5cf42c56718bc41feb73af36a8641c425875cd366e1e0c44841469649f55a014bfb5d1782d459a6ad8876849b12ee73e97b3f3b73cc languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5703" +"@docusaurus/plugin-content-docs@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/mdx-loader": 0.0.0-5703 - "@docusaurus/module-type-aliases": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/module-type-aliases": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 "@types/react-router-config": ^5.0.7 combine-promises: ^1.1.0 fs-extra: ^11.1.1 - import-fresh: ^3.3.0 js-yaml: ^4.1.0 lodash: ^4.17.21 tslib: ^2.6.0 @@ -1923,133 +1917,133 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: b08fbbac78f76ca68fc4a8ba488f41709733727e073d5f2d1e671dab484c4d37729a657305b315052369292ec7ae83c32992e551eda1d0990c035aa84fecbac6 + checksum: 1ce8c1e1783d08e41172d0db0e858847c2de4c9a750fc2206f7344bfa9186fdc1d818ad0f28542b109b0cb5d45a5ddfb9145014555225198f41881f57fb9df83 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5703" +"@docusaurus/plugin-content-pages@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/mdx-loader": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 fs-extra: ^11.1.1 tslib: ^2.6.0 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 9d0b904259c625d82175fa3fdeae89de8503f409a7dc47c9077f35d25f72fcf76a0a6392f5e790c3bf2604896e1aa0fced00386b9df553f6ba01247ccadd6503 + checksum: 362fa40e3c92b8637ed13f67ce244306e668484e985e2e1267c92ea0506a742c0d3b552ed508d3bd77259cfca0fb7ebc7722df9434e8d819c93c8a4edd546b1b languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-debug@npm:0.0.0-5703" +"@docusaurus/plugin-debug@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-debug@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@microlink/react-json-view": ^1.22.2 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 fs-extra: ^11.1.1 + react-json-view-lite: ^1.2.0 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: b9bf04c27144dc797fa25cae6df95f5a8b15c888993194bf1b0fae06ce6ae55cf338270b7a914ef07d6551addd6261e628a465c4f277a4e13753c207e533557d + checksum: 7dcb4ae3fff5352b9080b4fda26c834907bcafb230201154d1e13cefc9dbaafc0f9013bdd485f247cf390a084154695f6b9ef589936c66c30fa66b02f774a775 languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5703" +"@docusaurus/plugin-google-analytics@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: ad98ea301caa4908197a3c460ae88dd5598c1485d8643708e8fb3f757ae3bf854efc1b5a1ab9c8ba15371c3a989704d7f9fdb55dd25d1d1b81936526068a877b + checksum: b7a6d4ea53098db90602d5359d807c3b7d164c335294155538565be29cb85b2853a8e5b7c76d57efb0b50901d0beb60689116933ab4940fc370ff6f194acd675 languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5703" +"@docusaurus/plugin-google-gtag@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 "@types/gtag.js": ^0.0.12 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 9fbdbc0569f1ff634c357d197c1442da17c4a09c03163640db1d1bde0be8612dd432e494a4f02eb43ac58dd7df2cbd335911fdb7fa315a9de95e173090daf5dc + checksum: 0ce11539963fb62dc417bcd704bcdf3b5fab46f2e035286187d44bc5d9bc5f8238541e1da0cf3a9ab930871d21d08681fd3ec1291c1f0e088a70d85bf704579a languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703" +"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 3ed2c6eb05087db3877ffe98cc6eca59be80889411e3cdbd981ac4d951a5efa269a1011a39a94c997d93474fd916e3634905a6537e10575e5d5a954a9bb00c5d + checksum: 7041f2b5574b6b77300ea3082a090057d389e1059d45d4ff2d87386d362f55f00cc26d329b8cdeec4fb10c9fcfe4702823c3f4f2ceef29b557086c4c20819ab3 languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5703" +"@docusaurus/plugin-sitemap@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 fs-extra: ^11.1.1 sitemap: ^7.1.1 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 1afbd2e3575ae09428fb4c53a2563e313c3e1a2323c79bdc256779c56f8d796c2c94473d055d6d7a97d477f06e35f0922bed441f7c3e1467feeb5329e1f7761b + checksum: cdb41c318786913923b1381882d7f5c956dba98f958f14cfd27fb962c540732b940ab7c01d04a97e30c229b98637d57fa3897dd0bdd738ac68ba55e27080bb08 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/preset-classic@npm:0.0.0-5703" +"@docusaurus/preset-classic@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/preset-classic@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/plugin-content-blog": 0.0.0-5703 - "@docusaurus/plugin-content-docs": 0.0.0-5703 - "@docusaurus/plugin-content-pages": 0.0.0-5703 - "@docusaurus/plugin-debug": 0.0.0-5703 - "@docusaurus/plugin-google-analytics": 0.0.0-5703 - "@docusaurus/plugin-google-gtag": 0.0.0-5703 - "@docusaurus/plugin-google-tag-manager": 0.0.0-5703 - "@docusaurus/plugin-sitemap": 0.0.0-5703 - "@docusaurus/theme-classic": 0.0.0-5703 - "@docusaurus/theme-common": 0.0.0-5703 - "@docusaurus/theme-search-algolia": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/plugin-content-blog": 0.0.0-5809 + "@docusaurus/plugin-content-docs": 0.0.0-5809 + "@docusaurus/plugin-content-pages": 0.0.0-5809 + "@docusaurus/plugin-debug": 0.0.0-5809 + "@docusaurus/plugin-google-analytics": 0.0.0-5809 + "@docusaurus/plugin-google-gtag": 0.0.0-5809 + "@docusaurus/plugin-google-tag-manager": 0.0.0-5809 + "@docusaurus/plugin-sitemap": 0.0.0-5809 + "@docusaurus/theme-classic": 0.0.0-5809 + "@docusaurus/theme-common": 0.0.0-5809 + "@docusaurus/theme-search-algolia": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: d4c2e6e02b828b248351819410fe03e94a4b4fd8489e398b60d128ba8f173548f8353a3875ff0347179ee59e84df7e3e9e1e5b0be24b84f015c8c02b650eb80c + checksum: 425337b7d91c761919cd1c7f6d7845932c78c1df7b86647b1129f122502798505577f4be87b243f4ff58fff55c71ab20ee49ae6015b3aba09c644a7154a0b9b9 languageName: node linkType: hard @@ -2065,30 +2059,30 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/theme-classic@npm:0.0.0-5703" +"@docusaurus/theme-classic@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/theme-classic@npm:0.0.0-5809" dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/mdx-loader": 0.0.0-5703 - "@docusaurus/module-type-aliases": 0.0.0-5703 - "@docusaurus/plugin-content-blog": 0.0.0-5703 - "@docusaurus/plugin-content-docs": 0.0.0-5703 - "@docusaurus/plugin-content-pages": 0.0.0-5703 - "@docusaurus/theme-common": 0.0.0-5703 - "@docusaurus/theme-translations": 0.0.0-5703 - "@docusaurus/types": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 - "@mdx-js/react": ^2.1.5 - clsx: ^1.2.1 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/module-type-aliases": 0.0.0-5809 + "@docusaurus/plugin-content-blog": 0.0.0-5809 + "@docusaurus/plugin-content-docs": 0.0.0-5809 + "@docusaurus/plugin-content-pages": 0.0.0-5809 + "@docusaurus/theme-common": 0.0.0-5809 + "@docusaurus/theme-translations": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 + "@mdx-js/react": ^3.0.0 + clsx: ^2.0.0 copy-text-to-clipboard: ^3.2.0 infima: 0.2.0-alpha.43 lodash: ^4.17.21 nprogress: ^0.2.0 postcss: ^8.4.26 - prism-react-renderer: ^2.1.0 + prism-react-renderer: ^2.3.0 prismjs: ^1.29.0 react-router-dom: ^5.3.4 rtlcss: ^4.1.0 @@ -2097,51 +2091,51 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: ba078e06a07bbcc4a474f67938760852146e0cb612e44bc81b22879d374372eeea076de6e46e9f955dd351f37dadd98ced2e70b6b8a476b88684fae40855ecb9 + checksum: 9df071f67a7048e7a33ec2b0d627c8c342574ac8fd4596d108b88c3d6fe9b454cbc84a558aaa09a0ef4d7d6887c0bb75bc60d3ec1182ee69b7de87c035cee843 languageName: node linkType: hard -"@docusaurus/theme-common@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/theme-common@npm:0.0.0-5703" +"@docusaurus/theme-common@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/theme-common@npm:0.0.0-5809" dependencies: - "@docusaurus/mdx-loader": 0.0.0-5703 - "@docusaurus/module-type-aliases": 0.0.0-5703 - "@docusaurus/plugin-content-blog": 0.0.0-5703 - "@docusaurus/plugin-content-docs": 0.0.0-5703 - "@docusaurus/plugin-content-pages": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/module-type-aliases": 0.0.0-5809 + "@docusaurus/plugin-content-blog": 0.0.0-5809 + "@docusaurus/plugin-content-docs": 0.0.0-5809 + "@docusaurus/plugin-content-pages": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-common": 0.0.0-5809 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" - clsx: ^1.2.1 + clsx: ^2.0.0 parse-numeric-range: ^1.3.0 - prism-react-renderer: ^2.1.0 + prism-react-renderer: ^2.3.0 tslib: ^2.6.0 utility-types: ^3.10.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: f9b23318dbb504bcce0992de475f1ab32860620523dfe749bfdb00ac8e7fc75be705fd5177db2ce893ed269de40cef7f6a7290d44a12c6a160d9461bbca05552 + checksum: 6561d5526ac8d0e818fa5d9eaf1b1969d8f2623b8b6358d0360c3808da49798f4bdbe07f97af56bd69f2604f158e62bf454c8f4e6a9c0233f57c3a81ddafec5c languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5703" +"@docusaurus/theme-search-algolia@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5809" dependencies: "@docsearch/react": ^3.5.2 - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/plugin-content-docs": 0.0.0-5703 - "@docusaurus/theme-common": 0.0.0-5703 - "@docusaurus/theme-translations": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 - "@docusaurus/utils-validation": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/plugin-content-docs": 0.0.0-5809 + "@docusaurus/theme-common": 0.0.0-5809 + "@docusaurus/theme-translations": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/utils-validation": 0.0.0-5809 algoliasearch: ^4.18.0 algoliasearch-helper: ^3.13.3 - clsx: ^1.2.1 + clsx: ^2.0.0 eta: ^2.2.0 fs-extra: ^11.1.1 lodash: ^4.17.21 @@ -2150,24 +2144,25 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 2e8ccc603126634488332ae108f9ac9ad3d2e1e46b5abef48720f2a25ae5cfc93850301d4ea30a6dc66034877b6abedd31229f622c6fd181347c3c14f7ba3c66 + checksum: 7fb83216b8d091dd108c13b7af86b59f26d3772ad0e0d0e8b5493c4c547dd9554b3184d6e4574e456cc6bb5a598a1dae8929453f4a94dffc7ae1da0665968ddf languageName: node linkType: hard -"@docusaurus/theme-translations@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/theme-translations@npm:0.0.0-5703" +"@docusaurus/theme-translations@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/theme-translations@npm:0.0.0-5809" dependencies: fs-extra: ^11.1.1 tslib: ^2.6.0 - checksum: 1f952386982008e2e7b07d6b95b1a902a57891321ae2670f13f391a541944ec2c82f5e03d3ed2c459a17113387a51cb5efe824d03037a3cc0b25251451287d1d + checksum: 8ca34bb5e02f021995bea8213f1ed0bb2c9493156b9495ab94a437d3d893a5a970dad871d07d2a80b003ba28c1fd5bd39e175c766884cb2ea442c226400091cf languageName: node linkType: hard -"@docusaurus/types@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/types@npm:0.0.0-5703" +"@docusaurus/types@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/types@npm:0.0.0-5809" dependencies: + "@mdx-js/mdx": ^3.0.0 "@types/history": ^4.7.11 "@types/react": "*" commander: ^5.1.0 @@ -2179,13 +2174,13 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 46ca6a27c8a0d1b69f744375ee2c24be2deed20c2801231a462b2e37b7a6e1f73ab17b6a5506e05f628957be8be74e4cd960780b9986c8fa4ac1757bd8c74231 + checksum: 97800e1b3f52ed167b78c812c2c652fe84308fc033f057b81043d485f3afb935dd5c30761c9ed7868fcf5ee0728fe3a841edd745285793167d0d1d48a298f5cd languageName: node linkType: hard -"@docusaurus/utils-common@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/utils-common@npm:0.0.0-5703" +"@docusaurus/utils-common@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/utils-common@npm:0.0.0-5809" dependencies: tslib: ^2.6.0 peerDependencies: @@ -2193,28 +2188,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 8f70f176a99bcbbde22abd759621087ad555e7967cddf85662402f6d55c84d5f44cc1a90bf4e64670fc75b6db646dca4f573b3656a1718d1596d60e0e6c2d23a + checksum: 4cab3b5aa8b2ddbcfa5245f628fd84257f39312301b9813e36d616996a43dfe4f77abb26907271480128ce983125b4d20837c42e94d18875e6d07edcd4daaef7 languageName: node linkType: hard -"@docusaurus/utils-validation@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/utils-validation@npm:0.0.0-5703" +"@docusaurus/utils-validation@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/utils-validation@npm:0.0.0-5809" dependencies: - "@docusaurus/logger": 0.0.0-5703 - "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5809 joi: ^17.9.2 js-yaml: ^4.1.0 tslib: ^2.6.0 - checksum: e0d6df549644d8e732daf5407ce110dbccba17dcf84fe1a80091119675d2ce515e26bf6612fefa60b7df2c65dbaeee7ceb1a9f2b947a3705fe1efc7c229794e2 + checksum: 2ed6483a1e752a9c291d9ee607cfc3fc9f906cd6fa85687cc2e951cf0400264578e6f2b6bc282ee44eef52ed4c7503896f43e52f18d96064e37f5cb53096dbc4 languageName: node linkType: hard -"@docusaurus/utils@npm:0.0.0-5703": - version: 0.0.0-5703 - resolution: "@docusaurus/utils@npm:0.0.0-5703" +"@docusaurus/utils@npm:0.0.0-5809": + version: 0.0.0-5809 + resolution: "@docusaurus/utils@npm:0.0.0-5809" dependencies: - "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5809 "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2222,6 +2217,7 @@ __metadata: github-slugger: ^1.5.0 globby: ^11.1.0 gray-matter: ^4.0.3 + jiti: ^1.20.0 js-yaml: ^4.1.0 lodash: ^4.17.21 micromatch: ^4.0.5 @@ -2235,7 +2231,7 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 91f53b17393e29fadb01c039f5394fc257c54bd7d80068f3a3e8a5e52d635d2e3de9fe781340de2ff4eaf691a2d4104865291c05c22ffc8b48a0894f588f3a9e + checksum: 408969f77fddf7fd621e3025927db7766a6513fa01a2c357cbcd57d1cd41db0abf72282bdb3e94cf6a6ad1b03138e48833c65da84c1c67b917e5660491ce40b6 languageName: node linkType: hard @@ -2344,55 +2340,46 @@ __metadata: languageName: node linkType: hard -"@mdx-js/mdx@npm:^2.1.5": - version: 2.3.0 - resolution: "@mdx-js/mdx@npm:2.3.0" +"@mdx-js/mdx@npm:^3.0.0": + version: 3.0.0 + resolution: "@mdx-js/mdx@npm:3.0.0" dependencies: + "@types/estree": ^1.0.0 "@types/estree-jsx": ^1.0.0 + "@types/hast": ^3.0.0 "@types/mdx": ^2.0.0 - estree-util-build-jsx: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - estree-util-to-js: ^1.1.0 + collapse-white-space: ^2.0.0 + devlop: ^1.0.0 + estree-util-build-jsx: ^3.0.0 + estree-util-is-identifier-name: ^3.0.0 + estree-util-to-js: ^2.0.0 estree-walker: ^3.0.0 - hast-util-to-estree: ^2.0.0 - markdown-extensions: ^1.0.0 + hast-util-to-estree: ^3.0.0 + hast-util-to-jsx-runtime: ^2.0.0 + markdown-extensions: ^2.0.0 periscopic: ^3.0.0 - remark-mdx: ^2.0.0 - remark-parse: ^10.0.0 - remark-rehype: ^10.0.0 - unified: ^10.0.0 - unist-util-position-from-estree: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - checksum: d918766a326502ec0b54adee61dc2930daf5b748acb9107f9bfd1ab0dbc4d7b1a4d0dbb9e21da9dd2a9fc2f9950b2973a43c6ba62d3a72eb67a30f6c953e5be8 + remark-mdx: ^3.0.0 + remark-parse: ^11.0.0 + remark-rehype: ^11.0.0 + source-map: ^0.7.0 + unified: ^11.0.0 + unist-util-position-from-estree: ^2.0.0 + unist-util-stringify-position: ^4.0.0 + unist-util-visit: ^5.0.0 + vfile: ^6.0.0 + checksum: da4305dcfd9012521170e0ed439eb336900fb84a5784e5e3dac2144855fa603325477855e17a04b7c673cc24699cf2bfd611c958f591bb3a9afb5608c259bbd3 languageName: node linkType: hard -"@mdx-js/react@npm:^2.1.5": - version: 2.3.0 - resolution: "@mdx-js/react@npm:2.3.0" +"@mdx-js/react@npm:^3.0.0": + version: 3.0.0 + resolution: "@mdx-js/react@npm:3.0.0" dependencies: "@types/mdx": ^2.0.0 + peerDependencies: "@types/react": ">=16" - peerDependencies: react: ">=16" - checksum: f45fe779556e6cd9a787f711274480e0638b63c460f192ebdcd77cc07ffa61e23c98cb46dd46e577093e1cb4997a232a848d1fb0ba850ae204422cf603add524 - languageName: node - linkType: hard - -"@microlink/react-json-view@npm:^1.22.2": - version: 1.22.2 - resolution: "@microlink/react-json-view@npm:1.22.2" - dependencies: - flux: ~4.0.1 - react-base16-styling: ~0.6.0 - react-lifecycles-compat: ~3.0.4 - react-textarea-autosize: ~8.3.2 - peerDependencies: - react: ">= 15" - react-dom: ">= 15" - checksum: 7cc31fcc06f6bac2062aedda565e55a03e1275f5b810f0efee27de8ea60967713f3a13859a16ba775b9b3e8782c044928cf3faee48902a19ce1c58d7ecc6e8d0 + checksum: a780cff9d7f7639d6fc21c9d4e0a6ac1370c3209ea0db176923df7f9145785309591cf871f227f5135d1fe2accce0d5df9a22fc0530e5dda0c7b4b105705f20d languageName: node linkType: hard @@ -2507,6 +2494,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^5.2.0": version: 5.3.0 resolution: "@sindresorhus/is@npm:5.3.0" @@ -2983,12 +2977,12 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^2.0.0": - version: 2.3.4 - resolution: "@types/hast@npm:2.3.4" +"@types/hast@npm:^3.0.0": + version: 3.0.3 + resolution: "@types/hast@npm:3.0.3" dependencies: "@types/unist": "*" - checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e + checksum: ca204207550fd6848ee20b5ba2018fd54f515d59a8b80375cdbe392ba2b4b130dac25fdfbaf9f2a70d2aec9d074a34dc14d4d59d31fa3ede80ef9850afad5d3c languageName: node linkType: hard @@ -3061,21 +3055,12 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0": - version: 3.0.10 - resolution: "@types/mdast@npm:3.0.10" +"@types/mdast@npm:^4.0.0, @types/mdast@npm:^4.0.2": + version: 4.0.3 + resolution: "@types/mdast@npm:4.0.3" dependencies: "@types/unist": "*" - checksum: 3f587bfc0a9a2403ecadc220e61031b01734fedaf82e27eb4d5ba039c0eb54db8c85681ccc070ab4df3f7ec711b736a82b990e69caa14c74bf7ac0ccf2ac7313 - languageName: node - linkType: hard - -"@types/mdast@npm:^4.0.0": - version: 4.0.1 - resolution: "@types/mdast@npm:4.0.1" - dependencies: - "@types/unist": "*" - checksum: 3d8fe54a6fb747376c4cc2f05c319730a5737b77844d8ea58d2d696417fa933cd270c20e197f531fc1b4be5e340dc416129f8b4f5fa2f0d2d0cf51850928340a + checksum: 345c5a22fccf05f35239ea6313ee4aaf6ebed5927c03ac79744abccb69b9ba5e692f9b771e36a012b79e17429082cada30f579e9c43b8a54e0ffb365431498b6 languageName: node linkType: hard @@ -3121,13 +3106,6 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:^6.0.0": - version: 6.0.3 - resolution: "@types/parse5@npm:6.0.3" - checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 - languageName: node - linkType: hard - "@types/prismjs@npm:^1.26.0": version: 1.26.1 resolution: "@types/prismjs@npm:1.26.1" @@ -3188,7 +3166,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16": +"@types/react@npm:*": version: 18.2.0 resolution: "@types/react@npm:18.2.0" dependencies: @@ -3296,6 +3274,13 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.0.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.5, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.5 resolution: "@webassemblyjs/ast@npm:1.11.5" @@ -3768,13 +3753,6 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - "astring@npm:^1.8.0": version: 1.8.4 resolution: "astring@npm:1.8.4" @@ -3784,13 +3762,6 @@ __metadata: languageName: node linkType: hard -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - "at-least-node@npm:^1.0.0": version: 1.0.0 resolution: "at-least-node@npm:1.0.0" @@ -3816,16 +3787,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.27.2": - version: 0.27.2 - resolution: "axios@npm:0.27.2" - dependencies: - follow-redirects: ^1.14.9 - form-data: ^4.0.0 - checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 - languageName: node - linkType: hard - "babel-loader@npm:^9.1.3": version: 9.1.3 resolution: "babel-loader@npm:9.1.3" @@ -3888,10 +3849,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 0.0.0-5703 - "@docusaurus/module-type-aliases": 0.0.0-5703 - "@docusaurus/plugin-client-redirects": 0.0.0-5703 - "@docusaurus/preset-classic": 0.0.0-5703 + "@docusaurus/core": 0.0.0-5809 + "@docusaurus/module-type-aliases": 0.0.0-5809 + "@docusaurus/plugin-client-redirects": 0.0.0-5809 + "@docusaurus/preset-classic": 0.0.0-5809 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^2.0.0 @@ -3926,13 +3887,6 @@ __metadata: languageName: node linkType: hard -"base16@npm:^1.0.0": - version: 1.0.0 - resolution: "base16@npm:1.0.0" - checksum: 0cd449a2db0f0f957e4b6b57e33bc43c9e20d4f1dd744065db94b5da35e8e71fa4dc4bc7a901e59a84d5f8b6936e3c520e2471787f667fc155fb0f50d8540f5d - languageName: node - linkType: hard - "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -4053,17 +4007,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": - version: 4.22.1 - resolution: "browserslist@npm:4.22.1" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.1, browserslist@npm:^4.22.2": + version: 4.22.2 + resolution: "browserslist@npm:4.22.2" dependencies: - caniuse-lite: ^1.0.30001541 - electron-to-chromium: ^1.4.535 - node-releases: ^2.0.13 + caniuse-lite: ^1.0.30001565 + electron-to-chromium: ^1.4.601 + node-releases: ^2.0.14 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 + checksum: 33ddfcd9145220099a7a1ac533cecfe5b7548ffeb29b313e1b57be6459000a1f8fa67e781cf4abee97268ac594d44134fcc4a6b2b4750ceddc9796e3a22076d9 languageName: node linkType: hard @@ -4189,10 +4143,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001541": - version: 1.0.30001546 - resolution: "caniuse-lite@npm:1.0.30001546" - checksum: d3ef82f5ee94743002c5b2dd61c84342debcc94b2d5907b64ade3514ecfc4f20bbe86a6bc453fd6436d5fbcf6582e07405d7c2077565675a71c83adc238a11fa +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001565": + version: 1.0.30001579 + resolution: "caniuse-lite@npm:1.0.30001579" + checksum: 7539dcff74d2243a30c428393dc690c87fa34d7da36434731853e9bcfe783757763b2971f5cc878e25242a93e184e53f167d11bd74955af956579f7af71cc764 languageName: node linkType: hard @@ -4231,6 +4185,13 @@ __metadata: languageName: node linkType: hard +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + "character-entities-html4@npm:^2.0.0": version: 2.1.0 resolution: "character-entities-html4@npm:2.1.0" @@ -4375,13 +4336,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.2.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 - languageName: node - linkType: hard - "clsx@npm:^2.0.0": version: 2.1.0 resolution: "clsx@npm:2.1.0" @@ -4389,6 +4343,13 @@ __metadata: languageName: node linkType: hard +"collapse-white-space@npm:^2.0.0": + version: 2.1.0 + resolution: "collapse-white-space@npm:2.1.0" + checksum: c8978b1f4e7d68bf846cfdba6c6689ce8910511df7d331eb6e6757e51ceffb52768d59a28db26186c91dcf9594955b59be9f8ccd473c485790f5d8b90dc6726f + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -4451,15 +4412,6 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - "comma-separated-tokens@npm:^2.0.0": version: 2.0.3 resolution: "comma-separated-tokens@npm:2.0.3" @@ -4724,15 +4676,6 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.5": - version: 3.1.5 - resolution: "cross-fetch@npm:3.1.5" - dependencies: - node-fetch: 2.6.7 - checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb - languageName: node - linkType: hard - "cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -4963,7 +4906,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -5056,13 +4999,6 @@ __metadata: languageName: node linkType: hard -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -5131,7 +5067,7 @@ __metadata: languageName: node linkType: hard -"devlop@npm:^1.0.0": +"devlop@npm:^1.0.0, devlop@npm:^1.1.0": version: 1.1.0 resolution: "devlop@npm:1.1.0" dependencies: @@ -5140,13 +5076,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^5.0.0": - version: 5.1.0 - resolution: "diff@npm:5.1.0" - checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -5302,10 +5231,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.535": - version: 1.4.544 - resolution: "electron-to-chromium@npm:1.4.544" - checksum: 78e88e4c56fc4faaa9a405de5e0b51305531e9cdf2c71bcc9296c2c59fb68001472e5b924f8701c873bc855ab5174cf0340642712d7af05c1d8e92356529397e +"electron-to-chromium@npm:^1.4.601": + version: 1.4.639 + resolution: "electron-to-chromium@npm:1.4.639" + checksum: f16293e69c5c31d836d1a3fdafb07f7a19a0f9a1137893aea879758f6de7d212480f4204e14f0669e653a5a3a1c35f6d1cbd54d4dd9e6ace7e22638270c9984e languageName: node linkType: hard @@ -5323,6 +5252,13 @@ __metadata: languageName: node linkType: hard +"emojilib@npm:^2.4.0": + version: 2.4.0 + resolution: "emojilib@npm:2.4.0" + checksum: ea241c342abda5a86ffd3a15d8f4871a616d485f700e03daea38c6ce38205847cea9f6ff8d5e962c00516b004949cc96c6e37b05559ea71a0a496faba53b56da + languageName: node + linkType: hard + "emojis-list@npm:^3.0.0": version: 3.0.0 resolution: "emojis-list@npm:3.0.0" @@ -5330,10 +5266,10 @@ __metadata: languageName: node linkType: hard -"emoticon@npm:^3.2.0": - version: 3.2.0 - resolution: "emoticon@npm:3.2.0" - checksum: f30649d18b672ab3139e95cb04f77b2442feb95c99dc59372ff80fbfd639b2bf4018bc68ab0b549bd765aecf8230d7899c43f86cfcc7b6370c06c3232783e24f +"emoticon@npm:^4.0.1": + version: 4.0.1 + resolution: "emoticon@npm:4.0.1" + checksum: 991ab6421927601af4eb44036b60e3125759a4d81f32d2ad96b66e3491e2fdb6a026eeb6bffbfa66724592dca95235570785963607d16961ea73a62ecce715e2 languageName: node linkType: hard @@ -5492,61 +5428,62 @@ __metadata: languageName: node linkType: hard -"estree-util-attach-comments@npm:^2.0.0": - version: 2.1.1 - resolution: "estree-util-attach-comments@npm:2.1.1" +"estree-util-attach-comments@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-attach-comments@npm:3.0.0" dependencies: "@types/estree": ^1.0.0 - checksum: c5c2c41c9a55a169fb4fba9627057843f0d2e21e47a2e3e24318a11ffcf6bc704c0f96f405a529bddac7969b7c44f6cf86711505faaf0c5862c2024419b19704 + checksum: 56254eaef39659e6351919ebc2ae53a37a09290a14571c19e373e9d5fad343a3403d9ad0c23ae465d6e7d08c3e572fd56fb8c793efe6434a261bf1489932dbd5 languageName: node linkType: hard -"estree-util-build-jsx@npm:^2.0.0": - version: 2.2.2 - resolution: "estree-util-build-jsx@npm:2.2.2" +"estree-util-build-jsx@npm:^3.0.0": + version: 3.0.1 + resolution: "estree-util-build-jsx@npm:3.0.1" dependencies: "@types/estree-jsx": ^1.0.0 - estree-util-is-identifier-name: ^2.0.0 + devlop: ^1.0.0 + estree-util-is-identifier-name: ^3.0.0 estree-walker: ^3.0.0 - checksum: d008ac36a45d797eadca696f41b4c1ac0587ec0e0b52560cfb0e76d14ef15fc18e526f9023b6e5457dafa9cf3f010c9bb1dfc9c727ebd7cf0ba2ebbaa43919ac + checksum: 185eff060eda2ba32cecd15904db4f5ba0681159fbdf54f0f6586cd9411e77e733861a833d0aee3415e1d1fd4b17edf08bc9e9872cee98e6ec7b0800e1a85064 languageName: node linkType: hard -"estree-util-is-identifier-name@npm:^2.0.0": - version: 2.1.0 - resolution: "estree-util-is-identifier-name@npm:2.1.0" - checksum: cab317a071fafb99cf83b57df7924bccd2e6ab4e252688739e49f00b16cefd168e279c171442b0557c80a1c80ffaa927d670dadea65bb3c9b151efb8e772e89d +"estree-util-is-identifier-name@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-is-identifier-name@npm:3.0.0" + checksum: ea3909f0188ea164af0aadeca87c087e3e5da78d76da5ae9c7954ff1340ea3e4679c4653bbf4299ffb70caa9b322218cc1128db2541f3d2976eb9704f9857787 languageName: node linkType: hard -"estree-util-to-js@npm:^1.1.0": - version: 1.2.0 - resolution: "estree-util-to-js@npm:1.2.0" +"estree-util-to-js@npm:^2.0.0": + version: 2.0.0 + resolution: "estree-util-to-js@npm:2.0.0" dependencies: "@types/estree-jsx": ^1.0.0 astring: ^1.8.0 source-map: ^0.7.0 - checksum: 93a75e1051a6a4f5c631597ecd2ed95129fadbc80a58a10475d6d6b1b076a69393ba4a8d2bb71f698401f64ccca47e3f3828dd0042cac81439b988fae0f5f8e0 + checksum: 833edc94ab9978e0918f90261e0a3361bf4564fec4901f326d2237a9235d3f5fc6482da3be5acc545e702c8c7cb8bc5de5c7c71ba3b080eb1975bcfdf3923d79 languageName: node linkType: hard -"estree-util-value-to-estree@npm:^2.1.0": - version: 2.1.0 - resolution: "estree-util-value-to-estree@npm:2.1.0" +"estree-util-value-to-estree@npm:^3.0.1": + version: 3.0.1 + resolution: "estree-util-value-to-estree@npm:3.0.1" dependencies: "@types/estree": ^1.0.0 is-plain-obj: ^4.0.0 - checksum: 6a930e9c8b85c27845ecca010b5b6b64d3b3a4e7d61117d8342fad7b2b595d7052c671616d1c2269e0954a200666834227ce0abb8488ded49700dfde54167ebb + checksum: 7ab89084aa2c5677aeb0d7350ff21e71c9bbc424dc872a55bb4f25f63a7fd99fc7861626dd89b5544db3d3696212154bcf2b12b63ecd5a59dbfd07915c88aee4 languageName: node linkType: hard -"estree-util-visit@npm:^1.0.0": - version: 1.2.1 - resolution: "estree-util-visit@npm:1.2.1" +"estree-util-visit@npm:^2.0.0": + version: 2.0.0 + resolution: "estree-util-visit@npm:2.0.0" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/unist": ^2.0.0 - checksum: 6feea4fdc43b0ba0f79faf1d57cf32373007e146d4810c7c09c13f5a9c1b8600c1ac57a8d949967cedd2a9a91dddd246e19b59bacfc01e417168b4ebf220f691 + "@types/unist": ^3.0.0 + checksum: 6444b38f224322945a6d19ea81a8828a0eec64aefb2bf1ea791fe20df496f7b7c543408d637df899e6a8e318b638f66226f16378a33c4c2b192ba5c3f891121f languageName: node linkType: hard @@ -5739,37 +5676,6 @@ __metadata: languageName: node linkType: hard -"fbemitter@npm:^3.0.0": - version: 3.0.0 - resolution: "fbemitter@npm:3.0.0" - dependencies: - fbjs: ^3.0.0 - checksum: 069690b8cdff3521ade3c9beb92ba0a38d818a86ef36dff8690e66749aef58809db4ac0d6938eb1cacea2dbef5f2a508952d455669590264cdc146bbe839f605 - languageName: node - linkType: hard - -"fbjs-css-vars@npm:^1.0.0": - version: 1.0.2 - resolution: "fbjs-css-vars@npm:1.0.2" - checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 - languageName: node - linkType: hard - -"fbjs@npm:^3.0.0, fbjs@npm:^3.0.1": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" - dependencies: - cross-fetch: ^3.1.5 - fbjs-css-vars: ^1.0.0 - loose-envify: ^1.0.0 - object-assign: ^4.1.0 - promise: ^7.1.1 - setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 - languageName: node - linkType: hard - "feed@npm:^4.2.2": version: 4.2.2 resolution: "feed@npm:4.2.2" @@ -5861,19 +5767,7 @@ __metadata: languageName: node linkType: hard -"flux@npm:~4.0.1": - version: 4.0.4 - resolution: "flux@npm:4.0.4" - dependencies: - fbemitter: ^3.0.0 - fbjs: ^3.0.1 - peerDependencies: - react: ^15.0.2 || ^16.0.0 || ^17.0.0 - checksum: 8fa5c2f9322258de3e331f67c6f1078a7f91c4dec9dbe8a54c4b8a80eed19a4f91889028b768668af4a796e8f2ee75e461e1571b8615432a3920ae95cc4ff794 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.0.0": version: 1.15.4 resolution: "follow-redirects@npm:1.15.4" peerDependenciesMeta: @@ -5921,17 +5815,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - "format@npm:^0.2.0": version: 0.2.2 resolution: "format@npm:0.2.2" @@ -6309,103 +6192,133 @@ __metadata: languageName: node linkType: hard -"hast-util-from-parse5@npm:^7.0.0": - version: 7.1.2 - resolution: "hast-util-from-parse5@npm:7.1.2" +"hast-util-from-parse5@npm:^8.0.0": + version: 8.0.1 + resolution: "hast-util-from-parse5@npm:8.0.1" dependencies: - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - hastscript: ^7.0.0 + "@types/hast": ^3.0.0 + "@types/unist": ^3.0.0 + devlop: ^1.0.0 + hastscript: ^8.0.0 property-information: ^6.0.0 - vfile: ^5.0.0 - vfile-location: ^4.0.0 + vfile: ^6.0.0 + vfile-location: ^5.0.0 web-namespaces: ^2.0.0 - checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb + checksum: fdd1ab8b03af13778ecb94ef9a58b1e3528410cdfceb3d6bb7600508967d0d836b451bc7bc3baf66efb7c730d3d395eea4bb1b30352b0162823d9f0de976774b languageName: node linkType: hard -"hast-util-parse-selector@npm:^3.0.0": - version: 3.1.1 - resolution: "hast-util-parse-selector@npm:3.1.1" +"hast-util-parse-selector@npm:^4.0.0": + version: 4.0.0 + resolution: "hast-util-parse-selector@npm:4.0.0" dependencies: - "@types/hast": ^2.0.0 - checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 + "@types/hast": ^3.0.0 + checksum: 76087670d3b0b50b23a6cb70bca53a6176d6608307ccdbb3ed18b650b82e7c3513bfc40348f1389dc0c5ae872b9a768851f4335f44654abd7deafd6974c52402 languageName: node linkType: hard -"hast-util-raw@npm:^7.2.0": - version: 7.2.3 - resolution: "hast-util-raw@npm:7.2.3" +"hast-util-raw@npm:^9.0.0": + version: 9.0.1 + resolution: "hast-util-raw@npm:9.0.1" dependencies: - "@types/hast": ^2.0.0 - "@types/parse5": ^6.0.0 - hast-util-from-parse5: ^7.0.0 - hast-util-to-parse5: ^7.0.0 - html-void-elements: ^2.0.0 - parse5: ^6.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 + "@types/hast": ^3.0.0 + "@types/unist": ^3.0.0 + "@ungap/structured-clone": ^1.0.0 + hast-util-from-parse5: ^8.0.0 + hast-util-to-parse5: ^8.0.0 + html-void-elements: ^3.0.0 + mdast-util-to-hast: ^13.0.0 + parse5: ^7.0.0 + unist-util-position: ^5.0.0 + unist-util-visit: ^5.0.0 + vfile: ^6.0.0 web-namespaces: ^2.0.0 zwitch: ^2.0.0 - checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f + checksum: 4b486eb4782eafb471ae639d45c14ac8797676518cf5da16adc973f52d7b8e1075a1451558c023b390820bd9fd213213e6248a2dae71b68ac5040b277509b8d9 languageName: node linkType: hard -"hast-util-to-estree@npm:^2.0.0": - version: 2.3.2 - resolution: "hast-util-to-estree@npm:2.3.2" +"hast-util-to-estree@npm:^3.0.0": + version: 3.1.0 + resolution: "hast-util-to-estree@npm:3.1.0" dependencies: "@types/estree": ^1.0.0 "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 + "@types/hast": ^3.0.0 comma-separated-tokens: ^2.0.0 - estree-util-attach-comments: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - hast-util-whitespace: ^2.0.0 - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdxjs-esm: ^1.0.0 + devlop: ^1.0.0 + estree-util-attach-comments: ^3.0.0 + estree-util-is-identifier-name: ^3.0.0 + hast-util-whitespace: ^3.0.0 + mdast-util-mdx-expression: ^2.0.0 + mdast-util-mdx-jsx: ^3.0.0 + mdast-util-mdxjs-esm: ^2.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 - style-to-object: ^0.4.1 - unist-util-position: ^4.0.0 + style-to-object: ^0.4.0 + unist-util-position: ^5.0.0 zwitch: ^2.0.0 - checksum: 721167e275c1b0b9b1dcb35964a39f6180e22983ee7b56748ecab9f6cc35fe5229fd6e30a8eb4826caeee7eed88014ce4710bd79146c080d4dd281058ba09a39 + checksum: 61272f7c18c9d2a5e34df7cfd2c97cbf12f6e9d05114d60e4dedd64e5576565eb1e35c78b9213c909bb8f984f0f8e9c49b568f04bdb444b83d0bca9159e14f3c languageName: node linkType: hard -"hast-util-to-parse5@npm:^7.0.0": - version: 7.1.0 - resolution: "hast-util-to-parse5@npm:7.1.0" +"hast-util-to-jsx-runtime@npm:^2.0.0": + version: 2.3.0 + resolution: "hast-util-to-jsx-runtime@npm:2.3.0" dependencies: - "@types/hast": ^2.0.0 + "@types/estree": ^1.0.0 + "@types/hast": ^3.0.0 + "@types/unist": ^3.0.0 comma-separated-tokens: ^2.0.0 + devlop: ^1.0.0 + estree-util-is-identifier-name: ^3.0.0 + hast-util-whitespace: ^3.0.0 + mdast-util-mdx-expression: ^2.0.0 + mdast-util-mdx-jsx: ^3.0.0 + mdast-util-mdxjs-esm: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + style-to-object: ^1.0.0 + unist-util-position: ^5.0.0 + vfile-message: ^4.0.0 + checksum: 599a97c6ec61c1430776813d7fb42e6f96032bf4a04dfcbb8eceef3bc8d1845ecf242387a4426b9d3f52320dbbfa26450643b81124b3d6a0b9bbb0fff4d0ba83 + languageName: node + linkType: hard + +"hast-util-to-parse5@npm:^8.0.0": + version: 8.0.0 + resolution: "hast-util-to-parse5@npm:8.0.0" + dependencies: + "@types/hast": ^3.0.0 + comma-separated-tokens: ^2.0.0 + devlop: ^1.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 web-namespaces: ^2.0.0 zwitch: ^2.0.0 - checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b + checksum: 137469209cb2b32b57387928878dc85310fbd5afa4807a8da69529199bb1d19044bfc95b50c3dc68d4fb2b6cb8bf99b899285597ab6ab318f50422eefd5599dd languageName: node linkType: hard -"hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 - languageName: node - linkType: hard - -"hastscript@npm:^7.0.0, hastscript@npm:^7.1.0": - version: 7.2.0 - resolution: "hastscript@npm:7.2.0" +"hast-util-whitespace@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-whitespace@npm:3.0.0" dependencies: - "@types/hast": ^2.0.0 + "@types/hast": ^3.0.0 + checksum: 41d93ccce218ba935dc3c12acdf586193c35069489c8c8f50c2aa824c00dec94a3c78b03d1db40fa75381942a189161922e4b7bca700b3a2cc779634c351a1e4 + languageName: node + linkType: hard + +"hastscript@npm:^8.0.0": + version: 8.0.0 + resolution: "hastscript@npm:8.0.0" + dependencies: + "@types/hast": ^3.0.0 comma-separated-tokens: ^2.0.0 - hast-util-parse-selector: ^3.0.0 + hast-util-parse-selector: ^4.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 - checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae + checksum: ae3c20223e7b847320c0f98b6fb3c763ebe1bf3913c5805fbc176cf84553a9db1117ca34cf842a5235890b4b9ae0e94501bfdc9a9b870a5dbf5fc52426db1097 languageName: node linkType: hard @@ -6501,10 +6414,10 @@ __metadata: languageName: node linkType: hard -"html-void-elements@npm:^2.0.0": - version: 2.0.1 - resolution: "html-void-elements@npm:2.0.1" - checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 +"html-void-elements@npm:^3.0.0": + version: 3.0.0 + resolution: "html-void-elements@npm:3.0.0" + checksum: 59be397525465a7489028afa064c55763d9cccd1d7d9f630cca47137317f0e897a9ca26cef7e745e7cff1abc44260cfa407742b243a54261dfacd42230e94fce languageName: node linkType: hard @@ -6818,6 +6731,13 @@ __metadata: languageName: node linkType: hard +"inline-style-parser@npm:0.2.2": + version: 0.2.2 + resolution: "inline-style-parser@npm:0.2.2" + checksum: 698893d6542d4e7c0377936a1c7daec34a197765bd77c5599384756a95ce8804e6b79347b783aa591d5e9c6f3d33dae74c6d4cad3a94647eb05f3a785e927a3f + languageName: node + linkType: hard + "interpret@npm:^1.0.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" @@ -6888,13 +6808,6 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 - languageName: node - linkType: hard - "is-ci@npm:^3.0.1": version: 3.0.1 resolution: "is-ci@npm:3.0.1" @@ -7182,16 +7095,16 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.18.2": - version: 1.20.0 - resolution: "jiti@npm:1.20.0" +"jiti@npm:^1.18.2, jiti@npm:^1.20.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" bin: jiti: bin/jiti.js - checksum: 7924062b5675142e3e272a27735be84b7bfc0a0eb73217fc2dcafa034f37c4f7b4b9ffc07dd98bcff0f739a8811ce1544db205ae7e97b1c86f0df92c65ce3c72 + checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 languageName: node linkType: hard -"joi@npm:^17.7.0, joi@npm:^17.9.2": +"joi@npm:^17.9.2": version: 17.11.0 resolution: "joi@npm:17.11.0" dependencies: @@ -7325,13 +7238,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 - languageName: node - linkType: hard - "klona@npm:^2.0.4": version: 2.0.6 resolution: "klona@npm:2.0.6" @@ -7432,13 +7338,6 @@ __metadata: languageName: node linkType: hard -"lodash.curry@npm:^4.0.1": - version: 4.1.1 - resolution: "lodash.curry@npm:4.1.1" - checksum: 9192b70fe7df4d1ff780c0260bee271afa9168c93fe4fa24bc861900240531b59781b5fdaadf4644fea8f4fbcd96f0700539ab294b579ffc1022c6c15dcc462a - languageName: node - linkType: hard - "lodash.debounce@npm:^4.0.8": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" @@ -7460,13 +7359,6 @@ __metadata: languageName: node linkType: hard -"lodash.flow@npm:^3.3.0": - version: 3.5.0 - resolution: "lodash.flow@npm:3.5.0" - checksum: a9a62ad344e3c5a1f42bc121da20f64dd855aaafecee24b1db640f29b88bd165d81c37ff7e380a7191de6f70b26f5918abcebbee8396624f78f3618a0b18634c - languageName: node - linkType: hard - "lodash.invokemap@npm:^4.6.0": version: 4.6.0 resolution: "lodash.invokemap@npm:4.6.0" @@ -7599,10 +7491,10 @@ __metadata: languageName: node linkType: hard -"markdown-extensions@npm:^1.0.0": - version: 1.1.1 - resolution: "markdown-extensions@npm:1.1.1" - checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e +"markdown-extensions@npm:^2.0.0": + version: 2.0.0 + resolution: "markdown-extensions@npm:2.0.0" + checksum: ec4ffcb0768f112e778e7ac74cb8ef22a966c168c3e6c29829f007f015b0a0b5c79c73ee8599a0c72e440e7f5cfdbf19e80e2d77b9a313b8f66e180a330cf1b2 languageName: node linkType: hard @@ -7613,61 +7505,31 @@ __metadata: languageName: node linkType: hard -"mdast-util-definitions@npm:^5.0.0": - version: 5.1.2 - resolution: "mdast-util-definitions@npm:5.1.2" +"mdast-util-directive@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-directive@npm:3.0.0" dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae - languageName: node - linkType: hard - -"mdast-util-directive@npm:^2.0.0": - version: 2.2.4 - resolution: "mdast-util-directive@npm:2.2.4" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - mdast-util-from-markdown: ^1.3.0 - mdast-util-to-markdown: ^1.5.0 + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 parse-entities: ^4.0.0 stringify-entities: ^4.0.0 - unist-util-visit-parents: ^5.1.3 - checksum: d04112761659c912b5d7db8f8c035918da52e79ce8cb598c7c270c6f678db0c22f3dea7894b30dec46852409f926306b84ca95683dd1e28731835eb5cb4fbda4 + unist-util-visit-parents: ^6.0.0 + checksum: 593afdc4f39f99bb198f3774bf4648cb546cb99a055e40c82262a7faab10926d2529a725d0d3945300ed0a1f07c6c84215a3f76b899a89b3f410ec7375bbab17 languageName: node linkType: hard -"mdast-util-find-and-replace@npm:^2.0.0": - version: 2.2.2 - resolution: "mdast-util-find-and-replace@npm:2.2.2" +"mdast-util-find-and-replace@npm:^3.0.0, mdast-util-find-and-replace@npm:^3.0.1": + version: 3.0.1 + resolution: "mdast-util-find-and-replace@npm:3.0.1" dependencies: - "@types/mdast": ^3.0.0 + "@types/mdast": ^4.0.0 escape-string-regexp: ^5.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.0.0 - checksum: b4ce463c43fe6e1c38a53a89703f755c84ab5437f49bff9a0ac751279733332ca11c85ed0262aa6c17481f77b555d26ca6d64e70d6814f5b8d12d34a3e53a60b - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^1.0.0, mdast-util-from-markdown@npm:^1.1.0, mdast-util-from-markdown@npm:^1.3.0": - version: 1.3.0 - resolution: "mdast-util-from-markdown@npm:1.3.0" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 - mdast-util-to-string: ^3.1.0 - micromark: ^3.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-decode-string: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f + unist-util-is: ^6.0.0 + unist-util-visit-parents: ^6.0.0 + checksum: 05d5c4ff02e31db2f8a685a13bcb6c3f44e040bd9dfa54c19a232af8de5268334c8755d79cb456ed4cced1300c4fb83e88444c7ae8ee9ff16869a580f29d08cd languageName: node linkType: hard @@ -7705,142 +7567,142 @@ __metadata: languageName: node linkType: hard -"mdast-util-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.3 - resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" +"mdast-util-gfm-autolink-literal@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-autolink-literal@npm:2.0.0" dependencies: - "@types/mdast": ^3.0.0 + "@types/mdast": ^4.0.0 ccount: ^2.0.0 - mdast-util-find-and-replace: ^2.0.0 - micromark-util-character: ^1.0.0 - checksum: 1748a8727cfc533bac0c287d6e72d571d165bfa77ae0418be4828177a3ec73c02c3f2ee534d87eb75cbaffa00c0866853bbcc60ae2255babb8210f7636ec2ce2 + devlop: ^1.0.0 + mdast-util-find-and-replace: ^3.0.0 + micromark-util-character: ^2.0.0 + checksum: 10322662e5302964bed7c9829c5fd3b0c9899d4f03e63fb8620ab141cf4f3de9e61fcb4b44d46aacc8a23f82bcd5d900980a211825dfe026b1dab5fdbc3e8742 languageName: node linkType: hard -"mdast-util-gfm-footnote@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-gfm-footnote@npm:1.0.2" +"mdast-util-gfm-footnote@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-footnote@npm:2.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - micromark-util-normalize-identifier: ^1.0.0 - checksum: 2d77505f9377ed7e14472ef5e6b8366c3fec2cf5f936bb36f9fbe5b97ccb7cce0464d9313c236fa86fb844206fd585db05707e4fcfb755e4fc1864194845f1f6 + "@types/mdast": ^4.0.0 + devlop: ^1.1.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + checksum: 45d26b40e7a093712e023105791129d76e164e2168d5268e113298a22de30c018162683fb7893cdc04ab246dac0087eed708b2a136d1d18ed2b32b3e0cae4a79 languageName: node linkType: hard -"mdast-util-gfm-strikethrough@npm:^1.0.0": - version: 1.0.3 - resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" +"mdast-util-gfm-strikethrough@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-strikethrough@npm:2.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 17003340ff1bba643ec4a59fd4370fc6a32885cab2d9750a508afa7225ea71449fb05acaef60faa89c6378b8bcfbd86a9d94b05f3c6651ff27a60e3ddefc2549 + "@types/mdast": ^4.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: fe9b1d0eba9b791ff9001c008744eafe3dd7a81b085f2bf521595ce4a8e8b1b44764ad9361761ad4533af3e5d913d8ad053abec38172031d9ee32a8ebd1c7dbd languageName: node linkType: hard -"mdast-util-gfm-table@npm:^1.0.0": - version: 1.0.7 - resolution: "mdast-util-gfm-table@npm:1.0.7" +"mdast-util-gfm-table@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-table@npm:2.0.0" dependencies: - "@types/mdast": ^3.0.0 + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 markdown-table: ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 8b8c401bb4162e53f072a2dff8efbca880fd78d55af30601c791315ab6722cb2918176e8585792469a0c530cebb9df9b4e7fede75fdc4d83df2839e238836692 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 063a627fd0993548fd63ca0c24c437baf91ba7d51d0a38820bd459bc20bf3d13d7365ef8d28dca99176dd5eb26058f7dde51190479c186dfe6af2e11202957c9 languageName: node linkType: hard -"mdast-util-gfm-task-list-item@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" +"mdast-util-gfm-task-list-item@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-task-list-item@npm:2.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: c9b86037d6953b84f11fb2fc3aa23d5b8e14ca0dfcb0eb2fb289200e172bb9d5647bfceb4f86606dc6d935e8d58f6a458c04d3e55e87ff8513c7d4ade976200b + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 37db90c59b15330fc54d790404abf5ef9f2f83e8961c53666fe7de4aab8dd5e6b3c296b6be19797456711a89a27840291d8871ff0438e9b4e15c89d170efe072 languageName: node linkType: hard -"mdast-util-gfm@npm:^2.0.0": - version: 2.0.2 - resolution: "mdast-util-gfm@npm:2.0.2" +"mdast-util-gfm@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-gfm@npm:3.0.0" dependencies: - mdast-util-from-markdown: ^1.0.0 - mdast-util-gfm-autolink-literal: ^1.0.0 - mdast-util-gfm-footnote: ^1.0.0 - mdast-util-gfm-strikethrough: ^1.0.0 - mdast-util-gfm-table: ^1.0.0 - mdast-util-gfm-task-list-item: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 7078cb985255208bcbce94a121906417d38353c6b1a9acbe56ee8888010d3500608b5d51c16b0999ac63ca58848fb13012d55f26930ff6c6f3450f053d56514e + mdast-util-from-markdown: ^2.0.0 + mdast-util-gfm-autolink-literal: ^2.0.0 + mdast-util-gfm-footnote: ^2.0.0 + mdast-util-gfm-strikethrough: ^2.0.0 + mdast-util-gfm-table: ^2.0.0 + mdast-util-gfm-task-list-item: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 62039d2f682ae3821ea1c999454863d31faf94d67eb9b746589c7e136076d7fb35fabc67e02f025c7c26fd7919331a0ee1aabfae24f565d9a6a9ebab3371c626 languageName: node linkType: hard -"mdast-util-mdx-expression@npm:^1.0.0": - version: 1.3.2 - resolution: "mdast-util-mdx-expression@npm:1.3.2" +"mdast-util-mdx-expression@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-mdx-expression@npm:2.0.0" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: e4c90f26deaa5eb6217b0a9af559a80de41da02ab3bcd864c56bed3304b056ae703896e9876bc6ded500f4aff59f4de5cbf6a4b109a5ba408f2342805fe6dc05 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 4e1183000e183e07a7264e192889b4fd57372806103031c71b9318967f85fd50a5dd0f92ef14f42c331e77410808f5de3341d7bc8ad4ee91b7fa8f0a30043a8a languageName: node linkType: hard -"mdast-util-mdx-jsx@npm:^2.0.0": - version: 2.1.2 - resolution: "mdast-util-mdx-jsx@npm:2.1.2" +"mdast-util-mdx-jsx@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-mdx-jsx@npm:3.0.0" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 ccount: ^2.0.0 - mdast-util-from-markdown: ^1.1.0 - mdast-util-to-markdown: ^1.3.0 + devlop: ^1.1.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 parse-entities: ^4.0.0 stringify-entities: ^4.0.0 - unist-util-remove-position: ^4.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 637e0bbd97c0c783f6b12bb05ccb1edaec076c5aa6d349147d77b8e6e10677f1be8e2870c05b1896f69095c9bc527f34be72b349b30737ab2e499bfc579b3a28 + unist-util-remove-position: ^5.0.0 + unist-util-stringify-position: ^4.0.0 + vfile-message: ^4.0.0 + checksum: 48fe1ba617205f3776ca2030d195adbdb42bb6c53326534db3f5bdd28abe7895103af8c4dfda7cbe2911e8cd71921bc8a82fe40856565e57af8b4f8a79c8c126 languageName: node linkType: hard -"mdast-util-mdx@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-mdx@npm:2.0.1" +"mdast-util-mdx@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-mdx@npm:3.0.0" dependencies: - mdast-util-from-markdown: ^1.0.0 - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdx-jsx: ^2.0.0 - mdast-util-mdxjs-esm: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 7303149230a26e524e319833b782bffca94e49cdab012996618701259bd056e014ca22a35d25ffa8880ba9064ee126a2a002f01e5c90a31ca726339ed775875e + mdast-util-from-markdown: ^2.0.0 + mdast-util-mdx-expression: ^2.0.0 + mdast-util-mdx-jsx: ^3.0.0 + mdast-util-mdxjs-esm: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: e2b007d826fcd49fd57ed03e190753c8b0f7d9eff6c7cb26ba609cde15cd3a472c0cd5e4a1ee3e39a40f14be22fdb57de243e093cea0c064d6f3366cff3e3af2 languageName: node linkType: hard -"mdast-util-mdxjs-esm@npm:^1.0.0": - version: 1.3.1 - resolution: "mdast-util-mdxjs-esm@npm:1.3.1" +"mdast-util-mdxjs-esm@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdxjs-esm@npm:2.0.1" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: ee78a4f58adfec38723cbc920f05481201ebb001eff3982f2d0e5f5ce5c75685e732e9d361ad4a1be8b936b4e5de0f2599cb96b92ad4bd92698ac0c4a09bbec3 - languageName: node - linkType: hard - -"mdast-util-phrasing@npm:^3.0.0": - version: 3.0.1 - resolution: "mdast-util-phrasing@npm:3.0.1" - dependencies: - "@types/mdast": ^3.0.0 - unist-util-is: ^5.0.0 - checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 1f9dad04d31d59005332e9157ea9510dc1d03092aadbc607a10475c7eec1c158b475aa0601a3a4f74e13097ca735deb8c2d9d37928ddef25d3029fd7c9e14dc3 languageName: node linkType: hard @@ -7854,35 +7716,20 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-hast@npm:^12.1.0": - version: 12.3.0 - resolution: "mdast-util-to-hast@npm:12.3.0" +"mdast-util-to-hast@npm:^13.0.0": + version: 13.1.0 + resolution: "mdast-util-to-hast@npm:13.1.0" dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-definitions: ^5.0.0 - micromark-util-sanitize-uri: ^1.1.0 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + "@ungap/structured-clone": ^1.0.0 + devlop: ^1.0.0 + micromark-util-sanitize-uri: ^2.0.0 trim-lines: ^3.0.0 - unist-util-generated: ^2.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb - languageName: node - linkType: hard - -"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0, mdast-util-to-markdown@npm:^1.5.0": - version: 1.5.0 - resolution: "mdast-util-to-markdown@npm:1.5.0" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - longest-streak: ^3.0.0 - mdast-util-phrasing: ^3.0.0 - mdast-util-to-string: ^3.0.0 - micromark-util-decode-string: ^1.0.0 - unist-util-visit: ^4.0.0 - zwitch: ^2.0.0 - checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + unist-util-position: ^5.0.0 + unist-util-visit: ^5.0.0 + vfile: ^6.0.0 + checksum: 640bc897286af8fe760cd477fb04bbf544a5a897cdc2220ce36fe2f892f067b483334610387aeb969511bd78a2d841a54851079cd676ac513d6a5ff75852514e languageName: node linkType: hard @@ -7902,15 +7749,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0, mdast-util-to-string@npm:^3.2.0": - version: 3.2.0 - resolution: "mdast-util-to-string@npm:3.2.0" - dependencies: - "@types/mdast": ^3.0.0 - checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 - languageName: node - linkType: hard - "mdast-util-to-string@npm:^4.0.0": version: 4.0.0 resolution: "mdast-util-to-string@npm:4.0.0" @@ -7971,30 +7809,6 @@ __metadata: languageName: node linkType: hard -"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": - version: 1.0.6 - resolution: "micromark-core-commonmark@npm:1.0.6" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-factory-destination: ^1.0.0 - micromark-factory-label: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-factory-title: ^1.0.0 - micromark-factory-whitespace: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-classify-character: ^1.0.0 - micromark-util-html-tag-name: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 4b483c46077f696ed310f6d709bb9547434c218ceb5c1220fde1707175f6f68b44da15ab8668f9c801e1a123210071e3af883a7d1215122c913fd626f122bfc2 - languageName: node - linkType: hard - "micromark-core-commonmark@npm:^2.0.0": version: 2.0.0 resolution: "micromark-core-commonmark@npm:2.0.0" @@ -8019,18 +7833,18 @@ __metadata: languageName: node linkType: hard -"micromark-extension-directive@npm:^2.0.0": - version: 2.2.0 - resolution: "micromark-extension-directive@npm:2.2.0" +"micromark-extension-directive@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-directive@npm:3.0.0" dependencies: - micromark-factory-space: ^1.0.0 - micromark-factory-whitespace: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 + devlop: ^1.0.0 + micromark-factory-space: ^2.0.0 + micromark-factory-whitespace: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 parse-entities: ^4.0.0 - uvu: ^0.5.0 - checksum: 1256374a1327c2aecd4b3592de2c62ddf4798441d3a953f8414ecde05da2595a47428d94959b0bdb67605d4e195b95eb0b6e18ece44a50cbdf5a9c2c25d21905 + checksum: 8350106bdf039a544cba64cf7932261a710e07d73d43d6c645dd2b16577f30ebd04abf762e8ca74266f5de19938e1eeff6c237d79f8244dea23aef7f90df2c31 languageName: node linkType: hard @@ -8046,181 +7860,172 @@ __metadata: languageName: node linkType: hard -"micromark-extension-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" +"micromark-extension-gfm-autolink-literal@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-autolink-literal@npm:2.0.0" dependencies: - micromark-util-character: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 + micromark-util-character: ^2.0.0 + micromark-util-sanitize-uri: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: fa16d59528239262d6d04d539a052baf1f81275954ec8bfadea40d81bfc25667d5c8e68b225a5358626df5e30a3933173a67fdad2fed011d37810a10b770b0b2 languageName: node linkType: hard -"micromark-extension-gfm-footnote@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-extension-gfm-footnote@npm:1.1.0" +"micromark-extension-gfm-footnote@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-footnote@npm:2.0.0" dependencies: - micromark-core-commonmark: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 7a5408625ef2cca5cc18e6591c2522a8a409f466a6fbc0ed938950aafe5fc9bf1eada65e1a4dd4e36ec3e7b24920de1f4b3e2c365d8f5cd2d6ccb1f8c2377c49 + devlop: ^1.0.0 + micromark-core-commonmark: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-sanitize-uri: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: a426fddecfac6144fc622b845cd2dc09d46faa75be5b76ff022cb76a03301b1d4929a5e5e41e071491787936be65e03d0b03c7aebc0e0136b3cdbfadadd6632c languageName: node linkType: hard -"micromark-extension-gfm-strikethrough@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-gfm-strikethrough@npm:1.0.5" +"micromark-extension-gfm-strikethrough@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-strikethrough@npm:2.0.0" dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-classify-character: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 548c0f257753d735c741533411957f04253da53db31e1f398dc5dc1de9f398c45586baad5223dce8f3b55f9433c255e6eb695fc3104256b8c332dd8737136882 + devlop: ^1.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-classify-character: ^2.0.0 + micromark-util-resolve-all: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 4e35fbbf364bfce08066b70acd94b9d393a8fd09a5afbe0bae70d0c8a174640b1ba86ab6b78ee38f411a813e2a718b07959216cf0063d823ba1c569a7694e5ad languageName: node linkType: hard -"micromark-extension-gfm-table@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-gfm-table@npm:1.0.5" +"micromark-extension-gfm-table@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-table@npm:2.0.0" dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef + devlop: ^1.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 71484dcf8db7b189da0528f472cc81e4d6d1a64ae43bbe7fcb7e2e1dba758a0a4f785f9f1afb9459fe5b4a02bbe023d78c95c05204414a14083052eb8219e5eb languageName: node linkType: hard -"micromark-extension-gfm-tagfilter@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-extension-gfm-tagfilter@npm:1.0.2" +"micromark-extension-gfm-tagfilter@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-tagfilter@npm:2.0.0" dependencies: - micromark-util-types: ^1.0.0 - checksum: 7d2441df51f890c86f8e7cf7d331a570b69c8105fa1c2fc5b737cb739502c16c8ee01cf35550a8a78f89497c5dfacc97cf82d55de6274e8320f3aec25e2b0dd2 + micromark-util-types: ^2.0.0 + checksum: cf21552f4a63592bfd6c96ae5d64a5f22bda4e77814e3f0501bfe80e7a49378ad140f827007f36044666f176b3a0d5fea7c2e8e7973ce4b4579b77789f01ae95 languageName: node linkType: hard -"micromark-extension-gfm-task-list-item@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-gfm-task-list-item@npm:1.0.4" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 2575bb47b320f2479d3cc2492ba7cf79d6baa9cd0200c0ed120fd0e318e64e8ebab4a93a056a3781cb5107193f3b36ebd2d86a5928308bef45fc121291f97eb5 - languageName: node - linkType: hard - -"micromark-extension-gfm@npm:^2.0.0": +"micromark-extension-gfm-task-list-item@npm:^2.0.0": version: 2.0.1 - resolution: "micromark-extension-gfm@npm:2.0.1" + resolution: "micromark-extension-gfm-task-list-item@npm:2.0.1" dependencies: - micromark-extension-gfm-autolink-literal: ^1.0.0 - micromark-extension-gfm-footnote: ^1.0.0 - micromark-extension-gfm-strikethrough: ^1.0.0 - micromark-extension-gfm-table: ^1.0.0 - micromark-extension-gfm-tagfilter: ^1.0.0 - micromark-extension-gfm-task-list-item: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: b181479c87be38d5ae8d28e6dc52fab73c894fd2706876746f27a91fb186644ce03532a9c35dca2186327a0e2285cd5242ad0361dc89adedd4a50376ffd94e22 + devlop: ^1.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 80e569ab1a1d1f89d86af91482e9629e24b7e3f019c9d7989190f36a9367c6de723b2af48e908c1b73479f35b2215d3d38c1fdbf02ab01eb2fc90a59d1cf4465 languageName: node linkType: hard -"micromark-extension-mdx-expression@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-mdx-expression@npm:1.0.4" +"micromark-extension-gfm@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-gfm@npm:3.0.0" dependencies: - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: d19a31f9813dd5d4ad96b99e35b7c48067e69d75f92ec670dad5242857fb7688ba8b7c6a15616797b5df25dd89fd3b54916f93cb60ce2cfe97aca84739b45954 + micromark-extension-gfm-autolink-literal: ^2.0.0 + micromark-extension-gfm-footnote: ^2.0.0 + micromark-extension-gfm-strikethrough: ^2.0.0 + micromark-extension-gfm-table: ^2.0.0 + micromark-extension-gfm-tagfilter: ^2.0.0 + micromark-extension-gfm-task-list-item: ^2.0.0 + micromark-util-combine-extensions: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 2060fa62666a09532d6b3a272d413bc1b25bbb262f921d7402795ac021e1362c8913727e33d7528d5b4ccaf26922ec51208c43f795a702964817bc986de886c9 languageName: node linkType: hard -"micromark-extension-mdx-jsx@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-mdx-jsx@npm:1.0.3" +"micromark-extension-mdx-expression@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdx-expression@npm:3.0.0" + dependencies: + "@types/estree": ^1.0.0 + devlop: ^1.0.0 + micromark-factory-mdx-expression: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-events-to-acorn: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: abd6ba0acdebc03bc0836c51a1ec4ca28e0be86f10420dd8cfbcd6c10dd37cd3f31e7c8b9792e9276e7526748883f4a30d0803d72b6285dae47d4e5348c23a10 + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdx-jsx@npm:3.0.0" dependencies: "@types/acorn": ^4.0.0 - estree-util-is-identifier-name: ^2.0.0 - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 1a5566890aabc52fe96b78e3a3a507dee03a2232e44b9360b00617734e156f934e85bc6a477fbb856c793fe33c9fb7d2207a4f50e680168c0d04ba9c9336d960 + "@types/estree": ^1.0.0 + devlop: ^1.0.0 + estree-util-is-identifier-name: ^3.0.0 + micromark-factory-mdx-expression: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + vfile-message: ^4.0.0 + checksum: 5e2f45d381d1ce43afadc5376427b42ef8cd2a574ca3658473254eabe84db99ef1abc03055b3d86728fac7f1edfb1076e6f2f322ed8bfb1f2f14cafc2c8f0d0e languageName: node linkType: hard -"micromark-extension-mdx-md@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-mdx-md@npm:1.0.0" +"micromark-extension-mdx-md@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-mdx-md@npm:2.0.0" dependencies: - micromark-util-types: ^1.0.0 - checksum: b4f205e1d5f0946b4755541ef44ffd0b3be8c7ecfc08d8b139b6a21fbd3ff62d8fdb6b7e6d17bd9a3b610450267f43a41703dc48b341da9addd743a28cdefa64 + micromark-util-types: ^2.0.0 + checksum: 7daf03372fd7faddf3f0ac87bdb0debb0bb770f33b586f72251e1072b222ceee75400ab6194c0e130dbf1e077369a5b627be6e9130d7a2e9e6b849f0d18ff246 languageName: node linkType: hard -"micromark-extension-mdxjs-esm@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-mdxjs-esm@npm:1.0.3" +"micromark-extension-mdxjs-esm@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs-esm@npm:3.0.0" dependencies: - micromark-core-commonmark: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.1.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 756074656391a5e5bb96bc8a0e9c1df7d9f7be5299847c9719e6a90552e1c76a11876aa89986ad5da89ab485f776a4a43a61ea3acddd4f865a5cee43ac523ffd + "@types/estree": ^1.0.0 + devlop: ^1.0.0 + micromark-core-commonmark: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-events-to-acorn: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + unist-util-position-from-estree: ^2.0.0 + vfile-message: ^4.0.0 + checksum: fb33d850200afce567b95c90f2f7d42259bd33eea16154349e4fa77c3ec934f46c8e5c111acea16321dce3d9f85aaa4c49afe8b810e31b34effc11617aeee8f6 languageName: node linkType: hard -"micromark-extension-mdxjs@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-mdxjs@npm:1.0.0" +"micromark-extension-mdxjs@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs@npm:3.0.0" dependencies: acorn: ^8.0.0 acorn-jsx: ^5.0.0 - micromark-extension-mdx-expression: ^1.0.0 - micromark-extension-mdx-jsx: ^1.0.0 - micromark-extension-mdx-md: ^1.0.0 - micromark-extension-mdxjs-esm: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ba836c6d2dfc67597886e88f533ffa02f2029dbe216a0651f1066e70f8529a700bcc7fa2bc4201ee12fd3d1cd7da7093d5a442442daeb84b27df96aaffb7699c - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-destination@npm:1.0.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 8e733ae9c1c2342f14ff290bf09946e20f6f540117d80342377a765cac48df2ea5e748f33c8b07501ad7a43414b1a6597c8510ede2052b6bf1251fab89748e20 + micromark-extension-mdx-expression: ^3.0.0 + micromark-extension-mdx-jsx: ^3.0.0 + micromark-extension-mdx-md: ^2.0.0 + micromark-extension-mdxjs-esm: ^3.0.0 + micromark-util-combine-extensions: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 7da6f0fb0e1e0270a2f5ad257e7422cc16e68efa7b8214c63c9d55bc264cb872e9ca4ac9a71b9dfd13daf52e010f730bac316086f4340e4fcc6569ec699915bf languageName: node linkType: hard @@ -8235,18 +8040,6 @@ __metadata: languageName: node linkType: hard -"micromark-factory-label@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-label@npm:1.0.2" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 - languageName: node - linkType: hard - "micromark-factory-label@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-label@npm:2.0.0" @@ -8259,19 +8052,19 @@ __metadata: languageName: node linkType: hard -"micromark-factory-mdx-expression@npm:^1.0.0": - version: 1.0.7 - resolution: "micromark-factory-mdx-expression@npm:1.0.7" +"micromark-factory-mdx-expression@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-mdx-expression@npm:2.0.1" dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: e7893f21576bcb7755d341e45d3ff202ba466fa2278c6f31ae4db4002a28d6d13a4efad331ef46223372ec2010d9bc2ff27e2cd57a4580be6491e59ca21ba59d + "@types/estree": ^1.0.0 + devlop: ^1.0.0 + micromark-util-character: ^2.0.0 + micromark-util-events-to-acorn: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + unist-util-position-from-estree: ^2.0.0 + vfile-message: ^4.0.0 + checksum: 2ba0ae939d0174a5e5331b1a4c203b96862ccf06e8903d6bdcc2d51f75515e52d407cd394afcd182f9ff0e877dc2a14e3fa430ced0131e156650d45104de8311 languageName: node linkType: hard @@ -8295,19 +8088,6 @@ __metadata: languageName: node linkType: hard -"micromark-factory-title@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-title@npm:1.0.2" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 - languageName: node - linkType: hard - "micromark-factory-title@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-title@npm:2.0.0" @@ -8320,18 +8100,6 @@ __metadata: languageName: node linkType: hard -"micromark-factory-whitespace@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-whitespace@npm:1.0.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 0888386e6ea2dd665a5182c570d9b3d0a172d3f11694ca5a2a84e552149c9f1429f5b975ec26e1f0fa4388c55a656c9f359ce5e0603aff6175ba3e255076f20b - languageName: node - linkType: hard - "micromark-factory-whitespace@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-whitespace@npm:2.0.0" @@ -8364,15 +8132,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-chunked@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-chunked@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: c1efd56e8c4217bcf1c6f1a9fb9912b4a2a5503b00d031da902be922fb3fee60409ac53f11739991291357b2784fb0647ddfc74c94753a068646c0cb0fd71421 - languageName: node - linkType: hard - "micromark-util-chunked@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-chunked@npm:2.0.0" @@ -8382,17 +8141,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-classify-character@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-classify-character@npm:1.0.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 180446e6a1dec653f625ded028f244784e1db8d10ad05c5d70f08af9de393b4a03dc6cf6fa5ed8ccc9c24bbece7837abf3bf66681c0b4adf159364b7d5236dfd - languageName: node - linkType: hard - "micromark-util-classify-character@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-classify-character@npm:2.0.0" @@ -8404,16 +8152,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-combine-extensions@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-combine-extensions@npm:1.0.0" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 5304a820ef75340e1be69d6ad167055b6ba9a3bafe8171e5945a935752f462415a9dd61eb3490220c055a8a11167209a45bfa73f278338b7d3d61fa1464d3f35 - languageName: node - linkType: hard - "micromark-util-combine-extensions@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-combine-extensions@npm:2.0.0" @@ -8424,15 +8162,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-decode-numeric-character-reference@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-decode-numeric-character-reference@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: f3ae2bb582a80f1e9d3face026f585c0c472335c064bd850bde152376f0394cb2831746749b6be6e0160f7d73626f67d10716026c04c87f402c0dd45a1a28633 - languageName: node - linkType: hard - "micromark-util-decode-numeric-character-reference@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.0" @@ -8442,18 +8171,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-decode-string@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-decode-string@npm:1.0.2" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a - languageName: node - linkType: hard - "micromark-util-decode-string@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-decode-string@npm:2.0.0" @@ -8466,13 +8183,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-encode@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-encode@npm:1.0.1" - checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a - languageName: node - linkType: hard - "micromark-util-encode@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-encode@npm:2.0.0" @@ -8480,25 +8190,19 @@ __metadata: languageName: node linkType: hard -"micromark-util-events-to-acorn@npm:^1.0.0": - version: 1.2.1 - resolution: "micromark-util-events-to-acorn@npm:1.2.1" +"micromark-util-events-to-acorn@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-events-to-acorn@npm:2.0.2" dependencies: "@types/acorn": ^4.0.0 "@types/estree": ^1.0.0 - estree-util-visit: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-location: ^4.0.0 - vfile-message: ^3.0.0 - checksum: baf1cad66d860980cf20963f641c48c434e5be5802beabefdda21be136ae037845dd236b5e9ce5cf9409bf1b9ba8b4131a396d3a5bfa12098dae13e4a9724f2b - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-html-tag-name@npm:1.1.0" - checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c + "@types/unist": ^3.0.0 + devlop: ^1.0.0 + estree-util-visit: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + vfile-message: ^4.0.0 + checksum: bcb3eeac52a4ae5c3ca3d8cff514de3a7d1f272d9a94cce26a08c578bef64df4d61820874c01207e92fcace9eae5c9a7ecdddef0c6e10014b255a07b7880bf94 languageName: node linkType: hard @@ -8509,15 +8213,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-normalize-identifier@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-normalize-identifier@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: d7c09d5e8318fb72f194af72664bd84a48a2928e3550b2b21c8fbc0ec22524f2a72e0f6663d2b95dc189a6957d3d7759b60716e888909710767cd557be821f8b - languageName: node - linkType: hard - "micromark-util-normalize-identifier@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-normalize-identifier@npm:2.0.0" @@ -8527,15 +8222,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-resolve-all@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-resolve-all@npm:1.0.0" - dependencies: - micromark-util-types: ^1.0.0 - checksum: 409667f2bd126ef8acce009270d2aecaaa5584c5807672bc657b09e50aa91bd2e552cf41e5be1e6469244a83349cbb71daf6059b746b1c44e3f35446fef63e50 - languageName: node - linkType: hard - "micromark-util-resolve-all@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-resolve-all@npm:2.0.0" @@ -8545,17 +8231,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": - version: 1.1.0 - resolution: "micromark-util-sanitize-uri@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b - languageName: node - linkType: hard - "micromark-util-sanitize-uri@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-sanitize-uri@npm:2.0.0" @@ -8567,18 +8242,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-subtokenize@npm:1.0.2" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 - languageName: node - linkType: hard - "micromark-util-subtokenize@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-subtokenize@npm:2.0.0" @@ -8605,7 +8268,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": +"micromark-util-types@npm:^1.0.0": version: 1.0.2 resolution: "micromark-util-types@npm:1.0.2" checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df @@ -8619,31 +8282,6 @@ __metadata: languageName: node linkType: hard -"micromark@npm:^3.0.0": - version: 3.1.0 - resolution: "micromark@npm:3.1.0" - dependencies: - "@types/debug": ^4.0.0 - debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 - micromark-core-commonmark: ^1.0.1 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 - languageName: node - linkType: hard - "micromark@npm:^4.0.0": version: 4.0.0 resolution: "micromark@npm:4.0.0" @@ -8702,7 +8340,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -8777,7 +8415,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.7": +"minimist@npm:^1.2.0": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -8872,13 +8510,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.1.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 - languageName: node - linkType: hard - "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -8952,26 +8583,15 @@ __metadata: languageName: node linkType: hard -"node-emoji@npm:^1.10.0": - version: 1.11.0 - resolution: "node-emoji@npm:1.11.0" +"node-emoji@npm:^2.1.0": + version: 2.1.3 + resolution: "node-emoji@npm:2.1.3" dependencies: - lodash: ^4.17.21 - checksum: e8c856c04a1645062112a72e59a98b203505ed5111ff84a3a5f40611afa229b578c7d50f1e6a7f17aa62baeea4a640d2e2f61f63afc05423aa267af10977fb2b - languageName: node - linkType: hard - -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + "@sindresorhus/is": ^4.6.0 + char-regex: ^1.0.2 + emojilib: ^2.4.0 + skin-tone: ^2.0.0 + checksum: 9ae5a1fb12fd5ce6885f251f345986115de4bb82e7d06fdc943845fb19260d89d0aaaccbaf85cae39fe7aaa1fc391640558865ba690c9bb8a7236c3ac10bbab0 languageName: node linkType: hard @@ -9002,10 +8622,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.13": - version: 2.0.13 - resolution: "node-releases@npm:2.0.13" - checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 languageName: node linkType: hard @@ -9085,7 +8705,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -9342,13 +8962,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -9977,15 +9590,15 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^2.1.0": - version: 2.1.0 - resolution: "prism-react-renderer@npm:2.1.0" +"prism-react-renderer@npm:^2.3.0": + version: 2.3.1 + resolution: "prism-react-renderer@npm:2.3.1" dependencies: "@types/prismjs": ^1.26.0 - clsx: ^1.2.1 + clsx: ^2.0.0 peerDependencies: react: ">=16.0.0" - checksum: 61b4eb22bdbf01005a0d7ec2a24a27b69e28f124a1fbbfc2adb4d7d41a7929ea94d5ce506a361dd5a230728402f02595d521d9a5286d74ec9b34be0896c513a5 + checksum: b12a7d502c1e764d94f7d3c84aee9cd6fccc676bb7e21dee94d37eb2e7e62e097a343999e1979887cb83a57cbdea48d2046aa74d07bce05caa25f4c296df30b6 languageName: node linkType: hard @@ -10020,15 +9633,6 @@ __metadata: languageName: node linkType: hard -"promise@npm:^7.1.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: ~2.0.3 - checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 - languageName: node - linkType: hard - "prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" @@ -10097,13 +9701,6 @@ __metadata: languageName: node linkType: hard -"pure-color@npm:^1.2.0": - version: 1.3.0 - resolution: "pure-color@npm:1.3.0" - checksum: 646d8bed6e6eab89affdd5e2c11f607a85b631a7fb03c061dfa658eb4dc4806881a15feed2ac5fd8c0bad8c00c632c640d5b1cb8b9a972e6e947393a1329371b - languageName: node - linkType: hard - "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -10185,18 +9782,6 @@ __metadata: languageName: node linkType: hard -"react-base16-styling@npm:~0.6.0": - version: 0.6.0 - resolution: "react-base16-styling@npm:0.6.0" - dependencies: - base16: ^1.0.0 - lodash.curry: ^4.0.1 - lodash.flow: ^3.3.0 - pure-color: ^1.2.0 - checksum: 00a12dddafc8a9025cca933b0dcb65fca41c81fa176d1fc3a6a9d0242127042e2c0a604f4c724a3254dd2c6aeb5ef55095522ff22f5462e419641c1341a658e4 - languageName: node - linkType: hard - "react-dev-utils@npm:^12.0.1": version: 12.0.1 resolution: "react-dev-utils@npm:12.0.1" @@ -10278,10 +9863,12 @@ __metadata: languageName: node linkType: hard -"react-lifecycles-compat@npm:~3.0.4": - version: 3.0.4 - resolution: "react-lifecycles-compat@npm:3.0.4" - checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f +"react-json-view-lite@npm:^1.2.0": + version: 1.2.1 + resolution: "react-json-view-lite@npm:1.2.1" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + checksum: 9441260033ec07991b0121281d846f9d3e8db9061ea0dc3938f7003630f515d47870a465d90f1f9300ebe406679986657a4062c009c2a2084e2e145e6fa05a47 languageName: node linkType: hard @@ -10345,19 +9932,6 @@ __metadata: languageName: node linkType: hard -"react-textarea-autosize@npm:~8.3.2": - version: 8.3.4 - resolution: "react-textarea-autosize@npm:8.3.4" - dependencies: - "@babel/runtime": ^7.10.2 - use-composed-ref: ^1.3.0 - use-latest: ^1.2.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 87360d4392276d4e87511a73be9b0634b8bcce8f4f648cf659334d993f25ad3d4062f468f1e1944fc614123acae4299580aad00b760c6a96cec190e076f847f5 - languageName: node - linkType: hard - "react@npm:^18.0.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -10502,14 +10076,14 @@ __metadata: languageName: node linkType: hard -"rehype-raw@npm:^6.1.1": - version: 6.1.1 - resolution: "rehype-raw@npm:6.1.1" +"rehype-raw@npm:^7.0.0": + version: 7.0.0 + resolution: "rehype-raw@npm:7.0.0" dependencies: - "@types/hast": ^2.0.0 - hast-util-raw: ^7.2.0 - unified: ^10.0.0 - checksum: a1f9d309e609f49fb1f1e06e722705f4dd2e569653a89f756eaccb33b612cf1bb511216a81d10a619d11d047afc161e4b3cb99b957df05a8ba8fdbd5843f949a + "@types/hast": ^3.0.0 + hast-util-raw: ^9.0.0 + vfile: ^6.0.0 + checksum: f9e28dcbf4c6c7d91a97c10a840310f18ef3268aa45abb3e0428b6b191ff3c4fa8f753b910d768588a2dac5c7da7e557b4ddc3f1b6cd252e8d20cb62d60c65ed languageName: node linkType: hard @@ -10520,26 +10094,28 @@ __metadata: languageName: node linkType: hard -"remark-directive@npm:^2.0.1": - version: 2.0.1 - resolution: "remark-directive@npm:2.0.1" +"remark-directive@npm:^3.0.0": + version: 3.0.0 + resolution: "remark-directive@npm:3.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-directive: ^2.0.0 - micromark-extension-directive: ^2.0.0 - unified: ^10.0.0 - checksum: 61539926813654011431cc34e3d6c5ba702a6b610a0e8210b4748828809e86614bbb3e2de5fdee59eed24501f95c41665b175b852cc26544079789db10ac6cd7 + "@types/mdast": ^4.0.0 + mdast-util-directive: ^3.0.0 + micromark-extension-directive: ^3.0.0 + unified: ^11.0.0 + checksum: 744d12bbe924bd0492a2481cbaf9250aa6622c0d2cc090bb7bc39975e355c8a46ae13cc4793204ada39f0af64c953f6b730a55420a50375e0f74a5dd5d201089 languageName: node linkType: hard -"remark-emoji@npm:^2.2.0": - version: 2.2.0 - resolution: "remark-emoji@npm:2.2.0" +"remark-emoji@npm:^4.0.0": + version: 4.0.1 + resolution: "remark-emoji@npm:4.0.1" dependencies: - emoticon: ^3.2.0 - node-emoji: ^1.10.0 - unist-util-visit: ^2.0.3 - checksum: 638d4be72eb4110a447f389d4b8c454921f188c0acabf1b6579f3ddaa301ee91010173d6eebd975ea622ae3de7ed4531c0315a4ffd4f9653d80c599ef9ec21a8 + "@types/mdast": ^4.0.2 + emoticon: ^4.0.1 + mdast-util-find-and-replace: ^3.0.1 + node-emoji: ^2.1.0 + unified: ^11.0.4 + checksum: 2c02d8c0b694535a9f0c4fe39180cb89a8fbd07eb873c94842c34dfde566b8a6703df9d28fe175a8c28584f96252121de722862baa756f2d875f2f1a4352c1f4 languageName: node linkType: hard @@ -10555,48 +10131,63 @@ __metadata: languageName: node linkType: hard -"remark-gfm@npm:^3.0.1": - version: 3.0.1 - resolution: "remark-gfm@npm:3.0.1" +"remark-gfm@npm:^4.0.0": + version: 4.0.0 + resolution: "remark-gfm@npm:4.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-gfm: ^2.0.0 - micromark-extension-gfm: ^2.0.0 - unified: ^10.0.0 - checksum: 02254f74d67b3419c2c9cf62d799ec35f6c6cd74db25c001361751991552a7ce86049a972107bff8122d85d15ae4a8d1a0618f3bc01a7df837af021ae9b2a04e + "@types/mdast": ^4.0.0 + mdast-util-gfm: ^3.0.0 + micromark-extension-gfm: ^3.0.0 + remark-parse: ^11.0.0 + remark-stringify: ^11.0.0 + unified: ^11.0.0 + checksum: 84bea84e388061fbbb697b4b666089f5c328aa04d19dc544c229b607446bc10902e46b67b9594415a1017bbbd7c811c1f0c30d36682c6d1a6718b66a1558261b languageName: node linkType: hard -"remark-mdx@npm:^2.0.0": - version: 2.3.0 - resolution: "remark-mdx@npm:2.3.0" +"remark-mdx@npm:^3.0.0": + version: 3.0.0 + resolution: "remark-mdx@npm:3.0.0" dependencies: - mdast-util-mdx: ^2.0.0 - micromark-extension-mdxjs: ^1.0.0 - checksum: 98486986c5b6f6a8321eb2f3b13c70fcd5644821428c77b7bfeb5ee5d4605b9761b322b2f6b531e83883cd2d5bc7bc4623427149aee00e1eba012f538b3d5627 + mdast-util-mdx: ^3.0.0 + micromark-extension-mdxjs: ^3.0.0 + checksum: 8b9b3e5297e5cb4c312553f42c3720280ada96ae60ede880606924a0aad2e773106aba1ef45a0c179c218f8da6f58dac3c789a9c4f791649ca7a183706cde5b8 languageName: node linkType: hard -"remark-parse@npm:^10.0.0": - version: 10.0.1 - resolution: "remark-parse@npm:10.0.1" +"remark-parse@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-parse@npm:11.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - unified: ^10.0.0 - checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 + "@types/mdast": ^4.0.0 + mdast-util-from-markdown: ^2.0.0 + micromark-util-types: ^2.0.0 + unified: ^11.0.0 + checksum: d83d245290fa84bb04fb3e78111f09c74f7417e7c012a64dd8dc04fccc3699036d828fbd8eeec8944f774b6c30cc1d925c98f8c46495ebcee7c595496342ab7f languageName: node linkType: hard -"remark-rehype@npm:^10.0.0": - version: 10.1.0 - resolution: "remark-rehype@npm:10.1.0" +"remark-rehype@npm:^11.0.0": + version: 11.1.0 + resolution: "remark-rehype@npm:11.1.0" dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-to-hast: ^12.1.0 - unified: ^10.0.0 - checksum: b9ac8acff3383b204dfdc2599d0bdf86e6ca7e837033209584af2e6aaa6a9013e519a379afa3201299798cab7298c8f4b388de118c312c67234c133318aec084 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + mdast-util-to-hast: ^13.0.0 + unified: ^11.0.0 + vfile: ^6.0.0 + checksum: f0c731f0ab92a122e7f9c9bcbd10d6a31fdb99f0ea3595d232ddd9f9d11a308c4ec0aff4d56e1d0d256042dfad7df23b9941e50b5038da29786959a5926814e1 + languageName: node + linkType: hard + +"remark-stringify@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-stringify@npm:11.0.0" + dependencies: + "@types/mdast": ^4.0.0 + mdast-util-to-markdown: ^2.0.0 + unified: ^11.0.0 + checksum: 59e07460eb629d6c3b3c0f438b0b236e7e6858fd5ab770303078f5a556ec00354d9c7fb9ef6d5f745a4617ac7da1ab618b170fbb4dac120e183fecd9cc86bce6 languageName: node linkType: hard @@ -10752,24 +10343,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.8.0": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: ^2.1.0 - checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 - languageName: node - linkType: hard - -"sade@npm:^1.7.3": - version: 1.8.1 - resolution: "sade@npm:1.8.1" - dependencies: - mri: ^1.1.0 - checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d - languageName: node - linkType: hard - "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -11014,13 +10587,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd - languageName: node - linkType: hard - "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -11137,6 +10703,15 @@ __metadata: languageName: node linkType: hard +"skin-tone@npm:^2.0.0": + version: 2.0.0 + resolution: "skin-tone@npm:2.0.0" + dependencies: + unicode-emoji-modifier-base: ^1.0.0 + checksum: 19de157586b8019cacc55eb25d9d640f00fc02415761f3e41a4527142970fd4e7f6af0333bc90e879858766c20a976107bb386ffd4c812289c01d51f2c8d182c + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -11420,12 +10995,21 @@ __metadata: languageName: node linkType: hard -"style-to-object@npm:^0.4.1": - version: 0.4.1 - resolution: "style-to-object@npm:0.4.1" +"style-to-object@npm:^0.4.0": + version: 0.4.4 + resolution: "style-to-object@npm:0.4.4" dependencies: inline-style-parser: 0.1.1 - checksum: 2ea213e98eed21764ae1d1dc9359231a9f2d480d6ba55344c4c15eb275f0809f1845786e66d4caf62414a5cc8f112ce9425a58d251c77224060373e0db48f8c2 + checksum: 41656c06f93ac0a7ac260ebc2f9d09a8bd74b8ec1836f358cc58e169235835a3a356977891d2ebbd76f0e08a53616929069199f9cce543214d3dc98346e19c9a + languageName: node + linkType: hard + +"style-to-object@npm:^1.0.0": + version: 1.0.5 + resolution: "style-to-object@npm:1.0.5" + dependencies: + inline-style-parser: 0.2.2 + checksum: 6201063204b6a94645f81b189452b2ca3e63d61867ec48523f4d52609c81e96176739fa12020d97fbbf023efb57a6f7ec3a15fb3a7fb7eb3ffea0b52b9dd6b8c languageName: node linkType: hard @@ -11631,13 +11215,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 - languageName: node - linkType: hard - "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -11652,7 +11229,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.6.0": +"tslib@npm:^2.0.3, tslib@npm:^2.6.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad @@ -11712,13 +11289,6 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.30": - version: 0.7.33 - resolution: "ua-parser-js@npm:0.7.33" - checksum: 1510e9ec26fcaf0d8c6ae8f1078a8230e8816f083e1b5f453ea19d06b8ef2b8a596601c92148fd41899e8b3e5f83fa69c42332bd5729b931a721040339831696 - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -11726,6 +11296,13 @@ __metadata: languageName: node linkType: hard +"unicode-emoji-modifier-base@npm:^1.0.0": + version: 1.0.0 + resolution: "unicode-emoji-modifier-base@npm:1.0.0" + checksum: 6e1521d35fa69493207eb8b41f8edb95985d8b3faf07c01d820a1830b5e8403e20002563e2f84683e8e962a49beccae789f0879356bf92a4ec7a4dd8e2d16fdb + languageName: node + linkType: hard + "unicode-match-property-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-ecmascript@npm:2.0.0" @@ -11750,24 +11327,9 @@ __metadata: languageName: node linkType: hard -"unified@npm:^10.0.0, unified@npm:^10.1.2": - version: 10.1.2 - resolution: "unified@npm:10.1.2" - dependencies: - "@types/unist": ^2.0.0 - bail: ^2.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^4.0.0 - trough: ^2.0.0 - vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 - languageName: node - linkType: hard - -"unified@npm:^11.0.0": - version: 11.0.3 - resolution: "unified@npm:11.0.3" +"unified@npm:^11.0.0, unified@npm:^11.0.3, unified@npm:^11.0.4": + version: 11.0.4 + resolution: "unified@npm:11.0.4" dependencies: "@types/unist": ^3.0.0 bail: ^2.0.0 @@ -11776,7 +11338,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^6.0.0 - checksum: 402d6b397b98f8966993faca0e1480f5f1825cc44df6a5236b75ab099f14b10ed808e578155c3f535e60676c12ee3f52346ca08d64343a72181d7a6b4d32011d + checksum: cfb023913480ac2bd5e787ffb8c27782c43e6be4a55f8f1c288233fce46a7ebe7718ccc5adb80bf8d56b7ef85f5fc32239c7bfccda006f9f2382e0cc2e2a77e4 languageName: node linkType: hard @@ -11807,29 +11369,6 @@ __metadata: languageName: node linkType: hard -"unist-util-generated@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-generated@npm:2.0.1" - checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 - languageName: node - linkType: hard - -"unist-util-is@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-is@npm:4.1.0" - checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea - languageName: node - linkType: hard - -"unist-util-is@npm:^5.0.0": - version: 5.2.1 - resolution: "unist-util-is@npm:5.2.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 - languageName: node - linkType: hard - "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -11839,40 +11378,31 @@ __metadata: languageName: node linkType: hard -"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": - version: 1.1.2 - resolution: "unist-util-position-from-estree@npm:1.1.2" +"unist-util-position-from-estree@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-position-from-estree@npm:2.0.0" dependencies: - "@types/unist": ^2.0.0 - checksum: e3f4060e2a9e894c6ed63489c5a7cb58ff282e5dae9497cbc2073033ca74d6e412af4d4d342c97aea08d997c908b8bce2fe43a2062aafc2bb3f266533016588b + "@types/unist": ^3.0.0 + checksum: d3b3048a5727c2367f64ef6dcc5b20c4717215ef8b1372ff9a7c426297c5d1e5776409938acd01531213e2cd2543218d16e73f9f862f318e9496e2c73bb18354 languageName: node linkType: hard -"unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" +"unist-util-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-position@npm:5.0.0" dependencies: - "@types/unist": ^2.0.0 - checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 + "@types/unist": ^3.0.0 + checksum: f89b27989b19f07878de9579cd8db2aa0194c8360db69e2c99bd2124a480d79c08f04b73a64daf01a8fb3af7cba65ff4b45a0b978ca243226084ad5f5d441dde languageName: node linkType: hard -"unist-util-remove-position@npm:^4.0.0": - version: 4.0.2 - resolution: "unist-util-remove-position@npm:4.0.2" +"unist-util-remove-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-remove-position@npm:5.0.0" dependencies: - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 989831da913d09a82a99ed9b47b78471b6409bde95942cde47e09da54b7736516f17e3c7e026af468684c1efcec5fb52df363381b2f9dc7fd96ce791c5a2fa4a - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 + "@types/unist": ^3.0.0 + unist-util-visit: ^5.0.0 + checksum: 8aabdb9d0e3e744141bc123d8f87b90835d521209ad3c6c4619d403b324537152f0b8f20dda839b40c3aa0abfbf1828b3635a7a8bb159c3ed469e743023510ee languageName: node linkType: hard @@ -11885,26 +11415,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit-parents@npm:^3.0.0": - version: 3.1.1 - resolution: "unist-util-visit-parents@npm:3.1.1" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1, unist-util-visit-parents@npm:^5.1.3": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa - languageName: node - linkType: hard - "unist-util-visit-parents@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-visit-parents@npm:6.0.1" @@ -11915,28 +11425,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit@npm:^2.0.3": - version: 2.0.3 - resolution: "unist-util-visit@npm:2.0.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - unist-util-visit-parents: ^3.0.0 - checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f - languageName: node - linkType: hard - -"unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee - languageName: node - linkType: hard - "unist-util-visit@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-visit@npm:5.0.0" @@ -12024,41 +11512,6 @@ __metadata: languageName: node linkType: hard -"use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf - languageName: node - linkType: hard - -"use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb - languageName: node - linkType: hard - -"use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" - dependencies: - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -12096,20 +11549,6 @@ __metadata: languageName: node linkType: hard -"uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" - dependencies: - dequal: ^2.0.0 - diff: ^5.0.0 - kleur: ^4.0.3 - sade: ^1.7.3 - bin: - uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 - languageName: node - linkType: hard - "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -12124,23 +11563,13 @@ __metadata: languageName: node linkType: hard -"vfile-location@npm:^4.0.0": - version: 4.1.0 - resolution: "vfile-location@npm:4.1.0" +"vfile-location@npm:^5.0.0": + version: 5.0.2 + resolution: "vfile-location@npm:5.0.2" dependencies: - "@types/unist": ^2.0.0 - vfile: ^5.0.0 - checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 - languageName: node - linkType: hard - -"vfile-message@npm:^3.0.0": - version: 3.1.4 - resolution: "vfile-message@npm:3.1.4" - dependencies: - "@types/unist": ^2.0.0 - unist-util-stringify-position: ^3.0.0 - checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 + "@types/unist": ^3.0.0 + vfile: ^6.0.0 + checksum: b61c048cedad3555b4f007f390412c6503f58a6a130b58badf4ee340c87e0d7421e9c86bbc1494c57dedfccadb60f5176cc60ba3098209d99fb3a3d8804e4c38 languageName: node linkType: hard @@ -12154,19 +11583,7 @@ __metadata: languageName: node linkType: hard -"vfile@npm:^5.0.0, vfile@npm:^5.3.7": - version: 5.3.7 - resolution: "vfile@npm:5.3.7" - dependencies: - "@types/unist": ^2.0.0 - is-buffer: ^2.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 - languageName: node - linkType: hard - -"vfile@npm:^6.0.0": +"vfile@npm:^6.0.0, vfile@npm:^6.0.1": version: 6.0.1 resolution: "vfile@npm:6.0.1" dependencies: @@ -12177,21 +11594,6 @@ __metadata: languageName: node linkType: hard -"wait-on@npm:^7.0.1": - version: 7.0.1 - resolution: "wait-on@npm:7.0.1" - dependencies: - axios: ^0.27.2 - joi: ^17.7.0 - lodash: ^4.17.21 - minimist: ^1.2.7 - rxjs: ^7.8.0 - bin: - wait-on: bin/wait-on - checksum: 1e8a17d8ee6436f71d3ab82781ce31267481fcd7bbccde49b0f8124871e6e40a1acac3401f04f775ba6203853a5813352fa131620fc139914351f3b2894d573f - languageName: node - linkType: hard - "watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -12218,13 +11620,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c - languageName: node - linkType: hard - "webpack-bundle-analyzer@npm:^4.9.0": version: 4.9.1 resolution: "webpack-bundle-analyzer@npm:4.9.1" @@ -12400,16 +11795,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: ~0.0.3 - webidl-conversions: ^3.0.0 - checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c - languageName: node - linkType: hard - "which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" From c2616434fc941ab27b5856e683aa6864f29c1219 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:19:40 +0000 Subject: [PATCH 060/129] chore(deps): update actions/setup-python action to v5 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/verify_e2e-techdocs.yml | 2 +- .github/workflows/verify_e2e-windows.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index e2ca1db16e..6fd912d67d 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -35,7 +35,7 @@ jobs: egress-policy: audit - uses: actions/checkout@v4.1.1 - - uses: actions/setup-python@v4.8.0 + - uses: actions/setup-python@v5.0.0 with: python-version: '3.9' diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index d3c9d58ba6..d549ac2a40 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -56,7 +56,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: setup python - uses: actions/setup-python@v4.8.0 + uses: actions/setup-python@v5.0.0 with: python-version: '3.10' From a16bb9d455379dcdb4a96974e224827d52625b88 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 14:46:23 -0500 Subject: [PATCH 061/129] clean up AwsIamStrategy tests Make it easier to stub and check the presign mock. Signed-off-by: Jamie Klassen --- .../src/auth/AwsIamStrategy.test.ts | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts index 873c78e177..9959e1960f 100644 --- a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts +++ b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts @@ -20,12 +20,6 @@ import { } from '@backstage/plugin-kubernetes-common'; import { AwsIamStrategy } from './AwsIamStrategy'; -let presign = jest.fn(async () => ({ - hostname: 'https://example.com', - query: {}, - path: '/asdf', -})); - const credsManager = { getCredentialProvider: async () => ({ sdkCredentialProvider: { @@ -40,12 +34,16 @@ jest.mock('@backstage/integration-aws-node', () => ({ }, })); -const config = new ConfigReader({}); +const signer = { + presign: jest.fn().mockResolvedValue({ + hostname: 'https://example.com', + query: {}, + path: '/asdf', + }), +}; jest.mock('@aws-sdk/signature-v4', () => ({ - SignatureV4: jest.fn().mockImplementation(() => ({ - presign, - })), + SignatureV4: jest.fn().mockImplementation(() => signer), })); const fromTemporaryCredentials = jest.fn(); @@ -55,9 +53,10 @@ jest.mock('@aws-sdk/credential-providers', () => ({ }, })); -describe('AwsIamStrategy tests', () => { - beforeEach(() => {}); - it('returns a signed url for AWS credentials without assume role', async () => { +describe('AwsIamStrategy#getCredential', () => { + const config = new ConfigReader({}); + + it('returns a presigned url for cluster name', async () => { const strategy = new AwsIamStrategy({ config }); const credential = await strategy.getCredential({ @@ -65,10 +64,17 @@ describe('AwsIamStrategy tests', () => { url: '', authMetadata: {}, }); + expect(credential).toEqual({ type: 'bearer token', token: 'k8s-aws-v1.aHR0cHM6Ly9odHRwczovL2V4YW1wbGUuY29tL2FzZGY_', }); + expect(signer.presign).toHaveBeenCalledWith( + expect.objectContaining({ + headers: expect.objectContaining({ 'x-k8s-aws-id': 'test-cluster' }), + }), + expect.anything(), + ); }); it('returns a signed url for AWS credentials with assume role', async () => { @@ -129,21 +135,17 @@ describe('AwsIamStrategy tests', () => { }); }); - describe('When the credentials is failing', () => { - beforeEach(() => { - presign = jest.fn(async () => { - throw new Error('no way'); - }); - }); - it('throws the right error', async () => { - const strategy = new AwsIamStrategy({ config }); - await expect( - strategy.getCredential({ - name: 'test-cluster', - url: '', - authMetadata: {}, - }), - ).rejects.toThrow('no way'); - }); + it('fails on signer error', () => { + signer.presign.mockRejectedValue(new Error('no way')); + + const strategy = new AwsIamStrategy({ config }); + + return expect( + strategy.getCredential({ + name: 'test-cluster', + url: '', + authMetadata: {}, + }), + ).rejects.toThrow('no way'); }); }); From daad57618e02750cec81a6b2681d04a1997d07fe Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 15:10:31 -0500 Subject: [PATCH 062/129] separate authMetadata parameter for x-k8s-aws-id Signed-off-by: Jamie Klassen --- .changeset/seven-plums-return.md | 14 +++++++++ .../src/auth/AwsIamStrategy.test.ts | 30 +++++++++++++++++-- .../src/auth/AwsIamStrategy.ts | 8 +++-- plugins/kubernetes-common/api-report.md | 4 +++ .../src/catalog-entity-constants.ts | 9 ++++++ 5 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 .changeset/seven-plums-return.md diff --git a/.changeset/seven-plums-return.md b/.changeset/seven-plums-return.md new file mode 100644 index 0000000000..71016577b1 --- /dev/null +++ b/.changeset/seven-plums-return.md @@ -0,0 +1,14 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-kubernetes-common': patch +--- + +Clusters configured with the `aws` authentication strategy can now customize the +`x-k8s-aws-id` header value used to generate tokens. This value can be specified +specified via the `kubernetes.io/x-k8s-aws-id` parameter (in +`metadata.annotations` for clusters in the catalog, or the `authMetadata` block +on clusters in the app-config). This is particularly helpful when a Backstage +instance contains multiple AWS clusters with the same name in different regions +-- using this new parameter, the clusters can be given different logical names +to distinguish them but still use the same ID for the purposes of generating +tokens. diff --git a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts index 9959e1960f..e6e69cc05d 100644 --- a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts +++ b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.test.ts @@ -16,6 +16,7 @@ import { ConfigReader } from '@backstage/config'; import { ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE, + ANNOTATION_KUBERNETES_AWS_CLUSTER_ID, ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID, } from '@backstage/plugin-kubernetes-common'; import { AwsIamStrategy } from './AwsIamStrategy'; @@ -56,7 +57,7 @@ jest.mock('@aws-sdk/credential-providers', () => ({ describe('AwsIamStrategy#getCredential', () => { const config = new ConfigReader({}); - it('returns a presigned url for cluster name', async () => { + it('returns a presigned url', async () => { const strategy = new AwsIamStrategy({ config }); const credential = await strategy.getCredential({ @@ -77,7 +78,30 @@ describe('AwsIamStrategy#getCredential', () => { ); }); - it('returns a signed url for AWS credentials with assume role', async () => { + it('returns a presigned url for specified cluster ID', async () => { + const strategy = new AwsIamStrategy({ config }); + + const credential = await strategy.getCredential({ + name: 'cluster-name', + url: '', + authMetadata: { + [ANNOTATION_KUBERNETES_AWS_CLUSTER_ID]: 'other-name', + }, + }); + + expect(credential).toEqual({ + type: 'bearer token', + token: 'k8s-aws-v1.aHR0cHM6Ly9odHRwczovL2V4YW1wbGUuY29tL2FzZGY_', + }); + expect(signer.presign).toHaveBeenCalledWith( + expect.objectContaining({ + headers: expect.objectContaining({ 'x-k8s-aws-id': 'other-name' }), + }), + expect.anything(), + ); + }); + + it('returns a presigned url for AWS credentials with assumed role', async () => { const strategy = new AwsIamStrategy({ config }); const credential = await strategy.getCredential({ @@ -106,7 +130,7 @@ describe('AwsIamStrategy#getCredential', () => { }); }); - it('returns a signed url for AWS credentials and passes the external id', async () => { + it('returns a presigned url for AWS credentials and passes the external id', async () => { const strategy = new AwsIamStrategy({ config }); const credential = await strategy.getCredential({ diff --git a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts index 942b93615f..4c56f86a30 100644 --- a/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts +++ b/plugins/kubernetes-backend/src/auth/AwsIamStrategy.ts @@ -23,6 +23,7 @@ import { import { Config } from '@backstage/config'; import { ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE, + ANNOTATION_KUBERNETES_AWS_CLUSTER_ID, ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID, } from '@backstage/plugin-kubernetes-common'; import { @@ -61,7 +62,8 @@ export class AwsIamStrategy implements AuthenticationStrategy { return { type: 'bearer token', token: await this.getBearerToken( - clusterDetails.name, + clusterDetails.authMetadata[ANNOTATION_KUBERNETES_AWS_CLUSTER_ID] ?? + clusterDetails.name, clusterDetails.authMetadata[ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE], clusterDetails.authMetadata[ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID], ), @@ -73,7 +75,7 @@ export class AwsIamStrategy implements AuthenticationStrategy { } private async getBearerToken( - clusterName: string, + clusterId: string, assumeRole?: string, externalId?: string, ): Promise { @@ -105,7 +107,7 @@ export class AwsIamStrategy implements AuthenticationStrategy { { headers: { host: `sts.${region}.amazonaws.com`, - 'x-k8s-aws-id': clusterName, + 'x-k8s-aws-id': clusterId, }, hostname: `sts.${region}.amazonaws.com`, method: 'GET', diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index abd340f368..e4dbf79f4a 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -39,6 +39,10 @@ export const ANNOTATION_KUBERNETES_AUTH_PROVIDER = export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = 'kubernetes.io/aws-assume-role'; +// @public +export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = + 'kubernetes.io/x-k8s-aws-id'; + // @public export const ANNOTATION_KUBERNETES_AWS_EXTERNAL_ID = 'kubernetes.io/aws-external-id'; diff --git a/plugins/kubernetes-common/src/catalog-entity-constants.ts b/plugins/kubernetes-common/src/catalog-entity-constants.ts index e7e5cddc25..996faf670d 100644 --- a/plugins/kubernetes-common/src/catalog-entity-constants.ts +++ b/plugins/kubernetes-common/src/catalog-entity-constants.ts @@ -84,6 +84,7 @@ export const ANNOTATION_KUBERNETES_DASHBOARD_APP = */ export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = 'kubernetes.io/dashboard-parameters'; + /** * Annotation for specifying the assume role use to authenticate with AWS. * @@ -92,6 +93,14 @@ export const ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS = export const ANNOTATION_KUBERNETES_AWS_ASSUME_ROLE = 'kubernetes.io/aws-assume-role'; +/** + * Annotation for specifying the AWS ID of a cluster when signing STS tokens + * + * @public + */ +export const ANNOTATION_KUBERNETES_AWS_CLUSTER_ID = + 'kubernetes.io/x-k8s-aws-id'; + /** * Annotation for specifying an external id when communicating with AWS * From a81b1ba7dda2871a07d8ea3ca296c533107f4edc Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 15:25:20 -0500 Subject: [PATCH 063/129] update default EKS cluster entity transformer This change has no functional effect, but it seems like a helpful illustration for adopters embarking on writing the first EKS cluster entity transformer of their own. Signed-off-by: Jamie Klassen --- .changeset/dull-dolphins-explain.md | 6 ++++++ .../src/lib/defaultTransformers.ts | 5 ++++- .../src/processors/AwsEKSClusterProcessor.test.ts | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/dull-dolphins-explain.md diff --git a/.changeset/dull-dolphins-explain.md b/.changeset/dull-dolphins-explain.md new file mode 100644 index 0000000000..d8864e72e8 --- /dev/null +++ b/.changeset/dull-dolphins-explain.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +The default EKS cluster entity transformer now sets the new +`kubernetes.io/x-k8s-aws-id` annotation. diff --git a/plugins/catalog-backend-module-aws/src/lib/defaultTransformers.ts b/plugins/catalog-backend-module-aws/src/lib/defaultTransformers.ts index 9de79e9811..07862bb298 100644 --- a/plugins/catalog-backend-module-aws/src/lib/defaultTransformers.ts +++ b/plugins/catalog-backend-module-aws/src/lib/defaultTransformers.ts @@ -18,6 +18,7 @@ import { ANNOTATION_KUBERNETES_API_SERVER, ANNOTATION_KUBERNETES_API_SERVER_CA, ANNOTATION_KUBERNETES_AUTH_PROVIDER, + ANNOTATION_KUBERNETES_AWS_CLUSTER_ID, } from '@backstage/plugin-kubernetes-common'; import type { EksClusterEntityTransformer } from '../processors/types'; import { ANNOTATION_AWS_ACCOUNT_ID, ANNOTATION_AWS_ARN } from '../constants'; @@ -29,6 +30,7 @@ import { ANNOTATION_AWS_ACCOUNT_ID, ANNOTATION_AWS_ARN } from '../constants'; export const defaultEksClusterEntityTransformer: EksClusterEntityTransformer = async (cluster: Cluster, accountId: string) => { const { arn, endpoint, certificateAuthority, name } = cluster; + const normalizedName = normalizeName(name as string); return { apiVersion: 'backstage.io/v1alpha1', kind: 'Resource', @@ -40,8 +42,9 @@ export const defaultEksClusterEntityTransformer: EksClusterEntityTransformer = [ANNOTATION_KUBERNETES_API_SERVER_CA]: certificateAuthority?.data || '', [ANNOTATION_KUBERNETES_AUTH_PROVIDER]: 'aws', + [ANNOTATION_KUBERNETES_AWS_CLUSTER_ID]: normalizedName, }, - name: normalizeName(name as string), + name: normalizedName, namespace: 'default', }, spec: { diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.test.ts b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.test.ts index 6cec6ed66d..a07f775fb9 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.test.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.test.ts @@ -67,6 +67,7 @@ describe('AwsEKSClusterProcessor', () => { 'kubernetes.io/api-server-certificate-authority': cluster.cluster?.certificateAuthority?.data, 'kubernetes.io/auth-provider': 'aws', + 'kubernetes.io/x-k8s-aws-id': 'backstage-test', }, name: 'backstage-test', namespace: 'default', From 7ab6713ce12906ba6da64e7875b8ef83ba3299ba Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 17:54:13 -0500 Subject: [PATCH 064/129] refactor kubernetes auth docs some grammar/wordsmithing and formatting Signed-off-by: Jamie Klassen --- docs/features/kubernetes/authentication.md | 79 +++++++++++++--------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/docs/features/kubernetes/authentication.md b/docs/features/kubernetes/authentication.md index e0cddefbcf..beec5d2950 100644 --- a/docs/features/kubernetes/authentication.md +++ b/docs/features/kubernetes/authentication.md @@ -4,23 +4,26 @@ title: Kubernetes Authentication description: Authentication in Kubernetes plugin --- -The authentication process in Kubernetes relies on `KubernetesAuthProviders`, which are -not the same as the application's auth providers, the default providers are defined in -`plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts`, you can -add custom providers there if needed. +The authentication process in Kubernetes relies on `KubernetesAuthProviders` -- +which are not the same as the application's auth providers. the default +providers are defined in +`plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.ts`; +you can add custom providers there if needed. -These providers are configured so your Kubernetes plugin can locate and access the -clusters you have access to, some of them have special requirements in the third party in -question, like Microsoft Entra ID (formerly Azure Active Directory) subscription or Azure RBAC support active on the cluster. +These providers are configured so your Kubernetes plugin can locate and access +the clusters you have access to, some of them have special requirements in the +third party in question, like Microsoft Entra ID (formerly Azure Active +Directory) subscription or Azure RBAC support active on the cluster. -The providers currently available are divided into server side and client side. +The providers currently available are summarized below: ## Server Side Providers -These providers authenticate your _application_ with the cluster, meaning anyone that is -logged in into your backstage app will be granted the same access to Kubernetes objects, including guest users. +These providers authenticate your _application_ with the cluster, meaning anyone +that is logged in into your Backstage app will be granted the same access to +Kubernetes objects, including guest users. -The providers available as server side are: +The server side providers are: - `aws` - `azure` @@ -30,11 +33,19 @@ The providers available as server side are: ### AWS -For AWS, in addition to the "kubernetes" configuration, you will have to set up AWS authentication. The AWS server-side authentication provider uses [AWS Identity and Access Management (IAM)][3] to authenticate to the target Account(s), you can read more about it on the page for the [Integration AWS node][4]. +For AWS, in addition to Kubernetes configuration, you will have to set up +AWS authentication. The AWS server-side authentication provider uses [AWS +Identity and Access Management (IAM)][3] to authenticate to the target +Account(s); you can read more about it on the page for the [Integration AWS +node][4]. -Using the plugin, you can authenticate to several AWS accounts using either [static AWS Access keys][5] or short-lived Access keys generated by [assuming a role][6], for either case you will need to install the [AWS CLI utility][7] and set it up following the steps in the linked documentation. +Using the plugin, you can authenticate to several AWS accounts using either +[static AWS Access keys][5] or short-lived Access keys generated by [assuming a +role][6], for either case you will need to install the [AWS CLI utility][7] and +set it up following the steps in the linked documentation. -If you have generated static AWS security credentials, the configuration block for AWS will look like this: +If you have generated static AWS security credentials, the configuration block +for AWS will look like this: ```yaml aws: @@ -47,7 +58,8 @@ aws: accountDefaults: ``` -If your environment is set up to assume a role, the configuration would instead look like this: +If your environment is set up to assume a role, the configuration would instead +look like this: ```yaml aws: @@ -58,7 +70,8 @@ aws: accountDefaults: ``` -Either of these sections needs to be present for the Kubernetes configuration to use the `aws` `authProvider`. The Kubernetes configuration looks like this: +Either of these sections needs to be present for the Kubernetes configuration to +use the `aws` `authProvider`. The Kubernetes configuration looks like this: ```yaml kubernetes: @@ -77,14 +90,17 @@ You get both, the cluster `url` and `caData` directly from the AWS console by go ### Azure -The Azure server side authentication provider works by authenticating on the server with -the Azure CLI, please note that [Microsoft Entra authentication][1] is a requirement and has to +The Azure provider works by authenticating on the server with the Azure CLI, +please note that [Microsoft Entra authentication][1] is a requirement and has to be enabled in your AKS cluster, then follow these steps: -- [Install the Azure CLI][2] in the environment where the backstage application will run. -- Login with your Azure/Microsoft account with `az login` in the server's terminal. -- Go to your AKS cluster's resource page in Azure Console and follow the steps in the - `Connect` tab to set the subscription and get your credentials for `kubectl` integration. +- [Install the Azure CLI][2] in the environment where the backstage application + will run. +- Login with your Azure/Microsoft account with `az login` in the server's + terminal. +- Go to your AKS cluster's resource page in Azure Console and follow the steps + in the `Connect` tab to set the subscription and get your credentials for + `kubectl` integration. - Configure your cluster to use the `azure` auth provider like this: ```yaml @@ -98,18 +114,19 @@ kubernetes: skipTLSVerify: true ``` -To get the API server address for your Azure cluster, go to the Azure console page for the -cluster resource, go to `Overview` > `Properties` tab > `Networking` section and copy paste -the API server address directly in that `url` field. +To get the API server address for your Azure cluster, go to the Azure console +page for the cluster resource, go to `Overview` > `Properties` tab > +`Networking` section and copy paste the API server address directly in that +`url` field. ## Client Side Providers -These providers authenticate your _user_ with the cluster. Each Backstage user will be -prompted for credentials and will have access to the clusters as long as the user has been -authorized to access said cluster. If the cluster is listed in the `clusterLocatorMethods`, -but the user hasn't been authorized to access, the user will see the cluster listed but -will not see any resources in the plugin page for that cluster, and the error will show -as `401` or similar. +These providers authenticate a _user_ with the cluster. Each Backstage user will +be prompted for credentials and will have access to the clusters as long as the +user has been authorized to access said cluster. If Backstage is configured to +communicate with a cluster but the user isn't authorized to access it, they will +see the cluster listed but will not see any resources in the plugin page for +that cluster. The error will show as `401` or similar. The providers available as client side are: From 8754168225431b39db48a9805e447f31c7526221 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 17:55:51 -0500 Subject: [PATCH 065/129] document extra AWS auth parameters including the new x-k8s-aws-id one Signed-off-by: Jamie Klassen --- docs/features/kubernetes/authentication.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/features/kubernetes/authentication.md b/docs/features/kubernetes/authentication.md index beec5d2950..5057218f17 100644 --- a/docs/features/kubernetes/authentication.md +++ b/docs/features/kubernetes/authentication.md @@ -81,12 +81,23 @@ kubernetes: - type: 'config' clusters: - url: https://..eks.amazonaws.com - name: + name: ${CLUSTER_NAME_TO_DISPLAY} authProvider: 'aws' caData: ${EKS_CA_DATA} + authMetadata: + kubernetes.io/aws-assume-role: ${ROLE_ARN_TO_ASSUME} + kubernetes.io/aws-external-id: ${ID_FROM_AWS_ADMIN} + kubernetes.io/x-k8s-aws-id: ${CLUSTER_NAME_IN_AWS_CONSOLE} ``` -You get both, the cluster `url` and `caData` directly from the AWS console by going to `EKS` > `Your cluster` > `Overview` > `Details`. You will find them under 'API server endpoint' and 'Certificate authority' respectively. +You get both the cluster URL and CA directly from the AWS console by going to +`EKS` > `Your cluster` > `Overview` > `Details`. You will find them under 'API +server endpoint' and 'Certificate authority' respectively. + +If Backstage needs to assume a role when authenticating with EKS clusters, the +`kubernetes.io/aws-assume-role` parameter can be set to the ARN of the desired +role. the `kubernetes.io/aws-external-id` parameter in the config corresponds to +the `ExternalId` parameter of the [`AssumeRole` API in STS][8]. ### Azure @@ -141,3 +152,4 @@ The providers available as client side are: [5]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html [6]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html [7]: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html +[8]: https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#API_AssumeRole_RequestParameters From 6ce5e30a23e7f527768c89d9613656026d14edf8 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 18:08:39 -0500 Subject: [PATCH 066/129] sort labeler config hopefully alphabetical order makes future changes more straightforward Signed-off-by: Jamie Klassen --- .github/labeler.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index add66d7b28..7da0b72572 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -2,34 +2,34 @@ area:catalog: - plugins/catalog/**/* - plugins/catalog-*/**/* - packages/catalog-*/**/* -area:scaffolder: - - plugins/scaffolder/**/* - - plugins/scaffolder-*/**/* -search: - - plugins/search/**/* - - plugins/search-*/**/* - - packages/search-*/**/* -homepage: - - plugins/home/**/* area:discoverability: # search + home - plugins/search/**/* - plugins/search-*/**/* - packages/search-*/**/* - plugins/home/**/* +area:permission: + - plugins/permission-*/**/* +area:scaffolder: + - plugins/scaffolder/**/* + - plugins/scaffolder-*/**/* area:techdocs: - plugins/techdocs/**/* - plugins/techdocs-*/**/* - packages/techdocs-*/**/* -documentation: - - docs/**/* -microsite: - - microsite/**/* -storybook: - - storybook/**/* auth: - plugins/auth-backend/**/* - packages/core-app-api/src/apis/implementations/auth/**/* - packages/core-app-api/src/lib/Auth*/**/* - packages/core-plugin-api/src/apis/definitions/auth.ts -area:permission: - - plugins/permission-*/**/* +documentation: + - docs/**/* +homepage: + - plugins/home/**/* +microsite: + - microsite/**/* +search: + - plugins/search/**/* + - plugins/search-*/**/* + - packages/search-*/**/* +storybook: + - storybook/**/* From 1691d8d8f83bdb88369b6529addf9302b14061f6 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 18:10:53 -0500 Subject: [PATCH 067/129] label kubernetes-related PRs Signed-off-by: Jamie Klassen --- .github/labeler.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index 7da0b72572..3e0eac8ad7 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -7,6 +7,9 @@ area:discoverability: # search + home - plugins/search-*/**/* - packages/search-*/**/* - plugins/home/**/* +area:kubernetes: + - plugins/kubernetes/**/* + - plugins/kubernetes-*/**/* area:permission: - plugins/permission-*/**/* area:scaffolder: From 10e80ade7ca42b9dd9a05ae35ea8cfdc8f1cc7d1 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 19 Jan 2024 18:12:38 -0500 Subject: [PATCH 068/129] capture new auth packages with labeler This includes stuff like auth-node and the various auth provider modules. Signed-off-by: Jamie Klassen --- .github/labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 3e0eac8ad7..5066ebaf05 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -20,7 +20,7 @@ area:techdocs: - plugins/techdocs-*/**/* - packages/techdocs-*/**/* auth: - - plugins/auth-backend/**/* + - plugins/auth-*/**/* - packages/core-app-api/src/apis/implementations/auth/**/* - packages/core-app-api/src/lib/Auth*/**/* - packages/core-plugin-api/src/apis/definitions/auth.ts From 103143d3df95671f243231e50cd6492a8641cab5 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Sat, 20 Jan 2024 22:13:56 +0530 Subject: [PATCH 069/129] added suggested changes Signed-off-by: npiyush97 --- microsite/sidebars.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 81bd0daec0..68628f1490 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -473,13 +473,8 @@ "architecture-decisions/adrs-adr013" ], "FAQ": [ - "faq/FAQ", "faq/Product FAQs", - "faq/Technical FAQs", - "faq/Adoption FAQs", - "faq/DEPLOYMENT FAQs", - "faq/FRAMEWORK FAQs", - "faq/CORE FEATURES FAQs" + "faq/Technical FAQs" ], "Accessibility": ["accessibility/index"] } From d004e65f54dc6f9c08c361088f1994f070d9a844 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Sat, 20 Jan 2024 22:16:56 +0530 Subject: [PATCH 070/129] added suggested changes Signed-off-by: npiyush97 --- microsite/sidebars.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 68628f1490..8272f5edfb 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -472,10 +472,7 @@ "architecture-decisions/adrs-adr012", "architecture-decisions/adrs-adr013" ], - "FAQ": [ - "faq/Product FAQs", - "faq/Technical FAQs" - ], + "FAQ": ["faq/Product FAQs", "faq/Technical FAQs"], "Accessibility": ["accessibility/index"] } } From 5a8b6ccda3d14ed8a08e9ef3595fb4fcacd0a6e2 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Sat, 20 Jan 2024 22:24:29 +0530 Subject: [PATCH 071/129] removed files Signed-off-by: npiyush97 --- docs/faq/FAQ.md | 19 ------------------- docs/faq/adoption.md | 7 ------- docs/faq/corefeatures.md | 7 ------- docs/faq/framework.md | 7 ------- 4 files changed, 40 deletions(-) delete mode 100644 docs/faq/FAQ.md delete mode 100644 docs/faq/adoption.md delete mode 100644 docs/faq/corefeatures.md delete mode 100644 docs/faq/framework.md diff --git a/docs/faq/FAQ.md b/docs/faq/FAQ.md deleted file mode 100644 index 4b50a38818..0000000000 --- a/docs/faq/FAQ.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: FAQ -title: FAQ -description: All FAQ related to Questions ---- - -## FAQS - -[Product FAQS](../faq/product-faq.md) - -[Technical FAQS](../faq/technical.md) - -[Adoption FAQS](../faq/adoption.md) - -[Deployment FAQS](../faq/deployment.md) - -[Framework FAQS](../faq/framework.md) - -[Core features FAQS](../faq/corefeatures.md) diff --git a/docs/faq/adoption.md b/docs/faq/adoption.md deleted file mode 100644 index 0939fef069..0000000000 --- a/docs/faq/adoption.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: Adoption FAQs -title: Adoption FAQs -description: All FAQs related to Adoption ---- - -## ADOPTION FAQ diff --git a/docs/faq/corefeatures.md b/docs/faq/corefeatures.md deleted file mode 100644 index 8a46929797..0000000000 --- a/docs/faq/corefeatures.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: CORE FEATURES FAQs -title: Core Features FAQs -description: All FAQs related to Core Features ---- - -## Core Features FAQs diff --git a/docs/faq/framework.md b/docs/faq/framework.md deleted file mode 100644 index 409a273bfb..0000000000 --- a/docs/faq/framework.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: FRAMEWORK FAQs -title: Framework FAQs -description: All FAQ related to FRAMEWORK ---- - -## FRAMEWORK FAQs From 58a83daffcc07b4e6085dd2643f21e963354d570 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Sat, 20 Jan 2024 22:26:46 +0530 Subject: [PATCH 072/129] fix Signed-off-by: npiyush97 --- docs/faq/deployment.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 docs/faq/deployment.md diff --git a/docs/faq/deployment.md b/docs/faq/deployment.md deleted file mode 100644 index a67586bc2a..0000000000 --- a/docs/faq/deployment.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: DEPLOYMENT FAQs -title: Deployment FAQs -description: All FAQs related to DEPLOYMENT ---- - -## Deployment FAQs From 7ad5b8146e7d8b06ec4c3be1d383f2b425152c24 Mon Sep 17 00:00:00 2001 From: npiyush97 Date: Sat, 20 Jan 2024 22:35:50 +0530 Subject: [PATCH 073/129] added suggested fix Signed-off-by: npiyush97 --- docs/faq/product-faq.md | 2 -- docs/faq/technical.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/docs/faq/product-faq.md b/docs/faq/product-faq.md index 68d8918ad0..29cd22992b 100644 --- a/docs/faq/product-faq.md +++ b/docs/faq/product-faq.md @@ -4,8 +4,6 @@ title: Product FAQs description: All FAQs related to Product --- -## Product FAQs - ### Can we call Backstage something different? So that it fits our company better? Yes, Backstage is just a platform for building your own developer portal. We diff --git a/docs/faq/technical.md b/docs/faq/technical.md index a79c673799..1573c14c59 100644 --- a/docs/faq/technical.md +++ b/docs/faq/technical.md @@ -4,8 +4,6 @@ title: Technical FAQs description: All FAQs related to Technical --- -## Technical FAQs - ### What technology does Backstage use? Backstage is a large scale [TypeScript](https://www.typescriptlang.org/) From f8a20c560cb1acaa03c4d38f1d40b3c396d5ab0e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 13:53:52 +0100 Subject: [PATCH 074/129] Update package.json Signed-off-by: Patrik Oldsberg --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 4edc266ba1..483e02fdb5 100644 --- a/package.json +++ b/package.json @@ -60,8 +60,7 @@ "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", - "@useoptic/optic": "^0.50.10", - "lodash": "^4.17.21" + "@useoptic/optic": "^0.50.10" }, "devDependencies": { "@backstage/cli": "workspace:*", From 87773788c8b2c8408ff8d140d94811a1d5293fd0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:03:21 +0100 Subject: [PATCH 075/129] yarn.lock: update Signed-off-by: Patrik Oldsberg --- yarn.lock | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 3ba535682c..6182ed543f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39723,7 +39723,6 @@ __metadata: fs-extra: 10.1.0 husky: ^8.0.0 lint-staged: ^15.0.0 - lodash: ^4.17.21 minimist: ^1.2.5 node-gyp: ^10.0.0 prettier: ^2.2.1 From aede0b73b00696a88a7d726d54741b7c46cf24a1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:38:02 +0100 Subject: [PATCH 076/129] docs/faq: add back index + frontmatter tweaks Signed-off-by: Patrik Oldsberg --- docs/faq/index.md | 15 +++++++++++++++ docs/faq/{product-faq.md => product.md} | 6 +++--- docs/faq/technical.md | 6 +++--- microsite/sidebars.json | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 docs/faq/index.md rename docs/faq/{product-faq.md => product.md} (97%) diff --git a/docs/faq/index.md b/docs/faq/index.md new file mode 100644 index 0000000000..93e3e90fbe --- /dev/null +++ b/docs/faq/index.md @@ -0,0 +1,15 @@ +--- +id: index +title: Overview +description: FAQ Overview +--- + +This section contains answers to frequently asked questions about Backstage. + +### [Product FAQ](../faq/product.md) + +Questions related to product and design. + +### [Technical FAQ](../faq/technical.md) + +General technical questions about Backstage. diff --git a/docs/faq/product-faq.md b/docs/faq/product.md similarity index 97% rename from docs/faq/product-faq.md rename to docs/faq/product.md index 29cd22992b..6d97206907 100644 --- a/docs/faq/product-faq.md +++ b/docs/faq/product.md @@ -1,7 +1,7 @@ --- -id: Product FAQs -title: Product FAQs -description: All FAQs related to Product +id: product +title: Product FAQ +description: Product FAQ --- ### Can we call Backstage something different? So that it fits our company better? diff --git a/docs/faq/technical.md b/docs/faq/technical.md index 1573c14c59..140b4c0893 100644 --- a/docs/faq/technical.md +++ b/docs/faq/technical.md @@ -1,7 +1,7 @@ --- -id: Technical FAQs -title: Technical FAQs -description: All FAQs related to Technical +id: technical +title: Technical FAQ +description: Technical FAQ --- ### What technology does Backstage use? diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 8272f5edfb..f0f924411b 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -472,7 +472,7 @@ "architecture-decisions/adrs-adr012", "architecture-decisions/adrs-adr013" ], - "FAQ": ["faq/Product FAQs", "faq/Technical FAQs"], + "FAQ": ["faq/index", "faq/product", "faq/technical"], "Accessibility": ["accessibility/index"] } } From f2c5d430d4bc26bb087353931fb2c85e5e76efba Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:39:51 +0100 Subject: [PATCH 077/129] docs/faq: update descriptions Signed-off-by: Patrik Oldsberg --- docs/faq/product.md | 2 +- docs/faq/technical.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/faq/product.md b/docs/faq/product.md index 6d97206907..30793ba045 100644 --- a/docs/faq/product.md +++ b/docs/faq/product.md @@ -1,7 +1,7 @@ --- id: product title: Product FAQ -description: Product FAQ +description: Questions related to product and design. --- ### Can we call Backstage something different? So that it fits our company better? diff --git a/docs/faq/technical.md b/docs/faq/technical.md index 140b4c0893..040317b998 100644 --- a/docs/faq/technical.md +++ b/docs/faq/technical.md @@ -1,7 +1,7 @@ --- id: technical title: Technical FAQ -description: Technical FAQ +description: General technical questions about Backstage. --- ### What technology does Backstage use? From d84a93b4a34c9ebd42b6acee08d1522535e33d94 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:40:57 +0100 Subject: [PATCH 078/129] docs/overview: update link to FAQ Signed-off-by: Patrik Oldsberg --- docs/overview/support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/support.md b/docs/overview/support.md index c968405a99..38bb60784f 100644 --- a/docs/overview/support.md +++ b/docs/overview/support.md @@ -11,7 +11,7 @@ description: Support and Community Details and Links here if you want to contribute. - [RFCs](https://github.com/backstage/backstage/labels/rfc) - Help shape the technical direction by reviewing _Request for Comments_ issues. -- [FAQ](../FAQ.md) - Frequently Asked Questions. +- [FAQ](../faq/index.md) - Frequently Asked Questions. - [Code of Conduct](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md) - This is how we roll. - [Blog](https://backstage.io/blog/) - Announcements and updates. From 01515668d2d957d17f64c382460416d301df22a4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:50:35 +0100 Subject: [PATCH 079/129] yarn.lock: restore jose and openid-client versions Signed-off-by: Patrik Oldsberg --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index eb6ade926f..fcb1ece0b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31269,10 +31269,10 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.14.6, jose@npm:^4.15.1, jose@npm:^4.6.0": - version: 4.15.3 - resolution: "jose@npm:4.15.3" - checksum: b76eeccc1d40d0eaf26dfaadc0f88fc15802c9105ab66a24ee223bd84369f7cb217f4a2cb852f5080ff6996170b3a73db2b2d26878b8905d99c36ca432628134 +"jose@npm:^4.14.6, jose@npm:^4.15.4, jose@npm:^4.6.0": + version: 4.15.4 + resolution: "jose@npm:4.15.4" + checksum: dccad91cb3357f36423774a0b89ad830dd84b31090de65cd139b85488439f16a00f8c59c0773825e8a1adb0dd9d13ad725ad66e6ea33880ecb3959bb99e1ea5b languageName: node linkType: hard @@ -35649,14 +35649,14 @@ __metadata: linkType: hard "openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.4.3, openid-client@npm:^5.5.0": - version: 5.6.1 - resolution: "openid-client@npm:5.6.1" + version: 5.6.4 + resolution: "openid-client@npm:5.6.4" dependencies: - jose: ^4.15.1 + jose: ^4.15.4 lru-cache: ^6.0.0 object-hash: ^2.2.0 oidc-token-hash: ^5.0.3 - checksum: 9d939cec57540e6dd3f67e9a248ec5ecec3b439b7ab5bd2e9fb4481bd03e8d030deedd87a447348194be7f3e93e84085841b0414033caf86479870f526cdbc2f + checksum: 69843f078dacbbc6bad6d65ca6689414ac73f095dfe2f8e606822e6cfc9d9cd7d0dfaf2649352eda604653806f0ea65326ad2d6266da897e4740ec93d26d21f6 languageName: node linkType: hard From b5d4c7b882271abb905c6564e5b7baddeb9c2c86 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 14:57:40 +0100 Subject: [PATCH 080/129] auth-backend: add back deprecated `OidcAuthResult` Signed-off-by: Patrik Oldsberg --- plugins/auth-backend/api-report.md | 9 ++++++--- plugins/auth-backend/src/providers/index.ts | 1 + plugins/auth-backend/src/providers/oidc/index.ts | 8 ++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 16f257d17d..9f68d8085c 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -25,7 +25,7 @@ import { LoggerService } from '@backstage/backend-plugin-api'; import { OAuth2ProxyResult as OAuth2ProxyResult_2 } from '@backstage/plugin-auth-backend-module-oauth2-proxy-provider'; import { OAuthEnvironmentHandler as OAuthEnvironmentHandler_2 } from '@backstage/plugin-auth-node'; import { OAuthState as OAuthState_2 } from '@backstage/plugin-auth-node'; -import { OidcAuthResult } from '@backstage/plugin-auth-backend-module-oidc-provider'; +import { OidcAuthResult as OidcAuthResult_2 } from '@backstage/plugin-auth-backend-module-oidc-provider'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { prepareBackstageIdentityResponse as prepareBackstageIdentityResponse_2 } from '@backstage/plugin-auth-node'; @@ -339,6 +339,9 @@ export type OAuthStartResponse = { // @public @deprecated (undocumented) export type OAuthState = OAuthState_2; +// @public @deprecated (undocumented) +export type OidcAuthResult = OidcAuthResult_2; + // @public @deprecated (undocumented) export const postMessageResponse: ( res: express.Response, @@ -557,10 +560,10 @@ export const providers: Readonly<{ create: ( options?: | { - authHandler?: AuthHandler | undefined; + authHandler?: AuthHandler | undefined; signIn?: | { - resolver: SignInResolver; + resolver: SignInResolver; } | undefined; } diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index c8140f864e..8173a7fbc3 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -29,6 +29,7 @@ export type { } from './cloudflare-access'; export type { GithubOAuthResult } from './github'; export type { OAuth2ProxyResult } from './oauth2-proxy'; +export type { OidcAuthResult } from './oidc'; export type { SamlAuthResult } from './saml'; export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap'; diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts index c4343b1547..501f223fb3 100644 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ b/plugins/auth-backend/src/providers/oidc/index.ts @@ -15,3 +15,11 @@ */ export { oidc } from './provider'; + +import { OidcAuthResult as OidcAuthResult_ } from '@backstage/plugin-auth-backend-module-oidc-provider'; + +/** + * @public + * @deprecated Use OidcAuthResult from `@backstage/plugin-auth-backend-module-oidc-provider` instead + */ +export type OidcAuthResult = OidcAuthResult_; From 636f43b76e17c955aaf55a0be30d0e8e25919ef1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 15:01:35 +0100 Subject: [PATCH 081/129] docs/faq: update relative links Signed-off-by: Patrik Oldsberg --- docs/faq/product.md | 2 +- docs/faq/technical.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/faq/product.md b/docs/faq/product.md index 30793ba045..9d2a32f33e 100644 --- a/docs/faq/product.md +++ b/docs/faq/product.md @@ -46,7 +46,7 @@ source candidates. (And we'll probably end up writing some brand new ones, too.) ### What's the roadmap for Backstage? We envision three phases, which you can learn about in -[our project roadmap](overview/roadmap.md). Even though the open source version +[our project roadmap](../overview/roadmap.md). Even though the open source version of Backstage is relatively new compared to our internal version, we have already begun work on various aspects of all three phases. Looking at the [milestones for active issues](https://github.com/backstage/backstage/milestones) diff --git a/docs/faq/technical.md b/docs/faq/technical.md index 040317b998..55bb1af615 100644 --- a/docs/faq/technical.md +++ b/docs/faq/technical.md @@ -51,7 +51,7 @@ type of content. Plugins all use a common set of platform APIs and reusable UI components. Plugins can fetch data either from the backend or an API exposed through the proxy. -Learn more about [the different components](overview/what-is-backstage.md) that +Learn more about [the different components](../overview/what-is-backstage.md) that make up Backstage. ### Why can't I dynamically install plugins without modifications to the app? @@ -188,7 +188,7 @@ data is shared with. Yes. The core frontend framework could be used for building any large-scale web application where (1) multiple teams are building separate parts of the app, and (2) you want the overall experience to be consistent. That being said, in -[Phase 2](overview/roadmap.md) of the project we will add features that are +[Phase 2](../overview/roadmap.md) of the project we will add features that are needed for developer portals and systems for managing software ecosystems. Our ambition will be to keep Backstage modular. From 96a715636fea9a169d74e3ff73ab00813464625e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:22:19 +0000 Subject: [PATCH 082/129] Update dependency @playwright/test to v1.41.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index dc76ef0101..63e6903880 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14105,13 +14105,13 @@ __metadata: linkType: hard "@playwright/test@npm:^1.32.3": - version: 1.41.0 - resolution: "@playwright/test@npm:1.41.0" + version: 1.41.1 + resolution: "@playwright/test@npm:1.41.1" dependencies: - playwright: 1.41.0 + playwright: 1.41.1 bin: playwright: cli.js - checksum: 3a7039f8cd14dd242154255417c100a99c3254a3c1fd26df2a11be24c10b06ef77d2736336d7743dedc5e1a6a52748e58ced730b6048f8bd75d8867ce81661e0 + checksum: d9877e777a1a7f60f097df57b6abc2478e2ae342930a409c8546c8aa40d6e206cbc16bf1c71b23414ac3fbad36dcae1ad79635d7f4eb705ab54d3c705e82ea04 languageName: node linkType: hard @@ -36854,27 +36854,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.41.0": - version: 1.41.0 - resolution: "playwright-core@npm:1.41.0" +"playwright-core@npm:1.41.1": + version: 1.41.1 + resolution: "playwright-core@npm:1.41.1" bin: playwright-core: cli.js - checksum: 14671265916a1fd0c71d94640de19c48bcce3f7dec35530f10e349e97030ea44ffa8ee518cbf811501e3ab2b74874aecf917e46bf40fea0570db1d4bea1fe7ac + checksum: c83446a560c6bd85f6f0cd586ff8c643b77e2005567386e12f85890936cc370673114b94cd883246018797cc1580e93b0296ade7d07275bb611b8962f5bb9693 languageName: node linkType: hard -"playwright@npm:1.41.0": - version: 1.41.0 - resolution: "playwright@npm:1.41.0" +"playwright@npm:1.41.1": + version: 1.41.1 + resolution: "playwright@npm:1.41.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.41.0 + playwright-core: 1.41.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: e7c32136911c58e06b964fe7d33f8b3d8f6a067ae5218662a0811dd6c90e007db1774eb7e161f4aa748d760f404f4c066b7b7303c2b617f7448b6ee4b86c9999 + checksum: 3da7fb929abdec6adbdd8829f840580f5f210713214a8d230b130127f2270403eb2113c6c1418012221149707250fff896794c7c22c260dd09a92bf800227f31 languageName: node linkType: hard From a1a2ca5b52707ff418993fcd1d5fcd9938525a01 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 15:56:35 +0100 Subject: [PATCH 083/129] Apply suggestions from code review Signed-off-by: Patrik Oldsberg --- .changeset/long-suns-bow.md | 2 +- .changeset/nine-bulldogs-camp.md | 2 +- plugins/catalog-backend/src/schema/openapi.generated.ts | 2 +- plugins/search-backend/src/schema/openapi.generated.ts | 2 +- plugins/todo-backend/src/schema/openapi.generated.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.changeset/long-suns-bow.md b/.changeset/long-suns-bow.md index 837482500f..81fafa8dae 100644 --- a/.changeset/long-suns-bow.md +++ b/.changeset/long-suns-bow.md @@ -1,7 +1,7 @@ --- '@backstage/plugin-catalog-backend': minor '@backstage/plugin-search-backend': minor -'@backstage/plugin-todo-backend': minor +'@backstage/plugin-todo-backend': patch --- Updates the OpenAPI spec to use plugin as `info.title` instead of package name. diff --git a/.changeset/nine-bulldogs-camp.md b/.changeset/nine-bulldogs-camp.md index f397bb9ab7..b6612b9948 100644 --- a/.changeset/nine-bulldogs-camp.md +++ b/.changeset/nine-bulldogs-camp.md @@ -2,7 +2,7 @@ '@backstage/catalog-client': minor '@backstage/plugin-catalog-backend': minor '@backstage/plugin-search-backend': minor -'@backstage/plugin-todo-backend': minor +'@backstage/plugin-todo-backend': patch --- Updates the OpenAPI specification title to plugin ID instead of package name. diff --git a/plugins/catalog-backend/src/schema/openapi.generated.ts b/plugins/catalog-backend/src/schema/openapi.generated.ts index 20dfa2c978..c29dd78ec6 100644 --- a/plugins/catalog-backend/src/schema/openapi.generated.ts +++ b/plugins/catalog-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/plugins/search-backend/src/schema/openapi.generated.ts b/plugins/search-backend/src/schema/openapi.generated.ts index cc38a6b293..06b576ba70 100644 --- a/plugins/search-backend/src/schema/openapi.generated.ts +++ b/plugins/search-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. diff --git a/plugins/todo-backend/src/schema/openapi.generated.ts b/plugins/todo-backend/src/schema/openapi.generated.ts index 2308ec0ab5..238be2fe5b 100644 --- a/plugins/todo-backend/src/schema/openapi.generated.ts +++ b/plugins/todo-backend/src/schema/openapi.generated.ts @@ -1,5 +1,5 @@ /* - * Copyright 2024 The Backstage Authors + * Copyright 2023 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. From 32f74203d0d5d38112624866b32f0cdaf29a297d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:06:24 +0000 Subject: [PATCH 084/129] Update dependency @testing-library/dom to v9.3.4 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6f5a1449ac..90c97f09cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17177,8 +17177,8 @@ __metadata: linkType: soft "@testing-library/dom@npm:^9.0.0": - version: 9.3.3 - resolution: "@testing-library/dom@npm:9.3.3" + version: 9.3.4 + resolution: "@testing-library/dom@npm:9.3.4" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -17188,7 +17188,7 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 34e0a564da7beb92aa9cc44a9080221e2412b1a132eb37be3d513fe6c58027674868deb9f86195756d98d15ba969a30fe00632a4e26e25df2a5a4f6ac0686e37 + checksum: dfd6fb0d6c7b4dd716ba3c47309bc9541b4a55772cb61758b4f396b3785efe2dbc75dc63423545c039078c7ffcc5e4b8c67c2db1b6af4799580466036f70026f languageName: node linkType: hard From 823d0a31c1f39bcb68f31754eeb2a826e176778a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:40:09 +0000 Subject: [PATCH 085/129] Update dependency @tsconfig/docusaurus to v2.0.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- microsite/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 1841fcb678..0baaa44af0 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2849,9 +2849,9 @@ __metadata: linkType: hard "@tsconfig/docusaurus@npm:^2.0.0": - version: 2.0.1 - resolution: "@tsconfig/docusaurus@npm:2.0.1" - checksum: 63bebda70d83c56f95a90176d2e188e1ea9c08c23b499e5e7b292ebfae0ce7117f712809828ed21ae3b8440daf22191d6bf71bf2575f9bd474a51b1770ca30cc + version: 2.0.2 + resolution: "@tsconfig/docusaurus@npm:2.0.2" + checksum: 129f2532172496c108f53a15082e410b418e664c1761902664558059541a6cf7faff2b3d2953e2d507a7e3688afacf2479e17adcb35b89cae04ddb0415d0397a languageName: node linkType: hard From 69d52450b8c7d9115ac6a3e92408ee372502e84a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 16:45:00 +0100 Subject: [PATCH 086/129] mkdocs.yml: update FAQ Signed-off-by: Patrik Oldsberg --- mkdocs.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index bf4024759b..8c9f84ba81 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -214,4 +214,7 @@ nav: - ADR011 - Plugin Package Structure: 'architecture-decisions/adr011-plugin-package-structure.md' - ADR012 - Plugin Package Structure: 'architecture-decisions/adr012-use-luxon-locale-and-date-presets.md' - ADR013 - Plugin Package Structure: 'architecture-decisions/adr013-use-node-fetch.md' - - FAQ: FAQ.md + - FAQ: + - Overview: 'faq/index.md' + - Product FAQ: 'faq/product.md' + - Technical FAQ: 'faq/technical.md' From cb60e97bd8c4890ab125fe6967c3ff6b7566ba7c Mon Sep 17 00:00:00 2001 From: Aramis Date: Wed, 17 Jan 2024 14:28:45 -0500 Subject: [PATCH 087/129] feat(openapi-tooling): Add support for oneOf. Signed-off-by: Aramis --- .../src/commands/openapi/constants.ts | 1 + .../templates/typescript-backstage.yaml | 14 +++++++ .../typescript-backstage/licenseInfo.mustache | 12 ++++++ .../typescript-backstage/model.mustache | 41 ++++--------------- .../typescript-backstage/modelAlias.mustache | 1 + .../typescript-backstage/modelEnum.mustache | 20 +++++++++ .../modelGeneric.mustache | 38 +++++++++++++++++ .../modelGenericAdditionalProperties.mustache | 5 +++ .../modelGenericEnums.mustache | 30 ++++++++++++++ .../typescript-backstage/modelOneOf.mustache | 14 +++++++ .../modelTaggedUnion.mustache | 21 ++++++++++ 11 files changed, 163 insertions(+), 34 deletions(-) create mode 100644 packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelAlias.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelEnum.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache create mode 100644 packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache diff --git a/packages/repo-tools/src/commands/openapi/constants.ts b/packages/repo-tools/src/commands/openapi/constants.ts index 2e7a57522a..4936a5aee7 100644 --- a/packages/repo-tools/src/commands/openapi/constants.ts +++ b/packages/repo-tools/src/commands/openapi/constants.ts @@ -29,6 +29,7 @@ export const OUTPUT_PATH = 'src/generated'; export const OPENAPI_IGNORE_FILES = [ // Get rid of the default files. '*.md', + '*.mustache', // The rest of these have to be explicit, otherwise they get added if this was a *.* 'apis/baseapi.ts', 'apis/exception.ts', diff --git a/packages/repo-tools/templates/typescript-backstage.yaml b/packages/repo-tools/templates/typescript-backstage.yaml index b2b068856d..a2cb61c121 100644 --- a/packages/repo-tools/templates/typescript-backstage.yaml +++ b/packages/repo-tools/templates/typescript-backstage.yaml @@ -8,6 +8,20 @@ files: model.mustache: templateType: Model destinationFilename: .model.ts + modelGeneric.mustache: + templateType: SupportingFiles + modelOneOf.mustache: + templateType: SupportingFiles + modelGenericAdditionalProperties.mustache: + templateType: SupportingFiles + modelGenericEnums.mustache: + templateType: SupportingFiles + modelAlias.mustache: + templateType: SupportingFiles + modelEnum.mustache: + templateType: SupportingFiles + modelTaggedUnion.mustache: + templateType: SupportingFiles models/models_all.mustache: templateType: SupportingFiles destinationFilename: models/index.ts diff --git a/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache b/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache new file mode 100644 index 0000000000..db559aacf9 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache @@ -0,0 +1,12 @@ + +/** + * {{{appName}}} + * {{{appDescription}}} + * + * {{#version}}The version of the OpenAPI document: {{{.}}}{{/version}} + * {{#infoEmail}}Contact: {{{.}}}{{/infoEmail}} + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/model.mustache b/packages/repo-tools/templates/typescript-backstage/model.mustache index 1f288380e0..77f186dd5f 100644 --- a/packages/repo-tools/templates/typescript-backstage/model.mustache +++ b/packages/repo-tools/templates/typescript-backstage/model.mustache @@ -1,43 +1,16 @@ -// - +{{>licenseInfo}} {{#models}} {{#model}} {{#tsImports}} -import { {{classname}} } from '{{filename}}.model{{importFileExtension}}'; +import { {{classname}} } from '{{filename}}.model'; {{/tsImports}} + {{#description}} /** -* {{{.}}} -*/ + * {{{.}}} + */ {{/description}} -{{^isEnum}} -export interface {{classname}} { -{{#additionalPropertiesType}} - [key: string]: {{{additionalPropertiesType}}}; -{{/additionalPropertiesType}} -{{#vars}} -{{#description}} - /** - * {{{.}}} - */ -{{/description}} - '{{name}}'{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}} | null{{/isNullable}}; -{{/vars}} -} - -{{#hasEnums}} - -{{#vars}} -{{#isEnum}} -export type {{classname}}{{enumName}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}}; -{{/isEnum}} -{{/vars}} - -{{/hasEnums}} -{{/isEnum}} -{{#isEnum}} -export type {{classname}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}}; -{{/isEnum}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#isAlias}}{{>modelAlias}}{{/isAlias}}{{^isAlias}}{{#taggedUnions}}{{>modelTaggedUnion}}{{/taggedUnions}}{{^taggedUnions}}{{#oneOf}}{{#-first}}{{>modelOneOf}}{{/-first}}{{/oneOf}}{{^oneOf}}{{>modelGeneric}}{{/oneOf}}{{/taggedUnions}}{{/isAlias}}{{/isEnum}} {{/model}} -{{/models}} \ No newline at end of file +{{/models}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache b/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache new file mode 100644 index 0000000000..c1c6bf7a5d --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache @@ -0,0 +1 @@ +export type {{classname}} = {{dataType}}; \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache b/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache new file mode 100644 index 0000000000..7a7d2299e1 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache @@ -0,0 +1,20 @@ +{{#stringEnums}} +export enum {{classname}} { +{{#allowableValues}} +{{#enumVars}} + {{name}} = {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +} +{{/stringEnums}} +{{^stringEnums}} +export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; + +export const {{classname}} = { +{{#allowableValues}} +{{#enumVars}} + {{name}}: {{{value}}} as {{classname}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +}; +{{/stringEnums}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache new file mode 100644 index 0000000000..67954c0378 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache @@ -0,0 +1,38 @@ +{{#models}} +{{#model}} + +{{#description}} +/** +* {{{.}}} +*/ +{{/description}} +{{^isEnum}} +export interface {{classname}} { +{{#additionalPropertiesType}} + [key: string]: {{{additionalPropertiesType}}}; +{{/additionalPropertiesType}} +{{#vars}} +{{#description}} + /** + * {{{.}}} + */ +{{/description}} + '{{name}}'{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}} | null{{/isNullable}}; +{{/vars}} +} + +{{#hasEnums}} + +{{#vars}} +{{#isEnum}} +export type {{classname}}{{enumName}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}}; +{{/isEnum}} +{{/vars}} + +{{/hasEnums}} +{{/isEnum}} +{{#isEnum}} +export type {{classname}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}}; +{{/isEnum}} +{{/model}} +{{/models}} \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache b/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache new file mode 100644 index 0000000000..e6499ce9d6 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache @@ -0,0 +1,5 @@ +{{#additionalPropertiesType}} + + [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; + +{{/additionalPropertiesType}} \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache b/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache new file mode 100644 index 0000000000..a824e55ec5 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache @@ -0,0 +1,30 @@ +{{#hasEnums}} + +{{^stringEnums}} +export namespace {{classname}} { +{{/stringEnums}} +{{#vars}} + {{#isEnum}} +{{#stringEnums}} +export enum {{classname}}{{enumName}} { +{{#allowableValues}} +{{#enumVars}} + {{name}} = {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +}; +{{/stringEnums}} +{{^stringEnums}} + export type {{enumName}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}; + export const {{enumName}} = { + {{#allowableValues}} + {{#enumVars}} + {{name}}: {{{value}}} as {{enumName}}{{^-last}},{{/-last}} + {{/enumVars}} + {{/allowableValues}} + }; +{{/stringEnums}} + {{/isEnum}} +{{/vars}} +{{^stringEnums}}}{{/stringEnums}} +{{/hasEnums}} \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache new file mode 100644 index 0000000000..f6f30e029a --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache @@ -0,0 +1,14 @@ +{{#hasImports}} +import { + {{#imports}} + {{{.}}}, + {{/imports}} +} from './'; + +{{/hasImports}} +/** + * @type {{classname}}{{#description}} + * {{{.}}}{{/description}} + * @export + */ +export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}}; diff --git a/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache b/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache new file mode 100644 index 0000000000..24a9c0f0b6 --- /dev/null +++ b/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache @@ -0,0 +1,21 @@ +{{#discriminator}} +export type {{classname}} = {{#children}}{{^-first}} | {{/-first}}{{classname}}{{/children}}; +{{/discriminator}} +{{^discriminator}} +{{#parent}} +export interface {{classname}} { {{>modelGenericAdditionalProperties}} +{{#allVars}} + {{#description}} + /** + * {{{.}}} + */ + {{/description}} + {{name}}{{^required}}?{{/required}}: {{#discriminatorValue}}'{{.}}'{{/discriminatorValue}}{{^discriminatorValue}}{{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{/discriminatorValue}}{{#isNullable}} | null{{/isNullable}}; +{{/allVars}} +} +{{>modelGenericEnums}} +{{/parent}} +{{^parent}} +{{>modelGeneric}} +{{/parent}} +{{/discriminator}} \ No newline at end of file From b10c6032c7069a23149c8cecc753c39a2d0c7e34 Mon Sep 17 00:00:00 2001 From: Aramis Date: Wed, 17 Jan 2024 14:29:45 -0500 Subject: [PATCH 088/129] changeset Signed-off-by: Aramis --- .changeset/angry-phones-arrive.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/angry-phones-arrive.md diff --git a/.changeset/angry-phones-arrive.md b/.changeset/angry-phones-arrive.md new file mode 100644 index 0000000000..2afcd240a9 --- /dev/null +++ b/.changeset/angry-phones-arrive.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': minor +--- + +Add support for `oneOf` in client generated by `schema openapi generate-client`. From 88581bd8c8692a0dd158587c933baae989043d7d Mon Sep 17 00:00:00 2001 From: Aramis Date: Wed, 17 Jan 2024 14:57:18 -0500 Subject: [PATCH 089/129] update to use the shared additional properties template Signed-off-by: Aramis --- .../templates/typescript-backstage/modelGeneric.mustache | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache index 67954c0378..ce42680532 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache @@ -8,9 +8,7 @@ {{/description}} {{^isEnum}} export interface {{classname}} { -{{#additionalPropertiesType}} - [key: string]: {{{additionalPropertiesType}}}; -{{/additionalPropertiesType}} +{{>modelGenericAdditionalProperties}} {{#vars}} {{#description}} /** From 1f5de82fc7b7ee074439337a1e5aebec150a2ea0 Mon Sep 17 00:00:00 2001 From: Aramis Date: Wed, 17 Jan 2024 15:07:55 -0500 Subject: [PATCH 090/129] updating templates to be more in line with expected backstage types. Signed-off-by: Aramis --- .../typescript-backstage/licenseInfo.mustache | 13 ++++--------- .../typescript-backstage/modelOneOf.mustache | 10 +++++----- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache b/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache index db559aacf9..afc90f6227 100644 --- a/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache +++ b/packages/repo-tools/templates/typescript-backstage/licenseInfo.mustache @@ -1,12 +1,7 @@ +// /** - * {{{appName}}} - * {{{appDescription}}} - * - * {{#version}}The version of the OpenAPI document: {{{.}}}{{/version}} - * {{#infoEmail}}Contact: {{{.}}}{{/infoEmail}} - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. + * {{{appName}}}{{#version}}@{{{.}}}{{/version}} + * + * NOTE: This class is auto generated, do not edit the class manually. */ \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache index f6f30e029a..66085a7f71 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache @@ -6,9 +6,9 @@ import { } from './'; {{/hasImports}} -/** - * @type {{classname}}{{#description}} - * {{{.}}}{{/description}} - * @export - */ +{{#description}} + /** + * {{{.}}} + */ +{{/description}} export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}}; From 5ed7314300f99795621ee46ac77f5dd5424d968c Mon Sep 17 00:00:00 2001 From: Aramis Date: Sun, 21 Jan 2024 10:44:39 -0500 Subject: [PATCH 091/129] add attribution for each file Signed-off-by: Aramis --- .../repo-tools/templates/typescript-backstage/model.mustache | 1 + .../templates/typescript-backstage/modelAlias.mustache | 2 ++ .../templates/typescript-backstage/modelEnum.mustache | 2 ++ .../templates/typescript-backstage/modelGeneric.mustache | 2 ++ .../modelGenericAdditionalProperties.mustache | 2 ++ .../templates/typescript-backstage/modelGenericEnums.mustache | 2 ++ .../templates/typescript-backstage/modelOneOf.mustache | 2 ++ .../templates/typescript-backstage/modelTaggedUnion.mustache | 2 ++ 8 files changed, 15 insertions(+) diff --git a/packages/repo-tools/templates/typescript-backstage/model.mustache b/packages/repo-tools/templates/typescript-backstage/model.mustache index 77f186dd5f..97d7858cb2 100644 --- a/packages/repo-tools/templates/typescript-backstage/model.mustache +++ b/packages/repo-tools/templates/typescript-backstage/model.mustache @@ -1,3 +1,4 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/model.mustache#L17. }} {{>licenseInfo}} {{#models}} {{#model}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache b/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache index c1c6bf7a5d..351dc37c78 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelAlias.mustache @@ -1 +1,3 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelAlias.mustache }} + export type {{classname}} = {{dataType}}; \ No newline at end of file diff --git a/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache b/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache index 7a7d2299e1..0deab70f02 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelEnum.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelEnum.mustache }} + {{#stringEnums}} export enum {{classname}} { {{#allowableValues}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache index ce42680532..d51eeaed80 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelGeneric.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache }} + {{#models}} {{#model}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache b/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache index e6499ce9d6..b8d7d1ceb7 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelGenericAdditionalProperties.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelGenericAdditionalProperties.mustache }} + {{#additionalPropertiesType}} [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; diff --git a/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache b/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache index a824e55ec5..8d7b49c9c3 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelGenericEnums.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelGenericEnums.mustache }} + {{#hasEnums}} {{^stringEnums}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache index 66085a7f71..b261789c3d 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelOneOf.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelOneOf.mustache }} + {{#hasImports}} import { {{#imports}} diff --git a/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache b/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache index 24a9c0f0b6..a3f5e00904 100644 --- a/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache +++ b/packages/repo-tools/templates/typescript-backstage/modelTaggedUnion.mustache @@ -1,3 +1,5 @@ +{{! Sourced from https://github.com/OpenAPITools/openapi-generator/blob/7347daec61b2cb8d3d28e1ed06fe8b5e682090f8/modules/openapi-generator/src/main/resources/typescript-angular/modelTaggedUnion.mustache }} + {{#discriminator}} export type {{classname}} = {{#children}}{{^-first}} | {{/-first}}{{classname}}{{/children}}; {{/discriminator}} From d374ec308196255607da3544c62748e697933463 Mon Sep 17 00:00:00 2001 From: Aramis Date: Sun, 21 Jan 2024 10:49:49 -0500 Subject: [PATCH 092/129] add openapi to notice Signed-off-by: Aramis --- NOTICE | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NOTICE b/NOTICE index 38e5cdef85..fb23d28ebc 100644 --- a/NOTICE +++ b/NOTICE @@ -2,4 +2,6 @@ Backstage Copyright 2020 The Backstage Authors Portions of this software were developed by third-party software vendors: + - Tech Radar Plugin (https://opensource.zalando.com/tech-radar/), Copyright (c) 2017 Zalando SE +- [OpenAPI Generator Templates](./packages/repo-tools/templates), Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) Copyright 2018 SmartBear Software From c742e46875fd9f1ab00f67624f45d0ae6ebb6d82 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 18:11:51 +0000 Subject: [PATCH 093/129] Update dependency @types/recharts to v1.8.29 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 62ceb0e964..0e3ac44ee9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18801,12 +18801,12 @@ __metadata: linkType: hard "@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": - version: 1.8.28 - resolution: "@types/recharts@npm:1.8.28" + version: 1.8.29 + resolution: "@types/recharts@npm:1.8.29" dependencies: "@types/d3-shape": ^1 "@types/react": "*" - checksum: b334ed1b34123483a2f03dd4b13bdae3048a4a50b2a46b69e6580545ecd3fd57874a9818e5c2c1d8a98dc0bf8a1b6d45b4790d31fb5c395d7b7c6c268b716634 + checksum: 091d018298d9c5e22b1a937e1229e721e2f6ac030fb73024717f6d20f3ff18575557560afd2247987f102f5981402b1fa1bf13362147aa0e89656ecc51ac3e2b languageName: node linkType: hard From c63d46de76f5b4b83a0c0660c6f9ee39724fe4c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 18:23:32 +0000 Subject: [PATCH 094/129] Update dependency @types/node to v16.18.74 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 62ceb0e964..ed48a1cced 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18451,9 +18451,9 @@ __metadata: linkType: hard "@types/node@npm:^16.11.26, @types/node@npm:^16.7.10, @types/node@npm:^16.9.2": - version: 16.18.72 - resolution: "@types/node@npm:16.18.72" - checksum: c0f1748b20566417d3b777d11962f84500b4cb9c77ebb59c51f2882c3e5141bd4636709dc63fe2e45d6d6799fc4c5a98931abcb2dd3a5b107e448d76ae848320 + version: 16.18.74 + resolution: "@types/node@npm:16.18.74" + checksum: 33d8f157b51cb2f6907a7019e0bef0733f6ebd025f208863e6e6ea4721348902f2c7ac9eeaadff9f1e138927921e620c7f0a655475a298569d7551f2d28e35f3 languageName: node linkType: hard From d1a5219e9a4c497daf078aa02e18c91f4a4431a6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 21 Jan 2024 21:11:51 +0100 Subject: [PATCH 095/129] auth-backend: doc fix Signed-off-by: Patrik Oldsberg --- plugins/auth-backend/src/providers/microsoft/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 8947c7432b..b004cb9651 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -32,7 +32,7 @@ import { } from '@backstage/plugin-auth-backend-module-microsoft-provider'; /** - * Auth provider integration for GitLab auth + * Auth provider integration for Microsoft auth * * @public */ From b764082bace71df9386d420f680685b6e3b955a2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 20:20:48 +0000 Subject: [PATCH 096/129] Update dependency core-js to v3.35.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 800aa6702e..b556638d4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23309,9 +23309,9 @@ __metadata: linkType: hard "core-js@npm:^3.26.0, core-js@npm:^3.6.5": - version: 3.35.0 - resolution: "core-js@npm:3.35.0" - checksum: 25c224aca3df012b98f08f13ccbd8171ef5852acd33fd5e58e106d27f5f0c97de2fdbc520f0b4364d26253caf2deb3e5d265310f57d2a66ae6cc922850e649f0 + version: 3.35.1 + resolution: "core-js@npm:3.35.1" + checksum: e246af6b634be3763ffe3ce6ac4601b4dc5b928006fb6c95e5d08ecd82a2413bf36f00ffe178b89c9a8e94000288933a78a9881b2c9498e6cf312b031013b952 languageName: node linkType: hard From 4a2691e3ef8446f3a479f399788506d645ed9670 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 22 Jan 2024 01:02:17 +0100 Subject: [PATCH 097/129] Update .changeset/soft-beans-tease.md Signed-off-by: Patrik Oldsberg --- .changeset/soft-beans-tease.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/soft-beans-tease.md b/.changeset/soft-beans-tease.md index 3f3210a8ce..881900e773 100644 --- a/.changeset/soft-beans-tease.md +++ b/.changeset/soft-beans-tease.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-cloudbuild': minor +'@backstage/plugin-cloudbuild': patch --- Add telemetry HTTP header Google Cloud Platform From 92746d06bb3c0b712728ed03f0beb32afaba8997 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 00:22:08 +0000 Subject: [PATCH 098/129] Update dependency js-base64 to v3.7.6 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6832ae7303..c38dccba7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31338,9 +31338,9 @@ __metadata: linkType: hard "js-base64@npm:^3.6.0": - version: 3.7.5 - resolution: "js-base64@npm:3.7.5" - checksum: 67a78c8b1c47b73f1c6fba1957e9fe6fd9dc78ac93ac46cc2e43472dcb9cf150d126fb0e593192e88e0497354fa634d17d255add7cc6ee3c7b4d29870faa8e18 + version: 3.7.6 + resolution: "js-base64@npm:3.7.6" + checksum: 4e1e82443c22f3f8f24902b071ea824069a28a16a86c3d8706e8c0741cace92cfb4affd093f52d13981369e10df840e54df8d0a59ede6dd2204a1f0aa4b64deb languageName: node linkType: hard From 99ab7c6bd171c89d4106faff0c81d19881acd7d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 01:19:46 +0000 Subject: [PATCH 099/129] Update dependency react-use to v17.4.4 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b7a1220b28..77574ca903 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38810,8 +38810,8 @@ __metadata: linkType: hard "react-use@npm:^17.2.4, react-use@npm:^17.3.1, react-use@npm:^17.3.2, react-use@npm:^17.4.0": - version: 17.4.3 - resolution: "react-use@npm:17.4.3" + version: 17.4.4 + resolution: "react-use@npm:17.4.4" dependencies: "@types/js-cookie": ^2.2.6 "@xobotyi/scrollbar-width": ^1.9.5 @@ -38830,7 +38830,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: efa54c795ca900902022096c4c87b2a8c2290fe1748f3b2bf4d31ad40bfa35c1520f67e3da5f0a227a6429256df7bca251d9323487652debc924de5208a9cedd + checksum: f8c359d2360bd26fdf4ce1f0f8909d138d85a24cdae9ebafc1a9d57edbb8e778c49752793ea6c349b0844353af03878f2f22c5596c791c24f6fc9aed51b29e8f languageName: node linkType: hard From 4212a53acd84b637ccb8e08cabf540cdac6a3f0b Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 22 Jan 2024 08:01:04 +0100 Subject: [PATCH 100/129] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Vincenzo Scamporlino --- packages/core-compat-api/src/collectLegacyRoutes.test.tsx | 3 +-- packages/core-compat-api/src/collectLegacyRoutes.tsx | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx index b99d581983..c8d3822ae7 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx @@ -289,8 +289,7 @@ describe('collectLegacyRoutes', () => { createRoutableExtension({ name: 'Test', mountPoint: routeRef, - component: () => - Promise.resolve(() => { + component: async () => () => { const app = useApp(); return
plugins: {app.getPlugins().map(p => p.getId())}
; }), diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index 847c0805cb..1217f9531d 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -173,7 +173,7 @@ export function collectLegacyRoutes( (route: ReactNode) => { // TODO(freben): Handle feature flag and permissions framework wrapper elements if (!React.isValidElement(route) || route.type !== Route) { - throw new Error('Invalid element has been detected.'); + throw new Error(`Invalid element inside FlatRoutes, expected Route but found ${route.type}.`); } const routeElement = route.props.element; const path: string | undefined = route.props.path; @@ -187,7 +187,7 @@ export function collectLegacyRoutes( ); if (path === undefined) { throw new Error( - ` element with invalid path has been detected. Please make sure to pass the path's props`, + `Route element inside FlatRoutes had no path prop value given`, ); } if (!plugin) { From 32b4a2eebf2137373f911388dbfb48755ddcbd03 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 22 Jan 2024 08:15:01 +0100 Subject: [PATCH 101/129] core-compat-api: throw error if element cannot be converted Signed-off-by: Vincenzo Scamporlino --- .../src/collectLegacyRoutes.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index 1217f9531d..f164b400bd 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -172,8 +172,15 @@ export function collectLegacyRoutes( flatRoutesElement.props.children, (route: ReactNode) => { // TODO(freben): Handle feature flag and permissions framework wrapper elements - if (!React.isValidElement(route) || route.type !== Route) { - throw new Error(`Invalid element inside FlatRoutes, expected Route but found ${route.type}.`); + if (!React.isValidElement(route)) { + throw new Error( + `Invalid element inside FlatRoutes, expected Route but found element of type ${typeof route}.`, + ); + } + if (route.type !== Route) { + throw new Error( + `Invalid element inside FlatRoutes, expected Route but found ${route.type}.`, + ); } const routeElement = route.props.element; const path: string | undefined = route.props.path; @@ -185,14 +192,16 @@ export function collectLegacyRoutes( routeElement, 'core.mountPoint', ); + if (!plugin) { + throw new Error( + `Route with path ${path} has en element that can not be converted as it does not belong to a plugin. Make sure that the top-level React element of the element prop is an extension from a Backstage plugin, or remove the Route completely. See for more info`, + ); + } if (path === undefined) { throw new Error( `Route element inside FlatRoutes had no path prop value given`, ); } - if (!plugin) { - return; - } const extensions = getPluginExtensions(plugin); const pageExtensionName = extensions.length ? getUniqueName() : undefined; From e426b62a748b28135918badcda69e81250371eee Mon Sep 17 00:00:00 2001 From: Martin Marosi Date: Mon, 22 Jan 2024 09:12:10 +0100 Subject: [PATCH 102/129] beps: 0002 add discussion issue link Signed-off-by: Martin Marosi --- beps/0002-dynamic-frontend-plugins/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index b44c4a8b20..aad0cc66c3 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -19,7 +19,7 @@ When editing BEPs, aim for tightly-scoped, single-topic PRs to keep discussions -[**Discussion Issue**](https://github.com/backstage/backstage/issues/NNNNN) +[**Discussion Issue**](https://github.com/backstage/backstage/issues/22423) - [Summary](#summary) - [Motivation](#motivation) From c1b863e1563b5181d80dfbbb5c6c8a67ce5bf43b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 22 Jan 2024 09:13:07 +0100 Subject: [PATCH 103/129] Revert "Update docusaurus monorepo to v0.0.0-5809" Signed-off-by: Patrik Oldsberg --- microsite/package.json | 8 +- microsite/yarn.lock | 2501 +++++++++++++++++++++++++--------------- 2 files changed, 1562 insertions(+), 947 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index 637327f83e..53309fb358 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -18,7 +18,7 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "0.0.0-5809", + "@docusaurus/module-type-aliases": "0.0.0-5703", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^2.0.0", "@types/luxon": "^3.0.0", @@ -30,9 +30,9 @@ }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "0.0.0-5809", - "@docusaurus/plugin-client-redirects": "0.0.0-5809", - "@docusaurus/preset-classic": "0.0.0-5809", + "@docusaurus/core": "0.0.0-5703", + "@docusaurus/plugin-client-redirects": "0.0.0-5703", + "@docusaurus/preset-classic": "0.0.0-5703", "@swc/core": "^1.3.46", "clsx": "^2.0.0", "docusaurus-plugin-sass": "^0.2.3", diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 1841fcb678..a2489da001 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -197,55 +197,55 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.8.3": - version: 7.23.5 - resolution: "@babel/code-frame@npm:7.23.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.8.3": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" dependencies: - "@babel/highlight": ^7.23.4 + "@babel/highlight": ^7.22.13 chalk: ^2.4.2 - checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/compat-data@npm:7.23.5" - checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744 +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 languageName: node linkType: hard -"@babel/core@npm:^7.19.6, @babel/core@npm:^7.23.3": - version: 7.23.7 - resolution: "@babel/core@npm:7.23.7" +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.22.9": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.23.5 - "@babel/generator": ^7.23.6 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helpers": ^7.23.7 - "@babel/parser": ^7.23.6 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.7 - "@babel/types": ^7.23.6 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 32d5bf73372a47429afaae9adb0af39e47bcea6a831c4b5dcbb4791380cda6949cb8cb1a2fea8b60bb1ebe189209c80e333903df1fa8e9dcb04798c0ce5bf59e + checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 languageName: node linkType: hard -"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/generator@npm:7.23.6" +"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" dependencies: - "@babel/types": ^7.23.6 + "@babel/types": ^7.23.0 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 1a1a1c4eac210f174cd108d479464d053930a812798e09fee069377de39a893422df5b5b146199ead7239ae6d3a04697b45fc9ac6e38e0f6b76374390f91fc6c + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 languageName: node linkType: hard @@ -267,16 +267,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helper-compilation-targets@npm:7.23.6" +"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: - "@babel/compat-data": ^7.23.5 - "@babel/helper-validator-option": ^7.23.5 - browserslist: ^4.22.2 + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 languageName: node linkType: hard @@ -371,9 +371,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0, @babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" dependencies: "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-module-imports": ^7.22.15 @@ -382,7 +382,7 @@ __metadata: "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 languageName: node linkType: hard @@ -455,10 +455,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/helper-string-parser@npm:7.23.4" - checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90 +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 languageName: node linkType: hard @@ -469,10 +469,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d languageName: node linkType: hard @@ -487,34 +487,34 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.7": - version: 7.23.8 - resolution: "@babel/helpers@npm:7.23.8" +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" dependencies: "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.7 - "@babel/types": ^7.23.6 - checksum: 8b522d527921f8df45a983dc7b8e790c021250addf81ba7900ba016e165442a527348f6f877aa55e1debb3eef9e860a334b4e8d834e6c9b438ed61a63d9a7ad4 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 languageName: node linkType: hard -"@babel/highlight@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/highlight@npm:7.23.4" +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" dependencies: "@babel/helper-validator-identifier": ^7.22.20 chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 languageName: node linkType: hard -"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/parser@npm:7.23.6" +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" bin: parser: ./bin/babel-parser.js - checksum: 140801c43731a6c41fd193f5c02bc71fd647a0360ca616b23d2db8be4b9739b9f951a03fc7c2db4f9b9214f4b27c1074db0f18bc3fa653783082d5af7c8860d5 + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 languageName: node linkType: hard @@ -1593,7 +1593,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": version: 7.23.1 resolution: "@babel/runtime@npm:7.23.1" dependencies: @@ -1613,32 +1613,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.7": - version: 7.23.7 - resolution: "@babel/traverse@npm:7.23.7" +"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.0": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" dependencies: - "@babel/code-frame": ^7.23.5 - "@babel/generator": ^7.23.6 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-function-name": ^7.23.0 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.23.6 - "@babel/types": ^7.23.6 - debug: ^4.3.1 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 globals: ^11.1.0 - checksum: d4a7afb922361f710efc97b1e25ec343fab8b2a4ddc81ca84f9a153f22d4482112cba8f263774be8d297918b6c4767c7a98988ab4e53ac73686c986711dd002e + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d languageName: node linkType: hard -"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.6 - resolution: "@babel/types@npm:7.23.6" +"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" dependencies: - "@babel/helper-string-parser": ^7.23.4 + "@babel/helper-string-parser": ^7.22.5 "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: 68187dbec0d637f79bc96263ac95ec8b06d424396678e7e225492be866414ce28ebc918a75354d4c28659be6efe30020b4f0f6df81cc418a2d30645b690a8de0 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 languageName: node linkType: hard @@ -1689,12 +1689,12 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/core@npm:0.0.0-5809" +"@docusaurus/core@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/core@npm:0.0.0-5703" dependencies: - "@babel/core": ^7.23.3 - "@babel/generator": ^7.23.3 + "@babel/core": ^7.22.9 + "@babel/generator": ^7.22.9 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-transform-runtime": ^7.22.9 "@babel/preset-env": ^7.22.9 @@ -1703,13 +1703,13 @@ __metadata: "@babel/runtime": ^7.22.6 "@babel/runtime-corejs3": ^7.22.6 "@babel/traverse": ^7.22.8 - "@docusaurus/cssnano-preset": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/mdx-loader": 0.0.0-5809 + "@docusaurus/cssnano-preset": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.5.1 autoprefixer: ^10.4.14 @@ -1736,6 +1736,7 @@ __metadata: html-minifier-terser: ^7.2.0 html-tags: ^3.3.1 html-webpack-plugin: ^5.5.3 + import-fresh: ^3.3.0 leven: ^3.1.0 lodash: ^4.17.21 mini-css-extract-plugin: ^2.7.6 @@ -1757,6 +1758,7 @@ __metadata: tslib: ^2.6.0 update-notifier: ^6.0.2 url-loader: ^4.1.1 + wait-on: ^7.0.1 webpack: ^5.88.1 webpack-bundle-analyzer: ^4.9.0 webpack-dev-server: ^4.15.1 @@ -1767,73 +1769,76 @@ __metadata: react-dom: ^18.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 4b448bc4fc5df42de82afb7fd6e05aa1faec9edd4b534f982bd36efadc75e10f5fd94275286ee28be0c849f22504f4441a9918d179bfe1a0783f341bb6ccac3e + checksum: 0e2912a09964778db626dc190317badb074f2f5e09157b8070f281eff69ce2e89846529584ce9bf6e6898293409c353adc80572484aceda1d2136aa2b0b334ca languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5809" +"@docusaurus/cssnano-preset@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5703" dependencies: cssnano-preset-advanced: ^5.3.10 postcss: ^8.4.26 postcss-sort-media-queries: ^4.4.1 tslib: ^2.6.0 - checksum: 92ec22fb1dfcc8d85cd55f9f365a22809ea65d2181ace4610889e804a322c9fccf983eacbf56b8d848515d505eb1cdc9a8ac6d8d0409dd764d6cd784d029826e + checksum: 5f6e2a69765fb18de7d8f5e3037bf4f08695034762fca092229ae0ba9a40e9b76048914ffbf6b1d339d496e23580f47aa419f51f446c98fca0ba8d500a06e396 languageName: node linkType: hard -"@docusaurus/logger@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/logger@npm:0.0.0-5809" +"@docusaurus/logger@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/logger@npm:0.0.0-5703" dependencies: chalk: ^4.1.2 tslib: ^2.6.0 - checksum: 818f0493308a3261efbd098ca7b37cc76b15280e133f5aa7d8e344e8e39b54e8d07cd011f494b964be6ef39740ec0edf3d4829361e40fb1dbb3027599fc08fdd + checksum: 9ee30b054388e5a618876316df50b73a7c4c8300ce205ace3c09f689a1a38b85d51891a1f0613341fd038a0d06290f0675d64c3e9e5b87f1eee3cb76fd45b55c languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/mdx-loader@npm:0.0.0-5809" +"@docusaurus/mdx-loader@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/mdx-loader@npm:0.0.0-5703" dependencies: - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 - "@mdx-js/mdx": ^3.0.0 + "@babel/parser": ^7.22.7 + "@babel/traverse": ^7.22.8 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + "@mdx-js/mdx": ^2.1.5 "@slorber/remark-comment": ^1.0.0 escape-html: ^1.0.3 - estree-util-value-to-estree: ^3.0.1 + estree-util-value-to-estree: ^2.1.0 file-loader: ^6.2.0 fs-extra: ^11.1.1 + hastscript: ^7.1.0 image-size: ^1.0.2 - mdast-util-mdx: ^3.0.0 - mdast-util-to-string: ^4.0.0 - rehype-raw: ^7.0.0 - remark-directive: ^3.0.0 - remark-emoji: ^4.0.0 + mdast-util-mdx: ^2.0.0 + mdast-util-to-string: ^3.2.0 + rehype-raw: ^6.1.1 + remark-directive: ^2.0.1 + remark-emoji: ^2.2.0 remark-frontmatter: ^5.0.0 - remark-gfm: ^4.0.0 + remark-gfm: ^3.0.1 stringify-object: ^3.3.0 tslib: ^2.6.0 - unified: ^11.0.3 - unist-util-visit: ^5.0.0 + unified: ^10.1.2 + unist-util-visit: ^2.0.3 url-loader: ^4.1.1 - vfile: ^6.0.1 + vfile: ^5.3.7 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: d92126b7b32aa5b73c9556e9e04ddf4055992301d4df0cc0d1de5a618fa48e9133038ef8ee15395bbc1fa1c66552bd5cb8c901a2239130e1ee6499d679f0eae5 + checksum: d57b08d7d676b9246be129af06a803fc55162359578e486456cb96a2372809c2093ef4115c926cf8e8be35e285b35d3ea444d808d46afb78edf66b49f58474fb languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5809" +"@docusaurus/module-type-aliases@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5703" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 0.0.0-5809 + "@docusaurus/types": 0.0.0-5703 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1843,19 +1848,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 3bd545d550989111b00274f3f06df9367895688060afb08b6c7ec3b4967768a78f5d2e1bf7a1b43d77276b116e62f077f0131cc8f1b7e4acbc1db9d3d49471aa + checksum: b0dbf719f3c6510b6706f36310b185bdf8a8a2ab5d3b0b76f8962b08d3b1a86783c3f4c23455c03d528500871f0a18ede4e03a0df8c7a44096b91097a5ffda7d languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5809" +"@docusaurus/plugin-client-redirects@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 eta: ^2.2.0 fs-extra: ^11.1.1 lodash: ^4.17.21 @@ -1863,21 +1868,21 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: d0b9b842f184e0b21ae9fcb718b8eccb7d0103ed847c7e27b782ba67b6eaba1875f3de796823363ccfbc648d6721a5d8ac1512ffc61e55e9c1d9a47bc7ad1646 + checksum: ac246eeb75028acd6a1d8804572fb89bac5575facf82c35ca3c8441d916980c183f5342a768d31cccc95f2034657bd25cfda24d480a2b8b4abdd693a51d9754e languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5809" +"@docusaurus/plugin-content-blog@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/mdx-loader": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^11.1.1 @@ -1885,30 +1890,31 @@ __metadata: reading-time: ^1.5.0 srcset: ^4.0.0 tslib: ^2.6.0 - unist-util-visit: ^5.0.0 + unist-util-visit: ^2.0.3 utility-types: ^3.10.0 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 40981493af1fd0f835e3a5cf42c56718bc41feb73af36a8641c425875cd366e1e0c44841469649f55a014bfb5d1782d459a6ad8876849b12ee73e97b3f3b73cc + checksum: 46e4a4fac407a8014ce0918933a476b03adca3d3b7e76b27a87bf0eeeb446f20e25db60b292f743652f3ad88232824f7a1541fcb7d27bcdbf9cb6d1c94e9a1b5 languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5809" +"@docusaurus/plugin-content-docs@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/mdx-loader": 0.0.0-5809 - "@docusaurus/module-type-aliases": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@types/react-router-config": ^5.0.7 combine-promises: ^1.1.0 fs-extra: ^11.1.1 + import-fresh: ^3.3.0 js-yaml: ^4.1.0 lodash: ^4.17.21 tslib: ^2.6.0 @@ -1917,133 +1923,133 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 1ce8c1e1783d08e41172d0db0e858847c2de4c9a750fc2206f7344bfa9186fdc1d818ad0f28542b109b0cb5d45a5ddfb9145014555225198f41881f57fb9df83 + checksum: b08fbbac78f76ca68fc4a8ba488f41709733727e073d5f2d1e671dab484c4d37729a657305b315052369292ec7ae83c32992e551eda1d0990c035aa84fecbac6 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5809" +"@docusaurus/plugin-content-pages@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/mdx-loader": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 fs-extra: ^11.1.1 tslib: ^2.6.0 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 362fa40e3c92b8637ed13f67ce244306e668484e985e2e1267c92ea0506a742c0d3b552ed508d3bd77259cfca0fb7ebc7722df9434e8d819c93c8a4edd546b1b + checksum: 9d0b904259c625d82175fa3fdeae89de8503f409a7dc47c9077f35d25f72fcf76a0a6392f5e790c3bf2604896e1aa0fced00386b9df553f6ba01247ccadd6503 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-debug@npm:0.0.0-5809" +"@docusaurus/plugin-debug@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-debug@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@microlink/react-json-view": ^1.22.2 fs-extra: ^11.1.1 - react-json-view-lite: ^1.2.0 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 7dcb4ae3fff5352b9080b4fda26c834907bcafb230201154d1e13cefc9dbaafc0f9013bdd485f247cf390a084154695f6b9ef589936c66c30fa66b02f774a775 + checksum: b9bf04c27144dc797fa25cae6df95f5a8b15c888993194bf1b0fae06ce6ae55cf338270b7a914ef07d6551addd6261e628a465c4f277a4e13753c207e533557d languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5809" +"@docusaurus/plugin-google-analytics@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: b7a6d4ea53098db90602d5359d807c3b7d164c335294155538565be29cb85b2853a8e5b7c76d57efb0b50901d0beb60689116933ab4940fc370ff6f194acd675 + checksum: ad98ea301caa4908197a3c460ae88dd5598c1485d8643708e8fb3f757ae3bf854efc1b5a1ab9c8ba15371c3a989704d7f9fdb55dd25d1d1b81936526068a877b languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5809" +"@docusaurus/plugin-google-gtag@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 "@types/gtag.js": ^0.0.12 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 0ce11539963fb62dc417bcd704bcdf3b5fab46f2e035286187d44bc5d9bc5f8238541e1da0cf3a9ab930871d21d08681fd3ec1291c1f0e088a70d85bf704579a + checksum: 9fbdbc0569f1ff634c357d197c1442da17c4a09c03163640db1d1bde0be8612dd432e494a4f02eb43ac58dd7df2cbd335911fdb7fa315a9de95e173090daf5dc languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5809" +"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 7041f2b5574b6b77300ea3082a090057d389e1059d45d4ff2d87386d362f55f00cc26d329b8cdeec4fb10c9fcfe4702823c3f4f2ceef29b557086c4c20819ab3 + checksum: 3ed2c6eb05087db3877ffe98cc6eca59be80889411e3cdbd981ac4d951a5efa269a1011a39a94c997d93474fd916e3634905a6537e10575e5d5a954a9bb00c5d languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5809" +"@docusaurus/plugin-sitemap@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 fs-extra: ^11.1.1 sitemap: ^7.1.1 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: cdb41c318786913923b1381882d7f5c956dba98f958f14cfd27fb962c540732b940ab7c01d04a97e30c229b98637d57fa3897dd0bdd738ac68ba55e27080bb08 + checksum: 1afbd2e3575ae09428fb4c53a2563e313c3e1a2323c79bdc256779c56f8d796c2c94473d055d6d7a97d477f06e35f0922bed441f7c3e1467feeb5329e1f7761b languageName: node linkType: hard -"@docusaurus/preset-classic@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/preset-classic@npm:0.0.0-5809" +"@docusaurus/preset-classic@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/preset-classic@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/plugin-content-blog": 0.0.0-5809 - "@docusaurus/plugin-content-docs": 0.0.0-5809 - "@docusaurus/plugin-content-pages": 0.0.0-5809 - "@docusaurus/plugin-debug": 0.0.0-5809 - "@docusaurus/plugin-google-analytics": 0.0.0-5809 - "@docusaurus/plugin-google-gtag": 0.0.0-5809 - "@docusaurus/plugin-google-tag-manager": 0.0.0-5809 - "@docusaurus/plugin-sitemap": 0.0.0-5809 - "@docusaurus/theme-classic": 0.0.0-5809 - "@docusaurus/theme-common": 0.0.0-5809 - "@docusaurus/theme-search-algolia": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/plugin-debug": 0.0.0-5703 + "@docusaurus/plugin-google-analytics": 0.0.0-5703 + "@docusaurus/plugin-google-gtag": 0.0.0-5703 + "@docusaurus/plugin-google-tag-manager": 0.0.0-5703 + "@docusaurus/plugin-sitemap": 0.0.0-5703 + "@docusaurus/theme-classic": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-search-algolia": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 425337b7d91c761919cd1c7f6d7845932c78c1df7b86647b1129f122502798505577f4be87b243f4ff58fff55c71ab20ee49ae6015b3aba09c644a7154a0b9b9 + checksum: d4c2e6e02b828b248351819410fe03e94a4b4fd8489e398b60d128ba8f173548f8353a3875ff0347179ee59e84df7e3e9e1e5b0be24b84f015c8c02b650eb80c languageName: node linkType: hard @@ -2059,30 +2065,30 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/theme-classic@npm:0.0.0-5809" +"@docusaurus/theme-classic@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-classic@npm:0.0.0-5703" dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/mdx-loader": 0.0.0-5809 - "@docusaurus/module-type-aliases": 0.0.0-5809 - "@docusaurus/plugin-content-blog": 0.0.0-5809 - "@docusaurus/plugin-content-docs": 0.0.0-5809 - "@docusaurus/plugin-content-pages": 0.0.0-5809 - "@docusaurus/theme-common": 0.0.0-5809 - "@docusaurus/theme-translations": 0.0.0-5809 - "@docusaurus/types": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 - "@mdx-js/react": ^3.0.0 - clsx: ^2.0.0 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-translations": 0.0.0-5703 + "@docusaurus/types": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 + "@mdx-js/react": ^2.1.5 + clsx: ^1.2.1 copy-text-to-clipboard: ^3.2.0 infima: 0.2.0-alpha.43 lodash: ^4.17.21 nprogress: ^0.2.0 postcss: ^8.4.26 - prism-react-renderer: ^2.3.0 + prism-react-renderer: ^2.1.0 prismjs: ^1.29.0 react-router-dom: ^5.3.4 rtlcss: ^4.1.0 @@ -2091,51 +2097,51 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 9df071f67a7048e7a33ec2b0d627c8c342574ac8fd4596d108b88c3d6fe9b454cbc84a558aaa09a0ef4d7d6887c0bb75bc60d3ec1182ee69b7de87c035cee843 + checksum: ba078e06a07bbcc4a474f67938760852146e0cb612e44bc81b22879d374372eeea076de6e46e9f955dd351f37dadd98ced2e70b6b8a476b88684fae40855ecb9 languageName: node linkType: hard -"@docusaurus/theme-common@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/theme-common@npm:0.0.0-5809" +"@docusaurus/theme-common@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-common@npm:0.0.0-5703" dependencies: - "@docusaurus/mdx-loader": 0.0.0-5809 - "@docusaurus/module-type-aliases": 0.0.0-5809 - "@docusaurus/plugin-content-blog": 0.0.0-5809 - "@docusaurus/plugin-content-docs": 0.0.0-5809 - "@docusaurus/plugin-content-pages": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-common": 0.0.0-5809 + "@docusaurus/mdx-loader": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-content-blog": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/plugin-content-pages": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-common": 0.0.0-5703 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" - clsx: ^2.0.0 + clsx: ^1.2.1 parse-numeric-range: ^1.3.0 - prism-react-renderer: ^2.3.0 + prism-react-renderer: ^2.1.0 tslib: ^2.6.0 utility-types: ^3.10.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 6561d5526ac8d0e818fa5d9eaf1b1969d8f2623b8b6358d0360c3808da49798f4bdbe07f97af56bd69f2604f158e62bf454c8f4e6a9c0233f57c3a81ddafec5c + checksum: f9b23318dbb504bcce0992de475f1ab32860620523dfe749bfdb00ac8e7fc75be705fd5177db2ce893ed269de40cef7f6a7290d44a12c6a160d9461bbca05552 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5809" +"@docusaurus/theme-search-algolia@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5703" dependencies: "@docsearch/react": ^3.5.2 - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/plugin-content-docs": 0.0.0-5809 - "@docusaurus/theme-common": 0.0.0-5809 - "@docusaurus/theme-translations": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 - "@docusaurus/utils-validation": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/plugin-content-docs": 0.0.0-5703 + "@docusaurus/theme-common": 0.0.0-5703 + "@docusaurus/theme-translations": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 + "@docusaurus/utils-validation": 0.0.0-5703 algoliasearch: ^4.18.0 algoliasearch-helper: ^3.13.3 - clsx: ^2.0.0 + clsx: ^1.2.1 eta: ^2.2.0 fs-extra: ^11.1.1 lodash: ^4.17.21 @@ -2144,25 +2150,24 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 7fb83216b8d091dd108c13b7af86b59f26d3772ad0e0d0e8b5493c4c547dd9554b3184d6e4574e456cc6bb5a598a1dae8929453f4a94dffc7ae1da0665968ddf + checksum: 2e8ccc603126634488332ae108f9ac9ad3d2e1e46b5abef48720f2a25ae5cfc93850301d4ea30a6dc66034877b6abedd31229f622c6fd181347c3c14f7ba3c66 languageName: node linkType: hard -"@docusaurus/theme-translations@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/theme-translations@npm:0.0.0-5809" +"@docusaurus/theme-translations@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/theme-translations@npm:0.0.0-5703" dependencies: fs-extra: ^11.1.1 tslib: ^2.6.0 - checksum: 8ca34bb5e02f021995bea8213f1ed0bb2c9493156b9495ab94a437d3d893a5a970dad871d07d2a80b003ba28c1fd5bd39e175c766884cb2ea442c226400091cf + checksum: 1f952386982008e2e7b07d6b95b1a902a57891321ae2670f13f391a541944ec2c82f5e03d3ed2c459a17113387a51cb5efe824d03037a3cc0b25251451287d1d languageName: node linkType: hard -"@docusaurus/types@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/types@npm:0.0.0-5809" +"@docusaurus/types@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/types@npm:0.0.0-5703" dependencies: - "@mdx-js/mdx": ^3.0.0 "@types/history": ^4.7.11 "@types/react": "*" commander: ^5.1.0 @@ -2174,13 +2179,13 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 97800e1b3f52ed167b78c812c2c652fe84308fc033f057b81043d485f3afb935dd5c30761c9ed7868fcf5ee0728fe3a841edd745285793167d0d1d48a298f5cd + checksum: 46ca6a27c8a0d1b69f744375ee2c24be2deed20c2801231a462b2e37b7a6e1f73ab17b6a5506e05f628957be8be74e4cd960780b9986c8fa4ac1757bd8c74231 languageName: node linkType: hard -"@docusaurus/utils-common@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/utils-common@npm:0.0.0-5809" +"@docusaurus/utils-common@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils-common@npm:0.0.0-5703" dependencies: tslib: ^2.6.0 peerDependencies: @@ -2188,28 +2193,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 4cab3b5aa8b2ddbcfa5245f628fd84257f39312301b9813e36d616996a43dfe4f77abb26907271480128ce983125b4d20837c42e94d18875e6d07edcd4daaef7 + checksum: 8f70f176a99bcbbde22abd759621087ad555e7967cddf85662402f6d55c84d5f44cc1a90bf4e64670fc75b6db646dca4f573b3656a1718d1596d60e0e6c2d23a languageName: node linkType: hard -"@docusaurus/utils-validation@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/utils-validation@npm:0.0.0-5809" +"@docusaurus/utils-validation@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils-validation@npm:0.0.0-5703" dependencies: - "@docusaurus/logger": 0.0.0-5809 - "@docusaurus/utils": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5703 + "@docusaurus/utils": 0.0.0-5703 joi: ^17.9.2 js-yaml: ^4.1.0 tslib: ^2.6.0 - checksum: 2ed6483a1e752a9c291d9ee607cfc3fc9f906cd6fa85687cc2e951cf0400264578e6f2b6bc282ee44eef52ed4c7503896f43e52f18d96064e37f5cb53096dbc4 + checksum: e0d6df549644d8e732daf5407ce110dbccba17dcf84fe1a80091119675d2ce515e26bf6612fefa60b7df2c65dbaeee7ceb1a9f2b947a3705fe1efc7c229794e2 languageName: node linkType: hard -"@docusaurus/utils@npm:0.0.0-5809": - version: 0.0.0-5809 - resolution: "@docusaurus/utils@npm:0.0.0-5809" +"@docusaurus/utils@npm:0.0.0-5703": + version: 0.0.0-5703 + resolution: "@docusaurus/utils@npm:0.0.0-5703" dependencies: - "@docusaurus/logger": 0.0.0-5809 + "@docusaurus/logger": 0.0.0-5703 "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2217,7 +2222,6 @@ __metadata: github-slugger: ^1.5.0 globby: ^11.1.0 gray-matter: ^4.0.3 - jiti: ^1.20.0 js-yaml: ^4.1.0 lodash: ^4.17.21 micromatch: ^4.0.5 @@ -2231,7 +2235,7 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 408969f77fddf7fd621e3025927db7766a6513fa01a2c357cbcd57d1cd41db0abf72282bdb3e94cf6a6ad1b03138e48833c65da84c1c67b917e5660491ce40b6 + checksum: 91f53b17393e29fadb01c039f5394fc257c54bd7d80068f3a3e8a5e52d635d2e3de9fe781340de2ff4eaf691a2d4104865291c05c22ffc8b48a0894f588f3a9e languageName: node linkType: hard @@ -2340,46 +2344,55 @@ __metadata: languageName: node linkType: hard -"@mdx-js/mdx@npm:^3.0.0": - version: 3.0.0 - resolution: "@mdx-js/mdx@npm:3.0.0" +"@mdx-js/mdx@npm:^2.1.5": + version: 2.3.0 + resolution: "@mdx-js/mdx@npm:2.3.0" dependencies: - "@types/estree": ^1.0.0 "@types/estree-jsx": ^1.0.0 - "@types/hast": ^3.0.0 "@types/mdx": ^2.0.0 - collapse-white-space: ^2.0.0 - devlop: ^1.0.0 - estree-util-build-jsx: ^3.0.0 - estree-util-is-identifier-name: ^3.0.0 - estree-util-to-js: ^2.0.0 + estree-util-build-jsx: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + estree-util-to-js: ^1.1.0 estree-walker: ^3.0.0 - hast-util-to-estree: ^3.0.0 - hast-util-to-jsx-runtime: ^2.0.0 - markdown-extensions: ^2.0.0 + hast-util-to-estree: ^2.0.0 + markdown-extensions: ^1.0.0 periscopic: ^3.0.0 - remark-mdx: ^3.0.0 - remark-parse: ^11.0.0 - remark-rehype: ^11.0.0 - source-map: ^0.7.0 - unified: ^11.0.0 - unist-util-position-from-estree: ^2.0.0 - unist-util-stringify-position: ^4.0.0 - unist-util-visit: ^5.0.0 - vfile: ^6.0.0 - checksum: da4305dcfd9012521170e0ed439eb336900fb84a5784e5e3dac2144855fa603325477855e17a04b7c673cc24699cf2bfd611c958f591bb3a9afb5608c259bbd3 + remark-mdx: ^2.0.0 + remark-parse: ^10.0.0 + remark-rehype: ^10.0.0 + unified: ^10.0.0 + unist-util-position-from-estree: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + checksum: d918766a326502ec0b54adee61dc2930daf5b748acb9107f9bfd1ab0dbc4d7b1a4d0dbb9e21da9dd2a9fc2f9950b2973a43c6ba62d3a72eb67a30f6c953e5be8 languageName: node linkType: hard -"@mdx-js/react@npm:^3.0.0": - version: 3.0.0 - resolution: "@mdx-js/react@npm:3.0.0" +"@mdx-js/react@npm:^2.1.5": + version: 2.3.0 + resolution: "@mdx-js/react@npm:2.3.0" dependencies: "@types/mdx": ^2.0.0 - peerDependencies: "@types/react": ">=16" + peerDependencies: react: ">=16" - checksum: a780cff9d7f7639d6fc21c9d4e0a6ac1370c3209ea0db176923df7f9145785309591cf871f227f5135d1fe2accce0d5df9a22fc0530e5dda0c7b4b105705f20d + checksum: f45fe779556e6cd9a787f711274480e0638b63c460f192ebdcd77cc07ffa61e23c98cb46dd46e577093e1cb4997a232a848d1fb0ba850ae204422cf603add524 + languageName: node + linkType: hard + +"@microlink/react-json-view@npm:^1.22.2": + version: 1.22.2 + resolution: "@microlink/react-json-view@npm:1.22.2" + dependencies: + flux: ~4.0.1 + react-base16-styling: ~0.6.0 + react-lifecycles-compat: ~3.0.4 + react-textarea-autosize: ~8.3.2 + peerDependencies: + react: ">= 15" + react-dom: ">= 15" + checksum: 7cc31fcc06f6bac2062aedda565e55a03e1275f5b810f0efee27de8ea60967713f3a13859a16ba775b9b3e8782c044928cf3faee48902a19ce1c58d7ecc6e8d0 languageName: node linkType: hard @@ -2494,13 +2507,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^4.6.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 - languageName: node - linkType: hard - "@sindresorhus/is@npm:^5.2.0": version: 5.3.0 resolution: "@sindresorhus/is@npm:5.3.0" @@ -2977,12 +2983,12 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/hast@npm:3.0.3" +"@types/hast@npm:^2.0.0": + version: 2.3.4 + resolution: "@types/hast@npm:2.3.4" dependencies: "@types/unist": "*" - checksum: ca204207550fd6848ee20b5ba2018fd54f515d59a8b80375cdbe392ba2b4b130dac25fdfbaf9f2a70d2aec9d074a34dc14d4d59d31fa3ede80ef9850afad5d3c + checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e languageName: node linkType: hard @@ -3055,12 +3061,21 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^4.0.0, @types/mdast@npm:^4.0.2": - version: 4.0.3 - resolution: "@types/mdast@npm:4.0.3" +"@types/mdast@npm:^3.0.0": + version: 3.0.10 + resolution: "@types/mdast@npm:3.0.10" dependencies: "@types/unist": "*" - checksum: 345c5a22fccf05f35239ea6313ee4aaf6ebed5927c03ac79744abccb69b9ba5e692f9b771e36a012b79e17429082cada30f579e9c43b8a54e0ffb365431498b6 + checksum: 3f587bfc0a9a2403ecadc220e61031b01734fedaf82e27eb4d5ba039c0eb54db8c85681ccc070ab4df3f7ec711b736a82b990e69caa14c74bf7ac0ccf2ac7313 + languageName: node + linkType: hard + +"@types/mdast@npm:^4.0.0": + version: 4.0.1 + resolution: "@types/mdast@npm:4.0.1" + dependencies: + "@types/unist": "*" + checksum: 3d8fe54a6fb747376c4cc2f05c319730a5737b77844d8ea58d2d696417fa933cd270c20e197f531fc1b4be5e340dc416129f8b4f5fa2f0d2d0cf51850928340a languageName: node linkType: hard @@ -3106,6 +3121,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^6.0.0": + version: 6.0.3 + resolution: "@types/parse5@npm:6.0.3" + checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 + languageName: node + linkType: hard + "@types/prismjs@npm:^1.26.0": version: 1.26.1 resolution: "@types/prismjs@npm:1.26.1" @@ -3166,7 +3188,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": +"@types/react@npm:*, @types/react@npm:>=16": version: 18.2.0 resolution: "@types/react@npm:18.2.0" dependencies: @@ -3274,13 +3296,6 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 - languageName: node - linkType: hard - "@webassemblyjs/ast@npm:1.11.5, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.5 resolution: "@webassemblyjs/ast@npm:1.11.5" @@ -3753,6 +3768,13 @@ __metadata: languageName: node linkType: hard +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + "astring@npm:^1.8.0": version: 1.8.4 resolution: "astring@npm:1.8.4" @@ -3762,6 +3784,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + "at-least-node@npm:^1.0.0": version: 1.0.0 resolution: "at-least-node@npm:1.0.0" @@ -3787,6 +3816,16 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + "babel-loader@npm:^9.1.3": version: 9.1.3 resolution: "babel-loader@npm:9.1.3" @@ -3849,10 +3888,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 0.0.0-5809 - "@docusaurus/module-type-aliases": 0.0.0-5809 - "@docusaurus/plugin-client-redirects": 0.0.0-5809 - "@docusaurus/preset-classic": 0.0.0-5809 + "@docusaurus/core": 0.0.0-5703 + "@docusaurus/module-type-aliases": 0.0.0-5703 + "@docusaurus/plugin-client-redirects": 0.0.0-5703 + "@docusaurus/preset-classic": 0.0.0-5703 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^2.0.0 @@ -3887,6 +3926,13 @@ __metadata: languageName: node linkType: hard +"base16@npm:^1.0.0": + version: 1.0.0 + resolution: "base16@npm:1.0.0" + checksum: 0cd449a2db0f0f957e4b6b57e33bc43c9e20d4f1dd744065db94b5da35e8e71fa4dc4bc7a901e59a84d5f8b6936e3c520e2471787f667fc155fb0f50d8540f5d + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -4007,17 +4053,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.1, browserslist@npm:^4.22.2": - version: 4.22.2 - resolution: "browserslist@npm:4.22.2" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" dependencies: - caniuse-lite: ^1.0.30001565 - electron-to-chromium: ^1.4.601 - node-releases: ^2.0.14 + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 33ddfcd9145220099a7a1ac533cecfe5b7548ffeb29b313e1b57be6459000a1f8fa67e781cf4abee97268ac594d44134fcc4a6b2b4750ceddc9796e3a22076d9 + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 languageName: node linkType: hard @@ -4143,10 +4189,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001565": - version: 1.0.30001579 - resolution: "caniuse-lite@npm:1.0.30001579" - checksum: 7539dcff74d2243a30c428393dc690c87fa34d7da36434731853e9bcfe783757763b2971f5cc878e25242a93e184e53f167d11bd74955af956579f7af71cc764 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001546 + resolution: "caniuse-lite@npm:1.0.30001546" + checksum: d3ef82f5ee94743002c5b2dd61c84342debcc94b2d5907b64ade3514ecfc4f20bbe86a6bc453fd6436d5fbcf6582e07405d7c2077565675a71c83adc238a11fa languageName: node linkType: hard @@ -4185,13 +4231,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "character-entities-html4@npm:^2.0.0": version: 2.1.0 resolution: "character-entities-html4@npm:2.1.0" @@ -4336,6 +4375,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + "clsx@npm:^2.0.0": version: 2.1.0 resolution: "clsx@npm:2.1.0" @@ -4343,13 +4389,6 @@ __metadata: languageName: node linkType: hard -"collapse-white-space@npm:^2.0.0": - version: 2.1.0 - resolution: "collapse-white-space@npm:2.1.0" - checksum: c8978b1f4e7d68bf846cfdba6c6689ce8910511df7d331eb6e6757e51ceffb52768d59a28db26186c91dcf9594955b59be9f8ccd473c485790f5d8b90dc6726f - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -4412,6 +4451,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + "comma-separated-tokens@npm:^2.0.0": version: 2.0.3 resolution: "comma-separated-tokens@npm:2.0.3" @@ -4676,6 +4724,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: 2.6.7 + checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -4906,7 +4963,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -4999,6 +5056,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -5067,7 +5131,7 @@ __metadata: languageName: node linkType: hard -"devlop@npm:^1.0.0, devlop@npm:^1.1.0": +"devlop@npm:^1.0.0": version: 1.1.0 resolution: "devlop@npm:1.1.0" dependencies: @@ -5076,6 +5140,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.0.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -5231,10 +5302,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.601": - version: 1.4.639 - resolution: "electron-to-chromium@npm:1.4.639" - checksum: f16293e69c5c31d836d1a3fdafb07f7a19a0f9a1137893aea879758f6de7d212480f4204e14f0669e653a5a3a1c35f6d1cbd54d4dd9e6ace7e22638270c9984e +"electron-to-chromium@npm:^1.4.535": + version: 1.4.544 + resolution: "electron-to-chromium@npm:1.4.544" + checksum: 78e88e4c56fc4faaa9a405de5e0b51305531e9cdf2c71bcc9296c2c59fb68001472e5b924f8701c873bc855ab5174cf0340642712d7af05c1d8e92356529397e languageName: node linkType: hard @@ -5252,13 +5323,6 @@ __metadata: languageName: node linkType: hard -"emojilib@npm:^2.4.0": - version: 2.4.0 - resolution: "emojilib@npm:2.4.0" - checksum: ea241c342abda5a86ffd3a15d8f4871a616d485f700e03daea38c6ce38205847cea9f6ff8d5e962c00516b004949cc96c6e37b05559ea71a0a496faba53b56da - languageName: node - linkType: hard - "emojis-list@npm:^3.0.0": version: 3.0.0 resolution: "emojis-list@npm:3.0.0" @@ -5266,10 +5330,10 @@ __metadata: languageName: node linkType: hard -"emoticon@npm:^4.0.1": - version: 4.0.1 - resolution: "emoticon@npm:4.0.1" - checksum: 991ab6421927601af4eb44036b60e3125759a4d81f32d2ad96b66e3491e2fdb6a026eeb6bffbfa66724592dca95235570785963607d16961ea73a62ecce715e2 +"emoticon@npm:^3.2.0": + version: 3.2.0 + resolution: "emoticon@npm:3.2.0" + checksum: f30649d18b672ab3139e95cb04f77b2442feb95c99dc59372ff80fbfd639b2bf4018bc68ab0b549bd765aecf8230d7899c43f86cfcc7b6370c06c3232783e24f languageName: node linkType: hard @@ -5428,62 +5492,61 @@ __metadata: languageName: node linkType: hard -"estree-util-attach-comments@npm:^3.0.0": - version: 3.0.0 - resolution: "estree-util-attach-comments@npm:3.0.0" +"estree-util-attach-comments@npm:^2.0.0": + version: 2.1.1 + resolution: "estree-util-attach-comments@npm:2.1.1" dependencies: "@types/estree": ^1.0.0 - checksum: 56254eaef39659e6351919ebc2ae53a37a09290a14571c19e373e9d5fad343a3403d9ad0c23ae465d6e7d08c3e572fd56fb8c793efe6434a261bf1489932dbd5 + checksum: c5c2c41c9a55a169fb4fba9627057843f0d2e21e47a2e3e24318a11ffcf6bc704c0f96f405a529bddac7969b7c44f6cf86711505faaf0c5862c2024419b19704 languageName: node linkType: hard -"estree-util-build-jsx@npm:^3.0.0": - version: 3.0.1 - resolution: "estree-util-build-jsx@npm:3.0.1" +"estree-util-build-jsx@npm:^2.0.0": + version: 2.2.2 + resolution: "estree-util-build-jsx@npm:2.2.2" dependencies: "@types/estree-jsx": ^1.0.0 - devlop: ^1.0.0 - estree-util-is-identifier-name: ^3.0.0 + estree-util-is-identifier-name: ^2.0.0 estree-walker: ^3.0.0 - checksum: 185eff060eda2ba32cecd15904db4f5ba0681159fbdf54f0f6586cd9411e77e733861a833d0aee3415e1d1fd4b17edf08bc9e9872cee98e6ec7b0800e1a85064 + checksum: d008ac36a45d797eadca696f41b4c1ac0587ec0e0b52560cfb0e76d14ef15fc18e526f9023b6e5457dafa9cf3f010c9bb1dfc9c727ebd7cf0ba2ebbaa43919ac languageName: node linkType: hard -"estree-util-is-identifier-name@npm:^3.0.0": - version: 3.0.0 - resolution: "estree-util-is-identifier-name@npm:3.0.0" - checksum: ea3909f0188ea164af0aadeca87c087e3e5da78d76da5ae9c7954ff1340ea3e4679c4653bbf4299ffb70caa9b322218cc1128db2541f3d2976eb9704f9857787 +"estree-util-is-identifier-name@npm:^2.0.0": + version: 2.1.0 + resolution: "estree-util-is-identifier-name@npm:2.1.0" + checksum: cab317a071fafb99cf83b57df7924bccd2e6ab4e252688739e49f00b16cefd168e279c171442b0557c80a1c80ffaa927d670dadea65bb3c9b151efb8e772e89d languageName: node linkType: hard -"estree-util-to-js@npm:^2.0.0": - version: 2.0.0 - resolution: "estree-util-to-js@npm:2.0.0" +"estree-util-to-js@npm:^1.1.0": + version: 1.2.0 + resolution: "estree-util-to-js@npm:1.2.0" dependencies: "@types/estree-jsx": ^1.0.0 astring: ^1.8.0 source-map: ^0.7.0 - checksum: 833edc94ab9978e0918f90261e0a3361bf4564fec4901f326d2237a9235d3f5fc6482da3be5acc545e702c8c7cb8bc5de5c7c71ba3b080eb1975bcfdf3923d79 + checksum: 93a75e1051a6a4f5c631597ecd2ed95129fadbc80a58a10475d6d6b1b076a69393ba4a8d2bb71f698401f64ccca47e3f3828dd0042cac81439b988fae0f5f8e0 languageName: node linkType: hard -"estree-util-value-to-estree@npm:^3.0.1": - version: 3.0.1 - resolution: "estree-util-value-to-estree@npm:3.0.1" +"estree-util-value-to-estree@npm:^2.1.0": + version: 2.1.0 + resolution: "estree-util-value-to-estree@npm:2.1.0" dependencies: "@types/estree": ^1.0.0 is-plain-obj: ^4.0.0 - checksum: 7ab89084aa2c5677aeb0d7350ff21e71c9bbc424dc872a55bb4f25f63a7fd99fc7861626dd89b5544db3d3696212154bcf2b12b63ecd5a59dbfd07915c88aee4 + checksum: 6a930e9c8b85c27845ecca010b5b6b64d3b3a4e7d61117d8342fad7b2b595d7052c671616d1c2269e0954a200666834227ce0abb8488ded49700dfde54167ebb languageName: node linkType: hard -"estree-util-visit@npm:^2.0.0": - version: 2.0.0 - resolution: "estree-util-visit@npm:2.0.0" +"estree-util-visit@npm:^1.0.0": + version: 1.2.1 + resolution: "estree-util-visit@npm:1.2.1" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/unist": ^3.0.0 - checksum: 6444b38f224322945a6d19ea81a8828a0eec64aefb2bf1ea791fe20df496f7b7c543408d637df899e6a8e318b638f66226f16378a33c4c2b192ba5c3f891121f + "@types/unist": ^2.0.0 + checksum: 6feea4fdc43b0ba0f79faf1d57cf32373007e146d4810c7c09c13f5a9c1b8600c1ac57a8d949967cedd2a9a91dddd246e19b59bacfc01e417168b4ebf220f691 languageName: node linkType: hard @@ -5676,6 +5739,37 @@ __metadata: languageName: node linkType: hard +"fbemitter@npm:^3.0.0": + version: 3.0.0 + resolution: "fbemitter@npm:3.0.0" + dependencies: + fbjs: ^3.0.0 + checksum: 069690b8cdff3521ade3c9beb92ba0a38d818a86ef36dff8690e66749aef58809db4ac0d6938eb1cacea2dbef5f2a508952d455669590264cdc146bbe839f605 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0, fbjs@npm:^3.0.1": + version: 3.0.4 + resolution: "fbjs@npm:3.0.4" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^0.7.30 + checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 + languageName: node + linkType: hard + "feed@npm:^4.2.2": version: 4.2.2 resolution: "feed@npm:4.2.2" @@ -5767,7 +5861,19 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0": +"flux@npm:~4.0.1": + version: 4.0.4 + resolution: "flux@npm:4.0.4" + dependencies: + fbemitter: ^3.0.0 + fbjs: ^3.0.1 + peerDependencies: + react: ^15.0.2 || ^16.0.0 || ^17.0.0 + checksum: 8fa5c2f9322258de3e331f67c6f1078a7f91c4dec9dbe8a54c4b8a80eed19a4f91889028b768668af4a796e8f2ee75e461e1571b8615432a3920ae95cc4ff794 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9": version: 1.15.4 resolution: "follow-redirects@npm:1.15.4" peerDependenciesMeta: @@ -5815,6 +5921,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + "format@npm:^0.2.0": version: 0.2.2 resolution: "format@npm:0.2.2" @@ -6192,133 +6309,103 @@ __metadata: languageName: node linkType: hard -"hast-util-from-parse5@npm:^8.0.0": - version: 8.0.1 - resolution: "hast-util-from-parse5@npm:8.0.1" +"hast-util-from-parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "hast-util-from-parse5@npm:7.1.2" dependencies: - "@types/hast": ^3.0.0 - "@types/unist": ^3.0.0 - devlop: ^1.0.0 - hastscript: ^8.0.0 + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + hastscript: ^7.0.0 property-information: ^6.0.0 - vfile: ^6.0.0 - vfile-location: ^5.0.0 + vfile: ^5.0.0 + vfile-location: ^4.0.0 web-namespaces: ^2.0.0 - checksum: fdd1ab8b03af13778ecb94ef9a58b1e3528410cdfceb3d6bb7600508967d0d836b451bc7bc3baf66efb7c730d3d395eea4bb1b30352b0162823d9f0de976774b + checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb languageName: node linkType: hard -"hast-util-parse-selector@npm:^4.0.0": - version: 4.0.0 - resolution: "hast-util-parse-selector@npm:4.0.0" +"hast-util-parse-selector@npm:^3.0.0": + version: 3.1.1 + resolution: "hast-util-parse-selector@npm:3.1.1" dependencies: - "@types/hast": ^3.0.0 - checksum: 76087670d3b0b50b23a6cb70bca53a6176d6608307ccdbb3ed18b650b82e7c3513bfc40348f1389dc0c5ae872b9a768851f4335f44654abd7deafd6974c52402 + "@types/hast": ^2.0.0 + checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 languageName: node linkType: hard -"hast-util-raw@npm:^9.0.0": - version: 9.0.1 - resolution: "hast-util-raw@npm:9.0.1" +"hast-util-raw@npm:^7.2.0": + version: 7.2.3 + resolution: "hast-util-raw@npm:7.2.3" dependencies: - "@types/hast": ^3.0.0 - "@types/unist": ^3.0.0 - "@ungap/structured-clone": ^1.0.0 - hast-util-from-parse5: ^8.0.0 - hast-util-to-parse5: ^8.0.0 - html-void-elements: ^3.0.0 - mdast-util-to-hast: ^13.0.0 - parse5: ^7.0.0 - unist-util-position: ^5.0.0 - unist-util-visit: ^5.0.0 - vfile: ^6.0.0 + "@types/hast": ^2.0.0 + "@types/parse5": ^6.0.0 + hast-util-from-parse5: ^7.0.0 + hast-util-to-parse5: ^7.0.0 + html-void-elements: ^2.0.0 + parse5: ^6.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 web-namespaces: ^2.0.0 zwitch: ^2.0.0 - checksum: 4b486eb4782eafb471ae639d45c14ac8797676518cf5da16adc973f52d7b8e1075a1451558c023b390820bd9fd213213e6248a2dae71b68ac5040b277509b8d9 + checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f languageName: node linkType: hard -"hast-util-to-estree@npm:^3.0.0": - version: 3.1.0 - resolution: "hast-util-to-estree@npm:3.1.0" +"hast-util-to-estree@npm:^2.0.0": + version: 2.3.2 + resolution: "hast-util-to-estree@npm:2.3.2" dependencies: "@types/estree": ^1.0.0 "@types/estree-jsx": ^1.0.0 - "@types/hast": ^3.0.0 + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 comma-separated-tokens: ^2.0.0 - devlop: ^1.0.0 - estree-util-attach-comments: ^3.0.0 - estree-util-is-identifier-name: ^3.0.0 - hast-util-whitespace: ^3.0.0 - mdast-util-mdx-expression: ^2.0.0 - mdast-util-mdx-jsx: ^3.0.0 - mdast-util-mdxjs-esm: ^2.0.0 + estree-util-attach-comments: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + hast-util-whitespace: ^2.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdxjs-esm: ^1.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 - style-to-object: ^0.4.0 - unist-util-position: ^5.0.0 + style-to-object: ^0.4.1 + unist-util-position: ^4.0.0 zwitch: ^2.0.0 - checksum: 61272f7c18c9d2a5e34df7cfd2c97cbf12f6e9d05114d60e4dedd64e5576565eb1e35c78b9213c909bb8f984f0f8e9c49b568f04bdb444b83d0bca9159e14f3c + checksum: 721167e275c1b0b9b1dcb35964a39f6180e22983ee7b56748ecab9f6cc35fe5229fd6e30a8eb4826caeee7eed88014ce4710bd79146c080d4dd281058ba09a39 languageName: node linkType: hard -"hast-util-to-jsx-runtime@npm:^2.0.0": - version: 2.3.0 - resolution: "hast-util-to-jsx-runtime@npm:2.3.0" +"hast-util-to-parse5@npm:^7.0.0": + version: 7.1.0 + resolution: "hast-util-to-parse5@npm:7.1.0" dependencies: - "@types/estree": ^1.0.0 - "@types/hast": ^3.0.0 - "@types/unist": ^3.0.0 + "@types/hast": ^2.0.0 comma-separated-tokens: ^2.0.0 - devlop: ^1.0.0 - estree-util-is-identifier-name: ^3.0.0 - hast-util-whitespace: ^3.0.0 - mdast-util-mdx-expression: ^2.0.0 - mdast-util-mdx-jsx: ^3.0.0 - mdast-util-mdxjs-esm: ^2.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - style-to-object: ^1.0.0 - unist-util-position: ^5.0.0 - vfile-message: ^4.0.0 - checksum: 599a97c6ec61c1430776813d7fb42e6f96032bf4a04dfcbb8eceef3bc8d1845ecf242387a4426b9d3f52320dbbfa26450643b81124b3d6a0b9bbb0fff4d0ba83 - languageName: node - linkType: hard - -"hast-util-to-parse5@npm:^8.0.0": - version: 8.0.0 - resolution: "hast-util-to-parse5@npm:8.0.0" - dependencies: - "@types/hast": ^3.0.0 - comma-separated-tokens: ^2.0.0 - devlop: ^1.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 web-namespaces: ^2.0.0 zwitch: ^2.0.0 - checksum: 137469209cb2b32b57387928878dc85310fbd5afa4807a8da69529199bb1d19044bfc95b50c3dc68d4fb2b6cb8bf99b899285597ab6ab318f50422eefd5599dd + checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b languageName: node linkType: hard -"hast-util-whitespace@npm:^3.0.0": - version: 3.0.0 - resolution: "hast-util-whitespace@npm:3.0.0" - dependencies: - "@types/hast": ^3.0.0 - checksum: 41d93ccce218ba935dc3c12acdf586193c35069489c8c8f50c2aa824c00dec94a3c78b03d1db40fa75381942a189161922e4b7bca700b3a2cc779634c351a1e4 +"hast-util-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "hast-util-whitespace@npm:2.0.1" + checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 languageName: node linkType: hard -"hastscript@npm:^8.0.0": - version: 8.0.0 - resolution: "hastscript@npm:8.0.0" +"hastscript@npm:^7.0.0, hastscript@npm:^7.1.0": + version: 7.2.0 + resolution: "hastscript@npm:7.2.0" dependencies: - "@types/hast": ^3.0.0 + "@types/hast": ^2.0.0 comma-separated-tokens: ^2.0.0 - hast-util-parse-selector: ^4.0.0 + hast-util-parse-selector: ^3.0.0 property-information: ^6.0.0 space-separated-tokens: ^2.0.0 - checksum: ae3c20223e7b847320c0f98b6fb3c763ebe1bf3913c5805fbc176cf84553a9db1117ca34cf842a5235890b4b9ae0e94501bfdc9a9b870a5dbf5fc52426db1097 + checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae languageName: node linkType: hard @@ -6414,10 +6501,10 @@ __metadata: languageName: node linkType: hard -"html-void-elements@npm:^3.0.0": - version: 3.0.0 - resolution: "html-void-elements@npm:3.0.0" - checksum: 59be397525465a7489028afa064c55763d9cccd1d7d9f630cca47137317f0e897a9ca26cef7e745e7cff1abc44260cfa407742b243a54261dfacd42230e94fce +"html-void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "html-void-elements@npm:2.0.1" + checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 languageName: node linkType: hard @@ -6731,13 +6818,6 @@ __metadata: languageName: node linkType: hard -"inline-style-parser@npm:0.2.2": - version: 0.2.2 - resolution: "inline-style-parser@npm:0.2.2" - checksum: 698893d6542d4e7c0377936a1c7daec34a197765bd77c5599384756a95ce8804e6b79347b783aa591d5e9c6f3d33dae74c6d4cad3a94647eb05f3a785e927a3f - languageName: node - linkType: hard - "interpret@npm:^1.0.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" @@ -6808,6 +6888,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + "is-ci@npm:^3.0.1": version: 3.0.1 resolution: "is-ci@npm:3.0.1" @@ -7095,16 +7182,16 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.18.2, jiti@npm:^1.20.0": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" +"jiti@npm:^1.18.2": + version: 1.20.0 + resolution: "jiti@npm:1.20.0" bin: jiti: bin/jiti.js - checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 + checksum: 7924062b5675142e3e272a27735be84b7bfc0a0eb73217fc2dcafa034f37c4f7b4b9ffc07dd98bcff0f739a8811ce1544db205ae7e97b1c86f0df92c65ce3c72 languageName: node linkType: hard -"joi@npm:^17.9.2": +"joi@npm:^17.7.0, joi@npm:^17.9.2": version: 17.11.0 resolution: "joi@npm:17.11.0" dependencies: @@ -7238,6 +7325,13 @@ __metadata: languageName: node linkType: hard +"kleur@npm:^4.0.3": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 + languageName: node + linkType: hard + "klona@npm:^2.0.4": version: 2.0.6 resolution: "klona@npm:2.0.6" @@ -7338,6 +7432,13 @@ __metadata: languageName: node linkType: hard +"lodash.curry@npm:^4.0.1": + version: 4.1.1 + resolution: "lodash.curry@npm:4.1.1" + checksum: 9192b70fe7df4d1ff780c0260bee271afa9168c93fe4fa24bc861900240531b59781b5fdaadf4644fea8f4fbcd96f0700539ab294b579ffc1022c6c15dcc462a + languageName: node + linkType: hard + "lodash.debounce@npm:^4.0.8": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" @@ -7359,6 +7460,13 @@ __metadata: languageName: node linkType: hard +"lodash.flow@npm:^3.3.0": + version: 3.5.0 + resolution: "lodash.flow@npm:3.5.0" + checksum: a9a62ad344e3c5a1f42bc121da20f64dd855aaafecee24b1db640f29b88bd165d81c37ff7e380a7191de6f70b26f5918abcebbee8396624f78f3618a0b18634c + languageName: node + linkType: hard + "lodash.invokemap@npm:^4.6.0": version: 4.6.0 resolution: "lodash.invokemap@npm:4.6.0" @@ -7491,10 +7599,10 @@ __metadata: languageName: node linkType: hard -"markdown-extensions@npm:^2.0.0": - version: 2.0.0 - resolution: "markdown-extensions@npm:2.0.0" - checksum: ec4ffcb0768f112e778e7ac74cb8ef22a966c168c3e6c29829f007f015b0a0b5c79c73ee8599a0c72e440e7f5cfdbf19e80e2d77b9a313b8f66e180a330cf1b2 +"markdown-extensions@npm:^1.0.0": + version: 1.1.1 + resolution: "markdown-extensions@npm:1.1.1" + checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e languageName: node linkType: hard @@ -7505,31 +7613,61 @@ __metadata: languageName: node linkType: hard -"mdast-util-directive@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-directive@npm:3.0.0" +"mdast-util-definitions@npm:^5.0.0": + version: 5.1.2 + resolution: "mdast-util-definitions@npm:5.1.2" dependencies: - "@types/mdast": ^4.0.0 - "@types/unist": ^3.0.0 - devlop: ^1.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - parse-entities: ^4.0.0 - stringify-entities: ^4.0.0 - unist-util-visit-parents: ^6.0.0 - checksum: 593afdc4f39f99bb198f3774bf4648cb546cb99a055e40c82262a7faab10926d2529a725d0d3945300ed0a1f07c6c84215a3f76b899a89b3f410ec7375bbab17 + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae languageName: node linkType: hard -"mdast-util-find-and-replace@npm:^3.0.0, mdast-util-find-and-replace@npm:^3.0.1": - version: 3.0.1 - resolution: "mdast-util-find-and-replace@npm:3.0.1" +"mdast-util-directive@npm:^2.0.0": + version: 2.2.4 + resolution: "mdast-util-directive@npm:2.2.4" dependencies: - "@types/mdast": ^4.0.0 + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + mdast-util-from-markdown: ^1.3.0 + mdast-util-to-markdown: ^1.5.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-visit-parents: ^5.1.3 + checksum: d04112761659c912b5d7db8f8c035918da52e79ce8cb598c7c270c6f678db0c22f3dea7894b30dec46852409f926306b84ca95683dd1e28731835eb5cb4fbda4 + languageName: node + linkType: hard + +"mdast-util-find-and-replace@npm:^2.0.0": + version: 2.2.2 + resolution: "mdast-util-find-and-replace@npm:2.2.2" + dependencies: + "@types/mdast": ^3.0.0 escape-string-regexp: ^5.0.0 - unist-util-is: ^6.0.0 - unist-util-visit-parents: ^6.0.0 - checksum: 05d5c4ff02e31db2f8a685a13bcb6c3f44e040bd9dfa54c19a232af8de5268334c8755d79cb456ed4cced1300c4fb83e88444c7ae8ee9ff16869a580f29d08cd + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.0.0 + checksum: b4ce463c43fe6e1c38a53a89703f755c84ab5437f49bff9a0ac751279733332ca11c85ed0262aa6c17481f77b555d26ca6d64e70d6814f5b8d12d34a3e53a60b + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^1.0.0, mdast-util-from-markdown@npm:^1.1.0, mdast-util-from-markdown@npm:^1.3.0": + version: 1.3.0 + resolution: "mdast-util-from-markdown@npm:1.3.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 + mdast-util-to-string: ^3.1.0 + micromark: ^3.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-decode-string: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + uvu: ^0.5.0 + checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f languageName: node linkType: hard @@ -7567,142 +7705,142 @@ __metadata: languageName: node linkType: hard -"mdast-util-gfm-autolink-literal@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-autolink-literal@npm:2.0.0" +"mdast-util-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" dependencies: - "@types/mdast": ^4.0.0 + "@types/mdast": ^3.0.0 ccount: ^2.0.0 - devlop: ^1.0.0 - mdast-util-find-and-replace: ^3.0.0 - micromark-util-character: ^2.0.0 - checksum: 10322662e5302964bed7c9829c5fd3b0c9899d4f03e63fb8620ab141cf4f3de9e61fcb4b44d46aacc8a23f82bcd5d900980a211825dfe026b1dab5fdbc3e8742 + mdast-util-find-and-replace: ^2.0.0 + micromark-util-character: ^1.0.0 + checksum: 1748a8727cfc533bac0c287d6e72d571d165bfa77ae0418be4828177a3ec73c02c3f2ee534d87eb75cbaffa00c0866853bbcc60ae2255babb8210f7636ec2ce2 languageName: node linkType: hard -"mdast-util-gfm-footnote@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-footnote@npm:2.0.0" +"mdast-util-gfm-footnote@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-footnote@npm:1.0.2" dependencies: - "@types/mdast": ^4.0.0 - devlop: ^1.1.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - micromark-util-normalize-identifier: ^2.0.0 - checksum: 45d26b40e7a093712e023105791129d76e164e2168d5268e113298a22de30c018162683fb7893cdc04ab246dac0087eed708b2a136d1d18ed2b32b3e0cae4a79 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + micromark-util-normalize-identifier: ^1.0.0 + checksum: 2d77505f9377ed7e14472ef5e6b8366c3fec2cf5f936bb36f9fbe5b97ccb7cce0464d9313c236fa86fb844206fd585db05707e4fcfb755e4fc1864194845f1f6 languageName: node linkType: hard -"mdast-util-gfm-strikethrough@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-strikethrough@npm:2.0.0" +"mdast-util-gfm-strikethrough@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" dependencies: - "@types/mdast": ^4.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: fe9b1d0eba9b791ff9001c008744eafe3dd7a81b085f2bf521595ce4a8e8b1b44764ad9361761ad4533af3e5d913d8ad053abec38172031d9ee32a8ebd1c7dbd + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 17003340ff1bba643ec4a59fd4370fc6a32885cab2d9750a508afa7225ea71449fb05acaef60faa89c6378b8bcfbd86a9d94b05f3c6651ff27a60e3ddefc2549 languageName: node linkType: hard -"mdast-util-gfm-table@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-table@npm:2.0.0" +"mdast-util-gfm-table@npm:^1.0.0": + version: 1.0.7 + resolution: "mdast-util-gfm-table@npm:1.0.7" dependencies: - "@types/mdast": ^4.0.0 - devlop: ^1.0.0 + "@types/mdast": ^3.0.0 markdown-table: ^3.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: 063a627fd0993548fd63ca0c24c437baf91ba7d51d0a38820bd459bc20bf3d13d7365ef8d28dca99176dd5eb26058f7dde51190479c186dfe6af2e11202957c9 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 8b8c401bb4162e53f072a2dff8efbca880fd78d55af30601c791315ab6722cb2918176e8585792469a0c530cebb9df9b4e7fede75fdc4d83df2839e238836692 languageName: node linkType: hard -"mdast-util-gfm-task-list-item@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-task-list-item@npm:2.0.0" +"mdast-util-gfm-task-list-item@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" dependencies: - "@types/mdast": ^4.0.0 - devlop: ^1.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: 37db90c59b15330fc54d790404abf5ef9f2f83e8961c53666fe7de4aab8dd5e6b3c296b6be19797456711a89a27840291d8871ff0438e9b4e15c89d170efe072 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: c9b86037d6953b84f11fb2fc3aa23d5b8e14ca0dfcb0eb2fb289200e172bb9d5647bfceb4f86606dc6d935e8d58f6a458c04d3e55e87ff8513c7d4ade976200b languageName: node linkType: hard -"mdast-util-gfm@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-gfm@npm:3.0.0" +"mdast-util-gfm@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-gfm@npm:2.0.2" dependencies: - mdast-util-from-markdown: ^2.0.0 - mdast-util-gfm-autolink-literal: ^2.0.0 - mdast-util-gfm-footnote: ^2.0.0 - mdast-util-gfm-strikethrough: ^2.0.0 - mdast-util-gfm-table: ^2.0.0 - mdast-util-gfm-task-list-item: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: 62039d2f682ae3821ea1c999454863d31faf94d67eb9b746589c7e136076d7fb35fabc67e02f025c7c26fd7919331a0ee1aabfae24f565d9a6a9ebab3371c626 + mdast-util-from-markdown: ^1.0.0 + mdast-util-gfm-autolink-literal: ^1.0.0 + mdast-util-gfm-footnote: ^1.0.0 + mdast-util-gfm-strikethrough: ^1.0.0 + mdast-util-gfm-table: ^1.0.0 + mdast-util-gfm-task-list-item: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 7078cb985255208bcbce94a121906417d38353c6b1a9acbe56ee8888010d3500608b5d51c16b0999ac63ca58848fb13012d55f26930ff6c6f3450f053d56514e languageName: node linkType: hard -"mdast-util-mdx-expression@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-mdx-expression@npm:2.0.0" +"mdast-util-mdx-expression@npm:^1.0.0": + version: 1.3.2 + resolution: "mdast-util-mdx-expression@npm:1.3.2" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^3.0.0 - "@types/mdast": ^4.0.0 - devlop: ^1.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: 4e1183000e183e07a7264e192889b4fd57372806103031c71b9318967f85fd50a5dd0f92ef14f42c331e77410808f5de3341d7bc8ad4ee91b7fa8f0a30043a8a + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: e4c90f26deaa5eb6217b0a9af559a80de41da02ab3bcd864c56bed3304b056ae703896e9876bc6ded500f4aff59f4de5cbf6a4b109a5ba408f2342805fe6dc05 languageName: node linkType: hard -"mdast-util-mdx-jsx@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-mdx-jsx@npm:3.0.0" +"mdast-util-mdx-jsx@npm:^2.0.0": + version: 2.1.2 + resolution: "mdast-util-mdx-jsx@npm:2.1.2" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^3.0.0 - "@types/mdast": ^4.0.0 - "@types/unist": ^3.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 ccount: ^2.0.0 - devlop: ^1.1.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 + mdast-util-from-markdown: ^1.1.0 + mdast-util-to-markdown: ^1.3.0 parse-entities: ^4.0.0 stringify-entities: ^4.0.0 - unist-util-remove-position: ^5.0.0 - unist-util-stringify-position: ^4.0.0 - vfile-message: ^4.0.0 - checksum: 48fe1ba617205f3776ca2030d195adbdb42bb6c53326534db3f5bdd28abe7895103af8c4dfda7cbe2911e8cd71921bc8a82fe40856565e57af8b4f8a79c8c126 + unist-util-remove-position: ^4.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 637e0bbd97c0c783f6b12bb05ccb1edaec076c5aa6d349147d77b8e6e10677f1be8e2870c05b1896f69095c9bc527f34be72b349b30737ab2e499bfc579b3a28 languageName: node linkType: hard -"mdast-util-mdx@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-mdx@npm:3.0.0" - dependencies: - mdast-util-from-markdown: ^2.0.0 - mdast-util-mdx-expression: ^2.0.0 - mdast-util-mdx-jsx: ^3.0.0 - mdast-util-mdxjs-esm: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: e2b007d826fcd49fd57ed03e190753c8b0f7d9eff6c7cb26ba609cde15cd3a472c0cd5e4a1ee3e39a40f14be22fdb57de243e093cea0c064d6f3366cff3e3af2 - languageName: node - linkType: hard - -"mdast-util-mdxjs-esm@npm:^2.0.0": +"mdast-util-mdx@npm:^2.0.0": version: 2.0.1 - resolution: "mdast-util-mdxjs-esm@npm:2.0.1" + resolution: "mdast-util-mdx@npm:2.0.1" + dependencies: + mdast-util-from-markdown: ^1.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdx-jsx: ^2.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 7303149230a26e524e319833b782bffca94e49cdab012996618701259bd056e014ca22a35d25ffa8880ba9064ee126a2a002f01e5c90a31ca726339ed775875e + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^1.0.0": + version: 1.3.1 + resolution: "mdast-util-mdxjs-esm@npm:1.3.1" dependencies: "@types/estree-jsx": ^1.0.0 - "@types/hast": ^3.0.0 - "@types/mdast": ^4.0.0 - devlop: ^1.0.0 - mdast-util-from-markdown: ^2.0.0 - mdast-util-to-markdown: ^2.0.0 - checksum: 1f9dad04d31d59005332e9157ea9510dc1d03092aadbc607a10475c7eec1c158b475aa0601a3a4f74e13097ca735deb8c2d9d37928ddef25d3029fd7c9e14dc3 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: ee78a4f58adfec38723cbc920f05481201ebb001eff3982f2d0e5f5ce5c75685e732e9d361ad4a1be8b936b4e5de0f2599cb96b92ad4bd92698ac0c4a09bbec3 + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + unist-util-is: ^5.0.0 + checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 languageName: node linkType: hard @@ -7716,20 +7854,35 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-hast@npm:^13.0.0": - version: 13.1.0 - resolution: "mdast-util-to-hast@npm:13.1.0" +"mdast-util-to-hast@npm:^12.1.0": + version: 12.3.0 + resolution: "mdast-util-to-hast@npm:12.3.0" dependencies: - "@types/hast": ^3.0.0 - "@types/mdast": ^4.0.0 - "@ungap/structured-clone": ^1.0.0 - devlop: ^1.0.0 - micromark-util-sanitize-uri: ^2.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-definitions: ^5.0.0 + micromark-util-sanitize-uri: ^1.1.0 trim-lines: ^3.0.0 - unist-util-position: ^5.0.0 - unist-util-visit: ^5.0.0 - vfile: ^6.0.0 - checksum: 640bc897286af8fe760cd477fb04bbf544a5a897cdc2220ce36fe2f892f067b483334610387aeb969511bd78a2d841a54851079cd676ac513d6a5ff75852514e + unist-util-generated: ^2.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0, mdast-util-to-markdown@npm:^1.5.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^3.0.0 + mdast-util-to-string: ^3.0.0 + micromark-util-decode-string: ^1.0.0 + unist-util-visit: ^4.0.0 + zwitch: ^2.0.0 + checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 languageName: node linkType: hard @@ -7749,6 +7902,15 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0, mdast-util-to-string@npm:^3.2.0": + version: 3.2.0 + resolution: "mdast-util-to-string@npm:3.2.0" + dependencies: + "@types/mdast": ^3.0.0 + checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 + languageName: node + linkType: hard + "mdast-util-to-string@npm:^4.0.0": version: 4.0.0 resolution: "mdast-util-to-string@npm:4.0.0" @@ -7809,6 +7971,30 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": + version: 1.0.6 + resolution: "micromark-core-commonmark@npm:1.0.6" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-factory-destination: ^1.0.0 + micromark-factory-label: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-factory-title: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-html-tag-name: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 4b483c46077f696ed310f6d709bb9547434c218ceb5c1220fde1707175f6f68b44da15ab8668f9c801e1a123210071e3af883a7d1215122c913fd626f122bfc2 + languageName: node + linkType: hard + "micromark-core-commonmark@npm:^2.0.0": version: 2.0.0 resolution: "micromark-core-commonmark@npm:2.0.0" @@ -7833,18 +8019,18 @@ __metadata: languageName: node linkType: hard -"micromark-extension-directive@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-directive@npm:3.0.0" +"micromark-extension-directive@npm:^2.0.0": + version: 2.2.0 + resolution: "micromark-extension-directive@npm:2.2.0" dependencies: - devlop: ^1.0.0 - micromark-factory-space: ^2.0.0 - micromark-factory-whitespace: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 + micromark-factory-space: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 parse-entities: ^4.0.0 - checksum: 8350106bdf039a544cba64cf7932261a710e07d73d43d6c645dd2b16577f30ebd04abf762e8ca74266f5de19938e1eeff6c237d79f8244dea23aef7f90df2c31 + uvu: ^0.5.0 + checksum: 1256374a1327c2aecd4b3592de2c62ddf4798441d3a953f8414ecde05da2595a47428d94959b0bdb67605d4e195b95eb0b6e18ece44a50cbdf5a9c2c25d21905 languageName: node linkType: hard @@ -7860,172 +8046,181 @@ __metadata: languageName: node linkType: hard -"micromark-extension-gfm-autolink-literal@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-gfm-autolink-literal@npm:2.0.0" +"micromark-extension-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" dependencies: - micromark-util-character: ^2.0.0 - micromark-util-sanitize-uri: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: fa16d59528239262d6d04d539a052baf1f81275954ec8bfadea40d81bfc25667d5c8e68b225a5358626df5e30a3933173a67fdad2fed011d37810a10b770b0b2 + micromark-util-character: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 languageName: node linkType: hard -"micromark-extension-gfm-footnote@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-gfm-footnote@npm:2.0.0" +"micromark-extension-gfm-footnote@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-extension-gfm-footnote@npm:1.1.0" dependencies: - devlop: ^1.0.0 - micromark-core-commonmark: ^2.0.0 - micromark-factory-space: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-normalize-identifier: ^2.0.0 - micromark-util-sanitize-uri: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: a426fddecfac6144fc622b845cd2dc09d46faa75be5b76ff022cb76a03301b1d4929a5e5e41e071491787936be65e03d0b03c7aebc0e0136b3cdbfadadd6632c + micromark-core-commonmark: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 7a5408625ef2cca5cc18e6591c2522a8a409f466a6fbc0ed938950aafe5fc9bf1eada65e1a4dd4e36ec3e7b24920de1f4b3e2c365d8f5cd2d6ccb1f8c2377c49 languageName: node linkType: hard -"micromark-extension-gfm-strikethrough@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-gfm-strikethrough@npm:2.0.0" +"micromark-extension-gfm-strikethrough@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.5" dependencies: - devlop: ^1.0.0 - micromark-util-chunked: ^2.0.0 - micromark-util-classify-character: ^2.0.0 - micromark-util-resolve-all: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: 4e35fbbf364bfce08066b70acd94b9d393a8fd09a5afbe0bae70d0c8a174640b1ba86ab6b78ee38f411a813e2a718b07959216cf0063d823ba1c569a7694e5ad + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 548c0f257753d735c741533411957f04253da53db31e1f398dc5dc1de9f398c45586baad5223dce8f3b55f9433c255e6eb695fc3104256b8c332dd8737136882 languageName: node linkType: hard -"micromark-extension-gfm-table@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-gfm-table@npm:2.0.0" +"micromark-extension-gfm-table@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-table@npm:1.0.5" dependencies: - devlop: ^1.0.0 - micromark-factory-space: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: 71484dcf8db7b189da0528f472cc81e4d6d1a64ae43bbe7fcb7e2e1dba758a0a4f785f9f1afb9459fe5b4a02bbe023d78c95c05204414a14083052eb8219e5eb + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef languageName: node linkType: hard -"micromark-extension-gfm-tagfilter@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-gfm-tagfilter@npm:2.0.0" +"micromark-extension-gfm-tagfilter@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.2" dependencies: - micromark-util-types: ^2.0.0 - checksum: cf21552f4a63592bfd6c96ae5d64a5f22bda4e77814e3f0501bfe80e7a49378ad140f827007f36044666f176b3a0d5fea7c2e8e7973ce4b4579b77789f01ae95 + micromark-util-types: ^1.0.0 + checksum: 7d2441df51f890c86f8e7cf7d331a570b69c8105fa1c2fc5b737cb739502c16c8ee01cf35550a8a78f89497c5dfacc97cf82d55de6274e8320f3aec25e2b0dd2 languageName: node linkType: hard -"micromark-extension-gfm-task-list-item@npm:^2.0.0": +"micromark-extension-gfm-task-list-item@npm:^1.0.0": + version: 1.0.4 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.4" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 2575bb47b320f2479d3cc2492ba7cf79d6baa9cd0200c0ed120fd0e318e64e8ebab4a93a056a3781cb5107193f3b36ebd2d86a5928308bef45fc121291f97eb5 + languageName: node + linkType: hard + +"micromark-extension-gfm@npm:^2.0.0": version: 2.0.1 - resolution: "micromark-extension-gfm-task-list-item@npm:2.0.1" + resolution: "micromark-extension-gfm@npm:2.0.1" dependencies: - devlop: ^1.0.0 - micromark-factory-space: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: 80e569ab1a1d1f89d86af91482e9629e24b7e3f019c9d7989190f36a9367c6de723b2af48e908c1b73479f35b2215d3d38c1fdbf02ab01eb2fc90a59d1cf4465 + micromark-extension-gfm-autolink-literal: ^1.0.0 + micromark-extension-gfm-footnote: ^1.0.0 + micromark-extension-gfm-strikethrough: ^1.0.0 + micromark-extension-gfm-table: ^1.0.0 + micromark-extension-gfm-tagfilter: ^1.0.0 + micromark-extension-gfm-task-list-item: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: b181479c87be38d5ae8d28e6dc52fab73c894fd2706876746f27a91fb186644ce03532a9c35dca2186327a0e2285cd5242ad0361dc89adedd4a50376ffd94e22 languageName: node linkType: hard -"micromark-extension-gfm@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-gfm@npm:3.0.0" +"micromark-extension-mdx-expression@npm:^1.0.0": + version: 1.0.4 + resolution: "micromark-extension-mdx-expression@npm:1.0.4" dependencies: - micromark-extension-gfm-autolink-literal: ^2.0.0 - micromark-extension-gfm-footnote: ^2.0.0 - micromark-extension-gfm-strikethrough: ^2.0.0 - micromark-extension-gfm-table: ^2.0.0 - micromark-extension-gfm-tagfilter: ^2.0.0 - micromark-extension-gfm-task-list-item: ^2.0.0 - micromark-util-combine-extensions: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: 2060fa62666a09532d6b3a272d413bc1b25bbb262f921d7402795ac021e1362c8913727e33d7528d5b4ccaf26922ec51208c43f795a702964817bc986de886c9 + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: d19a31f9813dd5d4ad96b99e35b7c48067e69d75f92ec670dad5242857fb7688ba8b7c6a15616797b5df25dd89fd3b54916f93cb60ce2cfe97aca84739b45954 languageName: node linkType: hard -"micromark-extension-mdx-expression@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-mdx-expression@npm:3.0.0" - dependencies: - "@types/estree": ^1.0.0 - devlop: ^1.0.0 - micromark-factory-mdx-expression: ^2.0.0 - micromark-factory-space: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-events-to-acorn: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: abd6ba0acdebc03bc0836c51a1ec4ca28e0be86f10420dd8cfbcd6c10dd37cd3f31e7c8b9792e9276e7526748883f4a30d0803d72b6285dae47d4e5348c23a10 - languageName: node - linkType: hard - -"micromark-extension-mdx-jsx@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-mdx-jsx@npm:3.0.0" +"micromark-extension-mdx-jsx@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdx-jsx@npm:1.0.3" dependencies: "@types/acorn": ^4.0.0 - "@types/estree": ^1.0.0 - devlop: ^1.0.0 - estree-util-is-identifier-name: ^3.0.0 - micromark-factory-mdx-expression: ^2.0.0 - micromark-factory-space: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - vfile-message: ^4.0.0 - checksum: 5e2f45d381d1ce43afadc5376427b42ef8cd2a574ca3658473254eabe84db99ef1abc03055b3d86728fac7f1edfb1076e6f2f322ed8bfb1f2f14cafc2c8f0d0e + estree-util-is-identifier-name: ^2.0.0 + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 1a5566890aabc52fe96b78e3a3a507dee03a2232e44b9360b00617734e156f934e85bc6a477fbb856c793fe33c9fb7d2207a4f50e680168c0d04ba9c9336d960 languageName: node linkType: hard -"micromark-extension-mdx-md@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-extension-mdx-md@npm:2.0.0" +"micromark-extension-mdx-md@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdx-md@npm:1.0.0" dependencies: - micromark-util-types: ^2.0.0 - checksum: 7daf03372fd7faddf3f0ac87bdb0debb0bb770f33b586f72251e1072b222ceee75400ab6194c0e130dbf1e077369a5b627be6e9130d7a2e9e6b849f0d18ff246 + micromark-util-types: ^1.0.0 + checksum: b4f205e1d5f0946b4755541ef44ffd0b3be8c7ecfc08d8b139b6a21fbd3ff62d8fdb6b7e6d17bd9a3b610450267f43a41703dc48b341da9addd743a28cdefa64 languageName: node linkType: hard -"micromark-extension-mdxjs-esm@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-mdxjs-esm@npm:3.0.0" +"micromark-extension-mdxjs-esm@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdxjs-esm@npm:1.0.3" dependencies: - "@types/estree": ^1.0.0 - devlop: ^1.0.0 - micromark-core-commonmark: ^2.0.0 - micromark-util-character: ^2.0.0 - micromark-util-events-to-acorn: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - unist-util-position-from-estree: ^2.0.0 - vfile-message: ^4.0.0 - checksum: fb33d850200afce567b95c90f2f7d42259bd33eea16154349e4fa77c3ec934f46c8e5c111acea16321dce3d9f85aaa4c49afe8b810e31b34effc11617aeee8f6 + micromark-core-commonmark: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.1.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 756074656391a5e5bb96bc8a0e9c1df7d9f7be5299847c9719e6a90552e1c76a11876aa89986ad5da89ab485f776a4a43a61ea3acddd4f865a5cee43ac523ffd languageName: node linkType: hard -"micromark-extension-mdxjs@npm:^3.0.0": - version: 3.0.0 - resolution: "micromark-extension-mdxjs@npm:3.0.0" +"micromark-extension-mdxjs@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdxjs@npm:1.0.0" dependencies: acorn: ^8.0.0 acorn-jsx: ^5.0.0 - micromark-extension-mdx-expression: ^3.0.0 - micromark-extension-mdx-jsx: ^3.0.0 - micromark-extension-mdx-md: ^2.0.0 - micromark-extension-mdxjs-esm: ^3.0.0 - micromark-util-combine-extensions: ^2.0.0 - micromark-util-types: ^2.0.0 - checksum: 7da6f0fb0e1e0270a2f5ad257e7422cc16e68efa7b8214c63c9d55bc264cb872e9ca4ac9a71b9dfd13daf52e010f730bac316086f4340e4fcc6569ec699915bf + micromark-extension-mdx-expression: ^1.0.0 + micromark-extension-mdx-jsx: ^1.0.0 + micromark-extension-mdx-md: ^1.0.0 + micromark-extension-mdxjs-esm: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ba836c6d2dfc67597886e88f533ffa02f2029dbe216a0651f1066e70f8529a700bcc7fa2bc4201ee12fd3d1cd7da7093d5a442442daeb84b27df96aaffb7699c + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-factory-destination@npm:1.0.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 8e733ae9c1c2342f14ff290bf09946e20f6f540117d80342377a765cac48df2ea5e748f33c8b07501ad7a43414b1a6597c8510ede2052b6bf1251fab89748e20 languageName: node linkType: hard @@ -8040,6 +8235,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-label@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-factory-label@npm:1.0.2" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 + languageName: node + linkType: hard + "micromark-factory-label@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-label@npm:2.0.0" @@ -8052,19 +8259,19 @@ __metadata: languageName: node linkType: hard -"micromark-factory-mdx-expression@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-mdx-expression@npm:2.0.1" +"micromark-factory-mdx-expression@npm:^1.0.0": + version: 1.0.7 + resolution: "micromark-factory-mdx-expression@npm:1.0.7" dependencies: - "@types/estree": ^1.0.0 - devlop: ^1.0.0 - micromark-util-character: ^2.0.0 - micromark-util-events-to-acorn: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - unist-util-position-from-estree: ^2.0.0 - vfile-message: ^4.0.0 - checksum: 2ba0ae939d0174a5e5331b1a4c203b96862ccf06e8903d6bdcc2d51f75515e52d407cd394afcd182f9ff0e877dc2a14e3fa430ced0131e156650d45104de8311 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: e7893f21576bcb7755d341e45d3ff202ba466fa2278c6f31ae4db4002a28d6d13a4efad331ef46223372ec2010d9bc2ff27e2cd57a4580be6491e59ca21ba59d languageName: node linkType: hard @@ -8088,6 +8295,19 @@ __metadata: languageName: node linkType: hard +"micromark-factory-title@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-factory-title@npm:1.0.2" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 + languageName: node + linkType: hard + "micromark-factory-title@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-title@npm:2.0.0" @@ -8100,6 +8320,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-whitespace@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-factory-whitespace@npm:1.0.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 0888386e6ea2dd665a5182c570d9b3d0a172d3f11694ca5a2a84e552149c9f1429f5b975ec26e1f0fa4388c55a656c9f359ce5e0603aff6175ba3e255076f20b + languageName: node + linkType: hard + "micromark-factory-whitespace@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-whitespace@npm:2.0.0" @@ -8132,6 +8364,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-chunked@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-chunked@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: c1efd56e8c4217bcf1c6f1a9fb9912b4a2a5503b00d031da902be922fb3fee60409ac53f11739991291357b2784fb0647ddfc74c94753a068646c0cb0fd71421 + languageName: node + linkType: hard + "micromark-util-chunked@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-chunked@npm:2.0.0" @@ -8141,6 +8382,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-classify-character@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-classify-character@npm:1.0.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 180446e6a1dec653f625ded028f244784e1db8d10ad05c5d70f08af9de393b4a03dc6cf6fa5ed8ccc9c24bbece7837abf3bf66681c0b4adf159364b7d5236dfd + languageName: node + linkType: hard + "micromark-util-classify-character@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-classify-character@npm:2.0.0" @@ -8152,6 +8404,16 @@ __metadata: languageName: node linkType: hard +"micromark-util-combine-extensions@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-combine-extensions@npm:1.0.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 5304a820ef75340e1be69d6ad167055b6ba9a3bafe8171e5945a935752f462415a9dd61eb3490220c055a8a11167209a45bfa73f278338b7d3d61fa1464d3f35 + languageName: node + linkType: hard + "micromark-util-combine-extensions@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-combine-extensions@npm:2.0.0" @@ -8162,6 +8424,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-numeric-character-reference@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: f3ae2bb582a80f1e9d3face026f585c0c472335c064bd850bde152376f0394cb2831746749b6be6e0160f7d73626f67d10716026c04c87f402c0dd45a1a28633 + languageName: node + linkType: hard + "micromark-util-decode-numeric-character-reference@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.0" @@ -8171,6 +8442,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-string@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-util-decode-string@npm:1.0.2" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a + languageName: node + linkType: hard + "micromark-util-decode-string@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-decode-string@npm:2.0.0" @@ -8183,6 +8466,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-encode@npm:^1.0.0": + version: 1.0.1 + resolution: "micromark-util-encode@npm:1.0.1" + checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a + languageName: node + linkType: hard + "micromark-util-encode@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-encode@npm:2.0.0" @@ -8190,19 +8480,25 @@ __metadata: languageName: node linkType: hard -"micromark-util-events-to-acorn@npm:^2.0.0": - version: 2.0.2 - resolution: "micromark-util-events-to-acorn@npm:2.0.2" +"micromark-util-events-to-acorn@npm:^1.0.0": + version: 1.2.1 + resolution: "micromark-util-events-to-acorn@npm:1.2.1" dependencies: "@types/acorn": ^4.0.0 "@types/estree": ^1.0.0 - "@types/unist": ^3.0.0 - devlop: ^1.0.0 - estree-util-visit: ^2.0.0 - micromark-util-symbol: ^2.0.0 - micromark-util-types: ^2.0.0 - vfile-message: ^4.0.0 - checksum: bcb3eeac52a4ae5c3ca3d8cff514de3a7d1f272d9a94cce26a08c578bef64df4d61820874c01207e92fcace9eae5c9a7ecdddef0c6e10014b255a07b7880bf94 + estree-util-visit: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-location: ^4.0.0 + vfile-message: ^3.0.0 + checksum: baf1cad66d860980cf20963f641c48c434e5be5802beabefdda21be136ae037845dd236b5e9ce5cf9409bf1b9ba8b4131a396d3a5bfa12098dae13e4a9724f2b + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-html-tag-name@npm:1.1.0" + checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c languageName: node linkType: hard @@ -8213,6 +8509,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-normalize-identifier@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-normalize-identifier@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: d7c09d5e8318fb72f194af72664bd84a48a2928e3550b2b21c8fbc0ec22524f2a72e0f6663d2b95dc189a6957d3d7759b60716e888909710767cd557be821f8b + languageName: node + linkType: hard + "micromark-util-normalize-identifier@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-normalize-identifier@npm:2.0.0" @@ -8222,6 +8527,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-resolve-all@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-resolve-all@npm:1.0.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: 409667f2bd126ef8acce009270d2aecaaa5584c5807672bc657b09e50aa91bd2e552cf41e5be1e6469244a83349cbb71daf6059b746b1c44e3f35446fef63e50 + languageName: node + linkType: hard + "micromark-util-resolve-all@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-resolve-all@npm:2.0.0" @@ -8231,6 +8545,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": + version: 1.1.0 + resolution: "micromark-util-sanitize-uri@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b + languageName: node + linkType: hard + "micromark-util-sanitize-uri@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-sanitize-uri@npm:2.0.0" @@ -8242,6 +8567,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-subtokenize@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-util-subtokenize@npm:1.0.2" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 + languageName: node + linkType: hard + "micromark-util-subtokenize@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-subtokenize@npm:2.0.0" @@ -8268,7 +8605,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-types@npm:^1.0.0": +"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": version: 1.0.2 resolution: "micromark-util-types@npm:1.0.2" checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df @@ -8282,6 +8619,31 @@ __metadata: languageName: node linkType: hard +"micromark@npm:^3.0.0": + version: 3.1.0 + resolution: "micromark@npm:3.1.0" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + micromark-core-commonmark: ^1.0.1 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 + languageName: node + linkType: hard + "micromark@npm:^4.0.0": version: 4.0.0 resolution: "micromark@npm:4.0.0" @@ -8340,7 +8702,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -8415,7 +8777,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0": +"minimist@npm:^1.2.0, minimist@npm:^1.2.7": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -8510,6 +8872,13 @@ __metadata: languageName: node linkType: hard +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 + languageName: node + linkType: hard + "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -8583,15 +8952,26 @@ __metadata: languageName: node linkType: hard -"node-emoji@npm:^2.1.0": - version: 2.1.3 - resolution: "node-emoji@npm:2.1.3" +"node-emoji@npm:^1.10.0": + version: 1.11.0 + resolution: "node-emoji@npm:1.11.0" dependencies: - "@sindresorhus/is": ^4.6.0 - char-regex: ^1.0.2 - emojilib: ^2.4.0 - skin-tone: ^2.0.0 - checksum: 9ae5a1fb12fd5ce6885f251f345986115de4bb82e7d06fdc943845fb19260d89d0aaaccbaf85cae39fe7aaa1fc391640558865ba690c9bb8a7236c3ac10bbab0 + lodash: ^4.17.21 + checksum: e8c856c04a1645062112a72e59a98b203505ed5111ff84a3a5f40611afa229b578c7d50f1e6a7f17aa62baeea4a640d2e2f61f63afc05423aa267af10977fb2b + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b languageName: node linkType: hard @@ -8622,10 +9002,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 languageName: node linkType: hard @@ -8705,7 +9085,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -8962,6 +9342,13 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd + languageName: node + linkType: hard + "parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -9590,15 +9977,15 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^2.3.0": - version: 2.3.1 - resolution: "prism-react-renderer@npm:2.3.1" +"prism-react-renderer@npm:^2.1.0": + version: 2.1.0 + resolution: "prism-react-renderer@npm:2.1.0" dependencies: "@types/prismjs": ^1.26.0 - clsx: ^2.0.0 + clsx: ^1.2.1 peerDependencies: react: ">=16.0.0" - checksum: b12a7d502c1e764d94f7d3c84aee9cd6fccc676bb7e21dee94d37eb2e7e62e097a343999e1979887cb83a57cbdea48d2046aa74d07bce05caa25f4c296df30b6 + checksum: 61b4eb22bdbf01005a0d7ec2a24a27b69e28f124a1fbbfc2adb4d7d41a7929ea94d5ce506a361dd5a230728402f02595d521d9a5286d74ec9b34be0896c513a5 languageName: node linkType: hard @@ -9633,6 +10020,15 @@ __metadata: languageName: node linkType: hard +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + "prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" @@ -9701,6 +10097,13 @@ __metadata: languageName: node linkType: hard +"pure-color@npm:^1.2.0": + version: 1.3.0 + resolution: "pure-color@npm:1.3.0" + checksum: 646d8bed6e6eab89affdd5e2c11f607a85b631a7fb03c061dfa658eb4dc4806881a15feed2ac5fd8c0bad8c00c632c640d5b1cb8b9a972e6e947393a1329371b + languageName: node + linkType: hard + "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -9782,6 +10185,18 @@ __metadata: languageName: node linkType: hard +"react-base16-styling@npm:~0.6.0": + version: 0.6.0 + resolution: "react-base16-styling@npm:0.6.0" + dependencies: + base16: ^1.0.0 + lodash.curry: ^4.0.1 + lodash.flow: ^3.3.0 + pure-color: ^1.2.0 + checksum: 00a12dddafc8a9025cca933b0dcb65fca41c81fa176d1fc3a6a9d0242127042e2c0a604f4c724a3254dd2c6aeb5ef55095522ff22f5462e419641c1341a658e4 + languageName: node + linkType: hard + "react-dev-utils@npm:^12.0.1": version: 12.0.1 resolution: "react-dev-utils@npm:12.0.1" @@ -9863,12 +10278,10 @@ __metadata: languageName: node linkType: hard -"react-json-view-lite@npm:^1.2.0": - version: 1.2.1 - resolution: "react-json-view-lite@npm:1.2.1" - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - checksum: 9441260033ec07991b0121281d846f9d3e8db9061ea0dc3938f7003630f515d47870a465d90f1f9300ebe406679986657a4062c009c2a2084e2e145e6fa05a47 +"react-lifecycles-compat@npm:~3.0.4": + version: 3.0.4 + resolution: "react-lifecycles-compat@npm:3.0.4" + checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f languageName: node linkType: hard @@ -9932,6 +10345,19 @@ __metadata: languageName: node linkType: hard +"react-textarea-autosize@npm:~8.3.2": + version: 8.3.4 + resolution: "react-textarea-autosize@npm:8.3.4" + dependencies: + "@babel/runtime": ^7.10.2 + use-composed-ref: ^1.3.0 + use-latest: ^1.2.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 87360d4392276d4e87511a73be9b0634b8bcce8f4f648cf659334d993f25ad3d4062f468f1e1944fc614123acae4299580aad00b760c6a96cec190e076f847f5 + languageName: node + linkType: hard + "react@npm:^18.0.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -10076,14 +10502,14 @@ __metadata: languageName: node linkType: hard -"rehype-raw@npm:^7.0.0": - version: 7.0.0 - resolution: "rehype-raw@npm:7.0.0" +"rehype-raw@npm:^6.1.1": + version: 6.1.1 + resolution: "rehype-raw@npm:6.1.1" dependencies: - "@types/hast": ^3.0.0 - hast-util-raw: ^9.0.0 - vfile: ^6.0.0 - checksum: f9e28dcbf4c6c7d91a97c10a840310f18ef3268aa45abb3e0428b6b191ff3c4fa8f753b910d768588a2dac5c7da7e557b4ddc3f1b6cd252e8d20cb62d60c65ed + "@types/hast": ^2.0.0 + hast-util-raw: ^7.2.0 + unified: ^10.0.0 + checksum: a1f9d309e609f49fb1f1e06e722705f4dd2e569653a89f756eaccb33b612cf1bb511216a81d10a619d11d047afc161e4b3cb99b957df05a8ba8fdbd5843f949a languageName: node linkType: hard @@ -10094,28 +10520,26 @@ __metadata: languageName: node linkType: hard -"remark-directive@npm:^3.0.0": - version: 3.0.0 - resolution: "remark-directive@npm:3.0.0" +"remark-directive@npm:^2.0.1": + version: 2.0.1 + resolution: "remark-directive@npm:2.0.1" dependencies: - "@types/mdast": ^4.0.0 - mdast-util-directive: ^3.0.0 - micromark-extension-directive: ^3.0.0 - unified: ^11.0.0 - checksum: 744d12bbe924bd0492a2481cbaf9250aa6622c0d2cc090bb7bc39975e355c8a46ae13cc4793204ada39f0af64c953f6b730a55420a50375e0f74a5dd5d201089 + "@types/mdast": ^3.0.0 + mdast-util-directive: ^2.0.0 + micromark-extension-directive: ^2.0.0 + unified: ^10.0.0 + checksum: 61539926813654011431cc34e3d6c5ba702a6b610a0e8210b4748828809e86614bbb3e2de5fdee59eed24501f95c41665b175b852cc26544079789db10ac6cd7 languageName: node linkType: hard -"remark-emoji@npm:^4.0.0": - version: 4.0.1 - resolution: "remark-emoji@npm:4.0.1" +"remark-emoji@npm:^2.2.0": + version: 2.2.0 + resolution: "remark-emoji@npm:2.2.0" dependencies: - "@types/mdast": ^4.0.2 - emoticon: ^4.0.1 - mdast-util-find-and-replace: ^3.0.1 - node-emoji: ^2.1.0 - unified: ^11.0.4 - checksum: 2c02d8c0b694535a9f0c4fe39180cb89a8fbd07eb873c94842c34dfde566b8a6703df9d28fe175a8c28584f96252121de722862baa756f2d875f2f1a4352c1f4 + emoticon: ^3.2.0 + node-emoji: ^1.10.0 + unist-util-visit: ^2.0.3 + checksum: 638d4be72eb4110a447f389d4b8c454921f188c0acabf1b6579f3ddaa301ee91010173d6eebd975ea622ae3de7ed4531c0315a4ffd4f9653d80c599ef9ec21a8 languageName: node linkType: hard @@ -10131,63 +10555,48 @@ __metadata: languageName: node linkType: hard -"remark-gfm@npm:^4.0.0": - version: 4.0.0 - resolution: "remark-gfm@npm:4.0.0" +"remark-gfm@npm:^3.0.1": + version: 3.0.1 + resolution: "remark-gfm@npm:3.0.1" dependencies: - "@types/mdast": ^4.0.0 - mdast-util-gfm: ^3.0.0 - micromark-extension-gfm: ^3.0.0 - remark-parse: ^11.0.0 - remark-stringify: ^11.0.0 - unified: ^11.0.0 - checksum: 84bea84e388061fbbb697b4b666089f5c328aa04d19dc544c229b607446bc10902e46b67b9594415a1017bbbd7c811c1f0c30d36682c6d1a6718b66a1558261b + "@types/mdast": ^3.0.0 + mdast-util-gfm: ^2.0.0 + micromark-extension-gfm: ^2.0.0 + unified: ^10.0.0 + checksum: 02254f74d67b3419c2c9cf62d799ec35f6c6cd74db25c001361751991552a7ce86049a972107bff8122d85d15ae4a8d1a0618f3bc01a7df837af021ae9b2a04e languageName: node linkType: hard -"remark-mdx@npm:^3.0.0": - version: 3.0.0 - resolution: "remark-mdx@npm:3.0.0" +"remark-mdx@npm:^2.0.0": + version: 2.3.0 + resolution: "remark-mdx@npm:2.3.0" dependencies: - mdast-util-mdx: ^3.0.0 - micromark-extension-mdxjs: ^3.0.0 - checksum: 8b9b3e5297e5cb4c312553f42c3720280ada96ae60ede880606924a0aad2e773106aba1ef45a0c179c218f8da6f58dac3c789a9c4f791649ca7a183706cde5b8 + mdast-util-mdx: ^2.0.0 + micromark-extension-mdxjs: ^1.0.0 + checksum: 98486986c5b6f6a8321eb2f3b13c70fcd5644821428c77b7bfeb5ee5d4605b9761b322b2f6b531e83883cd2d5bc7bc4623427149aee00e1eba012f538b3d5627 languageName: node linkType: hard -"remark-parse@npm:^11.0.0": - version: 11.0.0 - resolution: "remark-parse@npm:11.0.0" +"remark-parse@npm:^10.0.0": + version: 10.0.1 + resolution: "remark-parse@npm:10.0.1" dependencies: - "@types/mdast": ^4.0.0 - mdast-util-from-markdown: ^2.0.0 - micromark-util-types: ^2.0.0 - unified: ^11.0.0 - checksum: d83d245290fa84bb04fb3e78111f09c74f7417e7c012a64dd8dc04fccc3699036d828fbd8eeec8944f774b6c30cc1d925c98f8c46495ebcee7c595496342ab7f + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 languageName: node linkType: hard -"remark-rehype@npm:^11.0.0": - version: 11.1.0 - resolution: "remark-rehype@npm:11.1.0" +"remark-rehype@npm:^10.0.0": + version: 10.1.0 + resolution: "remark-rehype@npm:10.1.0" dependencies: - "@types/hast": ^3.0.0 - "@types/mdast": ^4.0.0 - mdast-util-to-hast: ^13.0.0 - unified: ^11.0.0 - vfile: ^6.0.0 - checksum: f0c731f0ab92a122e7f9c9bcbd10d6a31fdb99f0ea3595d232ddd9f9d11a308c4ec0aff4d56e1d0d256042dfad7df23b9941e50b5038da29786959a5926814e1 - languageName: node - linkType: hard - -"remark-stringify@npm:^11.0.0": - version: 11.0.0 - resolution: "remark-stringify@npm:11.0.0" - dependencies: - "@types/mdast": ^4.0.0 - mdast-util-to-markdown: ^2.0.0 - unified: ^11.0.0 - checksum: 59e07460eb629d6c3b3c0f438b0b236e7e6858fd5ab770303078f5a556ec00354d9c7fb9ef6d5f745a4617ac7da1ab618b170fbb4dac120e183fecd9cc86bce6 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-to-hast: ^12.1.0 + unified: ^10.0.0 + checksum: b9ac8acff3383b204dfdc2599d0bdf86e6ca7e837033209584af2e6aaa6a9013e519a379afa3201299798cab7298c8f4b388de118c312c67234c133318aec084 languageName: node linkType: hard @@ -10343,6 +10752,24 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.8.0": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"sade@npm:^1.7.3": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: ^1.1.0 + checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d + languageName: node + linkType: hard + "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -10587,6 +11014,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -10703,15 +11137,6 @@ __metadata: languageName: node linkType: hard -"skin-tone@npm:^2.0.0": - version: 2.0.0 - resolution: "skin-tone@npm:2.0.0" - dependencies: - unicode-emoji-modifier-base: ^1.0.0 - checksum: 19de157586b8019cacc55eb25d9d640f00fc02415761f3e41a4527142970fd4e7f6af0333bc90e879858766c20a976107bb386ffd4c812289c01d51f2c8d182c - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -10995,21 +11420,12 @@ __metadata: languageName: node linkType: hard -"style-to-object@npm:^0.4.0": - version: 0.4.4 - resolution: "style-to-object@npm:0.4.4" +"style-to-object@npm:^0.4.1": + version: 0.4.1 + resolution: "style-to-object@npm:0.4.1" dependencies: inline-style-parser: 0.1.1 - checksum: 41656c06f93ac0a7ac260ebc2f9d09a8bd74b8ec1836f358cc58e169235835a3a356977891d2ebbd76f0e08a53616929069199f9cce543214d3dc98346e19c9a - languageName: node - linkType: hard - -"style-to-object@npm:^1.0.0": - version: 1.0.5 - resolution: "style-to-object@npm:1.0.5" - dependencies: - inline-style-parser: 0.2.2 - checksum: 6201063204b6a94645f81b189452b2ca3e63d61867ec48523f4d52609c81e96176739fa12020d97fbbf023efb57a6f7ec3a15fb3a7fb7eb3ffea0b52b9dd6b8c + checksum: 2ea213e98eed21764ae1d1dc9359231a9f2d480d6ba55344c4c15eb275f0809f1845786e66d4caf62414a5cc8f112ce9425a58d251c77224060373e0db48f8c2 languageName: node linkType: hard @@ -11215,6 +11631,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -11229,7 +11652,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.6.0": +"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.6.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad @@ -11289,6 +11712,13 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^0.7.30": + version: 0.7.33 + resolution: "ua-parser-js@npm:0.7.33" + checksum: 1510e9ec26fcaf0d8c6ae8f1078a8230e8816f083e1b5f453ea19d06b8ef2b8a596601c92148fd41899e8b3e5f83fa69c42332bd5729b931a721040339831696 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -11296,13 +11726,6 @@ __metadata: languageName: node linkType: hard -"unicode-emoji-modifier-base@npm:^1.0.0": - version: 1.0.0 - resolution: "unicode-emoji-modifier-base@npm:1.0.0" - checksum: 6e1521d35fa69493207eb8b41f8edb95985d8b3faf07c01d820a1830b5e8403e20002563e2f84683e8e962a49beccae789f0879356bf92a4ec7a4dd8e2d16fdb - languageName: node - linkType: hard - "unicode-match-property-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-ecmascript@npm:2.0.0" @@ -11327,9 +11750,24 @@ __metadata: languageName: node linkType: hard -"unified@npm:^11.0.0, unified@npm:^11.0.3, unified@npm:^11.0.4": - version: 11.0.4 - resolution: "unified@npm:11.0.4" +"unified@npm:^10.0.0, unified@npm:^10.1.2": + version: 10.1.2 + resolution: "unified@npm:10.1.2" + dependencies: + "@types/unist": ^2.0.0 + bail: ^2.0.0 + extend: ^3.0.0 + is-buffer: ^2.0.0 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^5.0.0 + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + languageName: node + linkType: hard + +"unified@npm:^11.0.0": + version: 11.0.3 + resolution: "unified@npm:11.0.3" dependencies: "@types/unist": ^3.0.0 bail: ^2.0.0 @@ -11338,7 +11776,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^6.0.0 - checksum: cfb023913480ac2bd5e787ffb8c27782c43e6be4a55f8f1c288233fce46a7ebe7718ccc5adb80bf8d56b7ef85f5fc32239c7bfccda006f9f2382e0cc2e2a77e4 + checksum: 402d6b397b98f8966993faca0e1480f5f1825cc44df6a5236b75ab099f14b10ed808e578155c3f535e60676c12ee3f52346ca08d64343a72181d7a6b4d32011d languageName: node linkType: hard @@ -11369,6 +11807,29 @@ __metadata: languageName: node linkType: hard +"unist-util-generated@npm:^2.0.0": + version: 2.0.1 + resolution: "unist-util-generated@npm:2.0.1" + checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 + languageName: node + linkType: hard + +"unist-util-is@npm:^4.0.0": + version: 4.1.0 + resolution: "unist-util-is@npm:4.1.0" + checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea + languageName: node + linkType: hard + +"unist-util-is@npm:^5.0.0": + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 + languageName: node + linkType: hard + "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -11378,31 +11839,40 @@ __metadata: languageName: node linkType: hard -"unist-util-position-from-estree@npm:^2.0.0": - version: 2.0.0 - resolution: "unist-util-position-from-estree@npm:2.0.0" +"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": + version: 1.1.2 + resolution: "unist-util-position-from-estree@npm:1.1.2" dependencies: - "@types/unist": ^3.0.0 - checksum: d3b3048a5727c2367f64ef6dcc5b20c4717215ef8b1372ff9a7c426297c5d1e5776409938acd01531213e2cd2543218d16e73f9f862f318e9496e2c73bb18354 + "@types/unist": ^2.0.0 + checksum: e3f4060e2a9e894c6ed63489c5a7cb58ff282e5dae9497cbc2073033ca74d6e412af4d4d342c97aea08d997c908b8bce2fe43a2062aafc2bb3f266533016588b languageName: node linkType: hard -"unist-util-position@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-position@npm:5.0.0" +"unist-util-position@npm:^4.0.0": + version: 4.0.4 + resolution: "unist-util-position@npm:4.0.4" dependencies: - "@types/unist": ^3.0.0 - checksum: f89b27989b19f07878de9579cd8db2aa0194c8360db69e2c99bd2124a480d79c08f04b73a64daf01a8fb3af7cba65ff4b45a0b978ca243226084ad5f5d441dde + "@types/unist": ^2.0.0 + checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 languageName: node linkType: hard -"unist-util-remove-position@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-remove-position@npm:5.0.0" +"unist-util-remove-position@npm:^4.0.0": + version: 4.0.2 + resolution: "unist-util-remove-position@npm:4.0.2" dependencies: - "@types/unist": ^3.0.0 - unist-util-visit: ^5.0.0 - checksum: 8aabdb9d0e3e744141bc123d8f87b90835d521209ad3c6c4619d403b324537152f0b8f20dda839b40c3aa0abfbf1828b3635a7a8bb159c3ed469e743023510ee + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 989831da913d09a82a99ed9b47b78471b6409bde95942cde47e09da54b7736516f17e3c7e026af468684c1efcec5fb52df363381b2f9dc7fd96ce791c5a2fa4a + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 languageName: node linkType: hard @@ -11415,6 +11885,26 @@ __metadata: languageName: node linkType: hard +"unist-util-visit-parents@npm:^3.0.0": + version: 3.1.1 + resolution: "unist-util-visit-parents@npm:3.1.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1, unist-util-visit-parents@npm:^5.1.3": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa + languageName: node + linkType: hard + "unist-util-visit-parents@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-visit-parents@npm:6.0.1" @@ -11425,6 +11915,28 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^2.0.3": + version: 2.0.3 + resolution: "unist-util-visit@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + unist-util-visit-parents: ^3.0.0 + checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f + languageName: node + linkType: hard + +"unist-util-visit@npm:^4.0.0": + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.1.1 + checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee + languageName: node + linkType: hard + "unist-util-visit@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-visit@npm:5.0.0" @@ -11512,6 +12024,41 @@ __metadata: languageName: node linkType: hard +"use-composed-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-composed-ref@npm:1.3.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf + languageName: node + linkType: hard + +"use-isomorphic-layout-effect@npm:^1.1.1": + version: 1.1.2 + resolution: "use-isomorphic-layout-effect@npm:1.1.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb + languageName: node + linkType: hard + +"use-latest@npm:^1.2.1": + version: 1.2.1 + resolution: "use-latest@npm:1.2.1" + dependencies: + use-isomorphic-layout-effect: ^1.1.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -11549,6 +12096,20 @@ __metadata: languageName: node linkType: hard +"uvu@npm:^0.5.0": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: ^2.0.0 + diff: ^5.0.0 + kleur: ^4.0.3 + sade: ^1.7.3 + bin: + uvu: bin.js + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + languageName: node + linkType: hard + "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -11563,13 +12124,23 @@ __metadata: languageName: node linkType: hard -"vfile-location@npm:^5.0.0": - version: 5.0.2 - resolution: "vfile-location@npm:5.0.2" +"vfile-location@npm:^4.0.0": + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" dependencies: - "@types/unist": ^3.0.0 - vfile: ^6.0.0 - checksum: b61c048cedad3555b4f007f390412c6503f58a6a130b58badf4ee340c87e0d7421e9c86bbc1494c57dedfccadb60f5176cc60ba3098209d99fb3a3d8804e4c38 + "@types/unist": ^2.0.0 + vfile: ^5.0.0 + checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 + languageName: node + linkType: hard + +"vfile-message@npm:^3.0.0": + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^3.0.0 + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 languageName: node linkType: hard @@ -11583,7 +12154,19 @@ __metadata: languageName: node linkType: hard -"vfile@npm:^6.0.0, vfile@npm:^6.0.1": +"vfile@npm:^5.0.0, vfile@npm:^5.3.7": + version: 5.3.7 + resolution: "vfile@npm:5.3.7" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 + languageName: node + linkType: hard + +"vfile@npm:^6.0.0": version: 6.0.1 resolution: "vfile@npm:6.0.1" dependencies: @@ -11594,6 +12177,21 @@ __metadata: languageName: node linkType: hard +"wait-on@npm:^7.0.1": + version: 7.0.1 + resolution: "wait-on@npm:7.0.1" + dependencies: + axios: ^0.27.2 + joi: ^17.7.0 + lodash: ^4.17.21 + minimist: ^1.2.7 + rxjs: ^7.8.0 + bin: + wait-on: bin/wait-on + checksum: 1e8a17d8ee6436f71d3ab82781ce31267481fcd7bbccde49b0f8124871e6e40a1acac3401f04f775ba6203853a5813352fa131620fc139914351f3b2894d573f + languageName: node + linkType: hard + "watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -11620,6 +12218,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + "webpack-bundle-analyzer@npm:^4.9.0": version: 4.9.1 resolution: "webpack-bundle-analyzer@npm:4.9.1" @@ -11795,6 +12400,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + "which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" From 78fabde36213d6ef5691dbfc3b6bd73898daa0f1 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 22 Jan 2024 10:05:16 +0100 Subject: [PATCH 104/129] core-compat-api: add link todo Signed-off-by: Vincenzo Scamporlino --- packages/core-compat-api/src/collectLegacyRoutes.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index f164b400bd..53fe477769 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -194,7 +194,8 @@ export function collectLegacyRoutes( ); if (!plugin) { throw new Error( - `Route with path ${path} has en element that can not be converted as it does not belong to a plugin. Make sure that the top-level React element of the element prop is an extension from a Backstage plugin, or remove the Route completely. See for more info`, + // TODO(vinzscam): add See for more info + `Route with path ${path} has en element that can not be converted as it does not belong to a plugin. Make sure that the top-level React element of the element prop is an extension from a Backstage plugin, or remove the Route completely.`, ); } if (path === undefined) { From ad0835c05167d8fe12ec28926da01c18b6373d2d Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 22 Jan 2024 10:05:49 +0100 Subject: [PATCH 105/129] core-compat-api: add tests Signed-off-by: Vincenzo Scamporlino --- .../src/collectLegacyRoutes.test.tsx | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx index c8d3822ae7..2c8288b878 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.test.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.test.tsx @@ -27,7 +27,7 @@ import { PuppetDbPage } from '@backstage/plugin-puppetdb'; import { StackstormPage } from '@backstage/plugin-stackstorm'; import { ScoreBoardPage } from '@oriflame/backstage-plugin-score-card'; import React, { Fragment } from 'react'; -import { Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router-dom'; import { collectLegacyRoutes } from './collectLegacyRoutes'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports @@ -290,9 +290,9 @@ describe('collectLegacyRoutes', () => { name: 'Test', mountPoint: routeRef, component: async () => () => { - const app = useApp(); - return
plugins: {app.getPlugins().map(p => p.getId())}
; - }), + const app = useApp(); + return
plugins: {app.getPlugins().map(p => p.getId())}
; + }, }), ); @@ -304,7 +304,36 @@ describe('collectLegacyRoutes', () => {
, ), - ).toThrow(/Invalid { + const plugin = createPlugin({ + id: 'test', + }); + const routeRef = createRouteRef({ id: 'test' }); + const Page = plugin.provide( + createRoutableExtension({ + name: 'Test', + mountPoint: routeRef, + component: async () => () => { + const app = useApp(); + return
plugins: {app.getPlugins().map(p => p.getId())}
; + }, + }), + ); + + expect(() => + collectLegacyRoutes( + + } />a string + , + ), + ).toThrow( + /Invalid element inside FlatRoutes, expected Route but found element of type string./, + ); }); it('should throw if has no path', async () => { @@ -330,6 +359,18 @@ describe('collectLegacyRoutes', () => { } /> , ), - ).toThrow(/ element with invalid path/); + ).toThrow(/Route element inside FlatRoutes had no path prop value given/); + }); + + it('should throw if element cannot be converted', async () => { + expect(() => + collectLegacyRoutes( + + } /> + , + ), + ).toThrow( + /Route with path undefined has en element that can not be converted/, + ); }); }); From 4321871f98c19a18c9805331718dd944f894b6a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:09:59 +0000 Subject: [PATCH 106/129] Update dependency msw to v2.1.3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ef63a2276c..eb42858103 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34561,8 +34561,8 @@ __metadata: linkType: hard "msw@npm:^2.0.0, msw@npm:^2.0.8": - version: 2.1.2 - resolution: "msw@npm:2.1.2" + version: 2.1.3 + resolution: "msw@npm:2.1.3" dependencies: "@bundled-es-modules/cookie": ^2.0.0 "@bundled-es-modules/js-levenshtein": ^2.0.1 @@ -34592,7 +34592,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 58b6e9ad480f5a3e7b7f6d32e9ea87a4b8b4940614991d8762f4b8a319f9d04fef8db4207bb427450f033cdade9495ef5b87dde91e26ded257c98e3544529cef + checksum: 0380a2c5c03608f066037bd76e543406a8c625cdc138bc5de220ec1831fe36cf3616246bdb3eaed96c96c7e967b2874975aff899c8e673d64a0182835e73bacb languageName: node linkType: hard From cb8097e018d29a0945017fdca64cdfa3c37da228 Mon Sep 17 00:00:00 2001 From: Martin Marosi Date: Mon, 22 Jan 2024 12:08:40 +0100 Subject: [PATCH 107/129] bep: 0002 add module federation build tooling experiment Signed-off-by: Martin Marosi --- .github/vale/config/vocabularies/Backstage/accept.txt | 1 + beps/0002-dynamic-frontend-plugins/README.md | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index dc0b74b98c..940e855828 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -330,6 +330,7 @@ Rollbar Rollup routable Routable +Rspack rst rsync ruleset diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index aad0cc66c3..fc56e74c83 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -143,10 +143,16 @@ Plugin discovery is a pre-requisite for Plugin registry. This should be responsi ### Module federation implementation experiments -> NOTE Share outcome of testing mixing multiple tools for module federation. - Test should consist of trying to run permutations of webpack/Rspack/vite based shell apps/plugins and discover if we can freely choose any tool, or if we should restrict the tooling to just a subset of the available options. +The outcome of initial testing is positive and it is possible to mix and match different build tools and consume different remote modules in a single shell application. + +The experimental code can be found in [this repository](https://github.com/scalprum/mf-mixing-experiments). + +**The testing so far was done only on very simple modules**. Although core React features are working (Context API and hooks), more testings needs to be done in order to declare this approach 100% reliable. + +So far a lot of custom code needs to be written to bridge Webpack, Rspack, @module-federation/enhanced with Vite. The first three are compatible out of the box, but Vite requires extra bridge to be able to consume/provide modules with/to other builds. + ### Plugin manifest Each plugin should have a manifest file with important metadata. This metadata is used to load the remote assets to browser. The plugin manifest should be part of a build output. From 9dfa299220fdcc4ea71278deff8970b00b3e5283 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:52:22 +0000 Subject: [PATCH 108/129] fix(deps): update swc monorepo Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- microsite/yarn.lock | 86 +++++++++++++++++++++--------------------- storybook/yarn.lock | 86 +++++++++++++++++++++--------------------- yarn.lock | 92 ++++++++++++++++++++++----------------------- 3 files changed, 132 insertions(+), 132 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a2489da001..94a8aff35b 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2701,90 +2701,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-arm64@npm:1.3.104" +"@swc/core-darwin-arm64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-arm64@npm:1.3.105" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-x64@npm:1.3.104" +"@swc/core-darwin-x64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-x64@npm:1.3.105" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.104" +"@swc/core-linux-arm-gnueabihf@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.105" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.104" +"@swc/core-linux-arm64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.104" +"@swc/core-linux-arm64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.104" +"@swc/core-linux-x64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-musl@npm:1.3.104" +"@swc/core-linux-x64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-musl@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.104" +"@swc/core-win32-arm64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.105" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.104" +"@swc/core-win32-ia32-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.105" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.104" +"@swc/core-win32-x64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.105" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.104 - resolution: "@swc/core@npm:1.3.104" + version: 1.3.105 + resolution: "@swc/core@npm:1.3.105" dependencies: - "@swc/core-darwin-arm64": 1.3.104 - "@swc/core-darwin-x64": 1.3.104 - "@swc/core-linux-arm-gnueabihf": 1.3.104 - "@swc/core-linux-arm64-gnu": 1.3.104 - "@swc/core-linux-arm64-musl": 1.3.104 - "@swc/core-linux-x64-gnu": 1.3.104 - "@swc/core-linux-x64-musl": 1.3.104 - "@swc/core-win32-arm64-msvc": 1.3.104 - "@swc/core-win32-ia32-msvc": 1.3.104 - "@swc/core-win32-x64-msvc": 1.3.104 + "@swc/core-darwin-arm64": 1.3.105 + "@swc/core-darwin-x64": 1.3.105 + "@swc/core-linux-arm-gnueabihf": 1.3.105 + "@swc/core-linux-arm64-gnu": 1.3.105 + "@swc/core-linux-arm64-musl": 1.3.105 + "@swc/core-linux-x64-gnu": 1.3.105 + "@swc/core-linux-x64-musl": 1.3.105 + "@swc/core-win32-arm64-msvc": 1.3.105 + "@swc/core-win32-ia32-msvc": 1.3.105 + "@swc/core-win32-x64-msvc": 1.3.105 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2813,7 +2813,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 95fbf1412c8685d311cf2d7efbfa43e082d2d9e84ece48c4d8d96d6c67c5923569bfb26352451eb3e4d98adcb556dcfac65271c0fba77f078bb755fe2f64b295 + checksum: 5baa880bc92748ef4845d9c65eba5d6dd01adaa673854e20a5116f5e267c12180db50e563cf3c34a415772b9742d021176a9d9a91065c190ef6f54fefe85728c languageName: node linkType: hard diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 0be4de1f7f..94acb9696e 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2842,90 +2842,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-arm64@npm:1.3.104" +"@swc/core-darwin-arm64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-arm64@npm:1.3.105" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-x64@npm:1.3.104" +"@swc/core-darwin-x64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-x64@npm:1.3.105" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.104" +"@swc/core-linux-arm-gnueabihf@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.105" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.104" +"@swc/core-linux-arm64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.104" +"@swc/core-linux-arm64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.104" +"@swc/core-linux-x64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-musl@npm:1.3.104" +"@swc/core-linux-x64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-musl@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.104" +"@swc/core-win32-arm64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.105" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.104" +"@swc/core-win32-ia32-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.105" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.104" +"@swc/core-win32-x64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.105" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.104 - resolution: "@swc/core@npm:1.3.104" + version: 1.3.105 + resolution: "@swc/core@npm:1.3.105" dependencies: - "@swc/core-darwin-arm64": 1.3.104 - "@swc/core-darwin-x64": 1.3.104 - "@swc/core-linux-arm-gnueabihf": 1.3.104 - "@swc/core-linux-arm64-gnu": 1.3.104 - "@swc/core-linux-arm64-musl": 1.3.104 - "@swc/core-linux-x64-gnu": 1.3.104 - "@swc/core-linux-x64-musl": 1.3.104 - "@swc/core-win32-arm64-msvc": 1.3.104 - "@swc/core-win32-ia32-msvc": 1.3.104 - "@swc/core-win32-x64-msvc": 1.3.104 + "@swc/core-darwin-arm64": 1.3.105 + "@swc/core-darwin-x64": 1.3.105 + "@swc/core-linux-arm-gnueabihf": 1.3.105 + "@swc/core-linux-arm64-gnu": 1.3.105 + "@swc/core-linux-arm64-musl": 1.3.105 + "@swc/core-linux-x64-gnu": 1.3.105 + "@swc/core-linux-x64-musl": 1.3.105 + "@swc/core-win32-arm64-msvc": 1.3.105 + "@swc/core-win32-ia32-msvc": 1.3.105 + "@swc/core-win32-x64-msvc": 1.3.105 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2954,7 +2954,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 95fbf1412c8685d311cf2d7efbfa43e082d2d9e84ece48c4d8d96d6c67c5923569bfb26352451eb3e4d98adcb556dcfac65271c0fba77f078bb755fe2f64b295 + checksum: 5baa880bc92748ef4845d9c65eba5d6dd01adaa673854e20a5116f5e267c12180db50e563cf3c34a415772b9742d021176a9d9a91065c190ef6f54fefe85728c languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index d70a15da33..99d80b12c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16948,90 +16948,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-arm64@npm:1.3.104" +"@swc/core-darwin-arm64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-arm64@npm:1.3.105" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-darwin-x64@npm:1.3.104" +"@swc/core-darwin-x64@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-darwin-x64@npm:1.3.105" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.104" +"@swc/core-linux-arm-gnueabihf@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.105" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.104" +"@swc/core-linux-arm64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.104" +"@swc/core-linux-arm64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.105" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.104" +"@swc/core-linux-x64-gnu@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-linux-x64-musl@npm:1.3.104" +"@swc/core-linux-x64-musl@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-linux-x64-musl@npm:1.3.105" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.104" +"@swc/core-win32-arm64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.105" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.104" +"@swc/core-win32-ia32-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.105" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.104": - version: 1.3.104 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.104" +"@swc/core-win32-x64-msvc@npm:1.3.105": + version: 1.3.105 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.105" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.104 - resolution: "@swc/core@npm:1.3.104" + version: 1.3.105 + resolution: "@swc/core@npm:1.3.105" dependencies: - "@swc/core-darwin-arm64": 1.3.104 - "@swc/core-darwin-x64": 1.3.104 - "@swc/core-linux-arm-gnueabihf": 1.3.104 - "@swc/core-linux-arm64-gnu": 1.3.104 - "@swc/core-linux-arm64-musl": 1.3.104 - "@swc/core-linux-x64-gnu": 1.3.104 - "@swc/core-linux-x64-musl": 1.3.104 - "@swc/core-win32-arm64-msvc": 1.3.104 - "@swc/core-win32-ia32-msvc": 1.3.104 - "@swc/core-win32-x64-msvc": 1.3.104 + "@swc/core-darwin-arm64": 1.3.105 + "@swc/core-darwin-x64": 1.3.105 + "@swc/core-linux-arm-gnueabihf": 1.3.105 + "@swc/core-linux-arm64-gnu": 1.3.105 + "@swc/core-linux-arm64-musl": 1.3.105 + "@swc/core-linux-x64-gnu": 1.3.105 + "@swc/core-linux-x64-musl": 1.3.105 + "@swc/core-win32-arm64-msvc": 1.3.105 + "@swc/core-win32-ia32-msvc": 1.3.105 + "@swc/core-win32-x64-msvc": 1.3.105 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -17060,7 +17060,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 95fbf1412c8685d311cf2d7efbfa43e082d2d9e84ece48c4d8d96d6c67c5923569bfb26352451eb3e4d98adcb556dcfac65271c0fba77f078bb755fe2f64b295 + checksum: 5baa880bc92748ef4845d9c65eba5d6dd01adaa673854e20a5116f5e267c12180db50e563cf3c34a415772b9742d021176a9d9a91065c190ef6f54fefe85728c languageName: node linkType: hard @@ -17081,14 +17081,14 @@ __metadata: linkType: hard "@swc/jest@npm:^0.2.22": - version: 0.2.30 - resolution: "@swc/jest@npm:0.2.30" + version: 0.2.31 + resolution: "@swc/jest@npm:0.2.31" dependencies: "@jest/create-cache-key-function": ^29.7.0 jsonc-parser: ^3.2.0 peerDependencies: "@swc/core": "*" - checksum: 8ce25300949b8dfedaadec866d056a511ae2791e5cbbc8008b7d086c9c29b1b727c3f42aade88e824aa8205616e9aab812f9fa83ab4384e72f49a469f503256b + checksum: 1dae629a81a623de6a662dcac34a97f91986457f172bec1c8fc360d4407c2499dcbf73d420123996809366900ef785b2cbfda4f2f6acf2f1729e85f6f2b791b7 languageName: node linkType: hard From 8d0e3755ec308c6b7b8de7d08b45410834670375 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:22:19 +0000 Subject: [PATCH 109/129] fix(deps): update aws-sdk-js-v3 monorepo to v3.496.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 1752 ++++++++++++++++++++++++++--------------------------- 1 file changed, 876 insertions(+), 876 deletions(-) diff --git a/yarn.lock b/yarn.lock index d70a15da33..234fe3f1ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -363,515 +363,515 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.495.0" +"@aws-sdk/client-cognito-identity@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-signing": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-signing": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 078c17e6f6fed15ee320a4d94e9925ff7ccb537416552492b3e66179998a8259c1d68c2f1523243c497c7bc64d613f33acc92b9f9c2c9238eee41be26aebcaf9 + checksum: ee21d840134279f2d9c5bd113912fe89a48dcc6f56798894282886f48096743cd46499b908a659176cb1bfd10a771ec599694ae728d7fc53cb8a388124aff412 languageName: node linkType: hard "@aws-sdk/client-eks@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/client-eks@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/client-eks@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-signing": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 - "@smithy/util-waiter": ^2.1.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-signing": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 + "@smithy/util-waiter": ^2.1.1 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: f4d9ce87c23c1d117e4046c97ac974131e54b878eb0aed9457739ca0d202f8d36c9b2ba3718120de531fdb200ccab123a4d1f848ef8c3858b1ca5d81dcd9c789 + checksum: 44042c4e746a27764db92f1966674034d7e9bb3a0cc6db3cedac1143472556d63e591a25048ebb8c11e07f3e807c7dd0b67b653c4f9bde30ef6fb7017eb82546 languageName: node linkType: hard "@aws-sdk/client-organizations@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/client-organizations@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/client-organizations@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-signing": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-signing": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 3c7deae27a0549ff97551d577df701f21823ca6f3fc965b35add491642faf3ddb060183752687264727e10cc80addb1a3c263af81f2a35d15fe0c3edb02a5da2 + checksum: a94ab6fadd8442223fee939559c72ea341ff8ed310f06c3420f4f7fab3fe0d033e6bdcf8be9984b92b1114b91abd8020201f727b96977e4d4c85357f01898b38 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/client-s3@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/client-s3@npm:3.496.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-bucket-endpoint": 3.495.0 - "@aws-sdk/middleware-expect-continue": 3.495.0 - "@aws-sdk/middleware-flexible-checksums": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-location-constraint": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-sdk-s3": 3.495.0 - "@aws-sdk/middleware-signing": 3.495.0 - "@aws-sdk/middleware-ssec": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/signature-v4-multi-region": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@aws-sdk/xml-builder": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/eventstream-serde-browser": ^2.1.0 - "@smithy/eventstream-serde-config-resolver": ^2.1.0 - "@smithy/eventstream-serde-node": ^2.1.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-blob-browser": ^2.1.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/hash-stream-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/md5-js": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-stream": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 - "@smithy/util-waiter": ^2.1.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-bucket-endpoint": 3.496.0 + "@aws-sdk/middleware-expect-continue": 3.496.0 + "@aws-sdk/middleware-flexible-checksums": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-location-constraint": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-sdk-s3": 3.496.0 + "@aws-sdk/middleware-signing": 3.496.0 + "@aws-sdk/middleware-ssec": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/signature-v4-multi-region": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@aws-sdk/xml-builder": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/eventstream-serde-browser": ^2.1.1 + "@smithy/eventstream-serde-config-resolver": ^2.1.1 + "@smithy/eventstream-serde-node": ^2.1.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-blob-browser": ^2.1.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/hash-stream-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/md5-js": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-stream": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 + "@smithy/util-waiter": ^2.1.1 fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: 2add0f58189bfc394a6b3963ef4295b9997f3ea544d8a92ba2d16b9051f4fd07fb9f184e9ad6ca6ce665cbec496abd5e0e69a91a97213117dc20aafd3bed2840 + checksum: 6b87d1edd89376bfb0c27cd270e57cfdfedb3fbec725fddce4eff5df31daa84b7e89099d44503b5bd19dd2021da1a18f08374cb839e588fa7bb819cd6f3cf25a languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/client-sqs@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/client-sqs@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-sdk-sqs": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/md5-js": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-middleware": ^2.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-sdk-sqs": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/md5-js": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-middleware": ^2.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 4dcbf031c1902149d8fa82f7c555eb416d904c1e197ad2deae927856748719c03b025bb122a131df34435269039a6b0538635826e0bcab204b86ef24fe4595b8 + checksum: 42f064fb83b443b1de55cbc56941f4b4b7c2b06fb467fcef4d556e75e0613b5a99a72a63a6f464d4101a26047c6d97baa842d3189433a34904d208bde6c0a829 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/client-sso@npm:3.495.0" +"@aws-sdk/client-sso@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/client-sso@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: a4672a8a2c454be634cb7e97a3cc075df55ad7ab8eb494bda3e4d16831f110212069668ab4fe6085f4b09920d1a04f3bd2cca0caf3a395d874cbcf5d71c6ffe7 + checksum: b775052f1f1fe85d411b8f84572eb68e05526afec0e3ad47b6383073351b2bc30cb3f8ad8bb2f33157c0c590e9f5deafd2522f543ae470bb0234fde6850118b5 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.495.0, @aws-sdk/client-sts@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/client-sts@npm:3.495.0" +"@aws-sdk/client-sts@npm:3.496.0, @aws-sdk/client-sts@npm:^3.350.0": + version: 3.496.0 + resolution: "@aws-sdk/client-sts@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/core": ^1.3.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-middleware": ^2.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/core": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/core": ^1.3.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-middleware": ^2.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: 33c5ef3fc87a2fb8cb5dc6bc855c5756712110d1c0be713543ffd657fcae4062e10ce9a1501bb9bc7a9f821a542f6e52c3bd9d88add89af67a116f3f5ab486fd + checksum: a0427de70194c5391e883856d0c5f01f6bb610133970c6607530193c6961744424901c830872996c28c69300e51f417390e76ab5b967be7c164edc1be89e9e46 languageName: node linkType: hard -"@aws-sdk/core@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/core@npm:3.495.0" +"@aws-sdk/core@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/core@npm:3.496.0" dependencies: - "@smithy/core": ^1.3.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/signature-v4": ^2.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 + "@smithy/core": ^1.3.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/signature-v4": ^2.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 2038b283ab62a0a10880a7193cef8b3673298ff9b7ba3005e3a47df43c588d3a3a9dfdbe607b99183932675a74ec17a88a90f9a5c5f5896292a9e6cbc888cf13 + checksum: 6c83bc1092dbbf63e55d8df6630873f9088301b18a258866fa45e1b0aff8d90e77528612467e0cf3dcc24413f978762d8232e23f725c2a5385c7cb345464b178 languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.495.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.496.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/client-cognito-identity": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 8bd8841d5d2e5316c271f6e5585216f906d60a42b221d5afdd52d49b6318faa6776cdc956704a22b675c5dd41fd164a2cf512f069a99738660eeea24c3316234 + checksum: 8125e31c183be3b9ceceb0e9773a135468b232c9ea28213c7cbdd00f3640124dc4bcd15f52b5a39074d472e74048121313b1d1dc8eb1ea719ad01132bdc42481 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.495.0" +"@aws-sdk/credential-provider-env@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 5454a770638e2122877679897acb422871e0381c7e8a2a848c1837f16115bea7d3abaf56e2282b9986885de186538868f90c62292348251bbbd84c872c4a5eb0 + checksum: 0ff457ce12358c472a126e8994e04158c330c5ecf58d8fde6d431184a1d088d5358edac4e7efe8b1b64aa1c4fd386d570b5fcec30907fdc27cf2061a37910806 languageName: node linkType: hard -"@aws-sdk/credential-provider-http@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-http@npm:3.495.0" +"@aws-sdk/credential-provider-http@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/util-stream": ^2.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/util-stream": ^2.1.1 tslib: ^2.5.0 - checksum: 367563058b01bc681523de85f4753bb53c53b0975c9258d6b4583222a28543ca2b2e3b5f75c1f1f6fb25a25baeb053d8d46c86b6997c4243bfc062a03093bae8 + checksum: 2ba3736689e26afe057ce9da11ebb45c73eae13d1179c2783a0f33cf9805644c464f77b4a60da2688e23fb1956e3bcd0dbb44292434d9f162ed7a86b19a03c2f languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.495.0" +"@aws-sdk/credential-provider-ini@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.496.0" dependencies: - "@aws-sdk/credential-provider-env": 3.495.0 - "@aws-sdk/credential-provider-process": 3.495.0 - "@aws-sdk/credential-provider-sso": 3.495.0 - "@aws-sdk/credential-provider-web-identity": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/credential-provider-imds": ^2.2.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/credential-provider-env": 3.496.0 + "@aws-sdk/credential-provider-process": 3.496.0 + "@aws-sdk/credential-provider-sso": 3.496.0 + "@aws-sdk/credential-provider-web-identity": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/credential-provider-imds": ^2.2.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: fcd401dcc8a71a601888a9abd5e915ae8bdf19501ed0f497478d8844a7e11769314488b2b3a1995c33a954ab499ab118911decdfaf8151e47c4768d6e090a429 + checksum: 190449c43d687753966949397cf41215edc4ef2395dd2bb470988465b3f8bd6cf88933a7dd92032c19844d8f0dd4dd185caeaa060449e2b1d4141d47f549f27c languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.495.0, @aws-sdk/credential-provider-node@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.495.0" +"@aws-sdk/credential-provider-node@npm:3.496.0, @aws-sdk/credential-provider-node@npm:^3.350.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.496.0" dependencies: - "@aws-sdk/credential-provider-env": 3.495.0 - "@aws-sdk/credential-provider-ini": 3.495.0 - "@aws-sdk/credential-provider-process": 3.495.0 - "@aws-sdk/credential-provider-sso": 3.495.0 - "@aws-sdk/credential-provider-web-identity": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/credential-provider-imds": ^2.2.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/credential-provider-env": 3.496.0 + "@aws-sdk/credential-provider-ini": 3.496.0 + "@aws-sdk/credential-provider-process": 3.496.0 + "@aws-sdk/credential-provider-sso": 3.496.0 + "@aws-sdk/credential-provider-web-identity": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/credential-provider-imds": ^2.2.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: c661de3423fb106d1f3347e24287d0fd9208e02a2fe4159300ec7c1df90196f09df25aab06428f64d3cfcae2a28482737d8cd9ad6d8adca0aa0cfa810276b0ac + checksum: 16523a15f77d4def6c32fd465a85edc6f65d1e813b52b323f8264bf7b5e0a4bc3ede943104c218344a5152ca8f316658f911e71f8e26775b3f6852079e8ecda7 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.495.0" +"@aws-sdk/credential-provider-process@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: e19812756fb578cf5e7845db1fc2df77fadb427efaefe7ce23effa20f5f7e1661cea05179ab425e3cbef08966b1821a4ccfbd00343f68f65b0564c0b06510b9a + checksum: 324d86cc4c727faa87038fe67620e38e8aaafce7d97cfcefac80b04aff5d0077babadf881bfd85c51191350d52b040b986dad07d85d3340376cddc0b1689b7eb languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.495.0" +"@aws-sdk/credential-provider-sso@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.496.0" dependencies: - "@aws-sdk/client-sso": 3.495.0 - "@aws-sdk/token-providers": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/client-sso": 3.496.0 + "@aws-sdk/token-providers": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 2f96aba1921612026e8dcd7d7f58988c63efdf270a8688adb0704f2e442778700d7160c890cf926a89eb79a2471ee9084329bd8463998bbb416b0f5ebfe8f7e3 + checksum: fe4b34a3441777af37b7feeba60a538a59a35d5d0e8899f9d4ed6a482b8241cc0303df25049872773256c7ac19587d58aaf12330969fec7a85fdc6d1a07ed57a languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.495.0" +"@aws-sdk/credential-provider-web-identity@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: d22fda65683d0558dd03e710c8ef4762c4c500d8527cf951b3597a716a56ffbd1d9bf22089e4714325f4043a5e9eb9f6b27e2e3f217eef06de3cc3364e5a8a0f + checksum: e1041486c76c229075c16afc3f0847abe7a30fa7a61bd82dbd4e731508f8a6b64a02cc80d97c105fea8e3efb138fb574a5ddda2f900d5a822033bffcc09830d4 languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/credential-providers@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/credential-providers@npm:3.496.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.495.0 - "@aws-sdk/client-sso": 3.495.0 - "@aws-sdk/client-sts": 3.495.0 - "@aws-sdk/credential-provider-cognito-identity": 3.495.0 - "@aws-sdk/credential-provider-env": 3.495.0 - "@aws-sdk/credential-provider-http": 3.495.0 - "@aws-sdk/credential-provider-ini": 3.495.0 - "@aws-sdk/credential-provider-node": 3.495.0 - "@aws-sdk/credential-provider-process": 3.495.0 - "@aws-sdk/credential-provider-sso": 3.495.0 - "@aws-sdk/credential-provider-web-identity": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/credential-provider-imds": ^2.2.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/client-cognito-identity": 3.496.0 + "@aws-sdk/client-sso": 3.496.0 + "@aws-sdk/client-sts": 3.496.0 + "@aws-sdk/credential-provider-cognito-identity": 3.496.0 + "@aws-sdk/credential-provider-env": 3.496.0 + "@aws-sdk/credential-provider-http": 3.496.0 + "@aws-sdk/credential-provider-ini": 3.496.0 + "@aws-sdk/credential-provider-node": 3.496.0 + "@aws-sdk/credential-provider-process": 3.496.0 + "@aws-sdk/credential-provider-sso": 3.496.0 + "@aws-sdk/credential-provider-web-identity": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/credential-provider-imds": ^2.2.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 1cb201bc9fe2f2f5edd277416962e32e6f99ecc98b5d386bfcac91d6db1719d66b57b1e690d660a6fe1ac198648d5df906397ac5e2d9d5a35d345bcc3230324a + checksum: 30aac656bf113189b26856ee30175400c425781ca00ab4b7c609f949410cfd116e00a02294b9a86300e3ad9a6c8ede0cb5d6de134f057d0b17f999bfb6f0e400 languageName: node linkType: hard @@ -897,34 +897,34 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.350.0": - version: 3.495.0 - resolution: "@aws-sdk/lib-storage@npm:3.495.0" + version: 3.496.0 + resolution: "@aws-sdk/lib-storage@npm:3.496.0" dependencies: - "@smithy/abort-controller": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/smithy-client": ^2.3.0 + "@smithy/abort-controller": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/smithy-client": ^2.3.1 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: ^2.5.0 peerDependencies: "@aws-sdk/client-s3": ^3.0.0 - checksum: 6d7a1576f30ff2432f0907a8357604de5a6d338c706e34c8e85ef6fbb4e2a878c84ce41978c79844757454b0e90914c83b4c983a428a7ea0ba67b6ce7d15c9a8 + checksum: d8a76e31848543c270a0f986344088eba209f638d8962832aa0872c852ed20cafa046372c25e7105cc23c2bf5e4a183fd89a37d0cd4edba3af4c20e9c35a1309 languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.495.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 + "@aws-sdk/types": 3.496.0 "@aws-sdk/util-arn-parser": 3.495.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-config-provider": ^2.2.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-config-provider": ^2.2.1 tslib: ^2.5.0 - checksum: d75288d8d290b0749a9f17bf893dfb2d334a08707dbda2d24d187f53096c58f190e102a789310045b03792fe6d145a23af7dbac07994b27473f386328cc2bb5c + checksum: 3b0c8b9cec0202fc8bcea343758d042035d12006da21d60b356c5b7d38c8a0b8bfcbeba93f7ec4f443060815b45cd0a41e71ca9791d338d40776f53eaed8c428 languageName: node linkType: hard @@ -941,107 +941,107 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.495.0" +"@aws-sdk/middleware-expect-continue@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: d9e49bd36994cc5a0114d51fb050efecf5f9ae46bd5718b5acb98d486a864d33ced0d1a0afc96f22192a23f4a9acf8c784db3d97243b25452c55fd4e3491aec8 + checksum: cd9e3b15c425e05a96eaf05c61ff4fd01e1e24d875ade4ab7fccfa95fddb0d925b4a9ac751f9bdf981184cbbb2327eb79710833afb41d64809b25e033d6ab395 languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.495.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.496.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/types": 3.495.0 - "@smithy/is-array-buffer": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/is-array-buffer": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 5ec9e6543222349ee4cc1560ebd0ec3fc076e62bb6a6f2fcfb55cb2b7b6d7f944dd3801869bc3a0367975bf7efbc587c1acb19fc9de07faf389aa966e8eeb15f + checksum: 3740e40ea91b0c9d40c4922e5b46b35ee0cd48cb8388b0721c7e13f63ac2b534b71e5a8c29593fa1cb5a94d0f3eef001d7899766be09ec74728ac133eb9f9114 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.495.0" +"@aws-sdk/middleware-host-header@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 4b4f64827f2f75df045229987625560c1ee35a30e48044f3b60292dbb0599760459097a79e805e2982e1a1150def39758aaf5637e8696b8d21101c03988499ff + checksum: 7958c74aafb729cacfccfa0148d9788b1f621acfb52f5a50bf158f8bf2b76d23e52b8cf1908686e9ea5fdcb2cb6e92b75b6d16b938457133e83947982db3d645 languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.495.0" +"@aws-sdk/middleware-location-constraint@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 8315ea52cff810e8c19176e24528bee4a29af7f2631b1508e04a8936396dd020535e507300df9e5d8b98d4b8c1c5fd78b9e868f0500b7a66e0743394fd2313a5 + checksum: bd039384df036f8ebd7c860de3f6a152ec3366216e32d5953d9076fea5a9c9c5021ee9ea78a98670606a56625c2e5f96e6b4c33bb1554f1f9add4e31b7a67e61 languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-logger@npm:3.495.0" +"@aws-sdk/middleware-logger@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-logger@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: d36ee788bdcfc19bd73525c7b0dc476e63b26f4a798a43626fdc76776c0b46f905867bd86c8792aaa7736cbfb18b1fe36c22ef86af4cd8dacdc10e34feee0caf + checksum: 3e2859d10342bd99a6855ee1cf229ca54a27d9e16d6613f016718b14efd4586618f553c530eb19b331278b818e75c5f9bc71f02d82c8a92973e486af8da112e7 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.495.0" +"@aws-sdk/middleware-recursion-detection@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: eaa7921de46d6d2389b56eb36417a32bd1af41c4ed24f6e2956fa4fd1bb14141253368d96882402df4f6498eaee081c67c170ce74f042d74b0ec431cd1219df7 + checksum: 50a909552d9b1ef0871929eccfebbee1256305c6d4d62d1d51edd88bd7cd12fbb661c87ad9aaf788b4d8821f0c2780699c29702c42d3035a4fa08c8d7c1cc519 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.495.0" +"@aws-sdk/middleware-sdk-s3@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 + "@aws-sdk/types": 3.496.0 "@aws-sdk/util-arn-parser": 3.495.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/signature-v4": ^2.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/util-config-provider": ^2.2.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/signature-v4": ^2.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/util-config-provider": ^2.2.1 tslib: ^2.5.0 - checksum: b3c6e8fda75ca696a1ba8b2327c1cf3ec941d19af5927614949f4ba317934db2733c22fa011f614651a093a3374d7be1fa5c3f834517a48a6884060ff6cfd625 + checksum: e341f624e46912d09d14a4a7ad9ccc62cc8aa2cb4cdb683e86a3bfbb3134d07b6e5330344a63bae187448d2f0858679b1847fa2560f2ad2cdc32fa686360a0c0 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.495.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 - "@smithy/util-hex-encoding": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 + "@smithy/util-hex-encoding": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 78c2b4a59fe5fe6797b5a31c486b7169aba57c4c070db1e691c1049d03a6952a406cd88d0d612bbb252a8d06855437022f505934f137e8244db93d33572545ea + checksum: 6a462b98fc8f9c8eb97e2aba20840ea3bbcda117392cf0a14e6971f2622efe956420f2811d5ab8844fef3dcce25af479dcf56d364032561a4d229f75d6533c4b languageName: node linkType: hard @@ -1055,42 +1055,42 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-signing@npm:3.495.0" +"@aws-sdk/middleware-signing@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-signing@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/signature-v4": ^2.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-middleware": ^2.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/signature-v4": ^2.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-middleware": ^2.1.1 tslib: ^2.5.0 - checksum: ca717e5c2bc03157f4ee6f3c05d8c815ecf7bab83f5f86c8751a3106d4f5459630258d945d8840650bfb367b881ff3be1fc0c9037162f717380c2a76dec938db + checksum: e39e9569e5063796729969115a719ede44595fee713fb5b44a6a11580c6810e93466ac48437ee002734ad608edf2701159bcfc4fb563d59f8a95901de78f5456 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.495.0" +"@aws-sdk/middleware-ssec@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 5f92ae6ac0b7a869203650c343eb0f42375b8784b20abed88f2075db4413935469c988c5daee6b520aea63a2208ca412a9a78c6fbb0b14fc7719c9dbc9ffdc65 + checksum: 4a6f941346d43fe66bcccdc5da0490a38cae58b4ba0f80e629820e3e84d8f8125f3f1debf9b067b904a4a55fb29b3b58575635e1726543037512a2bb87a84442 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.495.0" +"@aws-sdk/middleware-user-agent@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: a36dcd5252b001786a8d970143855e80242fa1d88252693a8c2a244114fcfae02eb4ae958a37efa92aeff5cc792506f9199961c346fd943949141a3e078c3123 + checksum: a09de52251f0a7bf1a616881e3805fd728ef575d28c68f80b084d8db9342589adc6c95bef6b1b6085d8354459be0cf74516e05035c58e8b52a8a5b9b9133c475 languageName: node linkType: hard @@ -1138,31 +1138,31 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/region-config-resolver@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/region-config-resolver@npm:3.495.0" +"@aws-sdk/region-config-resolver@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/types": ^2.9.0 - "@smithy/util-config-provider": ^2.2.0 - "@smithy/util-middleware": ^2.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/types": ^2.9.1 + "@smithy/util-config-provider": ^2.2.1 + "@smithy/util-middleware": ^2.1.1 tslib: ^2.5.0 - checksum: f0f723dbd46761246dd771d975cb60c60afcbb10a94138183b7b00cad633ce92fdd7f2ee9ae60fcfc369d4aadd653d56562f5a14652dc8974816fbaf2c924182 + checksum: b82878109cfa96ae08008531c44def03a33a506c4fc27fdf0cf1081cee0eb17b5d28df6d37279e9fe83c487825672a9a81dc0ba88f375d2dc5b5dc1730d2ae91 languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.495.0" +"@aws-sdk/signature-v4-multi-region@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.496.0" dependencies: - "@aws-sdk/middleware-sdk-s3": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/signature-v4": ^2.1.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/middleware-sdk-s3": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/signature-v4": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 93559456f5d4cae2fde06f49c41275d411bc9c4625cb73b6fc88f165c960d7a9a5e1432ae95ad6243430e6c0d07b6710e94aaf0ca39c7514e7c9f0240a466507 + checksum: c2d8c11e30b285b827972de881307e927755d1c48f74c7d4a312fc5b7d0f1939aa9640c5b2b953ecdf8a541acdd42270ac175c026defc19e5ed5f0d49f9e160c languageName: node linkType: hard @@ -1182,48 +1182,48 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/token-providers@npm:3.495.0" +"@aws-sdk/token-providers@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/token-providers@npm:3.496.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/middleware-host-header": 3.495.0 - "@aws-sdk/middleware-logger": 3.495.0 - "@aws-sdk/middleware-recursion-detection": 3.495.0 - "@aws-sdk/middleware-user-agent": 3.495.0 - "@aws-sdk/region-config-resolver": 3.495.0 - "@aws-sdk/types": 3.495.0 - "@aws-sdk/util-endpoints": 3.495.0 - "@aws-sdk/util-user-agent-browser": 3.495.0 - "@aws-sdk/util-user-agent-node": 3.495.0 - "@smithy/config-resolver": ^2.1.0 - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/hash-node": ^2.1.0 - "@smithy/invalid-dependency": ^2.1.0 - "@smithy/middleware-content-length": ^2.1.0 - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-body-length-browser": ^2.1.0 - "@smithy/util-body-length-node": ^2.2.0 - "@smithy/util-defaults-mode-browser": ^2.1.0 - "@smithy/util-defaults-mode-node": ^2.1.0 - "@smithy/util-endpoints": ^1.1.0 - "@smithy/util-retry": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@aws-sdk/middleware-host-header": 3.496.0 + "@aws-sdk/middleware-logger": 3.496.0 + "@aws-sdk/middleware-recursion-detection": 3.496.0 + "@aws-sdk/middleware-user-agent": 3.496.0 + "@aws-sdk/region-config-resolver": 3.496.0 + "@aws-sdk/types": 3.496.0 + "@aws-sdk/util-endpoints": 3.496.0 + "@aws-sdk/util-user-agent-browser": 3.496.0 + "@aws-sdk/util-user-agent-node": 3.496.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/hash-node": ^2.1.1 + "@smithy/invalid-dependency": ^2.1.1 + "@smithy/middleware-content-length": ^2.1.1 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-body-length-browser": ^2.1.1 + "@smithy/util-body-length-node": ^2.2.1 + "@smithy/util-defaults-mode-browser": ^2.1.1 + "@smithy/util-defaults-mode-node": ^2.1.1 + "@smithy/util-endpoints": ^1.1.1 + "@smithy/util-retry": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 76b8dacaf9d0d9c608866d10bb8d0d42070e88872688f9dae3cd2cce2cd573bb6937ffd4e4ef3ca94763ac4f549faaf6f7d1e1bea714d7ec37b5a7ca533f5599 + checksum: 54ad339923d2e4e4a021a2d21b39c1185b33b02abbecac3cb71786dbc76db84c1b5237d1929a0b39cd7b1420312e1fc523050c4588a3a37c26209e1ed934f069 languageName: node linkType: hard @@ -1237,13 +1237,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/types@npm:3.495.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": - version: 3.495.0 - resolution: "@aws-sdk/types@npm:3.495.0" +"@aws-sdk/types@npm:3.496.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": + version: 3.496.0 + resolution: "@aws-sdk/types@npm:3.496.0" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 786d7d860cd8c22a631d48e5a2a0570b941f43927d3bee1da36d4749f71fbdc2e7908f15f73582d0572c74f9f0e6b411a33f94facf27aec93d9f2920b9a662f4 + checksum: d0d3b8a5cf8e9ab588c005d63b39b9c76f15913982cbe055b12ab4ad51c4fecb8faed935e96d4f8b19a38d6668ccdcf3555a1ca69c18831042ec06927bd73c74 languageName: node linkType: hard @@ -1277,15 +1277,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/util-endpoints@npm:3.495.0" +"@aws-sdk/util-endpoints@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/util-endpoints@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 - "@smithy/util-endpoints": ^1.1.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 + "@smithy/util-endpoints": ^1.1.1 tslib: ^2.5.0 - checksum: a479feeea6b136c9a07f885373e859a37f19b4d55cf6f9ecd89017c13349f55d239aa5a083465b1d945ff6bf13809efd27133340bdecaef875e72bd60d534c76 + checksum: d2de596852c6c78b4145f6b152d1e05958415101898ca69e0ade5a2ce63dfc52b1fc4ccaeb1f34d40a4b5cf96cba4ec19f39935515acaa7682fe21a781f9bfb4 languageName: node linkType: hard @@ -1337,32 +1337,32 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.495.0" +"@aws-sdk/util-user-agent-browser@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/types": ^2.9.1 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 47071d5d514e08ef2818e42b437798238df771bff320256eef4589a24dae3f84ac064897c941919e1b571aaf95345282a7e8e43729f787526b70e80dfba8dead + checksum: 0f7d5530a0f750094af2aa899323189c94f946dd870b37da965df49d705e05da11046da005864f5151cf3f4393d3e0ba39e71a7ca6121fc5702cdd5f3a1a502c languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.495.0" +"@aws-sdk/util-user-agent-node@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.496.0" dependencies: - "@aws-sdk/types": 3.495.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/types": ^2.9.0 + "@aws-sdk/types": 3.496.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: e4c188c91b78b33d8da77984f3513a61ece3454d02d16605ec985b8481d309d12ad7544d2233d1396aaffd0758b4d0d1c4c143b9edd68d66e2681a4fd32eac34 + checksum: 9ea68207f061a04e93cdee7b4f0e47bae3f4afd8bb922179bd4ea284a4756e879c1f76f58c87a3aedb65eebbed82f453bf94dd26095ebd4728169b1e1a6c9d4c languageName: node linkType: hard @@ -1385,13 +1385,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/xml-builder@npm:3.495.0": - version: 3.495.0 - resolution: "@aws-sdk/xml-builder@npm:3.495.0" +"@aws-sdk/xml-builder@npm:3.496.0": + version: 3.496.0 + resolution: "@aws-sdk/xml-builder@npm:3.496.0" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: f2c695268c887e1f0e39991867ceca861f3242a0c12689ccfe582bce4f3543cf241a7ea4873a4a1c8b3637a5592a29c8f9266040f375a3eaaa9aebce6d697ecd + checksum: 42d9d60c1c7f8a22f6a64ac36ba9d5ccff200ce963beebb142ad4708d2486fe29b61ecb37bbccd6f0019e25107aa2327e6d8550d30214b4895e7219ccb8661c8 languageName: node linkType: hard @@ -15377,7 +15377,7 @@ __metadata: languageName: node linkType: hard -"@smithy/abort-controller@npm:^2.1.0, @smithy/abort-controller@npm:^2.1.1": +"@smithy/abort-controller@npm:^2.1.1": version: 2.1.1 resolution: "@smithy/abort-controller@npm:2.1.1" dependencies: @@ -15387,276 +15387,276 @@ __metadata: languageName: node linkType: hard -"@smithy/chunked-blob-reader-native@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/chunked-blob-reader-native@npm:2.1.0" +"@smithy/chunked-blob-reader-native@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/chunked-blob-reader-native@npm:2.1.1" dependencies: - "@smithy/util-base64": ^2.1.0 + "@smithy/util-base64": ^2.1.1 tslib: ^2.5.0 - checksum: 39ff866a5887dfbe515463d841d869559e18aa18e97a644be49f12821012c171d89d759dbe3999b0bedcafdad8c1202c747b2f5a71a6c1f63082b0fae13b844c + checksum: 82f475b9090e12306292d46b27cca841691a251db5c9b5520830f7e5c947bbe69b497619773b25754dcdd8580620fd3677f478e1325501549f6182d78e95c583 languageName: node linkType: hard -"@smithy/chunked-blob-reader@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/chunked-blob-reader@npm:2.1.0" +"@smithy/chunked-blob-reader@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/chunked-blob-reader@npm:2.1.1" dependencies: tslib: ^2.5.0 - checksum: 0e59309a3566057e6529d33954ac2621d979dcbc93f92696df617c89bf7b382576cac43b874cba8b394a16f619d60d25acc6f2c839278c2c50df3ddeacb90e02 + checksum: e9d7f6f80fffccb5b615aa4eecf0e48849e625a70a79acc371b74b3d5e6dffed3b0d21d8beafe2e1cc1ebc235b8c24ed7d7e31e8c3565d97efe1238dda82c813 languageName: node linkType: hard -"@smithy/config-resolver@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/config-resolver@npm:2.1.0" +"@smithy/config-resolver@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/config-resolver@npm:2.1.1" dependencies: - "@smithy/node-config-provider": ^2.2.0 - "@smithy/types": ^2.9.0 - "@smithy/util-config-provider": ^2.2.0 - "@smithy/util-middleware": ^2.1.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/types": ^2.9.1 + "@smithy/util-config-provider": ^2.2.1 + "@smithy/util-middleware": ^2.1.1 tslib: ^2.5.0 - checksum: 09bda075b007bf08a3253ea257685ade769f70e0735d154c4495469a87ac941efc76501c3a5afecb1209ade4a35db2e4c0ae6c50f71b9970576c7eade8f4b42b + checksum: 18c8af60cbc528887a82dc0eabaf0b398d868511dc6b10fa01f41c77ea9c2679ab2137feaee51aa9060dbc5c46fc33325a659f4bd54549c203f64e15dbacbc0a languageName: node linkType: hard -"@smithy/core@npm:^1.3.0": - version: 1.3.0 - resolution: "@smithy/core@npm:1.3.0" +"@smithy/core@npm:^1.3.1": + version: 1.3.1 + resolution: "@smithy/core@npm:1.3.1" dependencies: - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-retry": ^2.1.0 - "@smithy/middleware-serde": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/util-middleware": ^2.1.0 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-retry": ^2.1.1 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/util-middleware": ^2.1.1 tslib: ^2.5.0 - checksum: b35792e3915412e15062e561c3de84cd5ffdf3fe6d053460a48843bd97d16af44048e8cede18011b5fec0b12732f7d22feedcae526cd077d18c2a3567e291686 + checksum: b8a34ac6000afaba2d3ddf85f3ef2ad9e70fc20ae54ccb7e79d22b7afe3b8fa9c2409ed14dd2d0cabc99a1d1f51fceaf91ab81d1d2c8bf11ca94101619f3cde2 languageName: node linkType: hard -"@smithy/credential-provider-imds@npm:^2.2.0": - version: 2.2.0 - resolution: "@smithy/credential-provider-imds@npm:2.2.0" +"@smithy/credential-provider-imds@npm:^2.2.1": + version: 2.2.1 + resolution: "@smithy/credential-provider-imds@npm:2.2.1" dependencies: - "@smithy/node-config-provider": ^2.2.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 tslib: ^2.5.0 - checksum: 4c1722f5e541cb64211f8d6cd81298ae6c74a41f93c223f7c8e2b118cf103cdd16e20ff6440c8393aa4f017c619fa8ca691049729f5869b8f9aa852b1b9cb448 + checksum: a4e693719384440718728772ea2126be133bbc83fa7bfcefd236942ccb28d1390f1b32fe3262bf330ba4c8e600d01ac73a57110eb42462ec1eb6bbd51e2676a6 languageName: node linkType: hard -"@smithy/eventstream-codec@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/eventstream-codec@npm:2.1.0" +"@smithy/eventstream-codec@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/eventstream-codec@npm:2.1.1" dependencies: "@aws-crypto/crc32": 3.0.0 - "@smithy/types": ^2.9.0 - "@smithy/util-hex-encoding": ^2.1.0 + "@smithy/types": ^2.9.1 + "@smithy/util-hex-encoding": ^2.1.1 tslib: ^2.5.0 - checksum: de1f72d3d4146b3c4bb81aa93b423b6cce89a606feeb209c6b181643686cd1832af56ebd632041c8d708e1923f8c779353953b988b437a35ca4a9b57c9c57329 + checksum: 7e59028a69e669d1ca1a0fef788f9892a427fad32f33ded731cbfa3bde0163acbc1e7d207e0ce3eae2d3b53f48dce7a99ded092122cdf78e4f392cffd762bfe3 languageName: node linkType: hard -"@smithy/eventstream-serde-browser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/eventstream-serde-browser@npm:2.1.0" +"@smithy/eventstream-serde-browser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/eventstream-serde-browser@npm:2.1.1" dependencies: - "@smithy/eventstream-serde-universal": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/eventstream-serde-universal": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 77b2a904ec7562ebd4eb69b960ecf1b134c8e9a676b52804ec7d40703f505d36158390f511f3d5d56ae1991d6f4ac30c4b8c0889e09ffa384f470e573ab838e2 + checksum: c909b620de25e9779653742012c665df8c76bf5193bb79054ef302bc3c08b0fa5620884a5965a3a6ebbb4f059da1b05221662a7a652aa979f4830f26c534be60 languageName: node linkType: hard -"@smithy/eventstream-serde-config-resolver@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/eventstream-serde-config-resolver@npm:2.1.0" +"@smithy/eventstream-serde-config-resolver@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/eventstream-serde-config-resolver@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 62b4c7062a775954a76744dd268eeb0504669f81e537245a876851d97ed4187ceb0685fe02bfa73e6e04502f81cb81b4acdf40c8237d7049c7ed8df8c1952ac2 + checksum: 14d4d1c638be460290eb05dec3a700d742f8ce77814c1c235fbd7cf248941a387595f1cd684b9acfc3e081a8d9e6dc2810f10c894b3e08f16f0c3adb130cb736 languageName: node linkType: hard -"@smithy/eventstream-serde-node@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/eventstream-serde-node@npm:2.1.0" +"@smithy/eventstream-serde-node@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/eventstream-serde-node@npm:2.1.1" dependencies: - "@smithy/eventstream-serde-universal": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/eventstream-serde-universal": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: f882576d7a26c8ff3013550a6d8c224ab2a4082fb28fb21edbe4fa80593041e7cad0b86c0c8c1ffcebffda9fd55f63d84ae4f8524984dcb7243afc221ccdd000 + checksum: 4be3dd11854d66310273bae07faafd4ca872158be8d3ef7bdc1dec55a175e983975750ebdaf762e74daf80495e379bd2791971a50899076865759a75b2634d73 languageName: node linkType: hard -"@smithy/eventstream-serde-universal@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/eventstream-serde-universal@npm:2.1.0" +"@smithy/eventstream-serde-universal@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/eventstream-serde-universal@npm:2.1.1" dependencies: - "@smithy/eventstream-codec": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/eventstream-codec": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 206e7c7154a485c5538d970fc95b8b3d0ebbce6be0f02617146ab17b02787e4b424e6ae06cc38397fb9477a6db25b5afff76b4756ba2f736a68fd01154fc9f28 + checksum: 99c7cf5b869f8e6323e976335a3238b77d3b1c32005fc78093d448981883294e4d59bcbd419e88d6a53c76aab01c27bc9af63a5dfed9451d2302eaf6ccddbd64 languageName: node linkType: hard -"@smithy/fetch-http-handler@npm:^2.4.0": - version: 2.4.0 - resolution: "@smithy/fetch-http-handler@npm:2.4.0" +"@smithy/fetch-http-handler@npm:^2.4.1": + version: 2.4.1 + resolution: "@smithy/fetch-http-handler@npm:2.4.1" dependencies: - "@smithy/protocol-http": ^3.1.0 - "@smithy/querystring-builder": ^2.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-base64": ^2.1.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/querystring-builder": ^2.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-base64": ^2.1.1 tslib: ^2.5.0 - checksum: 1f6165ca546bb274d6111b9819ae7d4969ea79a81e718b41438feae04d2aaee942ef62464c3e6e2999e78f27b977c39c560e06fbb76fb9fda443c2bc77db2a3d + checksum: c23701d45bca6842b5206939ccd587e3482ace9f656ae3dca92ff0bad3fefb846cc33683dff41a19186f2a5662ca6cd66c8aefda4664b7dfd95f9a616055a1c1 languageName: node linkType: hard -"@smithy/hash-blob-browser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/hash-blob-browser@npm:2.1.0" +"@smithy/hash-blob-browser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/hash-blob-browser@npm:2.1.1" dependencies: - "@smithy/chunked-blob-reader": ^2.1.0 - "@smithy/chunked-blob-reader-native": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/chunked-blob-reader": ^2.1.1 + "@smithy/chunked-blob-reader-native": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: c76e9a9393f1fcfa3b567083ea50764f565d01879bb8062da09c8cf403a92867e7e60fdae0d6f82d4df7a684026537efa9e6be7d26245e08ea5ec6bd4680de19 + checksum: f4dc57c11ef32ddea0e7094d2c230aa274f1e410d84c789d8f5e2ed8a090da8675ca76da9605d297285324107ea8106af1c2aab2859bd62d6e9a8db415eb8e55 languageName: node linkType: hard -"@smithy/hash-node@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/hash-node@npm:2.1.0" +"@smithy/hash-node@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/hash-node@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 - "@smithy/util-buffer-from": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@smithy/types": ^2.9.1 + "@smithy/util-buffer-from": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: fbeca22f0ce172e16530c6b84ac8452a6fdf965451bfacd7a626dc992ec69696edea7dc95e5e4bc8109ccb905db104d62b023788432df075e5a1a70e976907fa + checksum: 5d5aae69b94dcb8abaf9f6a5b53ee320c9e126445c4540fcf2169e8ea7ebd953acff7fd77ba514614f6ebbb0baf412e878eebcc3427a5b9b6f8ee39abbc59230 languageName: node linkType: hard -"@smithy/hash-stream-node@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/hash-stream-node@npm:2.1.0" +"@smithy/hash-stream-node@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/hash-stream-node@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 - "@smithy/util-utf8": ^2.1.0 + "@smithy/types": ^2.9.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 0f86820521fda9d82b5114630ac69cb0a04ad68158ef02636b3c7bcd46461b9f7ec1bf3c46a1cb34bcac135faf61f94f127913f365f6ee9187928932b4bfaabb + checksum: da3c4ba14c648ee0d2fe7d3298d601150ee0ce5ac0c7d9f54a88148b5f67b03513b41560f76f5f109f11196547b4dc4f26e314774794596d7e3ee1103a9906a8 languageName: node linkType: hard -"@smithy/invalid-dependency@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/invalid-dependency@npm:2.1.0" +"@smithy/invalid-dependency@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/invalid-dependency@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 72b8f405cc77a0050f46f4ef648322aa5c1a421f25cac282b172f421b20a790809ffd621959e2278d174d6daf6f3c45acc533236fbfbc157a2537aeb88206f26 + checksum: f95ecd9acd337a408b6608a3f451b24a61e26149878f61fc7855c724888f0d28abf0b798d16990dadb7eafc8027098f934c0cd44e75d01d31617bd1fbfd93935 languageName: node linkType: hard -"@smithy/is-array-buffer@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/is-array-buffer@npm:2.1.0" +"@smithy/is-array-buffer@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/is-array-buffer@npm:2.1.1" dependencies: tslib: ^2.5.0 - checksum: cf32161a01a0384b47738bbc58dd6a317e3b5113f411ad141f174cc44e2a9e91f72082bdefa4477dc53c8e3ab6292d1487f26d66fce4f1fe7cc5da4ecde31e11 + checksum: 5dbf9ed59715c871321d0624e3842340c1d662d2e8b78313d1658d39eb793b3ac5c379d573eba0a2ca3add9b313848d4d93fd04bb8565c75fbab749928b239a6 languageName: node linkType: hard -"@smithy/md5-js@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/md5-js@npm:2.1.0" +"@smithy/md5-js@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/md5-js@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 - "@smithy/util-utf8": ^2.1.0 + "@smithy/types": ^2.9.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: b8d2f24df059e33feff8362fc9c4bdffc6f3e220f5a9c25959ea763d2f92d482ab7fb554164bc846b7d838c398be1fa76147cca616bf3e04c560e31c1cc315d5 + checksum: d15bc426a46d80d450b555a5ccd3d5a6bf37190f4b9ccb705852cd53ce61e4fe6fb08a569b87303ee787da57023f2b75f0e7893644af16c89e9aaf513f8afff3 languageName: node linkType: hard -"@smithy/middleware-content-length@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/middleware-content-length@npm:2.1.0" +"@smithy/middleware-content-length@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/middleware-content-length@npm:2.1.1" dependencies: - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 794a467d1db31015ee0fc3886363b4081b7213268c8ce175647077b2b7485a9a280b00349013b79d5f545476b7818ace85e14428df5b5587bb96219685cc7ebe + checksum: cb0ea801f72a1a01f5956b3526df930fc19762b07d43a3871ff29815f621603410753d37710d72675d9761b93da32a38cfd5195582de8b6a47e299b1f073be25 languageName: node linkType: hard -"@smithy/middleware-endpoint@npm:^2.4.0": - version: 2.4.0 - resolution: "@smithy/middleware-endpoint@npm:2.4.0" +"@smithy/middleware-endpoint@npm:^2.4.1": + version: 2.4.1 + resolution: "@smithy/middleware-endpoint@npm:2.4.1" dependencies: - "@smithy/middleware-serde": ^2.1.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/url-parser": ^2.1.0 - "@smithy/util-middleware": ^2.1.0 + "@smithy/middleware-serde": ^2.1.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/url-parser": ^2.1.1 + "@smithy/util-middleware": ^2.1.1 tslib: ^2.5.0 - checksum: 0ff6c10d5ddeef3add524c1b4fbe155aeaf6aeeff9c714111236bc5ad76f8459ec82dc9bd07355a63ef509ffb51173514d268d83b89eb75537976722400e7786 + checksum: 685f74c76cba205bdb20ad7bda449b73e498ae2e9074a026d48b38c7b4456d8a0cfb4fdb48625b65f93f3a75e92eaf7951db28f8e9f44e50ce18fd59a7b325af languageName: node linkType: hard -"@smithy/middleware-retry@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/middleware-retry@npm:2.1.0" +"@smithy/middleware-retry@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/middleware-retry@npm:2.1.1" dependencies: - "@smithy/node-config-provider": ^2.2.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/service-error-classification": ^2.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/util-middleware": ^2.1.0 - "@smithy/util-retry": ^2.1.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/service-error-classification": ^2.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/util-middleware": ^2.1.1 + "@smithy/util-retry": ^2.1.1 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: 4ac9dacd7295f31378d8828810e44f7f7c526761010cef0e5cbd602cdc7306906a42e57b7d06e5e31e100f2cf9a3d73398d6350e9dc502b3375a2182608dbb16 + checksum: a4bc59d2ff8f65367aeb93391a2aafc7caf8031d8b2dfb32ee35748cdc46e06d5182c37bee90d7a107e890959bd40e6a7f4041bc1b0b36a99d14919b1cc78812 languageName: node linkType: hard -"@smithy/middleware-serde@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/middleware-serde@npm:2.1.0" +"@smithy/middleware-serde@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/middleware-serde@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: d225f8bd960a1586219c53926ec33ae06f868f558ccc1777850abd160fb1d179ca4d4838c67032e8ea5cc8491e721b1317d14f040ffe735a6b0515e6847eda1c + checksum: ed77b80ac6b68640ee4bf8310bc4d9f5aa13de2741333f6f03a4983e897fa66e0de057d178e78d9ba095d5686d3e4531437c9dd2583366efe948bd75b2aa8581 languageName: node linkType: hard -"@smithy/middleware-stack@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/middleware-stack@npm:2.1.0" +"@smithy/middleware-stack@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/middleware-stack@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 160abf4bd8ad0799f25053054585b6da987373f1352649f215a496d007a8c2ffed9cb1f2fde7219dcf8dc6883952be63d547f7b6cfcab45db61e645ff6d4bebb + checksum: 0d7c1051c96fcf19f7d5e96bc59484ce13df4e570c1da3eda74d23a7911b41eb61d6c378aad0aa21f7e9c72934148bdf39f9767c57abd4845aa4417a84e3f6e4 languageName: node linkType: hard -"@smithy/node-config-provider@npm:^2.2.0": - version: 2.2.0 - resolution: "@smithy/node-config-provider@npm:2.2.0" +"@smithy/node-config-provider@npm:^2.2.1": + version: 2.2.1 + resolution: "@smithy/node-config-provider@npm:2.2.1" dependencies: - "@smithy/property-provider": ^2.1.0 - "@smithy/shared-ini-file-loader": ^2.3.0 - "@smithy/types": ^2.9.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/shared-ini-file-loader": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: d46a83f51e7186bdc80404df260e676979f5f576ad6e958ee59a24feeb0ac661558646d772991e70bef63398c24e4cf0dfea38cd76935860aaab9c7d61e4d234 + checksum: 62ed3124d888a10cac633a250fbe12d6c5b8aa75ea691889abebce227cbaf155f3db00fa6beb453fbd6147e667e70819d043da1750980669451281a28eafd285 languageName: node linkType: hard -"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.3.0": +"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.3.1": version: 2.3.1 resolution: "@smithy/node-http-handler@npm:2.3.1" dependencies: @@ -15669,17 +15669,17 @@ __metadata: languageName: node linkType: hard -"@smithy/property-provider@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/property-provider@npm:2.1.0" +"@smithy/property-provider@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/property-provider@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: abeceb40091e121bdbc4788af8c4664d4b624a5a3ffe17185cbe29c21deb785b9788dfec70bb552d82422ab566f4c8aed0b7697d50abc8bf76e498ad929e49a5 + checksum: e87d70c4efe07e830cfb2094b046af89175b87b13259fba37641aa7bfc2ab0c7bf2397797ac48b92e1feb11bf6129b82b350519172093efd7ac4d3a4a98bbe2f languageName: node linkType: hard -"@smithy/protocol-http@npm:^3.1.0, @smithy/protocol-http@npm:^3.1.1": +"@smithy/protocol-http@npm:^3.1.1": version: 3.1.1 resolution: "@smithy/protocol-http@npm:3.1.1" dependencies: @@ -15689,7 +15689,7 @@ __metadata: languageName: node linkType: hard -"@smithy/querystring-builder@npm:^2.1.0, @smithy/querystring-builder@npm:^2.1.1": +"@smithy/querystring-builder@npm:^2.1.1": version: 2.1.1 resolution: "@smithy/querystring-builder@npm:2.1.1" dependencies: @@ -15700,62 +15700,62 @@ __metadata: languageName: node linkType: hard -"@smithy/querystring-parser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/querystring-parser@npm:2.1.0" +"@smithy/querystring-parser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/querystring-parser@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 59c149d9654712066496c4685ab1ebf1ca792dd05de8bb88cdd512a2408b2c62cd618a3d3aab1eae2a74eb5b6da3649ef68b01e67b1c4838fe6881dc25e73775 + checksum: bfac40793b0e42f4e25137db4e7d866debfa32557359cc41e02a23174a6fd8e0132f098cef5669a3ddf5211e477c9c97d4aa9039b35c7b4a29f2207236da236e languageName: node linkType: hard -"@smithy/service-error-classification@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/service-error-classification@npm:2.1.0" +"@smithy/service-error-classification@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/service-error-classification@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 - checksum: 3889559eea95d96175b701d968d2b40409c0abee7de7434e6e9ebf4d5d1ecf90bda0cbf62b9768b787f0d18e39e729bc8d67bd6b1537df253cb854b263a96dc6 + "@smithy/types": ^2.9.1 + checksum: 59a5e3cb0fb42d70fc2d85814124abbff60e28cc9aa45d87fde3370e25943abaf4b6baf62cc40e496c3687e9fa9161156a055ad29a4f7ce8dd7d937bbf49f9a7 languageName: node linkType: hard -"@smithy/shared-ini-file-loader@npm:^2.3.0": - version: 2.3.0 - resolution: "@smithy/shared-ini-file-loader@npm:2.3.0" +"@smithy/shared-ini-file-loader@npm:^2.3.1": + version: 2.3.1 + resolution: "@smithy/shared-ini-file-loader@npm:2.3.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: ea2855ef47df8711b89623f74e84151ced3716fd0255310071e67e8d1a303e0b1a9aa86a72cc7216ad82a162f37b019c639e5a7c5b4a8462499fa4def7e40bdb + checksum: 89b0dfb65faab917fcb4a6a8f34a85d668a759ccbfd6c4dc3d6311e59a8f1b78baab1d97402c333d2207da810cb00de9d5b4379f114bde82135f9aa0d0069cab languageName: node linkType: hard -"@smithy/signature-v4@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/signature-v4@npm:2.1.0" +"@smithy/signature-v4@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/signature-v4@npm:2.1.1" dependencies: - "@smithy/eventstream-codec": ^2.1.0 - "@smithy/is-array-buffer": ^2.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-hex-encoding": ^2.1.0 - "@smithy/util-middleware": ^2.1.0 - "@smithy/util-uri-escape": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@smithy/eventstream-codec": ^2.1.1 + "@smithy/is-array-buffer": ^2.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-hex-encoding": ^2.1.1 + "@smithy/util-middleware": ^2.1.1 + "@smithy/util-uri-escape": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 3e2fa005930f8228b9480087f4eeacbf36200e268c760890182e21ae4035b5e02e9d10bc6d9f9ae0bc257b02cadadb522afdf1f3bddf3c2d61c3e3796f90e8ca + checksum: fa3d4728b0bcf98e606a6e13a47f91efc6eb9edb6925ba48c3b9cecdf8170adf27e28a0684dabe385e8a7379d0743f52b19cd9a1a01884cd0f75c048c4324fd2 languageName: node linkType: hard -"@smithy/smithy-client@npm:^2.3.0": - version: 2.3.0 - resolution: "@smithy/smithy-client@npm:2.3.0" +"@smithy/smithy-client@npm:^2.3.1": + version: 2.3.1 + resolution: "@smithy/smithy-client@npm:2.3.1" dependencies: - "@smithy/middleware-endpoint": ^2.4.0 - "@smithy/middleware-stack": ^2.1.0 - "@smithy/protocol-http": ^3.1.0 - "@smithy/types": ^2.9.0 - "@smithy/util-stream": ^2.1.0 + "@smithy/middleware-endpoint": ^2.4.1 + "@smithy/middleware-stack": ^2.1.1 + "@smithy/protocol-http": ^3.1.1 + "@smithy/types": ^2.9.1 + "@smithy/util-stream": ^2.1.1 tslib: ^2.5.0 - checksum: ed101b2b8cb4c439fb7e0e37d399317e599b8ea9cef267da5491c63797d85f82b42675a4e69e2795ad984a7ef00f87c56276a755155e11fc6f5c56f41b6b813a + checksum: 9b13c361528b3120b1a1db17cd60521d04c72f664c2709be20934cea12756117441d2a33d0464ff3099be11ccb12946c62ece1126b9532eb8f6243a35d6fd171 languageName: node linkType: hard @@ -15768,7 +15768,7 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^2.9.0, @smithy/types@npm:^2.9.1": +"@smithy/types@npm:^2.9.1": version: 2.9.1 resolution: "@smithy/types@npm:2.9.1" dependencies: @@ -15777,150 +15777,150 @@ __metadata: languageName: node linkType: hard -"@smithy/url-parser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/url-parser@npm:2.1.0" +"@smithy/url-parser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/url-parser@npm:2.1.1" dependencies: - "@smithy/querystring-parser": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/querystring-parser": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: e61ee1d7a3357f02f8f0d8364de3d2798134b0b5c686e3ab12917352feff5e445d0b8b16237f2c5444a9e48c8df57e8ca91770b29d804f8f469d6bdbc7498f97 + checksum: 5c939f3ff9c53a0b7a0c5a1ac7641f229598d2bf9499e1abf4d33c1c1cd13bd5f7fcfffd00c366ca9f8092d28979a4a958b80f9bbc91e817e4d1940451e93489 languageName: node linkType: hard -"@smithy/util-base64@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-base64@npm:2.1.0" +"@smithy/util-base64@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-base64@npm:2.1.1" dependencies: - "@smithy/util-buffer-from": ^2.1.0 + "@smithy/util-buffer-from": ^2.1.1 tslib: ^2.5.0 - checksum: 76a58830c82c4400374eddc09cd38f3f62f14f0d42295dfb468ed7cfc3928a7093c2879c01ed2e8c858f0bab47710a0514deb8da754d640b94a70281bec87315 + checksum: 6dbb93b8745798d56476d37c99dc9f53fe5fc29329b8161fc9e5c55c5a3062916b3e5e4dd596541b248979eefa550d8da7fbb6ab254bf069cb4c920aea6c3590 languageName: node linkType: hard -"@smithy/util-body-length-browser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-body-length-browser@npm:2.1.0" +"@smithy/util-body-length-browser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-body-length-browser@npm:2.1.1" dependencies: tslib: ^2.5.0 - checksum: ca37935d801ae4812e39c70e54651aaa029ad0bb6720a3529d9a0367a64316e892683805b25a36981126f458a3d3f5633be4f9b9e8de2a7293b8ea08bfd8607a + checksum: 6f7808a41b57a5ab1334f0d036ecec6809a959bcfe6a200f985f35e0c96e72f34fdcb6154873f795835d1d927098055e2dec31ebfb5e5382d1c4c612c80a37c0 languageName: node linkType: hard -"@smithy/util-body-length-node@npm:^2.2.0": - version: 2.2.0 - resolution: "@smithy/util-body-length-node@npm:2.2.0" +"@smithy/util-body-length-node@npm:^2.2.1": + version: 2.2.1 + resolution: "@smithy/util-body-length-node@npm:2.2.1" dependencies: tslib: ^2.5.0 - checksum: a2ada7daeb31147675b66f0a95cd24ed10ee800211ddde34b1bbbd0a2bfbfdc82efbc8fe2c9bf4e18a67e7112aaf432f381a32e19be06735c8f4e0c3eec1a4a5 + checksum: 6bddc6fac7c9875ae7baaf6088d91192fbe4405bc5c1b69100d52aa1bfebabcc194f5f1b159d8f6f3ade3b54e416f185781970c30a97d4b0a7cec6d02fc490c4 languageName: node linkType: hard -"@smithy/util-buffer-from@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-buffer-from@npm:2.1.0" +"@smithy/util-buffer-from@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-buffer-from@npm:2.1.1" dependencies: - "@smithy/is-array-buffer": ^2.1.0 + "@smithy/is-array-buffer": ^2.1.1 tslib: ^2.5.0 - checksum: 0e90dd3f324eae8863377d11f88cbdabf22aa29f5cb365bda8c5a23f24bbc2671c314aefccfab33e048fbeb18c939228bb43a5f0dc719fed71d484142ef3aaf5 + checksum: 8dc7f9afaa356696f14a80cd983a750cbad8eba7c46498ed74fb8ec0cb307f14df64fb10ceb30b2d4792395bb8b216c89155a93dee0f2b3e5cab94fef459a195 languageName: node linkType: hard -"@smithy/util-config-provider@npm:^2.2.0": - version: 2.2.0 - resolution: "@smithy/util-config-provider@npm:2.2.0" +"@smithy/util-config-provider@npm:^2.2.1": + version: 2.2.1 + resolution: "@smithy/util-config-provider@npm:2.2.1" dependencies: tslib: ^2.5.0 - checksum: ec61ff7f2f89c7c7c621141b9e19e8a5fa3c05041632d9b894b28b7d8bae9231271a61acfce19737bde0efce186062fa03cc05e4a006d96ea5c35ecf8a7e7e8d + checksum: f5b34bcf6ef944779f20d7639070e87a521e1a5620e5a91f2d2dbd764824985930a68b71b0b2bde12e1eaac947155789b73a8c09c1aa7ab923f08e42a4173ef4 languageName: node linkType: hard -"@smithy/util-defaults-mode-browser@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-defaults-mode-browser@npm:2.1.0" +"@smithy/util-defaults-mode-browser@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-defaults-mode-browser@npm:2.1.1" dependencies: - "@smithy/property-provider": ^2.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 + "@smithy/property-provider": ^2.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 55a5cf94ddeb573b959265609e3854bdca62d9c1460a9d12b765266d6a8bdba8485a8beb765495755ffb32df1cc78b97c8f4f1c2b3556f073cd988b278e07b4f + checksum: 5d3b11be1768410e24ad9829dc70bed9b50419f85a8ca934c6296e21e278d87f665cfdb603241ef749f80d154a2c4be26cd29338daecc625d31b30af8bd9c139 languageName: node linkType: hard -"@smithy/util-defaults-mode-node@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-defaults-mode-node@npm:2.1.0" +"@smithy/util-defaults-mode-node@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-defaults-mode-node@npm:2.1.1" dependencies: - "@smithy/config-resolver": ^2.1.0 - "@smithy/credential-provider-imds": ^2.2.0 - "@smithy/node-config-provider": ^2.2.0 - "@smithy/property-provider": ^2.1.0 - "@smithy/smithy-client": ^2.3.0 - "@smithy/types": ^2.9.0 + "@smithy/config-resolver": ^2.1.1 + "@smithy/credential-provider-imds": ^2.2.1 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/property-provider": ^2.1.1 + "@smithy/smithy-client": ^2.3.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 4f244dc6d85c356f0e83296d75a57179ec4ce16001d26169a93d3d449a0be0748495309db96f4425dbd0ecf85d00a46be6a5869c14d1b3083d393efd9fef5edf + checksum: 3d32e90ce9b6340f26f856c1fdd627b753faaa403813b7e6a51583bfaa6b7eab0f52fd6e067afb9f14e741c6fa31dfedfe22c7c73911b48f8f4fab0510992c32 languageName: node linkType: hard -"@smithy/util-endpoints@npm:^1.1.0": - version: 1.1.0 - resolution: "@smithy/util-endpoints@npm:1.1.0" +"@smithy/util-endpoints@npm:^1.1.1": + version: 1.1.1 + resolution: "@smithy/util-endpoints@npm:1.1.1" dependencies: - "@smithy/node-config-provider": ^2.2.0 - "@smithy/types": ^2.9.0 + "@smithy/node-config-provider": ^2.2.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: ab646e2a8779e5901ff8be43744516ef413514efc9b42c82cea0461c9ee9b25b44709666b1504124d98c3512e93e5b24e532b0cade7031e4ea2ad7c3a752b306 + checksum: 40619bf739c1fc959486946cb49319f34c9c4c5c19f46cdefc7ff8e7331b84f6ad7a4aeb8a0268f6d77d266ff5ec9df8d2244094dd79ae469983e9c07e43766a languageName: node linkType: hard -"@smithy/util-hex-encoding@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-hex-encoding@npm:2.1.0" +"@smithy/util-hex-encoding@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-hex-encoding@npm:2.1.1" dependencies: tslib: ^2.5.0 - checksum: 6a86bd3c7429b1762300a500d86b17a20499d9364c14c7e08aba49db3ee98b08dfa576513bbbd0cfed466807e04b6d71ff4922e71b89e59a79f0ffe482691364 + checksum: eae5c94fd4d57dccbae5ad4d7684787b1e9b1df944cf9fcb497cbefaed6aec49c0a777cc1ea4d10fa7002b82f0b73b8830ae2efe98ed35a62dcf3c4f7d08a4cd languageName: node linkType: hard -"@smithy/util-middleware@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-middleware@npm:2.1.0" +"@smithy/util-middleware@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-middleware@npm:2.1.1" dependencies: - "@smithy/types": ^2.9.0 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 5b64efb80ad8f0855fd313812ea083a601d78e219898bab467fbfda50a8f7e1ee8399b895ca8c797c4becc8edc701d3ee976b9ae7b57b7b126ae69fc926574ac + checksum: 404bb944202df70ba0ff8bb6ea105ead0a6b365d5ef7bfafbfc919df228823563818f0ee36f0f1e20462200da2fb8c8961e20b237e4e1bd9f77c38dd701f39ab languageName: node linkType: hard -"@smithy/util-retry@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-retry@npm:2.1.0" +"@smithy/util-retry@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-retry@npm:2.1.1" dependencies: - "@smithy/service-error-classification": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/service-error-classification": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 944ea383095357b2f4892849b2be05502183b5a07f825ca4012366e0e878dd9f478e774f1b413dc4190d38ae15e5cf3e26f484670f6b793488c07ccdaaa5e129 + checksum: 1747c75f55a208f16104483cd76ec45200dedaa924868e84d4882b88f8b4a8d3a4422834359fd9bfba242e0e96a474349ac0a6f5d804fb15b15e8b639b6d2ad0 languageName: node linkType: hard -"@smithy/util-stream@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-stream@npm:2.1.0" +"@smithy/util-stream@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-stream@npm:2.1.1" dependencies: - "@smithy/fetch-http-handler": ^2.4.0 - "@smithy/node-http-handler": ^2.3.0 - "@smithy/types": ^2.9.0 - "@smithy/util-base64": ^2.1.0 - "@smithy/util-buffer-from": ^2.1.0 - "@smithy/util-hex-encoding": ^2.1.0 - "@smithy/util-utf8": ^2.1.0 + "@smithy/fetch-http-handler": ^2.4.1 + "@smithy/node-http-handler": ^2.3.1 + "@smithy/types": ^2.9.1 + "@smithy/util-base64": ^2.1.1 + "@smithy/util-buffer-from": ^2.1.1 + "@smithy/util-hex-encoding": ^2.1.1 + "@smithy/util-utf8": ^2.1.1 tslib: ^2.5.0 - checksum: 41a4929ba5fd0dec38bbd859f1ef8d4fc244dc0ce8fcc897ae450e1b22e949b12c8d972120066055e03757702494241d9cd65cfdaa35f977cf3a513248bd52b6 + checksum: 3a060226b8a506e722d0d8c1c4b7a2989241f7946c8acc892a8a70d92d9952cc8619b14bf686c9c822115d99159c6c16534bad2d72ecc2809a56f865224e82a6 languageName: node linkType: hard -"@smithy/util-uri-escape@npm:^2.1.0, @smithy/util-uri-escape@npm:^2.1.1": +"@smithy/util-uri-escape@npm:^2.1.1": version: 2.1.1 resolution: "@smithy/util-uri-escape@npm:2.1.1" dependencies: @@ -15929,24 +15929,24 @@ __metadata: languageName: node linkType: hard -"@smithy/util-utf8@npm:^2.0.0, @smithy/util-utf8@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-utf8@npm:2.1.0" +"@smithy/util-utf8@npm:^2.0.0, @smithy/util-utf8@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-utf8@npm:2.1.1" dependencies: - "@smithy/util-buffer-from": ^2.1.0 + "@smithy/util-buffer-from": ^2.1.1 tslib: ^2.5.0 - checksum: eb33393c3e83262418f9a08ed7dc3dd3895c281a4a38b03fca9a2686b67b64db7ba657287da0201d9083d41a4528be39ff8b9ab7bd5b9b9b2ce4d1c3a144c7bc + checksum: 286ce5cba3f45a8abd3d6c28e40b3204dd64300340818d77e42c1cbb0c2f6ad0c42f0e47ffaf38d74d0895b0dfd1750c5b55222ab4d205a3b39da4325971d303 languageName: node linkType: hard -"@smithy/util-waiter@npm:^2.1.0": - version: 2.1.0 - resolution: "@smithy/util-waiter@npm:2.1.0" +"@smithy/util-waiter@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/util-waiter@npm:2.1.1" dependencies: - "@smithy/abort-controller": ^2.1.0 - "@smithy/types": ^2.9.0 + "@smithy/abort-controller": ^2.1.1 + "@smithy/types": ^2.9.1 tslib: ^2.5.0 - checksum: 1b861e2eec1848afcca08c13dac3a32b02187f9958f26d79cb5805ba140fca228268c54f7122fae1b74c4000a70fccad4aad61f21ec02acfa4e9511eebecc31e + checksum: 52d9c82bb9684b6b11eeb2814fa1454514cb90aeeb87bfdf7c458613c13d18189712585486859c975824d08f2d1e3c817dd7e51c400531aaa479af8a06ea0bff languageName: node linkType: hard From 807970e0576d31b313cf3ece3c8642b26fca56fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:29:46 +0000 Subject: [PATCH 110/129] fix(deps): update dependency isolated-vm to v4.7.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 234fe3f1ae..846cf8a0c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30472,12 +30472,12 @@ __metadata: linkType: hard "isolated-vm@npm:^4.5.0": - version: 4.6.0 - resolution: "isolated-vm@npm:4.6.0" + version: 4.7.2 + resolution: "isolated-vm@npm:4.7.2" dependencies: node-gyp: latest prebuild-install: ^7.1.1 - checksum: 011853d46bc934751012f5c1ed3eaba43dc4bd274672e59ff8e4c7eb0df668c93f3e0b91e3b4e812d2b8476c9ace218f34e7a3188b08b343409370e70044a874 + checksum: 16f43f6413623dc7009a8bb9fa567fb30ffc151e21e9a7ae616f25626e750ba823527fb24e2e17408943c6bbbcc7235db89f41262d43a8d8155ad99e888b0760 languageName: node linkType: hard From 8afb6f4caabc20660a915575d8aefb4835de23fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:30:22 +0000 Subject: [PATCH 111/129] fix(deps): update dependency passport to ^0.7.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-5f8d1ca.md | 5 +++++ .../auth-backend-module-oidc-provider/package.json | 2 +- yarn.lock | 13 +------------ 3 files changed, 7 insertions(+), 13 deletions(-) create mode 100644 .changeset/renovate-5f8d1ca.md diff --git a/.changeset/renovate-5f8d1ca.md b/.changeset/renovate-5f8d1ca.md new file mode 100644 index 0000000000..03f8d4b961 --- /dev/null +++ b/.changeset/renovate-5f8d1ca.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-oidc-provider': patch +--- + +Updated dependency `passport` to `^0.7.0`. diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json index 6962c1f340..8d518227a1 100644 --- a/plugins/auth-backend-module-oidc-provider/package.json +++ b/plugins/auth-backend-module-oidc-provider/package.json @@ -29,7 +29,7 @@ "@backstage/plugin-auth-node": "workspace:^", "express": "^4.18.2", "openid-client": "^5.5.0", - "passport": "^0.6.0" + "passport": "^0.7.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 234fe3f1ae..754198f2c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4693,7 +4693,7 @@ __metadata: jose: ^4.14.6 msw: ^1.3.1 openid-client: ^5.5.0 - passport: ^0.6.0 + passport: ^0.7.0 supertest: ^6.3.3 languageName: unknown linkType: soft @@ -36359,17 +36359,6 @@ __metadata: languageName: node linkType: hard -"passport@npm:^0.6.0": - version: 0.6.0 - resolution: "passport@npm:0.6.0" - dependencies: - passport-strategy: 1.x.x - pause: 0.0.1 - utils-merge: ^1.0.1 - checksum: ef932ad671d50de34765c7a53cd1e058d8331a82a6df09265a9c6c1168911aee4a7b5215803d0101110ab7f317e096b4954ca7e18fb2c33b9929f0bd17dbe159 - languageName: node - linkType: hard - "passport@npm:^0.7.0": version: 0.7.0 resolution: "passport@npm:0.7.0" From d64f794309f741320f5f48de11e6b1496889fb2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 14:13:30 +0000 Subject: [PATCH 112/129] fix(deps): update dependency react-use to v17.5.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 846cf8a0c6..de677733f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38811,8 +38811,8 @@ __metadata: linkType: hard "react-use@npm:^17.2.4, react-use@npm:^17.3.1, react-use@npm:^17.3.2, react-use@npm:^17.4.0": - version: 17.4.4 - resolution: "react-use@npm:17.4.4" + version: 17.5.0 + resolution: "react-use@npm:17.5.0" dependencies: "@types/js-cookie": ^2.2.6 "@xobotyi/scrollbar-width": ^1.9.5 @@ -38831,7 +38831,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: f8c359d2360bd26fdf4ce1f0f8909d138d85a24cdae9ebafc1a9d57edbb8e778c49752793ea6c349b0844353af03878f2f22c5596c791c24f6fc9aed51b29e8f + checksum: d3164db313f27aa701dcf87177861db6e19624ea7dd8bc81805352af7f6bf04072010b9776da4ac458d6bd318759ee69b12763d96098d83c75b7d66ffc689e3a languageName: node linkType: hard From 9f0945bff89c6d43717ecf68f527e9122d9a8f6c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 14:14:09 +0000 Subject: [PATCH 113/129] chore(deps): update actions/stale action to v9 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/automate_stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index 6d6fd65c0d..48b329a7b7 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -19,7 +19,7 @@ jobs: with: egress-policy: audit - - uses: actions/stale@v8.0.0 + - uses: actions/stale@v9.0.0 id: stale with: stale-issue-message: > From 0a659c9b1db68c299ffbde9b788ae4b455eacce5 Mon Sep 17 00:00:00 2001 From: David Festal Date: Mon, 22 Jan 2024 16:10:05 +0100 Subject: [PATCH 114/129] Fix review comments: add a new constant for `no-cache` header value. Signed-off-by: David Festal --- plugins/app-backend/src/lib/headers.ts | 1 + plugins/app-backend/src/service/router.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/app-backend/src/lib/headers.ts b/plugins/app-backend/src/lib/headers.ts index 1bee2bbb37..2483fdeee2 100644 --- a/plugins/app-backend/src/lib/headers.ts +++ b/plugins/app-backend/src/lib/headers.ts @@ -16,3 +16,4 @@ export const CACHE_CONTROL_NO_CACHE = 'no-store, max-age=0'; export const CACHE_CONTROL_MAX_CACHE = 'public, max-age=1209600'; // 14 days +export const CACHE_CONTROL_REVALIDATE_CACHE = 'no-cache'; // require revalidating cached responses before reuse them. diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index 6575b32612..5574892d37 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -35,6 +35,7 @@ import { import { CACHE_CONTROL_MAX_CACHE, CACHE_CONTROL_NO_CACHE, + CACHE_CONTROL_REVALIDATE_CACHE, } from '../lib/headers'; // express uses mime v1 while we only have types for mime v2 @@ -135,7 +136,7 @@ export async function createRouter( express.static(resolvePath(appDistDir, 'static'), { setHeaders: (res, path) => { if (path === injectedConfigPath) { - res.setHeader('Cache-Control', 'no-cache'); + res.setHeader('Cache-Control', CACHE_CONTROL_REVALIDATE_CACHE); } else { res.setHeader('Cache-Control', CACHE_CONTROL_MAX_CACHE); } From 5a910a3217373547b93fe6db997cbc13a7ef2c3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:44:29 +0000 Subject: [PATCH 115/129] chore(deps): update chromaui/action action to v10 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/verify_storybook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 29d86e913a..191c326df4 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -51,7 +51,7 @@ jobs: - run: yarn build-storybook - - uses: chromaui/action@7fb6b0407c69171ce521d08355a825958a5ef81a # v1 + - uses: chromaui/action@7fb6b0407c69171ce521d08355a825958a5ef81a # v10 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks From 2e6af00437b68fc2e258a344613a04aeab52dd2a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 16:09:56 +0000 Subject: [PATCH 116/129] chore(deps): update dependency ts-morph to v21 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-95b717a.md | 5 +++ plugins/bitbucket-cloud-common/package.json | 2 +- yarn.lock | 44 ++++++++++----------- 3 files changed, 28 insertions(+), 23 deletions(-) create mode 100644 .changeset/renovate-95b717a.md diff --git a/.changeset/renovate-95b717a.md b/.changeset/renovate-95b717a.md new file mode 100644 index 0000000000..59beab8d04 --- /dev/null +++ b/.changeset/renovate-95b717a.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bitbucket-cloud-common': patch +--- + +Updated dependency `ts-morph` to `^21.0.0`. diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index d9a11c9a5d..a22d0781bf 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -41,7 +41,7 @@ "@backstage/cli": "workspace:^", "@openapitools/openapi-generator-cli": "^2.4.26", "msw": "^1.0.0", - "ts-morph": "^20.0.0" + "ts-morph": "^21.0.0" }, "files": [ "dist" diff --git a/yarn.lock b/yarn.lock index de677733f8..785a2aff85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5095,7 +5095,7 @@ __metadata: "@openapitools/openapi-generator-cli": ^2.4.26 cross-fetch: ^4.0.0 msw: ^1.0.0 - ts-morph: ^20.0.0 + ts-morph: ^21.0.0 languageName: unknown linkType: soft @@ -17315,15 +17315,15 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.21.0": - version: 0.21.0 - resolution: "@ts-morph/common@npm:0.21.0" +"@ts-morph/common@npm:~0.22.0": + version: 0.22.0 + resolution: "@ts-morph/common@npm:0.22.0" dependencies: - fast-glob: ^3.2.12 - minimatch: ^7.4.3 - mkdirp: ^2.1.6 + fast-glob: ^3.3.2 + minimatch: ^9.0.3 + mkdirp: ^3.0.1 path-browserify: ^1.0.1 - checksum: c322e2a58608d7d924646b10ba9ad432b03e7b119788c9f0f270550bd5aca22947fcaa1c63f27e80898a50de3ed99fc8d9c23569c6a2f3f36c9307e35ceba3ed + checksum: e549facfff2a68eeef4e3e2c4183e7216a02b57e62cdfe60ca15d5fdee24770bd3b5b6d1a0388cfce7b4dfaeb0ebe31ffa40585e36b9fb7948aea8081fa73769 languageName: node linkType: hard @@ -26995,16 +26995,16 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 languageName: node linkType: hard @@ -34151,7 +34151,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -34399,12 +34399,12 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^2.1.6": - version: 2.1.6 - resolution: "mkdirp@npm:2.1.6" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: mkdirp: dist/cjs/src/bin.js - checksum: 8a1d09ffac585e55f41c54f445051f5bc33a7de99b952bb04c576cafdf1a67bb4bae8cb93736f7da6838771fbf75bc630430a3a59e1252047d2278690bd150ee + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d languageName: node linkType: hard @@ -42582,13 +42582,13 @@ __metadata: languageName: node linkType: hard -"ts-morph@npm:^20.0.0": - version: 20.0.0 - resolution: "ts-morph@npm:20.0.0" +"ts-morph@npm:^21.0.0": + version: 21.0.1 + resolution: "ts-morph@npm:21.0.1" dependencies: - "@ts-morph/common": ~0.21.0 + "@ts-morph/common": ~0.22.0 code-block-writer: ^12.0.0 - checksum: 8a96d72a26e4e3c4139c581834364a97207f78a5878f70aa6f58787c0f4003a9386a64f43b814bac7bf028e572ef8660939f56844641b05bfaf7ae7437be9011 + checksum: f8e6acd4cdb2842af47ccf4e8900dc3f230f20c3b0d28e1e8b58c395b0a16d7b3e03ef56f29da3fdb861c50e22eb52524e0fc4bfca0fde8448f81b8f4f6aa157 languageName: node linkType: hard From f5b09c3a496bdcf052b0f2dd2fbc985fef0510e3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 22 Jan 2024 17:44:01 +0100 Subject: [PATCH 117/129] cli: bump react version in templates Signed-off-by: Patrik Oldsberg --- packages/cli/templates/default-plugin/package.json.hbs | 2 +- .../cli/templates/default-react-plugin-package/package.json.hbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 15b22bc8e1..fb86c7e792 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -38,7 +38,7 @@ "react-use": "{{versionQuery 'react-use' '17.2.4'}}" }, "peerDependencies": { - "react": "{{versionQuery 'react' '^16.13.1 || ^17.0.0'}}" + "react": "{{versionQuery 'react' '^16.13.1 || ^17.0.0 || ^18.0.0'}}" }, "devDependencies": { "@backstage/cli": "{{versionQuery '@backstage/cli'}}", diff --git a/packages/cli/templates/default-react-plugin-package/package.json.hbs b/packages/cli/templates/default-react-plugin-package/package.json.hbs index f68bd14a1d..c5e92eb7d6 100644 --- a/packages/cli/templates/default-react-plugin-package/package.json.hbs +++ b/packages/cli/templates/default-react-plugin-package/package.json.hbs @@ -34,7 +34,7 @@ "@material-ui/core": "{{versionQuery '@material-ui/core' '4.12.2'}}" }, "peerDependencies": { - "react": "{{versionQuery 'react' '^16.13.1 || ^17.0.0'}}" + "react": "{{versionQuery 'react' '^16.13.1 || ^17.0.0 || ^18.0.0'}}" }, "devDependencies": { "@backstage/cli": "{{versionQuery '@backstage/cli'}}", From 3ce085e4b8fc887bc695e91bc42c225125fdc974 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 17:07:52 +0000 Subject: [PATCH 118/129] chore(deps): update github/codeql-action action to v3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- .github/workflows/sync_snyk-monitor.yml | 2 +- .github/workflows/verify_codeql.yml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index a05d5acee1..73dd5f8c57 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -66,6 +66,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@4759df8df70c5ebe7042c3029bbace20eee13edd # v2.23.1 + uses: github/codeql-action/upload-sarif@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index a4ae1ac803..245ef401fa 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@v2.23.1 + uses: github/codeql-action/upload-sarif@v3.23.1 with: sarif_file: snyk.sarif diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 43a762e3c9..6fbf516c08 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2.23.1 + uses: github/codeql-action/init@v3.23.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2.23.1 + uses: github/codeql-action/autobuild@v3.23.1 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2.23.1 + uses: github/codeql-action/analyze@v3.23.1 From 40b702d55ec463762db927604ceeea1b21d8e6e6 Mon Sep 17 00:00:00 2001 From: Connor Leech Date: Mon, 22 Jan 2024 10:13:06 -0800 Subject: [PATCH 119/129] Update plugin-development.md Signed-off-by: Connor Leech --- docs/plugins/plugin-development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins/plugin-development.md b/docs/plugins/plugin-development.md index 8d8db8c387..5ba1de4a7d 100644 --- a/docs/plugins/plugin-development.md +++ b/docs/plugins/plugin-development.md @@ -40,7 +40,7 @@ import { createRouteRef } from '@backstage/core-plugin-api'; // Note: This route ref is for internal use only, don't export it from the plugin export const rootRouteRef = createRouteRef({ - title: 'Example Page', + id: 'Example Page', }); ``` From 9e64c026ef231d9df2e324ede763ace06ed47875 Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Fri, 15 Dec 2023 16:01:55 -0500 Subject: [PATCH 120/129] Fix for Issue ##21762 Signed-off-by: Jason Froehlich --- .../src/actions/bitbucketServerPullRequest.ts | 97 +++++++++++- .../src/actions/gitHelpers.test.ts | 149 +++++++++++++++++- .../scaffolder-node/src/actions/gitHelpers.ts | 66 ++++++++ plugins/scaffolder-node/src/actions/index.ts | 6 +- 4 files changed, 314 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts index dc75145ebc..66327d4f6c 100644 --- a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts @@ -21,6 +21,8 @@ import { } from '@backstage/integration'; import { createTemplateAction, + getRepoSourceDirectory, + commitAndPushBranch, parseRepoUrl, } from '@backstage/plugin-scaffolder-node'; import fetch, { RequestInit, Response } from 'node-fetch'; @@ -152,7 +154,51 @@ const findBranches = async (opts: { return undefined; }; +const createBranch = async (opts: { + project: string; + repo: string; + branchName: string; + authorization: string; + apiBaseUrl: string; + startPoint: string; +}) => { + const { project, repo, branchName, authorization, apiBaseUrl, startPoint } = + opts; + let response: Response; + const options: RequestInit = { + method: 'POST', + body: JSON.stringify({ + name: branchName, + startPoint, + }), + headers: { + Authorization: authorization, + 'Content-Type': 'application/json', + }, + }; + + try { + response = await fetch( + `${apiBaseUrl}/projects/${encodeURIComponent( + project, + )}/repos/${encodeURIComponent(repo)}/branches`, + options, + ); + } catch (e) { + throw new Error(`Unable to create branch, ${e}`); + } + + if (response.status !== 200) { + throw new Error( + `Unable to create branch, ${response.status} ${ + response.statusText + }, ${await response.text()}`, + ); + } + + return await response.json(); +}; /** * Creates a BitbucketServer Pull Request action. * @public @@ -161,7 +207,7 @@ export function createPublishBitbucketServerPullRequestAction(options: { integrations: ScmIntegrationRegistry; config: Config; }) { - const { integrations } = options; + const { integrations, config } = options; return createTemplateAction<{ repoUrl: string; @@ -268,7 +314,7 @@ export function createPublishBitbucketServerPullRequestAction(options: { apiBaseUrl, }); - const fromRef = await findBranches({ + let fromRef = await findBranches({ project, repo, branchName: sourceBranch, @@ -276,6 +322,53 @@ export function createPublishBitbucketServerPullRequestAction(options: { apiBaseUrl, }); + if (!fromRef) { + // create branch + ctx.logger.info( + `source branch not found -> creating branch named: ${sourceBranch} lastCommit: ${toRef.latestCommit}`, + ); + const latestCommit = toRef.latestCommit; + + fromRef = await createBranch({ + project, + repo, + branchName: sourceBranch, + authorization, + apiBaseUrl, + startPoint: latestCommit, + }); + + const remoteUrl = `https://${host}/scm/${project}/${repo}.git`; + + const auth = authConfig.token + ? { + token: token!, + } + : { + username: authConfig.username!, + password: authConfig.password!, + }; + + const gitAuthorInfo = { + name: config.getOptionalString('scaffolder.defaultAuthor.name'), + email: config.getOptionalString('scaffolder.defaultAuthor.email'), + }; + + await commitAndPushBranch({ + tempDir: await ctx.createTemporaryDirectory(), + dir: getRepoSourceDirectory(ctx.workspacePath, undefined), + remoteUrl, + auth, + logger: ctx.logger, + commitMessage: + description ?? + config.getOptionalString('scaffolder.defaultCommitMessage') ?? + '', + gitAuthorInfo, + branch: sourceBranch, + }); + } + const pullRequestUrl = await createPullRequest({ project, repo, diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts index 7bc3f64f46..2d2220f33d 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts @@ -15,7 +15,11 @@ */ import { Git, getVoidLogger } from '@backstage/backend-common'; -import { commitAndPushRepo, initRepoAndPush } from './gitHelpers'; +import { + commitAndPushRepo, + initRepoAndPush, + commitAndPushBranch, +} from './gitHelpers'; jest.mock('@backstage/backend-common', () => ({ Git: { @@ -29,10 +33,14 @@ jest.mock('@backstage/backend-common', () => ({ fetch: jest.fn(), addRemote: jest.fn(), push: jest.fn(), + clone: jest.fn(), }), }, getVoidLogger: jest.requireActual('@backstage/backend-common').getVoidLogger, })); +jest.mock('fs-extra', () => ({ + cpSync: jest.fn(), +})); const mockedGit = Git.fromAuth({ logger: getVoidLogger(), @@ -303,3 +311,142 @@ describe('commitAndPushRepo', () => { }); }); }); + +describe('commitAndPushBranch', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('with minimal parameters', () => { + beforeEach(async () => { + await commitAndPushBranch({ + tempDir: '/tmp/repo/dir/', + dir: '/test/repo/dir/', + remoteUrl: 'git@github.com:test/repo.git', + auth: { + username: 'test-user', + password: 'test-password', + }, + commitMessage: 'commit message', + gitAuthorInfo: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + logger: getVoidLogger(), + }); + }); + + it('clone the repo', () => { + expect(mockedGit.clone).toHaveBeenCalledWith({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + }); + }); + + it('fetch the branches', () => { + expect(mockedGit.fetch).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + }); + }); + + it('checkout the branch', () => { + expect(mockedGit.checkout).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + ref: 'master', + }); + }); + + it('stages all files in the repo', () => { + expect(mockedGit.add).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + filepath: '.', + }); + }); + + it('creates an commit', () => { + expect(mockedGit.commit).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + message: 'commit message', + author: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + committer: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + }); + }); + + it('pushes to the remote', () => { + expect(mockedGit.push).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + remote: 'origin', + remoteRef: 'refs/heads/master', + }); + }); + }); + + it('with token', async () => { + await commitAndPushBranch({ + tempDir: '/tmp/repo/dir/', + dir: '/test/repo/dir/', + remoteUrl: 'git@github.com:test/repo.git', + auth: { + token: 'test-token', + }, + commitMessage: 'commit message', + logger: getVoidLogger(), + }); + + expect(mockedGit.clone).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + url: 'git@github.com:test/repo.git', + }); + }); + + it('allows overriding the default branch', async () => { + await commitAndPushBranch({ + tempDir: '/tmp/repo/dir/', + dir: '/test/repo/dir/', + branch: 'trunk', + remoteUrl: 'git@github.com:test/repo.git', + auth: { + username: 'test-user', + password: 'test-password', + }, + commitMessage: 'commit message', + logger: getVoidLogger(), + }); + + expect(mockedGit.checkout).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + ref: 'trunk', + }); + }); + + it('allows overriding the remoteRef', async () => { + await commitAndPushBranch({ + tempDir: '/tmp/repo/dir/', + dir: '/test/repo/dir/', + gitAuthorInfo: { + name: 'Custom Scaffolder Author', + email: 'scaffolder@example.org', + }, + remoteUrl: 'git@github.com:test/repo.git', + auth: { + username: 'test-user', + password: 'test-password', + }, + remoteRef: 'ABC123', + commitMessage: 'commit message', + logger: getVoidLogger(), + }); + + expect(mockedGit.push).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + remote: 'origin', + remoteRef: 'ABC123', + }); + }); +}); diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.ts b/plugins/scaffolder-node/src/actions/gitHelpers.ts index 6d449a0a29..f2c88872ad 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.ts @@ -16,6 +16,7 @@ import { Git } from '@backstage/backend-common'; import { Logger } from 'winston'; +import fs from 'fs-extra'; /** * @public @@ -134,3 +135,68 @@ export async function commitAndPushRepo(input: { return { commitHash }; } + +export async function commitAndPushBranch({ + tempDir, + dir, + remoteUrl, + auth, + logger, + commitMessage, + gitAuthorInfo, + branch = 'master', + remoteRef, +}: { + tempDir: string; + dir: string; + remoteUrl: string; + // For use cases where token has to be used with Basic Auth + // it has to be provided as password together with a username + // which may be a fixed value defined by the provider. + auth: { username: string; password: string } | { token: string }; + logger: Logger; + commitMessage: string; + gitAuthorInfo?: { name?: string; email?: string }; + branch?: string; + remoteRef?: string; +}): Promise<{ commitHash: string }> { + const git = Git.fromAuth({ + ...auth, + logger, + }); + + await git.clone({ url: remoteUrl, dir: tempDir }); + await git.fetch({ dir: tempDir }); + await git.checkout({ dir: tempDir, ref: branch }); + + // copy files + fs.cpSync(dir, tempDir, { + recursive: true, + filter: path => { + return !(path.indexOf('.git') > -1); + }, + }); + + await git.add({ dir: tempDir, filepath: '.' }); + + // use provided info if possible, otherwise use fallbacks + const authorInfo = { + name: gitAuthorInfo?.name ?? 'Scaffolder', + email: gitAuthorInfo?.email ?? 'scaffolder@backstage.io', + }; + + const commitHash = await git.commit({ + dir: tempDir, + message: commitMessage, + author: authorInfo, + committer: authorInfo, + }); + + await git.push({ + dir: tempDir, + remote: 'origin', + remoteRef: remoteRef ?? `refs/heads/${branch}`, + }); + + return { commitHash }; +} diff --git a/plugins/scaffolder-node/src/actions/index.ts b/plugins/scaffolder-node/src/actions/index.ts index 74a0bb61f9..885f34c293 100644 --- a/plugins/scaffolder-node/src/actions/index.ts +++ b/plugins/scaffolder-node/src/actions/index.ts @@ -25,5 +25,9 @@ export { } from './executeShellCommand'; export { fetchContents, fetchFile } from './fetch'; export { type ActionContext, type TemplateAction } from './types'; -export { initRepoAndPush, commitAndPushRepo } from './gitHelpers'; +export { + initRepoAndPush, + commitAndPushRepo, + commitAndPushBranch, +} from './gitHelpers'; export { parseRepoUrl, getRepoSourceDirectory } from './util'; From fc98bb6f8cd85a646c254f2ad8ef8025be4ecb7e Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Fri, 15 Dec 2023 16:11:45 -0500 Subject: [PATCH 121/129] Fix for issue #21762 Signed-off-by: Jason Froehlich Signed-off-by: Jason Froehlich --- .changeset/unlucky-wasps-tan.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/unlucky-wasps-tan.md diff --git a/.changeset/unlucky-wasps-tan.md b/.changeset/unlucky-wasps-tan.md new file mode 100644 index 0000000000..93665449f2 --- /dev/null +++ b/.changeset/unlucky-wasps-tan.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-bitbucket': minor +--- + +Enhanced the pull request action to allow for adding new content to the PR as described in this issue #2172 From 3a9ba42b4d4c4139f6d90cf0f02a86eab977aa3d Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Fri, 15 Dec 2023 16:22:02 -0500 Subject: [PATCH 122/129] Fix for issue #21762 Signed-off-by: Jason Froehlich Signed-off-by: Jason Froehlich --- .changeset/nine-olives-swim.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nine-olives-swim.md diff --git a/.changeset/nine-olives-swim.md b/.changeset/nine-olives-swim.md new file mode 100644 index 0000000000..057629a8c3 --- /dev/null +++ b/.changeset/nine-olives-swim.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-node': minor +--- + +Added function to commitAndPushBranch which allows for files to be added to the a PR for use in the bitbucket pull request action for issue #21762 From c700fdc7242f8b63560b048f89e493fa23429682 Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Sat, 30 Dec 2023 13:09:34 -0500 Subject: [PATCH 123/129] Updated release tag on commitAndPushBranch function and api-report Signed-off-by: Jason Froehlich --- plugins/scaffolder-node/api-report.md | 35 +++++++++++++++++++ .../scaffolder-node/src/actions/gitHelpers.ts | 3 ++ 2 files changed, 38 insertions(+) diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index 6bb1534679..f3d3a7b2f2 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -45,6 +45,41 @@ export type ActionContext< each?: JsonObject; }; +// @public (undocumented) +export function commitAndPushBranch({ + tempDir, + dir, + remoteUrl, + auth, + logger, + commitMessage, + gitAuthorInfo, + branch, + remoteRef, +}: { + tempDir: string; + dir: string; + remoteUrl: string; + auth: + | { + username: string; + password: string; + } + | { + token: string; + }; + logger: Logger; + commitMessage: string; + gitAuthorInfo?: { + name?: string; + email?: string; + }; + branch?: string; + remoteRef?: string; +}): Promise<{ + commitHash: string; +}>; + // @public (undocumented) export function commitAndPushRepo(input: { dir: string; diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.ts b/plugins/scaffolder-node/src/actions/gitHelpers.ts index f2c88872ad..45a7761c0a 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.ts @@ -136,6 +136,9 @@ export async function commitAndPushRepo(input: { return { commitHash }; } +/** + * @public + */ export async function commitAndPushBranch({ tempDir, dir, From 76fffb321dc22fbd54ae15fb45c26102bd75e8b8 Mon Sep 17 00:00:00 2001 From: Jason Froehlich <38667521+jayfray12@users.noreply.github.com> Date: Thu, 11 Jan 2024 08:49:27 -0500 Subject: [PATCH 124/129] Update .changeset/unlucky-wasps-tan.md Co-authored-by: Ben Lambert Signed-off-by: Jason Froehlich <38667521+jayfray12@users.noreply.github.com> Signed-off-by: Jason Froehlich --- .changeset/unlucky-wasps-tan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/unlucky-wasps-tan.md b/.changeset/unlucky-wasps-tan.md index 93665449f2..df6eca4820 100644 --- a/.changeset/unlucky-wasps-tan.md +++ b/.changeset/unlucky-wasps-tan.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend-module-bitbucket': minor +'@backstage/plugin-scaffolder-backend-module-bitbucket': patch --- Enhanced the pull request action to allow for adding new content to the PR as described in this issue #2172 From b8b8b884133d9881035f5f1d24506a8657186c88 Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Tue, 16 Jan 2024 12:07:23 -0500 Subject: [PATCH 125/129] made git commands more generic and resusable Signed-off-by: Jason Froehlich --- .changeset/nine-olives-swim.md | 2 +- .../src/actions/bitbucketServerPullRequest.ts | 40 ++- plugins/scaffolder-node/api-report.md | 84 ++++- .../src/actions/gitHelpers.test.ts | 310 ++++++++++++++---- .../scaffolder-node/src/actions/gitHelpers.ts | 112 +++++-- plugins/scaffolder-node/src/actions/index.ts | 3 + 6 files changed, 455 insertions(+), 96 deletions(-) diff --git a/.changeset/nine-olives-swim.md b/.changeset/nine-olives-swim.md index 057629a8c3..40852c08c2 100644 --- a/.changeset/nine-olives-swim.md +++ b/.changeset/nine-olives-swim.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder-node': minor --- -Added function to commitAndPushBranch which allows for files to be added to the a PR for use in the bitbucket pull request action for issue #21762 +Added functions to clone a repo, create a branch, add files and push and commit to the branch. This allows for files to be added to the a PR for use in the bitbucket pull request action for issue #21762 diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts index 66327d4f6c..fc123f0b80 100644 --- a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucketServerPullRequest.ts @@ -23,10 +23,14 @@ import { createTemplateAction, getRepoSourceDirectory, commitAndPushBranch, + addFiles, + createBranch as createGitBranch, + cloneRepo, parseRepoUrl, } from '@backstage/plugin-scaffolder-node'; import fetch, { RequestInit, Response } from 'node-fetch'; import { Config } from '@backstage/config'; +import fs from 'fs-extra'; const createPullRequest = async (opts: { project: string; @@ -354,10 +358,40 @@ export function createPublishBitbucketServerPullRequestAction(options: { email: config.getOptionalString('scaffolder.defaultAuthor.email'), }; + const tempDir = await ctx.createTemporaryDirectory(); + const sourceDir = getRepoSourceDirectory(ctx.workspacePath, undefined); + await cloneRepo({ + url: remoteUrl, + dir: tempDir, + auth, + logger: ctx.logger, + ref: sourceBranch, + }); + + await createGitBranch({ + dir: tempDir, + auth, + logger: ctx.logger, + ref: sourceBranch, + }); + + // copy files + fs.cpSync(sourceDir, tempDir, { + recursive: true, + filter: path => { + return !(path.indexOf('.git') > -1); + }, + }); + + await addFiles({ + dir: tempDir, + auth, + logger: ctx.logger, + filepath: '.', + }); + await commitAndPushBranch({ - tempDir: await ctx.createTemporaryDirectory(), - dir: getRepoSourceDirectory(ctx.workspacePath, undefined), - remoteUrl, + dir: tempDir, auth, logger: ctx.logger, commitMessage: diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index f3d3a7b2f2..5dff4a8e5e 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -46,20 +46,14 @@ export type ActionContext< }; // @public (undocumented) -export function commitAndPushBranch({ - tempDir, +export function addFiles({ dir, - remoteUrl, + filepath, auth, logger, - commitMessage, - gitAuthorInfo, - branch, - remoteRef, }: { - tempDir: string; dir: string; - remoteUrl: string; + filepath: string; auth: | { username: string; @@ -68,7 +62,56 @@ export function commitAndPushBranch({ | { token: string; }; - logger: Logger; + logger?: Logger | undefined; +}): Promise; + +// @public (undocumented) +export function cloneRepo({ + url, + dir, + auth, + logger, + ref, + depth, + noCheckout, +}: { + url: string; + dir: string; + auth: + | { + username: string; + password: string; + } + | { + token: string; + }; + logger?: Logger | undefined; + ref?: string | undefined; + depth?: number | undefined; + noCheckout?: boolean | undefined; +}): Promise; + +// @public (undocumented) +export function commitAndPushBranch({ + dir, + auth, + logger, + commitMessage, + gitAuthorInfo, + branch, + remoteRef, + remote, +}: { + dir: string; + auth: + | { + username: string; + password: string; + } + | { + token: string; + }; + logger?: Logger | undefined; commitMessage: string; gitAuthorInfo?: { name?: string; @@ -76,6 +119,7 @@ export function commitAndPushBranch({ }; branch?: string; remoteRef?: string; + remote?: string; }): Promise<{ commitHash: string; }>; @@ -103,6 +147,26 @@ export function commitAndPushRepo(input: { commitHash: string; }>; +// @public (undocumented) +export function createBranch({ + dir, + auth, + logger, + ref, +}: { + dir: string; + ref: string; + auth: + | { + username: string; + password: string; + } + | { + token: string; + }; + logger?: Logger | undefined; +}): Promise; + // @public export const createTemplateAction: < TInputParams extends JsonObject = JsonObject, diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts index 2d2220f33d..b230b2cd06 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.test.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.test.ts @@ -19,6 +19,9 @@ import { commitAndPushRepo, initRepoAndPush, commitAndPushBranch, + addFiles, + createBranch, + cloneRepo, } from './gitHelpers'; jest.mock('@backstage/backend-common', () => ({ @@ -312,6 +315,198 @@ describe('commitAndPushRepo', () => { }); }); +describe('cloneRepo', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('with minimal parameters', () => { + beforeEach(async () => { + await cloneRepo({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + }); + + it('clone the repo', () => { + expect(mockedGit.clone).toHaveBeenCalledWith({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + ref: undefined, + depth: undefined, + noCheckout: undefined, + }); + }); + }); + + it('with token', async () => { + await cloneRepo({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + auth: { + token: 'test-token', + }, + }); + + expect(mockedGit.clone).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + url: 'git@github.com:test/repo.git', + ref: undefined, + depth: undefined, + noCheckout: undefined, + }); + }); + + it('allows overriding the default branch', async () => { + await cloneRepo({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + ref: 'trunk', + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + + expect(mockedGit.clone).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + url: 'git@github.com:test/repo.git', + ref: 'trunk', + depth: undefined, + noCheckout: undefined, + }); + }); + + it('allows overriding the depth', async () => { + await cloneRepo({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + ref: 'trunk', + depth: 2, + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + + expect(mockedGit.clone).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + url: 'git@github.com:test/repo.git', + ref: 'trunk', + depth: 2, + noCheckout: undefined, + }); + }); + + it('allows overriding the noCheckout', async () => { + await cloneRepo({ + url: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', + ref: 'trunk', + depth: 2, + noCheckout: true, + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + + expect(mockedGit.clone).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + url: 'git@github.com:test/repo.git', + ref: 'trunk', + depth: 2, + noCheckout: true, + }); + }); +}); + +describe('createBranch', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('with minimal parameters', () => { + beforeEach(async () => { + await createBranch({ + dir: '/tmp/repo/dir/', + ref: 'trunk', + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + }); + + it('create the branch', () => { + expect(mockedGit.checkout).toHaveBeenCalledWith({ + ref: 'trunk', + dir: '/tmp/repo/dir/', + }); + }); + }); + + it('with token', async () => { + await createBranch({ + dir: '/tmp/repo/dir/', + ref: 'trunk', + auth: { + token: 'test-token', + }, + }); + + expect(mockedGit.checkout).toHaveBeenCalledWith({ + ref: 'trunk', + dir: '/tmp/repo/dir/', + }); + }); +}); + +describe('addFiles', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('with minimal parameters', () => { + beforeEach(async () => { + await addFiles({ + dir: '/tmp/repo/dir/', + filepath: '.', + auth: { + username: 'test-user', + password: 'test-password', + }, + }); + }); + + it('add files', () => { + expect(mockedGit.add).toHaveBeenCalledWith({ + filepath: '.', + dir: '/tmp/repo/dir/', + }); + }); + }); + + it('with token', async () => { + await addFiles({ + dir: '/tmp/repo/dir/', + filepath: '.', + auth: { + token: 'test-token', + }, + }); + + expect(mockedGit.add).toHaveBeenCalledWith({ + filepath: '.', + dir: '/tmp/repo/dir/', + }); + }); +}); + describe('commitAndPushBranch', () => { afterEach(() => { jest.clearAllMocks(); @@ -320,53 +515,19 @@ describe('commitAndPushBranch', () => { describe('with minimal parameters', () => { beforeEach(async () => { await commitAndPushBranch({ - tempDir: '/tmp/repo/dir/', - dir: '/test/repo/dir/', - remoteUrl: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', auth: { username: 'test-user', password: 'test-password', }, commitMessage: 'commit message', - gitAuthorInfo: { - name: 'Scaffolder', - email: 'scaffolder@backstage.io', - }, - logger: getVoidLogger(), }); }); - it('clone the repo', () => { - expect(mockedGit.clone).toHaveBeenCalledWith({ - url: 'git@github.com:test/repo.git', - dir: '/tmp/repo/dir/', - }); - }); - - it('fetch the branches', () => { - expect(mockedGit.fetch).toHaveBeenCalledWith({ - dir: '/tmp/repo/dir/', - }); - }); - - it('checkout the branch', () => { - expect(mockedGit.checkout).toHaveBeenCalledWith({ - dir: '/tmp/repo/dir/', - ref: 'master', - }); - }); - - it('stages all files in the repo', () => { - expect(mockedGit.add).toHaveBeenCalledWith({ - dir: '/tmp/repo/dir/', - filepath: '.', - }); - }); - - it('creates an commit', () => { + it('create commit', () => { expect(mockedGit.commit).toHaveBeenCalledWith({ - dir: '/tmp/repo/dir/', message: 'commit message', + dir: '/tmp/repo/dir/', author: { name: 'Scaffolder', email: 'scaffolder@backstage.io', @@ -389,58 +550,91 @@ describe('commitAndPushBranch', () => { it('with token', async () => { await commitAndPushBranch({ - tempDir: '/tmp/repo/dir/', - dir: '/test/repo/dir/', - remoteUrl: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', auth: { token: 'test-token', }, commitMessage: 'commit message', + gitAuthorInfo: { + name: 'gitCommitter', + email: 'gitCommitter@backstage.io', + }, logger: getVoidLogger(), }); - expect(mockedGit.clone).toHaveBeenCalledWith({ + expect(mockedGit.commit).toHaveBeenCalledWith({ + message: 'commit message', dir: '/tmp/repo/dir/', - url: 'git@github.com:test/repo.git', + author: { + name: 'gitCommitter', + email: 'gitCommitter@backstage.io', + }, + committer: { + name: 'gitCommitter', + email: 'gitCommitter@backstage.io', + }, + }); + + expect(mockedGit.push).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + remote: 'origin', + remoteRef: 'refs/heads/master', }); }); it('allows overriding the default branch', async () => { await commitAndPushBranch({ - tempDir: '/tmp/repo/dir/', - dir: '/test/repo/dir/', - branch: 'trunk', - remoteUrl: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', auth: { username: 'test-user', password: 'test-password', }, commitMessage: 'commit message', - logger: getVoidLogger(), + branch: 'trunk', }); - expect(mockedGit.checkout).toHaveBeenCalledWith({ + expect(mockedGit.commit).toHaveBeenCalledWith({ + message: 'commit message', dir: '/tmp/repo/dir/', - ref: 'trunk', + author: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + committer: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + }); + + expect(mockedGit.push).toHaveBeenCalledWith({ + dir: '/tmp/repo/dir/', + remote: 'origin', + remoteRef: 'refs/heads/trunk', }); }); it('allows overriding the remoteRef', async () => { await commitAndPushBranch({ - tempDir: '/tmp/repo/dir/', - dir: '/test/repo/dir/', - gitAuthorInfo: { - name: 'Custom Scaffolder Author', - email: 'scaffolder@example.org', - }, - remoteUrl: 'git@github.com:test/repo.git', + dir: '/tmp/repo/dir/', auth: { username: 'test-user', password: 'test-password', }, - remoteRef: 'ABC123', commitMessage: 'commit message', - logger: getVoidLogger(), + remoteRef: 'ABC123', + }); + + expect(mockedGit.commit).toHaveBeenCalledWith({ + message: 'commit message', + dir: '/tmp/repo/dir/', + author: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, + committer: { + name: 'Scaffolder', + email: 'scaffolder@backstage.io', + }, }); expect(mockedGit.push).toHaveBeenCalledWith({ diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.ts b/plugins/scaffolder-node/src/actions/gitHelpers.ts index 45a7761c0a..7f36ae0137 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.ts @@ -16,7 +16,6 @@ import { Git } from '@backstage/backend-common'; import { Logger } from 'winston'; -import fs from 'fs-extra'; /** * @public @@ -139,49 +138,114 @@ export async function commitAndPushRepo(input: { /** * @public */ -export async function commitAndPushBranch({ - tempDir, +export async function cloneRepo({ + url, + dir, + auth, + logger, + ref, + depth, + noCheckout, +}: { + url: string; + dir: string; + // For use cases where token has to be used with Basic Auth + // it has to be provided as password together with a username + // which may be a fixed value defined by the provider. + auth: { username: string; password: string } | { token: string }; + logger?: Logger | undefined; + ref?: string | undefined; + depth?: number | undefined; + noCheckout?: boolean | undefined; +}): Promise { + const git = Git.fromAuth({ + ...auth, + logger, + }); + + await git.clone({ url, dir, ref, depth, noCheckout }); +} + +/** + * @public + */ +export async function createBranch({ + dir, + auth, + logger, + ref, +}: { + dir: string; + ref: string; + // For use cases where token has to be used with Basic Auth + // it has to be provided as password together with a username + // which may be a fixed value defined by the provider. + auth: { username: string; password: string } | { token: string }; + logger?: Logger | undefined; +}): Promise { + const git = Git.fromAuth({ + ...auth, + logger, + }); + + await git.checkout({ dir, ref }); +} + +/** + * @public + */ +export async function addFiles({ + dir, + filepath, + auth, + logger, +}: { + dir: string; + filepath: string; + // For use cases where token has to be used with Basic Auth + // it has to be provided as password together with a username + // which may be a fixed value defined by the provider. + auth: { username: string; password: string } | { token: string }; + logger?: Logger | undefined; +}): Promise { + const git = Git.fromAuth({ + ...auth, + logger, + }); + + await git.add({ dir, filepath }); +} + +/** + * @public + */ +export async function commitAndPushBranch({ dir, - remoteUrl, auth, logger, commitMessage, gitAuthorInfo, branch = 'master', remoteRef, + remote = 'origin', }: { - tempDir: string; dir: string; - remoteUrl: string; // For use cases where token has to be used with Basic Auth // it has to be provided as password together with a username // which may be a fixed value defined by the provider. auth: { username: string; password: string } | { token: string }; - logger: Logger; + logger?: Logger | undefined; commitMessage: string; gitAuthorInfo?: { name?: string; email?: string }; branch?: string; remoteRef?: string; + remote?: string; }): Promise<{ commitHash: string }> { const git = Git.fromAuth({ ...auth, logger, }); - await git.clone({ url: remoteUrl, dir: tempDir }); - await git.fetch({ dir: tempDir }); - await git.checkout({ dir: tempDir, ref: branch }); - - // copy files - fs.cpSync(dir, tempDir, { - recursive: true, - filter: path => { - return !(path.indexOf('.git') > -1); - }, - }); - - await git.add({ dir: tempDir, filepath: '.' }); - // use provided info if possible, otherwise use fallbacks const authorInfo = { name: gitAuthorInfo?.name ?? 'Scaffolder', @@ -189,15 +253,15 @@ export async function commitAndPushBranch({ }; const commitHash = await git.commit({ - dir: tempDir, + dir, message: commitMessage, author: authorInfo, committer: authorInfo, }); await git.push({ - dir: tempDir, - remote: 'origin', + dir, + remote, remoteRef: remoteRef ?? `refs/heads/${branch}`, }); diff --git a/plugins/scaffolder-node/src/actions/index.ts b/plugins/scaffolder-node/src/actions/index.ts index 885f34c293..c1c8551c53 100644 --- a/plugins/scaffolder-node/src/actions/index.ts +++ b/plugins/scaffolder-node/src/actions/index.ts @@ -29,5 +29,8 @@ export { initRepoAndPush, commitAndPushRepo, commitAndPushBranch, + addFiles, + createBranch, + cloneRepo, } from './gitHelpers'; export { parseRepoUrl, getRepoSourceDirectory } from './util'; From f7cc86f9dd4878d751f580877a8a9e4ef4f4f696 Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Tue, 16 Jan 2024 15:00:05 -0500 Subject: [PATCH 126/129] clean-up code, fixed issue number and added import Signed-off-by: Jason Froehlich --- .changeset/unlucky-wasps-tan.md | 2 +- .../package.json | 1 + .../scaffolder-node/src/actions/gitHelpers.ts | 49 +++++++------------ 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/.changeset/unlucky-wasps-tan.md b/.changeset/unlucky-wasps-tan.md index df6eca4820..97813cb416 100644 --- a/.changeset/unlucky-wasps-tan.md +++ b/.changeset/unlucky-wasps-tan.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder-backend-module-bitbucket': patch --- -Enhanced the pull request action to allow for adding new content to the PR as described in this issue #2172 +Enhanced the pull request action to allow for adding new content to the PR as described in this issue #21762 diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json index 03ebab43fc..e045bb9dc8 100644 --- a/plugins/scaffolder-backend-module-bitbucket/package.json +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -28,6 +28,7 @@ "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", + "fs-extra": "10.1.0", "node-fetch": "^2.6.7", "yaml": "^2.0.0" }, diff --git a/plugins/scaffolder-node/src/actions/gitHelpers.ts b/plugins/scaffolder-node/src/actions/gitHelpers.ts index 7f36ae0137..2026e75247 100644 --- a/plugins/scaffolder-node/src/actions/gitHelpers.ts +++ b/plugins/scaffolder-node/src/actions/gitHelpers.ts @@ -138,15 +138,7 @@ export async function commitAndPushRepo(input: { /** * @public */ -export async function cloneRepo({ - url, - dir, - auth, - logger, - ref, - depth, - noCheckout, -}: { +export async function cloneRepo(options: { url: string; dir: string; // For use cases where token has to be used with Basic Auth @@ -158,6 +150,8 @@ export async function cloneRepo({ depth?: number | undefined; noCheckout?: boolean | undefined; }): Promise { + const { url, dir, auth, logger, ref, depth, noCheckout } = options; + const git = Git.fromAuth({ ...auth, logger, @@ -169,12 +163,7 @@ export async function cloneRepo({ /** * @public */ -export async function createBranch({ - dir, - auth, - logger, - ref, -}: { +export async function createBranch(options: { dir: string; ref: string; // For use cases where token has to be used with Basic Auth @@ -183,6 +172,7 @@ export async function createBranch({ auth: { username: string; password: string } | { token: string }; logger?: Logger | undefined; }): Promise { + const { dir, ref, auth, logger } = options; const git = Git.fromAuth({ ...auth, logger, @@ -194,12 +184,7 @@ export async function createBranch({ /** * @public */ -export async function addFiles({ - dir, - filepath, - auth, - logger, -}: { +export async function addFiles(options: { dir: string; filepath: string; // For use cases where token has to be used with Basic Auth @@ -208,6 +193,7 @@ export async function addFiles({ auth: { username: string; password: string } | { token: string }; logger?: Logger | undefined; }): Promise { + const { dir, filepath, auth, logger } = options; const git = Git.fromAuth({ ...auth, logger, @@ -219,16 +205,7 @@ export async function addFiles({ /** * @public */ -export async function commitAndPushBranch({ - dir, - auth, - logger, - commitMessage, - gitAuthorInfo, - branch = 'master', - remoteRef, - remote = 'origin', -}: { +export async function commitAndPushBranch(options: { dir: string; // For use cases where token has to be used with Basic Auth // it has to be provided as password together with a username @@ -241,6 +218,16 @@ export async function commitAndPushBranch({ remoteRef?: string; remote?: string; }): Promise<{ commitHash: string }> { + const { + dir, + auth, + logger, + commitMessage, + gitAuthorInfo, + branch = 'master', + remoteRef, + remote = 'origin', + } = options; const git = Git.fromAuth({ ...auth, logger, From c1cf957843ea231027896203d089acd6f75c367c Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Tue, 16 Jan 2024 15:22:13 -0500 Subject: [PATCH 127/129] Add fs-extra Signed-off-by: Jason Froehlich --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index 33ac9d7aab..a7e2c1ac51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8045,6 +8045,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" + fs-extra: 10.1.0 msw: ^1.0.0 node-fetch: ^2.6.7 yaml: ^2.0.0 From 20a0f4b29a85419aa786f2db539a493fdff2da6d Mon Sep 17 00:00:00 2001 From: Jason Froehlich Date: Tue, 16 Jan 2024 15:55:13 -0500 Subject: [PATCH 128/129] updated api reports Signed-off-by: Jason Froehlich --- plugins/scaffolder-node/api-report.md | 35 +++------------------------ 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index 5dff4a8e5e..1d9adb20d9 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -46,12 +46,7 @@ export type ActionContext< }; // @public (undocumented) -export function addFiles({ - dir, - filepath, - auth, - logger, -}: { +export function addFiles(options: { dir: string; filepath: string; auth: @@ -66,15 +61,7 @@ export function addFiles({ }): Promise; // @public (undocumented) -export function cloneRepo({ - url, - dir, - auth, - logger, - ref, - depth, - noCheckout, -}: { +export function cloneRepo(options: { url: string; dir: string; auth: @@ -92,16 +79,7 @@ export function cloneRepo({ }): Promise; // @public (undocumented) -export function commitAndPushBranch({ - dir, - auth, - logger, - commitMessage, - gitAuthorInfo, - branch, - remoteRef, - remote, -}: { +export function commitAndPushBranch(options: { dir: string; auth: | { @@ -148,12 +126,7 @@ export function commitAndPushRepo(input: { }>; // @public (undocumented) -export function createBranch({ - dir, - auth, - logger, - ref, -}: { +export function createBranch(options: { dir: string; ref: string; auth: From 634ab810c90b9992f404fdec7464bcb5ce8b63cc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 22 Jan 2024 19:26:35 +0100 Subject: [PATCH 129/129] bitbucket-cloud-common: update schema and models Signed-off-by: Patrik Oldsberg --- plugins/bitbucket-cloud-common/api-report.md | 2 - .../bitbucket-cloud.oas.json | 6656 ++++++++++++++++- .../src/models/index.ts | 12 + 3 files changed, 6284 insertions(+), 386 deletions(-) diff --git a/plugins/bitbucket-cloud-common/api-report.md b/plugins/bitbucket-cloud-common/api-report.md index 95e6f36836..0f4e82d5d1 100644 --- a/plugins/bitbucket-cloud-common/api-report.md +++ b/plugins/bitbucket-cloud-common/api-report.md @@ -271,9 +271,7 @@ export namespace Models { description?: string; fork_policy?: RepositoryForkPolicyEnum; full_name?: string; - // (undocumented) has_issues?: boolean; - // (undocumented) has_wiki?: boolean; // (undocumented) is_private?: boolean; diff --git a/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json b/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json index 9de3c5f9b3..d897d83047 100644 --- a/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json +++ b/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json @@ -499,7 +499,7 @@ "/hook_events": { "get": { "tags": ["Webhooks"], - "description": "Returns the webhook resource or subject types on which webhooks can\nbe registered.\n\nEach resource/subject type contains an `events` link that returns the\npaginated list of specific events each individual subject type can\nemit.\n\nThis endpoint is publicly accessible and does not require\nauthentication or scopes.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/hook_events\n\n{\n \"repository\": {\n \"links\": {\n \"events\": {\n \"href\": \"https://api.bitbucket.org/2.0/hook_events/repository\"\n }\n }\n },\n \"workspace\": {\n \"links\": {\n \"events\": {\n \"href\": \"https://api.bitbucket.org/2.0/hook_events/workspace\"\n }\n }\n }\n}\n```", + "description": "Returns the webhook resource or subject types on which webhooks can\nbe registered.\n\nEach resource/subject type contains an `events` link that returns the\npaginated list of specific events each individual subject type can\nemit.\n\nThis endpoint is publicly accessible and does not require\nauthentication or scopes.", "summary": "Get a webhook resource", "responses": { "200": { @@ -508,6 +508,26 @@ "application/json": { "schema": { "$ref": "#/components/schemas/subject_types" + }, + "examples": { + "response": { + "value": { + "repository": { + "links": { + "events": { + "href": "https://api.bitbucket.org/2.0/hook_events/repository" + } + } + }, + "workspace": { + "links": { + "events": { + "href": "https://api.bitbucket.org/2.0/hook_events/workspace" + } + } + } + } + } } } } @@ -530,7 +550,7 @@ "/hook_events/{subject_type}": { "get": { "tags": ["Webhooks"], - "description": "Returns a paginated list of all valid webhook events for the\nspecified entity.\n**The team and user webhooks are deprecated, and you should use workspace instead.\nFor more information, see [the announcement](https://developer.atlassian.com/cloud/bitbucket/bitbucket-api-teams-deprecation/).**\n\nThis is public data that does not require any scopes or authentication.\n\nExample:\n\nNOTE: The following example is a truncated response object for the `workspace` `subject_type`.\nWe return the same structure for the other `subject_type` objects.\n\n```\n$ curl https://api.bitbucket.org/2.0/hook_events/workspace\n{\n \"page\": 1,\n \"pagelen\": 30,\n \"size\": 21,\n \"values\": [\n {\n \"category\": \"Repository\",\n \"description\": \"Whenever a repository push occurs\",\n \"event\": \"repo:push\",\n \"label\": \"Push\"\n },\n {\n \"category\": \"Repository\",\n \"description\": \"Whenever a repository fork occurs\",\n \"event\": \"repo:fork\",\n \"label\": \"Fork\"\n },\n {\n \"category\": \"Repository\",\n \"description\": \"Whenever a repository import occurs\",\n \"event\": \"repo:imported\",\n \"label\": \"Import\"\n },\n ...\n {\n \"category\":\"Pull Request\",\n \"label\":\"Approved\",\n \"description\":\"When someone has approved a pull request\",\n \"event\":\"pullrequest:approved\"\n },\n ]\n}\n```", + "description": "Returns a paginated list of all valid webhook events for the\nspecified entity.\n**The team and user webhooks are deprecated, and you should use workspace instead.\nFor more information, see [the announcement](https://developer.atlassian.com/cloud/bitbucket/bitbucket-api-teams-deprecation/).**\n\nThis is public data that does not require any scopes or authentication.\n\nNOTE: The example response is a truncated response object for the `workspace` `subject_type`.\nWe return the same structure for the other `subject_type` objects.", "summary": "List subscribable webhook types", "responses": { "200": { @@ -539,6 +559,41 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_hook_events" + }, + "examples": { + "response": { + "value": { + "page": 1, + "pagelen": 30, + "size": 4, + "values": [ + { + "category": "Repository", + "description": "Whenever a repository push occurs", + "event": "repo:push", + "label": "Push" + }, + { + "category": "Repository", + "description": "Whenever a repository fork occurs", + "event": "repo:fork", + "label": "Fork" + }, + { + "category": "Repository", + "description": "Whenever a repository import occurs", + "event": "repo:imported", + "label": "Import" + }, + { + "category": "Pull Request", + "label": "Approved", + "description": "When someone has approved a pull request", + "event": "pullrequest:approved" + } + ] + } + } } } } @@ -788,6 +843,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -853,6 +915,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["delete:repository:bitbucket"] + } ] }, "get": { @@ -901,6 +970,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -959,6 +1035,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "put": { @@ -1043,6 +1126,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -1143,11 +1233,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "post": { "tags": ["Branch restrictions"], - "description": "Creates a new branch restriction rule for a repository.\n\n`kind` describes what will be restricted. Allowed values include:\n`push`, `force`, `delete` and `restrict_merges`.\n\nDifferent kinds of branch restrictions have different requirements:\n\n* `push` and `restrict_merges` require `users` and `groups` to be\n specified. Empty lists are allowed, in which case permission is\n denied for everybody.\n\nThe restriction applies to all branches that match. There are\ntwo ways to match a branch. It is configured in `branch_match_kind`:\n\n1. `glob`: Matches a branch against the `pattern`. A `'*'` in\n `pattern` will expand to match zero or more characters, and every\n other character matches itself. For example, `'foo*'` will match\n `'foo'` and `'foobar'`, but not `'barfoo'`. `'*'` will match all\n branches.\n2. `branching_model`: Matches a branch against the repository's\n branching model. The `branch_type` controls the type of branch\n to match. Allowed values include: `production`, `development`,\n `bugfix`, `release`, `feature` and `hotfix`.\n\nThe combination of `kind` and match must be unique. This means that\ntwo `glob` restrictions in a repository cannot have the same `kind` and\n`pattern`. Additionally, two `branching_model` restrictions in a\nrepository cannot have the same `kind` and `branch_type`.\n\n`users` and `groups` are lists of users and groups that are except from\nthe restriction. They can only be configured in `push` and\n`restrict_merges` restrictions. The `push` restriction stops a user\npushing to matching branches unless that user is in `users` or is a\nmember of a group in `groups`. The `restrict_merges` stops a user\nmerging pull requests to matching branches unless that user is in\n`users` or is a member of a group in `groups`. Adding new users or\ngroups to an existing restriction should be done via `PUT`.\n\nNote that branch restrictions with overlapping matchers is allowed,\nbut the resulting behavior may be surprising.", + "description": "Creates a new branch restriction rule for a repository.\n\n`kind` describes what will be restricted. Allowed values include:\n`push`, `force`, `delete`, `restrict_merges`, `require_tasks_to_be_completed`,\n`require_approvals_to_merge`, `require_default_reviewer_approvals_to_merge`,\n`require_no_changes_requested`, `require_passing_builds_to_merge`, `require_commits_behind`,\n`reset_pullrequest_approvals_on_change`, `smart_reset_pullrequest_approvals`,\n`reset_pullrequest_changes_requested_on_change`, `require_all_dependencies_merged`,\n`enforce_merge_checks`, and `allow_auto_merge_when_builds_pass`.\n\nDifferent kinds of branch restrictions have different requirements:\n\n* `push` and `restrict_merges` require `users` and `groups` to be\n specified. Empty lists are allowed, in which case permission is\n denied for everybody.\n\nThe restriction applies to all branches that match. There are\ntwo ways to match a branch. It is configured in `branch_match_kind`:\n\n1. `glob`: Matches a branch against the `pattern`. A `'*'` in\n `pattern` will expand to match zero or more characters, and every\n other character matches itself. For example, `'foo*'` will match\n `'foo'` and `'foobar'`, but not `'barfoo'`. `'*'` will match all\n branches.\n2. `branching_model`: Matches a branch against the repository's\n branching model. The `branch_type` controls the type of branch\n to match. Allowed values include: `production`, `development`,\n `bugfix`, `release`, `feature` and `hotfix`.\n\nThe combination of `kind` and match must be unique. This means that\ntwo `glob` restrictions in a repository cannot have the same `kind` and\n`pattern`. Additionally, two `branching_model` restrictions in a\nrepository cannot have the same `kind` and `branch_type`.\n\n`users` and `groups` are lists of users and groups that are except from\nthe restriction. They can only be configured in `push` and\n`restrict_merges` restrictions. The `push` restriction stops a user\npushing to matching branches unless that user is in `users` or is a\nmember of a group in `groups`. The `restrict_merges` stops a user\nmerging pull requests to matching branches unless that user is in\n`users` or is a member of a group in `groups`. Adding new users or\ngroups to an existing restriction should be done via `PUT`.\n\nNote that branch restrictions with overlapping matchers is allowed,\nbut the resulting behavior may be surprising.", "summary": "Create a branch restriction rule", "responses": { "201": { @@ -1212,6 +1309,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -1285,6 +1389,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "get": { @@ -1343,6 +1454,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "put": { @@ -1412,6 +1530,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -1447,7 +1572,7 @@ "/repositories/{workspace}/{repo_slug}/branching-model": { "get": { "tags": ["Branching model"], - "description": "Return the branching model as applied to the repository. This view is\nread-only. The branching model settings can be changed using the\n[settings](#api-repositories-workspace-repo-slug-branching-model-settings-get) API.\n\nThe returned object:\n\n1. Always has a `development` property. `development.branch` contains\n the actual repository branch object that is considered to be the\n `development` branch. `development.branch` will not be present\n if it does not exist.\n2. Might have a `production` property. `production` will not\n be present when `production` is disabled.\n `production.branch` contains the actual branch object that is\n considered to be the `production` branch. `production.branch` will\n not be present if it does not exist.\n3. Always has a `branch_types` array which contains all enabled branch\n types.\n\nExample body:\n\n```\n{\n \"development\": {\n \"name\": \"master\",\n \"branch\": {\n \"type\": \"branch\",\n \"name\": \"master\",\n \"target\": {\n \"hash\": \"16dffcb0de1b22e249db6799532074cf32efe80f\"\n }\n },\n \"use_mainbranch\": true\n },\n \"production\": {\n \"name\": \"production\",\n \"branch\": {\n \"type\": \"branch\",\n \"name\": \"production\",\n \"target\": {\n \"hash\": \"16dffcb0de1b22e249db6799532074cf32efe80f\"\n }\n },\n \"use_mainbranch\": false\n },\n \"branch_types\": [\n {\n \"kind\": \"release\",\n \"prefix\": \"release/\"\n },\n {\n \"kind\": \"hotfix\",\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"feature\",\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"bugfix\",\n \"prefix\": \"bugfix/\"\n }\n ],\n \"type\": \"branching_model\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/.../branching-model\"\n }\n }\n}\n```", + "description": "Return the branching model as applied to the repository. This view is\nread-only. The branching model settings can be changed using the\n[settings](#api-repositories-workspace-repo-slug-branching-model-settings-get) API.\n\nThe returned object:\n\n1. Always has a `development` property. `development.branch` contains\n the actual repository branch object that is considered to be the\n `development` branch. `development.branch` will not be present\n if it does not exist.\n2. Might have a `production` property. `production` will not\n be present when `production` is disabled.\n `production.branch` contains the actual branch object that is\n considered to be the `production` branch. `production.branch` will\n not be present if it does not exist.\n3. Always has a `branch_types` array which contains all enabled branch\n types.", "summary": "Get the branching model for a repository", "responses": { "200": { @@ -1456,6 +1581,58 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branching_model" + }, + "examples": { + "response": { + "value": { + "development": { + "name": "master", + "branch": { + "type": "branch", + "name": "master", + "target": { + "hash": "16dffcb0de1b22e249db6799532074cf32efe80f" + } + }, + "use_mainbranch": true + }, + "production": { + "name": "production", + "branch": { + "type": "branch", + "name": "production", + "target": { + "hash": "16dffcb0de1b22e249db6799532074cf32efe80f" + } + }, + "use_mainbranch": false + }, + "branch_types": [ + { + "kind": "release", + "prefix": "release/" + }, + { + "kind": "hotfix", + "prefix": "hotfix/" + }, + { + "kind": "feature", + "prefix": "feature/" + }, + { + "kind": "bugfix", + "prefix": "bugfix/" + } + ], + "type": "branching_model", + "links": { + "self": { + "href": "https://api.bitbucket.org/.../branching-model" + } + } + } + } } } } @@ -1501,6 +1678,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -1527,7 +1711,7 @@ "/repositories/{workspace}/{repo_slug}/branching-model/settings": { "get": { "tags": ["Branching model"], - "description": "Return the branching model configuration for a repository. The returned\nobject:\n\n1. Always has a `development` property for the development branch.\n2. Always a `production` property for the production branch. The\n production branch can be disabled.\n3. The `branch_types` contains all the branch types.\n\nThis is the raw configuration for the branching model. A client\nwishing to see the branching model with its actual current branches may\nfind the [active model API](/cloud/bitbucket/rest/api-group-branching-model/#api-repositories-workspace-repo-slug-branching-model-get) more useful.\n\nExample body:\n\n```\n{\n \"development\": {\n \"is_valid\": true,\n \"name\": null,\n \"use_mainbranch\": true\n },\n \"production\": {\n \"is_valid\": true,\n \"name\": \"production\",\n \"use_mainbranch\": false,\n \"enabled\": false\n },\n \"branch_types\": [\n {\n \"kind\": \"release\",\n \"enabled\": true,\n \"prefix\": \"release/\"\n },\n {\n \"kind\": \"hotfix\",\n \"enabled\": true,\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"feature\",\n \"enabled\": true,\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"bugfix\",\n \"enabled\": false,\n \"prefix\": \"bugfix/\"\n }\n ],\n \"type\": \"branching_model_settings\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/.../branching-model/settings\"\n }\n }\n}\n```", + "description": "Return the branching model configuration for a repository. The returned\nobject:\n\n1. Always has a `development` property for the development branch.\n2. Always a `production` property for the production branch. The\n production branch can be disabled.\n3. The `branch_types` contains all the branch types.\n\nThis is the raw configuration for the branching model. A client\nwishing to see the branching model with its actual current branches may\nfind the [active model API](/cloud/bitbucket/rest/api-group-branching-model/#api-repositories-workspace-repo-slug-branching-model-get) more useful.", "summary": "Get the branching model config for a repository", "responses": { "200": { @@ -1536,6 +1720,51 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branching_model_settings" + }, + "examples": { + "response": { + "value": { + "development": { + "is_valid": true, + "name": "null", + "use_mainbranch": true + }, + "production": { + "is_valid": true, + "name": "production", + "use_mainbranch": false, + "enabled": false + }, + "branch_types": [ + { + "kind": "release", + "enabled": true, + "prefix": "release/" + }, + { + "kind": "hotfix", + "enabled": true, + "prefix": "hotfix/" + }, + { + "kind": "feature", + "enabled": true, + "prefix": "feature/" + }, + { + "kind": "bugfix", + "enabled": false, + "prefix": "bugfix/" + } + ], + "type": "branching_model_settings", + "links": { + "self": { + "href": "https://api.bitbucket.org/.../branching-model/settings" + } + } + } + } } } } @@ -1581,11 +1810,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "put": { "tags": ["Branching model"], - "description": "Update the branching model configuration for a repository.\n\nThe `development` branch can be configured to a specific branch or to\ntrack the main branch. When set to a specific branch it must\ncurrently exist. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`development` property will leave the development branch unchanged.\n\nIt is possible for the `development` branch to be invalid. This\nhappens when it points at a specific branch that has been\ndeleted. This is indicated in the `is_valid` field for the branch. It is\nnot possible to update the settings for `development` if that\nwould leave the branch in an invalid state. Such a request will be\nrejected.\n\nThe `production` branch can be a specific branch, the main\nbranch or disabled. When set to a specific branch it must currently\nexist. The `enabled` property can be used to enable (`true`) or\ndisable (`false`) it. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`production` property will leave the production branch unchanged.\n\nIt is possible for the `production` branch to be invalid. This\nhappens when it points at a specific branch that has been\ndeleted. This is indicated in the `is_valid` field for the branch. A\nrequest that would leave `production` enabled and invalid will be\nrejected. It is possible to update `production` and make it invalid if\nit would also be left disabled.\n\nThe `branch_types` property contains the branch types to be updated.\nOnly the branch types passed will be updated. All updates will be\nrejected if it would leave the branching model in an invalid state.\nFor branch types this means that:\n\n1. The prefixes for all enabled branch types are valid. For example,\n it is not possible to use '*' inside a Git prefix.\n2. A prefix of an enabled branch type must not be a prefix of another\n enabled branch type. This is to ensure that a branch can be easily\n classified by its prefix unambiguously.\n\nIt is possible to store an invalid prefix if that branch type would be\nleft disabled. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. Each branch type must\nhave a `kind` property to identify it.\n\nExample Body:\n\n```\n {\n \"development\": {\n \"use_mainbranch\": true\n },\n \"production\": {\n \"enabled\": true,\n \"use_mainbranch\": false,\n \"name\": \"production\"\n },\n \"branch_types\": [\n {\n \"kind\": \"bugfix\",\n \"enabled\": true,\n \"prefix\": \"bugfix/\"\n },\n {\n \"kind\": \"feature\",\n \"enabled\": true,\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"hotfix\",\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"release\",\n \"enabled\": false,\n }\n ]\n }\n```\n\nThere is currently a side effect when using this API endpoint. If the\nrepository is inheriting branching model settings from its project,\nupdating the branching model for this repository will disable the\nproject setting inheritance.\n\n\nWe have deprecated this side effect and will remove it on 1 August 2022.", + "description": "Update the branching model configuration for a repository.\n\nThe `development` branch can be configured to a specific branch or to\ntrack the main branch. When set to a specific branch it must\ncurrently exist. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`development` property will leave the development branch unchanged.\n\nIt is possible for the `development` branch to be invalid. This\nhappens when it points at a specific branch that has been\ndeleted. This is indicated in the `is_valid` field for the branch. It is\nnot possible to update the settings for `development` if that\nwould leave the branch in an invalid state. Such a request will be\nrejected.\n\nThe `production` branch can be a specific branch, the main\nbranch or disabled. When set to a specific branch it must currently\nexist. The `enabled` property can be used to enable (`true`) or\ndisable (`false`) it. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`production` property will leave the production branch unchanged.\n\nIt is possible for the `production` branch to be invalid. This\nhappens when it points at a specific branch that has been\ndeleted. This is indicated in the `is_valid` field for the branch. A\nrequest that would leave `production` enabled and invalid will be\nrejected. It is possible to update `production` and make it invalid if\nit would also be left disabled.\n\nThe `branch_types` property contains the branch types to be updated.\nOnly the branch types passed will be updated. All updates will be\nrejected if it would leave the branching model in an invalid state.\nFor branch types this means that:\n\n1. The prefixes for all enabled branch types are valid. For example,\n it is not possible to use '*' inside a Git prefix.\n2. A prefix of an enabled branch type must not be a prefix of another\n enabled branch type. This is to ensure that a branch can be easily\n classified by its prefix unambiguously.\n\nIt is possible to store an invalid prefix if that branch type would be\nleft disabled. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. Each branch type must\nhave a `kind` property to identify it.\n\nThere is currently a side effect when using this API endpoint. If the\nrepository is inheriting branching model settings from its project,\nupdating the branching model for this repository will disable the\nproject setting inheritance.\n\n\nWe have deprecated this side effect and will remove it on 1 August 2022.", "summary": "Update the branching model config for a repository", "responses": { "200": { @@ -1594,6 +1830,40 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branching_model_settings" + }, + "examples": { + "response": { + "value": { + "development": { + "use_mainbranch": true + }, + "production": { + "enabled": true, + "use_mainbranch": false, + "name": "production" + }, + "branch_types": [ + { + "kind": "bugfix", + "enabled": true, + "prefix": "bugfix/" + }, + { + "kind": "feature", + "enabled": true, + "prefix": "feature/" + }, + { + "kind": "hotfix", + "prefix": "hotfix/" + }, + { + "kind": "release", + "enabled": false + } + ] + } + } } } } @@ -1649,6 +1919,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -1675,7 +1952,7 @@ "/repositories/{workspace}/{repo_slug}/commit/{commit}": { "get": { "tags": ["Commits"], - "description": "Returns the specified commit.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a1\n{\n \"rendered\": {\n \"message\": {\n \"raw\": \"Add a GEORDI_OUTPUT_DIR setting\",\n \"markup\": \"markdown\",\n \"html\": \"

Add a GEORDI_OUTPUT_DIR setting

\",\n \"type\": \"rendered\"\n }\n },\n \"hash\": \"f7591a13eda445d9a9167f98eb870319f4b6c2d8\",\n \"repository\": {\n \"name\": \"geordi\",\n \"type\": \"repository\",\n \"full_name\": \"bitbucket/geordi\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/bitbucket/geordi\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B85d08b4e-571d-44e9-a507-fa476535aa98%7D?ts=1730260\"\n }\n },\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8\"\n },\n \"comments\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/comments\"\n },\n \"patch\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/patch/f7591a13eda445d9a9167f98eb870319f4b6c2d8\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/bitbucket/geordi/commits/f7591a13eda445d9a9167f98eb870319f4b6c2d8\"\n },\n \"diff\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/diff/f7591a13eda445d9a9167f98eb870319f4b6c2d8\"\n },\n \"approve\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/approve\"\n },\n \"statuses\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/statuses\"\n }\n },\n \"author\": {\n \"raw\": \"Brodie Rao \",\n \"type\": \"author\",\n \"user\": {\n \"display_name\": \"Brodie Rao\",\n \"uuid\": \"{9484702e-c663-4afd-aefb-c93a8cd31c28}\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/%7B9484702e-c663-4afd-aefb-c93a8cd31c28%7D\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/%7B9484702e-c663-4afd-aefb-c93a8cd31c28%7D/\"\n },\n \"avatar\": {\n \"href\": \"https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/557058:3aae1e05-702a-41e5-81c8-f36f29afb6ca/613070db-28b0-421f-8dba-ae8a87e2a5c7/128\"\n }\n },\n \"type\": \"user\",\n \"nickname\": \"brodie\",\n \"account_id\": \"557058:3aae1e05-702a-41e5-81c8-f36f29afb6ca\"\n }\n },\n \"summary\": {\n \"raw\": \"Add a GEORDI_OUTPUT_DIR setting\",\n \"markup\": \"markdown\",\n \"html\": \"

Add a GEORDI_OUTPUT_DIR setting

\",\n \"type\": \"rendered\"\n },\n \"participants\": [],\n \"parents\": [\n {\n \"type\": \"commit\",\n \"hash\": \"f06941fec4ef6bcb0c2456927a0cf258fa4f899b\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f06941fec4ef6bcb0c2456927a0cf258fa4f899b\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/bitbucket/geordi/commits/f06941fec4ef6bcb0c2456927a0cf258fa4f899b\"\n }\n }\n }\n ],\n \"date\": \"2012-07-16T19:37:54+00:00\",\n \"message\": \"Add a GEORDI_OUTPUT_DIR setting\",\n \"type\": \"commit\"\n}\n```", + "description": "Returns the specified commit.", "summary": "Get a commit", "responses": { "200": { @@ -1684,6 +1961,107 @@ "application/json": { "schema": { "$ref": "#/components/schemas/commit" + }, + "examples": { + "response": { + "value": { + "rendered": { + "message": { + "raw": "Add a GEORDI_OUTPUT_DIR setting", + "markup": "markdown", + "html": "

Add a GEORDI_OUTPUT_DIR setting

", + "type": "rendered" + } + }, + "hash": "f7591a13eda445d9a9167f98eb870319f4b6c2d8", + "repository": { + "name": "geordi", + "type": "repository", + "full_name": "bitbucket/geordi", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi" + }, + "html": { + "href": "https://bitbucket.org/bitbucket/geordi" + }, + "avatar": { + "href": "https://bytebucket.org/ravatar/%7B85d08b4e-571d-44e9-a507-fa476535aa98%7D?ts=1730260" + } + }, + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8" + }, + "comments": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/comments" + }, + "patch": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/patch/f7591a13eda445d9a9167f98eb870319f4b6c2d8" + }, + "html": { + "href": "https://bitbucket.org/bitbucket/geordi/commits/f7591a13eda445d9a9167f98eb870319f4b6c2d8" + }, + "diff": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/diff/f7591a13eda445d9a9167f98eb870319f4b6c2d8" + }, + "approve": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/approve" + }, + "statuses": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f7591a13eda445d9a9167f98eb870319f4b6c2d8/statuses" + } + }, + "author": { + "raw": "Brodie Rao ", + "type": "author", + "user": { + "display_name": "Brodie Rao", + "uuid": "{9484702e-c663-4afd-aefb-c93a8cd31c28}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/%7B9484702e-c663-4afd-aefb-c93a8cd31c28%7D" + }, + "html": { + "href": "https://bitbucket.org/%7B9484702e-c663-4afd-aefb-c93a8cd31c28%7D/" + }, + "avatar": { + "href": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/557058:3aae1e05-702a-41e5-81c8-f36f29afb6ca/613070db-28b0-421f-8dba-ae8a87e2a5c7/128" + } + }, + "type": "user", + "nickname": "brodie", + "account_id": "557058:3aae1e05-702a-41e5-81c8-f36f29afb6ca" + } + }, + "summary": { + "raw": "Add a GEORDI_OUTPUT_DIR setting", + "markup": "markdown", + "html": "

Add a GEORDI_OUTPUT_DIR setting

", + "type": "rendered" + }, + "participants": [], + "parents": [ + { + "type": "commit", + "hash": "f06941fec4ef6bcb0c2456927a0cf258fa4f899b", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/commit/f06941fec4ef6bcb0c2456927a0cf258fa4f899b" + }, + "html": { + "href": "https://bitbucket.org/bitbucket/geordi/commits/f06941fec4ef6bcb0c2456927a0cf258fa4f899b" + } + } + } + ], + "date": "2012-07-16T19:37:54+00:00", + "message": "Add a GEORDI_OUTPUT_DIR setting", + "type": "commit" + } + } } } } @@ -1709,6 +2087,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -1771,6 +2156,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:repository:bitbucket"] + } ] }, "post": { @@ -1809,6 +2201,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:repository:bitbucket", + "write:repository:bitbucket" + ] + } ] }, "parameters": [ @@ -1888,6 +2290,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -1934,6 +2343,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -1967,6 +2383,37 @@ ] }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/comments/{comment_id}": { + "delete": { + "tags": ["Commits"], + "description": "Deletes the specified commit comment.\n\nNote that deleting comments that have visible replies that point to\nthem will not really delete the resource. This is to retain the integrity\nof the original comment tree. Instead, the `deleted` element is set to\n`true` and the content is blanked out. The comment will continue to be\nreturned by the collections and self endpoints.", + "summary": "Delete a commit comment", + "responses": { + "204": { + "description": "Indicates the comment was deleted by this action or a previous delete." + }, + "404": { + "description": "If the comment doesn't exist" + } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } + ] + }, "get": { "tags": ["Commits"], "description": "Returns the specified commit comment.", @@ -1993,6 +2440,63 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } + ] + }, + "put": { + "tags": ["Commits"], + "description": "Used to update the contents of a comment. Only the content of the comment can be updated.\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian/prlinks/commit/7f71b5/comments/5728901 \\\n -X PUT -u evzijst \\\n -H 'Content-Type: application/json' \\\n -d '{\"content\": {\"raw\": \"One more thing!\"}'\n```", + "summary": "Update a commit comment", + "responses": { + "201": { + "description": "The newly updated comment.", + "headers": { + "Location": { + "description": "The location of the newly updated comment.", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "If the comment update was detected as spam" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commit_comment" + } + } + }, + "description": "The updated comment.", + "required": true + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -2094,7 +2598,18 @@ "requestBody": { "$ref": "#/components/requestBodies/application_property" }, - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "responses": { @@ -2152,7 +2667,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "responses": { @@ -2217,7 +2743,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/pullrequests": { @@ -2308,7 +2845,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/reports": { @@ -2357,7 +2912,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/reports/{reportId}": { @@ -2436,7 +3002,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "tags": ["Reports", "Commits"], @@ -2502,7 +3079,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Reports", "Commits"], @@ -2551,7 +3139,18 @@ "204": { "description": "No content" } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/reports/{reportId}/annotations": { @@ -2609,7 +3208,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Reports", "Commits"], @@ -2684,7 +3294,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/reports/{reportId}/annotations/{annotationId}": { @@ -2761,7 +3382,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Reports", "Commits"], @@ -2847,7 +3479,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Reports", "Commits"], @@ -2905,7 +3548,18 @@ "204": { "description": "No content" } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/commit/{commit}/statuses": { @@ -2968,6 +3622,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -3050,6 +3711,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -3122,6 +3790,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "put": { @@ -3173,6 +3848,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -3251,6 +3933,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -3289,6 +3978,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -3315,7 +4011,7 @@ "/repositories/{workspace}/{repo_slug}/commits/{revision}": { "get": { "tags": ["Commits"], - "description": "These are the repository's commits. They are paginated and returned\nin reverse chronological order, similar to the output of `git log`.\nLike these tools, the DAG can be filtered.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/master\n\nReturns all commits on rev `master` (similar to `git log master`).\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?include=foo&exclude=master\n\nReturns all commits on ref `dev` or `foo`, except those that are reachable on\n`master` (similar to `git log dev foo ^master`).\n\nAn optional `path` parameter can be specified that will limit the\nresults to commits that affect that path. `path` can either be a file\nor a directory. If a directory is specified, commits are returned that\nhave modified any file in the directory tree rooted by `path`. It is\nimportant to note that if the `path` parameter is specified, the commits\nreturned by this endpoint may no longer be a DAG, parent commits that\ndo not modify the path will be omitted from the response.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?path=README.md&include=foo&include=bar&exclude=master\n\nReturns all commits that are on refs `dev` or `foo` or `bar`, but not on `master`\nthat changed the file README.md.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?path=src/&include=foo&exclude=master\n\nReturns all commits that are on refs `dev` or `foo`, but not on `master`\nthat changed to a file in any file in the directory src or its children.\n\nBecause the response could include a very large number of commits, it\nis paginated. Follow the 'next' link in the response to navigate to the\nnext page of commits. As with other paginated resources, do not\nconstruct your own links.\n\nWhen the include and exclude parameters are more than can fit in a\nquery string, clients can use a `x-www-form-urlencoded` POST instead.", + "description": "These are the repository's commits. They are paginated and returned\nin reverse chronological order, similar to the output of `git log`.\nLike these tools, the DAG can be filtered.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/master\n\nReturns all commits on ref `master` (similar to `git log master`).\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?include=foo&exclude=master\n\nReturns all commits on ref `dev` or `foo`, except those that are reachable on\n`master` (similar to `git log dev foo ^master`).\n\nAn optional `path` parameter can be specified that will limit the\nresults to commits that affect that path. `path` can either be a file\nor a directory. If a directory is specified, commits are returned that\nhave modified any file in the directory tree rooted by `path`. It is\nimportant to note that if the `path` parameter is specified, the commits\nreturned by this endpoint may no longer be a DAG, parent commits that\ndo not modify the path will be omitted from the response.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?path=README.md&include=foo&include=bar&exclude=master\n\nReturns all commits that are on refs `dev` or `foo` or `bar`, but not on `master`\nthat changed the file README.md.\n\n#### GET /repositories/{workspace}/{repo_slug}/commits/dev?path=src/&include=foo&exclude=master\n\nReturns all commits that are on refs `dev` or `foo`, but not on `master`\nthat changed to a file in any file in the directory src or its children.\n\nBecause the response could include a very large number of commits, it\nis paginated. Follow the 'next' link in the response to navigate to the\nnext page of commits. As with other paginated resources, do not\nconstruct your own links.\n\nWhen the include and exclude parameters are more than can fit in a\nquery string, clients can use a `x-www-form-urlencoded` POST instead.", "summary": "List commits for revision", "responses": { "200": { @@ -3349,6 +4045,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -3387,6 +4090,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -3402,7 +4112,7 @@ { "name": "revision", "in": "path", - "description": "The commit's SHA1.", + "description": "A commit SHA1 or ref name.", "required": true, "schema": { "type": "string" @@ -3585,6 +4295,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -3648,6 +4365,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "get": { @@ -3696,6 +4420,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "put": { @@ -3754,6 +4485,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -3789,7 +4527,7 @@ "/repositories/{workspace}/{repo_slug}/deploy-keys": { "get": { "tags": ["Deployments"], - "description": "Returns all deploy-keys belonging to a repository.\n\nExample:\n```\n$ curl -H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys\n\nOutput:\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"id\": 123,\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5\",\n \"label\": \"mykey\",\n \"type\": \"deploy_key\",\n \"created_on\": \"2018-08-15T23:50:59.993890+00:00\",\n \"repository\": {\n \"full_name\": \"mleu/test\",\n \"name\": \"test\",\n \"type\": \"repository\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"links\":{\n \"self\":{\n \"href\": \"https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123\"\n }\n }\n \"last_used\": null,\n \"comment\": \"mleu@C02W454JHTD8\"\n }\n ],\n \"page\": 1,\n \"size\": 1\n}\n```", + "description": "Returns all deploy-keys belonging to a repository.", "summary": "List repository deploy keys", "responses": { "200": { @@ -3798,6 +4536,37 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_deploy_keys" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "id": 123, + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", + "label": "mykey", + "type": "deploy_key", + "created_on": "2018-08-15T23:50:59.993890+00:00", + "repository": { + "full_name": "mleu/test", + "name": "test", + "type": "repository", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" + } + }, + "last_used": null, + "comment": "mleu@C02W454JHTD8" + } + ], + "page": 1, + "size": 1 + } + } } } } @@ -3830,7 +4599,7 @@ }, "post": { "tags": ["Deployments"], - "description": "Create a new deploy key in a repository. Note: If authenticating a deploy key\nwith an OAuth consumer, any changes to the OAuth consumer will subsequently\ninvalidate the deploy key.\n\n\nExample:\n```\n$ curl -XPOST \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys -d \\\n'{\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 mleu@C02W454JHTD8\",\n \"label\": \"mydeploykey\"\n}'\n\nOutput:\n{\n \"id\": 123,\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5\",\n \"label\": \"mydeploykey\",\n \"type\": \"deploy_key\",\n \"created_on\": \"2018-08-15T23:50:59.993890+00:00\",\n \"repository\": {\n \"full_name\": \"mleu/test\",\n \"name\": \"test\",\n \"type\": \"repository\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"links\":{\n \"self\":{\n \"href\": \"https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123\"\n }\n }\n \"last_used\": null,\n \"comment\": \"mleu@C02W454JHTD8\"\n}\n```", + "description": "Create a new deploy key in a repository. Note: If authenticating a deploy key\nwith an OAuth consumer, any changes to the OAuth consumer will subsequently\ninvalidate the deploy key.\n\n\nExample:\n```\n$ curl -X POST \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys -d \\\n'{\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 mleu@C02W454JHTD8\",\n \"label\": \"mydeploykey\"\n}'\n```", "summary": "Add a repository deploy key", "responses": { "200": { @@ -3839,6 +4608,30 @@ "application/json": { "schema": { "$ref": "#/components/schemas/deploy_key" + }, + "examples": { + "response": { + "value": { + "id": 123, + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", + "label": "mydeploykey", + "type": "deploy_key", + "created_on": "2018-08-15T23:50:59.993890+00:00", + "repository": { + "full_name": "mleu/test", + "name": "test", + "type": "repository", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" + } + }, + "last_used": null, + "comment": "mleu@C02W454JHTD8" + } + } } } } @@ -3896,7 +4689,7 @@ "/repositories/{workspace}/{repo_slug}/deploy-keys/{key_id}": { "delete": { "tags": ["Deployments"], - "description": "This deletes a deploy key from a repository.\n\nExample:\n```\n$ curl -XDELETE \\\n-H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/1234\n```", + "description": "This deletes a deploy key from a repository.", "summary": "Delete a repository deploy key", "responses": { "204": { @@ -3930,7 +4723,7 @@ }, "get": { "tags": ["Deployments"], - "description": "Returns the deploy key belonging to a specific key.\n\nExample:\n```\n$ curl -H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-key/1234\n\nOutput:\n{\n \"comment\": \"mleu@C02W454JHTD8\",\n \"last_used\": null,\n \"links\": {\n \"self\": {\n \"href\": https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-key/1234\"\n }\n },\n \"repository\": {\n \"full_name\": \"mleu/test\",\n \"name\": \"test\",\n \"type\": \"repository\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"label\": \"mykey\",\n \"created_on\": \"2018-08-15T23:50:59.993890+00:00\",\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5\",\n \"id\": 1234,\n \"type\": \"deploy_key\"\n}\n```", + "description": "Returns the deploy key belonging to a specific key.", "summary": "Get a repository deploy key", "responses": { "200": { @@ -3939,6 +4732,30 @@ "application/json": { "schema": { "$ref": "#/components/schemas/deploy_key" + }, + "examples": { + "response": { + "value": { + "comment": "mleu@C02W454JHTD8", + "last_used": null, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-key/1234" + } + }, + "repository": { + "full_name": "mleu/test", + "name": "test", + "type": "repository", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "label": "mykey", + "created_on": "2018-08-15T23:50:59.993890+00:00", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", + "id": 1234, + "type": "deploy_key" + } + } } } } @@ -3971,7 +4788,7 @@ }, "put": { "tags": ["Deployments"], - "description": "Create a new deploy key in a repository.\n\nThe same key needs to be passed in but the comment and label can change.\n\nExample:\n```\n$ curl -XPUT \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/1234 -d \\\n'{\n \"label\": \"newlabel\",\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 newcomment\",\n}'\n\nOutput:\n{\n \"comment\": \"newcomment\",\n \"last_used\": null,\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/1234\"\n }\n },\n \"repository\": {\n \"full_name\": \"mleu/test\",\n \"name\": \"test\",\n \"type\": \"repository\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"label\": \"newlabel\",\n \"created_on\": \"2018-08-15T23:50:59.993890+00:00\",\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5\",\n \"id\": 1234,\n \"type\": \"deploy_key\"\n}\n```", + "description": "Create a new deploy key in a repository.\n\nThe same key needs to be passed in but the comment and label can change.\n\nExample:\n```\n$ curl -X PUT \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/1234 -d \\\n'{\n \"label\": \"newlabel\",\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 newcomment\",\n}'\n```", "summary": "Update a repository deploy key", "responses": { "200": { @@ -3980,6 +4797,30 @@ "application/json": { "schema": { "$ref": "#/components/schemas/deploy_key" + }, + "examples": { + "response": { + "value": { + "comment": "newcomment", + "last_used": null, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/1234" + } + }, + "repository": { + "full_name": "mleu/test", + "name": "test", + "type": "repository", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "label": "newlabel", + "created_on": "2018-08-15T23:50:59.993890+00:00", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", + "id": 1234, + "type": "deploy_key" + } + } } } } @@ -4050,7 +4891,7 @@ } ] }, - "/repositories/{workspace}/{repo_slug}/deployments/": { + "/repositories/{workspace}/{repo_slug}/deployments": { "get": { "tags": ["Deployments"], "description": "Find deployments", @@ -4087,7 +4928,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/deployments/{deployment_uuid}": { @@ -4146,7 +5005,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/deployments_config/environments/{environment_uuid}/variables": { @@ -4195,7 +5072,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -4281,7 +5169,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/deployments_config/environments/{environment_uuid}/variables/{variable_uuid}": { @@ -4360,7 +5259,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -4419,13 +5329,24 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/diff/{spec}": { "get": { "tags": ["Commits"], - "description": "Produces a raw git-style diff.\n\n#### Single commit spec\n\nIf the `spec` argument to this API is a single commit, the diff is\nproduced against the first parent of the specified commit.\n\n#### Two commit spec\n\nTwo commits separated by `..` may be provided as the `spec`, e.g.,\n`3a8b42..9ff173`. When two commits are provided and the `topic` query\nparameter is true or absent, this API produces a 2-way three dot diff.\nThis is the diff between source commit and the merge base of the source\ncommit and the destination commit. When the `topic` query param is false,\na simple git-style diff is produced.\n\nThe two commits are interpreted as follows:\n\n* First commit: the commit containing the changes we wish to preview\n* Second commit: the commit representing the state to which we want to\n compare the first commit\n* **Note**: This is the opposite of the order used in `git diff`.\n\n#### Comparison to patches\n\nWhile similar to patches, diffs:\n\n* Don't have a commit header (username, commit message, etc)\n* Support the optional `path=foo/bar.py` query param to filter\n the diff to just that one file diff\n\n#### Response\n\nThe raw diff is returned as-is, in whatever encoding the files in the\nrepository use. It is not decoded into unicode. As such, the\ncontent-type is `text/plain`.", + "description": "Produces a raw git-style diff.\n\n#### Single commit spec\n\nIf the `spec` argument to this API is a single commit, the diff is\nproduced against the first parent of the specified commit.\n\n#### Two commit spec\n\nTwo commits separated by `..` may be provided as the `spec`, e.g.,\n`3a8b42..9ff173`. When two commits are provided and the `topic` query\nparameter is true, this API produces a 2-way three dot diff.\nThis is the diff between source commit and the merge base of the source\ncommit and the destination commit. When the `topic` query param is false,\na simple git-style diff is produced.\n\nThe two commits are interpreted as follows:\n\n* First commit: the commit containing the changes we wish to preview\n* Second commit: the commit representing the state to which we want to\n compare the first commit\n* **Note**: This is the opposite of the order used in `git diff`.\n\n#### Comparison to patches\n\nWhile similar to patches, diffs:\n\n* Don't have a commit header (username, commit message, etc)\n* Support the optional `path=foo/bar.py` query param to filter\n the diff to just that one file diff\n\n#### Response\n\nThe raw diff is returned as-is, in whatever encoding the files in the\nrepository use. It is not decoded into unicode. As such, the\ncontent-type is `text/plain`.", "summary": "Compare two commits", "responses": { "200": { @@ -4491,7 +5412,7 @@ { "name": "merge", "in": "query", - "description": "This parameter is deprecated and will be removed at the end\nof 2022. The 'topic' parameter should be used instead. The\n'merge' and 'topic' parameters cannot be both used at the same\ntime.\n\nIf true, the source commit is merged into the\ndestination commit, and then a diff from the\ndestination to the merge result is returned. If false,\na simple 'two dot' diff between the source and\ndestination is returned. True if omitted.", + "description": "This parameter is deprecated. The 'topic' parameter should be used\ninstead. The 'merge' and 'topic' parameters cannot be both used at\nthe same time.\n\nIf true, the source commit is merged into the\ndestination commit, and then a diff from the\ndestination to the merge result is returned. If false,\na simple 'two dot' diff between the source and\ndestination is returned. True if omitted.", "required": false, "schema": { "type": "boolean" @@ -4517,6 +5438,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -4552,7 +5480,7 @@ "/repositories/{workspace}/{repo_slug}/diffstat/{spec}": { "get": { "tags": ["Commits"], - "description": "Produces a response in JSON format with a record for every path\nmodified, including information on the type of the change and the\nnumber of lines added and removed.\n\n#### Single commit spec\n\nIf the `spec` argument to this API is a single commit, the diff is\nproduced against the first parent of the specified commit.\n\n#### Two commit spec\n\nTwo commits separated by `..` may be provided as the `spec`, e.g.,\n`3a8b42..9ff173`. When two commits are provided and the `topic` query\nparameter is true or absent, this API produces a 2-way three dot diff.\nThis is the diff between source commit and the merge base of the source\ncommit and the destination commit. When the `topic` query param is false,\na simple git-style diff is produced.\n\nThe two commits are interpreted as follows:\n\n* First commit: the commit containing the changes we wish to preview\n* Second commit: the commit representing the state to which we want to\n compare the first commit\n* **Note**: This is the opposite of the order used in `git diff`.\n\n#### Sample output\n```\ncurl https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/diffstat/d222fa2..e174964\n{\n \"pagelen\": 500,\n \"values\": [\n {\n \"type\": \"diffstat\",\n \"status\": \"modified\",\n \"lines_removed\": 1,\n \"lines_added\": 2,\n \"old\": {\n \"path\": \"setup.py\",\n \"escaped_path\": \"setup.py\",\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/src/e1749643d655d7c7014001a6c0f58abaf42ad850/setup.py\"\n }\n }\n },\n \"new\": {\n \"path\": \"setup.py\",\n \"escaped_path\": \"setup.py\",\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/src/d222fa235229c55dad20b190b0b571adf737d5a6/setup.py\"\n }\n }\n }\n }\n ],\n \"page\": 1,\n \"size\": 1\n}\n```", + "description": "Produces a response in JSON format with a record for every path\nmodified, including information on the type of the change and the\nnumber of lines added and removed.\n\n#### Single commit spec\n\nIf the `spec` argument to this API is a single commit, the diff is\nproduced against the first parent of the specified commit.\n\n#### Two commit spec\n\nTwo commits separated by `..` may be provided as the `spec`, e.g.,\n`3a8b42..9ff173`. When two commits are provided and the `topic` query\nparameter is true, this API produces a 2-way three dot diff.\nThis is the diff between source commit and the merge base of the source\ncommit and the destination commit. When the `topic` query param is false,\na simple git-style diff is produced.\n\nThe two commits are interpreted as follows:\n\n* First commit: the commit containing the changes we wish to preview\n* Second commit: the commit representing the state to which we want to\n compare the first commit\n* **Note**: This is the opposite of the order used in `git diff`.", "summary": "Compare two commit diff stats", "responses": { "200": { @@ -4561,6 +5489,43 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_diffstats" + }, + "examples": { + "response": { + "value": { + "pagelen": 500, + "values": [ + { + "type": "diffstat", + "status": "modified", + "lines_removed": 1, + "lines_added": 2, + "old": { + "path": "setup.py", + "escaped_path": "setup.py", + "type": "commit_file", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/src/e1749643d655d7c7014001a6c0f58abaf42ad850/setup.py" + } + } + }, + "new": { + "path": "setup.py", + "escaped_path": "setup.py", + "type": "commit_file", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/bitbucket/geordi/src/d222fa235229c55dad20b190b0b571adf737d5a6/setup.py" + } + } + } + } + ], + "page": 1, + "size": 1 + } + } } } } @@ -4586,6 +5551,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -4601,7 +5573,7 @@ { "name": "merge", "in": "query", - "description": "This parameter is deprecated and will be removed at the end\nof 2022. The 'topic' parameter should be used instead. The\n'merge' and 'topic' parameters cannot be both used at the same\ntime.\n\nIf true, the source commit is merged into the\ndestination commit, and then a diffstat from the\ndestination to the merge result is returned. If false,\na simple 'two dot' diffstat between the source and\ndestination is returned. True if omitted.", + "description": "This parameter is deprecated. The 'topic' parameter should be used\ninstead. The 'merge' and 'topic' parameters cannot be both used at\nthe same time.\n\nIf true, the source commit is merged into the\ndestination commit, and then a diffstat from the\ndestination to the merge result is returned. If false,\na simple 'two dot' diffstat between the source and\ndestination is returned. True if omitted.", "required": false, "schema": { "type": "boolean" @@ -4693,6 +5665,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -4807,6 +5786,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:repository:bitbucket"] + } ] }, "get": { @@ -4937,6 +5923,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -4963,7 +5956,7 @@ "/repositories/{workspace}/{repo_slug}/effective-default-reviewers": { "get": { "tags": ["Pullrequests"], - "description": "Returns the repository's effective default reviewers. This includes both default\nreviewers defined at the repository level as well as those inherited from its project.\n\nThese are the users that are automatically added as reviewers on every\nnew pull request that is created.\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/{workspace_slug}/{repo_slug}/effective-default-reviewers?page=1&pagelen=20\n{\n \"pagelen\": 20,\n \"values\": [\n {\n \"user\": {\n \"display_name\": \"Patrick Wolf\",\n \"uuid\": \"{9565301a-a3cf-4b5d-88f4-dd6af8078d7e}\"\n },\n \"reviewer_type\": \"project\",\n \"type\": \"default_reviewer\",\n },\n {\n \"user\": {\n \"display_name\": \"Davis Lee\",\n \"uuid\": \"{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}\"\n },\n \"reviewer_type\": \"repository\",\n \"type\": \"default_reviewer\",\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```", + "description": "Returns the repository's effective default reviewers. This includes both default\nreviewers defined at the repository level as well as those inherited from its project.\n\nThese are the users that are automatically added as reviewers on every\nnew pull request that is created.", "summary": "List effective default reviewers", "responses": { "200": { @@ -4972,6 +5965,33 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_default_reviewer_and_type" + }, + "examples": { + "response": { + "value": { + "pagelen": 20, + "values": [ + { + "user": { + "display_name": "Patrick Wolf", + "uuid": "{9565301a-a3cf-4b5d-88f4-dd6af8078d7e}" + }, + "reviewer_type": "project", + "type": "default_reviewer" + }, + { + "user": { + "display_name": "Davis Lee", + "uuid": "{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}" + }, + "reviewer_type": "repository", + "type": "default_reviewer" + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -4997,6 +6017,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -5020,7 +6047,7 @@ } ] }, - "/repositories/{workspace}/{repo_slug}/environments/": { + "/repositories/{workspace}/{repo_slug}/environments": { "get": { "tags": ["Deployments"], "description": "Find environments", @@ -5057,7 +6084,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Deployments"], @@ -5134,7 +6179,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/environments/{environment_uuid}": { @@ -5193,7 +6249,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Deployments"], @@ -5243,10 +6317,21 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/environments/{environment_uuid}/changes/": { + "/repositories/{workspace}/{repo_slug}/environments/{environment_uuid}/changes": { "post": { "tags": ["Deployments"], "description": "Update an environment", @@ -5295,13 +6380,24 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/filehistory/{commit}/{path}": { "get": { "tags": ["Source", "Repositories"], - "description": "Returns a paginated list of commits that modified the specified file.\n\nCommits are returned in reverse chronological order. This is roughly\nequivalent to the following commands:\n\n $ git log --follow --date-order \n\nBy default, Bitbucket will follow renames and the path name in the\nreturned entries reflects that. This can be turned off using the\n`?renames=false` query parameter.\n\nResults are returned in descending chronological order by default, and\nlike most endpoints you can\n[filter and sort](/cloud/bitbucket/rest/intro/#filtering) the response to\nonly provide exactly the data you want.\n\nFor example, if you wanted to find commits made before 2011-05-18\nagainst a file named `README.rst`, but you only wanted the path and\ndate, your query would look like this:\n\n```\n$ curl 'https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/filehistory/master/README.rst'\\\n '?fields=values.next,values.path,values.commit.date&q=commit.date<=2011-05-18'\n{\n \"values\": [\n {\n \"commit\": {\n \"date\": \"2011-05-17T07:32:09+00:00\"\n },\n \"path\": \"README.rst\"\n },\n {\n \"commit\": {\n \"date\": \"2011-05-16T06:33:28+00:00\"\n },\n \"path\": \"README.txt\"\n },\n {\n \"commit\": {\n \"date\": \"2011-05-16T06:15:39+00:00\"\n },\n \"path\": \"README.txt\"\n }\n ]\n}\n```\n\nIn the response you can see that the file was renamed to `README.rst`\nby the commit made on 2011-05-16, and was previously named `README.txt`.", + "description": "Returns a paginated list of commits that modified the specified file.\n\nCommits are returned in reverse chronological order. This is roughly\nequivalent to the following commands:\n\n $ git log --follow --date-order \n\nBy default, Bitbucket will follow renames and the path name in the\nreturned entries reflects that. This can be turned off using the\n`?renames=false` query parameter.\n\nResults are returned in descending chronological order by default, and\nlike most endpoints you can\n[filter and sort](/cloud/bitbucket/rest/intro/#filtering) the response to\nonly provide exactly the data you want.\n\nThe example response returns commits made before 2011-05-18 against a file\nnamed `README.rst`. The results are filtered to only return the path and\ndate. This request can be made using:\n\n```\n$ curl 'https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/filehistory/master/README.rst'\\\n '?fields=values.next,values.path,values.commit.date&q=commit.date<=2011-05-18'\n```\n\nIn the response you can see that the file was renamed to `README.rst`\nby the commit made on 2011-05-16, and was previously named `README.txt`.", "summary": "List commits that modified a file", "responses": { "200": { @@ -5310,6 +6406,32 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_files" + }, + "examples": { + "response": { + "value": { + "values": [ + { + "commit": { + "date": "2011-05-17T07:32:09+00:00" + }, + "path": "README.rst" + }, + { + "commit": { + "date": "2011-05-16T06:33:28+00:00" + }, + "path": "README.txt" + }, + { + "commit": { + "date": "2011-05-16T06:15:39+00:00" + }, + "path": "README.txt" + } + ] + } + } } } } @@ -5364,6 +6486,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -5462,6 +6591,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -5508,6 +6644,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:repository:bitbucket", + "write:repository:bitbucket" + ] + } ] }, "parameters": [ @@ -5582,7 +6728,7 @@ }, "post": { "tags": ["Repositories", "Webhooks"], - "description": "Creates a new webhook on the specified repository.\n\nExample:\n\n```\n$ curl -X POST -u credentials -H 'Content-Type: application/json'\n https://api.bitbucket.org/2.0/repositories/my-workspace/my-repo-slug/hooks\n -d '\n {\n \"description\": \"Webhook Description\",\n \"url\": \"https://example.com/\",\n \"active\": true,\n \"events\": [\n \"repo:push\",\n \"issue:created\",\n \"issue:updated\"\n ]\n }'\n```\n\nNote that this call requires the webhook scope, as well as any scope\nthat applies to the events that the webhook subscribes to. In the\nexample above that means: `webhook`, `repository` and `issue`.\n\nAlso note that the `url` must properly resolve and cannot be an\ninternal, non-routed address.", + "description": "Creates a new webhook on the specified repository.\n\nExample:\n\n```\n$ curl -X POST -u credentials -H 'Content-Type: application/json'\n https://api.bitbucket.org/2.0/repositories/my-workspace/my-repo-slug/hooks\n -d '\n {\n \"description\": \"Webhook Description\",\n \"url\": \"https://example.com/\",\n \"active\": true,\n \"secret\": \"this is a really bad secret\",\n \"events\": [\n \"repo:push\",\n \"issue:created\",\n \"issue:updated\"\n ]\n }'\n```\n\nWhen the `secret` is provided it will be used as the key to generate a HMAC\ndigest value sent in the `X-Hub-Signature` header at delivery time. Passing\na `null` or empty `secret` or not passing a `secret` will leave the webhook's\nsecret unset. Bitbucket only generates the `X-Hub-Signature` when the webhook's\nsecret is set.\n\nNote that this call requires the webhook scope, as well as any scope\nthat applies to the events that the webhook subscribes to. In the\nexample above that means: `webhook`, `repository` and `issue`.\n\nAlso note that the `url` must properly resolve and cannot be an\ninternal, non-routed address.", "summary": "Create a webhook for a repository", "responses": { "201": { @@ -5739,7 +6885,7 @@ }, "put": { "tags": ["Repositories", "Webhooks"], - "description": "Updates the specified webhook subscription.\n\nThe following properties can be mutated:\n\n* `description`\n* `url`\n* `active`\n* `events`", + "description": "Updates the specified webhook subscription.\n\nThe following properties can be mutated:\n\n* `description`\n* `url`\n* `secret`\n* `active`\n* `events`\n\nThe hook's secret is used as a key to generate the HMAC hex digest sent in the\n`X-Hub-Signature` header at delivery time. This signature is only generated\nwhen the hook has a secret.\n\nSet the hook's secret by passing the new value in the `secret` field. Passing a\n`null` value in the `secret` field will remove the secret from the hook. The\nhook's secret can be left unchanged by not passing the `secret` field in the\nrequest.", "summary": "Update a webhook for a repository", "responses": { "200": { @@ -5955,7 +7101,7 @@ "/repositories/{workspace}/{repo_slug}/issues/export": { "post": { "tags": ["Issue tracker"], - "description": "A POST request to this endpoint initiates a new background celery task that archives the repo's issues.\n\nFor example, you can run:\n\ncurl -u -X POST http://api.bitbucket.org/2.0/repositories///\nissues/export\n\nWhen the job has been accepted, it will return a 202 (Accepted) along with a unique url to this job in the\n'Location' response header. This url is the endpoint for where the user can obtain their zip files.\"", + "description": "A POST request to this endpoint initiates a new background celery task that archives the repo's issues.\n\nWhen the job has been accepted, it will return a 202 (Accepted) along with a unique url to this job in the\n'Location' response header. This url is the endpoint for where the user can obtain their zip files.\"", "summary": "Export issues", "responses": { "202": { @@ -6038,7 +7184,7 @@ "/repositories/{workspace}/{repo_slug}/issues/export/{repo_name}-issues-{task_id}.zip": { "get": { "tags": ["Issue tracker"], - "description": "This endpoint is used to poll for the progress of an issue export\njob and return the zip file after the job is complete.\nAs long as the job is running, this will return a 200 response\nwith in the response body a description of the current status.\n\nAfter the job has been scheduled, but before it starts executing, this\nendpoint's response is:\n\n{\n \"type\": \"issue_job_status\",\n \"status\": \"ACCEPTED\",\n \"phase\": \"Initializing\",\n \"total\": 0,\n \"count\": 0,\n \"pct\": 0\n}\n\n\nThen once it starts running, it becomes:\n\n{\n \"type\": \"issue_job_status\",\n \"status\": \"STARTED\",\n \"phase\": \"Attachments\",\n \"total\": 15,\n \"count\": 11,\n \"pct\": 73\n}\n\nOnce the job has successfully completed, it returns a stream of the zip file.", + "description": "This endpoint is used to poll for the progress of an issue export\njob and return the zip file after the job is complete.\nAs long as the job is running, this will return a 202 response\nwith in the response body a description of the current status.\n\nAfter the job has been scheduled, but before it starts executing, the endpoint\nreturns a 202 response with status `ACCEPTED`.\n\nOnce it starts running, it is a 202 response with status `STARTED` and progress filled.\n\nAfter it is finished, it becomes a 200 response with status `SUCCESS` or `FAILURE`.", "summary": "Check issue export status", "responses": { "202": { @@ -6047,6 +7193,18 @@ "application/json": { "schema": { "$ref": "#/components/schemas/issue_job_status" + }, + "examples": { + "response": { + "value": { + "type": "issue_job_status", + "status": "ACCEPTED", + "phase": "Initializing", + "total": 0, + "count": 0, + "pct": 0 + } + } } } } @@ -6136,7 +7294,7 @@ "/repositories/{workspace}/{repo_slug}/issues/import": { "get": { "tags": ["Issue tracker"], - "description": "When using GET, this endpoint reports the status of the current import task. Request example:\n\n```\n$ curl -u -X GET https://api.bitbucket.org/2.0/repositories///issues/import\n```\n\nAfter the job has been scheduled, but before it starts executing, this endpoint's response is:\n\n```\n< HTTP/1.1 202 Accepted\n{\n \"type\": \"issue_job_status\",\n \"status\": \"PENDING\",\n \"phase\": \"Attachments\",\n \"total\": 15,\n \"count\": 0,\n \"percent\": 0\n}\n```\n\nOnce it starts running, it is a 202 response with status STARTED and progress filled.\n\nAfter it is finished, it becomes a 200 response with status SUCCESS or FAILURE.", + "description": "When using GET, this endpoint reports the status of the current import task.\n\nAfter the job has been scheduled, but before it starts executing, the endpoint\nreturns a 202 response with status `ACCEPTED`.\n\nOnce it starts running, it is a 202 response with status `STARTED` and progress filled.\n\nAfter it is finished, it becomes a 200 response with status `SUCCESS` or `FAILURE`.", "summary": "Check issue import status", "responses": { "200": { @@ -6155,6 +7313,18 @@ "application/json": { "schema": { "$ref": "#/components/schemas/issue_job_status" + }, + "examples": { + "response": { + "value": { + "type": "issue_job_status", + "status": "ACCEPTED", + "phase": "Attachments", + "total": 15, + "count": 0, + "percent": 0 + } + } } } } @@ -6204,7 +7374,7 @@ }, "post": { "tags": ["Issue tracker"], - "description": "A POST request to this endpoint will import the zip file given by the archive parameter into the repository. All\nexisting issues will be deleted and replaced by the contents of the imported zip file.\n\nImports are done through a multipart/form-data POST. There is one valid and required form field, with the name\n\"archive,\" which needs to be a file field:\n\n```\n$ curl -u -X POST -F archive=@/path/to/file.zip https://api.bitbucket.org/2.0/repositories///issues/import\n```\n\nWhen the import job is accepted, here is example output:\n\n```\n< HTTP/1.1 202 Accepted\n\n{\n \"type\": \"issue_job_status\",\n \"status\": \"ACCEPTED\",\n \"phase\": \"Attachments\",\n \"total\": 15,\n \"count\": 0,\n \"percent\": 0\n}\n```", + "description": "A POST request to this endpoint will import the zip file given by the archive parameter into the repository. All\nexisting issues will be deleted and replaced by the contents of the imported zip file.\n\nImports are done through a multipart/form-data POST. There is one valid and required form field, with the name\n\"archive,\" which needs to be a file field:\n\n```\n$ curl -u -X POST -F archive=@/path/to/file.zip https://api.bitbucket.org/2.0/repositories///issues/import\n```", "summary": "Import issues", "responses": { "202": { @@ -6213,6 +7383,18 @@ "application/json": { "schema": { "$ref": "#/components/schemas/issue_job_status" + }, + "examples": { + "response": { + "value": { + "type": "issue_job_status", + "status": "ACCEPTED", + "phase": "Attachments", + "total": 15, + "count": 0, + "percent": 0 + } + } } } } @@ -6711,7 +7893,7 @@ "/repositories/{workspace}/{repo_slug}/issues/{issue_id}/changes": { "get": { "tags": ["Issue tracker"], - "description": "Returns the list of all changes that have been made to the specified\nissue. Changes are returned in chronological order with the oldest\nchange first.\n\nEach time an issue is edited in the UI or through the API, an immutable\nchange record is created under the `/issues/123/changes` endpoint. It\nalso has a comment associated with the change.\n\nNote that this operation is changing significantly, due to privacy changes.\nSee the [announcement](https://developer.atlassian.com/cloud/bitbucket/bitbucket-api-changes-gdpr/#changes-to-the-issue-changes-api)\nfor details.\n\n```\n$ curl -s https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/issues/1/changes - | jq .\n\n{\n \"pagelen\": 20,\n \"values\": [\n {\n \"changes\": {\n \"priority\": {\n \"new\": \"trivial\",\n \"old\": \"major\"\n },\n \"assignee\": {\n \"new\": \"\",\n \"old\": \"evzijst\"\n },\n \"assignee_account_id\": {\n \"new\": \"\",\n \"old\": \"557058:c0b72ad0-1cb5-4018-9cdc-0cde8492c443\"\n },\n \"kind\": {\n \"new\": \"enhancement\",\n \"old\": \"bug\"\n }\n },\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/issues/1/changes/2\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/evzijst/dogslow/issues/1#comment-2\"\n }\n },\n \"issue\": {\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/issues/1\"\n }\n },\n \"type\": \"issue\",\n \"id\": 1,\n \"repository\": {\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/evzijst/dogslow\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/evzijst/dogslow\"\n },\n \"avatar\": {\n \"href\": \"https://bitbucket.org/evzijst/dogslow/avatar/32/\"\n }\n },\n \"type\": \"repository\",\n \"name\": \"dogslow\",\n \"full_name\": \"evzijst/dogslow\",\n \"uuid\": \"{988b17c6-1a47-4e70-84ee-854d5f012bf6}\"\n },\n \"title\": \"Updated title\"\n },\n \"created_on\": \"2018-03-03T00:35:28.353630+00:00\",\n \"user\": {\n \"username\": \"evzijst\",\n \"nickname\": \"evzijst\",\n \"display_name\": \"evzijst\",\n \"type\": \"user\",\n \"uuid\": \"{aaa7972b-38af-4fb1-802d-6e3854c95778}\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/evzijst\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/evzijst/\"\n },\n \"avatar\": {\n \"href\": \"https://bitbucket.org/account/evzijst/avatar/32/\"\n }\n }\n },\n \"message\": {\n \"raw\": \"Removed assignee, changed kind and priority.\",\n \"markup\": \"markdown\",\n \"html\": \"

Removed assignee, changed kind and priority.

\",\n \"type\": \"rendered\"\n },\n \"type\": \"issue_change\",\n \"id\": 2\n }\n ],\n \"page\": 1\n}\n```\n\nChanges support [filtering and sorting](/cloud/bitbucket/rest/intro/#filtering) that\ncan be used to search for specific changes. For instance, to see\nwhen an issue transitioned to \"resolved\":\n\n```\n$ curl -s https://api.bitbucket.org/2.0/repositories/site/master/issues/1/changes \\\n -G --data-urlencode='q=changes.state.new = \"resolved\"'\n```\n\nThis resource is only available on repositories that have the issue\ntracker enabled.\n\nN.B.\n\nThe `changes.assignee` and `changes.assignee_account_id` fields are not\na `user` object. Instead, they contain the raw `username` and\n`account_id` of the user. This is to protect the integrity of the audit\nlog even after a user account gets deleted.\n\nThe `changes.assignee` field is deprecated will disappear in the\nfuture. Use `changes.assignee_account_id` instead.", + "description": "Returns the list of all changes that have been made to the specified\nissue. Changes are returned in chronological order with the oldest\nchange first.\n\nEach time an issue is edited in the UI or through the API, an immutable\nchange record is created under the `/issues/123/changes` endpoint. It\nalso has a comment associated with the change.\n\nNote that this operation is changing significantly, due to privacy changes.\nSee the [announcement](https://developer.atlassian.com/cloud/bitbucket/bitbucket-api-changes-gdpr/#changes-to-the-issue-changes-api)\nfor details.\n\nChanges support [filtering and sorting](/cloud/bitbucket/rest/intro/#filtering) that\ncan be used to search for specific changes. For instance, to see\nwhen an issue transitioned to \"resolved\":\n\n```\n$ curl -s https://api.bitbucket.org/2.0/repositories/site/master/issues/1/changes \\\n -G --data-urlencode='q=changes.state.new = \"resolved\"'\n```\n\nThis resource is only available on repositories that have the issue\ntracker enabled.\n\nN.B.\n\nThe `changes.assignee` and `changes.assignee_account_id` fields are not\na `user` object. Instead, they contain the raw `username` and\n`account_id` of the user. This is to protect the integrity of the audit\nlog even after a user account gets deleted.\n\nThe `changes.assignee` field is deprecated will disappear in the\nfuture. Use `changes.assignee_account_id` instead.", "summary": "List changes on an issue", "responses": { "200": { @@ -6720,6 +7902,98 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_log_entries" + }, + "examples": { + "response": { + "value": { + "pagelen": 20, + "values": [ + { + "changes": { + "priority": { + "new": "trivial", + "old": "major" + }, + "assignee": { + "new": "", + "old": "evzijst" + }, + "assignee_account_id": { + "new": "", + "old": "557058:c0b72ad0-1cb5-4018-9cdc-0cde8492c443" + }, + "kind": { + "new": "enhancement", + "old": "bug" + } + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/issues/1/changes/2" + }, + "html": { + "href": "https://bitbucket.org/evzijst/dogslow/issues/1#comment-2" + } + }, + "issue": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/evzijst/dogslow/issues/1" + } + }, + "type": "issue", + "id": 1, + "repository": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/evzijst/dogslow" + }, + "html": { + "href": "https://bitbucket.org/evzijst/dogslow" + }, + "avatar": { + "href": "https://bitbucket.org/evzijst/dogslow/avatar/32/" + } + }, + "type": "repository", + "name": "dogslow", + "full_name": "evzijst/dogslow", + "uuid": "{988b17c6-1a47-4e70-84ee-854d5f012bf6}" + }, + "title": "Updated title" + }, + "created_on": "2018-03-03T00:35:28.353630+00:00", + "user": { + "username": "evzijst", + "nickname": "evzijst", + "display_name": "evzijst", + "type": "user", + "uuid": "{aaa7972b-38af-4fb1-802d-6e3854c95778}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/evzijst" + }, + "html": { + "href": "https://bitbucket.org/evzijst/" + }, + "avatar": { + "href": "https://bitbucket.org/account/evzijst/avatar/32/" + } + } + }, + "message": { + "raw": "Removed assignee, changed kind and priority.", + "markup": "markdown", + "html": "

Removed assignee, changed kind and priority.

", + "type": "rendered" + }, + "type": "issue_change", + "id": 2 + } + ], + "page": 1 + } + } } } } @@ -7597,6 +8871,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -7795,6 +9076,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "put": { @@ -7826,6 +9114,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:repository:bitbucket"] + } ] }, "parameters": [ @@ -7879,6 +9174,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -7914,7 +9216,7 @@ "/repositories/{workspace}/{repo_slug}/permissions-config/groups": { "get": { "tags": ["Repositories"], - "description": "Returns a paginated list of explicit group permissions for the given repository.\nThis endpoint does not support BBQL features.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups\n\nHTTP/1.1 200\nLocation: https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"type\": \"repository_group_permission\",\n \"group\": {\n \"type\": \"group\",\n \"name\": \"Administrators\",\n \"slug\": \"administrators\"\n },\n \"permission\": \"admin\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/\n geordi/permissions-config/groups/administrators\"\n }\n }\n },\n {\n \"type\": \"repository_group_permission\",\n \"group\": {\n \"type\": \"group\",\n \"name\": \"Developers\",\n \"slug\": \"developers\"\n },\n \"permission\": \"read\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/\n geordi/permissions-config/groups/developers\"\n }\n }\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```", + "description": "Returns a paginated list of explicit group permissions for the given repository.\nThis endpoint does not support BBQL features.", "summary": "List explicit group permissions for a repository", "responses": { "200": { @@ -7923,6 +9225,45 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_repository_group_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "repository_group_permission", + "group": { + "type": "group", + "name": "Administrators", + "slug": "administrators" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/administrators" + } + } + }, + { + "type": "repository_group_permission", + "group": { + "type": "group", + "name": "Developers", + "slug": "developers" + }, + "permission": "read", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers" + } + } + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -7968,6 +9309,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -7994,7 +9342,7 @@ "/repositories/{workspace}/{repo_slug}/permissions-config/groups/{group_slug}": { "delete": { "tags": ["Repositories"], - "description": "Deletes the repository group permission between the requested repository and group, if one exists.\n\nOnly users with admin permission for the repository may access this resource.\n\nExample:\n\n$ curl -X DELETE https://api.bitbucket.org/2.0/repositories/atlassian_tutorial\n/geordi/permissions-config/groups/developers\n\n\nHTTP/1.1 204", + "description": "Deletes the repository group permission between the requested repository and group, if one exists.\n\nOnly users with admin permission for the repository may access this resource.", "summary": "Delete an explicit group permission for a repository", "responses": { "204": { @@ -8021,7 +9369,7 @@ } }, "404": { - "description": "The workspace does not exist, the repository does not exist,or the group does not exist.", + "description": "The workspace does not exist, the repository does not exist, or the group does not exist.", "content": { "application/json": { "schema": { @@ -8045,7 +9393,7 @@ }, "get": { "tags": ["Repositories"], - "description": "Returns the group permission for a given group slug and repository\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n* `none`\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\n\nHTTP/1.1 200\nLocation:\nhttps://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\n\n{\n \"type\": \"repository_group_permission\",\n \"group\": {\n \"type\": \"group\",\n \"name\": \"Developers\",\n \"slug\": \"developers\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"read\",\n \"links\": {\n \"self\": {\n \"href\":\n \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\"\n }\n }\n}\n```", + "description": "Returns the group permission for a given group slug and repository\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n* `none`", "summary": "Get an explicit group permission for a repository", "responses": { "200": { @@ -8054,6 +9402,25 @@ "application/json": { "schema": { "$ref": "#/components/schemas/repository_group_permission" + }, + "examples": { + "response": { + "value": { + "type": "repository_group_permission", + "group": { + "type": "group", + "name": "Developers", + "slug": "developers", + "full_slug": "atlassian_tutorial:developers" + }, + "permission": "read", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers" + } + } + } + } } } } @@ -8099,11 +9466,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "put": { "tags": ["Repositories"], - "description": "Updates the group permission if it exists.\n\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method supported for this endpoint is via app passwords.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nExample:\n```\n$ curl -X PUT -H \"Content-Type: application/json\"\nhttps://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\n-d\n'{\n \"permission\": \"write\"\n}'\n\nHTTP/1.1 200\nLocation:\nhttps://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\n\n{\n \"type\": \"repository_group_permission\",\n \"group\": {\n \"type\": \"group\",\n \"name\": \"Developers\",\n \"slug\": \"developers\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"write\",\n \"links\": {\n \"self\": {\n \"href\":\n \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers\"\n }\n }\n}\n```", + "description": "Updates the group permission, or grants a new permission if one does not already exist.\n\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method supported for this endpoint is via app passwords.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`", "summary": "Update an explicit group permission for a repository", "responses": { "200": { @@ -8112,6 +9486,25 @@ "application/json": { "schema": { "$ref": "#/components/schemas/repository_group_permission" + }, + "examples": { + "response": { + "value": { + "type": "repository_group_permission", + "group": { + "type": "group", + "name": "Developers", + "slug": "developers", + "full_slug": "atlassian_tutorial:developers" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/groups/developers" + } + } + } + } } } } @@ -8157,7 +9550,7 @@ } }, "404": { - "description": "The workspace does not exist, the repository does not exist,or the group does not exist.", + "description": "The workspace does not exist, the repository does not exist, or the group does not exist.", "content": { "application/json": { "schema": { @@ -8167,6 +9560,9 @@ } } }, + "requestBody": { + "$ref": "#/components/requestBodies/bitbucket.apps.permissions.serializers.RepoPermissionUpdateSchema" + }, "security": [ { "oauth2": ["repository:admin"] @@ -8212,7 +9608,7 @@ "/repositories/{workspace}/{repo_slug}/permissions-config/users": { "get": { "tags": ["Repositories"], - "description": "Returns a paginated list of explicit user permissions for the given repository.\nThis endpoint does not support BBQL features.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/users\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"type\": \"repository_user_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Colin Cameron\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\",\n \"account_id\": \"557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n },\n \"permission\": \"admin\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n }\n }\n },\n {\n \"type\": \"repository_user_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Sean Conaty\",\n \"uuid\": \"{504c3b62-8120-4f0c-a7bc-87800b9d6f70}\",\n \"account_id\": \"557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c\"\n },\n \"permission\": \"write\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0//repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c\"\n }\n }\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```", + "description": "Returns a paginated list of explicit user permissions for the given repository.\nThis endpoint does not support BBQL features.", "summary": "List explicit user permissions for a repository", "responses": { "200": { @@ -8221,6 +9617,47 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_repository_user_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "repository_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + }, + { + "type": "repository_user_permission", + "user": { + "type": "user", + "display_name": "Sean Conaty", + "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0//repositories/atlassian_tutorial/geordi/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c" + } + } + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -8266,6 +9703,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -8292,7 +9736,7 @@ "/repositories/{workspace}/{repo_slug}/permissions-config/users/{selected_user_id}": { "delete": { "tags": ["Repositories"], - "description": "Deletes the repository user permission between the requested repository and user, if one exists.\n\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method for this endpoint is via app passwords.\n\n```\n$ curl -X DELETE https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\npermissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\n\n\nHTTP/1.1 204\n```", + "description": "Deletes the repository user permission between the requested repository and user, if one exists.\n\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method for this endpoint is via app passwords.", "summary": "Delete an explicit user permission for a repository", "responses": { "204": { @@ -8343,7 +9787,7 @@ }, "get": { "tags": ["Repositories"], - "description": "Returns the explicit user permission for a given user and repository.\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n* `none`\n\nExample:\n\n```\n$ curl 'https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a'\n\nHTTP/1.1 200\nLocation: 'https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a'\n\n{\n \"type\": \"repository_user_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Colin Cameron\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\",\n \"account_id\": \"557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"admin\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n }\n }\n}\n```", + "description": "Returns the explicit user permission for a given user and repository.\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n* `none`", "summary": "Get an explicit user permission for a repository", "responses": { "200": { @@ -8352,6 +9796,26 @@ "application/json": { "schema": { "$ref": "#/components/schemas/repository_user_permission" + }, + "examples": { + "response": { + "value": { + "type": "repository_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a", + "nickname": "Colin Cameron" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + } + } } } } @@ -8397,11 +9861,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "put": { "tags": ["Repositories"], - "description": "Updates the explicit user permission for a given user and repository. The selected user must be a member of\nthe workspace, and cannot be the workspace owner.\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method for this endpoint is via app passwords.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nExample:\n\n```\n$ curl -X PUT -H \"Content-Type: application/json\" 'https://api.bitbucket.org/2.0/repositories/\natlassian_tutorial/geordi/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a'\n-d '{\n \"permission\": \"write\"\n}'\n\nHTTP/1.1 200\nLocation: 'https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\npermissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a'\n\n\n{\n \"type\": \"repository_user_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Colin Cameron\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\",\n \"account_id\": \"557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"write\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/\n permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a\"\n }\n }\n}\n```", + "description": "Updates the explicit user permission for a given user and repository. The selected user must be a member of\nthe workspace, and cannot be the workspace owner.\nOnly users with admin permission for the repository may access this resource.\n\nThe only authentication method for this endpoint is via app passwords.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`", "summary": "Update an explicit user permission for a repository", "responses": { "200": { @@ -8410,6 +9881,26 @@ "application/json": { "schema": { "$ref": "#/components/schemas/repository_user_permission" + }, + "examples": { + "response": { + "value": { + "type": "repository_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a", + "nickname": "Colin Cameron" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian_tutorial/geordi/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + } + } } } } @@ -8465,6 +9956,9 @@ } } }, + "requestBody": { + "$ref": "#/components/requestBodies/bitbucket.apps.permissions.serializers.RepoPermissionUpdateSchema" + }, "security": [ { "oauth2": ["repository:admin"] @@ -8507,168 +10001,7 @@ } ] }, - "/repositories/{workspace}/{repo_slug}/pipelines-config/caches/": { - "get": { - "tags": ["Pipelines"], - "summary": "List caches", - "description": "Retrieve the repository pipelines caches.", - "operationId": "getRepositoryPipelineCaches", - "parameters": [ - { - "name": "workspace", - "description": "The account.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "repo_slug", - "description": "The repository.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The list of caches for the given repository.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/paginated_pipeline_caches" - } - } - } - }, - "404": { - "description": "The account or repository was not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error" - } - } - } - } - } - } - }, - "/repositories/{workspace}/{repo_slug}/pipelines-config/caches/{cache_uuid}": { - "delete": { - "tags": ["Pipelines"], - "summary": "Delete a cache", - "description": "Delete a repository cache.", - "operationId": "deleteRepositoryPipelineCache", - "parameters": [ - { - "name": "workspace", - "description": "The account.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "repo_slug", - "description": "The repository.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "cache_uuid", - "description": "The UUID of the cache to delete.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "The cache was deleted." - }, - "404": { - "description": "The workspace, repository or cache_uuid with given UUID was not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error" - } - } - } - } - } - } - }, - "/repositories/{workspace}/{repo_slug}/pipelines-config/caches/{cache_uuid}/content-uri": { - "get": { - "tags": ["Pipelines"], - "summary": "Get cache content URI", - "description": "Retrieve the URI of the content of the specified cache.", - "operationId": "getRepositoryPipelineCacheContentURI", - "parameters": [ - { - "name": "workspace", - "description": "The account.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "repo_slug", - "description": "The repository.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - }, - { - "name": "cache_uuid", - "description": "The UUID of the cache.", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The cache content uri.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/pipeline_cache_content_uri" - } - } - } - }, - "404": { - "description": "The workspace, repository or cache_uuid with given UUID was not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/error" - } - } - } - } - } - } - }, - "/repositories/{workspace}/{repo_slug}/pipelines/": { + "/repositories/{workspace}/{repo_slug}/pipelines": { "get": { "tags": ["Pipelines"], "summary": "List pipelines", @@ -8705,12 +10038,30 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], "summary": "Run a pipeline", - "description": "Endpoint to create and initiate a pipeline.\nThere are a couple of different options to initiate a pipeline, where the payload of the request will determine which type of pipeline will be instantiated.\n# Trigger a Pipeline for a branch\nOne way to trigger pipelines is by specifying the branch for which you want to trigger a pipeline.\nThe specified branch will be used to determine which pipeline definition from the `bitbucket-pipelines.yml` file will be applied to initiate the pipeline. The pipeline will then do a clone of the repository and checkout the latest revision of the specified branch.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"ref_type\": \"branch\",\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\"\n }\n }'\n```\n# Trigger a Pipeline for a commit on a branch or tag\nYou can initiate a pipeline for a specific commit and in the context of a specified reference (e.g. a branch, tag or bookmark).\nThe specified reference will be used to determine which pipeline definition from the bitbucket-pipelines.yml file will be applied to initiate the pipeline. The pipeline will clone the repository and then do a checkout the specified reference.\n\nThe following reference types are supported:\n\n* `branch`\n* `named_branch`\n* `bookmark`\n * `tag`\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"type\": \"commit\",\n \"hash\": \"ce5b7431602f7cbba007062eeb55225c6e18e956\"\n },\n \"ref_type\": \"branch\",\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\"\n }\n }'\n```\n# Trigger a specific pipeline definition for a commit\nYou can trigger a specific pipeline that is defined in your `bitbucket-pipelines.yml` file for a specific commit.\nIn addition to the commit revision, you specify the type and pattern of the selector that identifies the pipeline definition. The resulting pipeline will then clone the repository and checkout the specified revision.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"hash\":\"a3c4e02c9a3755eccdc3764e6ea13facdf30f923\",\n \"type\":\"commit\"\n },\n \"selector\": {\n \"type\":\"custom\",\n \"pattern\":\"Deploy to production\"\n },\n \"type\":\"pipeline_commit_target\"\n }\n }'\n```\n# Trigger a specific pipeline definition for a commit on a branch or tag\nYou can trigger a specific pipeline that is defined in your `bitbucket-pipelines.yml` file for a specific commit in the context of a specified reference.\nIn addition to the commit revision, you specify the type and pattern of the selector that identifies the pipeline definition, as well as the reference information. The resulting pipeline will then clone the repository a checkout the specified reference.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"hash\":\"a3c4e02c9a3755eccdc3764e6ea13facdf30f923\",\n \"type\":\"commit\"\n },\n \"selector\": {\n \"type\": \"custom\",\n \"pattern\": \"Deploy to production\"\n },\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\",\n \"ref_type\": \"branch\"\n }\n }'\n```\n\n\n# Trigger a custom pipeline with variables\nIn addition to triggering a custom pipeline that is defined in your `bitbucket-pipelines.yml` file as shown in the examples above, you can specify variables that will be available for your build. In the request, provide a list of variables, specifying the following for each variable: key, value, and whether it should be secured or not (this field is optional and defaults to not secured).\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pipelines/ \\\n -d '\n {\n \"target\": {\n \"type\": \"pipeline_ref_target\",\n \"ref_type\": \"branch\",\n \"ref_name\": \"master\",\n \"selector\": {\n \"type\": \"custom\",\n \"pattern\": \"Deploy to production\"\n }\n },\n \"variables\": [\n {\n \"key\": \"var1key\",\n \"value\": \"var1value\",\n \"secured\": true\n },\n {\n \"key\": \"var2key\",\n \"value\": \"var2value\"\n }\n ]\n }'\n```\n\n# Trigger a pull request pipeline\n\nYou can also initiate a pipeline for a specific pull request.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pipelines/ \\\n -d '\n {\n\t\"target\": {\n \"type\": \"pipeline_pullrequest_target\",\n\t \"source\": \"pull-request-branch\",\n \"destination\": \"master\",\n \"destination_commit\": {\n \t \"hash\" : \"9f848b7\"\n },\n \"commit\": {\n \t\"hash\" : \"1a372fc\"\n },\n \"pullrequest\" : {\n \t\"id\" : \"3\"\n },\n\t \"selector\": {\n \"type\": \"pull-requests\",\n \"pattern\": \"**\"\n }\n }\n }'\n```\n", + "description": "Endpoint to create and initiate a pipeline.\nThere are a couple of different options to initiate a pipeline, where the payload of the request will determine which type of pipeline will be instantiated.\n# Trigger a Pipeline for a branch\nOne way to trigger pipelines is by specifying the branch for which you want to trigger a pipeline.\nThe specified branch will be used to determine which pipeline definition from the `bitbucket-pipelines.yml` file will be applied to initiate the pipeline. The pipeline will then do a clone of the repository and checkout the latest revision of the specified branch.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"ref_type\": \"branch\",\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\"\n }\n }'\n```\n# Trigger a Pipeline for a commit on a branch or tag\nYou can initiate a pipeline for a specific commit and in the context of a specified reference (e.g. a branch, tag or bookmark).\nThe specified reference will be used to determine which pipeline definition from the bitbucket-pipelines.yml file will be applied to initiate the pipeline. The pipeline will clone the repository and then do a checkout the specified reference.\n\nThe following reference types are supported:\n\n* `branch`\n* `named_branch`\n* `bookmark`\n * `tag`\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"type\": \"commit\",\n \"hash\": \"ce5b7431602f7cbba007062eeb55225c6e18e956\"\n },\n \"ref_type\": \"branch\",\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\"\n }\n }'\n```\n# Trigger a specific pipeline definition for a commit\nYou can trigger a specific pipeline that is defined in your `bitbucket-pipelines.yml` file for a specific commit.\nIn addition to the commit revision, you specify the type and pattern of the selector that identifies the pipeline definition. The resulting pipeline will then clone the repository and checkout the specified revision.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"hash\":\"a3c4e02c9a3755eccdc3764e6ea13facdf30f923\",\n \"type\":\"commit\"\n },\n \"selector\": {\n \"type\":\"custom\",\n \"pattern\":\"Deploy to production\"\n },\n \"type\":\"pipeline_commit_target\"\n }\n }'\n```\n# Trigger a specific pipeline definition for a commit on a branch or tag\nYou can trigger a specific pipeline that is defined in your `bitbucket-pipelines.yml` file for a specific commit in the context of a specified reference.\nIn addition to the commit revision, you specify the type and pattern of the selector that identifies the pipeline definition, as well as the reference information. The resulting pipeline will then clone the repository a checkout the specified reference.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/jeroendr/meat-demo2/pipelines/ \\\n -d '\n {\n \"target\": {\n \"commit\": {\n \"hash\":\"a3c4e02c9a3755eccdc3764e6ea13facdf30f923\",\n \"type\":\"commit\"\n },\n \"selector\": {\n \"type\": \"custom\",\n \"pattern\": \"Deploy to production\"\n },\n \"type\": \"pipeline_ref_target\",\n \"ref_name\": \"master\",\n \"ref_type\": \"branch\"\n }\n }'\n```\n\n\n# Trigger a custom pipeline with variables\nIn addition to triggering a custom pipeline that is defined in your `bitbucket-pipelines.yml` file as shown in the examples above, you can specify variables that will be available for your build. In the request, provide a list of variables, specifying the following for each variable: key, value, and whether it should be secured or not (this field is optional and defaults to not secured).\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pipelines/ \\\n -d '\n {\n \"target\": {\n \"type\": \"pipeline_ref_target\",\n \"ref_type\": \"branch\",\n \"ref_name\": \"master\",\n \"selector\": {\n \"type\": \"custom\",\n \"pattern\": \"Deploy to production\"\n }\n },\n \"variables\": [\n {\n \"key\": \"var1key\",\n \"value\": \"var1value\",\n \"secured\": true\n },\n {\n \"key\": \"var2key\",\n \"value\": \"var2value\"\n }\n ]\n }'\n```\n\n# Trigger a pull request pipeline\n\nYou can also initiate a pipeline for a specific pull request.\n\n### Example\n\n```\n$ curl -X POST -is -u username:password \\\n -H 'Content-Type: application/json' \\\n https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pipelines/ \\\n -d '\n {\n \"target\": {\n \"type\": \"pipeline_pullrequest_target\",\n \"source\": \"pull-request-branch\",\n \"destination\": \"master\",\n \"destination_commit\": {\n \"hash\": \"9f848b7\"\n },\n \"commit\": {\n \"hash\": \"1a372fc\"\n },\n \"pullrequest\": {\n \"id\": \"3\"\n },\n \"selector\": {\n \"type\": \"pull-requests\",\n \"pattern\": \"**\"\n }\n }\n }'\n```\n", "operationId": "createPipelineForRepository", "parameters": [ { @@ -8782,7 +10133,308 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket", "write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + } + }, + "/repositories/{workspace}/{repo_slug}/pipelines-config/caches": { + "get": { + "tags": ["Pipelines"], + "summary": "List caches", + "description": "Retrieve the repository pipelines caches.", + "operationId": "getRepositoryPipelineCaches", + "parameters": [ + { + "name": "workspace", + "description": "The account.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "repo_slug", + "description": "The repository.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The list of caches for the given repository.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/paginated_pipeline_caches" + } + } + } + }, + "404": { + "description": "The account or repository was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + }, + "delete": { + "tags": ["Pipelines"], + "summary": "Delete caches", + "description": "Delete repository cache versions by name.", + "operationId": "deleteRepositoryPipelineCaches", + "parameters": [ + { + "name": "workspace", + "description": "The account.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "repo_slug", + "description": "The repository.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "name", + "description": "The cache name.", + "required": true, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "The caches were deleted." + }, + "404": { + "description": "The workspace, repository or cache name was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + } + }, + "/repositories/{workspace}/{repo_slug}/pipelines-config/caches/{cache_uuid}": { + "delete": { + "tags": ["Pipelines"], + "summary": "Delete a cache", + "description": "Delete a repository cache.", + "operationId": "deleteRepositoryPipelineCache", + "parameters": [ + { + "name": "workspace", + "description": "The account.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "repo_slug", + "description": "The repository.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "cache_uuid", + "description": "The UUID of the cache to delete.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "The cache was deleted." + }, + "404": { + "description": "The workspace, repository or cache_uuid with given UUID was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + } + }, + "/repositories/{workspace}/{repo_slug}/pipelines-config/caches/{cache_uuid}/content-uri": { + "get": { + "tags": ["Pipelines"], + "summary": "Get cache content URI", + "description": "Retrieve the URI of the content of the specified cache.", + "operationId": "getRepositoryPipelineCacheContentURI", + "parameters": [ + { + "name": "workspace", + "description": "The account.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "repo_slug", + "description": "The repository.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "cache_uuid", + "description": "The UUID of the cache.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The cache content uri.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pipeline_cache_content_uri" + } + } + } + }, + "404": { + "description": "The workspace, repository or cache_uuid with given UUID was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}": { @@ -8841,10 +10493,28 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/": { + "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps": { "get": { "tags": ["Pipelines"], "summary": "List steps for a pipeline", @@ -8890,7 +10560,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}": { @@ -8958,7 +10646,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}/log": { @@ -9039,7 +10745,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}/logs/{log_uuid}": { @@ -9109,7 +10833,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}/test_reports": { @@ -9169,7 +10911,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}/test_reports/test_cases": { @@ -9229,7 +10989,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/steps/{step_uuid}/test_reports/test_cases/{test_case_uuid}/test_case_reasons": { @@ -9298,7 +11076,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines/{pipeline_uuid}/stopPipeline": { @@ -9360,7 +11156,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config": { @@ -9400,7 +11214,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -9449,7 +11274,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config/build_number": { @@ -9520,10 +11356,21 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/pipelines_config/schedules/": { + "/repositories/{workspace}/{repo_slug}/pipelines_config/schedules": { "post": { "tags": ["Pipelines"], "summary": "Create a schedule", @@ -9553,7 +11400,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/pipeline_schedule" + "$ref": "#/components/schemas/pipeline_schedule_post_request_body" } } }, @@ -9601,7 +11448,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket", "write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "tags": ["Pipelines"], @@ -9649,7 +11514,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config/schedules/{schedule_uuid}": { @@ -9708,7 +11591,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -9748,7 +11649,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/pipeline_schedule" + "$ref": "#/components/schemas/pipeline_schedule_put_request_body" } } }, @@ -9776,7 +11677,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket", "write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -9826,10 +11745,28 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:write"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/pipelines_config/schedules/{schedule_uuid}/executions/": { + "/repositories/{workspace}/{repo_slug}/pipelines_config/schedules/{schedule_uuid}/executions": { "get": { "tags": ["Pipelines"], "summary": "List executions of a schedule", @@ -9885,7 +11822,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config/ssh/key_pair": { @@ -9935,7 +11890,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -9994,7 +11967,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -10035,10 +12019,28 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/pipelines_config/ssh/known_hosts/": { + "/repositories/{workspace}/{repo_slug}/pipelines_config/ssh/known_hosts": { "get": { "tags": ["Pipelines"], "summary": "List known hosts", @@ -10075,7 +12077,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -10152,7 +12172,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config/ssh/known_hosts/{known_host_uuid}": { @@ -10211,7 +12242,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -10279,7 +12328,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -10329,10 +12389,28 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, - "/repositories/{workspace}/{repo_slug}/pipelines_config/variables/": { + "/repositories/{workspace}/{repo_slug}/pipelines_config/variables": { "get": { "tags": ["Pipelines"], "summary": "List variables for a repository", @@ -10369,7 +12447,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -10446,7 +12542,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pipelines_config/variables/{variable_uuid}": { @@ -10505,7 +12612,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -10573,7 +12698,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -10623,7 +12759,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/properties/{app_key}/{property_name}": { @@ -10677,7 +12831,18 @@ "requestBody": { "$ref": "#/components/requestBodies/application_property" }, - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "responses": { @@ -10726,7 +12891,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "responses": { @@ -10782,7 +12958,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/pullrequests": { @@ -10836,6 +13023,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "post": { @@ -10902,6 +13096,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -10958,6 +13162,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11021,6 +13232,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "put": { @@ -11089,6 +13307,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -11154,6 +13382,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11195,6 +13430,16 @@ "204": { "description": "An empty response indicating the authenticated user's approval has been withdrawn." }, + "400": { + "description": "Pull request cannot be unapproved because the pull request has already been merged.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, "401": { "description": "The request wasn't authenticated.", "content": { @@ -11226,6 +13471,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pullrequest:bitbucket"] + } ] }, "post": { @@ -11274,6 +13526,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -11353,6 +13615,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "post": { @@ -11420,6 +13689,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11492,6 +13768,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "get": { @@ -11540,6 +13823,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "put": { @@ -11599,6 +13889,166 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "parameters": [ + { + "name": "comment_id", + "in": "path", + "description": "The id of the comment.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "pull_request_id", + "in": "path", + "description": "The id of the pull request.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repo_slug", + "in": "path", + "description": "This can either be the repository slug or the UUID of the repository,\nsurrounded by curly-braces, for example: `{repository UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/repositories/{workspace}/{repo_slug}/pullrequests/{pull_request_id}/comments/{comment_id}/resolve": { + "delete": { + "tags": ["Pullrequests"], + "description": "", + "summary": "Reopen a comment thread", + "responses": { + "204": { + "description": "The comment is reopened." + }, + "403": { + "description": "If the authenticated user does not have access to the pull request,\nor if the provided comment is not a top-level comment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the comment does not exist, or if the comment has not been resolved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "post": { + "tags": ["Pullrequests"], + "description": "", + "summary": "Resolve a comment thread", + "responses": { + "200": { + "description": "The comment resolution details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/comment_resolution" + } + } + } + }, + "403": { + "description": "If the authenticated user does not have access to the pull request,\nif the provided comment is not a top-level comment,\nor if the comment is not on the diff.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the comment does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "409": { + "description": "If the comment has already been resolved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11680,6 +14130,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11749,6 +14206,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -11801,6 +14268,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11853,6 +14327,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -11945,6 +14426,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -12003,6 +14494,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -12064,6 +14562,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -12105,6 +14610,16 @@ "204": { "description": "An empty response indicating the authenticated user's request for change has been withdrawn." }, + "400": { + "description": "Pull request requested changes cannot be removed because the pull request has already been merged.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, "401": { "description": "The request wasn't authenticated.", "content": { @@ -12136,6 +14651,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:pullrequest:bitbucket"] + } ] }, "post": { @@ -12153,6 +14675,16 @@ } } }, + "400": { + "description": "Pull request changes cannot be requested because the pull request has already been merged.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, "401": { "description": "The request wasn't authenticated.", "content": { @@ -12184,6 +14716,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "read:pullrequest:bitbucket", + "write:pullrequest:bitbucket" + ] + } ] }, "parameters": [ @@ -12276,6 +14818,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -12308,6 +14857,434 @@ } ] }, + "/repositories/{workspace}/{repo_slug}/pullrequests/{pull_request_id}/tasks": { + "get": { + "tags": ["Pullrequests"], + "description": "Returns a paginated list of the pull request's tasks.\n\nThis endpoint supports filtering and sorting of the results by the 'task' field.\nSee [filtering and sorting](/cloud/bitbucket/rest/intro/#filtering) for more details.", + "summary": "List tasks on a pull request", + "responses": { + "200": { + "description": "A paginated list of pull request tasks for the given pull request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/paginated_tasks" + } + } + } + }, + "400": { + "description": "If the user provides an invalid filter, sort, or fields query parameter.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "If the authenticated user does not have access to the pull request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the pull request does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "parameters": [ + { + "name": "q", + "in": "query", + "description": "\nQuery string to narrow down the response. See\n[filtering and sorting](/cloud/bitbucket/rest/intro/#filtering) for details.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sort", + "in": "query", + "description": "\nField by which the results should be sorted as per\n[filtering and sorting](/cloud/bitbucket/rest/intro/#filtering).\nDefaults to `created_on`.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pagelen", + "in": "query", + "description": "\nCurrent number of objects on the existing page.\nThe default value is 10 with 100 being the maximum allowed value.\nIndividual APIs may enforce different values.\n", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "post": { + "tags": ["Pullrequests"], + "description": "Creates a new pull request task.\n\nReturns the newly created pull request task.\n\nTasks can optionally be created in relation to a comment specified by the comment's ID which\nwill cause the task to appear below the comment on a pull request when viewed in Bitbucket.", + "summary": "Create a task on a pull request", + "responses": { + "201": { + "description": "The newly created task.", + "headers": { + "Location": { + "description": "The URL of the new task", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/A_pullrequest_comment_task" + } + } + } + }, + "400": { + "description": "There is a missing required field in the request or the task content is blank.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "If the authenticated user does not have access to the pull request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the pull request does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/A_pullrequest_task_create" + } + } + }, + "description": "The contents of the task", + "required": true + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "parameters": [ + { + "name": "pull_request_id", + "in": "path", + "description": "The id of the pull request.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repo_slug", + "in": "path", + "description": "This can either be the repository slug or the UUID of the repository,\nsurrounded by curly-braces, for example: `{repository UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/repositories/{workspace}/{repo_slug}/pullrequests/{pull_request_id}/tasks/{task_id}": { + "delete": { + "tags": ["Pullrequests"], + "description": "Deletes a specific pull request task.", + "summary": "Delete a task on a pull request", + "responses": { + "204": { + "description": "Successful deletion." + }, + "403": { + "description": "If the authenticated user does not have access to delete the task.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the task does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "get": { + "tags": ["Pullrequests"], + "description": "Returns a specific pull request task.", + "summary": "Get a task on a pull request", + "responses": { + "200": { + "description": "The task.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/A_pullrequest_comment_task" + } + } + } + }, + "403": { + "description": "If the authenticated user does not have access to the pull request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the task does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "put": { + "tags": ["Pullrequests"], + "description": "Updates a specific pull request task.", + "summary": "Update a task on a pull request", + "responses": { + "200": { + "description": "The updated task.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/A_pullrequest_comment_task" + } + } + } + }, + "400": { + "description": "There is a missing required field in the request or the task content is blank.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "If the authenticated user does not have access to the pull request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "If the task does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/A_pullrequest_task_update" + } + } + }, + "description": "The updated state and content of the task.", + "required": true + }, + "security": [ + { + "oauth2": ["pullrequest"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } + ] + }, + "parameters": [ + { + "name": "pull_request_id", + "in": "path", + "description": "The id of the pull request.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repo_slug", + "in": "path", + "description": "This can either be the repository slug or the UUID of the repository,\nsurrounded by curly-braces, for example: `{repository UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "task_id", + "in": "path", + "description": "The ID of the task.", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, "/repositories/{workspace}/{repo_slug}/pullrequests/{pullrequest_id}/properties/{app_key}/{property_name}": { "put": { "responses": { @@ -12368,7 +15345,18 @@ "requestBody": { "$ref": "#/components/requestBodies/application_property" }, - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "responses": { @@ -12426,7 +15414,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "responses": { @@ -12491,7 +15490,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/repositories/{workspace}/{repo_slug}/refs": { @@ -12559,6 +15569,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -12585,7 +15602,7 @@ "/repositories/{workspace}/{repo_slug}/refs/branches": { "get": { "tags": ["Refs"], - "description": "Returns a list of all open branches within the specified repository.\n Results will be in the order the source control manager returns them.\n\n ```\n $ curl -s https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches?pagelen=1 | jq .\n {\n \"pagelen\": 1,\n \"size\": 187,\n \"values\": [\n {\n \"name\": \"issue-9.3/AUI-5343-assistive-class\",\n \"links\": {\n \"commits\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commits/issue-9.3/AUI-5343-assistive-class\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches/issue-9.3/AUI-5343-assistive-class\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/branch/issue-9.3/AUI-5343-assistive-class\"\n }\n },\n \"default_merge_strategy\": \"squash\",\n \"merge_strategies\": [\n \"merge_commit\",\n \"squash\",\n \"fast_forward\"\n ],\n \"type\": \"branch\",\n \"target\": {\n \"hash\": \"e5d1cde9069fcb9f0af90403a4de2150c125a148\",\n \"repository\": {\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B585074de-7b60-4fd1-81ed-e0bc7fafbda5%7D?ts=86317\"\n }\n },\n \"type\": \"repository\",\n \"name\": \"aui\",\n \"full_name\": \"atlassian/aui\",\n \"uuid\": \"{585074de-7b60-4fd1-81ed-e0bc7fafbda5}\"\n },\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148\"\n },\n \"comments\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/comments\"\n },\n \"patch\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/patch/e5d1cde9069fcb9f0af90403a4de2150c125a148\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/commits/e5d1cde9069fcb9f0af90403a4de2150c125a148\"\n },\n \"diff\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/diff/e5d1cde9069fcb9f0af90403a4de2150c125a148\"\n },\n \"approve\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/approve\"\n },\n \"statuses\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/statuses\"\n }\n },\n \"author\": {\n \"raw\": \"Marcin Konopka \",\n \"type\": \"author\",\n \"user\": {\n \"display_name\": \"Marcin Konopka\",\n \"uuid\": \"{47cc24f4-2a05-4420-88fe-0417535a110a}\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/%7B47cc24f4-2a05-4420-88fe-0417535a110a%7D\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/%7B47cc24f4-2a05-4420-88fe-0417535a110a%7D/\"\n },\n \"avatar\": {\n \"href\": \"https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/initials/MK-1.png\"\n }\n },\n \"nickname\": \"Marcin Konopka\",\n \"type\": \"user\",\n \"account_id\": \"60113d2b47a9540069f4de03\"\n }\n },\n \"parents\": [\n {\n \"hash\": \"87f7fc92b00464ae47b13ef65c91884e4ac9be51\",\n \"type\": \"commit\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/87f7fc92b00464ae47b13ef65c91884e4ac9be51\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/commits/87f7fc92b00464ae47b13ef65c91884e4ac9be51\"\n }\n }\n }\n ],\n \"date\": \"2021-04-13T13:44:49+00:00\",\n \"message\": \"wip\n\",\n \"type\": \"commit\"\n }\n }\n ],\n \"page\": 1,\n \"next\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches?pagelen=1&page=2\"\n }\n ```\n\n Branches support [filtering and sorting](/cloud/bitbucket/rest/intro/#filtering)\n that can be used to search for specific branches. For instance, to find\n all branches that have \"stab\" in their name:\n\n ```\n curl -s https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches -G --data-urlencode 'q=name ~ \"stab\"'\n ```\n\n By default, results will be in the order the underlying source control system returns them and identical to\n the ordering one sees when running \"$ git branch --list\". Note that this follows simple\n lexical ordering of the ref names.\n\n This can be undesirable as it does apply any natural sorting semantics, meaning for instance that tags are\n sorted [\"v10\", \"v11\", \"v9\"] instead of [\"v9\", \"v10\", \"v11\"].\n\n Sorting can be changed using the ?q= query parameter. When using ?q=name to explicitly sort on ref name,\n Bitbucket will apply natural sorting and interpret numerical values as numbers instead of strings.", + "description": "Returns a list of all open branches within the specified repository.\nResults will be in the order the source control manager returns them.\n\nBranches support [filtering and sorting](/cloud/bitbucket/rest/intro/#filtering)\nthat can be used to search for specific branches. For instance, to find\nall branches that have \"stab\" in their name:\n\n```\ncurl -s https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches -G --data-urlencode 'q=name ~ \"stab\"'\n```\n\nBy default, results will be in the order the underlying source control system returns them and identical to\nthe ordering one sees when running \"$ git branch --list\". Note that this follows simple\nlexical ordering of the ref names.\n\nThis can be undesirable as it does apply any natural sorting semantics, meaning for instance that tags are\nsorted [\"v10\", \"v11\", \"v9\"] instead of [\"v9\", \"v10\", \"v11\"].\n\nSorting can be changed using the ?q= query parameter. When using ?q=name to explicitly sort on ref name,\nBitbucket will apply natural sorting and interpret numerical values as numbers instead of strings.", "summary": "List open branches", "responses": { "200": { @@ -12594,6 +15611,121 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_branches" + }, + "examples": { + "response": { + "value": { + "pagelen": 1, + "size": 187, + "values": [ + { + "name": "issue-9.3/AUI-5343-assistive-class", + "links": { + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commits/issue-9.3/AUI-5343-assistive-class" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches/issue-9.3/AUI-5343-assistive-class" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/branch/issue-9.3/AUI-5343-assistive-class" + } + }, + "default_merge_strategy": "squash", + "merge_strategies": [ + "merge_commit", + "squash", + "fast_forward" + ], + "type": "branch", + "target": { + "hash": "e5d1cde9069fcb9f0af90403a4de2150c125a148", + "repository": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui" + }, + "avatar": { + "href": "https://bytebucket.org/ravatar/%7B585074de-7b60-4fd1-81ed-e0bc7fafbda5%7D?ts=86317" + } + }, + "type": "repository", + "name": "aui", + "full_name": "atlassian/aui", + "uuid": "{585074de-7b60-4fd1-81ed-e0bc7fafbda5}" + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148" + }, + "comments": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/comments" + }, + "patch": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/patch/e5d1cde9069fcb9f0af90403a4de2150c125a148" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/commits/e5d1cde9069fcb9f0af90403a4de2150c125a148" + }, + "diff": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/diff/e5d1cde9069fcb9f0af90403a4de2150c125a148" + }, + "approve": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/approve" + }, + "statuses": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e5d1cde9069fcb9f0af90403a4de2150c125a148/statuses" + } + }, + "author": { + "raw": "Marcin Konopka ", + "type": "author", + "user": { + "display_name": "Marcin Konopka", + "uuid": "{47cc24f4-2a05-4420-88fe-0417535a110a}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/%7B47cc24f4-2a05-4420-88fe-0417535a110a%7D" + }, + "html": { + "href": "https://bitbucket.org/%7B47cc24f4-2a05-4420-88fe-0417535a110a%7D/" + }, + "avatar": { + "href": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/initials/MK-1.png" + } + }, + "nickname": "Marcin Konopka", + "type": "user", + "account_id": "60113d2b47a9540069f4de03" + } + }, + "parents": [ + { + "hash": "87f7fc92b00464ae47b13ef65c91884e4ac9be51", + "type": "commit", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/87f7fc92b00464ae47b13ef65c91884e4ac9be51" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/commits/87f7fc92b00464ae47b13ef65c91884e4ac9be51" + } + } + } + ], + "date": "2021-04-13T13:44:49+00:00", + "message": "wip\n", + "type": "commit" + } + } + ], + "page": 1, + "next": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches?pagelen=1&page=2" + } + } } } } @@ -12647,6 +15779,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -12695,6 +15834,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "write:repository:bitbucket", + "read:repository:bitbucket" + ] + } ] }, "parameters": [ @@ -12758,11 +15907,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:repository:bitbucket"] + } ] }, "get": { "tags": ["Refs"], - "description": "Returns a branch object within the specified repository.\n\n ```\n $ curl -s https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches/master | jq .\n {\n \"name\": \"master\",\n \"links\": {\n \"commits\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commits/master\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches/master\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/branch/master\"\n }\n },\n \"default_merge_strategy\": \"squash\",\n \"merge_strategies\": [\n \"merge_commit\",\n \"squash\",\n \"fast_forward\"\n ],\n \"type\": \"branch\",\n \"target\": {\n \"hash\": \"e7d158ff7ed5538c28f94cd97a9ad569680fc94e\",\n \"repository\": {\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B585074de-7b60-4fd1-81ed-e0bc7fafbda5%7D?ts=86317\"\n }\n },\n \"type\": \"repository\",\n \"name\": \"aui\",\n \"full_name\": \"atlassian/aui\",\n \"uuid\": \"{585074de-7b60-4fd1-81ed-e0bc7fafbda5}\"\n },\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e\"\n },\n \"comments\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/comments\"\n },\n \"patch\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/patch/e7d158ff7ed5538c28f94cd97a9ad569680fc94e\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/commits/e7d158ff7ed5538c28f94cd97a9ad569680fc94e\"\n },\n \"diff\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/diff/e7d158ff7ed5538c28f94cd97a9ad569680fc94e\"\n },\n \"approve\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/approve\"\n },\n \"statuses\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/statuses\"\n }\n },\n \"author\": {\n \"raw\": \"psre-renovate-bot \",\n \"type\": \"author\",\n \"user\": {\n \"display_name\": \"psre-renovate-bot\",\n \"uuid\": \"{250a442a-3ab3-4fcb-87c3-3c8f3df65ec7}\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/%7B250a442a-3ab3-4fcb-87c3-3c8f3df65ec7%7D\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/%7B250a442a-3ab3-4fcb-87c3-3c8f3df65ec7%7D/\"\n },\n \"avatar\": {\n \"href\": \"https://secure.gravatar.com/avatar/6972ee037c9f36360170a86f544071a2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FP-3.png\"\n }\n },\n \"nickname\": \"Renovate Bot\",\n \"type\": \"user\",\n \"account_id\": \"5d5355e8c6b9320d9ea5b28d\"\n }\n },\n \"parents\": [\n {\n \"hash\": \"eab868a309e75733de80969a7bed1ec6d4651e06\",\n \"type\": \"commit\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/eab868a309e75733de80969a7bed1ec6d4651e06\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/atlassian/aui/commits/eab868a309e75733de80969a7bed1ec6d4651e06\"\n }\n }\n }\n ],\n \"date\": \"2021-04-12T06:44:38+00:00\",\n \"message\": \"Merged in issue/NONE-renovate-master-babel-monorepo (pull request #2883)\n\nchore(deps): update babel monorepo to v7.13.15 (master)\n\nApproved-by: Chris \"Daz\" Darroch\n\",\n \"type\": \"commit\"\n }\n }\n ```\n\n This call requires authentication. Private repositories require the\n caller to authenticate with an account that has appropriate\n authorization.\n\n For Git, the branch name should not include any prefixes (e.g.\n refs/heads).", + "description": "Returns a branch object within the specified repository.\n\nThis call requires authentication. Private repositories require the\ncaller to authenticate with an account that has appropriate\nauthorization.\n\nFor Git, the branch name should not include any prefixes (e.g.\nrefs/heads).", "summary": "Get a branch", "responses": { "200": { @@ -12771,6 +15927,113 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branch" + }, + "examples": { + "response": { + "value": { + "name": "master", + "links": { + "commits": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commits/master" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/refs/branches/master" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/branch/master" + } + }, + "default_merge_strategy": "squash", + "merge_strategies": [ + "merge_commit", + "squash", + "fast_forward" + ], + "type": "branch", + "target": { + "hash": "e7d158ff7ed5538c28f94cd97a9ad569680fc94e", + "repository": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui" + }, + "avatar": { + "href": "https://bytebucket.org/ravatar/%7B585074de-7b60-4fd1-81ed-e0bc7fafbda5%7D?ts=86317" + } + }, + "type": "repository", + "name": "aui", + "full_name": "atlassian/aui", + "uuid": "{585074de-7b60-4fd1-81ed-e0bc7fafbda5}" + }, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e" + }, + "comments": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/comments" + }, + "patch": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/patch/e7d158ff7ed5538c28f94cd97a9ad569680fc94e" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/commits/e7d158ff7ed5538c28f94cd97a9ad569680fc94e" + }, + "diff": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/diff/e7d158ff7ed5538c28f94cd97a9ad569680fc94e" + }, + "approve": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/approve" + }, + "statuses": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/e7d158ff7ed5538c28f94cd97a9ad569680fc94e/statuses" + } + }, + "author": { + "raw": "psre-renovate-bot ", + "type": "author", + "user": { + "display_name": "psre-renovate-bot", + "uuid": "{250a442a-3ab3-4fcb-87c3-3c8f3df65ec7}", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/%7B250a442a-3ab3-4fcb-87c3-3c8f3df65ec7%7D" + }, + "html": { + "href": "https://bitbucket.org/%7B250a442a-3ab3-4fcb-87c3-3c8f3df65ec7%7D/" + }, + "avatar": { + "href": "https://secure.gravatar.com/avatar/6972ee037c9f36360170a86f544071a2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FP-3.png" + } + }, + "nickname": "Renovate Bot", + "type": "user", + "account_id": "5d5355e8c6b9320d9ea5b28d" + } + }, + "parents": [ + { + "hash": "eab868a309e75733de80969a7bed1ec6d4651e06", + "type": "commit", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/eab868a309e75733de80969a7bed1ec6d4651e06" + }, + "html": { + "href": "https://bitbucket.org/atlassian/aui/commits/eab868a309e75733de80969a7bed1ec6d4651e06" + } + } + } + ], + "date": "2021-04-12T06:44:38+00:00", + "message": "Merged in issue/NONE-renovate-master-babel-monorepo (pull request #2883)\n\nchore(deps): update babel monorepo to v7.13.15 (master)\n\nApproved-by: Chris \"Daz\" Darroch\n", + "type": "commit" + } + } + } } } } @@ -12806,6 +16069,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -12903,6 +16173,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { @@ -12951,6 +16228,16 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": [ + "write:repository:bitbucket", + "read:repository:bitbucket" + ] + } ] }, "parameters": [ @@ -13014,6 +16301,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:repository:bitbucket"] + } ] }, "get": { @@ -13062,6 +16356,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -13143,11 +16444,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "post": { "tags": ["Source", "Repositories"], - "description": "This endpoint is used to create new commits in the repository by\nuploading files.\n\nTo add a new file to a repository:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/username/slug/src \\\n -F /repo/path/to/image.png=@image.png\n```\n\nThis will create a new commit on top of the main branch, inheriting the\ncontents of the main branch, but adding (or overwriting) the\n`image.png` file to the repository in the `/repo/path/to` directory.\n\nTo create a commit that deletes files, use the `files` parameter:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/username/slug/src \\\n -F files=/file/to/delete/1.txt \\\n -F files=/file/to/delete/2.txt\n```\n\nYou can add/modify/delete multiple files in a request. Rename/move a\nfile by deleting the old path and adding the content at the new path.\n\nThis endpoint accepts `multipart/form-data` (as in the examples above),\nas well as `application/x-www-form-urlencoded`.\n\n#### multipart/form-data\n\nA `multipart/form-data` post contains a series of \"form fields\" that\nidentify both the individual files that are being uploaded, as well as\nadditional, optional meta data.\n\nFiles are uploaded in file form fields (those that have a\n`Content-Disposition` parameter) whose field names point to the remote\npath in the repository where the file should be stored. Path field\nnames are always interpreted to be absolute from the root of the\nrepository, regardless whether the client uses a leading slash (as the\nabove `curl` example did).\n\nFile contents are treated as bytes and are not decoded as text.\n\nThe commit message, as well as other non-file meta data for the\nrequest, is sent along as normal form field elements. Meta data fields\nshare the same namespace as the file objects. For `multipart/form-data`\nbodies that should not lead to any ambiguity, as the\n`Content-Disposition` header will contain the `filename` parameter to\ndistinguish between a file named \"message\" and the commit message field.\n\n#### application/x-www-form-urlencoded\n\nIt is also possible to upload new files using a simple\n`application/x-www-form-urlencoded` POST. This can be convenient when\nuploading pure text files:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian/bbql/src \\\n --data-urlencode \"/path/to/me.txt=Lorem ipsum.\" \\\n --data-urlencode \"message=Initial commit\" \\\n --data-urlencode \"author=Erik van Zijst \"\n```\n\nThere could be a field name clash if a client were to upload a file\nnamed \"message\", as this filename clashes with the meta data property\nfor the commit message. To avoid this and to upload files whose names\nclash with the meta data properties, use a leading slash for the files,\ne.g. `curl --data-urlencode \"/message=file contents\"`.\n\nWhen an explicit slash is omitted for a file whose path matches that of\na meta data parameter, then it is interpreted as meta data, not as a\nfile.\n\n#### Executables and links\n\nWhile this API aims to facilitate the most common use cases, it is\npossible to perform some more advanced operations like creating a new\nsymlink in the repository, or creating an executable file.\n\nFiles can be supplied with a `x-attributes` value in the\n`Content-Disposition` header. For example, to upload an executable\nfile, as well as create a symlink from `README.txt` to `README`:\n\n```\n--===============1438169132528273974==\nContent-Type: text/plain; charset=\"us-ascii\"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nContent-ID: \"bin/shutdown.sh\"\nContent-Disposition: attachment; filename=\"shutdown.sh\"; x-attributes:\"executable\"\n\n#!/bin/sh\nhalt\n\n--===============1438169132528273974==\nContent-Type: text/plain; charset=\"us-ascii\"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nContent-ID: \"/README.txt\"\nContent-Disposition: attachment; filename=\"README.txt\"; x-attributes:\"link\"\n\nREADME\n--===============1438169132528273974==--\n```\n\nLinks are files that contain the target path and have\n`x-attributes:\"link\"` set.\n\nWhen overwriting links with files, or vice versa, the newly uploaded\nfile determines both the new contents, as well as the attributes. That\nmeans uploading a file without specifying `x-attributes=\"link\"` will\ncreate a regular file, even if the parent commit hosted a symlink at\nthe same path.\n\nThe same applies to executables. When modifying an existing executable\nfile, the form-data file element must include\n`x-attributes=\"executable\"` in order to preserve the executable status\nof the file.\n\nNote that this API does not support the creation or manipulation of\nsubrepos / submodules.", + "description": "This endpoint is used to create new commits in the repository by\nuploading files.\n\nTo add a new file to a repository:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/username/slug/src \\\n -F /repo/path/to/image.png=@image.png\n```\n\nThis will create a new commit on top of the main branch, inheriting the\ncontents of the main branch, but adding (or overwriting) the\n`image.png` file to the repository in the `/repo/path/to` directory.\n\nTo create a commit that deletes files, use the `files` parameter:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/username/slug/src \\\n -F files=/file/to/delete/1.txt \\\n -F files=/file/to/delete/2.txt\n```\n\nYou can add/modify/delete multiple files in a request. Rename/move a\nfile by deleting the old path and adding the content at the new path.\n\nThis endpoint accepts `multipart/form-data` (as in the examples above),\nas well as `application/x-www-form-urlencoded`.\n\nNote: `multipart/form-data` is currently not supported by Forge apps\nfor this API.\n\n#### multipart/form-data\n\nA `multipart/form-data` post contains a series of \"form fields\" that\nidentify both the individual files that are being uploaded, as well as\nadditional, optional meta data.\n\nFiles are uploaded in file form fields (those that have a\n`Content-Disposition` parameter) whose field names point to the remote\npath in the repository where the file should be stored. Path field\nnames are always interpreted to be absolute from the root of the\nrepository, regardless whether the client uses a leading slash (as the\nabove `curl` example did).\n\nFile contents are treated as bytes and are not decoded as text.\n\nThe commit message, as well as other non-file meta data for the\nrequest, is sent along as normal form field elements. Meta data fields\nshare the same namespace as the file objects. For `multipart/form-data`\nbodies that should not lead to any ambiguity, as the\n`Content-Disposition` header will contain the `filename` parameter to\ndistinguish between a file named \"message\" and the commit message field.\n\n#### application/x-www-form-urlencoded\n\nIt is also possible to upload new files using a simple\n`application/x-www-form-urlencoded` POST. This can be convenient when\nuploading pure text files:\n\n```\n$ curl https://api.bitbucket.org/2.0/repositories/atlassian/bbql/src \\\n --data-urlencode \"/path/to/me.txt=Lorem ipsum.\" \\\n --data-urlencode \"message=Initial commit\" \\\n --data-urlencode \"author=Erik van Zijst \"\n```\n\nThere could be a field name clash if a client were to upload a file\nnamed \"message\", as this filename clashes with the meta data property\nfor the commit message. To avoid this and to upload files whose names\nclash with the meta data properties, use a leading slash for the files,\ne.g. `curl --data-urlencode \"/message=file contents\"`.\n\nWhen an explicit slash is omitted for a file whose path matches that of\na meta data parameter, then it is interpreted as meta data, not as a\nfile.\n\n#### Executables and links\n\nWhile this API aims to facilitate the most common use cases, it is\npossible to perform some more advanced operations like creating a new\nsymlink in the repository, or creating an executable file.\n\nFiles can be supplied with a `x-attributes` value in the\n`Content-Disposition` header. For example, to upload an executable\nfile, as well as create a symlink from `README.txt` to `README`:\n\n```\n--===============1438169132528273974==\nContent-Type: text/plain; charset=\"us-ascii\"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nContent-ID: \"bin/shutdown.sh\"\nContent-Disposition: attachment; filename=\"shutdown.sh\"; x-attributes:\"executable\"\n\n#!/bin/sh\nhalt\n\n--===============1438169132528273974==\nContent-Type: text/plain; charset=\"us-ascii\"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nContent-ID: \"/README.txt\"\nContent-Disposition: attachment; filename=\"README.txt\"; x-attributes:\"link\"\n\nREADME\n--===============1438169132528273974==--\n```\n\nLinks are files that contain the target path and have\n`x-attributes:\"link\"` set.\n\nWhen overwriting links with files, or vice versa, the newly uploaded\nfile determines both the new contents, as well as the attributes. That\nmeans uploading a file without specifying `x-attributes=\"link\"` will\ncreate a regular file, even if the parent commit hosted a symlink at\nthe same path.\n\nThe same applies to executables. When modifying an existing executable\nfile, the form-data file element must include\n`x-attributes=\"executable\"` in order to preserve the executable status\nof the file.\n\nNote that this API does not support the creation or manipulation of\nsubrepos / submodules.", "summary": "Create a commit by uploading a file", "responses": { "201": { @@ -13231,6 +16539,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["write:repository:bitbucket"] + } ] }, "parameters": [ @@ -13281,7 +16596,7 @@ } }, "555": { - "description": "If the call times out, possibly because the specifiedrecursion depth is too large.", + "description": "If the call times out, possibly because the specified recursion depth is too large.", "content": { "application/json": { "schema": { @@ -13295,7 +16610,7 @@ { "name": "format", "in": "query", - "description": "If 'meta' is provided, returns the (json) meta data for the contents of the file. If 'rendered' is provided, returns the contents of a non-binary file in HTML-formatted rendered markup. Since Git does not generally track what text encoding scheme is used, this endpoint attempts to detect the most appropriate character encoding. While usually correct, determining the character encoding can be ambiguous which in exceptional cases can lead to misinterpretation of the characters. As such, the raw element in the response object should not be treated as equivalent to the file's actual contents.", + "description": "If 'meta' is provided, returns the (json) meta data for the contents of the file. If 'rendered' is provided, returns the contents of a non-binary file in HTML-formatted rendered markup. The 'rendered' option only supports these filetypes: `.md`, `.markdown`, `.mkd`, `.mkdn`, `.mdown`, `.text`, `.rst`, and `.textile`. Since Git does not generally track what text encoding scheme is used, this endpoint attempts to detect the most appropriate character encoding. While usually correct, determining the character encoding can be ambiguous which in exceptional cases can lead to misinterpretation of the characters. As such, the raw element in the response object should not be treated as equivalent to the file's actual contents.", "required": false, "schema": { "type": "string", @@ -13340,6 +16655,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -13537,6 +16859,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -15371,7 +18700,7 @@ } ] }, - "/teams/{username}/pipelines_config/variables/": { + "/teams/{username}/pipelines_config/variables": { "get": { "tags": ["Pipelines"], "summary": "List variables for an account", @@ -15400,7 +18729,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -15461,7 +18801,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/teams/{username}/pipelines_config/variables/{variable_uuid}": { @@ -15512,7 +18863,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -15564,7 +18926,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -15606,14 +18979,25 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/teams/{username}/search/code": { "get": { "tags": ["Search"], "summary": "Search for code in a team's repositories", - "description": "Search for code in the repositories of the specified team.\n\nSearching across all repositories:\n\n```\ncurl 'https://api.bitbucket.org/2.0/teams/team_name/search/code?search_query=foo'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 2,\n \"content_matches\": [\n {\n \"lines\": [\n {\n \"line\": 2,\n \"segments\": []\n },\n {\n \"line\": 3,\n \"segments\": [\n {\n \"text\": \"def \"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \"():\"\n }\n ]\n },\n {\n \"line\": 4,\n \"segments\": [\n {\n \"text\": \" print(\\\"snek\\\")\"\n }\n ]\n },\n {\n \"line\": 5,\n \"segments\": []\n }\n ]\n }\n ],\n \"path_matches\": [\n {\n \"text\": \"src/\"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \".py\"\n }\n ],\n \"file\": {\n \"path\": \"src/foo.py\",\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n }\n }\n }\n ]\n}\n```\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both as in the example above.\n\nYou can use the same syntax for the search query as in the UI, e.g.\nto only search within a specific repository:\n\n```\ncurl 'https://api.bitbucket.org/2.0/teams/team_name/search/code?search_query=foo+repo:demo'\n# results from the \"demo\" repository\n```\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files (the `%2B` is a URL-encoded `+`):\n\n```\ncurl 'https://api.bitbucket.org/2.0/teams/team_name/search/code'\\\n '?search_query=foo&fields=%2Bvalues.file.commit.repository'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 1,\n \"content_matches\": [...],\n \"path_matches\": [...],\n \"file\": {\n \"commit\": {\n \"type\": \"commit\",\n \"hash\": \"ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/commit/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo/commits/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n }\n },\n \"repository\": {\n \"name\": \"demo\",\n \"type\": \"repository\",\n \"full_name\": \"my-workspace/demo\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B850e1749-781a-4115-9316-df39d0600e7a%7D?ts=default\"\n }\n },\n \"uuid\": \"{850e1749-781a-4115-9316-df39d0600e7a}\"\n }\n },\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n },\n \"path\": \"src/foo.py\"\n }\n }\n ]\n}\n```\n\nTry `fields=%2Bvalues.*.*.*.*` to get an idea what's possible.\n", + "description": "Search for code in the repositories of the specified team.\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both.\n\nYou can use the same syntax for the search query as in the UI.\nE.g. to search for \"foo\" only within the repository \"demo\",\nuse the query parameter `search_query=foo+repo:demo`.\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files, use the query parameter\n`search_query=foo&fields=%2Bvalues.file.commit.repository`\n(the `%2B` is a URL-encoded `+`).\n\nTry `fields=%2Bvalues.*.*.*.*` to get an idea what's possible.\n", "operationId": "searchTeam", "parameters": [ { @@ -15664,6 +19048,80 @@ "application/json": { "schema": { "$ref": "#/components/schemas/search_result_page" + }, + "examples": { + "response": { + "value": { + "size": 1, + "page": 1, + "pagelen": 10, + "query_substituted": false, + "values": [ + { + "type": "code_search_result", + "content_match_count": 2, + "content_matches": [ + { + "lines": [ + { + "line": 2, + "segments": [] + }, + { + "line": 3, + "segments": [ + { + "text": "def " + }, + { + "text": "foo", + "match": true + }, + { + "text": "():" + } + ] + }, + { + "line": 4, + "segments": [ + { + "text": " print(\"snek\")" + } + ] + }, + { + "line": 5, + "segments": [] + } + ] + } + ], + "path_matches": [ + { + "text": "src/" + }, + { + "text": "foo", + "match": true + }, + { + "text": ".py" + } + ], + "file": { + "path": "src/foo.py", + "type": "commit_file", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py" + } + } + } + } + ] + } + } } } } @@ -15698,7 +19156,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/user": { @@ -15817,7 +19286,7 @@ "/user/permissions/repositories": { "get": { "tags": ["Repositories"], - "description": "Returns an object for each repository the caller has explicit access\nto and their effective permission — the highest level of permission the\ncaller has. This does not return public repositories that the user was\nnot granted any specific permission in, and does not distinguish between\nexplicit and implicit privileges.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/user/permissions/repositories\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"nickname\": \"evzijst\",\n \"display_name\": \"Erik van Zijst\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"bitbucket/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"admin\"\n }\n ],\n \"page\": 1,\n \"size\": 1\n}\n```\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nrepository or permission by adding the following query string\nparameters:\n\n* `q=repository.name=\"geordi\"` or `q=permission>\"read\"`\n* `sort=repository.name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", + "description": "Returns an object for each repository the caller has explicit access\nto and their effective permission — the highest level of permission the\ncaller has. This does not return public repositories that the user was\nnot granted any specific permission in, and does not distinguish between\nexplicit and implicit privileges.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nrepository or permission by adding the following query string\nparameters:\n\n* `q=repository.name=\"geordi\"` or `q=permission>\"read\"`\n* `sort=repository.name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", "summary": "List repository permissions for a user", "responses": { "200": { @@ -15826,6 +19295,33 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_repository_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "repository_permission", + "user": { + "type": "user", + "nickname": "evzijst", + "display_name": "Erik van Zijst", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}" + }, + "repository": { + "type": "repository", + "name": "geordi", + "full_name": "bitbucket/geordi", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "permission": "admin" + } + ], + "page": 1, + "size": 1 + } + } } } } @@ -15868,7 +19364,7 @@ "/user/permissions/workspaces": { "get": { "tags": ["Workspaces"], - "description": "Returns an object for each workspace the caller is a member of, and\ntheir effective role - the highest level of privilege the caller has.\nIf a user is a member of multiple groups with distinct roles, only the\nhighest level is returned.\n\nPermissions can be:\n\n* `owner`\n* `collaborator`\n* `member`\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/user/permissions/workspaces\n\n{\n \"pagelen\": 10,\n \"page\": 1,\n \"size\": 1,\n \"values\": [\n {\n \"type\": \"workspace_membership\",\n \"permission\": \"owner\",\n \"last_accessed\": \"2019-03-07T12:35:02.900024+00:00\",\n \"added_on\": \"2018-10-11T17:42:02.961424+00:00\",\n \"user\": {\n \"type\": \"user\",\n \"uuid\": \"{470c176d-3574-44ea-bb41-89e8638bcca4}\",\n \"nickname\": \"evzijst\",\n \"display_name\": \"Erik van Zijst\",\n },\n \"workspace\": {\n \"type\": \"workspace\",\n \"uuid\": \"{a15fb181-db1f-48f7-b41f-e1eff06929d6}\",\n \"slug\": \"bbworkspace1\",\n \"name\": \"Atlassian Bitbucket\",\n }\n }\n ]\n}\n```\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nworkspace or permission by adding the following query string parameters:\n\n* `q=workspace.slug=\"bbworkspace1\"` or `q=permission=\"owner\"`\n* `sort=workspace.slug`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", + "description": "Returns an object for each workspace the caller is a member of, and\ntheir effective role - the highest level of privilege the caller has.\nIf a user is a member of multiple groups with distinct roles, only the\nhighest level is returned.\n\nPermissions can be:\n\n* `owner`\n* `collaborator`\n* `member`\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**\n\n**When you move your administration from Bitbucket Cloud to admin.atlassian.com, the following fields on\n`workspace_membership` will no longer be present: `last_accessed` and `added_on`. See the\n[deprecation announcement](/cloud/bitbucket/announcement-breaking-change-workspace-membership/).**\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nworkspace or permission by adding the following query string parameters:\n\n* `q=workspace.slug=\"bbworkspace1\"` or `q=permission=\"owner\"`\n* `sort=workspace.slug`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", "summary": "List workspaces for the current user", "responses": { "200": { @@ -15877,6 +19373,35 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_workspace_memberships" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "page": 1, + "size": 1, + "values": [ + { + "type": "workspace_membership", + "permission": "owner", + "last_accessed": "2019-03-07T12:35:02.900024+00:00", + "added_on": "2018-10-11T17:42:02.961424+00:00", + "user": { + "type": "user", + "uuid": "{470c176d-3574-44ea-bb41-89e8638bcca4}", + "nickname": "evzijst", + "display_name": "Erik van Zijst" + }, + "workspace": { + "type": "workspace", + "uuid": "{a15fb181-db1f-48f7-b41f-e1eff06929d6}", + "slug": "bbworkspace1", + "name": "Atlassian Bitbucket" + } + } + ] + } + } } } } @@ -15969,7 +19494,7 @@ { "name": "selected_user", "in": "path", - "description": "This can either be the UUID of the account, surrounded by curly-braces, for\nexample: `{account UUID}`, OR an Atlassian Account ID.\n", + "description": "This can either be an Atlassian Account ID OR the UUID of the account,\nsurrounded by curly-braces, for example: `{account UUID}`.\n", "required": true, "schema": { "type": "string" @@ -15977,7 +19502,7 @@ } ] }, - "/users/{selected_user}/pipelines_config/variables/": { + "/users/{selected_user}/pipelines_config/variables": { "get": { "tags": ["Pipelines"], "deprecated": true, @@ -16006,7 +19531,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -16067,7 +19603,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/users/{selected_user}/pipelines_config/variables/{variable_uuid}": { @@ -16118,7 +19665,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -16170,7 +19728,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -16212,7 +19781,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/users/{selected_user}/properties/{app_key}/{property_name}": { @@ -16257,7 +19837,18 @@ "requestBody": { "$ref": "#/components/requestBodies/application_property" }, - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "responses": { @@ -16297,7 +19888,18 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "get": { "responses": { @@ -16344,14 +19946,25 @@ } } ], - "tags": ["properties"] + "tags": ["properties"], + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/users/{selected_user}/search/code": { "get": { "tags": ["Search"], "summary": "Search for code in a user's repositories", - "description": "Search for code in the repositories of the specified user.\n\nSearching across all repositories:\n\n```\ncurl 'https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/search/code?search_query=foo'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 2,\n \"content_matches\": [\n {\n \"lines\": [\n {\n \"line\": 2,\n \"segments\": []\n },\n {\n \"line\": 3,\n \"segments\": [\n {\n \"text\": \"def \"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \"():\"\n }\n ]\n },\n {\n \"line\": 4,\n \"segments\": [\n {\n \"text\": \" print(\\\"snek\\\")\"\n }\n ]\n },\n {\n \"line\": 5,\n \"segments\": []\n }\n ]\n }\n ],\n \"path_matches\": [\n {\n \"text\": \"src/\"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \".py\"\n }\n ],\n \"file\": {\n \"path\": \"src/foo.py\",\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n }\n }\n }\n ]\n}\n```\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both as in the example above.\n\nYou can use the same syntax for the search query as in the UI, e.g.\nto only search within a specific repository:\n\n```\ncurl 'https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/search/code?search_query=foo+repo:demo'\n# results from the \"demo\" repository\n```\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files (the `%2B` is a URL-encoded `+`):\n\n```\ncurl 'https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/search/code'\\\n '?search_query=foo&fields=%2Bvalues.file.commit.repository'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 1,\n \"content_matches\": [...],\n \"path_matches\": [...],\n \"file\": {\n \"commit\": {\n \"type\": \"commit\",\n \"hash\": \"ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/commit/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo/commits/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n }\n },\n \"repository\": {\n \"name\": \"demo\",\n \"type\": \"repository\",\n \"full_name\": \"my-workspace/demo\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B850e1749-781a-4115-9316-df39d0600e7a%7D?ts=default\"\n }\n },\n \"uuid\": \"{850e1749-781a-4115-9316-df39d0600e7a}\"\n }\n },\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n },\n \"path\": \"src/foo.py\"\n }\n }\n ]\n}\n```\n\nTry `fields=%2Bvalues.*.*.*.*` to get an idea what's possible.\n", + "description": "Search for code in the repositories of the specified user.\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both.\n\nYou can use the same syntax for the search query as in the UI.\nE.g. to search for \"foo\" only within the repository \"demo\",\nuse the query parameter `search_query=foo+repo:demo`.\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files, use the query parameter\n`search_query=foo&fields=%2Bvalues.file.commit.repository`\n(the `%2B` is a URL-encoded `+`).\n", "operationId": "searchAccount", "parameters": [ { @@ -16402,6 +20015,80 @@ "application/json": { "schema": { "$ref": "#/components/schemas/search_result_page" + }, + "examples": { + "response": { + "value": { + "size": 1, + "page": 1, + "pagelen": 10, + "query_substituted": false, + "values": [ + { + "type": "code_search_result", + "content_match_count": 2, + "content_matches": [ + { + "lines": [ + { + "line": 2, + "segments": [] + }, + { + "line": 3, + "segments": [ + { + "text": "def " + }, + { + "text": "foo", + "match": true + }, + { + "text": "():" + } + ] + }, + { + "line": 4, + "segments": [ + { + "text": " print(\"snek\")" + } + ] + }, + { + "line": 5, + "segments": [] + } + ] + } + ], + "path_matches": [ + { + "text": "src/" + }, + { + "text": "foo", + "match": true + }, + { + "text": ".py" + } + ], + "file": { + "path": "src/foo.py", + "type": "commit_file", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py" + } + } + } + } + ] + } + } } } } @@ -16436,13 +20123,24 @@ } } } - } + }, + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/users/{selected_user}/ssh-keys": { "get": { "tags": ["Ssh"], - "description": "Returns a paginated list of the user's SSH public keys.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys\n{\n \"page\": 1,\n \"pagelen\": 10,\n \"size\": 1,\n \"values\": [\n {\n \"comment\": \"user@myhost\",\n \"created_on\": \"2018-03-14T13:17:05.196003+00:00\",\n \"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY\",\n \"label\": \"\",\n \"last_used\": \"2018-03-20T13:18:05.196003+00:00\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a\"\n }\n },\n \"owner\": {\n \"display_name\": \"Mark Adams\",\n \"links\": {\n \"avatar\": {\n \"href\": \"https://bitbucket.org/account/markadams-atl/avatar/32/\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/markadams-atl/\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}\"\n }\n },\n \"type\": \"user\",\n \"username\": \"markadams-atl\",\n \"nickname\": \"markadams-atl\",\n \"uuid\": \"{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}\"\n },\n \"type\": \"ssh_key\",\n \"uuid\": \"{b15b6026-9c02-4626-b4ad-b905f99f763a}\"\n }\n ]\n}\n```", + "description": "Returns a paginated list of the user's SSH public keys.", "summary": "List SSH keys", "responses": { "200": { @@ -16451,6 +20149,49 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_ssh_user_keys" + }, + "examples": { + "response": { + "value": { + "page": 1, + "pagelen": 10, + "size": 1, + "values": [ + { + "comment": "user@myhost", + "created_on": "2018-03-14T13:17:05.196003+00:00", + "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY", + "label": "", + "last_used": "2018-03-20T13:18:05.196003+00:00", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a" + } + }, + "owner": { + "display_name": "Mark Adams", + "links": { + "avatar": { + "href": "https://bitbucket.org/account/markadams-atl/avatar/32/" + }, + "html": { + "href": "https://bitbucket.org/markadams-atl/" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}" + } + }, + "type": "user", + "username": "markadams-atl", + "nickname": "markadams-atl", + "uuid": "{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}" + }, + "type": "ssh_key", + "uuid": "{b15b6026-9c02-4626-b4ad-b905f99f763a}" + } + ] + } + } } } } @@ -16483,7 +20224,7 @@ }, "post": { "tags": ["Ssh"], - "description": "Adds a new SSH public key to the specified user account and returns the resulting key.\n\nExample:\n```\n$ curl -X POST -H \"Content-Type: application/json\" -d '{\"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY user@myhost\"}' https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys\n\n{\n \"comment\": \"user@myhost\",\n \"created_on\": \"2018-03-14T13:17:05.196003+00:00\",\n \"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY\",\n \"label\": \"\",\n \"last_used\": \"2018-03-20T13:18:05.196003+00:00\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a\"\n }\n },\n \"owner\": {\n \"display_name\": \"Mark Adams\",\n \"links\": {\n \"avatar\": {\n \"href\": \"https://bitbucket.org/account/markadams-atl/avatar/32/\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/markadams-atl/\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}\"\n }\n },\n \"type\": \"user\",\n \"username\": \"markadams-atl\",\n \"nickname\": \"markadams-atl\",\n \"uuid\": \"{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}\"\n },\n \"type\": \"ssh_key\",\n \"uuid\": \"{b15b6026-9c02-4626-b4ad-b905f99f763a}\"\n}\n```", + "description": "Adds a new SSH public key to the specified user account and returns the resulting key.\n\nExample:\n\n```\n$ curl -X POST -H \"Content-Type: application/json\" -d '{\"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY user@myhost\"}' https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys\n```", "summary": "Add a new SSH key", "responses": { "201": { @@ -16492,6 +20233,42 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ssh_account_key" + }, + "examples": { + "response": { + "value": { + "comment": "user@myhost", + "created_on": "2018-03-14T13:17:05.196003+00:00", + "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY", + "label": "", + "last_used": "2018-03-20T13:18:05.196003+00:00", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a" + } + }, + "owner": { + "display_name": "Mark Adams", + "links": { + "avatar": { + "href": "https://bitbucket.org/account/markadams-atl/avatar/32/" + }, + "html": { + "href": "https://bitbucket.org/markadams-atl/" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}" + } + }, + "type": "user", + "username": "markadams-atl", + "nickname": "markadams-atl", + "uuid": "{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}" + }, + "type": "ssh_key", + "uuid": "{b15b6026-9c02-4626-b4ad-b905f99f763a}" + } + } } } } @@ -16546,7 +20323,7 @@ { "name": "selected_user", "in": "path", - "description": "This can either be the UUID of the account, surrounded by curly-braces, for\nexample: `{account UUID}`, OR an Atlassian Account ID.\n", + "description": "This can either be an Atlassian Account ID OR the UUID of the account,\nsurrounded by curly-braces, for example: `{account UUID}`.\n", "required": true, "schema": { "type": "string" @@ -16557,7 +20334,7 @@ "/users/{selected_user}/ssh-keys/{key_id}": { "delete": { "tags": ["Ssh"], - "description": "Deletes a specific SSH public key from a user's account\n\nExample:\n```\n$ curl -X DELETE https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/{b15b6026-9c02-4626-b4ad-b905f99f763a}\n```", + "description": "Deletes a specific SSH public key from a user's account.", "summary": "Delete a SSH key", "responses": { "204": { @@ -16601,7 +20378,7 @@ }, "get": { "tags": ["Ssh"], - "description": "Returns a specific SSH public key belonging to a user.\n\nExample:\n```\n$ curl https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/{fbe4bbab-f6f7-4dde-956b-5c58323c54b3}\n\n{\n \"comment\": \"user@myhost\",\n \"created_on\": \"2018-03-14T13:17:05.196003+00:00\",\n \"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY\",\n \"label\": \"\",\n \"last_used\": \"2018-03-20T13:18:05.196003+00:00\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a\"\n }\n },\n \"owner\": {\n \"display_name\": \"Mark Adams\",\n \"links\": {\n \"avatar\": {\n \"href\": \"https://bitbucket.org/account/markadams-atl/avatar/32/\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/markadams-atl/\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}\"\n }\n },\n \"type\": \"user\",\n \"username\": \"markadams-atl\",\n \"nickname\": \"markadams-atl\",\n \"uuid\": \"{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}\"\n },\n \"type\": \"ssh_key\",\n \"uuid\": \"{b15b6026-9c02-4626-b4ad-b905f99f763a}\"\n}\n```", + "description": "Returns a specific SSH public key belonging to a user.", "summary": "Get a SSH key", "responses": { "200": { @@ -16610,6 +20387,42 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ssh_account_key" + }, + "examples": { + "response": { + "value": { + "comment": "user@myhost", + "created_on": "2018-03-14T13:17:05.196003+00:00", + "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY", + "label": "", + "last_used": "2018-03-20T13:18:05.196003+00:00", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a" + } + }, + "owner": { + "display_name": "Mark Adams", + "links": { + "avatar": { + "href": "https://bitbucket.org/account/markadams-atl/avatar/32/" + }, + "html": { + "href": "https://bitbucket.org/markadams-atl/" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}" + } + }, + "type": "user", + "username": "markadams-atl", + "nickname": "markadams-atl", + "uuid": "{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}" + }, + "type": "ssh_key", + "uuid": "{b15b6026-9c02-4626-b4ad-b905f99f763a}" + } + } } } } @@ -16642,7 +20455,7 @@ }, "put": { "tags": ["Ssh"], - "description": "Updates a specific SSH public key on a user's account\n\nNote: Only the 'comment' field can be updated using this API. To modify the key or comment values, you must delete and add the key again.\n\nExample:\n```\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"label\": \"Work key\"}' https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/{b15b6026-9c02-4626-b4ad-b905f99f763a}\n\n{\n \"comment\": \"\",\n \"created_on\": \"2018-03-14T13:17:05.196003+00:00\",\n \"key\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY\",\n \"label\": \"Work key\",\n \"last_used\": \"2018-03-20T13:18:05.196003+00:00\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a\"\n }\n },\n \"owner\": {\n \"display_name\": \"Mark Adams\",\n \"links\": {\n \"avatar\": {\n \"href\": \"https://bitbucket.org/account/markadams-atl/avatar/32/\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/markadams-atl/\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}\"\n }\n },\n \"type\": \"user\",\n \"username\": \"markadams-atl\",\n \"nickname\": \"markadams-atl\",\n \"uuid\": \"{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}\"\n },\n \"type\": \"ssh_key\",\n \"uuid\": \"{b15b6026-9c02-4626-b4ad-b905f99f763a}\"\n}\n```", + "description": "Updates a specific SSH public key on a user's account\n\nNote: Only the 'comment' field can be updated using this API. To modify the key or comment values, you must delete and add the key again.\n\nExample:\n\n```\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"label\": \"Work key\"}' https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/{b15b6026-9c02-4626-b4ad-b905f99f763a}\n```", "summary": "Update a SSH key", "responses": { "200": { @@ -16651,6 +20464,42 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ssh_account_key" + }, + "examples": { + "response": { + "value": { + "comment": "", + "created_on": "2018-03-14T13:17:05.196003+00:00", + "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqP3Cr632C2dNhhgKVcon4ldUSAeKiku2yP9O9/bDtY", + "label": "Work key", + "last_used": "2018-03-20T13:18:05.196003+00:00", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}/ssh-keys/b15b6026-9c02-4626-b4ad-b905f99f763a" + } + }, + "owner": { + "display_name": "Mark Adams", + "links": { + "avatar": { + "href": "https://bitbucket.org/account/markadams-atl/avatar/32/" + }, + "html": { + "href": "https://bitbucket.org/markadams-atl/" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/users/{ed08f5e1-605b-4f4a-aee4-6c97628a673e}" + } + }, + "type": "user", + "username": "markadams-atl", + "nickname": "markadams-atl", + "uuid": "{d7dd0e2d-3994-4a50-a9ee-d260b6cefdab}" + }, + "type": "ssh_key", + "uuid": "{b15b6026-9c02-4626-b4ad-b905f99f763a}" + } + } } } } @@ -16714,7 +20563,7 @@ { "name": "selected_user", "in": "path", - "description": "This can either be the UUID of the account, surrounded by curly-braces, for\nexample: `{account UUID}`, OR an Atlassian Account ID.\n", + "description": "This can either be an Atlassian Account ID OR the UUID of the account,\nsurrounded by curly-braces, for example: `{account UUID}`.\n", "required": true, "schema": { "type": "string" @@ -16725,7 +20574,7 @@ "/workspaces": { "get": { "tags": ["Workspaces"], - "description": "Returns a list of workspaces accessible by the authenticated user.\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/workspaces\n\n{\n \"pagelen\": 10,\n \"page\": 1,\n \"size\": 1,\n \"values\": [\n {\n \"uuid\": \"{a15fb181-db1f-48f7-b41f-e1eff06929d6}\",\n \"links\": {\n \"owners\": {\n \"href\": \"https://api.bitbucket.org/2.0/workspaces/bbworkspace1/members?q=permission%3D%22owner%22\"\n },\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/workspaces/bbworkspace1\"\n },\n \"repositories\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/bbworkspace1\"\n },\n \"snippets\": {\n \"href\": \"https://api.bitbucket.org/2.0/snippets/bbworkspace1\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/bbworkspace1/\"\n },\n \"avatar\": {\n \"href\": \"https://bitbucket.org/workspaces/bbworkspace1/avatar/?ts=1543465801\"\n },\n \"members\": {\n \"href\": \"https://api.bitbucket.org/2.0/workspaces/bbworkspace1/members\"\n },\n \"projects\": {\n \"href\": \"https://api.bitbucket.org/2.0/workspaces/bbworkspace1/projects\"\n }\n },\n \"created_on\": \"2018-11-14T19:15:05.058566+00:00\",\n \"type\": \"workspace\",\n \"slug\": \"bbworkspace1\",\n \"is_private\": true,\n \"name\": \"Atlassian Bitbucket\"\n }\n ]\n}\n```\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nworkspace or permission by adding the following query string parameters:\n\n* `q=slug=\"bbworkspace1\"` or `q=is_private=true`\n* `sort=created_on`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**", + "description": "Returns a list of workspaces accessible by the authenticated user.\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering) by\nworkspace or permission by adding the following query string parameters:\n\n* `q=slug=\"bbworkspace1\"` or `q=is_private=true`\n* `sort=created_on`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**", "summary": "List workspaces for user", "responses": { "200": { @@ -16734,6 +20583,51 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_workspaces" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "page": 1, + "size": 1, + "values": [ + { + "uuid": "{a15fb181-db1f-48f7-b41f-e1eff06929d6}", + "links": { + "owners": { + "href": "https://api.bitbucket.org/2.0/workspaces/bbworkspace1/members?q=permission%3D%22owner%22" + }, + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/bbworkspace1" + }, + "repositories": { + "href": "https://api.bitbucket.org/2.0/repositories/bbworkspace1" + }, + "snippets": { + "href": "https://api.bitbucket.org/2.0/snippets/bbworkspace1" + }, + "html": { + "href": "https://bitbucket.org/bbworkspace1/" + }, + "avatar": { + "href": "https://bitbucket.org/workspaces/bbworkspace1/avatar/?ts=1543465801" + }, + "members": { + "href": "https://api.bitbucket.org/2.0/workspaces/bbworkspace1/members" + }, + "projects": { + "href": "https://api.bitbucket.org/2.0/workspaces/bbworkspace1/projects" + } + }, + "created_on": "2018-11-14T19:15:05.058566+00:00", + "type": "workspace", + "slug": "bbworkspace1", + "is_private": true, + "name": "Atlassian Bitbucket" + } + ] + } + } } } } @@ -16895,7 +20789,7 @@ }, "post": { "tags": ["Workspaces", "Webhooks"], - "description": "Creates a new webhook on the specified workspace.\n\nWorkspace webhooks are fired for events from all repositories contained\nby that workspace.\n\nExample:\n\n```\n$ curl -X POST -u credentials -H 'Content-Type: application/json'\n https://api.bitbucket.org/2.0/workspaces/my-workspace/hooks\n -d '\n {\n \"description\": \"Webhook Description\",\n \"url\": \"https://example.com/\",\n \"active\": true,\n \"events\": [\n \"repo:push\",\n \"issue:created\",\n \"issue:updated\"\n ]\n }'\n```\n\nThis call requires the webhook scope, as well as any scope\nthat applies to the events that the webhook subscribes to. In the\nexample above that means: `webhook`, `repository` and `issue`.\n\nThe `url` must properly resolve and cannot be an internal, non-routed address.\n\nOnly workspace owners can install webhooks on workspaces.", + "description": "Creates a new webhook on the specified workspace.\n\nWorkspace webhooks are fired for events from all repositories contained\nby that workspace.\n\nExample:\n\n```\n$ curl -X POST -u credentials -H 'Content-Type: application/json'\n https://api.bitbucket.org/2.0/workspaces/my-workspace/hooks\n -d '\n {\n \"description\": \"Webhook Description\",\n \"url\": \"https://example.com/\",\n \"active\": true,\n \"secret\": \"this is a really bad secret\",\n \"events\": [\n \"repo:push\",\n \"issue:created\",\n \"issue:updated\"\n ]\n }'\n```\n\nWhen the `secret` is provided it will be used as the key to generate a HMAC\ndigest value sent in the `X-Hub-Signature` header at delivery time. Passing\na `null` or empty `secret` or not passing a `secret` will leave the webhook's\nsecret unset. Bitbucket only generates the `X-Hub-Signature` when the webhook's\nsecret is set.\n\nThis call requires the webhook scope, as well as any scope\nthat applies to the events that the webhook subscribes to. In the\nexample above that means: `webhook`, `repository` and `issue`.\n\nThe `url` must properly resolve and cannot be an internal, non-routed address.\n\nOnly workspace owners can install webhooks on workspaces.", "summary": "Create a webhook for a workspace", "responses": { "201": { @@ -17043,7 +20937,7 @@ }, "put": { "tags": ["Workspaces", "Webhooks"], - "description": "Updates the specified webhook subscription.\n\nThe following properties can be mutated:\n\n* `description`\n* `url`\n* `active`\n* `events`", + "description": "Updates the specified webhook subscription.\n\nThe following properties can be mutated:\n\n* `description`\n* `url`\n* `secret`\n* `active`\n* `events`\n\nThe hook's secret is used as a key to generate the HMAC hex digest sent in the\n`X-Hub-Signature` header at delivery time. This signature is only generated\nwhen the hook has a secret.\n\nSet the hook's secret by passing the new value in the `secret` field. Passing a\n`null` value in the `secret` field will remove the secret from the hook. The\nhook's secret can be left unchanged by not passing the `secret` field in the\nrequest.", "summary": "Update a webhook for a workspace", "responses": { "200": { @@ -17147,6 +21041,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:workspace:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -17208,6 +21109,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:workspace:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -17234,7 +21142,7 @@ "/workspaces/{workspace}/permissions": { "get": { "tags": ["Workspaces"], - "description": "Returns the list of members in a workspace\nand their permission levels.\nPermission can be:\n* `owner`\n* `collaborator`\n* `member`\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**\n\nExample:\n\n```\n$ curl -X https://api.bitbucket.org/2.0/workspaces/bbworkspace1/permissions\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"permission\": \"owner\",\n \"type\": \"workspace_membership\",\n \"user\": {\n \"type\": \"user\",\n \"uuid\": \"{470c176d-3574-44ea-bb41-89e8638bcca4}\",\n \"display_name\": \"Erik van Zijst\",\n },\n \"workspace\": {\n \"type\": \"workspace\",\n \"uuid\": \"{a15fb181-db1f-48f7-b41f-e1eff06929d6}\",\n \"slug\": \"bbworkspace1\",\n \"name\": \"Atlassian Bitbucket\",\n }\n },\n {\n \"permission\": \"member\",\n \"type\": \"workspace_membership\",\n \"user\": {\n \"type\": \"user\",\n \"nickname\": \"seanaty\",\n \"display_name\": \"Sean Conaty\",\n \"uuid\": \"{504c3b62-8120-4f0c-a7bc-87800b9d6f70}\"\n },\n \"workspace\": {\n \"type\": \"workspace\",\n \"uuid\": \"{a15fb181-db1f-48f7-b41f-e1eff06929d6}\",\n \"slug\": \"bbworkspace1\",\n \"name\": \"Atlassian Bitbucket\",\n }\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```\n\nResults may be further [filtered](/cloud/bitbucket/rest/intro/#filtering) by\npermission by adding the following query string parameters:\n\n* `q=permission=\"owner\"`", + "description": "Returns the list of members in a workspace\nand their permission levels.\nPermission can be:\n* `owner`\n* `collaborator`\n* `member`\n\n**The `collaborator` role is being removed from the Bitbucket Cloud API. For more information,\nsee the [deprecation announcement](/cloud/bitbucket/deprecation-notice-collaborator-role/).**\n\n**When you move your administration from Bitbucket Cloud to admin.atlassian.com, the following fields on\n`workspace_membership` will no longer be present: `last_accessed` and `added_on`. See the\n[deprecation announcement](/cloud/bitbucket/announcement-breaking-change-workspace-membership/).**\n\nResults may be further [filtered](/cloud/bitbucket/rest/intro/#filtering) by\npermission by adding the following query string parameters:\n\n* `q=permission=\"owner\"`", "summary": "List user permissions in a workspace", "responses": { "200": { @@ -17243,6 +21151,48 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_workspace_memberships" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "permission": "owner", + "type": "workspace_membership", + "user": { + "type": "user", + "uuid": "{470c176d-3574-44ea-bb41-89e8638bcca4}", + "display_name": "Erik van Zijst" + }, + "workspace": { + "type": "workspace", + "uuid": "{a15fb181-db1f-48f7-b41f-e1eff06929d6}", + "slug": "bbworkspace1", + "name": "Atlassian Bitbucket" + } + }, + { + "permission": "member", + "type": "workspace_membership", + "user": { + "type": "user", + "nickname": "seanaty", + "display_name": "Sean Conaty", + "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}" + }, + "workspace": { + "type": "workspace", + "uuid": "{a15fb181-db1f-48f7-b41f-e1eff06929d6}", + "slug": "bbworkspace1", + "name": "Atlassian Bitbucket" + } + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -17279,6 +21229,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:workspace:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -17296,7 +21253,7 @@ "/workspaces/{workspace}/permissions/repositories": { "get": { "tags": ["Workspaces"], - "description": "Returns an object for each repository permission for all of a\nworkspace's repositories.\n\nPermissions returned are effective permissions: the highest level of\npermission the user has. This does not distinguish between direct and\nindirect (group) privileges.\n\nOnly users with admin permission for the team may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/permissions/repositories\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Erik van Zijst\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"admin\"\n },\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Sean Conaty\",\n \"uuid\": \"{504c3b62-8120-4f0c-a7bc-87800b9d6f70}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"write\"\n },\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Jeff Zeng\",\n \"uuid\": \"{47f92a9a-c3a3-4d0b-bc4e-782a969c5c72}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"whee\",\n \"full_name\": \"atlassian_tutorial/whee\",\n \"uuid\": \"{30ba25e9-51ff-4555-8dd0-fc7ee2fa0895}\"\n },\n \"permission\": \"admin\"\n }\n ],\n \"page\": 1,\n \"size\": 3\n}\n```\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering)\nby repository, user, or permission by adding the following query string\nparameters:\n\n* `q=repository.name=\"geordi\"` or `q=permission>\"read\"`\n* `sort=user.display_name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", + "description": "Returns an object for each repository permission for all of a\nworkspace's repositories.\n\nPermissions returned are effective permissions: the highest level of\npermission the user has. This does not distinguish between direct and\nindirect (group) privileges.\n\nOnly users with admin permission for the team may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering)\nby repository, user, or permission by adding the following query string\nparameters:\n\n* `q=repository.name=\"geordi\"` or `q=permission>\"read\"`\n* `sort=user.display_name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", "summary": "List all repository permissions for a workspace", "responses": { "200": { @@ -17305,6 +21262,62 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_repository_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "repository_permission", + "user": { + "type": "user", + "display_name": "Erik van Zijst", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}" + }, + "repository": { + "type": "repository", + "name": "geordi", + "full_name": "atlassian_tutorial/geordi", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "permission": "admin" + }, + { + "type": "repository_permission", + "user": { + "type": "user", + "display_name": "Sean Conaty", + "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}" + }, + "repository": { + "type": "repository", + "name": "geordi", + "full_name": "atlassian_tutorial/geordi", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "permission": "write" + }, + { + "type": "repository_permission", + "user": { + "type": "user", + "display_name": "Jeff Zeng", + "uuid": "{47f92a9a-c3a3-4d0b-bc4e-782a969c5c72}" + }, + "repository": { + "type": "repository", + "name": "whee", + "full_name": "atlassian_tutorial/whee", + "uuid": "{30ba25e9-51ff-4555-8dd0-fc7ee2fa0895}" + }, + "permission": "admin" + } + ], + "page": 1, + "size": 3 + } + } } } } @@ -17350,6 +21363,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -17367,7 +21387,7 @@ "/workspaces/{workspace}/permissions/repositories/{repo_slug}": { "get": { "tags": ["Workspaces"], - "description": "Returns an object for the repository permission of each user in the\nrequested repository.\n\nPermissions returned are effective permissions: the highest level of\npermission the user has. This does not distinguish between direct and\nindirect (group) privileges.\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nExample:\n\n```\n$ curl https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/permissions/repositories/geordi\n\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Erik van Zijst\",\n \"uuid\": \"{d301aafa-d676-4ee0-88be-962be7417567}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"admin\"\n },\n {\n \"type\": \"repository_permission\",\n \"user\": {\n \"type\": \"user\",\n \"display_name\": \"Sean Conaty\",\n \"uuid\": \"{504c3b62-8120-4f0c-a7bc-87800b9d6f70}\"\n },\n \"repository\": {\n \"type\": \"repository\",\n \"name\": \"geordi\",\n \"full_name\": \"atlassian_tutorial/geordi\",\n \"uuid\": \"{85d08b4e-571d-44e9-a507-fa476535aa98}\"\n },\n \"permission\": \"write\"\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering)\nby user, or permission by adding the following query string parameters:\n\n* `q=permission>\"read\"`\n* `sort=user.display_name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", + "description": "Returns an object for the repository permission of each user in the\nrequested repository.\n\nPermissions returned are effective permissions: the highest level of\npermission the user has. This does not distinguish between direct and\nindirect (group) privileges.\n\nOnly users with admin permission for the repository may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `write`\n* `read`\n\nResults may be further [filtered or sorted](/cloud/bitbucket/rest/intro/#filtering)\nby user, or permission by adding the following query string parameters:\n\n* `q=permission>\"read\"`\n* `sort=user.display_name`\n\nNote that the query parameter values need to be URL escaped so that `=`\nwould become `%3D`.", "summary": "List a repository permissions for a workspace", "responses": { "200": { @@ -17376,6 +21396,47 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_repository_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "repository_permission", + "user": { + "type": "user", + "display_name": "Erik van Zijst", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}" + }, + "repository": { + "type": "repository", + "name": "geordi", + "full_name": "atlassian_tutorial/geordi", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "permission": "admin" + }, + { + "type": "repository_permission", + "user": { + "type": "user", + "display_name": "Sean Conaty", + "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}" + }, + "repository": { + "type": "repository", + "name": "geordi", + "full_name": "atlassian_tutorial/geordi", + "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" + }, + "permission": "write" + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -17421,6 +21482,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket", "read:user:bitbucket"] + } ] }, "parameters": [ @@ -17475,7 +21543,18 @@ } } } - } + }, + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/workspaces/{workspace}/pipelines-config/identity/oidc/keys.json": { @@ -17509,7 +21588,18 @@ } } } - } + }, + "security": [ + { + "oauth2": [] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/workspaces/{workspace}/pipelines-config/variables": { @@ -17540,7 +21630,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "post": { "tags": ["Pipelines"], @@ -17600,7 +21708,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/workspaces/{workspace}/pipelines-config/variables/{variable_uuid}": { @@ -17650,7 +21769,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "put": { "tags": ["Pipelines"], @@ -17701,7 +21838,18 @@ } } } - } + }, + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] }, "delete": { "tags": ["Pipelines"], @@ -17742,7 +21890,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:pipeline:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["pipeline:variable"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } }, "/workspaces/{workspace}/projects": { @@ -17782,11 +21948,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket"] + } ] }, "post": { "tags": ["Projects"], - "description": "Creates a new project.\n\nNote that the avatar has to be embedded as either a data-url\nor a URL to an external image as shown in the examples below:\n\n```\n$ body=$(cat << EOF\n{\n \"name\": \"Mars Project\",\n \"key\": \"MARS\",\n \"description\": \"Software for colonizing mars.\",\n \"links\": {\n \"avatar\": {\n \"href\": \"data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/...\"\n }\n },\n \"is_private\": false\n}\nEOF\n)\n$ curl -H \"Content-Type: application/json\" \\\n -X POST \\\n -d \"$body\" \\\n https://api.bitbucket.org/2.0/teams/teams-in-space/projects/ | jq .\n{\n // Serialized project document\n}\n```\n\nor even:\n\n```\n$ body=$(cat << EOF\n{\n \"name\": \"Mars Project\",\n \"key\": \"MARS\",\n \"description\": \"Software for colonizing mars.\",\n \"links\": {\n \"avatar\": {\n \"href\": \"http://i.imgur.com/72tRx4w.gif\"\n }\n },\n \"is_private\": false\n}\nEOF\n)\n$ curl -H \"Content-Type: application/json\" \\\n -X POST \\\n -d \"$body\" \\\n https://api.bitbucket.org/2.0/teams/teams-in-space/projects/ | jq .\n{\n // Serialized project document\n}\n```", + "description": "Creates a new project.\n\nNote that the avatar has to be embedded as either a data-url\nor a URL to an external image as shown in the examples below:\n\n```\n$ body=$(cat << EOF\n{\n \"name\": \"Mars Project\",\n \"key\": \"MARS\",\n \"description\": \"Software for colonizing mars.\",\n \"links\": {\n \"avatar\": {\n \"href\": \"data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/...\"\n }\n },\n \"is_private\": false\n}\nEOF\n)\n$ curl -H \"Content-Type: application/json\" \\\n -X POST \\\n -d \"$body\" \\\n https://api.bitbucket.org/2.0/workspaces/teams-in-space/projects/ | jq .\n{\n // Serialized project document\n}\n```\n\nor even:\n\n```\n$ body=$(cat << EOF\n{\n \"name\": \"Mars Project\",\n \"key\": \"MARS\",\n \"description\": \"Software for colonizing mars.\",\n \"links\": {\n \"avatar\": {\n \"href\": \"http://i.imgur.com/72tRx4w.gif\"\n }\n },\n \"is_private\": false\n}\nEOF\n)\n$ curl -H \"Content-Type: application/json\" \\\n -X POST \\\n -d \"$body\" \\\n https://api.bitbucket.org/2.0/workspaces/teams-in-space/projects/ | jq .\n{\n // Serialized project document\n}\n```", "summary": "Create a project in a workspace", "responses": { "201": { @@ -17841,6 +22014,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "parameters": [ @@ -17858,7 +22038,7 @@ "/workspaces/{workspace}/projects/{project_key}": { "delete": { "tags": ["Projects"], - "description": "Deletes this project. This is an irreversible operation.\n\nYou cannot delete a project that still contains repositories.\nTo delete the project, [delete](/cloud/bitbucket/rest/api-group-repositories/#api-repositories-workspace-repo-slug-delete)\nor transfer the repositories first.\n\nExample:\n```\n$ curl -X DELETE https://api.bitbucket.org/2.0/bbworkspace1/PROJ\n```", + "description": "Deletes this project. This is an irreversible operation.\n\nYou cannot delete a project that still contains repositories.\nTo delete the project, [delete](/cloud/bitbucket/rest/api-group-repositories/#api-repositories-workspace-repo-slug-delete)\nor transfer the repositories first.\n\nExample:\n```\n$ curl -X DELETE https://api.bitbucket.org/2.0/workspaces/bbworkspace1/projects/PROJ\n```", "summary": "Delete a project for a workspace", "responses": { "204": { @@ -17895,6 +22075,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "get": { @@ -17953,6 +22140,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket"] + } ] }, "put": { @@ -18030,6 +22224,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "parameters": [ @@ -18056,7 +22257,7 @@ "/workspaces/{workspace}/projects/{project_key}/branching-model": { "get": { "tags": ["Branching model"], - "description": "Return the branching model set at the project level. This view is\nread-only. The branching model settings can be changed using the\n[settings](#api-workspaces-workspace-projects-project-key-branching-model-settings-get)\nAPI.\n\nThe returned object:\n\n1. Always has a `development` property. `development.name` is\n the user-specified branch that can be inherited by an individual repository's\n branching model.\n2. Might have a `production` property. `production` will not\n be present when `production` is disabled.\n `production.name` is the user-specified branch that can be\n inherited by an individual repository's branching model.\n3. Always has a `branch_types` array which contains all enabled branch\n types.\n\nExample body:\n\n```\n{\n \"development\": {\n \"name\": \"master\",\n \"use_mainbranch\": true\n },\n \"production\": {\n \"name\": \"production\",\n \"use_mainbranch\": false\n },\n \"branch_types\": [\n {\n \"kind\": \"release\",\n \"prefix\": \"release/\"\n },\n {\n \"kind\": \"hotfix\",\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"feature\",\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"bugfix\",\n \"prefix\": \"bugfix/\"\n }\n ],\n \"type\": \"project_branching_model\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/.../branching-model\"\n }\n }\n}\n```", + "description": "Return the branching model set at the project level. This view is\nread-only. The branching model settings can be changed using the\n[settings](#api-workspaces-workspace-projects-project-key-branching-model-settings-get)\nAPI.\n\nThe returned object:\n\n1. Always has a `development` property. `development.name` is\n the user-specified branch that can be inherited by an individual repository's\n branching model.\n2. Might have a `production` property. `production` will not\n be present when `production` is disabled.\n `production.name` is the user-specified branch that can be\n inherited by an individual repository's branching model.\n3. Always has a `branch_types` array which contains all enabled branch\n types.", "summary": "Get the branching model for a project", "responses": { "200": { @@ -18065,6 +22266,44 @@ "application/json": { "schema": { "$ref": "#/components/schemas/project_branching_model" + }, + "examples": { + "response": { + "value": { + "development": { + "name": "master", + "use_mainbranch": true + }, + "production": { + "name": "production", + "use_mainbranch": false + }, + "branch_types": [ + { + "kind": "release", + "prefix": "release/" + }, + { + "kind": "hotfix", + "prefix": "hotfix/" + }, + { + "kind": "feature", + "prefix": "feature/" + }, + { + "kind": "bugfix", + "prefix": "bugfix/" + } + ], + "type": "project_branching_model", + "links": { + "self": { + "href": "https://api.bitbucket.org/.../branching-model" + } + } + } + } } } } @@ -18110,6 +22349,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } ] }, "parameters": [ @@ -18136,7 +22382,7 @@ "/workspaces/{workspace}/projects/{project_key}/branching-model/settings": { "get": { "tags": ["Branching model"], - "description": "Return the branching model configuration for a project. The returned\nobject:\n\n1. Always has a `development` property for the development branch.\n2. Always a `production` property for the production branch. The\n production branch can be disabled.\n3. The `branch_types` contains all the branch types.\n\n\nThis is the raw configuration for the branching model. A client\nwishing to see the branching model with its actual current branches may find the\n[active model API](#api-workspaces-workspace-projects-project-key-branching-model-get)\nmore useful.\n\nExample body:\n\n```\n{\n \"development\": {\n \"name\": null,\n \"use_mainbranch\": true\n },\n \"production\": {\n \"name\": \"production\",\n \"use_mainbranch\": false,\n \"enabled\": false\n },\n \"branch_types\": [\n {\n \"kind\": \"release\",\n \"enabled\": true,\n \"prefix\": \"release/\"\n },\n {\n \"kind\": \"hotfix\",\n \"enabled\": true,\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"feature\",\n \"enabled\": true,\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"bugfix\",\n \"enabled\": false,\n \"prefix\": \"bugfix/\"\n }\n ],\n \"type\": \"branching_model_settings\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/.../branching-model/settings\"\n }\n }\n}\n```", + "description": "Return the branching model configuration for a project. The returned\nobject:\n\n1. Always has a `development` property for the development branch.\n2. Always a `production` property for the production branch. The\n production branch can be disabled.\n3. The `branch_types` contains all the branch types.\n\n\nThis is the raw configuration for the branching model. A client\nwishing to see the branching model with its actual current branches may find the\n[active model API](#api-workspaces-workspace-projects-project-key-branching-model-get)\nmore useful.", "summary": "Get the branching model config for a project", "responses": { "200": { @@ -18145,6 +22391,49 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branching_model_settings" + }, + "examples": { + "response": { + "value": { + "development": { + "name": "null", + "use_mainbranch": true + }, + "production": { + "name": "production", + "use_mainbranch": false, + "enabled": false + }, + "branch_types": [ + { + "kind": "release", + "enabled": true, + "prefix": "release/" + }, + { + "kind": "hotfix", + "enabled": true, + "prefix": "hotfix/" + }, + { + "kind": "feature", + "enabled": true, + "prefix": "feature/" + }, + { + "kind": "bugfix", + "enabled": false, + "prefix": "bugfix/" + } + ], + "type": "branching_model_settings", + "links": { + "self": { + "href": "https://api.bitbucket.org/.../branching-model/settings" + } + } + } + } } } } @@ -18190,11 +22479,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "put": { "tags": ["Branching model"], - "description": "Update the branching model configuration for a project.\n\nThe `development` branch can be configured to a specific branch or to\ntrack the main branch. Any branch name can be supplied, but will only\nsuccessfully be applied to a repository via inheritance if that branch\nexists for that repository. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`development` property will leave the development branch unchanged.\n\nThe `production` branch can be a specific branch, the main\nbranch or disabled. Any branch name can be supplied, but will only\nsuccessfully be applied to a repository via inheritance if that branch\nexists for that repository. The `enabled` property can be used to enable (`true`)\nor disable (`false`) it. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`production` property will leave the production branch unchanged.\n\nThe `branch_types` property contains the branch types to be updated.\nOnly the branch types passed will be updated. All updates will be\nrejected if it would leave the branching model in an invalid state.\nFor branch types this means that:\n\n1. The prefixes for all enabled branch types are valid. For example,\n it is not possible to use '*' inside a Git prefix.\n2. A prefix of an enabled branch type must not be a prefix of another\n enabled branch type. This is to ensure that a branch can be easily\n classified by its prefix unambiguously.\n\nIt is possible to store an invalid prefix if that branch type would be\nleft disabled. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. Each branch type must\nhave a `kind` property to identify it.\n\nExample Body:\n\n```\n {\n \"development\": {\n \"use_mainbranch\": true\n },\n \"production\": {\n \"enabled\": true,\n \"use_mainbranch\": false,\n \"name\": \"production\"\n },\n \"branch_types\": [\n {\n \"kind\": \"bugfix\",\n \"enabled\": true,\n \"prefix\": \"bugfix/\"\n },\n {\n \"kind\": \"feature\",\n \"enabled\": true,\n \"prefix\": \"feature/\"\n },\n {\n \"kind\": \"hotfix\",\n \"prefix\": \"hotfix/\"\n },\n {\n \"kind\": \"release\",\n \"enabled\": false,\n }\n ]\n }\n```", + "description": "Update the branching model configuration for a project.\n\nThe `development` branch can be configured to a specific branch or to\ntrack the main branch. Any branch name can be supplied, but will only\nsuccessfully be applied to a repository via inheritance if that branch\nexists for that repository. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`development` property will leave the development branch unchanged.\n\nThe `production` branch can be a specific branch, the main\nbranch or disabled. Any branch name can be supplied, but will only\nsuccessfully be applied to a repository via inheritance if that branch\nexists for that repository. The `enabled` property can be used to enable (`true`)\nor disable (`false`) it. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. A request without a\n`production` property will leave the production branch unchanged.\n\nThe `branch_types` property contains the branch types to be updated.\nOnly the branch types passed will be updated. All updates will be\nrejected if it would leave the branching model in an invalid state.\nFor branch types this means that:\n\n1. The prefixes for all enabled branch types are valid. For example,\n it is not possible to use '*' inside a Git prefix.\n2. A prefix of an enabled branch type must not be a prefix of another\n enabled branch type. This is to ensure that a branch can be easily\n classified by its prefix unambiguously.\n\nIt is possible to store an invalid prefix if that branch type would be\nleft disabled. Only the passed properties will be updated. The\nproperties not passed will be left unchanged. Each branch type must\nhave a `kind` property to identify it.", "summary": "Update the branching model config for a project", "responses": { "200": { @@ -18203,6 +22499,40 @@ "application/json": { "schema": { "$ref": "#/components/schemas/branching_model_settings" + }, + "examples": { + "response": { + "value": { + "development": { + "use_mainbranch": true + }, + "production": { + "enabled": true, + "use_mainbranch": false, + "name": "production" + }, + "branch_types": [ + { + "kind": "bugfix", + "enabled": true, + "prefix": "bugfix/" + }, + { + "kind": "feature", + "enabled": true, + "prefix": "feature/" + }, + { + "kind": "hotfix", + "prefix": "hotfix/" + }, + { + "kind": "release", + "enabled": false + } + ] + } + } } } } @@ -18258,6 +22588,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "parameters": [ @@ -18284,7 +22621,7 @@ "/workspaces/{workspace}/projects/{project_key}/default-reviewers": { "get": { "tags": ["Projects"], - "description": "Return a list of all default reviewers for a project. This is a list of users that will be added as default\nreviewers to pull requests for any repository within the project.\n\nExample:\n```\n$ curl https://api.bitbucket.org/2.0/.../projects/.../default-reviewers | jq .\n{\n \"pagelen\": 10,\n \"values\": [\n {\n \"user\": {\n \"display_name\": \"Davis Lee\",\n \"uuid\": \"{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}\"\n },\n \"reviewer_type\": \"project\",\n \"type\": \"default_reviewer\"\n },\n {\n \"user\": {\n \"display_name\": \"Jorge Rodriguez\",\n \"uuid\": \"{1aa43376-260d-4a0b-9660-f62672b9655d}\"\n },\n \"reviewer_type\": \"project\",\n \"type\": \"default_reviewer\"\n }\n ],\n \"page\": 1,\n \"size\": 2\n}\n```", + "description": "Return a list of all default reviewers for a project. This is a list of users that will be added as default\nreviewers to pull requests for any repository within the project.", "summary": "List the default reviewers in a project", "responses": { "200": { @@ -18293,6 +22630,33 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_default_reviewer_and_type" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "user": { + "display_name": "Davis Lee", + "uuid": "{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}" + }, + "reviewer_type": "project", + "type": "default_reviewer" + }, + { + "user": { + "display_name": "Jorge Rodriguez", + "uuid": "{1aa43376-260d-4a0b-9660-f62672b9655d}" + }, + "reviewer_type": "project", + "type": "default_reviewer" + } + ], + "page": 1, + "size": 2 + } + } } } } @@ -18328,6 +22692,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "parameters": [ @@ -18358,7 +22729,7 @@ "summary": "Remove the specific user from the project's default reviewers", "responses": { "204": { - "description": "The specified user was removed from the list of project default reviewers" + "description": "The specified user was removed from the list of project default reviewers" }, "400": { "description": "If the specified user is not a default reviewer for the project", @@ -18401,11 +22772,18 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "get": { "tags": ["Projects"], - "description": "Returns the specified default reviewer.\n\nExample:\n```\n$ curl https://api.bitbucket.org/2.0/.../default-reviewers/%7Bf0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6%7D\n{\n \"display_name\": \"Davis Lee\",\n \"type\": \"user\",\n \"uuid\": \"{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}\"\n}\n```", + "description": "Returns the specified default reviewer.", "summary": "Get a default reviewer", "responses": { "200": { @@ -18414,6 +22792,15 @@ "application/json": { "schema": { "$ref": "#/components/schemas/user" + }, + "examples": { + "response": { + "value": { + "display_name": "Davis Lee", + "type": "user", + "uuid": "{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}" + } + } } } } @@ -18459,19 +22846,48 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:pullrequest:bitbucket"] + } ] }, "put": { "tags": ["Projects"], - "description": "Adds the specified user to the project's list of default reviewers. The method is\nidempotent. Accepts an optional body containing the `uuid` of the user to be added.\n\nExample:\n```\n$ curl -XPUT https://api.bitbucket.org/2.0/.../default-reviewers/%7Bf0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6%7D\n-d { 'uuid': '{f0e0e8e9-66c1-4b85-a784-44a9eb9ef1a6}' }\n\nHTTP/1.1 204\n```", + "description": "Adds the specified user to the project's list of default reviewers. The method is\nidempotent. Accepts an optional body containing the `uuid` of the user to be added.", "summary": "Add the specific user as a default reviewer for the project", "responses": { - "204": { + "200": { "description": "The specified user was added as a project default reviewer", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/user" + }, + "examples": { + "response": { + "value": { + "display_name": "Yaniv Sagy", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/users/%7Bdd5db7f2-6389-458d-a62a-716773910b7a%7D" + }, + "avatar": { + "href": "https://secure.gravatar.com/avatar/YS-2.png" + }, + "html": { + "href": "https://api.bitbucket.org/%7Bdd5db7f2-6389-458d-a62a-716773910b7a%7D/" + } + }, + "type": "user", + "uuid": "{dd5db7f2-6389-458d-a62a-716773910b7a}", + "account_id": "712020:4efe52fa-b4b4-475b-9eb0-c0a23b7eb194", + "nickname": "Yaniv Sagy" + } + } } } } @@ -18517,6 +22933,13 @@ { "api_key": [] } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["admin:project:bitbucket"] + } ] }, "parameters": [ @@ -18552,7 +22975,7 @@ "/workspaces/{workspace}/projects/{project_key}/deploy-keys": { "get": { "tags": ["Deployments"], - "description": "Returns all deploy keys belonging to a project.\n\nExample:\n```\n$ curl -H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys\n\nOutput:\n{\n \"pagelen\":10,\n \"values\":[\n {\n \"comment\":\"thakseth@C02W454JHTD8\",\n \"last_used\":null,\n \"links\":{\n \"self\":{\n \"href\":\"https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/1234\"\n }\n },\n \"label\":\"test\",\n \"project\":{\n \"links\":{\n \"self\":{\n \"href\":\"https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT\"\n }\n },\n \"type\":\"project\",\n \"name\":\"cooperative standard\",\n \"key\":\"TEST_PROJECT\",\n \"uuid\":\"{3b3e510b-7f2b-414d-a2b7-76c4e405c1c0}\"\n },\n \"created_on\":\"2021-07-28T21:20:19.491721+00:00\",\n \"key\":\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDX5yfMOEw6HG9jKTYTisbmDTJ4MCUTSVGr5e4OWvY3UuI2A6F8SdzQqa2f5BABA/4g5Sk5awJrYHlNu3EzV1V2I44tR3A4fnZAG71ZKyDPi1wvdO7UYmFgxV/Vd18H9QZFFjICGDM7W0PT2mI0kON/jN3qNWi+GiB/xgaeQKSqynysdysDp8lnnI/8Sh3ikURP9UP83ShRCpAXszOUNaa+UUlcYQYBDLIGowsg51c4PCkC3DNhAMxppkNRKoSOWwyl+oRVXHSDylkiJSBHW3HH4Q6WHieD54kGrjbhWBKdnnxKX7QAAZBDseY+t01N36m6/ljvXSUEcBWtHxBYye0r\",\n \"type\":\"project_deploy_key\",\n \"id\":1234\n }\n ],\n \"page\":1,\n \"size\":1\n}\n```", + "description": "Returns all deploy keys belonging to a project.", "summary": "List project deploy keys", "responses": { "200": { @@ -18561,6 +22984,42 @@ "application/json": { "schema": { "$ref": "#/components/schemas/paginated_project_deploy_keys" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "comment": "thakseth@C02W454JHTD8", + "last_used": null, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/1234" + } + }, + "label": "test", + "project": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT" + } + }, + "type": "project", + "name": "cooperative standard", + "key": "TEST_PROJECT", + "uuid": "{3b3e510b-7f2b-414d-a2b7-76c4e405c1c0}" + }, + "created_on": "2021-07-28T21:20:19.491721+00:00", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDX5yfMOEw6HG9jKTYTisbmDTJ4MCUTSVGr5e4OWvY3UuI2A6F8SdzQqa2f5BABA/4g5Sk5awJrYHlNu3EzV1V2I44tR3A4fnZAG71ZKyDPi1wvdO7UYmFgxV/Vd18H9QZFFjICGDM7W0PT2mI0kON/jN3qNWi+GiB/xgaeQKSqynysdysDp8lnnI/8Sh3ikURP9UP83ShRCpAXszOUNaa+UUlcYQYBDLIGowsg51c4PCkC3DNhAMxppkNRKoSOWwyl+oRVXHSDylkiJSBHW3HH4Q6WHieD54kGrjbhWBKdnnxKX7QAAZBDseY+t01N36m6/ljvXSUEcBWtHxBYye0r", + "type": "project_deploy_key", + "id": 1234 + } + ], + "page": 1, + "size": 1 + } + } } } } @@ -18600,7 +23059,7 @@ }, "post": { "tags": ["Deployments"], - "description": "Create a new deploy key in a project.\n\nExample:\n```\n$ curl -XPOST \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/workspaces/jzeng/projects/JZ/deploy-keys/ -d \\\n'{\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 mleu@C02W454JHTD8\",\n \"label\": \"mydeploykey\"\n}'\n\nOutput:\n{\n \"comment\": \"mleu@C02W454JHTD8\",\n \"last_used\": null,\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/workspaces/testadfsa/projects/ASDF/deploy-keys/5/\"\n }\n },\n \"label\": \"myprojectkey\",\n \"project\": {\n ...\n },\n \"created_on\": \"2021-08-10T05:28:00.570859+00:00\",\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5\",\n \"type\": \"project_deploy_key\",\n \"id\": 5\n}\n```", + "description": "Create a new deploy key in a project.\n\nExample:\n```\n$ curl -X POST \\\n-H \"Authorization \" \\\n-H \"Content-type: application/json\" \\\nhttps://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/ -d \\\n'{\n \"key\": \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5 mleu@C02W454JHTD8\",\n \"label\": \"mydeploykey\"\n}'\n```", "summary": "Create a project deploy key", "responses": { "200": { @@ -18609,6 +23068,35 @@ "application/json": { "schema": { "$ref": "#/components/schemas/project_deploy_key" + }, + "examples": { + "response": { + "value": { + "comment": "mleu@C02W454JHTD8", + "last_used": null, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/5/" + } + }, + "label": "myprojectkey", + "project": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT" + } + }, + "type": "project", + "name": "cooperative standard", + "key": "TEST_PROJECT", + "uuid": "{3b3e510b-7f2b-414d-a2b7-76c4e405c1c0}" + }, + "created_on": "2021-08-10T05:28:00.570859+00:00", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAK/b1cHHDr/TEV1JGQl+WjCwStKG6Bhrv0rFpEsYlyTBm1fzN0VOJJYn4ZOPCPJwqse6fGbXntEs+BbXiptR+++HycVgl65TMR0b5ul5AgwrVdZdT7qjCOCgaSV74/9xlHDK8oqgGnfA7ZoBBU+qpVyaloSjBdJfLtPY/xqj4yHnXKYzrtn/uFc4Kp9Tb7PUg9Io3qohSTGJGVHnsVblq/rToJG7L5xIo0OxK0SJSQ5vuId93ZuFZrCNMXj8JDHZeSEtjJzpRCBEXHxpOPhAcbm4MzULgkFHhAVgp4JbkrT99/wpvZ7r9AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", + "type": "project_deploy_key", + "id": 5 + } + } } } } @@ -18680,7 +23168,7 @@ "/workspaces/{workspace}/projects/{project_key}/deploy-keys/{key_id}": { "delete": { "tags": ["Deployments"], - "description": "This deletes a deploy key from a project.\n\nExample:\n```\n$ curl -XDELETE \\\n-H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/workspaces/jzeng/projects/JZ/deploy-keys/1234\n```", + "description": "This deletes a deploy key from a project.", "summary": "Delete a deploy key from a project", "responses": { "204": { @@ -18721,7 +23209,7 @@ }, "get": { "tags": ["Deployments"], - "description": "Returns the deploy key belonging to a specific key ID.\n\nExample:\n```\n$ curl -H \"Authorization \" \\\nhttps://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/1234\n\nOutput:\n{\n \"pagelen\":10,\n \"values\":[\n {\n \"comment\":\"thakseth@C02W454JHTD8\",\n \"last_used\":null,\n \"links\":{\n \"self\":{\n \"href\":\"https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/1234\"\n }\n },\n \"label\":\"test\",\n \"project\":{\n \"links\":{\n \"self\":{\n \"href\":\"https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT\"\n }\n },\n \"type\":\"project\",\n \"name\":\"cooperative standard\",\n \"key\":\"TEST_PROJECT\",\n \"uuid\":\"{3b3e510b-7f2b-414d-a2b7-76c4e405c1c0}\"\n },\n \"created_on\":\"2021-07-28T21:20:19.491721+00:00\",\n \"key\":\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDX5yfMOEw6HG9jKTYTisbmDTJ4MCUTSVGr5e4OWvY3UuI2A6F8SdzQqa2f5BABA/4g5Sk5awJrYHlNu3EzV1V2I44tR3A4fnZAG71ZKyDPi1wvdO7UYmFgxV/Vd18H9QZFFjICGDM7W0PT2mI0kON/jN3qNWi+GiB/xgaeQKSqynysdysDp8lnnI/8Sh3ikURP9UP83ShRCpAXszOUNaa+UUlcYQYBDLIGowsg51c4PCkC3DNhAMxppkNRKoSOWwyl+oRVXHSDylkiJSBHW3HH4Q6WHieD54kGrjbhWBKdnnxKX7QAAZBDseY+t01N36m6/ljvXSUEcBWtHxBYye0r\",\n \"type\":\"project_deploy_key\",\n \"id\":1234\n }\n ],\n}\n```", + "description": "Returns the deploy key belonging to a specific key ID.", "summary": "Get a project deploy key", "responses": { "200": { @@ -18730,6 +23218,40 @@ "application/json": { "schema": { "$ref": "#/components/schemas/project_deploy_key" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "comment": "thakseth@C02W454JHTD8", + "last_used": null, + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT/deploy-keys/1234" + } + }, + "label": "test", + "project": { + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/standard/projects/TEST_PROJECT" + } + }, + "type": "project", + "name": "cooperative standard", + "key": "TEST_PROJECT", + "uuid": "{3b3e510b-7f2b-414d-a2b7-76c4e405c1c0}" + }, + "created_on": "2021-07-28T21:20:19.491721+00:00", + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDX5yfMOEw6HG9jKTYTisbmDTJ4MCUTSVGr5e4OWvY3UuI2A6F8SdzQqa2f5BABA/4g5Sk5awJrYHlNu3EzV1V2I44tR3A4fnZAG71ZKyDPi1wvdO7UYmFgxV/Vd18H9QZFFjICGDM7W0PT2mI0kON/jN3qNWi+GiB/xgaeQKSqynysdysDp8lnnI/8Sh3ikURP9UP83ShRCpAXszOUNaa+UUlcYQYBDLIGowsg51c4PCkC3DNhAMxppkNRKoSOWwyl+oRVXHSDylkiJSBHW3HH4Q6WHieD54kGrjbhWBKdnnxKX7QAAZBDseY+t01N36m6/ljvXSUEcBWtHxBYye0r", + "type": "project_deploy_key", + "id": 1234 + } + ] + } + } } } } @@ -18797,11 +23319,795 @@ } ] }, + "/workspaces/{workspace}/projects/{project_key}/permissions-config/groups": { + "get": { + "tags": ["Projects"], + "description": "Returns a paginated list of explicit group permissions for the given project.\nThis endpoint does not support BBQL features.", + "summary": "List explicit group permissions for a project", + "responses": { + "200": { + "description": "Paginated list of project group permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/paginated_project_group_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "project_group_permission", + "group": { + "type": "group", + "name": "Administrators", + "slug": "administrators" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/groups/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + }, + { + "type": "project_group_permission", + "group": { + "type": "group", + "name": "Developers", + "slug": "developers" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/groups/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c" + } + } + } + ], + "page": 1, + "size": 2 + } + } + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The user doesn't have admin access to the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or both of the workspace and project don't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket", "read:user:bitbucket"] + } + ] + }, + "parameters": [ + { + "name": "project_key", + "in": "path", + "description": "The project in question. This is the actual key assigned to the project.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/workspaces/{workspace}/projects/{project_key}/permissions-config/groups/{group_slug}": { + "delete": { + "tags": ["Projects"], + "description": "Deletes the project group permission between the requested project and group, if one exists.\n\nOnly users with admin permission for the project may access this resource.", + "summary": "Delete an explicit group permission for a project", + "responses": { + "204": { + "description": "The project group permission was deleted and no content returned." + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The requesting user isn't an admin of the project, or the authentication method was not via app password.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and group doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + }, + "get": { + "tags": ["Projects"], + "description": "Returns the group permission for a given group and project.\n\nOnly users with admin permission for the project may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `create-repo`\n* `write`\n* `read`\n* `none`", + "summary": "Get an explicit group permission for a project", + "responses": { + "200": { + "description": "Project group permission", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project_group_permission" + }, + "examples": { + "response": { + "value": { + "type": "project_group_permission", + "group": { + "type": "group", + "name": "Administrators", + "slug": "administrators" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/groups/administrators" + } + } + } + } + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The user doesn't have admin access to the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and group doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket", "read:user:bitbucket"] + } + ] + }, + "put": { + "tags": ["Projects"], + "description": "Updates the group permission, or grants a new permission if one does not already exist.\n\nOnly users with admin permission for the project may access this resource.\n\nDue to security concerns, the JWT and OAuth authentication methods are unsupported.\nThis is to ensure integrations and add-ons are not allowed to change permissions.\n\nPermissions can be:\n\n* `admin`\n* `create-repo`\n* `write`\n* `read`", + "summary": "Update an explicit group permission for a project", + "responses": { + "200": { + "description": "Project group permission updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project_group_permission" + }, + "examples": { + "response": { + "value": { + "type": "project_group_permission", + "group": { + "type": "group", + "name": "Administrators", + "slug": "administrators" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/groups/administrators" + } + } + } + } + } + } + } + }, + "400": { + "description": "No permission value was provided or the value is invalid(not one of read, write, create-repo, or admin).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "402": { + "description": "You have reached your plan's user limit and must upgrade before giving access to additional users.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The requesting user isn't an admin of the project, or the authentication method was not via app password.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and group doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "requestBody": { + "$ref": "#/components/requestBodies/bitbucket.apps.permissions.serializers.ProjectPermissionUpdateSchema" + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + }, + "parameters": [ + { + "name": "group_slug", + "in": "path", + "description": "Slug of the requested group.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "project_key", + "in": "path", + "description": "The project in question. This is the actual key assigned to the project.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/workspaces/{workspace}/projects/{project_key}/permissions-config/users": { + "get": { + "tags": ["Projects"], + "description": "Returns a paginated list of explicit user permissions for the given project.\nThis endpoint does not support BBQL features.", + "summary": "List explicit user permissions for a project", + "responses": { + "200": { + "description": "Paginated list of explicit user permissions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/paginated_project_user_permissions" + }, + "examples": { + "response": { + "value": { + "pagelen": 10, + "values": [ + { + "type": "project_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + }, + { + "type": "project_user_permission", + "user": { + "type": "user", + "display_name": "Sean Conaty", + "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324c" + } + } + } + ], + "page": 1, + "size": 2 + } + } + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The user doesn't have admin access to the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or both of the workspace and project don't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket", "read:user:bitbucket"] + } + ] + }, + "parameters": [ + { + "name": "project_key", + "in": "path", + "description": "The project in question. This is the actual key assigned to the project.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/workspaces/{workspace}/projects/{project_key}/permissions-config/users/{selected_user_id}": { + "delete": { + "tags": ["Projects"], + "description": "Deletes the project user permission between the requested project and user, if one exists.\n\nOnly users with admin permission for the project may access this resource.\n\nDue to security concerns, the JWT and OAuth authentication methods are unsupported.\nThis is to ensure integrations and add-ons are not allowed to change permissions.", + "summary": "Delete an explicit user permission for a project", + "responses": { + "204": { + "description": "The project user permission was deleted and no content returned." + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The requesting user isn't an admin of the project, or the authentication method was not via app password.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and selected user doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + }, + "get": { + "tags": ["Projects"], + "description": "Returns the explicit user permission for a given user and project.\n\nOnly users with admin permission for the project may access this resource.\n\nPermissions can be:\n\n* `admin`\n* `create-repo`\n* `write`\n* `read`\n* `none`", + "summary": "Get an explicit user permission for a project", + "responses": { + "200": { + "description": "Explicit user permission for user and project", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project_user_permission" + }, + "examples": { + "response": { + "value": { + "type": "project_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + }, + "permission": "admin", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + } + } + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The requesting user isn't an admin of the project.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and selected user doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ], + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:project:bitbucket", "read:user:bitbucket"] + } + ] + }, + "put": { + "tags": ["Projects"], + "description": "Updates the explicit user permission for a given user and project. The selected\nuser must be a member of the workspace, and cannot be the workspace owner.\n\nOnly users with admin permission for the project may access this resource.\n\nDue to security concerns, the JWT and OAuth authentication methods are unsupported.\nThis is to ensure integrations and add-ons are not allowed to change permissions.\n\nPermissions can be:\n\n* `admin`\n* `create-repo`\n* `write`\n* `read`", + "summary": "Update an explicit user permission for a project", + "responses": { + "200": { + "description": "Explicit user permission updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project_user_permission" + }, + "examples": { + "response": { + "value": { + "type": "project_user_permission", + "user": { + "type": "user", + "display_name": "Colin Cameron", + "uuid": "{d301aafa-d676-4ee0-88be-962be7417567}", + "account_id": "557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + }, + "permission": "write", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/workspaces/atlassian_tutorial/projects/PRJ/permissions-config/users/557058:ba8948b2-49da-43a9-9e8b-e7249b8e324a" + } + } + } + } + } + } + } + }, + "400": { + "description": "No permission value was provided or the value is invalid (not one of read, write, create-repo, or admin)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "The user couldn't be authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "402": { + "description": "You have reached your plan's user limit and must upgrade before giving access to additional users.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "403": { + "description": "The requesting user isn't an admin of the project, or the authentication method was not via app password.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "One or more of the workspace, project, and selected user doesn't exist for the given identifiers or the requesting user is not authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "requestBody": { + "$ref": "#/components/requestBodies/bitbucket.apps.permissions.serializers.ProjectPermissionUpdateSchema" + }, + "security": [ + { + "oauth2": ["project:admin"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] + }, + "parameters": [ + { + "name": "project_key", + "in": "path", + "description": "The project in question. This is the actual key assigned to the project.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "selected_user_id", + "in": "path", + "description": "This can either be the username, the user's UUID surrounded by curly-braces,\nfor example: {account UUID}, or the user's Atlassian ID.\n", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "path", + "description": "This can either be the workspace ID (slug) or the workspace UUID\nsurrounded by curly-braces, for example: `{workspace UUID}`.\n", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, "/workspaces/{workspace}/search/code": { "get": { "tags": ["Search"], "summary": "Search for code in a workspace", - "description": "Search for code in the repositories of the specified workspace.\n\nSearching across all repositories:\n\n```\ncurl 'https://api.bitbucket.org/2.0/workspaces/workspace_slug_or_uuid/search/code?search_query=foo'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 2,\n \"content_matches\": [\n {\n \"lines\": [\n {\n \"line\": 2,\n \"segments\": []\n },\n {\n \"line\": 3,\n \"segments\": [\n {\n \"text\": \"def \"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \"():\"\n }\n ]\n },\n {\n \"line\": 4,\n \"segments\": [\n {\n \"text\": \" print(\\\"snek\\\")\"\n }\n ]\n },\n {\n \"line\": 5,\n \"segments\": []\n }\n ]\n }\n ],\n \"path_matches\": [\n {\n \"text\": \"src/\"\n },\n {\n \"text\": \"foo\",\n \"match\": true\n },\n {\n \"text\": \".py\"\n }\n ],\n \"file\": {\n \"path\": \"src/foo.py\",\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n }\n }\n }\n ]\n}\n```\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both as in the example above.\n\nYou can use the same syntax for the search query as in the UI, e.g.\nto only search within a specific repository:\n\n```\ncurl 'https://api.bitbucket.org/2.0/workspaces/my-workspace/search/code?search_query=foo+repo:demo'\n# results from the \"demo\" repository\n```\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files (the `%2B` is a URL-encoded `+`):\n\n```\ncurl 'https://api.bitbucket.org/2.0/workspaces/my-workspace/search/code'\\\n '?search_query=foo&fields=%2Bvalues.file.commit.repository'\n{\n \"size\": 1,\n \"page\": 1,\n \"pagelen\": 10,\n \"query_substituted\": false,\n \"values\": [\n {\n \"type\": \"code_search_result\",\n \"content_match_count\": 1,\n \"content_matches\": [...],\n \"path_matches\": [...],\n \"file\": {\n \"commit\": {\n \"type\": \"commit\",\n \"hash\": \"ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/commit/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo/commits/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b\"\n }\n },\n \"repository\": {\n \"name\": \"demo\",\n \"type\": \"repository\",\n \"full_name\": \"my-workspace/demo\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo\"\n },\n \"html\": {\n \"href\": \"https://bitbucket.org/my-workspace/demo\"\n },\n \"avatar\": {\n \"href\": \"https://bytebucket.org/ravatar/%7B850e1749-781a-4115-9316-df39d0600e7a%7D?ts=default\"\n }\n },\n \"uuid\": \"{850e1749-781a-4115-9316-df39d0600e7a}\"\n }\n },\n \"type\": \"commit_file\",\n \"links\": {\n \"self\": {\n \"href\": \"https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py\"\n }\n },\n \"path\": \"src/foo.py\"\n }\n }\n ]\n}\n```\n\nTry `fields=%2Bvalues.*.*.*.*` to get an idea what's possible.\n", + "description": "Search for code in the repositories of the specified workspace.\n\nNote that searches can match in the file's text (`content_matches`),\nthe path (`path_matches`), or both.\n\nYou can use the same syntax for the search query as in the UI.\nE.g. to search for \"foo\" only within the repository \"demo\",\nuse the query parameter `search_query=foo+repo:demo`.\n\nSimilar to other APIs, you can request more fields using a\n`fields` query parameter. E.g. to get some more information about\nthe repository of matched files, use the query parameter\n`search_query=foo&fields=%2Bvalues.file.commit.repository`\n(the `%2B` is a URL-encoded `+`).\n\nTry `fields=%2Bvalues.*.*.*.*` to get an idea what's possible.\n", "operationId": "searchWorkspace", "parameters": [ { @@ -18852,6 +24158,80 @@ "application/json": { "schema": { "$ref": "#/components/schemas/search_result_page" + }, + "examples": { + "response": { + "value": { + "size": 1, + "page": 1, + "pagelen": 10, + "query_substituted": false, + "values": [ + { + "type": "code_search_result", + "content_match_count": 2, + "content_matches": [ + { + "lines": [ + { + "line": 2, + "segments": [] + }, + { + "line": 3, + "segments": [ + { + "text": "def " + }, + { + "text": "foo", + "match": true + }, + { + "text": "():" + } + ] + }, + { + "line": 4, + "segments": [ + { + "text": " print(\"snek\")" + } + ] + }, + { + "line": 5, + "segments": [] + } + ] + } + ], + "path_matches": [ + { + "text": "src/" + }, + { + "text": "foo", + "match": true + }, + { + "text": ".py" + } + ], + "file": { + "path": "src/foo.py", + "type": "commit_file", + "links": { + "self": { + "href": "https://api.bitbucket.org/2.0/repositories/my-workspace/demo/src/ad6964b5fe2880dbd9ddcad1c89000f1dbcbc24b/src/foo.py" + } + } + } + } + ] + } + } } } } @@ -18886,7 +24266,25 @@ } } } - } + }, + "x-atlassian-oauth2-scopes": [ + { + "state": "Current", + "scheme": "oauth2", + "scopes": ["read:repository:bitbucket"] + } + ], + "security": [ + { + "oauth2": ["repository"] + }, + { + "basic": [] + }, + { + "api_key": [] + } + ] } } }, @@ -18921,7 +24319,7 @@ }, { "name": "Issue tracker", - "description": "The issue resources provide functionality for getting information on\nissues in an issue tracker, creating new issues, updating them and deleting\nthem.\n\nYou can access public issues without authentication, but you can't gain access\nto private repositories' issues. By authenticating, you will get the ability\nto create issues, as well as access to updating data or deleting issues you\nhave access to.\n" + "description": "The issue resources provide functionality for getting information on\nissues in an issue tracker, creating new issues, updating them and deleting\nthem.\n\nYou can access public issues without authentication, but you can't gain access\nto private repositories' issues. By authenticating, you will get the ability\nto create issues, as well as access to updating data or deleting issues you\nhave access to. Issue Tracker features are not supported for repositories in workspaces administered through admin.atlassian.com.\n" }, { "name": "Pipelines", @@ -18980,7 +24378,7 @@ "description": "A workspace is where you create repositories, collaborate on\nyour code, and organize different streams of work in your Bitbucket\nCloud account. Workspaces replace the use of teams and users in API\ncalls.\n" } ], - "x-revision": "607fbe8bfcb2", + "x-revision": "d8aa33b24a80", "x-atlassian-narrative": { "documents": [ { @@ -18988,7 +24386,7 @@ "title": "Authentication methods", "description": "How to authenticate API actions", "icon": "data:image/svg+xml;base64,b'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTcuNjQ3MyAxODYuODEzOCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlOwogICAgICB9CgogICAgICAuY2xzLTIgewogICAgICAgIGZpbGw6ICNkZTM1MGI7CiAgICAgIH0KCiAgICAgIC5jbHMtMyB7CiAgICAgICAgZmlsbDogI2ZmNTYzMDsKICAgICAgfQoKICAgICAgLmNscy00IHsKICAgICAgICBmaWxsOiAjZGZlMWU1OwogICAgICAgIG1peC1ibGVuZC1tb2RlOiBtdWx0aXBseTsKICAgICAgfQoKICAgICAgLmNscy01IHsKICAgICAgICBmaWxsOiAjZmFmYmZjOwogICAgICB9CgogICAgICAuY2xzLTYgewogICAgICAgIGZpbGw6ICNlYmVjZjA7CiAgICAgIH0KCiAgICAgIC5jbHMtNyB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICMwMDY1ZmY7CiAgICAgICAgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOwogICAgICAgIHN0cm9rZS13aWR0aDogMnB4OwogICAgICB9CgogICAgICAuY2xzLTggewogICAgICAgIGZpbGw6ICM1ZTZjODQ7CiAgICAgIH0KCiAgICAgIC5jbHMtOSB7CiAgICAgICAgZmlsbDogIzI1Mzg1ODsKICAgICAgfQoKICAgICAgLmNscy0xMCB7CiAgICAgICAgZmlsbDogIzI2ODRmZjsKICAgICAgfQoKICAgICAgLmNscy0xMSB7CiAgICAgICAgZmlsbDogIzAwNjVmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2RlZnM+CiAgPHRpdGxlPlNlY3VyaXR5IHdpdGggS2V5PC90aXRsZT4KICA8ZyBjbGFzcz0iY2xzLTEiPgogICAgPGcgaWQ9IkxheWVyXzIiIGRhdGEtbmFtZT0iTGF5ZXIgMiI+CiAgICAgIDxnIGlkPSJPYmplY3RzIj4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik00Mi4wNjcyLDBoLjYxMTRhOCw4LDAsMCwxLDgsOFYyMy4yMzM4YTAsMCwwLDAsMSwwLDBIMzQuMDY3MmEwLDAsMCwwLDEsMCwwVjhBOCw4LDAsMCwxLDQyLjA2NzIsMFoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xMDguMjIsMGguNjExNGE4LDgsMCwwLDEsOCw4VjIzLjIzMzhhMCwwLDAsMCwxLDAsMEgxMDAuMjJhMCwwLDAsMCwxLDAsMFY4QTgsOCwwLDAsMSwxMDguMjIsMFoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xNzQuMzcyMiwwaC42MTE0YTgsOCwwLDAsMSw4LDhWMjMuMjMzOGEwLDAsMCwwLDEsMCwwSDE2Ni4zNzIyYTAsMCwwLDAsMSwwLDBWOEE4LDgsMCwwLDEsMTc0LjM3MjIsMFoiLz4KICAgICAgICA8cmVjdCBjbGFzcz0iY2xzLTIiIHg9IjM0LjA2NzIiIHk9IjIzLjIzMzgiIHdpZHRoPSIxNjMuNTgiIGhlaWdodD0iMTYzLjU4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNDIuMDY3MiwwSDU5LjI5YTgsOCwwLDAsMSw4LDhWMjMuMjIyOGEwLDAsMCwwLDEsMCwwSDM0LjA2NzJhMCwwLDAsMCwxLDAsMFY4YTgsOCwwLDAsMSw4LThaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTA3LjI0NTgsMGgxNy4yMjI4YTgsOCwwLDAsMSw4LDhWMjMuMjIyOGEwLDAsMCwwLDEsMCwwSDk5LjI0NThhMCwwLDAsMCwxLDAsMFY4YTgsOCwwLDAsMSw4LThaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTcyLjQyNDQsMGgxNy4yMjI4YTgsOCwwLDAsMSw4LDhWMjMuMjIyOGEwLDAsMCwwLDEsMCwwSDE2NC40MjQ0YTAsMCwwLDAsMSwwLDBWOGE4LDgsMCwwLDEsOC04WiIvPgogICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtMyIgeD0iMTcuNDU1OCIgeT0iMjMuMjMzOCIgd2lkdGg9IjE2My41OCIgaGVpZ2h0PSIxNjMuNTgiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS40NTU4LDBINDIuNjc4NmE4LDgsMCwwLDEsOCw4VjIzLjIyMjhhMCwwLDAsMCwxLDAsMEgxNy40NTU4YTAsMCwwLDAsMSwwLDBWOEE4LDgsMCwwLDEsMjUuNDU1OCwwWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTkwLjYzNDQsMGgxNy4yMjI4YTgsOCwwLDAsMSw4LDhWMjMuMjIyOGEwLDAsMCwwLDEsMCwwSDgyLjYzNDRhMCwwLDAsMCwxLDAsMFY4QTgsOCwwLDAsMSw5MC42MzQ0LDBaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTU1LjgxMywwaDE3LjIyMjhhOCw4LDAsMCwxLDgsOFYyMy4yMjI4YTAsMCwwLDAsMSwwLDBIMTQ3LjgxM2EwLDAsMCwwLDEsMCwwVjhBOCw4LDAsMCwxLDE1NS44MTMsMFoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS40NTU4LDBINDIuNjc4NmE4LDgsMCwwLDEsOCw4VjIzLjIyMjhhMCwwLDAsMCwxLDAsMEgxNy40NTU4YTAsMCwwLDAsMSwwLDBWOEE4LDgsMCwwLDEsMjUuNDU1OCwwWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTkwLjYzNDQsMGgxNy4yMjI4YTgsOCwwLDAsMSw4LDhWMjMuMjIyOGEwLDAsMCwwLDEsMCwwSDgyLjYzNDRhMCwwLDAsMCwxLDAsMFY4QTgsOCwwLDAsMSw5MC42MzQ0LDBaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTU1LjgxMywwaDE3LjIyMjhhOCw4LDAsMCwxLDgsOFYyMy4yMjI4YTAsMCwwLDAsMSwwLDBIMTQ3LjgxM2EwLDAsMCwwLDEsMCwwVjhBOCw4LDAsMCwxLDE1NS44MTMsMFoiLz4KICAgICAgICA8cmVjdCBjbGFzcz0iY2xzLTIiIHg9IjM1Ljc1OTYiIHk9IjU2LjgwNjUiIHdpZHRoPSIzMy4yMjI4IiBoZWlnaHQ9IjE1LjYwMzgiLz4KICAgICAgICA8cmVjdCBjbGFzcz0iY2xzLTIiIHg9IjEzMS4yMDE2IiB5PSIxMzYuOTYxNSIgd2lkdGg9IjMzLjIyMjgiIGhlaWdodD0iMTUuNjAzOCIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjM3MDksNzEuNjAzNmg3MC43NWE5LDksMCwwLDEsOSw5djM1LjM3NDlhNDQuMzc0OCw0NC4zNzQ4LDAsMCwxLTQ0LjM3NDgsNDQuMzc0OGgwYTQ0LjM3NDgsNDQuMzc0OCwwLDAsMS00NC4zNzQ4LTQ0LjM3NDhWODAuNjAzNkE5LDksMCwwLDEsNTcuMzcwOSw3MS42MDM2WiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNSIgZD0iTTY2LjM3MSw2Ni42NjE3aDcwLjc1YTksOSwwLDAsMSw5LDl2MzUuMzc0OWE0NC4zNzQ4LDQ0LjM3NDgsMCwwLDEtNDQuMzc0OCw0NC4zNzQ4aDBBNDQuMzc0OCw0NC4zNzQ4LDAsMCwxLDU3LjM3MSwxMTEuMDM2NlY3NS42NjE3YTksOSwwLDAsMSw5LTlaIi8+CiAgICAgICAgPHBhdGggaWQ9Il9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTYiIGQ9Ik02MS4zNzEsNjYuNjYxN2g3MC43NWE5LDksMCwwLDEsOSw5djM1LjM3NDlhNDQuMzc0OCw0NC4zNzQ4LDAsMCwxLTQ0LjM3NDgsNDQuMzc0OGgwQTQ0LjM3NDgsNDQuMzc0OCwwLDAsMSw1Mi4zNzEsMTExLjAzNjZWNzUuNjYxN0E5LDksMCwwLDEsNjEuMzcxLDY2LjY2MTdaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy03IiBkPSJNOTYuNzQ1OSwxNDcuNzQ0MWEzNi43NDg3LDM2Ljc0ODcsMCwwLDEtMzYuNzA3NC0zNi43MDc0Vjc4LjA1ODRhMy43MzMzLDMuNzMzMywwLDAsMSwzLjcyOS0zLjcyOWg2NS45NTYzYTMuNzMzMywzLjczMzMsMCwwLDEsMy43MjksMy43Mjl2MzIuOTc4NEEzNi43NDg2LDM2Ljc0ODYsMCwwLDEsOTYuNzQ1OSwxNDcuNzQ0MVoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0xMDAuNjg5MywxNjMuMzE2N1YxMTEuMDk3M2EzLjk0NDMsMy45NDQzLDAsMCwwLTcuODg4NywwdjUyLjIyYTIyLjUyNTIsMjIuNTI1MiwwLDAsMC0xOC41NDc5LDIyLjE0YzAsLjQ1Ni4wMTc4LjkwNzguMDQ0NywxLjM1NzFIODIuMjFjLS4wNDE0LS40NDc0LS4wNjg4LS44OTktLjA2ODgtMS4zNTcxYTE0LjYyLDE0LjYyLDAsMCwxLDE0LjU5NzQtMTQuNjA0MWwuMDA2MS4wMDA2LjAwNjgtLjAwMDdBMTQuNjIxMSwxNC42MjExLDAsMCwxLDExMS4zNSwxODUuNDU2NmMwLC40NTgxLS4wMjczLjkxLS4wNjg4LDEuMzU3MWg3LjkxMjhjLjAyNjktLjQ0OTMuMDQ0Ny0uOTAxMS4wNDQ3LTEuMzU3MUEyMi41MjU5LDIyLjUyNTksMCwwLDAsMTAwLjY4OTMsMTYzLjMxNjdaIi8+CiAgICAgICAgPHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxNy40NTU4IiB5PSIzNi40NzAyIiB3aWR0aD0iMzMuMjIyOCIgaGVpZ2h0PSIxNS42MDM4Ii8+CiAgICAgICAgPHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxNy40NTU4IiB5PSIxNTguMTIxNyIgd2lkdGg9IjMzLjIyMjgiIGhlaWdodD0iMTUuNjAzOCIvPgogICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtMiIgeD0iMTQ3LjgxMyIgeT0iMzYuNDcwMiIgd2lkdGg9IjMzLjIyMjgiIGhlaWdodD0iMTUuNjAzOCIvPgogICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtMiIgeD0iMTUwLjA2NDMiIHk9IjE1Ny41NTEzIiB3aWR0aD0iMzMuMjIyOCIgaGVpZ2h0PSIxNS42MDM4Ii8+CiAgICAgICAgPHBhdGggaWQ9Il9QYXRoXyIgZGF0YS1uYW1lPSImbHQ7UGF0aCZndDsiIGNsYXNzPSJjbHMtOCIgZD0iTTEwNy41MjU0LDEwMS4wMDI3YTExLjc3OTQsMTEuNzc5NCwwLDEsMC0xOS44Niw4LjU1NDhBNC4wNDE3LDQuMDQxNywwLDAsMSw4OC44NSwxMTMuNjJsLTIuMTA0LDcuMjY4MWEzLDMsMCwwLDAsMi44ODE3LDMuODM0MmgxMi4yMzcxYTMsMywwLDAsMCwyLjg4MTctMy44MzQybC0yLjA5NTktNy4yNGE0LjA3NDMsNC4wNzQzLDAsMCwxLDEuMTgwOC00LjA5NDVBMTEuNzE3MiwxMS43MTcyLDAsMCwwLDEwNy41MjU0LDEwMS4wMDI3WiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtOSIgZD0iTTEwNC43NDYxLDEyMC44ODc3bC0yLjA5NTktNy4yNGE0LjA3NDQsNC4wNzQ0LDAsMCwxLDEuMTgwOC00LjA5NDUsMTEuNzYyOSwxMS43NjI5LDAsMCwwLTUuMDYtMTkuOTMxMywxMS45MSwxMS45MSwwLDAsMC04Ljc5OCwxMC45OTQ5LDExLjcxODUsMTEuNzE4NSwwLDAsMCwzLjY5MjksOC45NDFBNC4wNDE2LDQuMDQxNiwwLDAsMSw5NC44NSwxMTMuNjJsLTMuMjE0LDExLjEwMjNoMTAuMjI4OEEzLDMsMCwwLDAsMTA0Ljc0NjEsMTIwLjg4NzdaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0xMCIgZD0iTTgxLjc5NzUsMTAwLjMxYTMuOTQzOSwzLjk0MzksMCwwLDAtMy45NDQzLTMuOTQ0M0g0MS4wNDE3YTMuOTQ0MywzLjk0NDMsMCwwLDAsMCw3Ljg4ODdINzcuODUzMkEzLjk0MzksMy45NDM5LDAsMCwwLDgxLjc5NzUsMTAwLjMxWiIvPgogICAgICAgIDxwYXRoIGlkPSJfUGF0aF8yIiBkYXRhLW5hbWU9IiZsdDtQYXRoJmd0OyIgY2xhc3M9ImNscy0xMSIgZD0iTTQxLjA0MTYsMTA0LjI1MzlIOTYuODUzMmEzLjk0NDMsMy45NDQzLDAsMCwwLDAtNy44ODg3SDQxLjA0MTZhMy45NDQzLDMuOTQ0MywwLDAsMCwwLDcuODg4N1oiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTEwIiBkPSJNODEuNzk3NSwxMDAuMzFhMy45NDM5LDMuOTQzOSwwLDAsMC0zLjk0NDMtMy45NDQzSDQxLjA0MTdhMy45NDQzLDMuOTQ0MywwLDAsMCwwLDcuODg4N0g3Ny44NTMyQTMuOTQzOSwzLjk0MzksMCwwLDAsODEuNzk3NSwxMDAuMzFaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0xMCIgZD0iTTIyLjQ5MzIsMTIyLjgwMjlBMjIuNDkyOSwyMi40OTI5LDAsMSwxLDQ0Ljk4NTgsMTAwLjMxLDIyLjUxODUsMjIuNTE4NSwwLDAsMSwyMi40OTMyLDEyMi44MDI5Wm0wLTM3LjA5NzJBMTQuNjA0MiwxNC42MDQyLDAsMSwwLDM3LjA5NzIsMTAwLjMxLDE0LjYyMDcsMTQuNjIwNywwLDAsMCwyMi40OTMyLDg1LjcwNTdaIi8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo='", - "body": "\nThe purpose of this section is to describe how to authenticate when making API calls using the Bitbucket REST API.\n\n-----\n\n* [Oauth 2](#oauth-2)\n * [Making requests](#making-requests)\n * [Repository cloning](#repository-cloning)\n * [Refresh tokens](#refresh-tokens)\n* [Scopes](#scopes)\n* [Basic auth](#basic-auth)\n* [Repository Access Tokens](#repository-access-tokens)\n* [App passwords](#app-passwords)\n\n---\n\n### OAuth 2.0\n\nOur OAuth 2 implementation is merged in with our existing OAuth 1 in\nsuch a way that existing OAuth 1 consumers automatically become\nvalid OAuth 2 clients. The only thing you need to do is edit your\nexisting consumer and configure a callback URL.\n\nOnce that is in place, you'll have the following 2 URLs:\n\n https://bitbucket.org/site/oauth2/authorize\n https://bitbucket.org/site/oauth2/access_token\n\nFor obtaining access/bearer tokens, we support three of RFC-6749's grant\nflows, plus a custom Bitbucket flow for exchanging JWT tokens for access tokens.\nNote that Resource Owner Password Credentials Grant (4.3) is no longer supported.\n\n\n#### 1. Authorization Code Grant (4.1)\n\nThe full-blown 3-LO flow. Request authorization from the end user by\nsending their browser to:\n\n https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=code\n\nThe callback includes the `?code={}` query parameter that you can swap\nfor an access token:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=authorization_code -d code={code}\n\n\n#### 2. Implicit Grant (4.2)\n\nThis flow is useful for browser-based add-ons that operate without server-side backends.\n\nRequest the end user for authorization by directing the browser to:\n\n https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=token\n\nThat will redirect to your preconfigured callback URL with a fragment\ncontaining the access token\n(`#access_token={token}&token_type=bearer`) where your page's js can\npull it out of the URL.\n\n\n#### 3. Client Credentials Grant (4.4)\n\nSomewhat like our existing \"2-LO\" flow for OAuth 1. Obtain an access\ntoken that represents not an end user, but the owner of the\nclient/consumer:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=client_credentials\n\n\n#### 4. Bitbucket Cloud JWT Grant (urn:bitbucket:oauth2:jwt)\n\nIf your Atlassian Connect add-on uses JWT authentication, you can swap a\nJWT for an OAuth access token. The resulting access token represents the\naccount for which the add-on is installed.\n\nMake sure you send the JWT token in the Authorization request header\nusing the \"JWT\" scheme (case sensitive). Note that this custom scheme\nmakes this different from HTTP Basic Auth (and so you cannot use \"curl\n-u\").\n\n $ curl -X POST -H \"Authorization: JWT {jwt_token}\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=urn:bitbucket:oauth2:jwt\n\n\n#### Making Requests\n\nOnce you have an access token, as per RFC-6750, you can use it in a request in any of\nthe following ways (in decreasing order of desirability):\n\n1. Send it in a request header: `Authorization: Bearer {access_token}`\n2. Include it in a (application/x-www-form-urlencoded) POST body as `access_token={access_token}`\n3. Put it in the query string of a non-POST: `?access_token={access_token}`\n\n\n#### Repository Cloning\n\nSince add-ons will not be able to upload their own SSH keys to clone\nwith, access tokens can be used as Basic HTTP Auth credentials to\nclone securely over HTTPS. This is much like GitHub, yet slightly\ndifferent:\n\n $ git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git\n\nThe literal string `x-token-auth` as a substitute for username is\nrequired (note the difference with GitHub where the actual token is in\nthe username field).\n\n\n#### Refresh Tokens\n\nOur access tokens expire in one hour. When this happens you'll get 401\nresponses.\n\nMost access tokens grant responses (Implicit and JWT excluded). Therefore, you should include a\nrefresh token that can then be used to generate a new access token,\nwithout the need for end user participation:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=refresh_token -d refresh_token={refresh_token}\n\n\n### Scopes\n\nBitbucket's API applies a number of privilege scopes to endpoints. In order to access an endpoint, a request will need to have the necessary scopes.\n\nScopes are declared in the descriptor as a list of strings, with each string being the name of a unique scope.\n\nA descriptor lacking the `scopes` element is implicitly assumed to require all scopes and as a result, Bitbucket will require end users authorizing/installing the add-on\nto explicitly accept all scopes.\n\nOur best practice suggests you add the scopes your add-on needs, but no more than it needs.\n\nInvalid scope strings will cause the descriptor to be rejected and the installation to fail.\n\nThe available scopes are:\n\n- [project](#project)\n- [project:write](#project-write)\n- [project:admin](#project-admin)\n- [repository](#repository)\n- [repository:write](#repository-write)\n- [repository:admin](#repository-admin)\n- [repository:delete](#repository-delete)\n- [pullrequest](#pullrequest)\n- [pullrequest:write](#pullrequest-write)\n- [issue](#issue)\n- [issue:write](#issue-write)\n- [wiki](#wiki)\n- [webhook](#webhook)\n- [snippet](#snippet)\n- [snippet:write](#snippet-write)\n- [email](#email)\n- [account](#account)\n- [account:write](#account-write)\n- [pipeline](#pipeline)\n- [pipeline:write](#pipeline-write)\n- [pipeline:variable](#pipeline-variable)\n- [runner](#runner)\n- [runner:write](#runner-write)\n\n#### project\n\nProvides the [`repository`](#repository) scope permission for every repository under a project or projects.\n\n#### project:write\n\nThis scope is deprecated, and has been made obsolete by `project:admin`. Please see the deprecation notice [here](/cloud/bitbucket/deprecation-notice-project-write-scope).\n\n#### project:admin\n\nProvides admin access to a project or projects. No distinction is made between public and private projects. This scope doesn't implicitly grant the [`project`](#project) scope or the [`repository:write`](#repository-write) scope on any repositories under the project. It gives access to the admin features of a project only, not direct access to its repositories' contents.\n\n* ability to create the project\n* ability to update the project\n* ability to delete the project\n\n#### repository\n\nProvides read access to a repository or repositories.\nNote that this scope does not give access to a repository's pull requests.\n\n* access to the repo's source code\n* clone over HTTPS\n* access the file browsing API\n* download zip archives of the repo's contents\n* the ability to view and use the issue tracker on any repo (created issues, comment, vote, etc)\n* the ability to view and use the wiki on any repo (create/edit pages)\n\n#### repository:write\n\nProvides write (not admin) access to a repository or repositories. No distinction is made between public and private repositories. This scope implicitly grants the [`repository`](#repository) scope, which does not need to be requested separately.\nThis scope alone does not give access to the pull requests API.\n\n* push access over HTTPS\n* fork repos\n\n#### repository:admin\n\nProvides admin access to a repository or repositories. No distinction is made between public and private repositories. This scope doesn't implicitly grant the [`repository`](#repository) or the [`repository:write`](#repository-write) scopes. It gives access to the admin features of a repo only, not direct access to its contents. This scope can be used or misused to grant read access to other users, who can then clone the repo, but users that need to read and write source code would also request explicit read or write.\nThis scope comes with access to the following functionality:\n\n* view and manipulate committer mappings\n* list and edit deploy keys\n* ability to delete the repo\n* view and edit repo permissions\n* view and edit branch permissions\n* import and export the issue tracker\n* enable and disable the issue tracker\n* list and edit issue tracker version, milestones and components\n* enable and disable the wiki\n* list and edit default reviewers\n* list and edit repo links (Jira/Bamboo/Custom)\n* list and edit the repository webhooks\n* initiate a repo ownership transfer\n\n#### repository:delete\n\nProvides access to delete a repository or repositories.\n\n#### pullrequest\n\nProvides read access to pull requests.\nThis scope implies the [`repository`](#repository) scope, giving read access to the pull request's destination repository.\n\n* see and list pull requests\n* create and resolve tasks\n* comment on pull requests\n\n#### pullrequest:write\n\nImplicitly grants the [`pullrequest`](#pullrequest) scope and adds the ability to create, merge and decline pull requests.\nThis scope also implicitly grants the [`repository:write`](#repository-write) scope, giving write access to the pull request's destination repository. This is necessary to allow merging.\n\n* merge pull requests\n* decline pull requests\n* create pull requests\n* approve pull requests\n\n#### issue\n\nAbility to interact with issue trackers the way non-repo members can.\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* view, list and search issues\n* create new issues\n* comment on issues\n* watch issues\n* vote for issues\n\n#### issue:write\n\nThis scope implicitly grants the [`issue`](#issue) scope and adds the ability to transition and delete issues.\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* transition issues\n* delete issues\n\n#### wiki\n\nProvides access to wikis. This scope provides both read and write access (wikis are always editable by anyone with access to them).\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* view wikis\n* create pages\n* edit pages\n* push to wikis\n* clone wikis\n\n#### webhook\n\nGives access to webhooks. This scope is required for any webhook-related operation.\n\nThis scope gives read access to existing webhook subscriptions on all\nresources the authorization mechanism can access, without needing further scopes. \nFor example:\n\n- A client can list all existing webhook subscriptions on a repository. The [`repository`](#repository) scope is not required.\n- Existing webhook subscriptions for the issue tracker on a repo can be retrieved without the [`issue`](#issue) scope. All that is required is the `webhook` scope.\n\nTo create webhooks, the client will need read access to the resource. Such as: for [`issue:created`](#issue-created), the client will need to\nhave both the `webhook` and the [`issue`](#issue) scope.\n\n* list webhook subscriptions on any accessible repository, user, team, or snippet\n* create/update/delete webhook subscriptions.\n\n#### snippet\n\nProvides read access to snippets.\nNo distinction is made between public and private snippets (public snippets are accessible without any form of authentication).\n\n* view any snippet\n* create snippet comments\n\n#### snippet:write\n\nProvides write access to snippets.\nNo distinction is made between public and private snippets (public snippets are accessible without any form of authentication).\nThis scope implicitly grants the [`snippet`](#snippet) scope which does not need to be requested separately.\n\n* create snippets\n* edit snippets\n* delete snippets\n\n#### email\n\nAbility to see the user's primary email address. This should make it easier to use Bitbucket Cloud as a login provider for apps or external applications.\n\n#### account\n\nAbility to see all the user's account information. Note that this doesn't include any ability to change any of the data.\n\n* see all email addresses\n* language\n* location\n* website\n* full name\n* SSH keys\n* user groups\n\n#### account:write\n\nAbility to change properties on the user's account.\n\n* delete the authorizing user's account\n* manage the user's groups\n* change a user's email addresses\n* change username, display name and avatar\n\n#### pipeline\n\nGives read-only access to pipelines, steps, deployment environments and variables.\n\n#### pipeline:write\n\nGives write access to pipelines. This scope allows a user to:\n* Stop pipelines\n* Rerun failed pipelines\n* Resume halted pipelines\n* Trigger manual pipelines.\n\nThis scope is not needed to trigger a build using a push. Performing a `git push` (or equivalent actions) will trigger the build. The token doing the push only needs the [`repository:write`](#repository-write) scope.\n\nThis doesn't give write access to create variables.\n\n#### pipeline:variable\n\nGives write access to create variables in pipelines at the various levels:\n* Workspace\n* Repository\n* Deployment\n\n#### runner\n\nGives read-only access to pipelines runners setup against a workspace or repository.\n\n#### runner:write\n\nGives write access to create/edit/disable/delete pipelines runners setup against a workspace or repository.\n\n### Basic auth\n\nBasic HTTP Authentication as per [RFC-2617](https://tools.ietf.org/html/rfc2617) (Digest not supported). Note that Basic Auth is available only with username and [app password](https://bitbucket.org/account/settings/app-passwords/) as credentials.\n\n### Repository Access Tokens\n\nRepository Access Tokens are passwords (or tokens) that provide access to\n_a single repository_. These tokens can authenticate with Bitbucket APIs for\nscripting, CI/CD tools, Bitbucket Cloud-connected apps, and Bitbucket Cloud\nintegrations. The level of access provided by the token is set when a repository\nadmin creates it, by setting permission scopes. Repository Access Tokens are\nlinked to their repository, not a user or a workspace, preventing them from\nbeing used to access any other repositories or workspaces.\n\nWhen using Bitbucket APIs with a Repository Access Token, the token will be\ntreated as the \"user\" in the Bitbucket UI and Bitbucket logs. This includes\nusing the Repository Access Token to leave a comment on a pull request, push a\ncommit, or merge a pull request. The Bitbucket UI and API responses will show\nthe Repository Access Token as a user. This user uses the Repository Access\nToken name and a custom icon to differentiate it from a regular user in the UI.\n\nFor details on creating, managing, and using Repository Access Tokens, visit\n[Repository Access Tokens](https://support.atlassian.com/bitbucket-cloud/docs/repository-access-tokens/).\n\n#### Considerations for using Repository Access Tokens\n\n* After creation, a Repository Access Token can't be viewed or modified. The\ntoken's name, created date, last accessed date, and scopes are visible on the\nRepository Access Token page.\n* Repository Access Tokens can only be granted a limited set of Bitbucket's \npermission scopes.\n* Provided you set the correct permission scopes, you can use a Repository Access\nToken to clone (`repository`) and push (`repository:write`) code to the\ntoken's corresponding repository.\n* You can't use a Repository Access Token to log into the Bitbucket website.\n* Repository Access Tokens don't require two-step verification.\n* You can set permission scopes (specific access rights) for each Repository\nAccess Token.\n* You can't use a Repository Access Token to manipulate or query repository\npermissions.\n* Repository Access Tokens will not be listed in any repository or workspace \npermission API response.\n* Repository Access Tokens are deactivated when a repository is transferred or deleted.\n* Any content created by the Repository Access Token will persist after the\nRepository Access Token has been revoked.\n\n#### Available permissions scopes\n\nThe available scopes for Repository Access Tokens are:\n\n- [repository](#repository)\n- [repository:write](#repository-write)\n- [repository:admin](#repository-admin)\n- [repository:delete](#repository-delete)\n- [pullrequest](#pullrequest)\n- [pullrequest:write](#pullrequest-write)\n- [webhook](#webhook)\n- [pipeline](#pipeline)\n- [pipeline:write](#pipeline-write)\n- [pipeline:variable](#pipeline-variable)\n- [runner](#runner)\n- [runner:write](#runner-write)\n\nThere are some APIs which are inaccessible for Repository Access Tokens, these are: \n\n* [Add a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-post)\n* [Update a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-key-id-put)\n* [Delete a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-key-id-delete)\n\n### App passwords\n\nApp passwords allow users to make API calls to their Bitbucket account through apps such as Sourcetree.\n\nSome important points about app passwords:\n\n* You cannot view an app password or adjust permissions after you create the app password. Because app passwords are encrypted on our database and cannot be viewed by anyone. They are essentially designed to be disposable. If you need to change the scopes or lost the password just create a new one.\n* You cannot use them to log into your Bitbucket account.\n* You cannot use app passwords to manage team actions.\n\n App passwords are tied to an individual account's credentials and should not be shared. If you're sharing your app password you're essentially giving direct, authenticated, access to everything that password has been scoped to do with the Bitbucket API's.\n\n* You can use them for API call authentication, even if you don't have two-step verification enabled.\n* You can set permission scopes (specific access rights) for each app password.\n\n#### Create an app password\n\nTo create an app password:\n\n1. Select **Avatar > Bitbucket settings**.\n2. [Click **App passwords** in the Access management section.](https://bitbucket.org/account/settings/app-passwords/)\n3. Click **Create app password**.\n4. Give the app password a name related to the application that will use the password.\n5. Select the specific access and permissions you want this application password to have.\n6. Copy the generated password and either record or paste it into the application you want to give access. The password is only displayed this one time.\n\nThat's all there is to creating an app password. See your applications documentation for how to apply the app password for a specific application." + "body": "\nThe purpose of this section is to describe how to authenticate when making API calls using the Bitbucket REST API.\n\n-----\n\n* [Basic auth](#basic-auth)\n* [Access Tokens](#access-tokens)\n * [Repository Access Tokens](#repository-access-tokens)\n * [Project Access Tokens](#project-access-tokens)\n * [Workspace Access Tokens](#workspace-access-tokens)\n* [App passwords](#app-passwords)\n* [OAuth 2.0](#oauth-2-0)\n * [Making requests](#making-requests)\n * [Repository cloning](#repository-cloning)\n * [Refresh tokens](#refresh-tokens)\n* [Bitbucket OAuth 2.0 Scopes](#bitbucket-oauth-2-0-scopes)\n* [Forge App Scopes](#forge-app-scopes)\n\n---\n\n### Basic auth\n\nBasic HTTP Authentication as per [RFC-2617](https://tools.ietf.org/html/rfc2617) (Digest not supported).\nNote that Basic Auth is available only with username and [app password](https://bitbucket.org/account/settings/app-passwords/) as credentials.\n\n### Access Tokens\n\nAccess Tokens are passwords (or tokens) that provide access to a _single_ repository, project or workspace.\nThese tokens can authenticate with Bitbucket APIs for scripting, CI/CD tools, Bitbucket Cloud-connected apps,\nand Bitbucket Cloud integrations.\n\nAccess Tokens are linked to a repository, project, or workspace, not a user account.\nThe level of access provided by the token is set when a repository, or workspace admin creates it,\nby setting permission scopes.\n\nThere are three types of Access Token:\n\n* **Repository Access Tokens** can connect to a single repository, preventing them from accessing any other repositories or workspaces.\n* **Project Access Tokens** can connect to a single project, providing access to any repositories within the project.\n* **Workspace Access Tokens** can connect to a single workspace and have access to any projects and repositories within that workspace.\n\nWhen using Bitbucket APIs with an Access Token, the token will be treated as the \"user\" in the\nBitbucket UI and Bitbucket logs. This includes when using the Access Token to leave a comment on a pull request,\npush a commit, or merge a pull request. The Bitbucket UI and API responses will show the\nRepository/Project/Workspace Access Token as a user. The username shown in the Bitbucket UI is the Access\nToken _name_, and a custom icon is used to differentiate it from a regular user in the UI.\n\n#### Considerations for using Access Tokens\n\n* After creation, an Access Token can't be viewed or modified. The token's name, created date,\nlast accessed date, and scopes are visible on the repository, project, or workspace **Access Tokens** page.\n* Access Tokens can access a limited set of Bitbucket's permission scopes.\n* Provided you set the correct permission scopes, you can use an Access Token to clone (`repository`)\nand push (`repository:write`) code to the token's repository or the repositories the token can access.\n* You can't use an Access Token to log into the Bitbucket website.\n* Access Tokens don't require two-step verification.\n* You can set permission scopes (specific access rights) for each Access Token.\n* You can't use an Access Token to manipulate or query repository, project, or workspace permissions.\n* Access Tokens are not listed in any repository or workspace permission API response.\n* Access Tokens are deactivated when deleting the resource tied to it (a repository, project, or workspace).\nRepository Access Tokens are also revoked when transferring the repository to another workspace.\n* Any content created by the Access Token will persist after the Access Token has been revoked.\n* Access Tokens can interact with branch restriction APIs, but the token can't be configured as a user with merge access when using branch restrictions.\n\nThere are some APIs which are inaccessible for Access Tokens, these are:\n\n* [Add a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-post)\n* [Update a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-key-id-put)\n* [Delete a repository deploy key](/cloud/bitbucket/rest/api-group-deployments/#api-repositories-workspace-repo-slug-deploy-keys-key-id-delete)\n\n#### Repository Access Tokens\n\nFor details on creating, managing, and using Repository Access Tokens, visit\n[Repository Access Tokens](https://support.atlassian.com/bitbucket-cloud/docs/repository-access-tokens/).\n\nThe available scopes for Repository Access Tokens are:\n\n- [`repository`](#repository)\n- [`repository:write`](#repository-write)\n- [`repository:admin`](#repository-admin)\n- [`repository:delete`](#repository-delete)\n- [`pullrequest`](#pullrequest)\n- [`pullrequest:write`](#pullrequest-write)\n- [`webhook`](#webhook)\n- [`pipeline`](#pipeline)\n- [`pipeline:write`](#pipeline-write)\n- [`pipeline:variable`](#pipeline-variable)\n- [`runner`](#runner)\n- [`runner:write`](#runner-write)\n\n#### Project Access Tokens\n\nFor details on creating, managing, and using Project Access Tokens, visit\n[Project Access Tokens](https://support.atlassian.com/bitbucket-cloud/docs/project-access-tokens/).\n\nThe available scopes for Project Access Tokens are:\n\n- [`project`](#project)\n- [`repository`](#repository)\n- [`repository:write`](#repository-write)\n- [`repository:admin`](#repository-admin)\n- [`repository:delete`](#repository-delete)\n- [`pullrequest`](#pullrequest)\n- [`pullrequest:write`](#pullrequest-write)\n- [`webhook`](#webhook)\n- [`pipeline`](#pipeline)\n- [`pipeline:write`](#pipeline-write)\n- [`pipeline:variable`](#pipeline-variable)\n- [`runner`](#runner)\n- [`runner:write`](#runner-write)\n\n#### Workspace Access Tokens\n\nFor details on creating, managing, and using Workspace Access Tokens, visit\n[Workspace Access Tokens](https://support.atlassian.com/bitbucket-cloud/docs/workspace-access-tokens/).\n\nThe available scopes for Workspace Access Tokens are:\n\n- [`project`](#project)\n- [`project:admin`](#project-admin)\n- [`repository`](#repository)\n- [`repository:write`](#repository-write)\n- [`repository:admin`](#repository-admin)\n- [`repository:delete`](#repository-delete)\n- [`pullrequest`](#pullrequest)\n- [`pullrequest:write`](#pullrequest-write)\n- [`webhook`](#webhook)\n- [`account`](#account)\n- [`pipeline`](#pipeline)\n- [`pipeline:write`](#pipeline-write)\n- [`pipeline:variable`](#pipeline-variable)\n- [`runner`](#runner)\n- [`runner:write`](#runner-write)\n\n### App passwords\n\nApp passwords allow users to make API calls to their Bitbucket account through apps such as Sourcetree.\n\nSome important points about app passwords:\n\n* You cannot view an app password or adjust permissions after you create the app password. Because app passwords are encrypted on our database and cannot be viewed by anyone. They are essentially designed to be disposable. If you need to change the scopes or lost the password just create a new one.\n* You cannot use them to log into your Bitbucket account.\n* You cannot use app passwords to manage team actions.\n\n App passwords are tied to an individual account's credentials and should not be shared. If you're sharing your app password you're essentially giving direct, authenticated, access to everything that password has been scoped to do with the Bitbucket API's.\n\n* You can use them for API call authentication, even if you don't have two-step verification enabled.\n* You can set permission scopes (specific access rights) for each app password.\n\nFor details on creating, managing, and using App passwords, visit\n[App passwords](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/).\n\n### OAuth 2.0\n\nOur OAuth 2 implementation is merged in with our existing OAuth 1 in\nsuch a way that existing OAuth 1 consumers automatically become\nvalid OAuth 2 clients. The only thing you need to do is edit your\nexisting consumer and configure a callback URL.\n\nOnce that is in place, you'll have the following 2 URLs:\n\n https://bitbucket.org/site/oauth2/authorize\n https://bitbucket.org/site/oauth2/access_token\n\nFor obtaining access/bearer tokens, we support three of RFC-6749's grant\nflows, plus a custom Bitbucket flow for exchanging JWT tokens for access tokens.\nNote that Resource Owner Password Credentials Grant (4.3) is no longer supported.\n\n\n#### 1. Authorization Code Grant (4.1)\n\nThe full-blown 3-LO flow. Request authorization from the end user by\nsending their browser to:\n\n https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=code\n\nThe callback includes the `?code={}` query parameter that you can swap\nfor an access token:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=authorization_code -d code={code}\n\n\n#### 2. Implicit Grant (4.2)\n\nThis flow is useful for browser-based add-ons that operate without server-side backends.\n\nRequest the end user for authorization by directing the browser to:\n\n https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=token\n\nThat will redirect to your preconfigured callback URL with a fragment\ncontaining the access token\n(`#access_token={token}&token_type=bearer`) where your page's js can\npull it out of the URL.\n\n\n#### 3. Client Credentials Grant (4.4)\n\nSomewhat like our existing \"2-LO\" flow for OAuth 1. Obtain an access\ntoken that represents not an end user, but the owner of the\nclient/consumer:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=client_credentials\n\n\n#### 4. Bitbucket Cloud JWT Grant (urn:bitbucket:oauth2:jwt)\n\nIf your Atlassian Connect add-on uses JWT authentication, you can swap a\nJWT for an OAuth access token. The resulting access token represents the\naccount for which the add-on is installed.\n\nMake sure you send the JWT token in the Authorization request header\nusing the \"JWT\" scheme (case sensitive). Note that this custom scheme\nmakes this different from HTTP Basic Auth (and so you cannot use \"curl\n-u\").\n\n $ curl -X POST -H \"Authorization: JWT {jwt_token}\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=urn:bitbucket:oauth2:jwt\n\n\n#### Making Requests\n\nOnce you have an access token, as per RFC-6750, you can use it in a request in any of\nthe following ways (in decreasing order of desirability):\n\n1. Send it in a request header: `Authorization: Bearer {access_token}`\n2. Include it in a (application/x-www-form-urlencoded) POST body as `access_token={access_token}`\n3. Put it in the query string of a non-POST: `?access_token={access_token}`\n\n\n#### Repository Cloning\n\nSince add-ons will not be able to upload their own SSH keys to clone\nwith, access tokens can be used as Basic HTTP Auth credentials to\nclone securely over HTTPS. This is much like GitHub, yet slightly\ndifferent:\n\n $ git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git\n\nThe literal string `x-token-auth` as a substitute for username is\nrequired (note the difference with GitHub where the actual token is in\nthe username field).\n\n\n#### Refresh Tokens\n\nOur access tokens expire in one hour. When this happens you'll get 401\nresponses.\n\nMost access tokens grant responses (Implicit and JWT excluded). Therefore, you should include a\nrefresh token that can then be used to generate a new access token,\nwithout the need for end user participation:\n\n $ curl -X POST -u \"client_id:secret\" \\\n https://bitbucket.org/site/oauth2/access_token \\\n -d grant_type=refresh_token -d refresh_token={refresh_token}\n\n\n### Bitbucket OAuth 2.0 scopes\n\nBitbucket's API applies a number of privilege scopes to endpoints. In order to access an endpoint, a request will need to have the necessary scopes.\n\nOAuth 2.0 Scopes are applicable for OAuth 2, Access Tokens, and App passwords auth mechanisms as well as Bitbucket Connect apps.\n\nScopes are declared in the descriptor as a list of strings, with each string being the name of a unique scope.\n\nA descriptor lacking the `scopes` element is implicitly assumed to require all scopes and as a result, Bitbucket will require end users authorizing/installing the add-on\nto explicitly accept all scopes.\n\nOur best practice suggests you add only the scopes your add-on needs, but no more than it needs.\n\nInvalid scope strings will cause the descriptor to be rejected and the installation to fail.\n\nThe available scopes are:\n\n- [project](#project)\n- [project:write](#project-write)\n- [project:admin](#project-admin)\n- [repository](#repository)\n- [repository:write](#repository-write)\n- [repository:admin](#repository-admin)\n- [repository:delete](#repository-delete)\n- [pullrequest](#pullrequest)\n- [pullrequest:write](#pullrequest-write)\n- [issue](#issue)\n- [issue:write](#issue-write)\n- [wiki](#wiki)\n- [webhook](#webhook)\n- [snippet](#snippet)\n- [snippet:write](#snippet-write)\n- [email](#email)\n- [account](#account)\n- [account:write](#account-write)\n- [pipeline](#pipeline)\n- [pipeline:write](#pipeline-write)\n- [pipeline:variable](#pipeline-variable)\n- [runner](#runner)\n- [runner:write](#runner-write)\n\n#### project\n\nProvides access to view the project or projects.\nThis scope implies the [`repository`](#repository) scope, giving read access to all the repositories in a project or projects.\n\n#### project:write\n\nThis scope is deprecated, and has been made obsolete by `project:admin`. Please see the deprecation notice [here](/cloud/bitbucket/deprecation-notice-project-write-scope).\n\n#### project:admin\n\nProvides admin access to a project or projects. No distinction is made between public and private projects. This scope doesn't implicitly grant the [`project`](#project) scope or the [`repository:write`](#repository-write) scope on any repositories under the project. It gives access to the admin features of a project only, not direct access to its repositories' contents.\n\n* ability to create the project\n* ability to update the project\n* ability to delete the project\n\n#### repository\n\nProvides read access to a repository or repositories.\nNote that this scope does not give access to a repository's pull requests.\n\n* access to the repo's source code\n* clone over HTTPS\n* access the file browsing API\n* download zip archives of the repo's contents\n* the ability to view and use the issue tracker on any repo (created issues, comment, vote, etc)\n* the ability to view and use the wiki on any repo (create/edit pages)\n\n#### repository:write\n\nProvides write (not admin) access to a repository or repositories. No distinction is made between public and private repositories. This scope implicitly grants the [`repository`](#repository) scope, which does not need to be requested separately.\nThis scope alone does not give access to the pull requests API.\n\n* push access over HTTPS\n* fork repos\n\n#### repository:admin\n\nProvides admin access to a repository or repositories. No distinction is made between public and private repositories. This scope doesn't implicitly grant the [`repository`](#repository) or the [`repository:write`](#repository-write) scopes. It gives access to the admin features of a repo only, not direct access to its contents. This scope can be used or misused to grant read access to other users, who can then clone the repo, but users that need to read and write source code would also request explicit read or write.\nThis scope comes with access to the following functionality:\n\n* View and manipulate committer mappings\n* List and edit deploy keys\n* Ability to delete the repo\n* View and edit repo permissions\n* View and edit branch permissions\n* Import and export the issue tracker\n* Enable and disable the issue tracker\n* List and edit issue tracker version, milestones and components\n* Enable and disable the wiki\n* List and edit default reviewers\n* List and edit repo links (Jira/Bamboo/Custom)\n* List and edit the repository webhooks\n* Initiate a repo ownership transfer\n\n#### repository:delete\n\nProvides access to delete a repository or repositories.\n\n#### pullrequest\n\nProvides read access to pull requests.\nThis scope implies the [`repository`](#repository) scope, giving read access to the pull request's destination repository.\n\n* see and list pull requests\n* create and resolve tasks\n* comment on pull requests\n\n#### pullrequest:write\n\nImplicitly grants the [`pullrequest`](#pullrequest) scope and adds the ability to create, merge and decline pull requests.\nThis scope also implicitly grants the [`repository:write`](#repository-write) scope, giving write access to the pull request's destination repository. This is necessary to allow merging.\n\n* merge pull requests\n* decline pull requests\n* create pull requests\n* approve pull requests\n\n#### issue\n\nAbility to interact with issue trackers the way non-repo members can.\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* view, list and search issues\n* create new issues\n* comment on issues\n* watch issues\n* vote for issues\n\n#### issue:write\n\nThis scope implicitly grants the [`issue`](#issue) scope and adds the ability to transition and delete issues.\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* transition issues\n* delete issues\n\n#### wiki\n\nProvides access to wikis. This scope provides both read and write access (wikis are always editable by anyone with access to them).\nThis scope doesn't implicitly grant any other scopes and doesn't give implicit access to the repository.\n\n* view wikis\n* create pages\n* edit pages\n* push to wikis\n* clone wikis\n\n#### webhook\n\nGives access to webhooks. This scope is required for any webhook-related operation.\n\nThis scope gives read access to existing webhook subscriptions on all\nresources the authorization mechanism can access, without needing further scopes.\nFor example:\n\n- A client can list all existing webhook subscriptions on a repository. The [`repository`](#repository) scope is not required.\n- Existing webhook subscriptions for the issue tracker on a repo can be retrieved without the [`issue`](#issue) scope. All that is required is the `webhook` scope.\n\nTo create webhooks, the client will need read access to the resource. Such as: for [`issue:created`](#issue-created), the client will need to\nhave both the `webhook` and the [`issue`](#issue) scope.\n\n* list webhook subscriptions on any accessible repository, user, team, or snippet\n* create/update/delete webhook subscriptions.\n\n#### snippet\n\nProvides read access to snippets.\nNo distinction is made between public and private snippets (public snippets are accessible without any form of authentication).\n\n* view any snippet\n* create snippet comments\n\n#### snippet:write\n\nProvides write access to snippets.\nNo distinction is made between public and private snippets (public snippets are accessible without any form of authentication).\nThis scope implicitly grants the [`snippet`](#snippet) scope which does not need to be requested separately.\n\n* create snippets\n* edit snippets\n* delete snippets\n\n#### email\n\nAbility to see the user's primary email address. This should make it easier to use Bitbucket Cloud as a login provider for apps or external applications.\n\n#### account\n\nWhen used for:\n* **user-related APIs** — Gives read-only access to the user's account information.\nNote that this doesn't include any ability to change any of the data. This scope allows you to view the user's:\n * email addresses\n * language\n * location\n * website\n * full name\n * SSH keys\n * user groups\n* **workspace-related APIs** — Grants access to view the workspace's:\n * users\n * user permissions\n * projects\n\n#### account:write\n\nAbility to change properties on the user's account.\n\n* delete the authorizing user's account\n* manage the user's groups\n* change a user's email addresses\n* change username, display name and avatar\n\n#### pipeline\n\nGives read-only access to pipelines, steps, deployment environments and variables.\n\n#### pipeline:write\n\nGives write access to pipelines. This scope allows a user to:\n* Stop pipelines\n* Rerun failed pipelines\n* Resume halted pipelines\n* Trigger manual pipelines.\n\nThis scope is not needed to trigger a build using a push. Performing a `git push` (or equivalent actions) will trigger the build. The token doing the push only needs the [`repository:write`](#repository-write) scope.\n\nThis doesn't give write access to create variables.\n\n#### pipeline:variable\n\nGives write access to create variables in pipelines at the various levels:\n* Workspace\n* Repository\n* Deployment\n\n#### runner\n\nGives read-only access to pipelines runners setup against a workspace or repository.\n\n#### runner:write\n\nGives write access to create/edit/disable/delete pipelines runners setup against a workspace or repository.\n### Forge app scopes\n\nIn order for a Forge app integration to access Bitbucket API endpoints, it needs to include certain privilege scopes in the app manifest. These are different from Bitbucket OAuth 2.0 scopes.\n\nUnlike OAuth 2.0 scopes, Forge app scopes do not implicitly grant other scopes, for example, `write:repository:bitbucket` does not implicitly grant `read:repository:bitbucket`.\n\nOnly a subset of Bitbucket API endpoints are currently available for Forge app integrations. These will be labeled with Forge app scopes.\n\nOur best practice suggests you only add the scopes your app needs, but no more than it needs.\n\nThe available scopes are:\n\n- [`read:repository:bitbucket`](#read-repository-bitbucket)\n- [`write:repository:bitbucket`](#write-repository-bitbucket)\n- [`admin:repository:bitbucket`](#admin-repository-bitbucket)\n- [`delete:repository:bitbucket`](#delete-repository-bitbucket)\n- [`read:pullrequest:bitbucket`](#read-pullrequest-bitbucket)\n- [`write:pullrequest:bitbucket`](#write-pullrequest-bitbucket)\n- [`read:project:bitbucket`](#read-project-bitbucket)\n- [`admin:project:bitbucket`](#admin-project-bitbucket)\n- [`read:workspace:bitbucket`](#read-workspace-bitbucket)\n- [`read:user:bitbucket`](#read-user-bitbucket)\n- [`read:pipeline:bitbucket`](#read-pipeline-bitbucket)\n- [`write:pipeline:bitbucket`](#write-pipeline-bitbucket)\n- [`admin:pipeline:bitbucket`](#admin-pipeline-bitbucket)\n- [`read:runner:bitbucket`](#read-runner-bitbucket)\n- [`write:runner:bitbucket`](#write-runner-bitbucket)\n\n#### read:repository:bitbucket\n\nAllows viewing of repository data. Note that this scope does not give access to a repository's pull requests.\n* access to the repository's source code\n* access the file browsing API\n* access to certain repository configurations such as branching model, default reviewers, etc.\n\n#### write:repository:bitbucket\n\nAllows modification of repository data. No distinction is made between public and private repositories. This scope does not imply the `read:repository:bitbucket` scope, so you need to request that separately if required. This scope alone does not give access to the pull request API.\n* update/delete source, branches, tags, etc.\n* fork repositories\n\n#### admin:repository:bitbucket\n\nAllows admin activities on repositories. No distinction is made between public and private repositories. This scope does not implicitly grant the `read:repository:bitbucket` or the `write:repository:bitbucket` scopes. It gives access to the admin features of a repository only, not direct access to its contents. This scope does not allow modification of repository permissions. This scope comes with access to the following functionality:\n* create repository\n* view repository permissions\n* view and edit branch restrictions\n* edit branching model settings\n* edit default reviewers\n* view and edit inheritance state for repository settings\n\n#### delete:repository:bitbucket\nAllows deletion of repositories.\n\n#### read:pullrequest:bitbucket\nAllows viewing of pull requests, plus the ability to comment on pull requests.\n\nThis scope does not imply the `read:repository:bitbucket` scope. With this scope, you could retrieve some data specific to the source/destination repositories of a pull request using pull request endpoints, but it does not give access to repository API endpoints.\n\n#### write:pullrequest:bitbucket\nAllows the ability to create, update, approve, decline, and merge pull requests.\n\nThis scope does not imply the `write:repository:bitbucket` scope.\n\n#### read:project:bitbucket\nAllows viewing of project and project permission data.\n\n#### admin:project:bitbucket\nAllows the ability to create, update, and delete project. No distinction is made between public and private projects.\n\nThis scope does not implicitly grant the `read:project:bitbucket` scope or any repository scopes. It gives access to the admin features of a project only, not direct access to its repositories' contents.\n\n#### read:workspace:bitbucket\nAllows viewing of workspace and workspace permission data.\n\n#### read:user:bitbucket\nAllows viewing of user data. This scope is typically required for permission related endpoints.\n\n#### read:pipeline:bitbucket\nAllows read access to all pipeline information (pipelines, steps, caches, artifacts, logs, tests, code-insights).\n\n#### write:pipeline:bitbucket\nAllows running pipelines (i.e., start/stop/create pipeline) and uploading tests/code-insights.\n\nThis scope does not imply the `read:pipeline:bitbucket` scope.\n\n#### admin:pipeline:bitbucket\nAllows admin activities, such as creating pipeline variables.\n\nThis scope does not implicitly grant the `read:pipeline:bitbucket` or the `write:pipeline:bitbucket` scopes.\n\n#### read:runner:bitbucket\nAllows viewing of runners information.\n\n#### write:runner:bitbucket\nAllows runners management.\n\nThis scope does not imply the `read:runners:bitbucket` scope.\n" }, { "anchor": "filtering", @@ -19048,6 +24446,17 @@ ], "components": { "requestBodies": { + "bitbucket.apps.permissions.serializers.ProjectPermissionUpdateSchema": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/bitbucket.apps.permissions.serializers.ProjectPermissionUpdateSchema" + } + } + }, + "description": "The permission to grant", + "required": true + }, "application_property": { "content": { "application/json": { @@ -19081,6 +24490,17 @@ "description": "The new snippet object.", "required": true }, + "bitbucket.apps.permissions.serializers.RepoPermissionUpdateSchema": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/bitbucket.apps.permissions.serializers.RepoPermissionUpdateSchema" + } + } + }, + "description": "The permission to grant", + "required": true + }, "pipeline_variable2": { "content": { "application/json": { @@ -19132,13 +24552,13 @@ "pipeline:variable": "Access your repositories' build pipelines and configure their variables", "runner": "Access your workspaces/repositories' runners", "runner:write": "Access and edit your workspaces/repositories' runners", - "issue": "Read your repositories' issues", - "issue:write": "Read and modify your repositories' issues", "pullrequest": "Read your repositories and their pull requests", "pullrequest:write": "Read and modify your repositories and their pull requests", + "webhook": "Read and modify your repositories' webhooks", + "issue": "Read your repositories' issues", + "issue:write": "Read and modify your repositories' issues", "snippet": "Read your snippets", "snippet:write": "Read and modify your snippets", - "webhook": "Read and modify your repositories' webhooks", "wiki": "Read and modify your repositories' wikis" } } @@ -19152,6 +24572,128 @@ } }, "schemas": { + "A_pull_request_task": { + "allOf": [ + { + "$ref": "#/components/schemas/task" + }, + { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "html": { + "type": "object", + "title": "Link", + "description": "A link to a resource related to this object.", + "properties": { + "href": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + } + }, + "additionalProperties": false + }, + "self": { + "type": "object", + "title": "Link", + "description": "A link to a resource related to this object.", + "properties": { + "href": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "title": "Pull Request Task", + "description": "A pull request task." + }, + "A_pullrequest_comment_task": { + "allOf": [ + { + "$ref": "#/components/schemas/A_pull_request_task" + }, + { + "type": "object", + "properties": { + "comment": { + "$ref": "#/components/schemas/comment" + } + }, + "additionalProperties": false + } + ], + "title": "Pull Request Comment Task", + "description": "A pullrequest comment task" + }, + "A_pullrequest_task_create": { + "type": "object", + "title": "Pull Request Task Create", + "description": "A pullrequest task create", + "properties": { + "comment": { + "$ref": "#/components/schemas/comment" + }, + "content": { + "type": "object", + "title": "Task Raw Content", + "description": "task raw content", + "properties": { + "raw": { + "type": "string", + "description": "The task contents" + } + }, + "required": ["raw"], + "additionalProperties": false + }, + "pending": { + "type": "boolean" + } + }, + "required": ["content"], + "additionalProperties": false + }, + "A_pullrequest_task_update": { + "type": "object", + "title": "Pull Request Task Update", + "description": "A pullrequest task update", + "properties": { + "content": { + "type": "object", + "title": "Task Raw Content", + "description": "task raw content", + "properties": { + "raw": { + "type": "string", + "description": "The task contents" + } + }, + "required": ["raw"], + "additionalProperties": false + }, + "state": { + "type": "string", + "enum": ["RESOLVED", "UNRESOLVED"] + } + }, + "additionalProperties": false + }, "account": { "allOf": [ { @@ -19314,6 +24856,28 @@ "title": "Base Commit", "description": "The common base type for both repository and snippet commits." }, + "bitbucket.apps.permissions.serializers.ProjectPermissionUpdateSchema": { + "type": "object", + "properties": { + "permission": { + "type": "string", + "enum": ["read", "write", "create-repo", "admin"] + } + }, + "required": ["permission"], + "additionalProperties": false + }, + "bitbucket.apps.permissions.serializers.RepoPermissionUpdateSchema": { + "type": "object", + "properties": { + "permission": { + "type": "string", + "enum": ["read", "write", "admin"] + } + }, + "required": ["permission"], + "additionalProperties": false + }, "branch": { "allOf": [ { @@ -19672,6 +25236,26 @@ "title": "Comment", "description": "The base type for all comments. This type should be considered abstract. Each of the \"commentable\" resources defines its own subtypes (e.g. `issue_comment`)." }, + "comment_resolution": { + "type": "object", + "title": "Comment Resolution", + "description": "The resolution object for a Comment.", + "properties": { + "created_on": { + "type": "string", + "description": "The ISO8601 timestamp the resolution was created.", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/account" + } + }, + "required": ["type"], + "additionalProperties": true + }, "commit": { "allOf": [ { @@ -19809,7 +25393,7 @@ "state": { "type": "string", "description": "Provides some indication of the status of this commit", - "enum": ["INPROGRESS", "STOPPED", "FAILED", "SUCCESSFUL"] + "enum": ["STOPPED", "INPROGRESS", "FAILED", "SUCCESSFUL"] }, "updated_on": { "type": "string", @@ -20675,31 +26259,33 @@ "type": "string", "description": "The event identifier.", "enum": [ - "issue:created", - "repo:commit_status_updated", - "pullrequest:comment_created", - "pullrequest:created", + "issue:comment_created", + "repo:push", + "repo:transfer", + "pullrequest:changes_request_removed", + "pullrequest:comment_updated", "pullrequest:unapproved", - "repo:commit_status_created", + "pullrequest:comment_created", "repo:created", "pullrequest:changes_request_created", - "pullrequest:comment_updated", - "pullrequest:changes_request_removed", - "pullrequest:comment_deleted", "repo:imported", - "repo:commit_comment_created", + "repo:fork", "project:updated", - "repo:updated", + "issue:created", + "repo:deleted", "issue:updated", + "pullrequest:comment_reopened", + "pullrequest:updated", + "repo:commit_comment_created", + "pullrequest:created", + "pullrequest:approved", "pullrequest:rejected", "pullrequest:fulfilled", - "issue:comment_created", - "repo:fork", - "pullrequest:updated", - "repo:push", - "pullrequest:approved", - "repo:deleted", - "repo:transfer" + "pullrequest:comment_resolved", + "repo:commit_status_updated", + "repo:updated", + "pullrequest:comment_deleted", + "repo:commit_status_created" ] }, "label": { @@ -20869,6 +26455,7 @@ "state": { "type": "string", "enum": [ + "submitted", "new", "open", "resolved", @@ -21988,6 +27575,52 @@ } ] }, + "paginated_project_group_permissions": { + "title": "Paginated Project Group Permissions", + "description": "A paginated list of project group permissions.", + "allOf": [ + { + "$ref": "#/components/schemas/paginated" + }, + { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project_group_permission" + }, + "minItems": 0, + "uniqueItems": true, + "description": "The values of the current page." + } + } + } + ] + }, + "paginated_project_user_permissions": { + "title": "Paginated Project User Permissions", + "description": "A paginated list of project user permissions.", + "allOf": [ + { + "$ref": "#/components/schemas/paginated" + }, + { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "$ref": "#/components/schemas/project_user_permission" + }, + "minItems": 0, + "uniqueItems": true, + "description": "The values of the current page." + } + } + } + ] + }, "paginated_projects": { "title": "Paginated Projects", "description": "A paginated list of projects", @@ -22308,6 +27941,29 @@ } ] }, + "paginated_tasks": { + "title": "Paginated Tasks", + "description": "A paginated list of tasks.", + "allOf": [ + { + "$ref": "#/components/schemas/paginated" + }, + { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "$ref": "#/components/schemas/A_pullrequest_comment_task" + }, + "minItems": 0, + "uniqueItems": true, + "description": "The values of the current page." + } + } + } + ] + }, "paginated_treeentries": { "title": "Paginated Tree Entry", "description": "A paginated list of commit_file and/or commit_directory objects.", @@ -22502,6 +28158,14 @@ "uuid": { "type": "string", "description": "The UUID identifying the pipeline." + }, + "variables": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/pipeline_variable" + }, + "description": "The variables for the pipeline." } } } @@ -22546,6 +28210,10 @@ "type": "integer", "description": "The size of the file containing the archive of the cache." }, + "key_hash": { + "type": "string", + "description": "The key hash of the cache version." + }, "name": { "type": "string", "description": "The name of the cache." @@ -22738,17 +28406,14 @@ }, "cron_pattern": { "type": "string", - "description": "The cron expression that the schedule applies." + "description": "The cron expression with second precision (7 fields) that the schedule applies. For example, for expression: 0 0 12 * * ? *, will execute at 12pm UTC every day." }, "enabled": { "type": "boolean", "description": "Whether the schedule is enabled." }, - "selector": { - "$ref": "#/components/schemas/pipeline_selector" - }, "target": { - "$ref": "#/components/schemas/pipeline_target" + "$ref": "#/components/schemas/pipeline_ref_target" }, "updated_on": { "type": "string", @@ -22813,6 +28478,66 @@ } ] }, + "pipeline_schedule_post_request_body": { + "allOf": [ + { + "$ref": "#/components/schemas/object" + }, + { + "additionalProperties": true, + "type": "object", + "properties": { + "cron_pattern": { + "type": "string", + "description": "The cron expression with second precision (7 fields) that the schedule applies. For example, for expression: 0 0 12 * * ? *, will execute at 12pm UTC every day." + }, + "enabled": { + "type": "boolean", + "description": "Whether the schedule is enabled." + }, + "target": { + "type": "object", + "description": "The target on which the schedule will be executed.", + "properties": { + "ref_name": { + "type": "string", + "description": "The name of the reference." + }, + "ref_type": { + "type": "string", + "description": "The type of reference (branch only).", + "enum": ["branch"] + }, + "selector": { + "$ref": "#/components/schemas/pipeline_selector" + } + }, + "required": ["selector", "ref_name", "ref_type"] + } + }, + "required": ["target", "cron_pattern"] + } + ], + "title": "Request body for Pipeline Schedule POST request" + }, + "pipeline_schedule_put_request_body": { + "allOf": [ + { + "$ref": "#/components/schemas/object" + }, + { + "additionalProperties": true, + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the schedule is enabled." + } + } + } + ], + "title": "Request body for Pipeline Schedule PUT request" + }, "pipeline_selector": { "title": "Pipeline Selector", "description": "A representation of the selector that was used to identify the pipeline in the YML file.", @@ -23785,6 +29510,92 @@ "title": "Project Deploy Key", "description": "Represents deploy key for a project." }, + "project_group_permission": { + "type": "object", + "title": "Project Group Permission", + "description": "A group's permission for a given project.", + "properties": { + "group": { + "$ref": "#/components/schemas/group" + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "object", + "title": "Link", + "description": "A link to a resource related to this object.", + "properties": { + "href": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "permission": { + "type": "string", + "enum": ["read", "write", "create-repo", "admin", "none"] + }, + "project": { + "$ref": "#/components/schemas/project" + }, + "type": { + "type": "string" + } + }, + "required": ["type"], + "additionalProperties": true + }, + "project_user_permission": { + "type": "object", + "title": "Project User Permission", + "description": "A user's direct permission for a given project.", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "object", + "title": "Link", + "description": "A link to a resource related to this object.", + "properties": { + "href": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "permission": { + "type": "string", + "enum": ["read", "write", "create-repo", "admin", "none"] + }, + "project": { + "$ref": "#/components/schemas/project" + }, + "type": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/user" + } + }, + "required": ["type"], + "additionalProperties": true + }, "pullrequest": { "allOf": [ { @@ -24126,8 +29937,14 @@ { "type": "object", "properties": { + "pending": { + "type": "boolean" + }, "pullrequest": { "$ref": "#/components/schemas/pullrequest" + }, + "resolution": { + "$ref": "#/components/schemas/comment_resolution" } }, "additionalProperties": true @@ -24478,10 +30295,12 @@ "description": "The concatenation of the repository owner's username and the slugified name, e.g. \"evzijst/interruptingcow\". This is the same string used in Bitbucket URLs." }, "has_issues": { - "type": "boolean" + "type": "boolean", + "description": "\nThe issue tracker for this repository is enabled. Issue Tracker\nfeatures are not supported for repositories in workspaces\nadministered through admin.atlassian.com.\n" }, "has_wiki": { - "type": "boolean" + "type": "boolean", + "description": "\nThe wiki for this repository is enabled. Wiki\nfeatures are not supported for repositories in workspaces\nadministered through admin.atlassian.com.\n" }, "is_private": { "type": "boolean" @@ -25245,6 +31064,63 @@ "title": "Tag", "description": "A tag object, representing a tag in a repository." }, + "task": { + "type": "object", + "title": "Task", + "description": "A task object.", + "properties": { + "content": { + "type": "object", + "properties": { + "html": { + "type": "string", + "description": "The user's content rendered as HTML." + }, + "markup": { + "type": "string", + "description": "The type of markup language the raw content is to be interpreted in.", + "enum": ["markdown", "creole", "plaintext"] + }, + "raw": { + "type": "string", + "description": "The text as it was typed by a user." + } + }, + "additionalProperties": false + }, + "created_on": { + "type": "string", + "format": "date-time" + }, + "creator": { + "$ref": "#/components/schemas/account" + }, + "id": { + "type": "integer" + }, + "pending": { + "type": "boolean" + }, + "resolved_by": { + "$ref": "#/components/schemas/account" + }, + "resolved_on": { + "type": "string", + "description": "The ISO8601 timestamp for when the task was resolved.", + "format": "date-time" + }, + "state": { + "type": "string", + "enum": ["RESOLVED", "UNRESOLVED"] + }, + "updated_on": { + "type": "string", + "format": "date-time" + } + }, + "required": ["created_on", "updated_on", "state", "content", "creator"], + "additionalProperties": false + }, "team": { "allOf": [ { @@ -25442,36 +31318,48 @@ "items": { "type": "string", "enum": [ - "issue:created", - "repo:commit_status_updated", - "pullrequest:comment_created", - "pullrequest:created", + "issue:comment_created", + "repo:push", + "repo:transfer", + "pullrequest:changes_request_removed", + "pullrequest:comment_updated", "pullrequest:unapproved", - "repo:commit_status_created", + "pullrequest:comment_created", "repo:created", "pullrequest:changes_request_created", - "pullrequest:comment_updated", - "pullrequest:changes_request_removed", - "pullrequest:comment_deleted", "repo:imported", - "repo:commit_comment_created", + "repo:fork", "project:updated", - "repo:updated", + "issue:created", + "repo:deleted", "issue:updated", + "pullrequest:comment_reopened", + "pullrequest:updated", + "repo:commit_comment_created", + "pullrequest:created", + "pullrequest:approved", "pullrequest:rejected", "pullrequest:fulfilled", - "issue:comment_created", - "repo:fork", - "pullrequest:updated", - "repo:push", - "pullrequest:approved", - "repo:deleted", - "repo:transfer" + "pullrequest:comment_resolved", + "repo:commit_status_updated", + "repo:updated", + "pullrequest:comment_deleted", + "repo:commit_status_created" ] }, "minItems": 1, "uniqueItems": true }, + "secret": { + "type": "string", + "description": "The secret to associate with the hook. The secret is never returned via the API. As such, this field is only used during updates. The secret can be set to `null` or \"\" to remove the secret (or create a hook with no secret). Leaving out the secret field during updates will leave the secret unchanged. Leaving out the secret during creation will create a hook with no secret.", + "minLength": 0, + "maxLength": 128 + }, + "secret_set": { + "type": "boolean", + "description": "Indicates whether or not the hook has an associated secret. It is not possible to see the hook's secret. This field is ignored during updates." + }, "subject": { "$ref": "#/components/schemas/object" }, diff --git a/plugins/bitbucket-cloud-common/src/models/index.ts b/plugins/bitbucket-cloud-common/src/models/index.ts index d868e2926c..8fce389a32 100644 --- a/plugins/bitbucket-cloud-common/src/models/index.ts +++ b/plugins/bitbucket-cloud-common/src/models/index.ts @@ -373,7 +373,19 @@ export namespace Models { * The concatenation of the repository owner's username and the slugified name, e.g. "evzijst/interruptingcow". This is the same string used in Bitbucket URLs. */ full_name?: string; + /** + * + * The issue tracker for this repository is enabled. Issue Tracker + * features are not supported for repositories in workspaces + * administered through admin.atlassian.com. + */ has_issues?: boolean; + /** + * + * The wiki for this repository is enabled. Wiki + * features are not supported for repositories in workspaces + * administered through admin.atlassian.com. + */ has_wiki?: boolean; is_private?: boolean; language?: string;