Skip to main content
Glama

mcp-google-sheets

create-issue.ts3.3 kB
import { createAction, DynamicPropsValue, Property } from '@activepieces/pieces-framework'; import { JiraAuth, jiraCloudAuth } from '../../auth'; import { getProjectIdDropdown, formatIssueFields, issueTypeIdProp, createPropertyDefinition, transformCustomFields, } from '../common/props'; import { jiraApiCall, jiraPaginatedApiCall } from '../common'; import { IssueFieldMetaData, VALID_CUSTOM_FIELD_TYPES } from '../common/types'; import { HttpMethod } from '@activepieces/pieces-common'; import { isNil } from '@activepieces/shared'; export const createIssueAction = createAction({ name: 'create_issue', displayName: 'Create Issue', description: 'Creates a new issue in a project.', auth: jiraCloudAuth, props: { projectId: getProjectIdDropdown(), issueTypeId: issueTypeIdProp('Issue Type'), issueFields: Property.DynamicProperties({ displayName: 'Fields', required: true, refreshers: ['projectId', 'issueTypeId'], props: async ({ auth, projectId, issueTypeId }) => { if (!auth || !issueTypeId || !projectId) { return {}; } const props: DynamicPropsValue = {}; const authValue = auth as JiraAuth; const fields = await jiraPaginatedApiCall<IssueFieldMetaData, 'fields'>({ auth: authValue, method: HttpMethod.GET, resourceUri: `/issue/createmeta/${projectId}/issuetypes/${issueTypeId}`, propertyName: 'fields', }); if (!fields || !Array.isArray(fields)) return {}; for (const field of fields) { // skip invalid custom fields if (field.schema.custom) { const customFieldType = field.schema.custom.split(':')[1]; if (!VALID_CUSTOM_FIELD_TYPES.includes(customFieldType)) { continue; } } if (['project', 'issuetype'].includes(field.key)) { continue; } props[field.key] = await createPropertyDefinition(authValue, field, field.required); } // Remove null props return Object.fromEntries(Object.entries(props).filter(([_, prop]) => prop !== null)); }, }), }, async run(context) { const { projectId, issueTypeId } = context.propsValue; const inputIssueFields = context.propsValue.issueFields ?? {}; if (isNil(projectId) || isNil(issueTypeId)) { throw new Error('Project ID and Issue Type ID are required'); } const issueTypeFields = await jiraPaginatedApiCall<IssueFieldMetaData, 'fields'>({ auth: context.auth, method: HttpMethod.GET, resourceUri: `/issue/createmeta/${projectId}/issuetypes/${issueTypeId}`, propertyName: 'fields', }); const formattedFields = formatIssueFields(issueTypeFields, inputIssueFields); const response = await jiraApiCall<{ id: string; key: string }>({ auth: context.auth, method: HttpMethod.POST, resourceUri: `/issue`, body: { fields: { issuetype: { id: issueTypeId, }, project: { id: projectId, }, ...formattedFields, }, }, }); const issue = await jiraApiCall<{ expand: string; id: string; key: string; fields: Record<string, any>; }>({ auth: context.auth, method: HttpMethod.GET, resourceUri: `/issue/${response.id}`, }); const updatedIssueProperties = transformCustomFields(issueTypeFields, issue.fields); return { ...issue, fields: updatedIssueProperties, }; }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server