mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-14 13:08:27 +00:00
91 lines
2.4 KiB
TypeScript
91 lines
2.4 KiB
TypeScript
import createLoadRemoteModule, {
|
|
createRequires,
|
|
} from '@paciolan/remote-module-loader';
|
|
import {
|
|
IntegrationAccount,
|
|
IntegrationDefinition,
|
|
} from '@redplanethq/sol-sdk';
|
|
import { logger, task } from '@trigger.dev/sdk/v3';
|
|
import axios from 'axios';
|
|
|
|
const fetcher = async (url: string) => {
|
|
// Handle remote URLs with axios
|
|
const response = await axios.get(url);
|
|
|
|
return response.data;
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const loadRemoteModule = async (requires: any) =>
|
|
createLoadRemoteModule({ fetcher, requires });
|
|
|
|
function createAxiosInstance(token: string) {
|
|
const instance = axios.create();
|
|
|
|
instance.interceptors.request.use((config) => {
|
|
// Check if URL starts with /api and doesn't have a full host
|
|
if (config.url?.startsWith('/api')) {
|
|
config.url = `${process.env.BACKEND_HOST}${config.url.replace('/api/', '/')}`;
|
|
}
|
|
|
|
if (
|
|
config.url.includes(process.env.FRONTEND_HOST) ||
|
|
config.url.includes(process.env.BACKEND_HOST)
|
|
) {
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
|
|
return config;
|
|
});
|
|
|
|
return instance;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const getRequires = (axios: any) => createRequires({ axios });
|
|
|
|
export const integrationRun = task({
|
|
id: 'integration-run',
|
|
run: async ({
|
|
pat,
|
|
eventBody,
|
|
integrationAccount,
|
|
integrationDefinition,
|
|
event,
|
|
}: {
|
|
pat: string;
|
|
// This is the event you want to pass to the integration
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
event: any;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
eventBody?: any;
|
|
integrationDefinition: IntegrationDefinition;
|
|
integrationAccount?: IntegrationAccount;
|
|
}) => {
|
|
const remoteModuleLoad = await loadRemoteModule(
|
|
getRequires(createAxiosInstance(pat)),
|
|
);
|
|
|
|
logger.info(
|
|
`${integrationDefinition.url}/${integrationDefinition.version}/backend/index.js`,
|
|
);
|
|
|
|
const integrationFunction = await remoteModuleLoad(
|
|
`${integrationDefinition.url}/${integrationDefinition.version}/backend/index.js`,
|
|
);
|
|
|
|
// const integrationFunction = await remoteModuleLoad(
|
|
// `${integrationDefinition.url}`,
|
|
// );
|
|
|
|
return await integrationFunction.run({
|
|
integrationAccount,
|
|
integrationDefinition,
|
|
event,
|
|
eventBody: {
|
|
...(eventBody ? eventBody : {}),
|
|
},
|
|
});
|
|
},
|
|
});
|