///
import {
ApiPayload,
CompassCreateEventInput,
GqlError,
SdkError,
} from '@atlassian/forge-graphql-types';
import { CompassRequests } from '../../compass-requests';
import {
COMPOUND_MUTATION_NAME,
concatGqlSegments,
mapGqlErrors,
parseCompoundMutationErrors,
parsingResponseError,
prefixMutation,
} from '../../helpers';
import createBuildEventSegment from '../../helpers/gql-segments/createEventSegment';
declare module '../../compass-requests' {
interface CompassRequests {
/**
* Creates a new compass event. **Note: This method is unstable.**
*
* #### Required Oauth Scopes
* * write:event:compass
*/
createEvent(
input: CompassCreateEventInput | CompassCreateEventInput[],
): Promise;
}
}
CompassRequests.prototype.createEvent = async function (
this: CompassRequests,
input,
) {
let gqlErrors: Array;
let errorsResp: Array = [];
let data;
const inputAsArray = Array.isArray(input) ? input : new Array(input);
const { mutation, parameters, variables } = concatGqlSegments(
inputAsArray.map(createBuildEventSegment),
);
const prefixedMutation = prefixMutation(
mutation,
COMPOUND_MUTATION_NAME,
parameters,
);
try {
const resp = await this.api.requestGraph(
prefixedMutation,
variables,
'createCompassEvent',
);
({ errors: gqlErrors, data } = await resp.json());
errorsResp = errorsResp.concat(mapGqlErrors(gqlErrors));
errorsResp = errorsResp.concat(
parseCompoundMutationErrors(data, variables),
);
} catch (e) {
if (errorsResp.length === 0) {
errorsResp.push(parsingResponseError(e));
}
}
return {
errors: errorsResp,
success: errorsResp.length === 0,
};
};