UNPKG

@event-inc/pipelines

Version:

Event Inc is a fully managed event bus lets you send and receive data across mission-critical cloud apps, databases and warehouses.

189 lines (169 loc) 3.69 kB
import { checkIfKeyOrIdExists, makeHttpNetworkCall } from '@event-inc/utils'; import { CreatePipelinePayload, DeletePipelinePayload, DestinationActionsList, ListPipelinesPayload, Pipeline, Pipelines, SourcePlatformList, UpdatePipelinePayload, } from '@event-inc/types'; import { getConfig, getMiddleware } from './utilities'; import { identity } from 'ramda'; import { matchResultAndHandleHttpError } from '@event-inc/utils'; import { version3 } from './configs.apis'; export const createPipelineApi = < S extends SourcePlatformList, D extends DestinationActionsList >( headers: Record<string, string>, url: string, payload: CreatePipelinePayload<S, D> ) => { const { label, key, source, destination, settings, extractors, transformation, } = payload; checkIfKeyOrIdExists( source?.id, source?.key, 'Must provide either source key or id for pipeline creation' ); checkIfKeyOrIdExists( destination?.id, destination?.key, 'Must provide either destination key or id for pipeline creation' ); const finalPayload = { key, name: label, source: { events: source.events, key: source?.key, id: source?.id, }, destinations: [ { action: destination.action, key: destination.key, id: destination?.id, }, ], config: getConfig(settings), middleware: getMiddleware(extractors, transformation), }; return makeHttpNetworkCall<Pipeline>({ method: 'POST', url: `${url}/${version3}/pipelines/create`, data: finalPayload, headers, }); }; export const updatePipelineApi = async < S extends SourcePlatformList, D extends DestinationActionsList >( headers: Record<string, string>, url: string, payload: UpdatePipelinePayload<S, D> ) => { const { key, id, source, destination, settings, extractors, transformation, active, } = payload; checkIfKeyOrIdExists( payload?.id, payload?.key, 'Must provide either pipeline key or id for updating a pipeline' ); if (source) checkIfKeyOrIdExists( source?.id, source?.key, 'Must provide either source key or id for updating a pipeline' ); if (destination) checkIfKeyOrIdExists( destination?.id, destination?.key, 'Must provide either destination key or id for updating a pipeline' ); const updateUrl = `${url}/${version3}/pipelines/update`; const pipeline = await listPipelinesApi(headers, url, { query: { key, _id: id, }, }); const { data } = matchResultAndHandleHttpError(pipeline, identity); const finalPayload = { id, key, active, source: source && { events: source.events, key: source.key, id: source.id, }, destinations: destination && [ { action: destination.action, key: destination.key, id: destination.id, }, ], config: settings && getConfig(settings, data?.rows?.[0]), middleware: getMiddleware( extractors, transformation, data?.rows?.[0]?.middleware ) }; return makeHttpNetworkCall<Pipeline>({ method: 'POST', url: updateUrl, data: finalPayload, headers, }); }; export const deletePipelineApi = ( headers: Record<string, string>, url: string, payload: DeletePipelinePayload ) => { checkIfKeyOrIdExists( payload?.id, payload?.key, 'Must provide either pipeline key or id for deleting a pipeline' ); return makeHttpNetworkCall({ method: 'POST', url: `${url}/${version3}/pipelines/delete`, data: payload, headers, }); }; export const listPipelinesApi = ( headers: Record<string, string>, url: string, payload: ListPipelinesPayload ) => { return makeHttpNetworkCall<Pipelines>({ method: 'POST', url: `${url}/${version3}/pipelines/list`, data: payload, headers, }); };