diff --git a/apps/feature-flags/package.json b/apps/feature-flags/package.json
index fec1ba99..c7451460 100644
--- a/apps/feature-flags/package.json
+++ b/apps/feature-flags/package.json
@@ -34,7 +34,7 @@
"@basestack/ui": "*",
"@basestack/utils": "*",
"@emotion/is-prop-valid": "^1.3.1",
- "@floating-ui/react": "^0.26.24",
+ "@floating-ui/react": "^0.26.25",
"@hookform/resolvers": "^3.9.0",
"@monaco-editor/react": "^4.6.0",
"@next-auth/prisma-adapter": "^1.0.4",
diff --git a/apps/forms/.env.example b/apps/forms/.env.example
index a3d1099e..58d31db5 100644
--- a/apps/forms/.env.example
+++ b/apps/forms/.env.example
@@ -35,9 +35,8 @@ AUTH0_DOMAIN=
# V2 - Trigger
TRIGGER_PROJECT_ID=
-TRIGGER_API_KEY=
+TRIGGER_SECRET_KEY=
TRIGGER_API_URL=
-NEXT_PUBLIC_TRIGGER_PUBLIC_API_KEY=
# V3 - Trigger
TRIGGER_PROJECT_ID=
diff --git a/apps/forms/libs/trigger/index.ts b/apps/forms/libs/trigger/index.ts
deleted file mode 100644
index 9bfbf931..00000000
--- a/apps/forms/libs/trigger/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { TriggerClient } from "@trigger.dev/sdk";
-
-export enum TriggerEventName {
- SEND_EMAIL = "send.email.event",
- SEND_DATA_TO_EXTERNAL_WEBHOOK = "send.data.to.external.webhook.event",
- CHECK_DATA_FOR_SPAM = "check.data.spam.event",
-}
-
-export const triggerClient = new TriggerClient({
- id: process.env.TRIGGER_PROJECT_ID!,
- apiKey: process.env.TRIGGER_API_KEY,
- apiUrl: process.env.TRIGGER_API_URL,
-});
diff --git a/apps/forms/libs/trigger/jobs/ai/spam.tsx b/apps/forms/libs/trigger/jobs/ai/spam.tsx
index a5208d13..abd426e2 100644
--- a/apps/forms/libs/trigger/jobs/ai/spam.tsx
+++ b/apps/forms/libs/trigger/jobs/ai/spam.tsx
@@ -1,62 +1,56 @@
-import { eventTrigger } from "@trigger.dev/sdk";
-import { triggerClient, TriggerEventName } from "libs/trigger";
+import { logger, task } from "@trigger.dev/sdk/v3";
// Prisma
import prisma from "libs/prisma";
// AI
-import { TextGenerationModel, cfAiClient, instructions } from "libs/cf/ai";
-// Utils
-import { z } from "zod";
+import { cfAiClient, instructions, TextGenerationModel } from "libs/cf/ai";
-triggerClient.defineJob({
+export interface CheckForSpamPayload {
+ submissionId: string;
+ data: any;
+}
+
+export const checkDataForSpamTask = task({
id: "check-data-for-spam",
- name: "Check data for spam",
- version: "1.0.0",
- trigger: eventTrigger({
- name: TriggerEventName.CHECK_DATA_FOR_SPAM,
- schema: z.object({
- submissionId: z.string(),
- data: z.any(),
- }),
- }),
- run: async (payload, io, ctx) => {
- await io.logger.info(
+ machine: {
+ preset: "small-1x",
+ },
+ init: async (payload) => {
+ logger.info(
`Preparing to check data for spam: ${JSON.stringify(payload.data)} with submission ID: ${payload.submissionId}`,
);
+ },
+ run: async (payload: CheckForSpamPayload) => {
+ const res = await cfAiClient({
+ model: TextGenerationModel.LLAMA_3_8B_INSTRUCT,
+ messages: instructions.checkSpam(JSON.stringify(payload.data)),
+ });
- await io.runTask(
- "check-data-for-spam",
- async () => {
- const res = await cfAiClient({
- model: TextGenerationModel.LLAMA_3_8B_INSTRUCT,
- messages: instructions.checkSpam(JSON.stringify(payload.data)),
- });
-
- if (res.success) {
- await io.logger.info(
- `Data successfully checked for: ${res.result.response}`,
- );
+ if (res.success) {
+ logger.info(`Data successfully checked for: ${res.result.response}`);
- const isSpam = JSON.parse(res.result.response).isSpam ?? false;
+ const isSpam = JSON.parse(res.result.response).isSpam ?? false;
- if (isSpam) {
- await io.logger.info(
- `The data is spam. Submission ID: ${payload.submissionId}. Preparing to update the form Submission status on the DB.`,
- );
+ if (isSpam) {
+ logger.info(
+ `The data is spam. Submission ID: ${payload.submissionId}. Preparing to update the form Submission status on the DB.`,
+ );
- await prisma.submission.update({
- where: {
- id: payload.submissionId,
- },
- data: {
- isSpam: true,
- },
- });
- }
- }
- },
- { name: "Check data for Spam" },
- );
+ return prisma.submission.update({
+ where: {
+ id: payload.submissionId,
+ },
+ data: {
+ isSpam: true,
+ },
+ });
+ }
- await io.logger.info("✨ Data successfully checked ✨");
+ return {
+ isSpam,
+ };
+ }
+ },
+ onSuccess: async () => {
+ logger.info("✨ Data successfully checked ✨");
},
});
diff --git a/apps/forms/libs/trigger/jobs/index.ts b/apps/forms/libs/trigger/jobs/index.ts
index 5a95f334..3778c8fd 100644
--- a/apps/forms/libs/trigger/jobs/index.ts
+++ b/apps/forms/libs/trigger/jobs/index.ts
@@ -1,9 +1,9 @@
-// Notification Jobs
+// AI
+export * from "./ai/spam";
+// Notification
export * from "./notification/email";
-// Webhook Jobs
+// Webhook
export * from "./webhook/external";
-// AI Jobs
-export * from "./ai/spam";
-// Subscription Jobs
-export * from "./subscription/update";
+// Subscriptions
export * from "./subscription/check";
+export * from "./subscription/update";
diff --git a/apps/forms/libs/trigger/jobs/notification/email.tsx b/apps/forms/libs/trigger/jobs/notification/email.tsx
index 9716080e..bbfdee08 100644
--- a/apps/forms/libs/trigger/jobs/notification/email.tsx
+++ b/apps/forms/libs/trigger/jobs/notification/email.tsx
@@ -1,62 +1,53 @@
import React from "react";
-import { eventTrigger } from "@trigger.dev/sdk";
-import { triggerClient, TriggerEventName } from "libs/trigger";
+import { task, logger } from "@trigger.dev/sdk/v3";
// Email
import { sendEmail, NewSubmissionEmailTemplate } from "@basestack/emails";
import { render } from "@react-email/render";
-// Utils
-import { z } from "zod";
+
+export interface SendEmailPayload {
+ to: string[];
+ subject: string;
+ template: string;
+ props?: any;
+}
const template: { [key: string]: React.ElementType } = {
"new-submission": NewSubmissionEmailTemplate,
};
-triggerClient.defineJob({
+export const sendEmailTask = task({
id: "send-email",
- name: "Send email",
- version: "1.0.0",
- trigger: eventTrigger({
- name: TriggerEventName.SEND_EMAIL,
- schema: z.object({
- to: z.array(z.string().email()),
- subject: z.string(),
- template: z.string(),
- props: z.any().optional(),
- }),
- }),
- run: async (payload, io) => {
- await io.logger.info(
+ machine: {
+ preset: "small-1x",
+ },
+ init: async (payload) => {
+ logger.info(
`Preparing to send email to ${payload.to} with subject: ${payload.subject}`,
);
- await io.logger.info(
+ logger.info(
`Email with the template ${payload.template} with props: ${payload.props}`,
);
-
- await io.runTask(
- "send-email",
- async () => {
- const Template = template[payload.template];
-
- await Promise.all(
- payload.to.map(async (email) => {
- const html = await render();
-
- await sendEmail({
- html,
- options: {
- subject: payload.subject,
- from: process.env.EMAIL_FROM!,
- to: email,
- },
- });
- }),
- );
- },
-
- { name: "Send Email" },
+ },
+ run: async (payload: SendEmailPayload) => {
+ const Template = template[payload.template];
+
+ await Promise.all(
+ payload.to.map(async (email) => {
+ const html = await render();
+
+ await sendEmail({
+ html,
+ options: {
+ subject: payload.subject,
+ from: process.env.EMAIL_FROM!,
+ to: email,
+ },
+ });
+ }),
);
-
- await io.logger.info("✨ Email sent successfully! ✨");
+ },
+ onSuccess: async () => {
+ logger.info("✨ Email sent successfully! ✨");
},
});
diff --git a/apps/forms/libs/trigger/jobs/subscription/check.tsx b/apps/forms/libs/trigger/jobs/subscription/check.tsx
index e1057bb1..b10a313f 100644
--- a/apps/forms/libs/trigger/jobs/subscription/check.tsx
+++ b/apps/forms/libs/trigger/jobs/subscription/check.tsx
@@ -1,5 +1,4 @@
-import { cronTrigger } from "@trigger.dev/sdk";
-import { triggerClient } from "libs/trigger";
+import { schedules, logger } from "@trigger.dev/sdk/v3";
// Prisma
import prisma from "libs/prisma";
// Utils
@@ -8,76 +7,72 @@ import { PlanTypeId, config, SubscriptionEvent } from "@basestack/utils";
const { getFormPlanLimitsDefaults } = config.plans;
-triggerClient.defineJob({
+export const checkSubsStatusTask = schedules.task({
id: "check.subscription.status.cron",
- name: "Check Subscription Status Cron Job",
- version: "0.1.1",
- trigger: cronTrigger({
- cron: "0 19 * * *", // Run every day at 7 PM
- }),
- run: async (payload, io, ctx) => {
- await io.logger.info("Received the scheduled event", {
+ cron: "0 19 * * *", // Run every day at 7 PM
+ machine: {
+ preset: "small-2x",
+ },
+ init: async (payload) => {
+ logger.info("Received the scheduled event", {
payload,
});
+ },
+ run: async () => {
+ const subs = await prisma.subscription.findMany();
- await io.runTask(
- "check-users-subscriptions",
- async () => {
- const subs = await prisma.subscription.findMany();
-
- for (const sub of subs) {
- const billingCycle = dayjs(sub.billingCycleStart);
- const today = dayjs();
- const cycleStartDate = dayjs(sub.billingCycleStart);
-
- // Check if today is the billing cycle start date or later
- const isOverdue =
- today.isAfter(cycleStartDate.startOf("day")) ||
- today.isSame(cycleStartDate.startOf("day"));
+ for (const sub of subs) {
+ const billingCycle = dayjs(sub.billingCycleStart);
+ const today = dayjs();
+ const cycleStartDate = dayjs(sub.billingCycleStart);
- await io.logger.info(
- `User with ID: ${sub.userId} subscription billingCycle is ${billingCycle.format("YYYY-MM-DD")} and is overdue: ${isOverdue}`,
- );
+ // Check if today is the billing cycle start date or later
+ const isOverdue =
+ today.isAfter(cycleStartDate.startOf("day")) ||
+ today.isSame(cycleStartDate.startOf("day"));
- // Check if it's time to update the subscription
- if (isOverdue) {
- let payload = {};
+ logger.info(
+ `User with ID: ${sub.userId} subscription billingCycle is ${billingCycle.format("YYYY-MM-DD")} and is overdue: ${isOverdue}`,
+ );
- if (sub.cancelled || sub.paused) {
- await io.logger.info(
- `User with ID ${sub.userId} has an cancelled or paused subscription`,
- );
+ // Check if it's time to update the subscription
+ if (isOverdue) {
+ let payload = {};
- payload = {
- planId: PlanTypeId.FREE,
- event: SubscriptionEvent.SUBSCRIPTION_CANCELLED,
- };
- }
-
- const response = await prisma.subscription.update({
- where: {
- id: sub.id,
- },
- data: {
- billingCycleStart: dayjs(cycleStartDate)
- .add(1, "month")
- .toISOString(),
- ...getFormPlanLimitsDefaults(),
- ...payload,
- },
- });
+ if (sub.cancelled || sub.paused) {
+ logger.info(
+ `User with ID ${sub.userId} has an cancelled or paused subscription`,
+ );
- await io.logger.info(
- `User ${sub.userId} subscription updated successfully`,
- response,
- );
- }
+ payload = {
+ planId: PlanTypeId.FREE,
+ event: SubscriptionEvent.SUBSCRIPTION_CANCELLED,
+ };
}
- },
- { name: "Checking users subscriptions" },
- );
+ const response = await prisma.subscription.update({
+ where: {
+ id: sub.id,
+ },
+ data: {
+ billingCycleStart: dayjs(cycleStartDate)
+ .add(1, "month")
+ .toISOString(),
+ ...getFormPlanLimitsDefaults(),
+ ...payload,
+ },
+ });
- await io.logger.info("✨ Subscription status checked successfully! ✨");
+ logger.info(
+ `User ${sub.userId} subscription updated successfully`,
+ response,
+ );
+
+ return response;
+ }
+ }
+ },
+ onSuccess: async () => {
+ logger.info("✨ Subscription status checked successfully! ✨");
},
});
diff --git a/apps/forms/libs/trigger/jobs/subscription/update.tsx b/apps/forms/libs/trigger/jobs/subscription/update.tsx
index cd36b623..77bb0a8a 100644
--- a/apps/forms/libs/trigger/jobs/subscription/update.tsx
+++ b/apps/forms/libs/trigger/jobs/subscription/update.tsx
@@ -1,5 +1,4 @@
-import { verifyRequestSignature } from "@trigger.dev/sdk";
-import { triggerClient } from "libs/trigger";
+import { task, logger } from "@trigger.dev/sdk/v3";
// Prisma
import prisma from "libs/prisma";
// Utils
@@ -8,7 +7,7 @@ import { PlanTypeId, config, SubscriptionEvent } from "@basestack/utils";
const { getSubscriptionEvents, getFormPlanByVariantId } = config.plans;
-interface ResponseBody {
+export interface UpdateSubsTaskPayload {
meta: {
test_mode: boolean;
webhook_id: string;
@@ -35,34 +34,19 @@ interface ResponseBody {
};
}
-// HTTP Webhook
-const lemonSqueezyDotCom = triggerClient.defineHttpEndpoint({
- id: "lemonsqueezy.com",
- source: "lemonsqueezy.com",
- verify: async (request) => {
- return await verifyRequestSignature({
- request,
- headerName: "X-Signature",
- secret: process.env.LEMONSQUEEZY_SIGNATURE_SECRET!,
- algorithm: "sha256",
- });
- },
-});
-
-triggerClient.defineJob({
+export const updateSubsTask = task({
id: "http-update-subscription",
- name: "HTTP Update Subscription",
- version: "1.0.0",
- trigger: lemonSqueezyDotCom.onRequest(),
- run: async (request, io) => {
- const body: ResponseBody = await request.json();
-
- await io.logger.info(`Webhook Event Body`, body);
-
- await io.logger.info(`Subscription Event:${body.meta.event_name}`);
+ machine: {
+ preset: "small-2x",
+ },
+ init: async (payload) => {
+ logger.info(`Webhook Event Body: ${payload}`);
+ },
+ run: async (body: UpdateSubsTaskPayload) => {
+ logger.info(`Subscription Event:${body.meta.event_name}`);
if (!getSubscriptionEvents.includes(body.meta.event_name)) {
- await io.logger.error("Invalid event name received");
+ logger.error("Invalid event name received");
return;
}
@@ -73,53 +57,50 @@ triggerClient.defineJob({
SubscriptionEvent.SUBSCRIPTION_CANCELLED,
].includes(body.meta.event_name as SubscriptionEvent)
) {
- await io.runTask(
- "check-and-update-subscription-db",
- async () => {
- const isUpdate =
- SubscriptionEvent.SUBSCRIPTION_UPDATED === body.meta.event_name;
- const userId = body.meta.custom_data.user_id;
- const variantId = body.data.attributes.variant_id;
+ const isUpdate =
+ SubscriptionEvent.SUBSCRIPTION_UPDATED === body.meta.event_name;
+ const userId = body.meta.custom_data.user_id;
+ const variantId = body.data.attributes.variant_id;
- const payload = {
- subscriptionId: body.data.id,
- customerId: body.data.attributes.customer_id,
- status: body.data.attributes.status,
- productId: body.data.attributes.product_id,
- event: body.meta.event_name,
- variantId,
- };
+ const payload = {
+ subscriptionId: body.data.id,
+ customerId: body.data.attributes.customer_id,
+ status: body.data.attributes.status,
+ productId: body.data.attributes.product_id,
+ event: body.meta.event_name,
+ variantId,
+ };
- const res = await prisma.subscription.upsert({
- create: {
- userId,
- planId: (body.meta.custom_data.plan_id ??
- PlanTypeId.FREE) as PlanTypeId,
- billingCycleStart: dayjs().add(1, "month").toISOString(),
- ...payload,
- },
- update: {
- planId: getFormPlanByVariantId(variantId)?.id,
- ...payload,
- ...(isUpdate
- ? {
- billingCycleStart: dayjs().add(1, "month").toISOString(),
- cancelled: body.data.attributes.cancelled ?? false,
- paused: body.data.attributes.cancelled ?? false,
- }
- : {}),
- },
- where: {
- userId,
- },
- });
-
- await io.logger.info("Subscription updated on DB", res);
+ const res = await prisma.subscription.upsert({
+ create: {
+ userId,
+ planId: (body.meta.custom_data.plan_id ??
+ PlanTypeId.FREE) as PlanTypeId,
+ billingCycleStart: dayjs().add(1, "month").toISOString(),
+ ...payload,
},
- { name: "Check if the Subscription needs updating" },
- );
- }
+ update: {
+ planId: getFormPlanByVariantId(variantId)?.id,
+ ...payload,
+ ...(isUpdate
+ ? {
+ billingCycleStart: dayjs().add(1, "month").toISOString(),
+ cancelled: body.data.attributes.cancelled ?? false,
+ paused: body.data.attributes.cancelled ?? false,
+ }
+ : {}),
+ },
+ where: {
+ userId,
+ },
+ });
- await io.logger.info("✨ Subscription updated ✨");
+ logger.info("Subscription updated on DB", res);
+
+ return res;
+ }
+ },
+ onSuccess: async () => {
+ logger.info("✨ Subscription updated ✨");
},
});
diff --git a/apps/forms/libs/trigger/jobs/webhook/external.tsx b/apps/forms/libs/trigger/jobs/webhook/external.tsx
index 14dd6cf9..8ff7b652 100644
--- a/apps/forms/libs/trigger/jobs/webhook/external.tsx
+++ b/apps/forms/libs/trigger/jobs/webhook/external.tsx
@@ -1,44 +1,32 @@
-import { eventTrigger } from "@trigger.dev/sdk";
-import { triggerClient, TriggerEventName } from "libs/trigger";
-// Utils
-import { z } from "zod";
+import { task, logger } from "@trigger.dev/sdk/v3";
-triggerClient.defineJob({
- id: "send-data-to-external-webhook",
- name: "Send data to external webhook",
- version: "1.0.1",
- trigger: eventTrigger({
- name: TriggerEventName.SEND_DATA_TO_EXTERNAL_WEBHOOK,
- schema: z.object({
- url: z.string().url(),
- body: z.any(),
- }),
- }),
- run: async (payload, io, ctx) => {
- await io.logger.info(
- `Preparing to send data to external webhook: ${payload.url}`,
- );
-
- await io.runTask(
- "send-webhook-data",
- async () => {
- const res = await fetch(payload.url, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(payload.body),
- });
+export interface SendToWebHookPayload {
+ url: string;
+ body: any;
+}
- await io.logger.info(
- `Data sent to the external webhook with status: ${res.status}`,
- );
+export const sendToWebHookTask = task({
+ id: "send-data-to-external-webhook",
+ machine: {
+ preset: "small-1x",
+ },
+ init: async (payload) => {
+ logger.info(`Preparing to send data to external webhook: ${payload.url}`);
+ },
+ run: async (payload: SendToWebHookPayload) => {
+ const res = await fetch(payload.url, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
},
- { name: "Send data to the external webhook" },
- );
+ body: JSON.stringify(payload.body),
+ });
+
+ logger.info(`Data sent to the external webhook with status: ${res.status}`);
- await io.logger.info(
- "✨ Data successfully sent to the external webhook ✨",
- );
+ return res;
+ },
+ onSuccess: async () => {
+ logger.info("✨ Data successfully sent to the external webhook ✨");
},
});
diff --git a/apps/forms/package.json b/apps/forms/package.json
index fe0d3f16..d2421e59 100644
--- a/apps/forms/package.json
+++ b/apps/forms/package.json
@@ -4,7 +4,6 @@
"private": true,
"scripts": {
"dev": "next dev --port 3003",
- "dev:trigger": "npx @trigger.dev/cli@latest dev --port 3003 --client-id basestack-forms-rUeL",
"build": "prisma generate && yarn db:migrate:dev && next build",
"build:deploy": "prisma generate && yarn db:migrate:prod && next build",
"build:proxy": "prisma generate --data-proxy && yarn db:migrate:proxy && next build",
@@ -26,7 +25,9 @@
"db:push": "prisma db push --schema=./prisma/schema.prisma",
"db:seed": "npx prisma db seed",
"db:studio": "prisma studio --schema=./prisma/schema.prisma",
- "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next"
+ "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next",
+ "trigger:dev": "npx trigger.dev@latest dev",
+ "trigger:deploy:prod": "npx trigger.dev@latest deploy --env prod --skip-typecheck"
},
"dependencies": {
"@basestack/design-system": "*",
@@ -39,11 +40,10 @@
"@lemonsqueezy/lemonsqueezy.js": "^3.3.1",
"@next-auth/prisma-adapter": "^1.0.4",
"@prisma/client": "^5.20.0",
+ "@prisma/instrumentation": "^5.18.0",
"@react-email/render": "^1.0.1",
"@tanstack/react-query": "^4.36.1",
- "@trigger.dev/nextjs": "^2.3.19",
- "@trigger.dev/react": "^2.3.19",
- "@trigger.dev/sdk": "^2.3.19",
+ "@trigger.dev/sdk": "3.0.12",
"@trpc/client": "^10.45.2",
"@trpc/next": "^10.45.2",
"@trpc/react": "^9.26.2",
diff --git a/apps/forms/pages/api/trigger.ts b/apps/forms/pages/api/trigger.ts
deleted file mode 100644
index 933d10db..00000000
--- a/apps/forms/pages/api/trigger.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createPagesRoute } from "@trigger.dev/nextjs";
-import { triggerClient } from "libs/trigger";
-
-import "libs/trigger/jobs";
-
-//uncomment this to set a higher max duration (it must be inside your plan limits).
-// Full docs: https://vercel.com/docs/functions/serverless-functions/runtimes#max-duration
-//export const config = {
-// maxDuration: 60,
-//};
-
-// This route is used to send and receive data with Trigger.dev
-const { handler, config } = createPagesRoute(triggerClient);
-
-export { config };
-
-export default handler;
diff --git a/apps/forms/pages/api/v1/s/[formId].ts b/apps/forms/pages/api/v1/s/[formId].ts
index d6786623..ab11ad17 100644
--- a/apps/forms/pages/api/v1/s/[formId].ts
+++ b/apps/forms/pages/api/v1/s/[formId].ts
@@ -7,8 +7,11 @@ import { withCors, PlanTypeId, config as utilsConfig } from "@basestack/utils";
import { withUsageUpdate } from "libs/prisma/utils/subscription";
// Prisma
import prisma from "libs/prisma";
-// Jobs
-import { triggerClient, TriggerEventName } from "libs/trigger";
+import {
+ sendEmailTask,
+ sendToWebHookTask,
+ checkDataForSpamTask,
+} from "libs/trigger/jobs";
const { hasFormPlanFeature, getFormLimitByKey } = utilsConfig.plans;
@@ -313,20 +316,19 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
form.hasSpamProtection &&
hasFormPlanFeature(planId, "hasSpamProtection")
) {
- await triggerClient.sendEvent({
- name: TriggerEventName.CHECK_DATA_FOR_SPAM,
- payload: {
+ await checkDataForSpamTask.trigger(
+ {
submissionId: submission.id,
data,
},
- });
+ { tags: [`userId:${form.userId}`, `formId:${formId}`] },
+ );
}
}
if (!!form.webhookUrl && hasFormPlanFeature(planId, "hasWebhooks")) {
- await triggerClient.sendEvent({
- name: TriggerEventName.SEND_DATA_TO_EXTERNAL_WEBHOOK,
- payload: {
+ await sendToWebHookTask.trigger(
+ {
url: form.webhookUrl,
body: {
formId,
@@ -334,16 +336,16 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
data,
},
},
- });
+ { tags: [`user_${form.userId}`, `form_id_${formId}`] },
+ );
}
if (
!!form.emails &&
hasFormPlanFeature(planId, "hasEmailNotifications")
) {
- await triggerClient.sendEvent({
- name: TriggerEventName.SEND_EMAIL,
- payload: {
+ await sendEmailTask.trigger(
+ {
template: "new-submission",
to: form.emails.split(",").map((email) => email.trim()),
subject: `New form submission received for ${form.name}`,
@@ -353,7 +355,8 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
formId,
},
},
- });
+ { tags: [`user_${form.userId}`, `form_id_${formId}`] },
+ );
}
const queryString =
diff --git a/apps/forms/pages/api/v1/webhook/lemonsqueezy.ts b/apps/forms/pages/api/v1/webhook/lemonsqueezy.ts
new file mode 100644
index 00000000..eef835a7
--- /dev/null
+++ b/apps/forms/pages/api/v1/webhook/lemonsqueezy.ts
@@ -0,0 +1,49 @@
+import type { NextApiRequest, NextApiResponse } from "next";
+// Utils
+import Cors from "cors";
+import {
+ withCors,
+ withHeaders,
+ withSignatureVerification,
+} from "@basestack/utils";
+// Jobs
+import { updateSubsTask, UpdateSubsTaskPayload } from "libs/trigger/jobs";
+
+const cors = Cors({
+ methods: ["POST"],
+ origin: ["https://basestack.co", "https://lemonsqueezy.com"],
+ optionsSuccessStatus: 200,
+});
+
+const handler = async (req: NextApiRequest, res: NextApiResponse) => {
+ if (req.method === "POST") {
+ const body = req.body as UpdateSubsTaskPayload;
+
+ await updateSubsTask.trigger(body, {
+ tags: [
+ `subscriptionEvent:${body.meta.event_name}`,
+ `subscriptionCustomerId:${body.data.attributes.customer_id}`,
+ `subscriptionProductId:${body.data.attributes.product_id}`,
+ ],
+ });
+ } else {
+ res.setHeader("Allow", ["POST"]);
+ return res.status(405).json({
+ code: 405,
+ error: true,
+ message: `The HTTP method is not supported at this route.`,
+ });
+ }
+};
+
+export default withCors(
+ cors,
+ withHeaders(
+ ["x-signature"],
+ withSignatureVerification(
+ "x-signature",
+ process.env.LEMONSQUEEZY_SIGNATURE_SECRET!,
+ handler,
+ ),
+ ),
+);
diff --git a/apps/forms/prisma/schema.prisma b/apps/forms/prisma/schema.prisma
index 954795d1..ccb83047 100644
--- a/apps/forms/prisma/schema.prisma
+++ b/apps/forms/prisma/schema.prisma
@@ -9,7 +9,7 @@ datasource db {
generator client {
provider = "prisma-client-js"
- previewFeatures = ["fullTextSearch", "relationJoins", "nativeDistinct", "omitApi"]
+ previewFeatures = ["fullTextSearch", "relationJoins", "nativeDistinct", "omitApi", "tracing"]
}
enum Role {
diff --git a/apps/forms/trigger.config.ts b/apps/forms/trigger.config.ts
new file mode 100644
index 00000000..aefc8b63
--- /dev/null
+++ b/apps/forms/trigger.config.ts
@@ -0,0 +1,19 @@
+import type { TriggerConfig } from "@trigger.dev/sdk/v3";
+import { PrismaInstrumentation } from "@prisma/instrumentation";
+
+export const config: TriggerConfig = {
+ project: "proj_gkgcyqmdxxyquflxhmvu",
+ logLevel: "log",
+ dirs: ["./libs/trigger"],
+ retries: {
+ enabledInDev: true,
+ default: {
+ maxAttempts: 2,
+ minTimeoutInMs: 1000,
+ maxTimeoutInMs: 10000,
+ factor: 2,
+ randomize: true,
+ },
+ },
+ instrumentations: [new PrismaInstrumentation()],
+};
diff --git a/apps/forms/tsconfig.json b/apps/forms/tsconfig.json
index 9c9659a1..b420ed46 100644
--- a/apps/forms/tsconfig.json
+++ b/apps/forms/tsconfig.json
@@ -4,6 +4,6 @@
"baseUrl": ".",
"strict": true
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "trigger.config.ts"],
"exclude": ["node_modules"]
}
diff --git a/apps/landing-page/package.json b/apps/landing-page/package.json
index 40ee9444..82b0d1c8 100644
--- a/apps/landing-page/package.json
+++ b/apps/landing-page/package.json
@@ -21,7 +21,7 @@
"@basestack/hooks": "*",
"@basestack/utils": "*",
"@emotion/is-prop-valid": "^1.3.1",
- "@floating-ui/react": "^0.26.24",
+ "@floating-ui/react": "^0.26.25",
"@hookform/resolvers": "^3.9.0",
"eslint-config-next": "^14.2.15",
"isomorphic-unfetch": "^4.0.2",
diff --git a/packages/design-system/package.json b/packages/design-system/package.json
index 69435bf3..00bbef0b 100644
--- a/packages/design-system/package.json
+++ b/packages/design-system/package.json
@@ -26,7 +26,7 @@
"typescript": "^5.6.3"
},
"dependencies": {
- "@floating-ui/react": "^0.26.24",
+ "@floating-ui/react": "^0.26.25",
"polished": "^4.2.2",
"react-calendar": "^5.0.0",
"react-select": "^5.8.1",
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 16106afb..99bb2e4a 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -24,5 +24,8 @@
"ts-jest": "^29.2.5",
"tsup": "^8.3.0",
"typescript": "^5.6.3"
+ },
+ "dependencies": {
+ "crypto": "^1.0.1"
}
}
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
index 93475025..ccdfb161 100644
--- a/packages/utils/src/index.ts
+++ b/packages/utils/src/index.ts
@@ -13,3 +13,4 @@ export * from "./types";
// Middleware
export * from "./middleware/cors";
export * from "./middleware/headers";
+export * from "./middleware/signatureVerification";
diff --git a/packages/utils/src/middleware/signatureVerification/index.ts b/packages/utils/src/middleware/signatureVerification/index.ts
new file mode 100644
index 00000000..0e20fa31
--- /dev/null
+++ b/packages/utils/src/middleware/signatureVerification/index.ts
@@ -0,0 +1,77 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import crypto from "crypto";
+
+interface VerifyRequestSignatureParams {
+ req: NextApiRequest;
+ headerName: string;
+ secret: string;
+ algorithm: string;
+}
+
+export const getRawBody = async (req: NextApiRequest): Promise => {
+ const buffers: Buffer[] = [];
+
+ return new Promise((resolve, reject) => {
+ req.on("data", (chunk) => {
+ buffers.push(chunk);
+ });
+
+ req.on("end", () => {
+ const body = Buffer.concat(buffers).toString("utf8");
+ resolve(body);
+ });
+
+ req.on("error", (err) => {
+ reject(err);
+ });
+ });
+};
+
+export const verifyRequestSignature = async ({
+ req,
+ headerName,
+ secret,
+ algorithm,
+}: VerifyRequestSignatureParams): Promise => {
+ const signature = req.headers[headerName.toLowerCase()] as string | undefined;
+
+ if (!signature) {
+ throw new Error(`Signature not found in the "${headerName}" header.`);
+ }
+
+ const rawBody = await getRawBody(req);
+
+ const hmac = crypto.createHmac(algorithm, secret);
+ hmac.update(rawBody);
+ const computedSignature = hmac.digest("hex");
+
+ return crypto.timingSafeEqual(
+ Buffer.from(signature, "hex"),
+ Buffer.from(computedSignature, "hex"),
+ );
+};
+
+export const withSignatureVerification = (
+ headerName: string,
+ envSecret: string,
+ handler: (req: NextApiRequest, res: NextApiResponse) => Promise | void,
+) => {
+ return async (req: NextApiRequest, res: NextApiResponse): Promise => {
+ try {
+ const isValid = await verifyRequestSignature({
+ req,
+ headerName,
+ secret: envSecret,
+ algorithm: "sha256",
+ });
+
+ if (!isValid) {
+ return res.status(403).json({ error: "Invalid signature" });
+ }
+
+ return handler(req, res);
+ } catch (error) {
+ return res.status(500).json({ error: "Internal Server Error" });
+ }
+ };
+};
diff --git a/yarn.lock b/yarn.lock
index ee826ad1..f834d316 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -800,10 +800,10 @@
dependencies:
"@floating-ui/dom" "^1.0.0"
-"@floating-ui/react@^0.26.24":
- version "0.26.24"
- resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.24.tgz#072b9dfeca4e79ef4e3000ef1c28e0ffc86f4ed4"
- integrity sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==
+"@floating-ui/react@^0.26.25":
+ version "0.26.25"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.25.tgz#cf4c8a2b89fab1a71712d15e6551df3bfbd2ea1d"
+ integrity sha512-hZOmgN0NTOzOuZxI1oIrDu3Gcl8WViIkvPMpB4xdd4QD6xAMtwgwr3VPoiyH/bLtRcS1cDnhxLSD1NsMJmwh/A==
dependencies:
"@floating-ui/react-dom" "^2.1.2"
"@floating-ui/utils" "^0.2.8"
@@ -819,6 +819,29 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62"
integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
+"@google-cloud/precise-date@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-4.0.0.tgz#e179893a3ad628b17a6fabdfcc9d468753aac11a"
+ integrity sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==
+
+"@grpc/grpc-js@^1.7.1":
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.2.tgz#97eda82dd49bb9c24eaf6434ea8d7de446e95aac"
+ integrity sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==
+ dependencies:
+ "@grpc/proto-loader" "^0.7.13"
+ "@js-sdsl/ordered-map" "^4.4.2"
+
+"@grpc/proto-loader@^0.7.13":
+ version "0.7.13"
+ resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf"
+ integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==
+ dependencies:
+ lodash.camelcase "^4.3.0"
+ long "^5.0.0"
+ protobufjs "^7.2.5"
+ yargs "^17.7.2"
+
"@headlessui/react@^1.7.17":
version "1.7.19"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40"
@@ -1103,6 +1126,11 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@js-sdsl/ordered-map@^4.4.2":
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
+ integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
+
"@lemonsqueezy/lemonsqueezy.js@^3.3.1":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@lemonsqueezy/lemonsqueezy.js/-/lemonsqueezy.js-3.3.1.tgz#f0f93064143c7a0577912d3e167eced097641207"
@@ -1363,6 +1391,261 @@
resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323"
integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==
+"@opentelemetry/api-logs@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz#52906375da4d64c206b0c4cb8ffa209214654ecc"
+ integrity sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==
+ dependencies:
+ "@opentelemetry/api" "^1.0.0"
+
+"@opentelemetry/api-logs@0.53.0":
+ version "0.53.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz#c478cbd8120ec2547b64edfa03a552cfe42170be"
+ integrity sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==
+ dependencies:
+ "@opentelemetry/api" "^1.0.0"
+
+"@opentelemetry/api@1.9.0", "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.8":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
+ integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
+
+"@opentelemetry/context-async-hooks@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz#810bff2fcab84ec51f4684aff2d21f6c057d9e73"
+ integrity sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==
+
+"@opentelemetry/core@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.25.1.tgz#ff667d939d128adfc7c793edae2f6bca177f829d"
+ integrity sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==
+ dependencies:
+ "@opentelemetry/semantic-conventions" "1.25.1"
+
+"@opentelemetry/core@1.26.0":
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.26.0.tgz#7d84265aaa850ed0ca5813f97d831155be42b328"
+ integrity sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==
+ dependencies:
+ "@opentelemetry/semantic-conventions" "1.27.0"
+
+"@opentelemetry/exporter-logs-otlp-http@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.52.1.tgz#d72ee67d9b6ce9a39a1c5e1241bb20f54a683549"
+ integrity sha512-qKgywId2DbdowPZpOBXQKp0B8DfhfIArmSic15z13Nk/JAOccBUQdPwDjDnjsM5f0ckZFMVR2t/tijTUAqDZoA==
+ dependencies:
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-exporter-base" "0.52.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+ "@opentelemetry/sdk-logs" "0.52.1"
+
+"@opentelemetry/exporter-trace-otlp-grpc@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz#8b59c93a5833484ba19a7f424632c6ced5ea1d3b"
+ integrity sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==
+ dependencies:
+ "@grpc/grpc-js" "^1.7.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-grpc-exporter-base" "0.52.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+
+"@opentelemetry/exporter-trace-otlp-http@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz#99549e05f581050d0df2c1c684d1a819c480ebc6"
+ integrity sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-exporter-base" "0.52.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+
+"@opentelemetry/exporter-trace-otlp-proto@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz#7b68268cd4d46b7d89ee7c97720031ca80919fd6"
+ integrity sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-exporter-base" "0.52.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+
+"@opentelemetry/exporter-zipkin@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz#81bb3b3aa16500676277c2fd6d50159eaf6c081a"
+ integrity sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+
+"@opentelemetry/instrumentation@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz#2e7e46a38bd7afbf03cf688c862b0b43418b7f48"
+ integrity sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==
+ dependencies:
+ "@opentelemetry/api-logs" "0.52.1"
+ "@types/shimmer" "^1.0.2"
+ import-in-the-middle "^1.8.1"
+ require-in-the-middle "^7.1.1"
+ semver "^7.5.2"
+ shimmer "^1.2.1"
+
+"@opentelemetry/instrumentation@^0.49 || ^0.50 || ^0.51 || ^0.52.0 || ^0.53.0":
+ version "0.53.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz#e6369e4015eb5112468a4d45d38dcada7dad892d"
+ integrity sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==
+ dependencies:
+ "@opentelemetry/api-logs" "0.53.0"
+ "@types/shimmer" "^1.2.0"
+ import-in-the-middle "^1.8.1"
+ require-in-the-middle "^7.1.1"
+ semver "^7.5.2"
+ shimmer "^1.2.1"
+
+"@opentelemetry/otlp-exporter-base@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz#657d9b27c55bd42ab6a8bb181006b57f9c84b91d"
+ integrity sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+
+"@opentelemetry/otlp-grpc-exporter-base@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz#e1fdfd979289a87faec1c7cf303100c75e49a284"
+ integrity sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==
+ dependencies:
+ "@grpc/grpc-js" "^1.7.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/otlp-exporter-base" "0.52.1"
+ "@opentelemetry/otlp-transformer" "0.52.1"
+
+"@opentelemetry/otlp-transformer@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz#779b7ebf0e3791eebeaa64caff06914fe3577948"
+ integrity sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==
+ dependencies:
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-logs" "0.52.1"
+ "@opentelemetry/sdk-metrics" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+ protobufjs "^7.3.0"
+
+"@opentelemetry/propagator-b3@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz#653ee5f3f0f223c000907c1559c89c0a208819f7"
+ integrity sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+
+"@opentelemetry/propagator-jaeger@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz#7eae165921e65dce6f8d87339379880125dab765"
+ integrity sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+
+"@opentelemetry/resources@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.25.1.tgz#bb9a674af25a1a6c30840b755bc69da2796fefbb"
+ integrity sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+
+"@opentelemetry/resources@1.26.0":
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.26.0.tgz#da4c7366018bd8add1f3aa9c91c6ac59fd503cef"
+ integrity sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==
+ dependencies:
+ "@opentelemetry/core" "1.26.0"
+ "@opentelemetry/semantic-conventions" "1.27.0"
+
+"@opentelemetry/sdk-logs@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz#5653faa2d81cae574729bdeb4298b95dc10ae736"
+ integrity sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==
+ dependencies:
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/resources" "1.25.1"
+
+"@opentelemetry/sdk-metrics@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz#50c985ec15557a9654334e7fa1018dc47a8a56b7"
+ integrity sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/resources" "1.25.1"
+ lodash.merge "^4.6.2"
+
+"@opentelemetry/sdk-node@0.52.1":
+ version "0.52.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz#984f8a679a966b065504ccfe4b811359e417dd30"
+ integrity sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==
+ dependencies:
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/exporter-trace-otlp-grpc" "0.52.1"
+ "@opentelemetry/exporter-trace-otlp-http" "0.52.1"
+ "@opentelemetry/exporter-trace-otlp-proto" "0.52.1"
+ "@opentelemetry/exporter-zipkin" "1.25.1"
+ "@opentelemetry/instrumentation" "0.52.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-logs" "0.52.1"
+ "@opentelemetry/sdk-metrics" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+ "@opentelemetry/sdk-trace-node" "1.25.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+
+"@opentelemetry/sdk-trace-base@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz#cbc1e60af255655d2020aa14cde17b37bd13df37"
+ integrity sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==
+ dependencies:
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+
+"@opentelemetry/sdk-trace-base@^1.22":
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz#0c913bc6d2cfafd901de330e4540952269ae579c"
+ integrity sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==
+ dependencies:
+ "@opentelemetry/core" "1.26.0"
+ "@opentelemetry/resources" "1.26.0"
+ "@opentelemetry/semantic-conventions" "1.27.0"
+
+"@opentelemetry/sdk-trace-node@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz#856063bef1167ae74139199338c24fb958838ff3"
+ integrity sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==
+ dependencies:
+ "@opentelemetry/context-async-hooks" "1.25.1"
+ "@opentelemetry/core" "1.25.1"
+ "@opentelemetry/propagator-b3" "1.25.1"
+ "@opentelemetry/propagator-jaeger" "1.25.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+ semver "^7.5.2"
+
+"@opentelemetry/semantic-conventions@1.25.1":
+ version "1.25.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz#0deecb386197c5e9c2c28f2f89f51fb8ae9f145e"
+ integrity sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==
+
+"@opentelemetry/semantic-conventions@1.27.0":
+ version "1.27.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c"
+ integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==
+
"@panva/hkdf@^1.0.2":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d"
@@ -1419,6 +1702,68 @@
dependencies:
"@prisma/debug" "5.20.0"
+"@prisma/instrumentation@^5.18.0":
+ version "5.20.0"
+ resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-5.20.0.tgz#b0b87e966384d491ae92fcba95ec71f910c11573"
+ integrity sha512-SHaI+3F4mu879fuD19qXKZGv+scgUOnFjX29/KFVwURpjz7trq3yfz91rwZaFuN4IAqUKJNcqEt4UOzoFHWklw==
+ dependencies:
+ "@opentelemetry/api" "^1.8"
+ "@opentelemetry/instrumentation" "^0.49 || ^0.50 || ^0.51 || ^0.52.0 || ^0.53.0"
+ "@opentelemetry/sdk-trace-base" "^1.22"
+
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+ integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+ integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+ integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+ integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+ integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+ integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+ integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+ integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+ integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
+
"@react-email/body@0.0.10":
version "0.0.10"
resolved "https://registry.yarnpkg.com/@react-email/body/-/body-0.0.10.tgz#bb8f0c8f6375a6e93ad841b4693807733a62709c"
@@ -1863,19 +2208,6 @@
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.36.1.tgz#79f8c1a539d47c83104210be2388813a7af2e524"
integrity sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==
-"@tanstack/query-core@5.0.0-beta.0":
- version "5.0.0-beta.0"
- resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.0.0-beta.0.tgz#6d3b6c7bb0e1479655303e307aea2b563800b3f8"
- integrity sha512-VGq/H3PuRoj0shOcg1S5Flv3YD2qNz2ttk8w5xe5AHQE1I8NO9EHSBUxezIpk4dD6M7bQDtwHBMqqU2EwMwyUw==
-
-"@tanstack/react-query@5.0.0-beta.2":
- version "5.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.0.0-beta.2.tgz#1ba1ad2061600798477d93d48eec1320685fa0c8"
- integrity sha512-JdK1HRw20tuwg3GfT3QZTkuS7s2KDa9FeozuJ7jZULlwPczZagouqYmM6+PL0ad6jfCnw8NzmLFtZdlBx6cTmA==
- dependencies:
- "@tanstack/query-core" "5.0.0-beta.0"
- client-only "0.0.1"
-
"@tanstack/react-query@^4.36.1":
version "4.36.1"
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.36.1.tgz#acb589fab4085060e2e78013164868c9c785e5d2"
@@ -1959,51 +2291,45 @@
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
-"@trigger.dev/core-backend@^2.3.19":
- version "2.3.19"
- resolved "https://registry.yarnpkg.com/@trigger.dev/core-backend/-/core-backend-2.3.19.tgz#aabd7aac58fbf85a60226d473fb957632f97e46e"
- integrity sha512-TLior4RZSD+MnTeCytS1aG+o9ZQowSb7cMTml0jZVvA65Cy5uvKF7bkpoPmyIxyw+ZAwmrIsefZzAzI4Iu7+aw==
-
-"@trigger.dev/core@^2.3.19":
- version "2.3.19"
- resolved "https://registry.yarnpkg.com/@trigger.dev/core/-/core-2.3.19.tgz#cd0c515dff4c299746a1b17495a09f0c9d618165"
- integrity sha512-ZL5G8pBFOamgmHzg4hgjt+5jYBJlkvizTOYPAjhNlqhzq+wr1Czsp7I5JeynHSo55bc/TMen75uGh7blwBCaNw==
- dependencies:
- ulidx "^2.2.1"
+"@trigger.dev/core@3.0.12":
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/@trigger.dev/core/-/core-3.0.12.tgz#0e970ed57549b788ffc11e464d0245856e1da240"
+ integrity sha512-ErN70xGBLSXLEdjn/Q2BVKSqy5FMpue+7B1MT2ZCGD3jMu1vYnlDzVp847Au47cdQ5GoFSv3n1DteBLd3eDiBg==
+ dependencies:
+ "@google-cloud/precise-date" "^4.0.0"
+ "@opentelemetry/api" "1.9.0"
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/exporter-logs-otlp-http" "0.52.1"
+ "@opentelemetry/exporter-trace-otlp-http" "0.52.1"
+ "@opentelemetry/instrumentation" "0.52.1"
+ "@opentelemetry/resources" "1.25.1"
+ "@opentelemetry/sdk-logs" "0.52.1"
+ "@opentelemetry/sdk-node" "0.52.1"
+ "@opentelemetry/sdk-trace-base" "1.25.1"
+ "@opentelemetry/sdk-trace-node" "1.25.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+ execa "^8.0.1"
+ humanize-duration "^3.27.3"
+ nanoid "^3.3.4"
+ socket.io-client "4.7.5"
+ superjson "^2.2.1"
zod "3.22.3"
zod-error "1.5.0"
+ zod-validation-error "^1.5.0"
-"@trigger.dev/nextjs@^2.3.19":
- version "2.3.19"
- resolved "https://registry.yarnpkg.com/@trigger.dev/nextjs/-/nextjs-2.3.19.tgz#b105bab2dad86dbc9ae3e7ce1c2e4a6fdf8ba873"
- integrity sha512-HzNyuasNNvAWwdDTxPrA7ij8b3nKFX4tSDaT+3oPOwvZTkTlPF08ekRX/RWRLo4jVSdj3HOddqZO/B699pFV/Q==
- dependencies:
- debug "^4.3.4"
-
-"@trigger.dev/react@^2.3.19":
- version "2.3.19"
- resolved "https://registry.yarnpkg.com/@trigger.dev/react/-/react-2.3.19.tgz#c8bc03f9cd55398af807b0a5fdfde75a571a0f49"
- integrity sha512-Qn4osRpu+P5yyIMI6e25DjrwPTk8f+j3/MS8oQQuA/ehVIcXBg7nmDcwmDsmXnYDALWP+9EaGtGvdPc5I2NBXw==
- dependencies:
- "@tanstack/react-query" "5.0.0-beta.2"
- "@trigger.dev/core" "^2.3.19"
- debug "^4.3.4"
- zod "3.22.3"
-
-"@trigger.dev/sdk@^2.3.19":
- version "2.3.19"
- resolved "https://registry.yarnpkg.com/@trigger.dev/sdk/-/sdk-2.3.19.tgz#3c44674e48cd0adf80362bb459b631ed1192b896"
- integrity sha512-NjX5vEK3ydx5Bac0rwQbHqOZWJJqT6qQ+/GkTErKDs59v+qD+s1g/fB/TtEGpsAjdZK9FIPm4ooFemYVmpIm/A==
+"@trigger.dev/sdk@3.0.12":
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/@trigger.dev/sdk/-/sdk-3.0.12.tgz#f80b6979b08c90fb45e45ef03a25b2ff81651f22"
+ integrity sha512-1PU2yvmvKgk3dsbEpcmjHt6pBtmWtxRpqlb2U87g2ScZ2pJAZ01bx7iifXPp33HI86enj3TyFhGlba0MQDcCAQ==
dependencies:
- "@trigger.dev/core" "^2.3.19"
- "@trigger.dev/core-backend" "^2.3.19"
+ "@opentelemetry/api" "1.9.0"
+ "@opentelemetry/api-logs" "0.52.1"
+ "@opentelemetry/semantic-conventions" "1.25.1"
+ "@trigger.dev/core" "3.0.12"
chalk "^5.2.0"
cronstrue "^2.21.0"
debug "^4.3.4"
evt "^2.4.13"
- get-caller-file "^2.0.5"
- git-remote-origin-url "^4.0.0"
- git-repo-info "^2.1.1"
slug "^6.0.0"
terminal-link "^3.0.0"
ulid "^2.3.0"
@@ -2253,7 +2579,7 @@
dependencies:
undici-types "~6.13.0"
-"@types/node@22.7.5", "@types/node@^22.7.5":
+"@types/node@22.7.5", "@types/node@>=13.7.0", "@types/node@^22.7.5":
version "22.7.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b"
integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==
@@ -2335,6 +2661,11 @@
dependencies:
"@types/node" "*"
+"@types/shimmer@^1.0.2", "@types/shimmer@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded"
+ integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==
+
"@types/stack-utils@^2.0.0":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
@@ -2506,6 +2837,11 @@ acorn-globals@^7.0.0:
acorn "^8.1.0"
acorn-walk "^8.0.2"
+acorn-import-attributes@^1.9.5:
+ version "1.9.5"
+ resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
+ integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
+
acorn-jsx@^5.0.0, acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
@@ -2521,6 +2857,11 @@ acorn@^8.0.0, acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+acorn@^8.8.2:
+ version "8.12.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
+ integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
+
agent-base@6:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -3146,6 +3487,11 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c"
integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==
+cjs-module-lexer@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170"
+ integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==
+
cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
@@ -3491,6 +3837,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+crypto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
+ integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
+
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
@@ -4174,6 +4525,17 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+engine.io-client@~6.5.2:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.4.tgz#b8bc71ed3f25d0d51d587729262486b4b33bd0d0"
+ integrity sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+ engine.io-parser "~5.2.1"
+ ws "~8.17.1"
+ xmlhttprequest-ssl "~2.0.0"
+
engine.io-parser@~5.2.1:
version "5.2.2"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49"
@@ -4756,7 +5118,7 @@ execa@^5.0.0, execa@^5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
-execa@~8.0.1:
+execa@^8.0.1, execa@~8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
@@ -5180,18 +5542,6 @@ get-user-locale@^2.2.1:
dependencies:
mem "^8.0.0"
-git-remote-origin-url@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-4.0.0.tgz#712649112d88ca42b7d585e1b9fa6cafe22c8f63"
- integrity sha512-EAxDksNdjuWgmVW9pVvA9jQDi/dmTaiDONktIy7qiRRhBZUI4FQK1YvBvteuTSX24aNKg9lfgxNYJEeeSXe6DA==
- dependencies:
- gitconfiglocal "^2.1.0"
-
-git-repo-info@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058"
- integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==
-
git-up@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467"
@@ -5207,13 +5557,6 @@ git-url-parse@^13.1.0:
dependencies:
git-up "^7.0.0"
-gitconfiglocal@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz#07c28685c55cc5338b27b5acbcfe34aeb92e43d1"
- integrity sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==
- dependencies:
- ini "^1.3.2"
-
github-slugger@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a"
@@ -5655,6 +5998,11 @@ human-signals@^5.0.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
+humanize-duration@^3.27.3:
+ version "3.32.1"
+ resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.32.1.tgz#922beff5da36fb1cee3de26ada24c592b0fe519b"
+ integrity sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==
+
husky@^9.1.6:
version "9.1.6"
resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c"
@@ -5702,6 +6050,16 @@ import-fresh@^3.2.1, import-fresh@^3.3.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-in-the-middle@^1.8.1:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz#dd848e72b63ca6cd7c34df8b8d97fc9baee6174f"
+ integrity sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==
+ dependencies:
+ acorn "^8.8.2"
+ acorn-import-attributes "^1.9.5"
+ cjs-module-lexer "^1.2.2"
+ module-details-from-path "^1.0.3"
+
import-local@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
@@ -5743,7 +6101,7 @@ ini@4.1.1:
resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1"
integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==
-ini@^1.3.2, ini@^1.3.4:
+ini@^1.3.4:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -6841,11 +7199,6 @@ language-tags@^1.0.9:
dependencies:
language-subtag-registry "^0.3.20"
-layerr@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/layerr/-/layerr-2.1.0.tgz#7b2aa335837b856fd25b3dd4fb44dc17d0785491"
- integrity sha512-xDD9suWxfBYeXgqffRVH/Wqh+mqZrQcqPRn0I0ijl7iJQ7vu8gMGPt1Qop59pEW/jaIDNUN7+PX1Qk40+vuflg==
-
layout-base@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2"
@@ -6931,6 +7284,11 @@ lodash-es@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
lodash.curry@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
@@ -7005,6 +7363,11 @@ log-update@^6.1.0:
strip-ansi "^7.1.0"
wrap-ansi "^9.0.0"
+long@^5.0.0:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1"
+ integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==
+
longest-streak@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
@@ -7935,6 +8298,11 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481"
integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==
+module-details-from-path@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b"
+ integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==
+
mri@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
@@ -7978,7 +8346,7 @@ nano-css@^5.6.2:
stacktrace-js "^2.0.2"
stylis "^4.3.0"
-nanoid@^3.3.6, nanoid@^3.3.7:
+nanoid@^3.3.4, nanoid@^3.3.6, nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
@@ -8764,6 +9132,24 @@ proto-list@~1.2.1:
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+protobufjs@^7.2.5, protobufjs@^7.3.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a"
+ integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.2"
+ "@protobufjs/base64" "^1.1.2"
+ "@protobufjs/codegen" "^2.0.4"
+ "@protobufjs/eventemitter" "^1.1.0"
+ "@protobufjs/fetch" "^1.1.0"
+ "@protobufjs/float" "^1.0.2"
+ "@protobufjs/inquire" "^1.1.0"
+ "@protobufjs/path" "^1.1.2"
+ "@protobufjs/pool" "^1.1.0"
+ "@protobufjs/utf8" "^1.1.0"
+ "@types/node" ">=13.7.0"
+ long "^5.0.0"
+
protocols@^2.0.0, protocols@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86"
@@ -9179,6 +9565,15 @@ require-from-string@^2.0.2:
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+require-in-the-middle@^7.1.1:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4"
+ integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==
+ dependencies:
+ debug "^4.3.5"
+ module-details-from-path "^1.0.3"
+ resolve "^1.22.8"
+
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -9224,7 +9619,7 @@ resolve.exports@^2.0.0:
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
-resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4:
+resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4, resolve@^1.22.8:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -9425,16 +9820,16 @@ semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+semver@^7.5.2, semver@^7.6.0, semver@^7.6.3:
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+
semver@^7.5.3, semver@^7.5.4:
version "7.6.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
-semver@^7.6.0, semver@^7.6.3:
- version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
- integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
-
set-function-length@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
@@ -9506,6 +9901,11 @@ shiki@^0.14.3:
vscode-oniguruma "^1.7.0"
vscode-textmate "^8.0.0"
+shimmer@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
+ integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
+
side-channel@^1.0.4, side-channel@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
@@ -9565,6 +9965,16 @@ socket.io-adapter@~2.5.2:
debug "~4.3.4"
ws "~8.11.0"
+socket.io-client@4.7.5:
+ version "4.7.5"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.5.tgz#919be76916989758bdc20eec63f7ee0ae45c05b7"
+ integrity sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.2"
+ engine.io-client "~6.5.2"
+ socket.io-parser "~4.2.4"
+
socket.io-parser@~4.2.4:
version "4.2.4"
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
@@ -10376,13 +10786,6 @@ ulid@^2.3.0:
resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.3.0.tgz#93063522771a9774121a84d126ecd3eb9804071f"
integrity sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==
-ulidx@^2.2.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/ulidx/-/ulidx-2.3.0.tgz#0ed0360b40b7f5ddb88f636d470c51ffebdbee58"
- integrity sha512-36piWNqcdp9hKlQewyeehCaALy4lyx3FodsCxHuV6i0YdexSkjDOubwxEVr2yi4kh62L/0MgyrxqG4K+qtovnw==
- dependencies:
- layerr "^2.0.1"
-
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@@ -10948,6 +11351,11 @@ ws@~8.11.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+ws@~8.17.1:
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
+ integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
+
xml-name-validator@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
@@ -10958,6 +11366,11 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xmlhttprequest-ssl@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
+ integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
+
xtend@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
@@ -10998,7 +11411,7 @@ yargs-parser@^21.1.1:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-yargs@^17.3.1:
+yargs@^17.3.1, yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
@@ -11023,6 +11436,11 @@ zod-error@1.5.0:
dependencies:
zod "^3.20.2"
+zod-validation-error@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-1.5.0.tgz#2b355007a1c3b7fb04fa476bfad4e7b3fd5491e3"
+ integrity sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==
+
zod@3.22.3:
version "3.22.3"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060"