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