@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
text/typescript
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,
});
};