///
import {
ApiPayload,
GetMetricDefinitions,
GetMetricDefinitionsInput,
MetricDefinitionsPayload,
SdkError,
} from '@atlassian/forge-graphql-types';
import { CompassRequests } from '../../compass-requests';
import {
mapGqlErrors,
mapQueryErrors,
parsingResponseError,
} from '../../helpers';
import { METRIC_DEFINITION_RETRIEVAL_OPTIONS } from '../../helpers/constants';
declare module '../../compass-requests' {
interface CompassRequests {
/**
* Retrieves multiple metric definitions on the Compass Site.
*/
getMetricDefinitions(
input: GetMetricDefinitionsInput,
): Promise>;
}
}
CompassRequests.prototype.getMetricDefinitions = async function (
this: CompassRequests,
{ options, ...getMetricDefinitionsInput },
) {
let metricDefinitions = null;
let pageInfo = null;
let errorsResp: SdkError[] = [];
try {
const resp = await this.api.requestGraph(
GetMetricDefinitions,
{
input: getMetricDefinitionsInput,
...METRIC_DEFINITION_RETRIEVAL_OPTIONS,
...options,
},
'getMetricDefinitions',
);
const { data, errors: gqlErrors } = await resp.json();
errorsResp = mapGqlErrors(gqlErrors);
errorsResp = errorsResp.concat(
mapQueryErrors(data.compass, ['metricDefinitions']),
);
if (errorsResp.length === 0) {
metricDefinitions = data.compass.metricDefinitions.nodes;
pageInfo = data.compass.metricDefinitions.pageInfo;
}
} catch (e) {
if (errorsResp.length === 0) {
errorsResp.push(parsingResponseError(e));
}
}
return {
errors: errorsResp,
success: errorsResp.length === 0,
data: { metricDefinitions, pageInfo },
};
};