///
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,
},
};
};