UNPKG

@buildable/pipelines

Version:

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

130 lines (115 loc) 2.4 kB
import { makeHttpNetworkCall } from '@buildable/utils'; import { CreatePipelinePayload, DeletePipelinePayload, ListPipelinesPayload, Pipeline, Pipelines, UpdatePipelinePayload, } from '@buildable/types'; import { getConfig, getMiddleware } from './utilities'; import { identity } from 'ramda'; import { matchResultAndHandleHttpError } from '@buildable/utils'; export const createPipelineApi = ( headers: Record<string, string>, url: string, payload: CreatePipelinePayload ) => { const { label, key, source, destination, settings, extractors, transformation } = payload; const finalPayload = { key, name: label, source: { events: source.events, key: source.key, }, destinations: [ { action: destination.action, key: destination.key, }, ], config: getConfig(settings), middleware: getMiddleware(extractors, transformation), }; return makeHttpNetworkCall<Pipeline>({ method: 'POST', url, data: finalPayload, headers, }); }; export const updatePipelineApi = async ( headers: Record<string, string>, updateUrl: string, listUrl: string, payload: UpdatePipelinePayload ) => { const { key, source, destination, settings, extractors, transformation, active, } = payload; //fetch the pipeline using the id and then update the pipeline const pipeline = await listPipelinesApi(headers, listUrl, { query: { key, }, }); const { data } = matchResultAndHandleHttpError(pipeline, identity); const finalPayload = { key, active, source: source && { events: source.events, key: source.key, }, destinations: destination && [ { action: destination.action, key: destination.key, }, ], config: settings && getConfig(settings), 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 ) => { return makeHttpNetworkCall({ method: 'POST', url, data: payload, headers, }); }; export const listPipelinesApi = ( headers: Record<string, string>, url: string, payload: ListPipelinesPayload ) => { return makeHttpNetworkCall<Pipelines>({ method: 'POST', url, data: payload, headers, }); };