diff --git a/.changeset/pink-mayflies-rhyme.md b/.changeset/pink-mayflies-rhyme.md new file mode 100644 index 0000000000..fff17b28b3 --- /dev/null +++ b/.changeset/pink-mayflies-rhyme.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-newrelic-dashboard': patch +--- + +Add `FetchApi` and related `fetchApiRef` which implement fetch. in order to included the Authorization Token to New Relic Dashboard Plugin, so that frontend can send an authenticated proxy call to backend diff --git a/plugins/newrelic-dashboard/src/api/NewRelicDashboardClient.ts b/plugins/newrelic-dashboard/src/api/NewRelicDashboardClient.ts index 2411102712..63b33056e1 100644 --- a/plugins/newrelic-dashboard/src/api/NewRelicDashboardClient.ts +++ b/plugins/newrelic-dashboard/src/api/NewRelicDashboardClient.ts @@ -18,7 +18,7 @@ import { DashboardSnapshotSummary, NewRelicDashboardApi, } from './NewRelicDashboardApi'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { DashboardEntity } from '../types/DashboardEntity'; import { DashboardSnapshot } from '../types/DashboardSnapshot'; import { getDashboardParentGuidQuery } from '../queries/getDashboardParentGuidQuery'; @@ -27,13 +27,18 @@ import { ResponseError } from '@backstage/errors'; export class NewRelicDashboardClient implements NewRelicDashboardApi { private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + constructor({ discoveryApi, + fetchApi, }: { discoveryApi: DiscoveryApi; + fetchApi: FetchApi; baseUrl?: string; }) { this.discoveryApi = discoveryApi; + this.fetchApi = fetchApi; } private async callApi( @@ -56,7 +61,7 @@ export class NewRelicDashboardClient implements NewRelicDashboardApi { const apiUrl = `${await this.discoveryApi.getBaseUrl( 'proxy', )}/newrelic/api/graphql`; - const response = await fetch(apiUrl, requestOptions); + const response = await this.fetchApi.fetch(apiUrl, requestOptions); if (response.status === 200) { return (await response.json()) as T; } diff --git a/plugins/newrelic-dashboard/src/plugin.ts b/plugins/newrelic-dashboard/src/plugin.ts index 9bfecff18f..d4ed11573f 100644 --- a/plugins/newrelic-dashboard/src/plugin.ts +++ b/plugins/newrelic-dashboard/src/plugin.ts @@ -19,6 +19,7 @@ import { createApiFactory, discoveryApiRef, createComponentExtension, + fetchApiRef, } from '@backstage/core-plugin-api'; import { newRelicDashboardApiRef, NewRelicDashboardClient } from './api'; import { rootRouteRef } from './routes'; @@ -31,10 +32,15 @@ export const newRelicDashboardPlugin = createPlugin({ apis: [ createApiFactory({ api: newRelicDashboardApiRef, - deps: { configApi: configApiRef, discoveryApi: discoveryApiRef }, - factory: ({ configApi, discoveryApi }) => + deps: { + configApi: configApiRef, + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ configApi, discoveryApi, fetchApi }) => new NewRelicDashboardClient({ discoveryApi, + fetchApi, baseUrl: configApi.getOptionalString('newrelicdashboard.baseUrl'), }), }),