import { ApiPayload, CompassCreateMetricSourceInput, CreateMetricSource, GqlError, MetricSourceIdPayload, MutationError, SdkError, } from '@atlassian/forge-graphql-types'; import { CompassRequests } from '../../compass-requests'; import { mapGqlErrors, mapMutationErrors, parsingResponseError, } from '../../helpers'; declare module '../../compass-requests' { interface CompassRequests { /** * Creates a metric source for a component. A metric source contains values providing numerical data about a component. */ createMetricSource( input: CompassCreateMetricSourceInput, ): Promise>; } } CompassRequests.prototype.createMetricSource = async function ( this: CompassRequests, input, ) { let createdMetricSource; let id = null; let gqlErrors: Array; let mutationErrors: Array; let errorsResp: Array = []; let data; try { const resp = await this.api.requestGraph( CreateMetricSource, { input }, 'createMetricSource', ); ({ errors: gqlErrors, data } = await resp.json()); console.log('createMetricSource', { gqlErrors, data }); errorsResp = errorsResp.concat(mapGqlErrors(gqlErrors)); ({ createMetricSource: { errors: mutationErrors, createdMetricSource }, } = data.compass); errorsResp = errorsResp.concat(mapMutationErrors(mutationErrors)); if (errorsResp.length === 0) { id = createdMetricSource.id; } } catch (e) { if (errorsResp.length === 0) { errorsResp.push(parsingResponseError(e)); } } return { errors: errorsResp, success: errorsResp.length === 0, data: { metricSourceId: id }, }; };