Skip to main content
Glama
by concavegit
workflows.ts5.87 kB
import { AppStoreConnectClient } from '../services/index.js'; import { CiProductsResponse, CiProductFilters, CiProductSortOptions, CiProductFieldOptions, CiProductIncludeOptions, CiBuildRunsResponse, CiBuildRunFilters, CiBuildRunSortOptions, CiBuildRunFieldOptions, CiBuildRunIncludeOptions, CiBuildActionsResponse, CiBuildActionFilters, CiBuildActionSortOptions, CiBuildActionFieldOptions, CiBuildActionIncludeOptions, CiIssuesResponse, CiIssueFilters, CiIssueSortOptions, CiIssueFieldOptions, CiIssueIncludeOptions, CiTestResultsResponse, CiTestResultFilters, CiTestResultSortOptions, CiTestResultFieldOptions, CiTestResultIncludeOptions } from '../types/index.js'; import { sanitizeLimit, buildFilterParams, buildFieldParams } from '../utils/index.js'; export class WorkflowHandlers { constructor(private client: AppStoreConnectClient) {} async listWorkflows(args: { limit?: number; sort?: CiProductSortOptions; filter?: CiProductFilters; fields?: { ciProducts?: CiProductFieldOptions[]; }; include?: CiProductIncludeOptions[]; } = {}): Promise<CiProductsResponse> { const { limit = 100, sort, filter, fields, include } = args; const params: Record<string, any> = { limit: sanitizeLimit(limit) }; if (sort) { params.sort = sort; } if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFilterParams(filter)); Object.assign(params, buildFieldParams(fields)); return this.client.get<CiProductsResponse>('/ciProducts', params); } async listBuildRuns(args: { ciProductId: string; limit?: number; sort?: CiBuildRunSortOptions; filter?: CiBuildRunFilters; fields?: { ciBuildRuns?: CiBuildRunFieldOptions[]; }; include?: CiBuildRunIncludeOptions[]; }): Promise<CiBuildRunsResponse> { const { ciProductId, limit = 100, sort, filter, fields, include } = args; const params: Record<string, any> = { limit: sanitizeLimit(limit) }; if (sort) { params.sort = sort; } if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFilterParams(filter)); Object.assign(params, buildFieldParams(fields)); return this.client.get<CiBuildRunsResponse>(`/ciProducts/${ciProductId}/buildRuns`, params); } async listBuildActions(args: { buildRunId: string; limit?: number; sort?: CiBuildActionSortOptions; filter?: CiBuildActionFilters; fields?: { ciBuildActions?: CiBuildActionFieldOptions[]; }; include?: CiBuildActionIncludeOptions[]; }): Promise<CiBuildActionsResponse> { const { buildRunId, limit = 100, sort, filter, fields, include } = args; const params: Record<string, any> = { limit: sanitizeLimit(limit) }; if (sort) { params.sort = sort; } if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFilterParams(filter)); Object.assign(params, buildFieldParams(fields)); return this.client.get<CiBuildActionsResponse>(`/ciBuildRuns/${buildRunId}/actions`, params); } async getBuildAction(args: { buildActionId: string; fields?: { ciBuildActions?: CiBuildActionFieldOptions[]; }; include?: CiBuildActionIncludeOptions[]; }): Promise<{ data: any }> { const { buildActionId, fields, include } = args; const params: Record<string, any> = {}; if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFieldParams(fields)); return this.client.get<{ data: any }>(`/ciBuildActions/${buildActionId}`, params); } async listIssues(args: { buildRunId?: string; buildActionId?: string; limit?: number; sort?: CiIssueSortOptions; filter?: CiIssueFilters; fields?: { ciIssues?: CiIssueFieldOptions[]; }; include?: CiIssueIncludeOptions[]; }): Promise<CiIssuesResponse> { const { buildRunId, buildActionId, limit = 100, sort, filter, fields, include } = args; if (!buildRunId && !buildActionId) { throw new Error('Either buildRunId or buildActionId must be provided'); } const params: Record<string, any> = { limit: sanitizeLimit(limit) }; if (sort) { params.sort = sort; } if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFilterParams(filter)); Object.assign(params, buildFieldParams(fields)); const endpoint = buildRunId ? `/ciBuildRuns/${buildRunId}/issues` : `/ciBuildActions/${buildActionId}/issues`; return this.client.get<CiIssuesResponse>(endpoint, params); } async listTestResults(args: { buildRunId?: string; buildActionId?: string; limit?: number; sort?: CiTestResultSortOptions; filter?: CiTestResultFilters; fields?: { ciTestResults?: CiTestResultFieldOptions[]; }; include?: CiTestResultIncludeOptions[]; }): Promise<CiTestResultsResponse> { const { buildRunId, buildActionId, limit = 100, sort, filter, fields, include } = args; if (!buildRunId && !buildActionId) { throw new Error('Either buildRunId or buildActionId must be provided'); } const params: Record<string, any> = { limit: sanitizeLimit(limit) }; if (sort) { params.sort = sort; } if (include?.length) { params.include = include.join(','); } Object.assign(params, buildFilterParams(filter)); Object.assign(params, buildFieldParams(fields)); const endpoint = buildRunId ? `/ciBuildRuns/${buildRunId}/testResults` : `/ciBuildActions/${buildActionId}/testResults`; return this.client.get<CiTestResultsResponse>(endpoint, params); } }

Latest Blog Posts

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/concavegit/app-store-connect-mcp-server'

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