UNPKG

@event-inc/connections

Version:

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

97 lines (82 loc) 2.55 kB
import { ConnectionDefinitions, CreateEventLinkPayload, CreateLinkPayload, EventLink, Link, LinkSettings, } from '@event-inc/types'; import { makeHttpNetworkCall, matchResultAndHandleHttpError, } from '@event-inc/utils'; import { identity } from 'ramda'; import jwt from 'jsonwebtoken'; export const createLinkTokenApi = <T extends 'source' | 'destination'>( headers: Record<string, string>, url: string, payload: CreateLinkPayload<T> ) => { return makeHttpNetworkCall<Link>({ method: 'POST', url: `${url}/v1/links/create`, headers, data: payload, }); }; export const createEventLinkTokenApi = async ( headers: Record<string, string>, url: string, payload: CreateEventLinkPayload, secret: string ) => { const settings = await makeHttpNetworkCall<LinkSettings>({ method: 'POST', url: `${url}/v1/settings/get`, headers, }); const { data } = matchResultAndHandleHttpError(settings, identity); const link = await makeHttpNetworkCall<EventLink>({ method: 'POST', url: `${url}/v1/event-links/create`, headers, data: payload, }); const { data: linkData } = matchResultAndHandleHttpError(link, identity); const connectionDefinitionUrl = url.includes('localhost') ? 'http://localhost:3005/v1/connection-definitions' : url.includes('development') ? 'https://development-api.event.dev/v1/connection-definitions' : 'https://api.event.dev/v1/connection-definitions'; const connectionDefinitionHeaders = { 'x-event-inc-secret': secret, }; const connectionDefinitions = await makeHttpNetworkCall<ConnectionDefinitions>({ method: 'GET', url: `${connectionDefinitionUrl}?limit=100&skip=0&active=false`, headers: connectionDefinitionHeaders, }); const { data: inActiveConnectionDefinitionsData } = matchResultAndHandleHttpError(connectionDefinitions, identity); // Remove the platforms from the settings.connectedPlatforms that are not active const connectedPlatforms = data?.connectedPlatforms?.filter((platform) => { return !inActiveConnectionDefinitionsData?.rows?.find( (definition) => definition?._id === platform?.connectionDefinitionId ); }); // Remove the platforms whose platform.active is false const activeConnectedPlatforms = connectedPlatforms?.filter((platform) => { return platform?.active; }); const tokenPayload = { linkSettings: { connectedPlatforms: activeConnectedPlatforms ?? [], eventIncToken: linkData?.token, }, group: linkData?.group, label: linkData?.label, }; const token = jwt.sign(tokenPayload, secret); return token; };