import { isAxiosError, AxiosError } from 'axios' import { AutomationResponse } from '@/automations/types/api/automation' import { Automation } from '@/automations/types/automation' import { AutomationsFilter } from '@/automations/types/filter' import { mapper } from '@/services/Mapper' import { WorkspaceApi } from '@/services/WorkspaceApi' import { Require } from '@/types/utilities' import { httpStatus } from '@/utilities/httpStatus' export class WorkspaceAutomationsApi extends WorkspaceApi { protected override routePrefix = '/automations' public async getAutomation(automationId: string): Promise { const { data } = await this.get(`/${automationId}`) return mapper.map('AutomationResponse', data, 'Automation') } public async getAutomations(filter: AutomationsFilter = {}): Promise { const { data } = await this.post('/filter', filter) return mapper.map('AutomationResponse', data, 'Automation') } public deleteAutomation(automationId: string): Promise { return this.delete(`/${automationId}`) } public enableAutomation(automationId: string, enabled: boolean = true): Promise { return this.patch(`/${automationId}`, { enabled }) } public async validateTemplate(template: string): Promise { try { await this.post('/templates/validate', template) return true } catch (error) { if (isInvalidAutomationTemplateError(error)) { const { line, message } = error.response.data.error return `Error on line ${line}: ${message} ` } throw error } } public async getResourceAutomations(resourceId: string): Promise { const { data } = await this.get(`related-to/${resourceId}`) return mapper.map('AutomationResponse', data, 'Automation') } } type InvalidAutomationTemplateError = { error: { line: number, message: string, source: string, }, } function isInvalidAutomationTemplateError(error: unknown): error is Require, 'response'> { if (!isAxiosError(error)) { return false } return httpStatus(error).is('UnprocessableEntity') }