From 4b6db35f169e24a721f9da3b171db626c1c93294 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Wed, 19 Mar 2025 00:36:35 -0600 Subject: [PATCH] feat(licenses): implement license management system with email notifications - Added database schema for licenses, including types and statuses. - Implemented license creation, validation, and activation functionalities. - Integrated email templates for sending license keys and resend requests. - Updated package dependencies and configuration for PostgreSQL integration. - Introduced migration and truncation scripts for database management. - Enhanced API endpoints for license operations with error handling and validation. --- apps/licenses/drizzle.config.ts | 15 + .../drizzle/0000_furry_nico_minoru.sql | 21 + apps/licenses/drizzle/meta/0000_snapshot.json | 164 + apps/licenses/drizzle/meta/_journal.json | 13 + apps/licenses/package.json | 36 +- apps/licenses/src/db.ts | 9 + apps/licenses/src/index.ts | 287 +- apps/licenses/src/migrate.ts | 22 + apps/licenses/src/schema.ts | 65 +- apps/licenses/src/truncate.ts | 24 + apps/licenses/src/utils/license.ts | 119 + .../templates/emails/license-email.tsx | 303 ++ .../templates/emails/resend-license-email.tsx | 292 ++ .../templates/emails/static/vercel-user.png | Bin 0 -> 55726 bytes apps/licenses/templates/package-lock.json | 3495 +++++++++++++++++ apps/licenses/templates/package.json | 20 + apps/licenses/templates/readme.md | 27 + apps/licenses/tsconfig.json | 5 +- pnpm-lock.yaml | 236 +- 19 files changed, 5071 insertions(+), 82 deletions(-) create mode 100644 apps/licenses/drizzle.config.ts create mode 100644 apps/licenses/drizzle/0000_furry_nico_minoru.sql create mode 100644 apps/licenses/drizzle/meta/0000_snapshot.json create mode 100644 apps/licenses/drizzle/meta/_journal.json create mode 100644 apps/licenses/src/db.ts create mode 100644 apps/licenses/src/migrate.ts create mode 100644 apps/licenses/src/truncate.ts create mode 100644 apps/licenses/src/utils/license.ts create mode 100644 apps/licenses/templates/emails/license-email.tsx create mode 100644 apps/licenses/templates/emails/resend-license-email.tsx create mode 100644 apps/licenses/templates/emails/static/vercel-user.png create mode 100644 apps/licenses/templates/package-lock.json create mode 100644 apps/licenses/templates/package.json create mode 100644 apps/licenses/templates/readme.md diff --git a/apps/licenses/drizzle.config.ts b/apps/licenses/drizzle.config.ts new file mode 100644 index 00000000..696c89e8 --- /dev/null +++ b/apps/licenses/drizzle.config.ts @@ -0,0 +1,15 @@ +import type { Config } from "drizzle-kit"; +import "dotenv/config"; + +const connectionString = process.env.DATABASE_URL!; + +export default { + schema: "./src/schema.ts", + out: "./drizzle", + dialect: "postgresql", + dbCredentials: { + url: connectionString, + }, + verbose: true, + strict: true, +} satisfies Config; diff --git a/apps/licenses/drizzle/0000_furry_nico_minoru.sql b/apps/licenses/drizzle/0000_furry_nico_minoru.sql new file mode 100644 index 00000000..df07f73a --- /dev/null +++ b/apps/licenses/drizzle/0000_furry_nico_minoru.sql @@ -0,0 +1,21 @@ +CREATE TYPE "public"."billing_type" AS ENUM('monthly', 'annual');--> statement-breakpoint +CREATE TYPE "public"."license_status" AS ENUM('active', 'expired', 'cancelled');--> statement-breakpoint +CREATE TYPE "public"."license_type" AS ENUM('basic', 'premium', 'business');--> statement-breakpoint +CREATE TABLE "licenses" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "customer_id" text NOT NULL, + "product_id" text NOT NULL, + "license_key" text NOT NULL, + "status" "license_status" DEFAULT 'active' NOT NULL, + "type" "license_type" NOT NULL, + "billing_type" "billing_type" NOT NULL, + "server_ip" text, + "activated_at" timestamp, + "last_verified_at" timestamp, + "expires_at" timestamp NOT NULL, + "created_at" timestamp DEFAULT CURRENT_TIMESTAMP, + "updated_at" timestamp DEFAULT CURRENT_TIMESTAMP, + "metadata" text, + "email" text NOT NULL, + CONSTRAINT "licenses_license_key_unique" UNIQUE("license_key") +); diff --git a/apps/licenses/drizzle/meta/0000_snapshot.json b/apps/licenses/drizzle/meta/0000_snapshot.json new file mode 100644 index 00000000..0ce98f04 --- /dev/null +++ b/apps/licenses/drizzle/meta/0000_snapshot.json @@ -0,0 +1,164 @@ +{ + "id": "41745f43-6627-49f6-afa3-ab192559b5a7", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.licenses": { + "name": "licenses", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "customer_id": { + "name": "customer_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "product_id": { + "name": "product_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "license_key": { + "name": "license_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "license_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "type": { + "name": "type", + "type": "license_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "billing_type": { + "name": "billing_type", + "type": "billing_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "server_ip": { + "name": "server_ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "activated_at": { + "name": "activated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "last_verified_at": { + "name": "last_verified_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "CURRENT_TIMESTAMP" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "CURRENT_TIMESTAMP" + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "licenses_license_key_unique": { + "name": "licenses_license_key_unique", + "nullsNotDistinct": false, + "columns": [ + "license_key" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.billing_type": { + "name": "billing_type", + "schema": "public", + "values": [ + "monthly", + "annual" + ] + }, + "public.license_status": { + "name": "license_status", + "schema": "public", + "values": [ + "active", + "expired", + "cancelled" + ] + }, + "public.license_type": { + "name": "license_type", + "schema": "public", + "values": [ + "basic", + "premium", + "business" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/licenses/drizzle/meta/_journal.json b/apps/licenses/drizzle/meta/_journal.json new file mode 100644 index 00000000..7ff74d39 --- /dev/null +++ b/apps/licenses/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1742364501431, + "tag": "0000_furry_nico_minoru", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/apps/licenses/package.json b/apps/licenses/package.json index 8d43cc13..ea768aeb 100644 --- a/apps/licenses/package.json +++ b/apps/licenses/package.json @@ -6,27 +6,41 @@ "dev": "PORT=4000 tsx watch src/index.ts", "build": "tsc --project tsconfig.json", "start": "node dist/index.js", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "generate": "drizzle-kit generate", + "drop": "drizzle-kit drop", + "migrate": "tsx src/migrate.ts", + "truncate": "tsx src/truncate.ts", + "reset:all": "tsx src/truncate.ts && tsx src/migrate.ts", + "studio": "drizzle-kit studio" }, "dependencies": { + "@react-email/components": "^0.0.21", + "@hono/node-server": "^1.12.1", + "@hono/zod-validator": "0.3.0", + "@react-email/render": "^1.0.5", + "@types/pg": "^8.11.11", + "dotenv": "^16.3.1", + "drizzle-orm": "^0.39.1", + "hono": "^4.5.8", + "nodemailer": "6.9.14", + "pg": "^8.14.1", "pino": "9.4.0", "pino-pretty": "11.2.2", - "@hono/zod-validator": "0.3.0", - "zod": "^3.23.4", + "postgres": "3.4.4", "react": "18.2.0", "react-dom": "18.2.0", - "@dokploy/server": "workspace:*", - "@hono/node-server": "^1.12.1", - "hono": "^4.5.8", - "dotenv": "^16.3.1", - "stripe": "17.2.0" + "stripe": "17.2.0", + "zod": "^3.23.4" }, "devDependencies": { - "typescript": "^5.4.2", + "@types/node": "^20.11.17", + "@types/nodemailer": "^6.4.16", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", - "@types/node": "^20.11.17", - "tsx": "^4.7.1" + "drizzle-kit": "^0.30.4", + "tsx": "^4.7.1", + "typescript": "^5.4.2" }, "packageManager": "pnpm@9.5.0" } diff --git a/apps/licenses/src/db.ts b/apps/licenses/src/db.ts new file mode 100644 index 00000000..7fd37205 --- /dev/null +++ b/apps/licenses/src/db.ts @@ -0,0 +1,9 @@ +import { drizzle } from "drizzle-orm/node-postgres"; +import { Pool } from "pg"; +import * as schema from "./schema"; + +const pool = new Pool({ + connectionString: process.env.DATABASE_URL, +}); + +export const db = drizzle(pool, { schema }); diff --git a/apps/licenses/src/index.ts b/apps/licenses/src/index.ts index 90264c11..df15d962 100644 --- a/apps/licenses/src/index.ts +++ b/apps/licenses/src/index.ts @@ -1,39 +1,276 @@ import { serve } from "@hono/node-server"; import { Hono } from "hono"; -import "dotenv/config"; +import { cors } from "hono/cors"; +import { z } from "zod"; import { zValidator } from "@hono/zod-validator"; -import { logger } from "./logger.js"; -import { deployJobSchema } from "./schema.js"; +import { logger } from "./logger"; import Stripe from "stripe"; -const app = new Hono(); +import { render } from "@react-email/render"; +import { createTransport } from "nodemailer"; +import { LicenseEmail } from "../templates/emails/license-email"; +import { ResendLicenseEmail } from "../templates/emails/resend-license-email"; +import { + createLicense, + validateLicense, + activateLicense, +} from "./utils/license"; +import { db } from "./db"; +import { eq } from "drizzle-orm"; +import { licenses } from "./schema"; +import "dotenv/config"; -app.post("/deploy", zValidator("json", deployJobSchema), (c) => { - const data = c.req.valid("json"); - return c.json( - { - message: "Deployment Added", - }, - 200, - ); +const app = new Hono(); +app.use("/*", cors()); + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { + apiVersion: "2024-09-30.acacia", }); -// Stripe webhook +const transporter = createTransport({ + host: process.env.SMTP_HOST, + port: Number(process.env.SMTP_PORT), + secure: true, + auth: { + user: process.env.SMTP_USER, + pass: process.env.SMTP_PASS, + }, +}); + +const validateSchema = z.object({ + licenseKey: z.string(), + serverIp: z.string(), +}); + +const resendSchema = z.object({ + licenseKey: z.string(), +}); + +// Endpoint para validar una licencia +app.post("/validate", zValidator("json", validateSchema), async (c) => { + const { licenseKey, serverIp } = c.req.valid("json"); + + try { + const result = await validateLicense(licenseKey, serverIp); + return c.json(result); + } catch (error) { + logger.error("Error validating license:", error); + return c.json({ isValid: false, error: "Error validating license" }, 500); + } +}); + +// Endpoint para activar una licencia +app.post("/activate", zValidator("json", validateSchema), async (c) => { + const { licenseKey, serverIp } = c.req.valid("json"); + + try { + const license = await activateLicense(licenseKey, serverIp); + return c.json({ success: true, license }); + } catch (error) { + logger.error("Error activating license:", error); + if (error instanceof Error) { + return c.json({ success: false, error: error.message }, 400); + } + return c.json({ success: false, error: "Unknown error occurred" }, 400); + } +}); + +// Endpoint para reenviar una licencia por email +app.post("/resend-license", zValidator("json", resendSchema), async (c) => { + const { licenseKey } = c.req.valid("json"); + + try { + const license = await db.query.licenses.findFirst({ + where: eq(licenses.licenseKey, licenseKey), + }); + + if (!license) { + return c.json({ success: false, error: "License not found" }, 404); + } + + // Generar el email + const emailHtml = await render( + ResendLicenseEmail({ + customerName: license.customerId, + licenseKey: license.licenseKey, + productName: `Dokploy Self Hosted ${license.type}`, + expirationDate: new Date(license.expiresAt), + requestDate: new Date(), + }), + ); + + // Enviar el email + await transporter.sendMail({ + from: process.env.SMTP_FROM, + to: license.email, + subject: "Your Dokploy License Key", + html: emailHtml, + }); + + return c.json({ success: true }); + } catch (error) { + logger.error("Error resending license:", error); + return c.json({ success: false, error: "Error resending license" }, 500); + } +}); + +// Webhook de Stripe app.post("/stripe/webhook", async (c) => { + const sig = c.req.header("stripe-signature"); const body = await c.req.json(); - const event = stripe.webhooks.constructEvent( - body, - c.req.header("stripe-signature"), - process.env.STRIPE_WEBHOOK_SECRET, - ); + let event: Stripe.Event; - return c.json({ status: "ok" }); + try { + event = stripe.webhooks.constructEvent( + JSON.stringify(body), + sig!, + process.env.STRIPE_WEBHOOK_SECRET!, + ); + } catch (err) { + logger.error("Webhook signature verification failed:", err); + return c.json({ error: "Webhook signature verification failed" }, 400); + } + + try { + switch (event.type) { + case "checkout.session.completed": { + const session = event.data.object as Stripe.Checkout.Session; + + // Obtener el customer + const customerResponse = await stripe.customers.retrieve( + session.customer as string, + ); + + if (customerResponse.deleted) { + throw new Error("Customer was deleted"); + } + + // Obtener el precio y determinar el tipo de licencia y facturación + const lineItems = await stripe.checkout.sessions.listLineItems( + session.id, + ); + const priceId = lineItems.data[0].price?.id; + + const { type, billingType } = getLicenseTypeFromPriceId(priceId!); + + // Crear la licencia + const license = await createLicense({ + customerId: customerResponse.id, + productId: session.id, + type, + billingType, + email: session.customer_details?.email!, + }); + + // Enviar el email con la licencia + const features = getLicenseFeatures(type); + const emailHtml = await render( + LicenseEmail({ + customerName: customerResponse.name || "Customer", + licenseKey: license.licenseKey, + productName: `Dokploy Self Hosted ${type}`, + expirationDate: new Date(license.expiresAt), + features: features, + }), + ); + + await transporter.sendMail({ + from: process.env.SMTP_FROM, + to: license.email, + subject: "Your Dokploy License Key", + html: emailHtml, + }); + + break; + } + // Puedes agregar más casos según necesites + } + + return c.json({ received: true }); + } catch (error) { + logger.error("Error processing webhook:", error); + if (error instanceof Error) { + return c.json({ error: error.message }, 500); + } + return c.json({ error: "Unknown error occurred" }, 500); + } }); -app.get("/health", async (c) => { - return c.json({ status: "ok" }); -}); +// Función auxiliar para obtener las características según el tipo de licencia +function getLicenseFeatures(type: string): string[] { + const baseFeatures = [ + "Unlimited deployments", + "Basic monitoring", + "Email support", + ]; -const port = Number.parseInt(process.env.PORT || "3000"); -logger.info("Starting Deployments Server ✅", port); -serve({ fetch: app.fetch, port }); + const premiumFeatures = [ + ...baseFeatures, + "Priority support", + "Advanced monitoring", + "Custom domains", + "Team collaboration", + ]; + + const businessFeatures = [ + ...premiumFeatures, + "24/7 support", + "Custom integrations", + "SLA guarantees", + "Dedicated account manager", + ]; + + switch (type) { + case "basic": + return baseFeatures; + case "premium": + return premiumFeatures; + case "business": + return businessFeatures; + default: + return baseFeatures; + } +} + +// Función auxiliar para determinar el tipo de licencia según el price ID +function getLicenseTypeFromPriceId(priceId: string): { + type: "basic" | "premium" | "business"; + billingType: "monthly" | "annual"; +} { + const priceMap = { + [process.env.SELF_HOSTED_BASIC_PRICE_MONTHLY_ID!]: { + type: "basic", + billingType: "monthly", + }, + [process.env.SELF_HOSTED_BASIC_PRICE_ANNUAL_ID!]: { + type: "basic", + billingType: "annual", + }, + [process.env.SELF_HOSTED_PREMIUM_PRICE_MONTHLY_ID!]: { + type: "premium", + billingType: "monthly", + }, + [process.env.SELF_HOSTED_PREMIUM_PRICE_ANNUAL_ID!]: { + type: "premium", + billingType: "annual", + }, + [process.env.SELF_HOSTED_BUSINESS_PRICE_MONTHLY_ID!]: { + type: "business", + billingType: "monthly", + }, + [process.env.SELF_HOSTED_BUSINESS_PRICE_ANNUAL_ID!]: { + type: "business", + billingType: "annual", + }, + } as const; + + return priceMap[priceId] || { type: "basic", billingType: "monthly" }; +} + +const port = process.env.PORT || 4000; +console.log(`Server is running on port ${port}`); + +serve({ + fetch: app.fetch, + port: Number(port), +}); diff --git a/apps/licenses/src/migrate.ts b/apps/licenses/src/migrate.ts new file mode 100644 index 00000000..1b7752d3 --- /dev/null +++ b/apps/licenses/src/migrate.ts @@ -0,0 +1,22 @@ +import { drizzle } from "drizzle-orm/postgres-js"; +import { migrate } from "drizzle-orm/postgres-js/migrator"; +import postgres from "postgres"; +import "dotenv/config"; +import * as schema from "./schema"; + +const connectionString = process.env.DATABASE_URL!; +const sql = postgres(connectionString, { max: 1 }); +const db = drizzle(sql, { schema }); + +await migrate(db, { migrationsFolder: "drizzle" }) + .then(() => { + console.log("Migration complete"); + sql.end(); + }) + .catch((error) => { + console.error("Migration failed", error); + process.exit(1); + }) + .finally(() => { + sql.end(); + }); diff --git a/apps/licenses/src/schema.ts b/apps/licenses/src/schema.ts index 609289bf..fae66d66 100644 --- a/apps/licenses/src/schema.ts +++ b/apps/licenses/src/schema.ts @@ -1,34 +1,37 @@ -import { z } from "zod"; +import { sql } from "drizzle-orm"; +import { pgEnum, pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core"; -export const deployJobSchema = z.discriminatedUnion("applicationType", [ - z.object({ - applicationId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), - server: z.boolean().optional(), - type: z.enum(["deploy", "redeploy"]), - applicationType: z.literal("application"), - serverId: z.string().min(1), - }), - z.object({ - composeId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), - server: z.boolean().optional(), - type: z.enum(["deploy", "redeploy"]), - applicationType: z.literal("compose"), - serverId: z.string().min(1), - }), - z.object({ - applicationId: z.string(), - previewDeploymentId: z.string(), - titleLog: z.string(), - descriptionLog: z.string(), - server: z.boolean().optional(), - type: z.enum(["deploy"]), - applicationType: z.literal("application-preview"), - serverId: z.string().min(1), - }), +export const licenseStatusEnum = pgEnum("license_status", [ + "active", + "expired", + "cancelled", ]); -export type DeployJob = z.infer; +export const licenseTypeEnum = pgEnum("license_type", [ + "basic", + "premium", + "business", +]); + +export const billingTypeEnum = pgEnum("billing_type", ["monthly", "annual"]); + +export const licenses = pgTable("licenses", { + id: uuid("id").defaultRandom().primaryKey(), + customerId: text("customer_id").notNull(), + productId: text("product_id").notNull(), + licenseKey: text("license_key").notNull().unique(), + status: licenseStatusEnum("status").notNull().default("active"), + type: licenseTypeEnum("type").notNull(), + billingType: billingTypeEnum("billing_type").notNull(), + serverIp: text("server_ip"), + activatedAt: timestamp("activated_at"), + lastVerifiedAt: timestamp("last_verified_at"), + expiresAt: timestamp("expires_at").notNull(), + createdAt: timestamp("created_at").default(sql`CURRENT_TIMESTAMP`), + updatedAt: timestamp("updated_at").default(sql`CURRENT_TIMESTAMP`), + metadata: text("metadata"), + email: text("email").notNull(), +}); + +export type License = typeof licenses.$inferSelect; +export type NewLicense = typeof licenses.$inferInsert; diff --git a/apps/licenses/src/truncate.ts b/apps/licenses/src/truncate.ts new file mode 100644 index 00000000..4fc15169 --- /dev/null +++ b/apps/licenses/src/truncate.ts @@ -0,0 +1,24 @@ +import { sql } from "drizzle-orm"; +// Credits to Louistiti from Drizzle Discord: https://discord.com/channels/1043890932593987624/1130802621750448160/1143083373535973406 +import { drizzle } from "drizzle-orm/postgres-js"; +import "dotenv/config"; +import postgres from "postgres"; + +const connectionString = process.env.DATABASE_URL!; + +const pg = postgres(connectionString, { max: 1 }); +const db = drizzle(pg); + +const clearDb = async (): Promise => { + try { + const tablesQuery = sql`DROP SCHEMA public CASCADE; CREATE SCHEMA public; DROP schema drizzle CASCADE;`; + const tables = await db.execute(tablesQuery); + console.log(tables); + await pg.end(); + } catch (error) { + console.error("Error cleaning database", error); + } finally { + } +}; + +clearDb(); diff --git a/apps/licenses/src/utils/license.ts b/apps/licenses/src/utils/license.ts new file mode 100644 index 00000000..ccd7b87b --- /dev/null +++ b/apps/licenses/src/utils/license.ts @@ -0,0 +1,119 @@ +import { randomBytes } from "node:crypto"; +import { db } from "../db"; +import { licenses } from "../schema"; +import { eq } from "drizzle-orm"; + +export const generateLicenseKey = () => { + return randomBytes(32).toString("hex"); +}; + +export const createLicense = async ({ + customerId, + productId, + type, + billingType, + email, +}: { + customerId: string; + productId: string; + type: "basic" | "premium" | "business"; + billingType: "monthly" | "annual"; + email: string; +}) => { + const licenseKey = generateLicenseKey(); + const expiresAt = new Date(); + expiresAt.setMonth( + expiresAt.getMonth() + (billingType === "annual" ? 12 : 1), + ); + + const license = await db + .insert(licenses) + .values({ + customerId, + productId, + licenseKey, + type, + billingType, + expiresAt, + email, + }) + .returning(); + + return license[0]; +}; + +export const validateLicense = async ( + licenseKey: string, + serverIp?: string, +) => { + const license = await db.query.licenses.findFirst({ + where: eq(licenses.licenseKey, licenseKey), + }); + + if (!license) { + return { isValid: false, error: "License not found" }; + } + + if (license.status !== "active") { + return { isValid: false, error: "License is not active" }; + } + + if (new Date() > license.expiresAt) { + await db + .update(licenses) + .set({ status: "expired" }) + .where(eq(licenses.id, license.id)); + return { isValid: false, error: "License has expired" }; + } + + if (license.serverIp && serverIp && license.serverIp !== serverIp) { + return { isValid: false, error: "Invalid server IP" }; + } + + // Update last verified timestamp + await db + .update(licenses) + .set({ lastVerifiedAt: new Date() }) + .where(eq(licenses.id, license.id)); + + return { isValid: true, license }; +}; + +export const activateLicense = async (licenseKey: string, serverIp: string) => { + const license = await db.query.licenses.findFirst({ + where: eq(licenses.licenseKey, licenseKey), + }); + + if (!license) { + throw new Error("License not found"); + } + + if (license.status !== "active") { + throw new Error("License is not active"); + } + + if (new Date() > license.expiresAt) { + await db + .update(licenses) + .set({ status: "expired" }) + .where(eq(licenses.id, license.id)); + throw new Error("License has expired"); + } + + if (license.serverIp && license.serverIp !== serverIp) { + throw new Error("License is already activated on a different server"); + } + + // Activate the license with the server IP + const updatedLicense = await db + .update(licenses) + .set({ + serverIp, + activatedAt: new Date(), + lastVerifiedAt: new Date(), + }) + .where(eq(licenses.id, license.id)) + .returning(); + + return updatedLicense[0]; +}; diff --git a/apps/licenses/templates/emails/license-email.tsx b/apps/licenses/templates/emails/license-email.tsx new file mode 100644 index 00000000..6a8337aa --- /dev/null +++ b/apps/licenses/templates/emails/license-email.tsx @@ -0,0 +1,303 @@ +import { + Body, + Container, + Head, + Heading, + Hr, + Html, + Img, + Link, + Preview, + Section, + Text, + Button, +} from "@react-email/components"; +import * as React from "react"; + +interface LicenseEmailProps { + customerName: string; + licenseKey: string; + productName: string; + expirationDate: Date; + features: string[]; +} + +const baseUrl = "https://dokploy.com"; + +export const LicenseEmail = ({ + customerName = "John Doe", + licenseKey = "1234567890", + productName = "Dokploy", + expirationDate = new Date(), + features = ["Feature 1", "Feature 2", "Feature 3"], +}: LicenseEmailProps): React.ReactElement => { + const formattedDate = expirationDate.toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); + + return ( + + + Your Dokploy License Key is Here! 🚀 + + +
+ Dokploy + + Welcome to the Future of Deployment + +
+ +
+ Hi {customerName}, + + Thank you for choosing {productName}! We're excited to have you on + board. Your premium license key is ready to unlock all the + powerful features: + + +
+ Your License Key + {licenseKey} +
+ +
+ + 🗓️ Next billing date: {formattedDate} + +
+ +
+ + 🎉 Your Premium Features + +
+ {features.map((feature, index) => ( + + {feature} + + ))} +
+
+ +
+ + Getting Started + +
+ + 1. Go to your Dokploy dashboard +
+ 2. Navigate to Settings → License +
+ 3. Enter your license key +
+ 4. Click "Activate License" +
+
+ +
+ +
+ +
+ + Need help? Our support team is ready to assist you. +
+ + support@dokploy.com + +
+
+
+
+ + + ); +}; + +const main = { + backgroundColor: "#f6f9fc", + fontFamily: + '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif', +}; + +const container = { + margin: "0 auto", + padding: "40px 0", + maxWidth: "600px", +}; + +const heroSection = { + backgroundColor: "#ffffff", + borderRadius: "8px", + padding: "40px 20px", + textAlign: "center" as const, + boxShadow: "0 2px 8px rgba(0,0,0,0.05)", +}; + +const heroTitle = { + color: "#1a1a1a", + fontSize: "28px", + fontWeight: "800", + lineHeight: "1.3", + margin: "20px 0 0", + padding: "0", +}; + +const mainContent = { + backgroundColor: "#ffffff", + borderRadius: "8px", + marginTop: "24px", + padding: "40px", + boxShadow: "0 2px 8px rgba(0,0,0,0.05)", +}; + +const greeting = { + fontSize: "20px", + lineHeight: "1.3", + fontWeight: "600", + color: "#1a1a1a", + margin: "0 0 20px", +}; + +const text = { + color: "#4a5568", + fontSize: "16px", + lineHeight: "1.6", + margin: "0 0 24px", +}; + +const licenseContainer = { + background: "linear-gradient(135deg, #2563eb 0%, #1e40af 100%)", + borderRadius: "12px", + padding: "24px", + margin: "32px 0", + textAlign: "center" as const, +}; + +const licenseLabel = { + color: "#ffffff", + fontSize: "14px", + textTransform: "uppercase" as const, + letterSpacing: "1px", + margin: "0 0 12px", +}; + +const licenseKeyStyle = { + fontFamily: "monospace", + fontSize: "24px", + color: "#ffffff", + margin: "0", + wordBreak: "break-all" as const, + fontWeight: "600", +}; + +const validitySection = { + textAlign: "center" as const, + margin: "24px 0", +}; + +const validityText = { + color: "#4a5568", + fontSize: "16px", +}; + +const featuresContainer = { + margin: "40px 0", +}; + +const featureGrid = { + display: "grid", + gridTemplateColumns: "1fr", + gap: "12px", +}; + +const featureItem = { + color: "#4a5568", + fontSize: "16px", + lineHeight: "1.5", + margin: "0", + display: "flex", + alignItems: "center", +}; + +const checkmark = { + color: "#2563eb", + fontWeight: "bold", + marginRight: "12px", + fontSize: "18px", +}; + +const h2 = { + color: "#1a1a1a", + fontSize: "20px", + fontWeight: "600", + margin: "0 0 20px", + padding: "0", +}; + +const activationSection = { + backgroundColor: "#f8fafc", + borderRadius: "8px", + padding: "24px", + margin: "32px 0", +}; + +const stepsContainer = { + margin: "20px 0", +}; + +const steps = { + color: "#4a5568", + fontSize: "16px", + lineHeight: "1.8", + margin: "0", +}; + +const ctaButton = { + backgroundColor: "#2563eb", + borderRadius: "6px", + color: "#ffffff", + fontSize: "16px", + fontWeight: "600", + textDecoration: "none", + textAlign: "center" as const, + display: "inline-block", + padding: "12px 24px", + margin: "20px 0 0", +}; + +const hr = { + borderColor: "#e2e8f0", + margin: "40px 0", +}; + +const supportSection = { + textAlign: "center" as const, +}; + +const supportText = { + color: "#64748b", + fontSize: "14px", + lineHeight: "1.5", + margin: "0", +}; + +const link = { + color: "#2563eb", + textDecoration: "none", + fontWeight: "500", +}; + +export default LicenseEmail; diff --git a/apps/licenses/templates/emails/resend-license-email.tsx b/apps/licenses/templates/emails/resend-license-email.tsx new file mode 100644 index 00000000..940a343e --- /dev/null +++ b/apps/licenses/templates/emails/resend-license-email.tsx @@ -0,0 +1,292 @@ +import { + Body, + Container, + Head, + Heading, + Hr, + Html, + Img, + Link, + Preview, + Section, + Text, + Button, +} from "@react-email/components"; +import * as React from "react"; + +interface ResendLicenseEmailProps { + customerName: string; + licenseKey: string; + productName: string; + expirationDate: Date; + requestDate?: Date; +} + +const baseUrl = "https://dokploy.com"; + +export const ResendLicenseEmail = ({ + customerName = "John Doe", + licenseKey = "1234567890", + productName = "Dokploy", + expirationDate = new Date(), + requestDate = new Date(), +}: ResendLicenseEmailProps): React.ReactElement => { + const formattedDate = expirationDate.toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); + + const formattedRequestDate = requestDate.toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }); + + return ( + + + Your Requested Dokploy License Key 🔑 + + +
+ Dokploy + Here's Your License Key +
+ +
+ Hi {customerName}, + + As requested on {formattedRequestDate}, here is your {productName}{" "} + license key. This is the same active license key associated with + your account: + + +
+ Your Active License Key + {licenseKey} +
+ +
+ + 🗓️ Valid until: {formattedDate} + +
+ +
+ + Quick Activation Guide + +
+ + 1. Go to your Dokploy dashboard +
+ 2. Navigate to Settings → License +
+ 3. Enter your license key above +
+ 4. Click "Activate License" +
+
+ +
+ +
+ +
+ + 🔒 For security: If you didn't request this license key, please + contact our support team immediately. + +
+ +
+ + Need help? Our support team is ready to assist you. +
+ + support@dokploy.com + +
+
+
+
+ + + ); +}; + +const main = { + backgroundColor: "#f6f9fc", + fontFamily: + '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif', +}; + +const container = { + margin: "0 auto", + padding: "40px 0", + maxWidth: "600px", +}; + +const heroSection = { + backgroundColor: "#ffffff", + borderRadius: "8px", + padding: "40px 20px", + textAlign: "center" as const, + boxShadow: "0 2px 8px rgba(0,0,0,0.05)", +}; + +const heroTitle = { + color: "#1a1a1a", + fontSize: "28px", + fontWeight: "800", + lineHeight: "1.3", + margin: "20px 0 0", + padding: "0", +}; + +const mainContent = { + backgroundColor: "#ffffff", + borderRadius: "8px", + marginTop: "24px", + padding: "40px", + boxShadow: "0 2px 8px rgba(0,0,0,0.05)", +}; + +const greeting = { + fontSize: "20px", + lineHeight: "1.3", + fontWeight: "600", + color: "#1a1a1a", + margin: "0 0 20px", +}; + +const text = { + color: "#4a5568", + fontSize: "16px", + lineHeight: "1.6", + margin: "0 0 24px", +}; + +const licenseContainer = { + background: "linear-gradient(135deg, #2563eb 0%, #1e40af 100%)", + borderRadius: "12px", + padding: "24px", + margin: "32px 0", + textAlign: "center" as const, +}; + +const licenseLabel = { + color: "#ffffff", + fontSize: "14px", + textTransform: "uppercase" as const, + letterSpacing: "1px", + margin: "0 0 12px", +}; + +const licenseKeyStyle = { + fontFamily: "monospace", + fontSize: "24px", + color: "#ffffff", + margin: "0", + wordBreak: "break-all" as const, + fontWeight: "600", +}; + +const validitySection = { + textAlign: "center" as const, + margin: "24px 0", +}; + +const validityText = { + color: "#4a5568", + fontSize: "16px", +}; + +const h2 = { + color: "#1a1a1a", + fontSize: "20px", + fontWeight: "600", + margin: "0 0 20px", + padding: "0", +}; + +const activationSection = { + backgroundColor: "#f8fafc", + borderRadius: "8px", + padding: "24px", + margin: "32px 0", +}; + +const stepsContainer = { + margin: "20px 0", +}; + +const steps = { + color: "#4a5568", + fontSize: "16px", + lineHeight: "1.8", + margin: "0", +}; + +const ctaButton = { + backgroundColor: "#2563eb", + borderRadius: "6px", + color: "#ffffff", + fontSize: "16px", + fontWeight: "600", + textDecoration: "none", + textAlign: "center" as const, + display: "inline-block", + padding: "12px 24px", + margin: "20px 0 0", +}; + +const hr = { + borderColor: "#e2e8f0", + margin: "40px 0", +}; + +const securitySection = { + backgroundColor: "#fff5f5", + borderRadius: "8px", + padding: "16px", + margin: "0 0 32px 0", +}; + +const securityText = { + color: "#e53e3e", + fontSize: "14px", + lineHeight: "1.5", + margin: "0", + textAlign: "center" as const, +}; + +const supportSection = { + textAlign: "center" as const, +}; + +const supportText = { + color: "#64748b", + fontSize: "14px", + lineHeight: "1.5", + margin: "0", +}; + +const link = { + color: "#2563eb", + textDecoration: "none", + fontWeight: "500", +}; + +export default ResendLicenseEmail; diff --git a/apps/licenses/templates/emails/static/vercel-user.png b/apps/licenses/templates/emails/static/vercel-user.png new file mode 100644 index 0000000000000000000000000000000000000000..81beac6945a486f6c03edaad5e035a1c6a67026b GIT binary patch literal 55726 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

