Feat: Activtiy to memory ingestion

This commit is contained in:
Manoj K 2025-07-11 16:01:54 +05:30 committed by Harshith Mullapudi
parent 1bbb5a0f57
commit d80bfadf9c
13 changed files with 599 additions and 238 deletions

View File

@ -0,0 +1,93 @@
import { json } from "@remix-run/node";
import { z } from "zod";
import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server";
import { addToQueue } from "~/lib/ingest.server";
import { prisma } from "~/db.server";
import { logger } from "~/services/logger.service";
const ActivityCreateSchema = z.object({
text: z.string().min(1, "Text is required"),
source: z.string().min(1, "Source is required"),
sourceURL: z.string().url().optional(),
integrationAccountId: z.string().optional(),
taskId: z.string().optional(),
});
const { action, loader } = createActionApiRoute(
{
body: ActivityCreateSchema,
allowJWT: true,
authorization: {
action: "create",
},
corsStrategy: "all",
},
async ({ body, authentication }) => {
try {
logger.log("Creating activity", { body, userId: authentication.userId });
const user = await prisma.user.findUnique({
where: {
id: authentication.userId,
},
include: {
Workspace: true,
},
});
if (!user) {
throw new Error("User not found");
}
// Create the activity record
const activity = await prisma.activity.create({
data: {
text: body.text,
sourceURL: body.sourceURL,
integrationAccountId: body.integrationAccountId,
workspaceId: user.Workspace?.id || "",
},
});
// Add activity to knowledge graph ingestion queue
const ingestData = {
episodeBody: body.text,
referenceTime: new Date().toISOString(),
source: body.source,
metadata: {
activityId: activity.id,
integrationAccountId: body.integrationAccountId || "",
taskId: body.taskId || "",
type: "activity",
},
};
const queueResponse = await addToQueue(ingestData, authentication.userId);
logger.log("Activity created and queued for ingestion", {
activityId: activity.id,
queueId: queueResponse.id,
});
return json({
success: true,
activity: {
id: activity.id,
text: activity.text,
sourceURL: activity.sourceURL,
createdAt: activity.createdAt,
},
ingestion: {
queueId: queueResponse.id,
},
});
} catch (error) {
logger.error("Failed to create activity", { error, body });
throw error;
}
},
);
export { action, loader };

View File

@ -0,0 +1,99 @@
import { json } from "@remix-run/node";
import { type ActionFunctionArgs, type LoaderFunctionArgs } from "@remix-run/server-runtime";
import { z } from "zod";
import { webhookService } from "~/services/webhook.server";
import { logger } from "~/services/logger.service";
const ParamsSchema = z.object({
sourceName: z.string(),
});
const SearchParamsSchema = z.object({
integrationAccountId: z.string().optional(),
});
export async function action({ request, params }: ActionFunctionArgs) {
try {
const { sourceName } = ParamsSchema.parse(params);
const url = new URL(request.url);
const { integrationAccountId } = SearchParamsSchema.parse(
Object.fromEntries(url.searchParams)
);
// Extract headers
const eventHeaders: Record<string, string | string[]> = {};
request.headers.forEach((value, key) => {
eventHeaders[key] = value;
});
// Parse body
const eventBody = await request.json();
logger.log(`Webhook received for ${sourceName}`, {
integrationAccountId,
eventBody: typeof eventBody === 'object' ? JSON.stringify(eventBody).substring(0, 200) : eventBody,
});
const result = await webhookService.handleEvents(
sourceName,
integrationAccountId,
eventHeaders,
eventBody
);
// Handle URL verification challenge (returns different response)
if (result.challenge) {
return json({ challenge: result.challenge });
}
return json({ status: result.status });
} catch (error) {
logger.error('Webhook processing failed', { error, params });
// Still return 200 to acknowledge receipt
return json({ status: 'error', message: 'Webhook processing failed' }, { status: 200 });
}
}
export async function loader({ request, params }: LoaderFunctionArgs) {
try {
const { sourceName } = ParamsSchema.parse(params);
const url = new URL(request.url);
const { integrationAccountId } = SearchParamsSchema.parse(
Object.fromEntries(url.searchParams)
);
// Extract headers
const eventHeaders: Record<string, string | string[]> = {};
request.headers.forEach((value, key) => {
eventHeaders[key] = value;
});
// For GET requests, parse query parameters as event body
const eventBody = Object.fromEntries(url.searchParams);
logger.log(`Webhook GET request for ${sourceName}`, {
integrationAccountId,
eventBody: JSON.stringify(eventBody).substring(0, 200),
});
const result = await webhookService.handleEvents(
sourceName,
integrationAccountId,
eventHeaders,
eventBody
);
// Handle URL verification challenge (returns different response)
if (result.challenge) {
return json({ challenge: result.challenge });
}
return json({ status: result.status });
} catch (error) {
logger.error('Webhook GET processing failed', { error, params });
// Still return 200 to acknowledge receipt
return json({ status: 'error', message: 'Webhook processing failed' }, { status: 200 });
}
}

