/// import { ApiPayload, CompassSearchComponentNodeFragment, SdkError, SearchComponents, SearchComponentsInput, SearchComponentsPayload, } from '@atlassian/forge-graphql-types'; import { CompassRequests } from '../../compass-requests'; import { mapGqlErrors, mapQueryErrors, parsingResponseError, transformGqlComponent, } from '../../helpers'; import { SEARCH_COMPONENTS_RETRIEVAL_OPTIONS } from '../../helpers/constants'; declare module '../../compass-requests' { interface CompassRequests { /** * Searches for Compass components. * **Required Oauth Scopes:** `read:component:compass` */ searchComponents( input: SearchComponentsInput, ): Promise>; } } CompassRequests.prototype.searchComponents = async function ( this: CompassRequests, { cloudId, query, options }, ) { let components = null; let pageInfo = null; let errorsResp: SdkError[] = []; try { const resp = await this.api.requestGraph( SearchComponents, { cloudId, query, ...SEARCH_COMPONENTS_RETRIEVAL_OPTIONS, ...options }, 'searchComponents', ); const { data, errors: gqlErrors } = await resp.json(); errorsResp = mapGqlErrors(gqlErrors); errorsResp = errorsResp.concat( mapQueryErrors(data.compass, [ 'searchComponents', 'searchComponents.metricSources', ]), ); if ( errorsResp.length === 0 && data.compass.searchComponents.nodes?.length > 0 ) { components = data.compass.searchComponents.nodes .filter( (node: CompassSearchComponentNodeFragment) => node.component !== null, ) .map((node: CompassSearchComponentNodeFragment) => transformGqlComponent(node.component), ); pageInfo = data.compass.searchComponents.pageInfo; } } catch (e) { if (errorsResp.length === 0) { errorsResp.push(parsingResponseError(e)); } } return { errors: errorsResp, success: errorsResp.length === 0, data: { components, pageInfo }, }; };