mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 09:08:28 +00:00
Feat: Activtiy to memory ingestion
This commit is contained in:
parent
1bbb5a0f57
commit
d80bfadf9c
93
apps/webapp/app/routes/api.v1.activity.tsx
Normal file
93
apps/webapp/app/routes/api.v1.activity.tsx
Normal 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 };
|
||||
99
apps/webapp/app/routes/webhook.$sourceName.tsx
Normal file
99
apps/webapp/app/routes/webhook.$sourceName.tsx
Normal 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 });
|
||||
}
|
||||
}
|
||||
@ -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",
|
||||
|
||||
@ -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", {
|
||||
|
||||
123
apps/webapp/app/services/webhook.server.ts
Normal file
123
apps/webapp/app/services/webhook.server.ts
Normal 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();
|
||||
@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@ -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;
|
||||
},
|
||||
});
|
||||
|
||||
@ -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";
|
||||
},
|
||||
});
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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}` };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
105
pnpm-lock.yaml
generated
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user