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