test-this-package-today
Version:
Event Inc is a fully managed event bus lets you send and receive data across mission-critical cloud apps, databases and warehouses.
102 lines (91 loc) • 2.2 kB
text/typescript
import {
IntegrationRecord,
DestinationPlatforms,
CreateDestinationConnectionPayload,
DeleteDestinationPayload,
ListDestinationsPayload,
Integrations,
WEBHOOK,
} from '@event-inc/types';
import { makeHttpNetworkCall, checkIfKeyOrIdExists } from '@event-inc/utils';
import { getIntegrationDefinitionId } from '@event-inc/utils';
import { version1 } from './configs.apis';
export const createDestinationConnectionApi = <T extends DestinationPlatforms>(
headers: Record<string, string>,
url: string,
payload: CreateDestinationConnectionPayload<T>
) => {
const integrationDefinitionId = getIntegrationDefinitionId(
payload.type,
'destination'
);
const authData = {
name: payload.label,
...payload.config,
};
const finalPayload = {
integrationDefinitionId,
authFormData: authData,
type: payload.type,
group: payload.group,
name: payload.label,
key: payload.key,
};
if (payload.type === 'webhook') {
const webhookAuthFormData = finalPayload?.authFormData as WEBHOOK;
const webhookHeaders = webhookAuthFormData?.WEBHOOK_HEADERS || {
'Content-Type': 'application/json',
};
finalPayload.authFormData = {
...finalPayload.authFormData,
WEBHOOK_HEADERS: JSON.stringify(webhookHeaders),
};
}
return makeHttpNetworkCall<IntegrationRecord>({
method: 'POST',
url: `${url}/${version1}/integrations/create`,
data: finalPayload,
headers,
});
};
export const deleteDestinationConnectionApi = (
headers: Record<string, string>,
url: string,
payload: DeleteDestinationPayload
) => {
const { id, key } = payload;
checkIfKeyOrIdExists(
id,
key,
'Must provide either id or key to delete a destination'
);
return makeHttpNetworkCall({
method: 'POST',
url: `${url}/${version1}/integrations/delete`,
data: {
integrationId: id,
key,
},
headers,
});
};
export const listDestinationsApi = (
headers: Record<string, string>,
url: string,
payload: ListDestinationsPayload
) => {
return makeHttpNetworkCall<Integrations>({
method: 'POST',
url: `${url}/${version1}/integrations/list`,
data: {
...payload,
query: {
...payload?.query,
_id: {
$regex: 'conn_dst',
},
},
},
headers,
});
};