diff --git a/.changeset/olive-mails-tell.md b/.changeset/olive-mails-tell.md new file mode 100644 index 0000000000..5f82656679 --- /dev/null +++ b/.changeset/olive-mails-tell.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-devtools': patch +'@backstage/plugin-linguist': patch +--- + +Updated to use `fetchApi` as per [ADR013](https://backstage.io/docs/architecture-decisions/adrs-adr013) diff --git a/.changeset/rude-sheep-jam.md b/.changeset/rude-sheep-jam.md new file mode 100644 index 0000000000..75b0354e9c --- /dev/null +++ b/.changeset/rude-sheep-jam.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-azure-devops': minor +--- + +**BREAKING** The `AzureDevOpsClient` no longer requires `identityAPi` but now requires `fetchApi`. + +Updated to use `fetchApi` as per [ADR013](https://backstage.io/docs/architecture-decisions/adrs-adr013) diff --git a/plugins/azure-devops/api-report.md b/plugins/azure-devops/api-report.md index cfff4348ee..e4e2d4306f 100644 --- a/plugins/azure-devops/api-report.md +++ b/plugins/azure-devops/api-report.md @@ -12,8 +12,8 @@ import { BuildRunOptions } from '@backstage/plugin-azure-devops-common'; import { DashboardPullRequest } from '@backstage/plugin-azure-devops-common'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; +import { FetchApi } from '@backstage/core-plugin-api'; import { GitTag } from '@backstage/plugin-azure-devops-common'; -import { IdentityApi } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; import { PullRequest } from '@backstage/plugin-azure-devops-common'; import { PullRequestOptions } from '@backstage/plugin-azure-devops-common'; @@ -121,10 +121,7 @@ export const azureDevOpsApiRef: ApiRef; // @public (undocumented) export class AzureDevOpsClient implements AzureDevOpsApi { - constructor(options: { - discoveryApi: DiscoveryApi; - identityApi: IdentityApi; - }); + constructor(options: { discoveryApi: DiscoveryApi; fetchApi: FetchApi }); // (undocumented) getAllTeams(): Promise; // (undocumented) diff --git a/plugins/azure-devops/src/alpha/plugin.tsx b/plugins/azure-devops/src/alpha/plugin.tsx index 40305c1714..62d8719324 100644 --- a/plugins/azure-devops/src/alpha/plugin.tsx +++ b/plugins/azure-devops/src/alpha/plugin.tsx @@ -21,7 +21,7 @@ import { createPageExtension, createPlugin, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/frontend-plugin-api'; import { azureDevOpsApiRef, AzureDevOpsClient } from '../api'; import { @@ -38,9 +38,12 @@ import { azurePullRequestDashboardRouteRef } from '../routes'; export const azureDevOpsApi = createApiExtension({ factory: createApiFactory({ api: azureDevOpsApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new AzureDevOpsClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new AzureDevOpsClient({ discoveryApi, fetchApi }), }), }); diff --git a/plugins/azure-devops/src/api/AzureDevOpsClient.ts b/plugins/azure-devops/src/api/AzureDevOpsClient.ts index a10b10ff14..f5c046ef07 100644 --- a/plugins/azure-devops/src/api/AzureDevOpsClient.ts +++ b/plugins/azure-devops/src/api/AzureDevOpsClient.ts @@ -27,21 +27,21 @@ import { RepoBuildOptions, Team, } from '@backstage/plugin-azure-devops-common'; -import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { ResponseError } from '@backstage/errors'; import { AzureDevOpsApi } from './AzureDevOpsApi'; /** @public */ export class AzureDevOpsClient implements AzureDevOpsApi { private readonly discoveryApi: DiscoveryApi; - private readonly identityApi: IdentityApi; + private readonly fetchApi: FetchApi; public constructor(options: { discoveryApi: DiscoveryApi; - identityApi: IdentityApi; + fetchApi: FetchApi; }) { this.discoveryApi = options.discoveryApi; - this.identityApi = options.identityApi; + this.fetchApi = options.fetchApi; } public async getRepoBuilds( @@ -203,10 +203,7 @@ export class AzureDevOpsClient implements AzureDevOpsApi { const baseUrl = `${await this.discoveryApi.getBaseUrl('azure-devops')}/`; const url = new URL(path, baseUrl); - const { token: idToken } = await this.identityApi.getCredentials(); - const response = await fetch(url.toString(), { - headers: idToken ? { Authorization: `Bearer ${idToken}` } : {}, - }); + const response = await this.fetchApi.fetch(url.toString()); if (!response.ok) { throw await ResponseError.fromResponse(response); diff --git a/plugins/azure-devops/src/plugin.ts b/plugins/azure-devops/src/plugin.ts index 1e76c9e53a..b35f16de2d 100644 --- a/plugins/azure-devops/src/plugin.ts +++ b/plugins/azure-devops/src/plugin.ts @@ -26,7 +26,7 @@ import { createRoutableExtension, createComponentExtension, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/core-plugin-api'; import { AzureDevOpsClient } from './api/AzureDevOpsClient'; @@ -56,9 +56,12 @@ export const azureDevOpsPlugin = createPlugin({ apis: [ createApiFactory({ api: azureDevOpsApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new AzureDevOpsClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new AzureDevOpsClient({ discoveryApi, fetchApi }), }), ], }); diff --git a/plugins/devtools/src/alpha/plugin.tsx b/plugins/devtools/src/alpha/plugin.tsx index 746b90a50f..0420556504 100644 --- a/plugins/devtools/src/alpha/plugin.tsx +++ b/plugins/devtools/src/alpha/plugin.tsx @@ -22,7 +22,7 @@ import { createPageExtension, createPlugin, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/frontend-plugin-api'; import { devToolsApiRef, DevToolsClient } from '../api'; @@ -37,9 +37,12 @@ import { rootRouteRef } from '../routes'; export const devToolsApi = createApiExtension({ factory: createApiFactory({ api: devToolsApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new DevToolsClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new DevToolsClient({ discoveryApi, fetchApi }), }), }); diff --git a/plugins/devtools/src/api/DevToolsClient.ts b/plugins/devtools/src/api/DevToolsClient.ts index 0be8294b3f..e0b387a6ca 100644 --- a/plugins/devtools/src/api/DevToolsClient.ts +++ b/plugins/devtools/src/api/DevToolsClient.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { ConfigInfo, DevToolsInfo, @@ -25,14 +25,14 @@ import { DevToolsApi } from './DevToolsApi'; export class DevToolsClient implements DevToolsApi { private readonly discoveryApi: DiscoveryApi; - private readonly identityApi: IdentityApi; + private readonly fetchApi: FetchApi; public constructor(options: { discoveryApi: DiscoveryApi; - identityApi: IdentityApi; + fetchApi: FetchApi; }) { this.discoveryApi = options.discoveryApi; - this.identityApi = options.identityApi; + this.fetchApi = options.fetchApi; } public async getConfig(): Promise { @@ -64,10 +64,7 @@ export class DevToolsClient implements DevToolsApi { const baseUrl = `${await this.discoveryApi.getBaseUrl('devtools')}/`; const url = new URL(path, baseUrl); - const { token } = await this.identityApi.getCredentials(); - const response = await fetch(url.toString(), { - headers: token ? { Authorization: `Bearer ${token}` } : {}, - }); + const response = await this.fetchApi.fetch(url.toString()); if (!response.ok) { throw await ResponseError.fromResponse(response); diff --git a/plugins/devtools/src/plugin.ts b/plugins/devtools/src/plugin.ts index df2aca3447..77a90746f1 100644 --- a/plugins/devtools/src/plugin.ts +++ b/plugins/devtools/src/plugin.ts @@ -19,7 +19,7 @@ import { createPlugin, createRoutableExtension, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/core-plugin-api'; import { devToolsApiRef, DevToolsClient } from './api'; @@ -31,9 +31,12 @@ export const devToolsPlugin = createPlugin({ apis: [ createApiFactory({ api: devToolsApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new DevToolsClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new DevToolsClient({ discoveryApi, fetchApi }), }), ], routes: { diff --git a/plugins/linguist/src/alpha/plugin.tsx b/plugins/linguist/src/alpha/plugin.tsx index 36d635740f..2c47346538 100644 --- a/plugins/linguist/src/alpha/plugin.tsx +++ b/plugins/linguist/src/alpha/plugin.tsx @@ -20,7 +20,7 @@ import { createApiFactory, createPlugin, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/frontend-plugin-api'; import { LinguistClient, linguistApiRef } from '../api'; @@ -40,9 +40,12 @@ export const entityLinguistCard = createEntityCardExtension({ export const linguistApi = createApiExtension({ factory: createApiFactory({ api: linguistApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new LinguistClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new LinguistClient({ discoveryApi, fetchApi }), }), }); diff --git a/plugins/linguist/src/api/LinguistClient.ts b/plugins/linguist/src/api/LinguistClient.ts index 3e327ff21e..5e687a039b 100644 --- a/plugins/linguist/src/api/LinguistClient.ts +++ b/plugins/linguist/src/api/LinguistClient.ts @@ -14,21 +14,21 @@ * limitations under the License. */ -import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { ResponseError } from '@backstage/errors'; import { Languages } from '@backstage/plugin-linguist-common'; import { LinguistApi } from './LinguistApi'; export class LinguistClient implements LinguistApi { private readonly discoveryApi: DiscoveryApi; - private readonly identityApi: IdentityApi; + private readonly fetchApi: FetchApi; public constructor(options: { discoveryApi: DiscoveryApi; - identityApi: IdentityApi; + fetchApi: FetchApi; }) { this.discoveryApi = options.discoveryApi; - this.identityApi = options.identityApi; + this.fetchApi = options.fetchApi; } public async getLanguages(entityRef: string): Promise { @@ -45,10 +45,7 @@ export class LinguistClient implements LinguistApi { const baseUrl = `${await this.discoveryApi.getBaseUrl('linguist')}/`; const url = new URL(path, baseUrl); - const { token } = await this.identityApi.getCredentials(); - const response = await fetch(url.toString(), { - headers: token ? { Authorization: `Bearer ${token}` } : {}, - }); + const response = await this.fetchApi.fetch(url.toString()); if (!response.ok) { throw await ResponseError.fromResponse(response); diff --git a/plugins/linguist/src/plugin.ts b/plugins/linguist/src/plugin.ts index 917a13ca9a..11f74a381c 100644 --- a/plugins/linguist/src/plugin.ts +++ b/plugins/linguist/src/plugin.ts @@ -19,7 +19,7 @@ import { createComponentExtension, createPlugin, discoveryApiRef, - identityApiRef, + fetchApiRef, } from '@backstage/core-plugin-api'; import { linguistApiRef, LinguistClient } from './api'; import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; @@ -35,9 +35,12 @@ export const linguistPlugin = createPlugin({ apis: [ createApiFactory({ api: linguistApiRef, - deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef }, - factory: ({ discoveryApi, identityApi }) => - new LinguistClient({ discoveryApi, identityApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new LinguistClient({ discoveryApi, fetchApi }), }), ], });