/// import { ApiPayload, GetMetricDefinition, GetMetricDefinitionsOptions, MetricDefinitionPayload, SdkError, } from '@atlassian/forge-graphql-types'; import { CompassRequests } from '../../compass-requests'; import { mapGqlErrors, mapQueryErrors, parsingResponseError, } from '../../helpers'; declare module '../../compass-requests' { interface CompassRequests { /** * Retrieves a single metric definition by its internal ID. */ getMetricDefinition( cloudId: string, metricDefinitionId: string, options?: GetMetricDefinitionsOptions, ): Promise>; } } CompassRequests.prototype.getMetricDefinition = async function ( this: CompassRequests, cloudId: string, metricDefinitionId: string, options?: GetMetricDefinitionsOptions, ) { let metricDefinition = null; let errorsResp: SdkError[] = []; const metricDefOptions = options && Object.keys(options).length > 0 ? options : { includeMetricSources: false }; try { const resp = await this.api.requestGraph( GetMetricDefinition, { cloudId, metricDefinitionId, options: metricDefOptions }, 'getMetricDefinition', ); const { data, errors: gqlErrors } = await resp.json(); console.log('getMetricDefinition', { gqlErrors, data }); 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)); } } return { errors: errorsResp, success: errorsResp.length === 0, data: { metricDefinition }, }; };