/// import { ApiPayload, CompassMetricDefinition, GetMetricSources, GetMetricSourcesQuery, GetMetricSourcesQueryVariables, MetricSourcesPayload, SdkError, } from '@atlassian/forge-graphql-types'; import { CompassRequests } from '../../compass-requests'; import { mapGqlErrors, mapQueryErrors, parsingResponseError, } from '../../helpers'; declare module '../../compass-requests' { interface CompassRequests { /** * Retrieves metric sources associated with a given metric definitiona single metric definition by its internal ID. */ getMetricSources( cloudId: string, metricDefinitionId: string, after?: string, ): Promise>; } } CompassRequests.prototype.getMetricSources = async function getMetricSources( this: CompassRequests, cloudId: string, metricDefinitionId: string, after?: string, ): Promise> { let errorsResp: SdkError[] = []; let metricDefinition: CompassMetricDefinition; try { const resp = await this.api.requestGraph< GetMetricSourcesQuery, GetMetricSourcesQueryVariables >(GetMetricSources, { cloudId, metricDefinitionId, after, }); const { data, errors: gqlErrors } = await resp.json(); errorsResp = mapGqlErrors(gqlErrors); errorsResp = errorsResp.concat( mapQueryErrors(data.compass, ['metricDefinition']), ); if (errorsResp.length === 0) { metricDefinition = data.compass.metricDefinition; } } catch (e) { if (errorsResp.length === 0) { errorsResp.push(parsingResponseError(e)); } } if (metricDefinition && 'nodes' in metricDefinition.metricSources) { return { errors: errorsResp, success: errorsResp.length === 0, data: { metricSources: metricDefinition.metricSources.nodes, pageInfo: metricDefinition.metricSources.pageInfo, }, }; } return { errors: errorsResp, success: errorsResp.length === 0, data: { metricSources: undefined, pageInfo: undefined, }, }; };