b_4NZ02x!e-&bvaid>@c6qBDycI@ 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

N10A(43%#Xj0Fa8KtC0cBko)!Tx5rY*_)wkZy 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 literal 0 HcmV?d00001 diff --git a/apps/licenses/templates/package-lock.json b/apps/licenses/templates/package-lock.json new file mode 100644 index 00000000..d19a42b0 --- /dev/null +++ b/apps/licenses/templates/package-lock.json @@ -0,0 +1,3495 @@ +{ + "name": "react-email-starter", + "version": "0.1.10", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-email-starter", + "version": "0.1.10", + "dependencies": { + "@react-email/components": "0.0.34", + "react": "18.3.1", + "react-dom": "18.3.1" + }, + "devDependencies": { + "@types/react": "18.2.33", + "@types/react-dom": "18.2.14", + "react-email": "3.0.7" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", + "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==", + "dev": true + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@react-email/body": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.0.11.tgz", + "integrity": "sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==", + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/button": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.19.tgz", + "integrity": "sha512-HYHrhyVGt7rdM/ls6FuuD6XE7fa7bjZTJqB2byn6/oGsfiEZaogY77OtoLL/mrQHjHjZiJadtAMSik9XLcm7+A==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/code-block": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.0.11.tgz", + "integrity": "sha512-4D43p+LIMjDzm66gTDrZch0Flkip5je91mAT7iGs6+SbPyalHgIA+lFQoQwhz/VzHHLxuD0LV6gwmU/WUQ2WEg==", + "dependencies": { + "prismjs": "1.29.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/code-inline": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@react-email/code-inline/-/code-inline-0.0.5.tgz", + "integrity": "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/column": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.13.tgz", + "integrity": "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/components": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.34.tgz", + "integrity": "sha512-9aUJJ4Yu5Cd5++2GHwdkmOHCghi0vPP/aZwMCGNNTovBTDCI3mc8YIUrDR7JfscrdkPK4s/E9AoD5lX6d/zITA==", + "dependencies": { + "@react-email/body": "0.0.11", + "@react-email/button": "0.0.19", + "@react-email/code-block": "0.0.11", + "@react-email/code-inline": "0.0.5", + "@react-email/column": "0.0.13", + "@react-email/container": "0.0.15", + "@react-email/font": "0.0.9", + "@react-email/head": "0.0.12", + "@react-email/heading": "0.0.15", + "@react-email/hr": "0.0.11", + "@react-email/html": "0.0.11", + "@react-email/img": "0.0.11", + "@react-email/link": "0.0.12", + "@react-email/markdown": "0.0.14", + "@react-email/preview": "0.0.12", + "@react-email/render": "1.0.5", + "@react-email/row": "0.0.12", + "@react-email/section": "0.0.16", + "@react-email/tailwind": "1.0.4", + "@react-email/text": "0.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/components/node_modules/@react-email/render": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.5.tgz", + "integrity": "sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ==", + "dependencies": { + "html-to-text": "9.0.5", + "prettier": "3.4.2", + "react-promise-suspense": "0.3.4" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/container": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.15.tgz", + "integrity": "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/font": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.9.tgz", + "integrity": "sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==", + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/head": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.12.tgz", + "integrity": "sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/heading": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.15.tgz", + "integrity": "sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/hr": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.11.tgz", + "integrity": "sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/html": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.11.tgz", + "integrity": "sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/img": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.11.tgz", + "integrity": "sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/link": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.12.tgz", + "integrity": "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/markdown": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@react-email/markdown/-/markdown-0.0.14.tgz", + "integrity": "sha512-5IsobCyPkb4XwnQO8uFfGcNOxnsg3311GRXhJ3uKv51P7Jxme4ycC/MITnwIZ10w2zx7HIyTiqVzTj4XbuIHbg==", + "dependencies": { + "md-to-react-email": "5.0.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/preview": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.12.tgz", + "integrity": "sha512-g/H5fa9PQPDK6WUEG7iTlC19sAktI23qyoiJtMLqQiXFCfWeQMhqjLGKeLSKkfzszqmfJCjZtpSiKtBoOdxp3Q==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/row": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.12.tgz", + "integrity": "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/section": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.16.tgz", + "integrity": "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/tailwind": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.4.tgz", + "integrity": "sha512-tJdcusncdqgvTUYZIuhNC6LYTfL9vNTSQpwWdTCQhQ1lsrNCEE4OKCSdzSV3S9F32pi0i0xQ+YPJHKIzGjdTSA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/text": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@react-email/text/-/text-0.1.0.tgz", + "integrity": "sha512-LG+gEuxpoIiOojkv40iktP8UVjkJVZ+ksEEuf7zRvrcwLcVuzYyirlWdkGr4Vu/AhsD4FDRoxDWlWvLTx+WHUg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "dependencies": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dev": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.33", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", + "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001706", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", + "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "dev": true + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz", + "integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.120", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz", + "integrity": "sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "dev": true, + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "dependencies": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "optional": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/marked": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/marked/-/marked-7.0.4.tgz", + "integrity": "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/md-to-react-email": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/md-to-react-email/-/md-to-react-email-5.0.5.tgz", + "integrity": "sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==", + "dependencies": { + "marked": "7.0.4" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "dev": true, + "dependencies": { + "@next/env": "15.1.2", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "dependencies": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-email": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-3.0.7.tgz", + "integrity": "sha512-lX9dFCPtTG+79aP9uTdx763byshptPYbOi0KXwxn6nPJoDP/Ty/G1W5fx1lbrmec+pk38MTDZPrzJ/UYIxgP/Q==", + "dev": true, + "dependencies": { + "@babel/core": "7.24.5", + "@babel/parser": "7.24.5", + "chalk": "4.1.2", + "chokidar": "4.0.3", + "commander": "11.1.0", + "debounce": "2.0.0", + "esbuild": "0.23.0", + "glob": "10.3.4", + "log-symbols": "4.1.0", + "mime-types": "2.1.35", + "next": "15.1.2", + "normalize-path": "3.0.0", + "ora": "5.4.1", + "socket.io": "4.8.1" + }, + "bin": { + "email": "dist/cli/index.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/react-promise-suspense": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", + "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", + "dependencies": { + "fast-deep-equal": "^2.0.1" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "dependencies": { + "parseley": "^0.12.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "dev": true, + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } +} diff --git a/apps/licenses/templates/package.json b/apps/licenses/templates/package.json new file mode 100644 index 00000000..e8968afa --- /dev/null +++ b/apps/licenses/templates/package.json @@ -0,0 +1,20 @@ +{ + "name": "react-email-starter", + "version": "0.1.10", + "private": true, + "scripts": { + "build": "email build", + "dev": "email dev", + "export": "email export" + }, + "dependencies": { + "@react-email/components": "0.0.34", + "react-dom": "18.3.1", + "react": "18.3.1" + }, + "devDependencies": { + "@types/react": "18.2.33", + "@types/react-dom": "18.2.14", + "react-email": "3.0.7" + } +} diff --git a/apps/licenses/templates/readme.md b/apps/licenses/templates/readme.md new file mode 100644 index 00000000..fc875bfa --- /dev/null +++ b/apps/licenses/templates/readme.md @@ -0,0 +1,27 @@ +# React Email Starter + +A live preview right in your browser so you don't need to keep sending real emails during development. + +## Getting Started + +First, install the dependencies: + +```sh +npm install +# or +yarn +``` + +Then, run the development server: + +```sh +npm run dev +# or +yarn dev +``` + +Open [localhost:3000](http://localhost:3000) with your browser to see the result. + +## License + +MIT License diff --git a/apps/licenses/tsconfig.json b/apps/licenses/tsconfig.json index e47c6267..61c0c966 100644 --- a/apps/licenses/tsconfig.json +++ b/apps/licenses/tsconfig.json @@ -2,7 +2,9 @@ "compilerOptions": { "target": "ESNext", "module": "ESNext", - "moduleResolution": "Node", + "moduleResolution": "Bundler", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "strict": true, "skipLibCheck": true, "outDir": "dist", @@ -14,5 +16,6 @@ "@dokploy/server/*": ["../../packages/server/src/*"] } }, + "include": ["src/**/*"], "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6bb56732..dc721ebb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -303,10 +303,10 @@ importers: version: 16.4.5 drizzle-orm: specifier: ^0.39.1 - version: 0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + version: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) + version: 0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) fancy-ansi: specifier: ^0.1.3 version: 0.1.3 @@ -530,27 +530,45 @@ importers: apps/licenses: dependencies: - '@dokploy/server': - specifier: workspace:* - version: link:../../packages/server '@hono/node-server': specifier: ^1.12.1 version: 1.12.1 '@hono/zod-validator': specifier: 0.3.0 version: 0.3.0(hono@4.5.8)(zod@3.24.1) + '@react-email/components': + specifier: ^0.0.21 + version: 0.0.21(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-email/render': + specifier: ^1.0.5 + version: 1.0.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/pg': + specifier: ^8.11.11 + version: 8.11.11 dotenv: specifier: ^16.3.1 version: 16.4.5 + drizzle-orm: + specifier: ^0.39.1 + version: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) hono: specifier: ^4.5.8 version: 4.5.8 + nodemailer: + specifier: 6.9.14 + version: 6.9.14 + pg: + specifier: ^8.14.1 + version: 8.14.1 pino: specifier: 9.4.0 version: 9.4.0 pino-pretty: specifier: 11.2.2 version: 11.2.2 + postgres: + specifier: 3.4.4 + version: 3.4.4 react: specifier: 18.2.0 version: 18.2.0 @@ -567,12 +585,18 @@ importers: '@types/node': specifier: ^20.11.17 version: 20.14.10 + '@types/nodemailer': + specifier: ^6.4.16 + version: 6.4.16 '@types/react': specifier: 18.3.5 version: 18.3.5 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 + drizzle-kit: + specifier: ^0.30.4 + version: 0.30.4 tsx: specifier: ^4.7.1 version: 4.16.2 @@ -599,7 +623,7 @@ importers: version: 16.4.5 drizzle-orm: specifier: ^0.39.1 - version: 0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + version: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) hono: specifier: ^4.5.8 version: 4.5.8 @@ -717,13 +741,13 @@ importers: version: 16.4.5 drizzle-dbml-generator: specifier: 0.10.0 - version: 0.10.0(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)) + version: 0.10.0(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)) drizzle-orm: specifier: ^0.39.1 - version: 0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + version: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) + version: 0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) hi-base32: specifier: ^0.5.1 version: 0.5.1 @@ -3318,6 +3342,13 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 + '@react-email/render@1.0.5': + resolution: {integrity: sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/row@0.0.8': resolution: {integrity: sha512-JsB6pxs/ZyjYpEML3nbwJRGAerjcN/Pa/QG48XUwnT/MioDWrUuyQuefw+CwCrSUZ2P1IDrv2tUD3/E3xzcoKw==} engines: {node: '>=18.0.0'} @@ -3779,6 +3810,9 @@ packages: '@types/nodemailer@6.4.16': resolution: {integrity: sha512-uz6hN6Pp0upXMcilM61CoKyjT7sskBoOWpptkjjJp8jIMlTdc3xG01U7proKkXzruMS4hS0zqtHNkNPFB20rKQ==} + '@types/pg@8.11.11': + resolution: {integrity: sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==} + '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -6187,6 +6221,9 @@ packages: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + octokit@3.1.2: resolution: {integrity: sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==} engines: {node: '>= 18'} @@ -6335,6 +6372,48 @@ packages: peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + + pg-connection-string@2.7.0: + resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + pg-pool@3.8.0: + resolution: {integrity: sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.8.0: + resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + + pg@8.14.1: + resolution: {integrity: sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -6429,6 +6508,41 @@ packages: resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + postgres@3.4.4: resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==} engines: {node: '>=12'} @@ -6438,6 +6552,11 @@ packages: engines: {node: '>=10'} hasBin: true + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9953,6 +10072,14 @@ snapshots: react-dom: 18.2.0(react@18.2.0) react-promise-suspense: 0.3.4 + '@react-email/render@1.0.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + html-to-text: 9.0.5 + prettier: 3.4.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-promise-suspense: 0.3.4 + '@react-email/row@0.0.8(react@18.2.0)': dependencies: react: 18.2.0 @@ -10627,6 +10754,12 @@ snapshots: dependencies: '@types/node': 20.14.10 + '@types/pg@8.11.11': + dependencies: + '@types/node': 20.14.10 + pg-protocol: 1.8.0 + pg-types: 4.0.2 + '@types/prop-types@15.7.12': {} '@types/qrcode@1.5.5': @@ -11591,9 +11724,9 @@ snapshots: drange@1.1.1: {} - drizzle-dbml-generator@0.10.0(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)): + drizzle-dbml-generator@0.10.0(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)): dependencies: - drizzle-orm: 0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + drizzle-orm: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) drizzle-kit@0.30.4: dependencies: @@ -11604,18 +11737,20 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7): + drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7): optionalDependencies: '@opentelemetry/api': 1.9.0 + '@types/pg': 8.11.11 '@types/react': 18.3.5 kysely: 0.27.6 + pg: 8.14.1 postgres: 3.4.4 react: 18.2.0 sqlite3: 5.1.7 - drizzle-zod@0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8): + drizzle-zod@0.5.1(drizzle-orm@0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8): dependencies: - drizzle-orm: 0.39.1(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(kysely@0.27.6)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + drizzle-orm: 0.39.1(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.5)(kysely@0.27.6)(pg@8.14.1)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) zod: 3.23.8 eastasianwidth@0.2.0: {} @@ -13284,6 +13419,8 @@ snapshots: object-inspect@1.13.2: {} + obuf@1.1.2: {} + octokit@3.1.2: dependencies: '@octokit/app': 14.1.0 @@ -13435,6 +13572,53 @@ snapshots: peberminta@0.9.0: {} + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.7.0: {} + + pg-int8@1.0.1: {} + + pg-numeric@1.0.2: {} + + pg-pool@3.8.0(pg@8.14.1): + dependencies: + pg: 8.14.1 + + pg-protocol@1.8.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.4 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + + pg@8.14.1: + dependencies: + pg-connection-string: 2.7.0 + pg-pool: 3.8.0(pg@8.14.1) + pg-protocol: 1.8.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -13544,6 +13728,28 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.0: {} + + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + + postgres-date@1.0.7: {} + + postgres-date@2.1.0: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + postgres@3.4.4: {} prebuild-install@7.1.2: @@ -13562,6 +13768,8 @@ snapshots: tunnel-agent: 0.6.0 optional: true + prettier@3.4.2: {} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3