View File

@ -13,11 +13,11 @@ import type { IntegrationDefinitionV2 } from "@core/database";
async function prepareIntegrationTrigger(
integrationDefinition: IntegrationDefinitionV2,
userId?: string,
workspaceId?: string,
) {
logger.info(`Loading integration ${integrationDefinition.slug}`);
let pat = "";
let patId = "";
if (userId) {
// Use the integration slug as the token name for uniqueness
const tokenResult = await getOrCreatePersonalAccessToken({
@ -25,11 +25,13 @@ async function prepareIntegrationTrigger(
userId,
});
pat = tokenResult.token ?? "";
patId = tokenResult.id ?? "";
}
return {
integrationDefinition,
pat,
patId,
};
}
@ -41,13 +43,8 @@ export async function runIntegrationTriggerAsync(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
event: any,
userId?: string,
workspaceId?: string,
) {
const params = await prepareIntegrationTrigger(
integrationDefinition,
userId,
workspaceId,
);
const params = await prepareIntegrationTrigger(integrationDefinition, userId);
return await tasks.trigger<typeof integrationRun>("integration-run", {
...params,
event,
@ -62,13 +59,8 @@ export async function runIntegrationTrigger(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
event: any,
userId?: string,
workspaceId?: string,
) {
const params = await prepareIntegrationTrigger(
integrationDefinition,
userId,
workspaceId,
);
const params = await prepareIntegrationTrigger(integrationDefinition, userId);
const response = await tasks.triggerAndPoll<typeof integrationRun>(
"integration-run",

View File

@ -1,4 +1,4 @@
import { IntegrationPayloadEventType, type OAuth2Params } from "@core/types";
import { IntegrationEventType, type OAuth2Params } from "@core/types";
import * as simpleOauth2 from "simple-oauth2";
import { tasks } from "@trigger.dev/sdk/v3";
import {
@ -121,7 +121,7 @@ export async function callbackHandler(
const integrationAccount = await runIntegrationTrigger(
integrationDefinition,
{
event: IntegrationPayloadEventType.INTEGRATION_ACCOUNT_CREATED,
event: IntegrationEventType.SETUP,
eventBody: {
oauthResponse: tokensResponse.token,
oauthParams: {
@ -132,7 +132,6 @@ export async function callbackHandler(
},
},
sessionRecord.userId,
sessionRecord.workspaceId,
);
await tasks.trigger<typeof scheduler>("scheduler", {

View File

@ -0,0 +1,123 @@
import {
type IntegrationDefinitionV2,
type IntegrationAccount,
} from "@core/database";
import { IntegrationEventType } from "@redplanethq/sdk";
import { prisma } from "~/db.server";
import { logger } from "./logger.service";
import { runIntegrationTrigger } from "./integration.server";
export type EventHeaders = Record<string, string | string[]>;
export type EventBody = Record<string, any>;
export class WebhookService {
async handleEvents(
sourceName: string,
integrationAccountId: string | undefined,
eventHeaders: EventHeaders,
eventBody: EventBody,
): Promise<{ challenge?: string; status: string }> {
logger.log(`Received webhook ${sourceName}`, {
where: "WebhookService.handleEvents",
});
// Check if the event is a URL verification challenge (Slack)
if (eventBody.type === "url_verification") {
logger.log("Responding to Slack URL verification challenge");
return { challenge: eventBody.challenge, status: "verified" };
}
let integrationAccount:
| (IntegrationAccount & {
integrationDefinition: IntegrationDefinitionV2;
})
| null = null;
if (!integrationAccountId) {
// Find integration account by identifying the webhook account
const integrationDefinition =
await prisma.integrationDefinitionV2.findFirst({
where: { slug: sourceName, deleted: null },
});
if (integrationDefinition) {
try {
const accountIdResponse = await runIntegrationTrigger(
integrationDefinition,
{
event: IntegrationEventType.IDENTIFY,
eventBody: {
eventHeaders,
event: { ...eventBody },
},
},
);
let accountId: string | undefined;
if (
accountIdResponse?.message?.startsWith("The event payload type is")
) {
accountId = undefined;
} else {
accountId = accountIdResponse;
}
if (accountId) {
integrationAccount = await prisma.integrationAccount.findFirst({
where: { accountId },
include: { integrationDefinition: true },
});
}
} catch (error) {
logger.error("Failed to identify integration account", {
error,
sourceName,
});
}
}
} else {
integrationAccount = await prisma.integrationAccount.findUnique({
where: { id: integrationAccountId },
include: { integrationDefinition: true },
});
}
if (integrationAccount) {
try {
await runIntegrationTrigger(
integrationAccount.integrationDefinition,
{
event: IntegrationEventType.PROCESS,
integrationAccount,
eventBody: {
eventHeaders,
eventData: { ...eventBody },
},
},
integrationAccount.integratedById,
);
logger.log(`Successfully processed webhook for ${sourceName}`, {
integrationAccountId: integrationAccount.id,
});
} catch (error) {
logger.error(`Failed to process webhook for ${sourceName}`, {
error,
integrationAccountId: integrationAccount.id,
});
}
} else {
logger.log(
`Could not find integration account for webhook ${sourceName}`,
{
where: "WebhookService.handleEvents",
},
);
}
return { status: "acknowledged" };
}
}
export const webhookService = new WebhookService();

View File

@ -1,38 +1,57 @@
// import { PrismaClient } from "@prisma/client";
// import { IntegrationPayloadEventType } from "@core/types";
// import { logger, schedules, tasks } from "@trigger.dev/sdk/v3";
import { PrismaClient } from "@prisma/client";
import { IntegrationEventType } from "@core/types";
import { logger, schedules, tasks } from "@trigger.dev/sdk/v3";
// import { integrationRun } from "./integration-run";
import { type integrationRun } from "./integration-run";
import { getOrCreatePersonalAccessToken } from "../utils/utils";
import { nanoid } from "nanoid";
// const prisma = new PrismaClient();
const prisma = new PrismaClient();
// export const integrationRunSchedule = schedules.task({
// id: "integration-run-schedule",
// run: async (payload) => {
// const { externalId } = payload;
// const integrationAccount = await prisma.integrationAccount.findUnique({
// where: { id: externalId },
// include: {
// integrationDefinition: true,
// workspace: true,
// },
// });
export const integrationRunSchedule = schedules.task({
id: "integration-run-schedule",
run: async (payload) => {
const { externalId } = payload;
if (!externalId) {
logger.info("No externalId provided");
return null;
}
// if (!integrationAccount) {
// const deletedSchedule = await schedules.del(externalId);
// logger.info("Deleting schedule as integration account is not there");
// return deletedSchedule;
// }
const integrationAccount = await prisma.integrationAccount.findUnique({
where: { id: externalId },
include: {
integrationDefinition: true,
workspace: true,
},
});
// const pat = await prisma.personalAccessToken.findFirst({
// where: { userId: integrationAccount.workspace.userId, name: "default" },
// });
if (!integrationAccount) {
const deletedSchedule = await schedules.del(externalId);
logger.info("No integration account found");
return deletedSchedule;
}
// return await tasks.trigger<typeof integrationRun>("integration-run", {
// event: IntegrationPayloadEventType.SCHEDULED_SYNC,
// pat: pat.token,
// integrationAccount,
// integrationDefinition: integrationAccount.integrationDefinition,
// });
// },
// });
if (!integrationAccount.workspace.userId) {
logger.info("No workspace user id found");
return null;
}
const pat = await getOrCreatePersonalAccessToken({
name: `integration_scheduled_${nanoid(10)}`,
userId: integrationAccount.workspace.userId as string,
});
if (!pat || !pat.token) {
logger.info("No pat token found");
return null;
}
return await tasks.trigger<typeof integrationRun>("integration-run", {
event: IntegrationEventType.SYNC,
pat: pat.token,
patId: pat.id,
integrationAccount,
integrationDefinition: integrationAccount.integrationDefinition,
});
},
});

View File

@ -1,87 +1,100 @@
// import createLoadRemoteModule, {
// createRequires,
// } from "@paciolan/remote-module-loader";
import createLoadRemoteModule, {
createRequires,
} from "@paciolan/remote-module-loader";
// import { logger, task } from "@trigger.dev/sdk/v3";
// import axios from "axios";
import { logger, task } from "@trigger.dev/sdk/v3";
import axios from "axios";
import {
type IntegrationDefinitionV2,
type IntegrationAccount,
} from "@core/database";
import { deletePersonalAccessToken } from "../utils/utils";
import { type IntegrationEventType } from "@core/types";
// const fetcher = async (url: string) => {
// // Handle remote URLs with axios
// const response = await axios.get(url);
const fetcher = async (url: string) => {
// Handle remote URLs with axios
const response = await axios.get(url);
// return response.data;
// };
return response.data;
};
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
// const loadRemoteModule = async (requires: any) =>
// createLoadRemoteModule({ fetcher, requires });
// 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();
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/", "/")}`;
// }
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}`;
// }
if (
config.url?.includes(process.env.FRONTEND_HOST || "") ||
config.url?.includes(process.env.BACKEND_HOST || "")
) {
config.headers.Authorization = `Bearer ${token}`;
}
// return config;
// });
return config;
});
// return instance;
// }
return instance;
}
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
// const getRequires = (axios: any) => createRequires({ axios });
// 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)),
// );
export const integrationRun = task({
id: "integration-run",
run: async ({
pat,
patId,
eventBody,
integrationAccount,
integrationDefinition,
event,
}: {
pat: string;
patId: string;
// This is the event you want to pass to the integration
event: IntegrationEventType;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
eventBody?: any;
integrationDefinition: IntegrationDefinitionV2;
integrationAccount?: IntegrationAccount;
}) => {
const remoteModuleLoad = await loadRemoteModule(
getRequires(createAxiosInstance(pat)),
);
// logger.info(
// `${integrationDefinition.url}/${integrationDefinition.version}/backend/index.js`,
// );
logger.info(
`${integrationDefinition.url}/${integrationDefinition.version}/index.cjs`,
);
// const integrationFunction = await remoteModuleLoad(
// `${integrationDefinition.url}/${integrationDefinition.version}/backend/index.js`,
// );
const integrationFunction = await remoteModuleLoad(
`${integrationDefinition.url}/${integrationDefinition.version}/index.cjs`,
);
// // const integrationFunction = await remoteModuleLoad(
// // `${integrationDefinition.url}`,
// // );
// const integrationFunction = await remoteModuleLoad(
// `${integrationDefinition.url}`,
// );
// return await integrationFunction.run({
// integrationAccount,
// integrationDefinition,
// event,
// eventBody: {
// ...(eventBody ? eventBody : {}),
// },
// });
// },
// });
// Construct the proper IntegrationEventPayload structure
const integrationEventPayload = {
event,
eventBody: { ...eventBody, integrationDefinition },
config: integrationAccount?.integrationConfiguration || {},
};
const result = await integrationFunction.run(integrationEventPayload);
await deletePersonalAccessToken(patId);
logger.info("Personal access token deleted");
return result;
},
});

View File

@ -1,64 +1,64 @@
// import { PrismaClient } from "@prisma/client";
// import { logger, schedules, task } from "@trigger.dev/sdk/v3";
import { PrismaClient } from "@prisma/client";
import { logger, schedules, task } from "@trigger.dev/sdk/v3";
// import { integrationRunSchedule } from "./integration-run-schedule";
import { integrationRunSchedule } from "./integration-run-schedule";
// const prisma = new PrismaClient();
const prisma = new PrismaClient();
// export const scheduler = task({
// id: "scheduler",
// run: async (payload: { integrationAccountId: string }) => {
// const { integrationAccountId } = payload;
export const scheduler = task({
id: "scheduler",
run: async (payload: { integrationAccountId: string }) => {
const { integrationAccountId } = payload;
// const integrationAccount = await prisma.integrationAccount.findUnique({
// where: { id: integrationAccountId, deleted: null },
// include: {
// integrationDefinition: true,
// workspace: true,
// },
// });
const integrationAccount = await prisma.integrationAccount.findUnique({
where: { id: integrationAccountId, deleted: null },
include: {
integrationDefinition: true,
workspace: true,
},
});
// if (!integrationAccount) {
// logger.error("Integration account not found");
// return null;
// }
if (!integrationAccount) {
logger.error("Integration account not found");
return null;
}
// if (!integrationAccount.workspace) {
// return null;
// }
if (!integrationAccount.workspace) {
return null;
}
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
// const spec = integrationAccount.integrationDefinition.spec as any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const spec = integrationAccount.integrationDefinition.spec as any;
// if (spec.schedule && spec.schedule.frequency) {
// const createdSchedule = await schedules.create({
// // The id of the scheduled task you want to attach to.
// task: integrationRunSchedule.id,
// // The schedule in cron format.
// cron: spec.schedule.frequency,
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
// timezone: (integrationAccount.workspace.preferences as any).timezone,
// // this is required, it prevents you from creating duplicate schedules. It will update the schedule if it already exists.
// deduplicationKey: integrationAccount.id,
// externalId: integrationAccount.id,
// });
if (spec.schedule && spec.schedule.frequency) {
const createdSchedule = await schedules.create({
// The id of the scheduled task you want to attach to.
task: integrationRunSchedule.id,
// The schedule in cron format.
cron: spec.schedule.frequency,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// timezone: (integrationAccount.workspace.preferences as any).timezone,
// this is required, it prevents you from creating duplicate schedules. It will update the schedule if it already exists.
deduplicationKey: integrationAccount.id,
externalId: integrationAccount.id,
});
// await prisma.integrationAccount.update({
// where: {
// id: integrationAccount.id,
// },
// data: {
// settings: {
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
// ...(integrationAccount.settings as any),
// scheduleId: createdSchedule.id,
// },
// },
// });
await prisma.integrationAccount.update({
where: {
id: integrationAccount.id,
},
data: {
settings: {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
...(integrationAccount.settings as any),
scheduleId: createdSchedule.id,
},
},
});
// return createdSchedule;
// }
return createdSchedule;
}
// return "No schedule for this task";
// },
// });
return "No schedule for this task";
},
});

View File

@ -25,6 +25,7 @@
"@modelcontextprotocol/sdk": "1.13.2",
"@nichtsam/remix-auth-email-link": "3.0.0",
"@opentelemetry/api": "1.9.0",
"@paciolan/remote-module-loader": "^3.0.3",
"@prisma/client": "*",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
@ -55,32 +56,32 @@
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/postcss": "^4.1.7",
"@tanstack/react-table": "^8.13.2",
"@tiptap/extension-document": "^2.11.9",
"@tiptap/extension-hard-break": "^2.11.9",
"@tiptap/extension-history": "^2.11.9",
"@tiptap/extension-paragraph": "^2.11.9",
"@tiptap/extension-text": "^2.11.9",
"@tiptap/extension-table": "2.11.9",
"@tiptap/extension-table-cell": "2.11.9",
"@tiptap/extension-heading": "2.11.9",
"@tiptap/extension-table-header": "2.11.9",
"@tiptap/extension-table-row": "2.11.9",
"@tiptap/extension-code-block": "2.11.9",
"@tiptap/extension-code-block-lowlight": "^2.11.9",
"@tiptap/starter-kit": "2.11.9",
"@tiptap/react": "^2.11.9",
"@tiptap/extension-document": "^2.11.9",
"@tiptap/extension-hard-break": "^2.11.9",
"@tiptap/extension-heading": "2.11.9",
"@tiptap/extension-history": "^2.11.9",
"@tiptap/extension-paragraph": "^2.11.9",
"@tiptap/extension-table": "2.11.9",
"@tiptap/extension-table-cell": "2.11.9",
"@tiptap/extension-table-header": "2.11.9",
"@tiptap/extension-table-row": "2.11.9",
"@tiptap/extension-text": "^2.11.9",
"@tiptap/pm": "^2.11.9",
"@trigger.dev/sdk": "^4.0.0-v4-beta.22",
"@tiptap/react": "^2.11.9",
"@tiptap/starter-kit": "2.11.9",
"@trigger.dev/react-hooks": "^4.0.0-v4-beta.22",
"@trigger.dev/sdk": "^4.0.0-v4-beta.22",
"ai": "4.3.14",
"axios": "^1.10.0",
"bullmq": "^5.53.2",
"class-transformer": "0.5.1",
"class-validator": "0.14.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"compression": "^1.7.4",
"cross-env": "^7.0.3",
"class-transformer": "0.5.1",
"class-validator": "0.14.1",
"d3": "^7.9.0",
"date-fns": "^4.1.0",
"dayjs": "^1.11.10",
@ -96,8 +97,8 @@
"ioredis": "^5.6.1",
"isbot": "^4.1.0",
"jose": "^5.2.3",
"lucide-react": "^0.511.0",
"lowlight": "^3.3.0",
"lucide-react": "^0.511.0",
"morgan": "^1.10.0",
"nanoid": "3.3.8",
"neo4j-driver": "^5.28.1",
@ -138,10 +139,10 @@
"@types/d3": "^7.4.3",
"@types/express": "^4.17.13",
"@types/morgan": "^1.9.3",
"@types/simple-oauth2": "^5.0.7",
"@types/react": "^18.2.20",
"@types/react-dom": "^18.2.7",
"@types/react-virtualized": "^9.22.0",
"@types/simple-oauth2": "^5.0.7",
"@typescript-eslint/eslint-plugin": "^6.7.4",
"@typescript-eslint/parser": "^6.7.4",
"autoprefixer": "^10.4.19",

View File

@ -48,7 +48,7 @@ export const createActivityEvent = async (
const accessToken = config.access_token;
const text = `DM with Sigma channel Content: '${event.text}'`;
const text = `DM with SOL channel Content: '${event.text}'`;
const permalinkResponse = await axios.get(
`https://slack.com/api/chat.getPermalink?channel=${event.channel}&message_ts=${event.ts}`,
@ -104,7 +104,7 @@ export const createActivityEvent = async (
conversationContext = `channel ${conversationInfo.name}(${conversationInfo.id})`;
}
const text = `Message from user ${userIdMap.get(eventMessage.user)?.real_name}(${eventMessage.user}) in ${conversationContext} at ${eventMessage.ts}. Content: '${eventMessageText}'`;
const text = `Message to User from ${userIdMap.get(eventMessage.user)?.real_name}(${eventMessage.user}) in ${conversationContext} at ${eventMessage.ts}. Content: '${eventMessageText}'`;
const permalinkResponse = await axios.get(
`https://slack.com/api/chat.getPermalink?channel=${channel}&message_ts=${ts}`,
@ -115,9 +115,9 @@ export const createActivityEvent = async (
const activity = {
sourceURL: permalinkResponse.data.permalink,
source: 'slack',
text,
integrationAccountId: config.integrationAccountId,
taskId: null,
};
await axios.post('/api/v1/activity', activity);

View File

@ -18,12 +18,10 @@ export async function run(eventPayload: IntegrationEventPayload) {
return eventPayload.eventBody.event.user;
case IntegrationEventType.PROCESS:
return createActivityEvent(eventPayload.eventBody, eventPayload.config);
return createActivityEvent(eventPayload.eventBody.eventData, eventPayload.config);
default:
return {
message: `The event payload type is ${eventPayload.event}`,
};
return { message: `The event payload type is ${eventPayload.event}` };
}
}

View File

@ -28,6 +28,7 @@
},
"dependencies": {
"@changesets/cli": "2.26.2",
"@redplanethq/sdk": "^0.1.0",
"@remix-run/changelog-github": "^0.0.5"
},
"packageManager": "pnpm@9.0.0",

105
pnpm-lock.yaml generated
View File

@ -11,6 +11,9 @@ importers:
'@changesets/cli':
specifier: 2.26.2
version: 2.26.2
'@redplanethq/sdk':
specifier: ^0.1.0
version: 0.1.0
'@remix-run/changelog-github':
specifier: ^0.0.5
version: 0.0.5(encoding@0.1.13)
@ -66,6 +69,9 @@ importers:
'@opentelemetry/api':
specifier: 1.9.0
version: 1.9.0
'@paciolan/remote-module-loader':
specifier: ^3.0.3
version: 3.0.3
'@prisma/client':
specifier: '*'
version: 5.4.1(prisma@5.4.1)
@ -369,7 +375,7 @@ importers:
devDependencies:
'@remix-run/dev':
specifier: 2.16.7
version: 2.16.7(@remix-run/react@2.16.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@remix-run/serve@2.16.7(typescript@5.8.3))(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))(yaml@2.8.0)
version: 2.16.7(@remix-run/react@2.16.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@remix-run/serve@2.16.7(typescript@5.8.3))(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))(yaml@2.8.0)
'@remix-run/eslint-config':
specifier: 2.16.7
version: 2.16.7(eslint@8.57.1)(react@18.3.1)(typescript@5.8.3)
@ -384,7 +390,7 @@ importers:
version: 0.5.16(tailwindcss@4.1.7)
'@tailwindcss/vite':
specifier: ^4.1.7
version: 4.1.9(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))
version: 4.1.9(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))
'@trigger.dev/build':
specifier: ^4.0.0-v4-beta.22
version: 4.0.0-v4-beta.22(typescript@5.8.3)
@ -480,10 +486,10 @@ importers:
version: 5.8.3
vite:
specifier: ^6.0.0
version: 6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
version: 6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite-tsconfig-paths:
specifier: ^4.2.1
version: 4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))
version: 4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))
packages/database:
dependencies:
@ -570,7 +576,7 @@ importers:
version: 6.0.1
tsup:
specifier: ^8.0.1
version: 8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0)
version: 8.5.0(@swc/core@1.3.101)(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0)
typescript:
specifier: ^5.3.0
version: 5.8.3
@ -2053,6 +2059,9 @@ packages:
'@oslojs/jwt@0.2.0':
resolution: {integrity: sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg==}
'@paciolan/remote-module-loader@3.0.3':
resolution: {integrity: sha512-gwdJcP5QQbO7OUf00FWh+A5DkF3TnIv06JB3aMpm9pbbHcdouFrjo4nEW7HtbWeIs7z3gwGEVd82clAmzVzh3Q==}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@ -3064,6 +3073,10 @@ packages:
peerDependencies:
react: 18.2.0
'@redplanethq/sdk@0.1.0':
resolution: {integrity: sha512-RmPfT9XESjTSMLlAMkolZEF28PvGo5hlwrG75JQy1tAZkvaTHzC7A2mEAMbsBvOMrJuUztL3NtCmVF//C/C/+A==}
engines: {node: '>=18.0.0'}
'@remirror/core-constants@3.0.0':
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
@ -11730,6 +11743,8 @@ snapshots:
dependencies:
'@oslojs/encoding': 0.4.1
'@paciolan/remote-module-loader@3.0.3': {}
'@pkgjs/parseargs@0.11.0':
optional: true
@ -11814,7 +11829,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -11868,7 +11883,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-collapsible@1.1.11(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -11896,7 +11911,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -11986,7 +12001,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12037,7 +12052,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12124,7 +12139,7 @@ snapshots:
react-remove-scroll: 2.5.7(@types/react@18.2.47)(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-popover@1.1.14(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12165,7 +12180,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-popper@1.2.7(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12193,7 +12208,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12213,7 +12228,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-presence@1.1.4(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12232,7 +12247,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12258,7 +12273,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12418,7 +12433,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.7(@types/react@18.2.47))(@types/react@18.2.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12429,7 +12444,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-tooltip@1.1.1(@types/react-dom@18.3.7(@types/react@18.2.47))(@types/react@18.2.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12449,7 +12464,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-tooltip@1.2.7(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12579,7 +12594,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.2.69))(@types/react@18.2.69)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -12716,6 +12731,10 @@ snapshots:
dependencies:
react: 18.3.1
'@redplanethq/sdk@0.1.0':
dependencies:
commander: 14.0.0
'@remirror/core-constants@3.0.0': {}
'@remix-run/changelog-github@0.0.5(encoding@0.1.13)':
@ -12727,7 +12746,7 @@ snapshots:
transitivePeerDependencies:
- encoding
'@remix-run/dev@2.16.7(@remix-run/react@2.16.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@remix-run/serve@2.16.7(typescript@5.8.3))(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))(yaml@2.8.0)':
'@remix-run/dev@2.16.7(@remix-run/react@2.16.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@remix-run/serve@2.16.7(typescript@5.8.3))(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))(yaml@2.8.0)':
dependencies:
'@babel/core': 7.27.4
'@babel/generator': 7.27.5
@ -12744,7 +12763,7 @@ snapshots:
'@remix-run/router': 1.23.0
'@remix-run/server-runtime': 2.16.7(typescript@5.8.3)
'@types/mdx': 2.0.13
'@vanilla-extract/integration': 6.5.0(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0)
'@vanilla-extract/integration': 6.5.0(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0)
arg: 5.0.2
cacache: 17.1.4
chalk: 4.1.2
@ -12784,12 +12803,12 @@ snapshots:
tar-fs: 2.1.3
tsconfig-paths: 4.2.0
valibot: 0.41.0(typescript@5.8.3)
vite-node: 3.2.3(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite-node: 3.2.3(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
ws: 7.5.10
optionalDependencies:
'@remix-run/serve': 2.16.7(typescript@5.8.3)
typescript: 5.8.3
vite: 6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@ -13528,12 +13547,12 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 4.1.7
'@tailwindcss/vite@4.1.9(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))':
'@tailwindcss/vite@4.1.9(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0))':
dependencies:
'@tailwindcss/node': 4.1.9
'@tailwindcss/oxide': 4.1.9
tailwindcss: 4.1.9
vite: 6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
'@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@ -14136,6 +14155,10 @@ snapshots:
'@types/range-parser@1.2.7': {}
'@types/react-dom@18.3.7(@types/react@18.2.47)':
dependencies:
'@types/react': 18.2.47
'@types/react-dom@18.3.7(@types/react@18.2.69)':
dependencies:
'@types/react': 18.2.69
@ -14453,7 +14476,7 @@ snapshots:
transitivePeerDependencies:
- babel-plugin-macros
'@vanilla-extract/integration@6.5.0(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0)':
'@vanilla-extract/integration@6.5.0(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0)':
dependencies:
'@babel/core': 7.27.4
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4)
@ -14466,8 +14489,8 @@ snapshots:
lodash: 4.17.21
mlly: 1.7.4
outdent: 0.8.0
vite: 5.4.19(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0)
vite-node: 1.6.1(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0)
vite: 5.4.19(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0)
vite-node: 1.6.1(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@ -19217,7 +19240,7 @@ snapshots:
'@radix-ui/react-tooltip': 1.1.1(@types/react-dom@18.3.7(@types/react@18.2.47))(@types/react@18.2.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@swc/core': 1.3.101(@swc/helpers@0.5.17)
'@types/react': 18.2.47
'@types/react-dom': 18.3.7(@types/react@18.2.69)
'@types/react-dom': 18.3.7(@types/react@18.2.47)
'@types/webpack': 5.28.5(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11)
autoprefixer: 10.4.14(postcss@8.4.38)
chalk: 4.1.2
@ -20480,7 +20503,7 @@ snapshots:
tslib@2.8.1: {}
tsup@8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0):
tsup@8.5.0(@swc/core@1.3.101)(jiti@2.4.2)(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0):
dependencies:
bundle-require: 5.1.0(esbuild@0.25.5)
cac: 6.7.14
@ -20872,13 +20895,13 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.2
vite-node@1.6.1(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0):
vite-node@1.6.1(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0):
dependencies:
cac: 6.7.14
debug: 4.4.1
pathe: 1.1.2
picocolors: 1.1.1
vite: 5.4.19(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0)
vite: 5.4.19(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -20890,13 +20913,13 @@ snapshots:
- supports-color
- terser
vite-node@3.2.3(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0):
vite-node@3.2.3(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0):
dependencies:
cac: 6.7.14
debug: 4.4.1
es-module-lexer: 1.7.0
pathe: 2.0.3
vite: 6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- jiti
@ -20911,29 +20934,29 @@ snapshots:
- tsx
- yaml
vite-tsconfig-paths@4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)):
vite-tsconfig-paths@4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)):
dependencies:
debug: 4.4.1
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.8.3)
optionalDependencies:
vite: 6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
- typescript
vite@5.4.19(@types/node@18.19.115)(lightningcss@1.30.1)(terser@5.42.0):
vite@5.4.19(@types/node@24.0.0)(lightningcss@1.30.1)(terser@5.42.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.5
rollup: 4.43.0
optionalDependencies:
'@types/node': 18.19.115
'@types/node': 24.0.0
fsevents: 2.3.3
lightningcss: 1.30.1
terser: 5.42.0
vite@6.3.5(@types/node@18.19.115)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0):
vite@6.3.5(@types/node@24.0.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(yaml@2.8.0):
dependencies:
esbuild: 0.25.5
fdir: 6.4.6(picomatch@4.0.2)
@ -20942,7 +20965,7 @@ snapshots:
rollup: 4.43.0
tinyglobby: 0.2.14
optionalDependencies:
'@types/node': 18.19.115
'@types/node': 24.0.0
fsevents: 2.3.3
jiti: 2.4.2
lightningcss: 1.30.1