From 23c000fa7f30e27620f66d7b40870ecc091ada15 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Tue, 17 Feb 2026 11:46:57 -0600 Subject: [PATCH] recator placement of code --- .dockerignore | 4 +- .gitignore | 1 + backend/app.ts | 8 +- backend/{src => }/auth/auth.routes.ts | 0 backend/{src => }/auth/login.route.ts | 0 backend/{src => }/auth/register.route.ts | 0 backend/{src => }/configs/prodSql.config.ts | 0 backend/{src => }/configs/scaler.config.ts | 0 .../{src => }/datamart/datamart.controller.ts | 0 backend/{src => }/datamart/datamart.routes.ts | 0 .../{src => }/datamart/datamartAdd.route.ts | 0 .../datamart/datamartSync.controller.ts | 0 .../datamart/datamartUpdate.route.ts | 0 .../{src => }/datamart/getDatamart.route.ts | 0 backend/{src => }/db/db.controller.ts | 0 backend/{src => }/db/dbBackup.contoller.ts | 0 backend/{src => }/db/schema/auth.schema.ts | 0 .../{src => }/db/schema/datamart.schema.ts | 0 backend/{src => }/db/schema/logs.schema.ts | 0 backend/db/schema/opendock.schema.ts | 25 + backend/db/schema/settings.schema.ts | 43 + backend/{src => }/logger/db.transport.ts | 1 - backend/logger/logger.controller.ts | 78 + backend/opendock/connection.ts | 23 + .../opendock/utils/releaseMonitor.utils.ts | 499 +++ backend/{src => }/prodSql/prodSql.routes.ts | 0 .../prodSql/prodSqlConnection.controller.ts | 5 +- .../prodSql/prodSqlQuery.controller.ts | 0 backend/prodSql/prodSqlQuerySelector.utils.ts | 29 + .../{src => }/prodSql/prodSqlRestart.route.ts | 0 .../{src => }/prodSql/prodSqlStart.route.ts | 0 .../{src => }/prodSql/prodSqlStop.route.ts | 0 .../queries/prodSqlStats.sql} | 4 +- backend/{src => }/routeHandler.routes.ts | 0 backend/{src => }/scaler/datamartAdd.spec.ts | 0 .../{src => }/scaler/datamartUpdate.spec.ts | 0 backend/{src => }/scaler/getDatamart.spec.ts | 0 backend/{src => }/scaler/login.spec.ts | 0 .../{src => }/scaler/prodSqlRestart.spec.ts | 0 backend/{src => }/scaler/prodSqlStart.spec.ts | 0 backend/{src => }/scaler/prodSqlStop.spec.ts | 0 backend/{src => }/scaler/register.spec.ts | 0 backend/{src => }/scaler/stats.spec.ts | 0 backend/server.ts | 16 +- backend/{src => }/socket.io/serverSetup.ts | 0 backend/src/logger/logger.controller.ts | 49 - backend/{src => }/system/stats.route.ts | 10 +- .../uploads/98e2aea9baadfbc009187d3bec17e26c | 38 - .../uploads/b14c926b9e320ae8f818faf5fc3db5ad | Bin 23538 -> 0 bytes .../uploads/c1a1c2e6b89a269eb33d3498ff71b996 | 38 - backend/{src => }/utils/auth.utils.ts | 0 backend/{src => }/utils/checkHost.utils.ts | 0 backend/{src => }/utils/cors.utils.ts | 0 backend/{src => }/utils/croner.utils.ts | 0 .../utils/mailViews/forgotPassword.hbs | 0 backend/{src => }/utils/mailViews/styles.hbs | 0 .../{src => }/utils/mailViews/testEmail.hbs | 0 backend/{src => }/utils/returnHelper.utils.ts | 0 backend/{src => }/utils/sendEmail.utils.ts | 4 +- backend/{src => }/utils/trycatch.utils.ts | 0 backend/{src => }/utils/utils.routes.ts | 0 drizzle.config.ts | 2 +- migrations/0007_secret_prodigy.sql | 15 + migrations/0008_white_lord_hawal.sql | 8 + migrations/0009_hesitant_nextwave.sql | 1 + migrations/meta/0007_snapshot.json | 931 +++++ migrations/meta/0008_snapshot.json | 985 +++++ migrations/meta/0009_snapshot.json | 992 +++++ migrations/meta/_journal.json | 21 + package-lock.json | 3207 ++++------------- package.json | 70 +- scripts/check-route-specs.mjs | 2 +- scripts/zipApp.ps1 | 1 + scripts/zipApp.sh | 20 + tests/examplequery.test.ts | 46 +- tsconfig.json | 8 +- tsconfig.json.bak | 41 + 77 files changed, 4528 insertions(+), 2697 deletions(-) rename backend/{src => }/auth/auth.routes.ts (100%) rename backend/{src => }/auth/login.route.ts (100%) rename backend/{src => }/auth/register.route.ts (100%) rename backend/{src => }/configs/prodSql.config.ts (100%) rename backend/{src => }/configs/scaler.config.ts (100%) rename backend/{src => }/datamart/datamart.controller.ts (100%) rename backend/{src => }/datamart/datamart.routes.ts (100%) rename backend/{src => }/datamart/datamartAdd.route.ts (100%) rename backend/{src => }/datamart/datamartSync.controller.ts (100%) rename backend/{src => }/datamart/datamartUpdate.route.ts (100%) rename backend/{src => }/datamart/getDatamart.route.ts (100%) rename backend/{src => }/db/db.controller.ts (100%) rename backend/{src => }/db/dbBackup.contoller.ts (100%) rename backend/{src => }/db/schema/auth.schema.ts (100%) rename backend/{src => }/db/schema/datamart.schema.ts (100%) rename backend/{src => }/db/schema/logs.schema.ts (100%) create mode 100644 backend/db/schema/opendock.schema.ts create mode 100644 backend/db/schema/settings.schema.ts rename backend/{src => }/logger/db.transport.ts (99%) create mode 100644 backend/logger/logger.controller.ts create mode 100644 backend/opendock/connection.ts create mode 100644 backend/opendock/utils/releaseMonitor.utils.ts rename backend/{src => }/prodSql/prodSql.routes.ts (100%) rename backend/{src => }/prodSql/prodSqlConnection.controller.ts (97%) rename backend/{src => }/prodSql/prodSqlQuery.controller.ts (100%) create mode 100644 backend/prodSql/prodSqlQuerySelector.utils.ts rename backend/{src => }/prodSql/prodSqlRestart.route.ts (100%) rename backend/{src => }/prodSql/prodSqlStart.route.ts (100%) rename backend/{src => }/prodSql/prodSqlStop.route.ts (100%) rename backend/{src/prodSql/querys/prodSqlStats.ts => prodSql/queries/prodSqlStats.sql} (92%) rename backend/{src => }/routeHandler.routes.ts (100%) rename backend/{src => }/scaler/datamartAdd.spec.ts (100%) rename backend/{src => }/scaler/datamartUpdate.spec.ts (100%) rename backend/{src => }/scaler/getDatamart.spec.ts (100%) rename backend/{src => }/scaler/login.spec.ts (100%) rename backend/{src => }/scaler/prodSqlRestart.spec.ts (100%) rename backend/{src => }/scaler/prodSqlStart.spec.ts (100%) rename backend/{src => }/scaler/prodSqlStop.spec.ts (100%) rename backend/{src => }/scaler/register.spec.ts (100%) rename backend/{src => }/scaler/stats.spec.ts (100%) rename backend/{src => }/socket.io/serverSetup.ts (100%) delete mode 100644 backend/src/logger/logger.controller.ts rename backend/{src => }/system/stats.route.ts (60%) delete mode 100644 backend/uploads/98e2aea9baadfbc009187d3bec17e26c delete mode 100644 backend/uploads/b14c926b9e320ae8f818faf5fc3db5ad delete mode 100644 backend/uploads/c1a1c2e6b89a269eb33d3498ff71b996 rename backend/{src => }/utils/auth.utils.ts (100%) rename backend/{src => }/utils/checkHost.utils.ts (100%) rename backend/{src => }/utils/cors.utils.ts (100%) rename backend/{src => }/utils/croner.utils.ts (100%) rename backend/{src => }/utils/mailViews/forgotPassword.hbs (100%) rename backend/{src => }/utils/mailViews/styles.hbs (100%) rename backend/{src => }/utils/mailViews/testEmail.hbs (100%) rename backend/{src => }/utils/returnHelper.utils.ts (100%) rename backend/{src => }/utils/sendEmail.utils.ts (97%) rename backend/{src => }/utils/trycatch.utils.ts (100%) rename backend/{src => }/utils/utils.routes.ts (100%) create mode 100644 migrations/0007_secret_prodigy.sql create mode 100644 migrations/0008_white_lord_hawal.sql create mode 100644 migrations/0009_hesitant_nextwave.sql create mode 100644 migrations/meta/0007_snapshot.json create mode 100644 migrations/meta/0008_snapshot.json create mode 100644 migrations/meta/0009_snapshot.json create mode 100644 scripts/zipApp.ps1 create mode 100644 scripts/zipApp.sh create mode 100644 tsconfig.json.bak diff --git a/.dockerignore b/.dockerignore index d11b3a6..8865e38 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,6 @@ node_modules dist Dockerfile docker-compose.yml -npm-debug.log \ No newline at end of file +npm-debug.log +builds +testFiles \ No newline at end of file diff --git a/.gitignore b/.gitignore index 88b5148..b4b1be0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # ---> Node testFiles +builds # Logs logs *.log diff --git a/backend/app.ts b/backend/app.ts index e6bdccd..fccf02a 100644 --- a/backend/app.ts +++ b/backend/app.ts @@ -1,10 +1,10 @@ import { toNodeHandler } from "better-auth/node"; import express from "express"; import morgan from "morgan"; -import { createLogger } from "./src/logger/logger.controller.js"; -import { setupRoutes } from "./src/routeHandler.routes.js"; -import { auth } from "./src/utils/auth.utils.js"; -import { lstCors } from "./src/utils/cors.utils.js"; +import { createLogger } from "./logger/logger.controller.js"; +import { setupRoutes } from "./routeHandler.routes.js"; +import { auth } from "./utils/auth.utils.js"; +import { lstCors } from "./utils/cors.utils.js"; const createApp = async () => { const log = createLogger({ module: "system", subModule: "main start" }); diff --git a/backend/src/auth/auth.routes.ts b/backend/auth/auth.routes.ts similarity index 100% rename from backend/src/auth/auth.routes.ts rename to backend/auth/auth.routes.ts diff --git a/backend/src/auth/login.route.ts b/backend/auth/login.route.ts similarity index 100% rename from backend/src/auth/login.route.ts rename to backend/auth/login.route.ts diff --git a/backend/src/auth/register.route.ts b/backend/auth/register.route.ts similarity index 100% rename from backend/src/auth/register.route.ts rename to backend/auth/register.route.ts diff --git a/backend/src/configs/prodSql.config.ts b/backend/configs/prodSql.config.ts similarity index 100% rename from backend/src/configs/prodSql.config.ts rename to backend/configs/prodSql.config.ts diff --git a/backend/src/configs/scaler.config.ts b/backend/configs/scaler.config.ts similarity index 100% rename from backend/src/configs/scaler.config.ts rename to backend/configs/scaler.config.ts diff --git a/backend/src/datamart/datamart.controller.ts b/backend/datamart/datamart.controller.ts similarity index 100% rename from backend/src/datamart/datamart.controller.ts rename to backend/datamart/datamart.controller.ts diff --git a/backend/src/datamart/datamart.routes.ts b/backend/datamart/datamart.routes.ts similarity index 100% rename from backend/src/datamart/datamart.routes.ts rename to backend/datamart/datamart.routes.ts diff --git a/backend/src/datamart/datamartAdd.route.ts b/backend/datamart/datamartAdd.route.ts similarity index 100% rename from backend/src/datamart/datamartAdd.route.ts rename to backend/datamart/datamartAdd.route.ts diff --git a/backend/src/datamart/datamartSync.controller.ts b/backend/datamart/datamartSync.controller.ts similarity index 100% rename from backend/src/datamart/datamartSync.controller.ts rename to backend/datamart/datamartSync.controller.ts diff --git a/backend/src/datamart/datamartUpdate.route.ts b/backend/datamart/datamartUpdate.route.ts similarity index 100% rename from backend/src/datamart/datamartUpdate.route.ts rename to backend/datamart/datamartUpdate.route.ts diff --git a/backend/src/datamart/getDatamart.route.ts b/backend/datamart/getDatamart.route.ts similarity index 100% rename from backend/src/datamart/getDatamart.route.ts rename to backend/datamart/getDatamart.route.ts diff --git a/backend/src/db/db.controller.ts b/backend/db/db.controller.ts similarity index 100% rename from backend/src/db/db.controller.ts rename to backend/db/db.controller.ts diff --git a/backend/src/db/dbBackup.contoller.ts b/backend/db/dbBackup.contoller.ts similarity index 100% rename from backend/src/db/dbBackup.contoller.ts rename to backend/db/dbBackup.contoller.ts diff --git a/backend/src/db/schema/auth.schema.ts b/backend/db/schema/auth.schema.ts similarity index 100% rename from backend/src/db/schema/auth.schema.ts rename to backend/db/schema/auth.schema.ts diff --git a/backend/src/db/schema/datamart.schema.ts b/backend/db/schema/datamart.schema.ts similarity index 100% rename from backend/src/db/schema/datamart.schema.ts rename to backend/db/schema/datamart.schema.ts diff --git a/backend/src/db/schema/logs.schema.ts b/backend/db/schema/logs.schema.ts similarity index 100% rename from backend/src/db/schema/logs.schema.ts rename to backend/db/schema/logs.schema.ts diff --git a/backend/db/schema/opendock.schema.ts b/backend/db/schema/opendock.schema.ts new file mode 100644 index 0000000..0cbe1c7 --- /dev/null +++ b/backend/db/schema/opendock.schema.ts @@ -0,0 +1,25 @@ +import { + integer, + jsonb, + pgTable, + text, + timestamp, + uuid, +} from "drizzle-orm/pg-core"; +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; +import type { z } from "zod"; + +export const opendockApt = pgTable("opendock.apt", { + id: uuid("id").defaultRandom().primaryKey(), + release: integer("release").unique(), + openDockAptId: text("open_dock_apt_id").notNull(), + appointment: jsonb("appointment").default([]), + upd_date: timestamp("upd_date").defaultNow(), + createdAt: timestamp("created_at").defaultNow(), +}); + +export const opendockAptSchema = createSelectSchema(opendockApt); +export const newOpendockAptSchema = createInsertSchema(opendockApt); + +export type OpendockApt = z.infer; +export type NewOpendockApt = z.infer; diff --git a/backend/db/schema/settings.schema.ts b/backend/db/schema/settings.schema.ts new file mode 100644 index 0000000..a942b42 --- /dev/null +++ b/backend/db/schema/settings.schema.ts @@ -0,0 +1,43 @@ +import { + boolean, + jsonb, + pgTable, + text, + timestamp, + uniqueIndex, + uuid, +} from "drizzle-orm/pg-core"; +import { createInsertSchema, createSelectSchema } from "drizzle-zod"; + +import { z } from "zod"; + +export const settings = pgTable( + "settings", + { + id: uuid("settings_id").defaultRandom().primaryKey(), + name: text("name").notNull(), + value: text("value").notNull(), // this is used in junction with active, only needed if the setting isn't a bool + description: text("description"), + moduleName: text("moduleName"), // what part of lst dose it belong to this is used to split the settings out later + active: boolean("active").default(true), + roles: jsonb("roles").notNull().default(["systemAdmin"]), // role or roles to see this goes along with the moduleName, need to have a x role in module to see this setting. + add_User: text("add_User").default("LST_System").notNull(), + add_Date: timestamp("add_Date").defaultNow(), + upd_user: text("upd_User").default("LST_System").notNull(), + upd_date: timestamp("upd_date").defaultNow(), + }, + (table) => [ + // uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`), + uniqueIndex("name").on(table.name), + ], +); + +export const settingSchema = createSelectSchema(settings); +export const newSettingSchema = createInsertSchema(settings, { + name: z.string().min(3, { + message: "The name of the setting must be longer than 3 letters", + }), +}); + +export type Setting = z.infer; +export type NewSetting = z.infer; diff --git a/backend/src/logger/db.transport.ts b/backend/logger/db.transport.ts similarity index 99% rename from backend/src/logger/db.transport.ts rename to backend/logger/db.transport.ts index ebf1bd5..6c6abe0 100644 --- a/backend/src/logger/db.transport.ts +++ b/backend/logger/db.transport.ts @@ -1,5 +1,4 @@ import build from "pino-abstract-transport"; - import { db } from "../db/db.controller.js"; import { logs } from "../db/schema/logs.schema.js"; import { tryCatch } from "../utils/trycatch.utils.js"; diff --git a/backend/logger/logger.controller.ts b/backend/logger/logger.controller.ts new file mode 100644 index 0000000..144d738 --- /dev/null +++ b/backend/logger/logger.controller.ts @@ -0,0 +1,78 @@ +import { Writable } from "node:stream"; +import pino, { type Logger } from "pino"; +import { db } from "../db/db.controller.js"; +import { logs } from "../db/schema/logs.schema.js"; +import { tryCatch } from "../utils/trycatch.utils.js"; +//import build from "pino-abstract-transport"; + +export const logLevel = process.env.LOG_LEVEL || "info"; + +const pinoLogLevels: Record = { + 10: "trace", + 20: "debug", + 30: "info", + 40: "warn", + 50: "error", + 60: "fatal", +}; + +// ✅ Custom DB writable stream +const dbStream = new Writable({ + objectMode: true, + async write(chunk, _enc, callback) { + try { + const obj = JSON.parse(chunk.toString()); + + const levelName = pinoLogLevels[obj.level] || "unknown"; + + const res = await tryCatch( + db.insert(logs).values({ + level: levelName, + module: obj?.module?.toLowerCase(), + subModule: obj?.subModule?.toLowerCase(), + hostname: obj?.hostname?.toLowerCase(), + message: obj.msg, + stack: obj?.stack, + }), + ); + + if (res.error) { + console.error(res.error); + } + + callback(); + } catch (err) { + console.error("DB log insert error:", err); + callback(); + } + }, +}); + +// ✅ Multistream setup +const streams = [ + { + stream: pino.transport({ + target: "pino-pretty", + options: { + colorize: true, + singleLine: true, + }, + }), + }, + { + level: "info", + stream: dbStream, + }, +]; + +const rootLogger: Logger = pino( + { + level: logLevel, + redact: { paths: ["email", "password"], remove: true }, + }, + pino.multistream(streams), +); + +export const createLogger = (bindings: Record): Logger => { + return rootLogger.child(bindings); +}; diff --git a/backend/opendock/connection.ts b/backend/opendock/connection.ts new file mode 100644 index 0000000..b83f3c7 --- /dev/null +++ b/backend/opendock/connection.ts @@ -0,0 +1,23 @@ +import { io } from "socket.io-client"; + +// NOTE: we assume "accessToken" was already obtained earlier via a call to '/auth/login'. + +// get the +const accessToken = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3MTkyNTQyZS01NzQ5LTRlZTgtYjdjZS0zNTQ4ZjA0NGQwOWIiLCJqdGkiOiI1NzE5ZmQ2OS02NTVkLTQ1MjctYTJjOC1hZWNhMjU0MTQ2MDEiLCJpZCI6IjcxOTI1NDJlLTU3NDktNGVlOC1iN2NlLTM1NDhmMDQ0ZDA5YiIsImVtYWlsIjoiYmxha2UubWF0dGhlc0BhbHBsYS5jb20iLCJvcmdJZCI6IjI2YTE4NjlmLTYwNDktNDM3Mi04ZWMzLTVkZDZlNDIzZjJmNiIsImNvbXBhbnlJZCI6bnVsbCwicm9sZSI6InJvbGVfb3duZXIiLCJpc0VtYWlsVmVyaWZpZWQiOnRydWUsImludmFsaWRMb2dpbkF0dGVtcHRzIjpudWxsLCJpYXQiOjE3NzA4MTE5MTEsImV4cCI6MTc3MTA3MTExMX0.jLHOSIF5RHUGjwq8WvycYxD9HK8_677O6sgRUZeYdUQ"; + +const baseSubspaceUrl = "wss://subspace.opendock.com"; +const url = `${baseSubspaceUrl}?token=${accessToken}`; +const socket = io(url, { transports: ["websocket"] }); // Enforce 'websocket' transport only. + +// socket.on("heartbeat", (data) => { +// console.log(data); +// }); + +socket.on("connection", () => { + console.log("Connected"); +}); + +socket.on("create-Appointment", (data) => { + console.log("appt create:", data); +}); diff --git a/backend/opendock/utils/releaseMonitor.utils.ts b/backend/opendock/utils/releaseMonitor.utils.ts new file mode 100644 index 0000000..401b59d --- /dev/null +++ b/backend/opendock/utils/releaseMonitor.utils.ts @@ -0,0 +1,499 @@ +import axios from "axios"; +import { addHours } from "date-fns"; +import { formatInTimeZone } from "date-fns-tz"; +import { sql } from "drizzle-orm"; +import { db } from "../../db/db.controller.js"; +import { opendockApt } from "../../db/schema/opendock.schema.js"; +import { prodQuery } from "../../prodSql/prodSqlQuery.controller.js"; +import { tryCatch } from "../../utils/trycatch.utils.js"; + +const releaseQuery = ` +SELECT + [Id] + ,[ReleaseNumber] + ,[CustomerReleaseNumber] + ,[ReleaseState] + ,[LineItemId] + ,[BlanketOrderId] + ,[DeliveryState] + ,[ReleaseConfirmationState] + ,[PlanningState] + ,[OrderDate] + ,cast([DeliveryDate] as datetime2) as DeliveryDate + ,[LoadingDate] + ,[Quantity] + ,[DeliveredQuantity] + ,[DeliveredQuantityTradeUnits] + ,[DeliveredQuantityLoadingUnits] + ,[PackagingId] + ,[PackagingHumanReadableId] + ,[PackagingDescription] + ,[MainMaterialId] + ,[MainMaterialHumanReadableId] + ,[MainMaterialDescription] + ,[AdditionalInformation1] + ,[AdditionalInformation2] + ,[D365SupplierLot] + ,[TradeUnits] + ,[LoadingUnits] + ,[Trucks] + ,[LoadingToleranceType] + ,[UnderdeliveryDeviation] + ,[OverdeliveryDeviation] + ,[ArticleAccountRequirements_ArticleExact] + ,[ArticleAccountRequirements_CustomerExact] + ,[ArticleAccountRequirements_PackagingExact] + ,[ArticleAccountRequirements_MainMaterialExact] + ,[PriceLogicType] + ,[AllowProductionLotMixing] + ,[EnforceStrictPicking] + ,[SalesPrice] + ,[Currency] + ,[QuantityUnit] + ,[SalesPriceRemark] + ,[DeliveryConditionId] + ,[DeliveryConditionHumanReadableId] + ,[DeliveryConditionDescription] + ,[PaymentTermsId] + ,[PaymentTermsHumanReadableId] + ,[PaymentTermsDescription] + ,[Remark] + ,[DeliveryAddressId] + ,[DeliveryAddressHumanReadableId] + ,[DeliveryAddressDescription] + ,[DeliveryStreetName] + ,[DeliveryAddressZip] + ,[DeliveryCity] + ,[DeliveryCountry] + ,[ReleaseDiscount] + ,[CustomerArtNo] + ,[LineItemHumanReadableId] + ,[LineItemArticle] + ,[LineItemArticleWeight] + ,[LineItemQuantityType] + ,[TotalPrice] + ,[Add_User] + ,[Add_Date] + ,[Upd_User] + ,cast([Upd_Date] as dateTime) as Upd_Date + ,[VatRate] + ,[ArticleAlias] + FROM [test1_AlplaPROD2.0_Reporting].[reporting_order].[Release] (nolock) + where format([Upd_Date], 'yyyy-MM-dd HH:mm:ss') > [dateCheck]`; + +let lastCheck = formatInTimeZone( + new Date().toISOString(), + "America/New_York", + "yyyy-MM-dd HH:mm:ss", +); + +const delay = (ms: number) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +//const queue: unknown[] = []; +//const isProcessing: boolean = false; + +let odToken: string | null = null; + +type Releases = { + ReleaseNumber: number; + DeliveryState: number; + DeliveryDate: Date; + LineItemHumanReadableId: number; + ArticleAlias: string; + LoadingUnits: string; + Quantity: number; + LineItemArticleWeight: number; + CustomerReleaseNumber: string; +}; +const postRelease = async (release: Releases) => { + if (!odToken) { + console.info("Getting token"); + // TODO: add a time stamp on the token so it gets refreshed every 24hours + await getToken(); + } + /** + * ReleaseState + * 0 = open + * 1 = planned + * 2 = CustomCanceled + * 4 = internally canceled + */ + + /** + * DeliveryState + * 0 = open + * 1 = inprogress + * 2 = loading + * 3 = partly shipped + * 4 = delivered + */ + + const newDockApt = { + status: + release.DeliveryState === 0 || release.DeliveryState === 1 + ? "Scheduled" + : release.DeliveryState === 2 + ? "InProgress" + : release.DeliveryState === 3 // this will consider finished and if a correction needs made to the bol we need to cancel and reactivate the order + ? "Completed" + : release.DeliveryState === 4 && "Completed", + userId: "2629b4f6-0003-472d-8b26-66a69ce5ac50", // this should be the carrierid + loadTypeId: "0aa7988e-b17b-4f10-acdd-3d029b44a773", // well get this and make it a default one + dockId: "00ba4386-ce5a-4dd1-9356-6e6d10a24609", // this the warehouse we want it in to start out + refNumbers: [release.ReleaseNumber], + refNumber: release.ReleaseNumber, + start: release.DeliveryDate, + end: addHours(release.DeliveryDate, 1), + notes: "", + ccEmails: [""], + muteNotifications: true, + metadata: { + externalValidationFailed: false, + externalValidationErrorMessage: null, + }, + units: null, + customFields: [ + { + name: "strArticle", + type: "str", + label: "Article", + value: `${release.LineItemHumanReadableId} - ${release.ArticleAlias}`, + description: "What bottle are we sending ", + placeholder: "", + dropDownValues: [], + minLengthOrValue: 1, + hiddenFromCarrier: false, + requiredForCarrier: false, + requiredForWarehouse: false, + }, + { + name: "intPallet Count", + type: "int", + label: "Pallet Count", + value: parseInt(release.LoadingUnits, 10), + description: "How many pallets", + placeholder: "22", + dropDownValues: [], + minLengthOrValue: 1, + hiddenFromCarrier: false, + requiredForCarrier: false, + requiredForWarehouse: false, + }, + { + name: "strTotal Weight", + type: "str", + label: "Total Weight", + value: `${(((release.Quantity * release.LineItemArticleWeight) / 1000) * 2.20462).toFixed(2)}`, + description: "What is the total weight of the load", + placeholder: "", + dropDownValues: [], + minLengthOrValue: 1, + hiddenFromCarrier: false, + requiredForCarrier: false, + requiredForWarehouse: false, + }, + { + name: "strCustomer ReleaseNumber", + type: "str", + label: "Customer Release Number", + value: `${release.CustomerReleaseNumber}`, + description: "What is the customer release number", + placeholder: "", + dropDownValues: [], + minLengthOrValue: 1, + hiddenFromCarrier: false, + requiredForCarrier: false, + requiredForWarehouse: false, + }, + ], + }; + + // TODO: pull the current added releases from the db and if one matches then we want to get its id and run the update vs create + const { data: apt, error: aptError } = await tryCatch( + db.select().from(opendockApt), + ); + + if (aptError) { + console.error("Error getting apt data: ", aptError); + // TODO: send an error email on this one as it will cause issues + return; + } + + const releaseCheck = apt.filter((r) => r.release === release.ReleaseNumber); + + //console.log(releaseCheck); + + if (releaseCheck.length > 0) { + const id = releaseCheck[0]?.openDockAptId; + try { + const response = await axios.patch( + `${process.env.OPENDOCK_URL}/appointment/${id}`, + newDockApt, + { + headers: { + "content-type": "application/json; charset=utf-8", + Authorization: `Bearer ${odToken}`, + }, + }, + ); + + if (response.status === 400) { + console.error(response.data.data.message); + return; + } + + // update the release in the db leaving as insert just incase something weird happened + try { + await db + .insert(opendockApt) + .values({ + release: release.ReleaseNumber, + openDockAptId: response.data.data.id, + appointment: response.data.data, + }) + .onConflictDoUpdate({ + target: opendockApt.release, + set: { appointment: response.data.data, upd_date: sql`NOW()` }, + }) + .returning(); + + console.info(`${release.ReleaseNumber} was updated`); + } catch (e) { + console.error(e); + } + } catch (e: any) { + //console.info(newDockApt); + console.error(e.response.data); + + return; + } + } else { + try { + const response = await axios.post( + `${process.env.OPENDOCK_URL}/appointment`, + newDockApt, + { + headers: { + "content-type": "application/json; charset=utf-8", + Authorization: `Bearer ${odToken}`, + }, + }, + ); + + // we need the id,release#,status from this response, store it in lst, check if we have a release so we can just update it. + // this will be utilized when we are listening for the changes to the apts. that way we can update the state to arrived. we will run our own checks on this guy during the incoming messages. + + if (response.status === 400) { + console.error(response.data.data.message); + return; + } + + // the response to make it simple we want response.data.id, response.data.relNumber, status will be defaulted to Scheduled if we created it here. + // TODO: add this release data to our db. but save it in json format and well parse it out. that way we future proof it and have everything in here vs just a few things + //console.info(response.data.data, "Was Created"); + try { + await db + .insert(opendockApt) + .values({ + release: release.ReleaseNumber, + openDockAptId: response.data.data.id, + appointment: response.data.data, + }) + .onConflictDoUpdate({ + target: opendockApt.id, + set: { appointment: response.data.data, upd_date: sql`NOW()` }, + }) + .returning(); + + console.info(`${release.ReleaseNumber} was created`); + } catch (e) { + console.error(e); + } + } catch (e: any) { + console.error(e.response.data); + + return; + } + } + + await delay(500); // rate limit protection +}; + +export const monitorReleaseChanges = async () => { + console.info("Starting release monitor", lastCheck); + + // run the main game loop + while (true) { + try { + const result = await prodQuery( + releaseQuery.replace("[dateCheck]", `'${lastCheck}'`), + "get last release change", + ); + + if (result.data.length) { + for (const release of result.data) { + // potentially move this to a buffer table to easy up on memory + await postRelease(release); + + // Move checkpoint AFTER successful post + lastCheck = formatInTimeZone( + new Date(release.Upd_Date).toISOString(), + "UTC", + "yyyy-MM-dd HH:mm:ss", + ); + + await delay(500); + } + } + } catch (e) { + console.error("Monitor error:", e); + } + + await delay(15 * 1000); // making this 15 seconds as we would really only see issues if we have a mass burst. + } +}; + +const getToken = async () => { + try { + const { status, data } = await axios.post( + `${process.env.OPENDOCK_URL}/auth/login`, + { + email: "blake.matthes@alpla.com", + password: process.env.OPENDOCK_PASSWORD, + }, + ); + + if (status === 400) { + console.error(data.message); + return; + } + + odToken = data.access_token; + console.info("Token added"); + } catch (e) { + console.error(e); + } +}; + +// export const monitorReleaseChanges = async () => { +// console.log("Starting release monitor", lastCheck); +// setInterval(async () => { +// try { +// const result = await prodQuery( +// releaseQuery.replace("[dateCheck]", `'${lastCheck}'`), +// "get last release change", +// ); + +// //console.log(releaseQuery.replace("[dateCheck]", `'${lastCheck}'`)); +// if (result.data.length > 0) { +// console.log( +// formatInTimeZone( +// result.data[result.data.length - 1].Upd_Date, +// "UTC", +// "yyyy-MM-dd HH:mm:ss", +// ), +// lastCheck, +// ); +// lastCheck = formatInTimeZone( +// result.data[result.data.length - 1].Upd_Date, +// "UTC", +// "yyyy-MM-dd HH:mm:ss", +// ); +// const releases = result.data; +// for (let i = 0; i < releases.length; i++) { +// const newDockApt = { +// status: "Scheduled", +// userId: "ee956455-e193-47fc-b53b-dff30fabdf4b", // this should be the carrierid +// loadTypeId: "0aa7988e-b17b-4f10-acdd-3d029b44a773", // well get this and make it a default one +// dockId: "00ba4386-ce5a-4dd1-9356-6e6d10a24609", // this the warehouse we want it in to start out +// refNumbers: [releases[i].ReleaseNumber], +// refNumber: releases[i].ReleaseNumber, +// start: releases[i].DeliveryDate, +// end: addHours(releases[i].DeliveryDate, 1), +// notes: "", +// ccEmails: [""], +// muteNotifications: true, +// metadata: { +// externalValidationFailed: false, +// externalValidationErrorMessage: null, +// }, +// units: null, +// customFields: [ +// { +// name: "strArticle", +// type: "str", +// label: "Article", +// value: `${releases[i].LineItemHumanReadableId} - ${releases[i].ArticleAlias}`, +// description: "What bottle are we sending ", +// placeholder: "", +// dropDownValues: [], +// minLengthOrValue: 1, +// hiddenFromCarrier: false, +// requiredForCarrier: false, +// requiredForWarehouse: false, +// }, +// { +// name: "intPallet Count", +// type: "int", +// label: "Pallet Count", +// value: parseInt(releases[i].LoadingUnits, 10), +// description: "How many pallets", +// placeholder: "22", +// dropDownValues: [], +// minLengthOrValue: 1, +// hiddenFromCarrier: false, +// requiredForCarrier: false, +// requiredForWarehouse: false, +// }, +// { +// name: "strTotal Weight", +// type: "str", +// label: "Total Weight", +// value: `${(((releases[i].Quantity * releases[i].LineItemArticleWeight) / 1000) * 2.20462).toFixed(2)}`, +// description: "What is the total weight of the load", +// placeholder: "", +// dropDownValues: [], +// minLengthOrValue: 1, +// hiddenFromCarrier: false, +// requiredForCarrier: false, +// requiredForWarehouse: false, +// }, +// { +// name: "strCustomer ReleaseNumber", +// type: "str", +// label: "Customer Release Number", +// value: `${releases[i].CustomerReleaseNumber}`, +// description: "What is the customer release number", +// placeholder: "", +// dropDownValues: [], +// minLengthOrValue: 1, +// hiddenFromCarrier: false, +// requiredForCarrier: false, +// requiredForWarehouse: false, +// }, +// ], +// }; + +// //console.log(newDockApt); + +// const newDockResult = await axios.post( +// "https://neutron.staging.opendock.com/appointment", +// newDockApt, +// { +// headers: { +// "content-type": "application/json; charset=utf-8", +// }, +// }, +// ); + +// console.log(newDockResult.statusText); +// await delay(500); +// } +// } +// } catch (e) { +// console.log(e); +// } +// }, 5 * 1000); +// }; diff --git a/backend/src/prodSql/prodSql.routes.ts b/backend/prodSql/prodSql.routes.ts similarity index 100% rename from backend/src/prodSql/prodSql.routes.ts rename to backend/prodSql/prodSql.routes.ts diff --git a/backend/src/prodSql/prodSqlConnection.controller.ts b/backend/prodSql/prodSqlConnection.controller.ts similarity index 97% rename from backend/src/prodSql/prodSqlConnection.controller.ts rename to backend/prodSql/prodSqlConnection.controller.ts index a35bcac..f93182f 100644 --- a/backend/src/prodSql/prodSqlConnection.controller.ts +++ b/backend/prodSql/prodSqlConnection.controller.ts @@ -35,7 +35,8 @@ export const connectProdSql = async () => { // try to connect to the sql server try { - pool = await sql.connect(prodSqlConfig); + pool = new sql.ConnectionPool(prodSqlConfig); + await pool.connect(); connected = true; return returnFunc({ success: true, @@ -151,6 +152,6 @@ export const reconnectToSql = async () => { ); reconnecting = false; - // exit alert someone here + // TODO: exit alert someone here } }; diff --git a/backend/src/prodSql/prodSqlQuery.controller.ts b/backend/prodSql/prodSqlQuery.controller.ts similarity index 100% rename from backend/src/prodSql/prodSqlQuery.controller.ts rename to backend/prodSql/prodSqlQuery.controller.ts diff --git a/backend/prodSql/prodSqlQuerySelector.utils.ts b/backend/prodSql/prodSqlQuerySelector.utils.ts new file mode 100644 index 0000000..d8cda2a --- /dev/null +++ b/backend/prodSql/prodSqlQuerySelector.utils.ts @@ -0,0 +1,29 @@ +import { readFileSync } from "node:fs"; + +export type SqlQuery = { + query: string; + success: boolean; + message: string; +}; + +export const sqlQuerySelector = (name: string) => { + try { + const queryFile = readFileSync( + new URL(`../prodSql/queries/${name}.sql`, import.meta.url), + "utf8", + ); + + return { + success: true, + message: `Query for: ${name}`, + query: queryFile, + }; + } catch (e) { + console.error(e); + return { + success: false, + message: + "Error getting the query file, please make sure you have the correct name.", + }; + } +}; diff --git a/backend/src/prodSql/prodSqlRestart.route.ts b/backend/prodSql/prodSqlRestart.route.ts similarity index 100% rename from backend/src/prodSql/prodSqlRestart.route.ts rename to backend/prodSql/prodSqlRestart.route.ts diff --git a/backend/src/prodSql/prodSqlStart.route.ts b/backend/prodSql/prodSqlStart.route.ts similarity index 100% rename from backend/src/prodSql/prodSqlStart.route.ts rename to backend/prodSql/prodSqlStart.route.ts diff --git a/backend/src/prodSql/prodSqlStop.route.ts b/backend/prodSql/prodSqlStop.route.ts similarity index 100% rename from backend/src/prodSql/prodSqlStop.route.ts rename to backend/prodSql/prodSqlStop.route.ts diff --git a/backend/src/prodSql/querys/prodSqlStats.ts b/backend/prodSql/queries/prodSqlStats.sql similarity index 92% rename from backend/src/prodSql/querys/prodSqlStats.ts rename to backend/prodSql/queries/prodSqlStats.sql index 2c7808f..90960a8 100644 --- a/backend/src/prodSql/querys/prodSqlStats.ts +++ b/backend/prodSql/queries/prodSqlStats.sql @@ -1,4 +1,4 @@ -export const prodSqlServerStats = ` + DECLARE @UptimeSeconds INT; DECLARE @StartTime DATETIME; @@ -13,4 +13,4 @@ SELECT (@UptimeSeconds % 86400) / 3600 AS [Hours], (@UptimeSeconds % 3600) / 60 AS [Minutes], (@UptimeSeconds % 60) AS [Seconds]; -`; + diff --git a/backend/src/routeHandler.routes.ts b/backend/routeHandler.routes.ts similarity index 100% rename from backend/src/routeHandler.routes.ts rename to backend/routeHandler.routes.ts diff --git a/backend/src/scaler/datamartAdd.spec.ts b/backend/scaler/datamartAdd.spec.ts similarity index 100% rename from backend/src/scaler/datamartAdd.spec.ts rename to backend/scaler/datamartAdd.spec.ts diff --git a/backend/src/scaler/datamartUpdate.spec.ts b/backend/scaler/datamartUpdate.spec.ts similarity index 100% rename from backend/src/scaler/datamartUpdate.spec.ts rename to backend/scaler/datamartUpdate.spec.ts diff --git a/backend/src/scaler/getDatamart.spec.ts b/backend/scaler/getDatamart.spec.ts similarity index 100% rename from backend/src/scaler/getDatamart.spec.ts rename to backend/scaler/getDatamart.spec.ts diff --git a/backend/src/scaler/login.spec.ts b/backend/scaler/login.spec.ts similarity index 100% rename from backend/src/scaler/login.spec.ts rename to backend/scaler/login.spec.ts diff --git a/backend/src/scaler/prodSqlRestart.spec.ts b/backend/scaler/prodSqlRestart.spec.ts similarity index 100% rename from backend/src/scaler/prodSqlRestart.spec.ts rename to backend/scaler/prodSqlRestart.spec.ts diff --git a/backend/src/scaler/prodSqlStart.spec.ts b/backend/scaler/prodSqlStart.spec.ts similarity index 100% rename from backend/src/scaler/prodSqlStart.spec.ts rename to backend/scaler/prodSqlStart.spec.ts diff --git a/backend/src/scaler/prodSqlStop.spec.ts b/backend/scaler/prodSqlStop.spec.ts similarity index 100% rename from backend/src/scaler/prodSqlStop.spec.ts rename to backend/scaler/prodSqlStop.spec.ts diff --git a/backend/src/scaler/register.spec.ts b/backend/scaler/register.spec.ts similarity index 100% rename from backend/src/scaler/register.spec.ts rename to backend/scaler/register.spec.ts diff --git a/backend/src/scaler/stats.spec.ts b/backend/scaler/stats.spec.ts similarity index 100% rename from backend/src/scaler/stats.spec.ts rename to backend/scaler/stats.spec.ts diff --git a/backend/server.ts b/backend/server.ts index 4b91a01..2b0a577 100644 --- a/backend/server.ts +++ b/backend/server.ts @@ -1,10 +1,11 @@ import { createServer } from "node:http"; import os from "node:os"; import createApp from "./app.js"; -import { startDatamartSync } from "./src/datamart/datamartSync.controller.js"; -import { createLogger } from "./src/logger/logger.controller.js"; -import { connectProdSql } from "./src/prodSql/prodSqlConnection.controller.js"; -import { setupSocketIORoutes } from "./src/socket.io/serverSetup.js"; +import { startDatamartSync } from "./datamart/datamartSync.controller.js"; +import { createLogger } from "./logger/logger.controller.js"; +import { monitorReleaseChanges } from "./opendock/utils/releaseMonitor.utils.js"; +import { connectProdSql } from "./prodSql/prodSqlConnection.controller.js"; +import { setupSocketIORoutes } from "./socket.io/serverSetup.js"; const port = Number(process.env.PORT) || 3000; @@ -13,7 +14,12 @@ const start = async () => { // triggering long lived processes connectProdSql(); - startDatamartSync(); + startDatamartSync(); // TODO: Remove this and all the other data related to it as we dont want this idea anymore + + // start long live processes + setTimeout(() => { + monitorReleaseChanges(); // this is od monitoring the db for all new releases + }, 5 * 1000); const { app, baseUrl } = await createApp(); diff --git a/backend/src/socket.io/serverSetup.ts b/backend/socket.io/serverSetup.ts similarity index 100% rename from backend/src/socket.io/serverSetup.ts rename to backend/socket.io/serverSetup.ts diff --git a/backend/src/logger/logger.controller.ts b/backend/src/logger/logger.controller.ts deleted file mode 100644 index 0dfbdf6..0000000 --- a/backend/src/logger/logger.controller.ts +++ /dev/null @@ -1,49 +0,0 @@ -import pino, { type Logger } from "pino"; - -export const logLevel = process.env.LOG_LEVEL || "info"; -const isDev = process.env.NODE_ENV !== "production"; -const transport = pino.transport({ - targets: [ - { - target: "pino-pretty", - options: { - colorize: true, - singleLine: "true", - destination: process.stdout.fd, - }, - }, - { - target: isDev ? "./db.transport.ts" : "./db.transport.js", - }, - ], -}); - -const rootLogger: Logger = pino( - { - level: logLevel, - redact: { paths: ["email", "password"], remove: true }, - }, - transport, - // pino.multistream([ - // // Pretty print to console in dev - // ...(isDev - // ? [ - // { - // stream: pino.transport({ - // target: "pino-pretty", - // options: { colorize: true }, - // }), - // }, - // ] - // : []), - // // Always log to database - // { - // level: "info", - // stream: dbStream, - // }, - // ]), -); - -export const createLogger = (bindings: Record): Logger => { - return rootLogger.child(bindings); -}; diff --git a/backend/src/system/stats.route.ts b/backend/system/stats.route.ts similarity index 60% rename from backend/src/system/stats.route.ts rename to backend/system/stats.route.ts index b8b63a0..f4cf5ff 100644 --- a/backend/src/system/stats.route.ts +++ b/backend/system/stats.route.ts @@ -1,13 +1,18 @@ import { Router } from "express"; import { prodQuery } from "../prodSql/prodSqlQuery.controller.js"; -import { prodSqlServerStats } from "../prodSql/querys/prodSqlStats.js"; +import { + type SqlQuery, + sqlQuerySelector, +} from "../prodSql/prodSqlQuerySelector.utils.js"; const router = Router(); router.get("/", async (_, res) => { const used = process.memoryUsage(); - const sqlServerStats = await prodQuery(prodSqlServerStats, "Sql Stats"); + const query = sqlQuerySelector("prodSqlStats") as SqlQuery; + + const sqlServerStats = await prodQuery(query?.query, "Sql Stats"); res.status(200).json({ status: "ok", uptime: process.uptime(), @@ -17,6 +22,7 @@ router.get("/", async (_, res) => { sqlServerStats: sqlServerStats?.success ? sqlServerStats?.data[0].UptimeSeconds : [], + eomFGPkgSheetVersion: 1, // this is the excel file version when we have a change to the macro we want to grab this }); }); diff --git a/backend/uploads/98e2aea9baadfbc009187d3bec17e26c b/backend/uploads/98e2aea9baadfbc009187d3bec17e26c deleted file mode 100644 index 3eb259d..0000000 --- a/backend/uploads/98e2aea9baadfbc009187d3bec17e26c +++ /dev/null @@ -1,38 +0,0 @@ - - select [IdProdPlanung] as lot, - [IdArtikelvarianten] as av, - [IdProdBereich], - [IdMaschine], - - PlanVon as StartLot, - PlanBis as EndLot, - -- Calculate total production time in hours - -- convert(float, DATEDIFF(MINUTE, PlanVon, PlanBis) / 60.0) totalProductionTime, -round(PlanDauer,2) as TimeToCompleteLot, --- total production per hour -round(PlanMengePaletten / plandauer,2) as palletsPerHour, ---what time will it be in 24hours -DATEADD(hour, 24, getdate()) as Next24hours, - ---time remaining -CASE WHEN DATEADD(hour, 24, getdate()) <= PlanBis THEN DATEDIFF(MINUTE, getdate(), DATEADD(hour, 24, getdate())) / 60.0 - ELSE DATEDIFF(MINUTE, getdate(), PlanBis) / 60.0 - END as TimeRemaining, --- total pallets for the lot -PlanMengePaletten as TotalPallets, - --production rate per 24hours -round(CASE WHEN DATEADD(hour, 24, getdate()) <= PlanBis THEN (DATEDIFF(MINUTE, getdate(), DATEADD(hour, 24, getdate())) / 60.0) * (PlanMengePaletten / plandauer) - ELSE (DATEDIFF(MINUTE, getdate(), PlanBis) / 60.0 ) * (PlanMengePaletten / plandauer) - END,2) as PalletsNext24Hours, - --production rate per 12hours -round(CASE WHEN DATEADD(hour, 12, getdate()) <= PlanBis THEN (DATEDIFF(MINUTE, getdate(), DATEADD(hour, 12, getdate())) / 60.0) * (PlanMengePaletten / plandauer) - ELSE (DATEDIFF(MINUTE, getdate(), PlanBis) / 60.0 ) * (PlanMengePaletten / plandauer) - END,2) as PalletsNext12Hours, - -round(CASE WHEN DATEADD(hour, 8, getdate()) <= PlanBis THEN (DATEDIFF(MINUTE, getdate(), DATEADD(hour, 8, getdate())) / 60.0) * (PlanMengePaletten / plandauer) - ELSE (DATEDIFF(MINUTE, getdate(), PlanBis) / 60.0 ) * (PlanMengePaletten / plandauer) - END,2) as PalletsNext8Hours, - Bemerkung as Remarks - from [AlplaPROD_usiow2].[dbo].[T_ProdPlanung] (nolock) - - where PlanBis between getdate()-1 and getdate()+7 --IdProdPlanung in (266882,264642,267813) diff --git a/backend/uploads/b14c926b9e320ae8f818faf5fc3db5ad b/backend/uploads/b14c926b9e320ae8f818faf5fc3db5ad deleted file mode 100644 index e23a6975e3904057f66a66e0d7dc56db78b72eaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23538 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 { fromEmail = process.env.EMAIL_USER as string; // update the from email - fromEmail = `noreply@alpla.com`; + fromEmail = `donotreply@alpla.com`; } else { //create the servers smtp config let host = `${os.hostname().replace("VMS006", "")}-smtp.alpla.net`; @@ -63,7 +63,7 @@ export const sendEmail = async (data: EmailData) => { } as SMTPTransport.Options); // update the from email - fromEmail = `noreply@alpla.com`; + fromEmail = `donotreply@alpla.com`; } // create the handlebars view diff --git a/backend/src/utils/trycatch.utils.ts b/backend/utils/trycatch.utils.ts similarity index 100% rename from backend/src/utils/trycatch.utils.ts rename to backend/utils/trycatch.utils.ts diff --git a/backend/src/utils/utils.routes.ts b/backend/utils/utils.routes.ts similarity index 100% rename from backend/src/utils/utils.routes.ts rename to backend/utils/utils.routes.ts diff --git a/drizzle.config.ts b/drizzle.config.ts index 8b2a119..1f30188 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -4,7 +4,7 @@ const dbURL = `postgres://${process.env.DATABASE_USER}:${process.env.DATABASE_PA export default defineConfig({ dialect: "postgresql", - schema: "./dist/backend/src/db/schema", + schema: "./dist/backend/db/schema", out: "./migrations", dbCredentials: { url: dbURL }, }); diff --git a/migrations/0007_secret_prodigy.sql b/migrations/0007_secret_prodigy.sql new file mode 100644 index 0000000..6473a5f --- /dev/null +++ b/migrations/0007_secret_prodigy.sql @@ -0,0 +1,15 @@ +CREATE TABLE "settings" ( + "settings_id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "value" text NOT NULL, + "description" text, + "moduleName" text, + "active" boolean DEFAULT true, + "roles" jsonb DEFAULT '["systemAdmin"]'::jsonb NOT NULL, + "add_User" text DEFAULT 'LST_System' NOT NULL, + "add_Date" timestamp DEFAULT now(), + "upd_User" text DEFAULT 'LST_System' NOT NULL, + "upd_date" timestamp DEFAULT now() +); +--> statement-breakpoint +CREATE UNIQUE INDEX "name" ON "settings" USING btree ("name"); \ No newline at end of file diff --git a/migrations/0008_white_lord_hawal.sql b/migrations/0008_white_lord_hawal.sql new file mode 100644 index 0000000..6bd9af8 --- /dev/null +++ b/migrations/0008_white_lord_hawal.sql @@ -0,0 +1,8 @@ +CREATE TABLE "opendock.apt" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "release" integer, + "open_dock_apt_id" text NOT NULL, + "appointment" jsonb DEFAULT '[]'::jsonb, + "created_at" timestamp DEFAULT now(), + CONSTRAINT "opendock.apt_release_unique" UNIQUE("release") +); diff --git a/migrations/0009_hesitant_nextwave.sql b/migrations/0009_hesitant_nextwave.sql new file mode 100644 index 0000000..ec5b538 --- /dev/null +++ b/migrations/0009_hesitant_nextwave.sql @@ -0,0 +1 @@ +ALTER TABLE "opendock.apt" ADD COLUMN "upd_date" timestamp DEFAULT now(); \ No newline at end of file diff --git a/migrations/meta/0007_snapshot.json b/migrations/meta/0007_snapshot.json new file mode 100644 index 0000000..6d41e3a --- /dev/null +++ b/migrations/meta/0007_snapshot.json @@ -0,0 +1,931 @@ +{ + "id": "e4e4ce99-fcae-4c8b-a544-ab1312501bcf", + "prevId": "a15c19e5-66da-44cb-b167-a07287bbf708", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_key_idx": { + "name": "apikey_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "apikey_userId_idx": { + "name": "apikey_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.datamart": { + "name": "datamart", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "query": { + "name": "query", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "options": { + "name": "options", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "public_access": { + "name": "public_access", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "datamart_name_unique": { + "name": "datamart_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/0008_snapshot.json b/migrations/meta/0008_snapshot.json new file mode 100644 index 0000000..1768e3a --- /dev/null +++ b/migrations/meta/0008_snapshot.json @@ -0,0 +1,985 @@ +{ + "id": "8e998864-4162-4134-aa40-0f9e2ce20fa6", + "prevId": "e4e4ce99-fcae-4c8b-a544-ab1312501bcf", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_key_idx": { + "name": "apikey_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "apikey_userId_idx": { + "name": "apikey_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.datamart": { + "name": "datamart", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "query": { + "name": "query", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "options": { + "name": "options", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "public_access": { + "name": "public_access", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "datamart_name_unique": { + "name": "datamart_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.opendock.apt": { + "name": "opendock.apt", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "release": { + "name": "release", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "open_dock_apt_id": { + "name": "open_dock_apt_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appointment": { + "name": "appointment", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "opendock.apt_release_unique": { + "name": "opendock.apt_release_unique", + "nullsNotDistinct": false, + "columns": [ + "release" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/0009_snapshot.json b/migrations/meta/0009_snapshot.json new file mode 100644 index 0000000..c2e04f4 --- /dev/null +++ b/migrations/meta/0009_snapshot.json @@ -0,0 +1,992 @@ +{ + "id": "16c9fa1e-f1cd-4ac8-abfe-781664e16311", + "prevId": "8e998864-4162-4134-aa40-0f9e2ce20fa6", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_key_idx": { + "name": "apikey_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "apikey_userId_idx": { + "name": "apikey_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.datamart": { + "name": "datamart", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "query": { + "name": "query", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "options": { + "name": "options", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "''" + }, + "public_access": { + "name": "public_access", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst-system'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "datamart_name_unique": { + "name": "datamart_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.opendock.apt": { + "name": "opendock.apt", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "release": { + "name": "release", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "open_dock_apt_id": { + "name": "open_dock_apt_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appointment": { + "name": "appointment", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "opendock.apt_release_unique": { + "name": "opendock.apt_release_unique", + "nullsNotDistinct": false, + "columns": [ + "release" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json index 2f691f1..77b0726 100644 --- a/migrations/meta/_journal.json +++ b/migrations/meta/_journal.json @@ -50,6 +50,27 @@ "when": 1768828593194, "tag": "0006_noisy_toad_men", "breakpoints": true + }, + { + "idx": 7, + "version": "7", + "when": 1771340950754, + "tag": "0007_secret_prodigy", + "breakpoints": true + }, + { + "idx": 8, + "version": "7", + "when": 1771342238889, + "tag": "0008_white_lord_hawal", + "breakpoints": true + }, + { + "idx": 9, + "version": "7", + "when": 1771343379107, + "tag": "0009_hesitant_nextwave", + "breakpoints": true } ] } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c5334e1..66449b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,808 +8,73 @@ "name": "lst_v3", "version": "1.0.1", "license": "ISC", + "workspaces": [ + "backend", + "agent", + "shared" + ], "dependencies": { - "@dotenvx/dotenvx": "^1.51.2", - "@scalar/express-api-reference": "^0.8.28", + "@dotenvx/dotenvx": "^1.52.0", + "@scalar/express-api-reference": "^0.8.41", "@socket.io/admin-ui": "^0.5.1", - "axios": "^1.13.3", - "better-auth": "^1.4.9", - "cors": "^2.8.5", - "croner": "^9.1.0", - "drizzle-kit": "^0.31.8", + "axios": "^1.13.5", + "better-auth": "^1.4.18", + "cors": "^2.8.6", + "croner": "^10.0.1", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "drizzle-kit": "^0.31.9", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", "express": "^5.2.1", - "husky": "^8.0.3", + "husky": "^9.1.7", "morgan": "^1.10.1", "mssql": "^12.2.0", "multer": "^2.0.2", - "nodemailer": "^7.0.12", + "nodemailer": "^8.0.1", "nodemailer-express-handlebars": "^7.0.0", - "pg": "^8.16.3", - "pino": "^10.1.0", + "pg": "^8.18.0", + "pino": "^10.3.1", "pino-pretty": "^13.1.3", - "postgres": "^3.4.7", + "postgres": "^3.4.8", "powershell": "^2.3.3", "socket.io": "^4.8.3", - "zod": "^4.2.1" + "socket.io-client": "^4.8.3", + "zod": "^4.3.6" }, "devDependencies": { - "@biomejs/biome": "2.3.8", - "@changesets/cli": "^2.27.0", - "@commitlint/cli": "^18.4.0", - "@commitlint/config-conventional": "^18.4.0", - "@swc/core": "^1.15.7", + "@biomejs/biome": "2.4.2", + "@changesets/cli": "^2.29.8", + "@commitlint/cli": "^20.4.1", + "@commitlint/config-conventional": "^20.4.1", + "@swc/core": "^1.15.11", "@swc/jest": "^0.2.39", "@types/cors": "^2.8.19", "@types/express": "^5.0.6", "@types/morgan": "^1.9.10", - "@types/mssql": "^9.1.8", + "@types/mssql": "^9.1.9", "@types/multer": "^2.0.0", - "@types/node": "^24.10.1", - "@types/nodemailer": "^7.0.4", + "@types/node": "^25.2.3", + "@types/nodemailer": "^7.0.10", "@types/nodemailer-express-handlebars": "^4.0.6", "@types/pg": "^8.16.0", "@types/supertest": "^6.0.3", "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.8", "@vercel/ncc": "^0.38.4", - "commitizen": "^4.3.0", + "commitizen": "^4.3.1", + "concurrently": "^9.2.1", "cz-conventional-changelog": "^3.3.0", - "npm-check-updates": "^19.1.2", + "nodemon": "^3.1.11", + "npm-check-updates": "^19.3.2", "openapi-types": "^12.1.3", - "supertest": "^7.1.4", + "supertest": "^7.2.2", "ts-jest": "^29.4.6", "ts-node-dev": "^2.0.0", "tsx": "^4.21.0", "typescript": "^5.9.3", - "vite-tsconfig-paths": "^6.0.3", - "vitest": "^4.0.16" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.958.0.tgz", - "integrity": "sha512-3x3n8IIxIMAkdpt9wy9zS7MO2lqTcJwQTdHMn6BlD7YUohb+r5Q4KCOEQ2uHWd4WIJv2tlbXnfypHaXReO/WXA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.957.0", - "@aws-sdk/credential-provider-node": "3.958.0", - "@aws-sdk/middleware-host-header": "3.957.0", - "@aws-sdk/middleware-logger": "3.957.0", - "@aws-sdk/middleware-recursion-detection": "3.957.0", - "@aws-sdk/middleware-user-agent": "3.957.0", - "@aws-sdk/region-config-resolver": "3.957.0", - "@aws-sdk/signature-v4-multi-region": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@aws-sdk/util-endpoints": "3.957.0", - "@aws-sdk/util-user-agent-browser": "3.957.0", - "@aws-sdk/util-user-agent-node": "3.957.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.0", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-retry": "^4.4.17", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.16", - "@smithy/util-defaults-mode-node": "^4.2.19", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.958.0.tgz", - "integrity": "sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.957.0", - "@aws-sdk/middleware-host-header": "3.957.0", - "@aws-sdk/middleware-logger": "3.957.0", - "@aws-sdk/middleware-recursion-detection": "3.957.0", - "@aws-sdk/middleware-user-agent": "3.957.0", - "@aws-sdk/region-config-resolver": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@aws-sdk/util-endpoints": "3.957.0", - "@aws-sdk/util-user-agent-browser": "3.957.0", - "@aws-sdk/util-user-agent-node": "3.957.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.0", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-retry": "^4.4.17", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.16", - "@smithy/util-defaults-mode-node": "^4.2.19", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.957.0.tgz", - "integrity": "sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@aws-sdk/xml-builder": "3.957.0", - "@smithy/core": "^3.20.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.957.0.tgz", - "integrity": "sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.957.0.tgz", - "integrity": "sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-stream": "^4.5.8", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.958.0.tgz", - "integrity": "sha512-u7twvZa1/6GWmPBZs6DbjlegCoNzNjBsMS/6fvh5quByYrcJr/uLd8YEr7S3UIq4kR/gSnHqcae7y2nL2bqZdg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/credential-provider-env": "3.957.0", - "@aws-sdk/credential-provider-http": "3.957.0", - "@aws-sdk/credential-provider-login": "3.958.0", - "@aws-sdk/credential-provider-process": "3.957.0", - "@aws-sdk/credential-provider-sso": "3.958.0", - "@aws-sdk/credential-provider-web-identity": "3.958.0", - "@aws-sdk/nested-clients": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.958.0.tgz", - "integrity": "sha512-sDwtDnBSszUIbzbOORGh5gmXGl9aK25+BHb4gb1aVlqB+nNL2+IUEJA62+CE55lXSH8qXF90paivjK8tOHTwPA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/nested-clients": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.958.0.tgz", - "integrity": "sha512-vdoZbNG2dt66I7EpN3fKCzi6fp9xjIiwEA/vVVgqO4wXCGw8rKPIdDUus4e13VvTr330uQs2W0UNg/7AgtquEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.957.0", - "@aws-sdk/credential-provider-http": "3.957.0", - "@aws-sdk/credential-provider-ini": "3.958.0", - "@aws-sdk/credential-provider-process": "3.957.0", - "@aws-sdk/credential-provider-sso": "3.958.0", - "@aws-sdk/credential-provider-web-identity": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.957.0.tgz", - "integrity": "sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.958.0.tgz", - "integrity": "sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.958.0", - "@aws-sdk/core": "3.957.0", - "@aws-sdk/token-providers": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.958.0.tgz", - "integrity": "sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/nested-clients": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.957.0.tgz", - "integrity": "sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.957.0.tgz", - "integrity": "sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.957.0.tgz", - "integrity": "sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.957.0.tgz", - "integrity": "sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@aws-sdk/util-arn-parser": "3.957.0", - "@smithy/core": "^3.20.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.957.0.tgz", - "integrity": "sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@aws-sdk/util-endpoints": "3.957.0", - "@smithy/core": "^3.20.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.958.0.tgz", - "integrity": "sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.957.0", - "@aws-sdk/middleware-host-header": "3.957.0", - "@aws-sdk/middleware-logger": "3.957.0", - "@aws-sdk/middleware-recursion-detection": "3.957.0", - "@aws-sdk/middleware-user-agent": "3.957.0", - "@aws-sdk/region-config-resolver": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@aws-sdk/util-endpoints": "3.957.0", - "@aws-sdk/util-user-agent-browser": "3.957.0", - "@aws-sdk/util-user-agent-node": "3.957.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.0", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-retry": "^4.4.17", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.16", - "@smithy/util-defaults-mode-node": "^4.2.19", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.957.0.tgz", - "integrity": "sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.957.0.tgz", - "integrity": "sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.958.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.958.0.tgz", - "integrity": "sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.957.0", - "@aws-sdk/nested-clients": "3.958.0", - "@aws-sdk/types": "3.957.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.957.0.tgz", - "integrity": "sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.957.0.tgz", - "integrity": "sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.957.0.tgz", - "integrity": "sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-endpoints": "^3.2.7", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.957.0.tgz", - "integrity": "sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.957.0.tgz", - "integrity": "sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.957.0", - "@smithy/types": "^4.11.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.957.0.tgz", - "integrity": "sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.957.0", - "@aws-sdk/types": "3.957.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.957.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.957.0.tgz", - "integrity": "sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "fast-xml-parser": "5.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", - "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.0.0" + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.0.18" } }, "node_modules/@azure-rest/core-client": { @@ -1663,32 +928,32 @@ "peer": true }, "node_modules/@better-auth/core": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.4.9.tgz", - "integrity": "sha512-JT2q4NDkQzN22KclUEoZ7qU6tl9HUTfK1ctg2oWlT87SEagkwJcnrUwS9VznL+u9ziOIfY27P0f7/jSnmvLcoQ==", + "version": "1.4.18", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.4.18.tgz", + "integrity": "sha512-q+awYgC7nkLEBdx2sW0iJjkzgSHlIxGnOpsN1r/O1+a4m7osJNHtfK2mKJSL1I+GfNyIlxJF8WvD/NLuYMpmcg==", "dependencies": { "@standard-schema/spec": "^1.0.0", - "zod": "^4.1.12" + "zod": "^4.3.5" }, "peerDependencies": { "@better-auth/utils": "0.3.0", "@better-fetch/fetch": "1.1.21", - "better-call": "1.1.7", + "better-call": "1.1.8", "jose": "^6.1.0", "kysely": "^0.28.5", "nanostores": "^1.0.1" } }, "node_modules/@better-auth/telemetry": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.4.9.tgz", - "integrity": "sha512-Tthy1/Gmx+pYlbvRQPBTKfVei8+pJwvH1NZp+5SbhwA6K2EXIaoonx/K6N/AXYs2aKUpyR4/gzqDesDjL7zd6A==", + "version": "1.4.18", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.4.18.tgz", + "integrity": "sha512-e5rDF8S4j3Um/0LIVATL2in9dL4lfO2fr2v1Wio4qTMRbfxqnUDTa+6SZtwdeJrbc4O+a3c+IyIpjG9Q/6GpfQ==", "dependencies": { "@better-auth/utils": "0.3.0", "@better-fetch/fetch": "1.1.21" }, "peerDependencies": { - "@better-auth/core": "1.4.9" + "@better-auth/core": "1.4.18" } }, "node_modules/@better-auth/utils": { @@ -1703,9 +968,9 @@ "integrity": "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==" }, "node_modules/@biomejs/biome": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.8.tgz", - "integrity": "sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.2.tgz", + "integrity": "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -1719,20 +984,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.8", - "@biomejs/cli-darwin-x64": "2.3.8", - "@biomejs/cli-linux-arm64": "2.3.8", - "@biomejs/cli-linux-arm64-musl": "2.3.8", - "@biomejs/cli-linux-x64": "2.3.8", - "@biomejs/cli-linux-x64-musl": "2.3.8", - "@biomejs/cli-win32-arm64": "2.3.8", - "@biomejs/cli-win32-x64": "2.3.8" + "@biomejs/cli-darwin-arm64": "2.4.2", + "@biomejs/cli-darwin-x64": "2.4.2", + "@biomejs/cli-linux-arm64": "2.4.2", + "@biomejs/cli-linux-arm64-musl": "2.4.2", + "@biomejs/cli-linux-x64": "2.4.2", + "@biomejs/cli-linux-x64-musl": "2.4.2", + "@biomejs/cli-win32-arm64": "2.4.2", + "@biomejs/cli-win32-x64": "2.4.2" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.8.tgz", - "integrity": "sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.2.tgz", + "integrity": "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==", "cpu": [ "arm64" ], @@ -1747,9 +1012,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.8.tgz", - "integrity": "sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.2.tgz", + "integrity": "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==", "cpu": [ "x64" ], @@ -1764,9 +1029,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.8.tgz", - "integrity": "sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.2.tgz", + "integrity": "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==", "cpu": [ "arm64" ], @@ -1781,9 +1046,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.8.tgz", - "integrity": "sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.2.tgz", + "integrity": "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==", "cpu": [ "arm64" ], @@ -1798,9 +1063,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.8.tgz", - "integrity": "sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.2.tgz", + "integrity": "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==", "cpu": [ "x64" ], @@ -1815,9 +1080,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.8.tgz", - "integrity": "sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.2.tgz", + "integrity": "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==", "cpu": [ "x64" ], @@ -1832,9 +1097,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.8.tgz", - "integrity": "sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.2.tgz", + "integrity": "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==", "cpu": [ "arm64" ], @@ -1849,9 +1114,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.8.tgz", - "integrity": "sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.2.tgz", + "integrity": "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==", "cpu": [ "x64" ], @@ -2109,21 +1374,18 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.6.1.tgz", - "integrity": "sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.1.tgz", + "integrity": "sha512-uuFKKpc7OtQM+6SRqT+a4kV818o1pS+uvv/gsRhyX7g4x495jg+Q7P0+O9VNGyLXBYP0syksS7gMRDJKcekr6A==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^18.6.1", - "@commitlint/lint": "^18.6.1", - "@commitlint/load": "^18.6.1", - "@commitlint/read": "^18.6.1", - "@commitlint/types": "^18.6.1", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", + "@commitlint/format": "^20.4.0", + "@commitlint/lint": "^20.4.1", + "@commitlint/load": "^20.4.0", + "@commitlint/read": "^20.4.0", + "@commitlint/types": "^20.4.0", + "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { @@ -2134,27 +1396,27 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.6.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.6.3.tgz", - "integrity": "sha512-8ZrRHqF6je+TRaFoJVwszwnOXb/VeYrPmTwPhf0WxpzpGTcYy1p0SPyZ2eRn/sRi/obnWAcobtDAq6+gJQQNhQ==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.1.tgz", + "integrity": "sha512-0YUvIeBtpi86XriqrR+TCULVFiyYTIOEPjK7tTRMxjcBm1qlzb+kz7IF2WxL6Fq5DaundG8VO37BNgMkMTBwqA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", - "conventional-changelog-conventionalcommits": "^7.0.2" + "@commitlint/types": "^20.4.0", + "conventional-changelog-conventionalcommits": "^9.1.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/config-validator": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.6.1.tgz", - "integrity": "sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.0.tgz", + "integrity": "sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", + "@commitlint/types": "^20.4.0", "ajv": "^8.11.0" }, "engines": { @@ -2162,13 +1424,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.6.1.tgz", - "integrity": "sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.1.tgz", + "integrity": "sha512-WLQqaFx1pBooiVvBrA1YfJNFqZF8wS/YGOtr5RzApDbV9tQ52qT5VkTsY65hFTnXhW8PcDfZLaknfJTmPejmlw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", + "@commitlint/types": "^20.4.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -2180,9 +1442,9 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.6.1.tgz", - "integrity": "sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", "dev": true, "license": "MIT", "engines": { @@ -2190,92 +1452,74 @@ } }, "node_modules/@commitlint/format": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.6.1.tgz", - "integrity": "sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.0.tgz", + "integrity": "sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", - "chalk": "^4.1.0" + "@commitlint/types": "^20.4.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/is-ignored": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.6.1.tgz", - "integrity": "sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.1.tgz", + "integrity": "sha512-In5EO4JR1lNsAv1oOBBO24V9ND1IqdAJDKZiEpdfjDl2HMasAcT7oA+5BKONv1pRoLG380DGPE2W2RIcUwdgLA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", - "semver": "7.6.0" + "@commitlint/types": "^20.4.0", + "semver": "^7.6.0" }, "engines": { "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@commitlint/lint": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.6.1.tgz", - "integrity": "sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.1.tgz", + "integrity": "sha512-g94LrGl/c6UhuhDQqNqU232aslLEN2vzc7MPfQTHzwzM4GHNnEAwVWWnh0zX8S5YXecuLXDwbCsoGwmpAgPWKA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^18.6.1", - "@commitlint/parse": "^18.6.1", - "@commitlint/rules": "^18.6.1", - "@commitlint/types": "^18.6.1" + "@commitlint/is-ignored": "^20.4.1", + "@commitlint/parse": "^20.4.1", + "@commitlint/rules": "^20.4.1", + "@commitlint/types": "^20.4.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.6.1.tgz", - "integrity": "sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.0.tgz", + "integrity": "sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^18.6.1", - "@commitlint/execute-rule": "^18.6.1", - "@commitlint/resolve-extends": "^18.6.1", - "@commitlint/types": "^18.6.1", - "chalk": "^4.1.0", - "cosmiconfig": "^8.3.6", - "cosmiconfig-typescript-loader": "^5.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0" + "@commitlint/config-validator": "^20.4.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.4.0", + "@commitlint/types": "^20.4.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "is-plain-obj": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/message": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.6.1.tgz", - "integrity": "sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.0.tgz", + "integrity": "sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==", "dev": true, "license": "MIT", "engines": { @@ -2283,75 +1527,75 @@ } }, "node_modules/@commitlint/parse": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.6.1.tgz", - "integrity": "sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.1.tgz", + "integrity": "sha512-XNtZjeRcFuAfUnhYrCY02+mpxwY4OmnvD3ETbVPs25xJFFz1nRo/25nHj+5eM+zTeRFvWFwD4GXWU2JEtoK1/w==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^18.6.1", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" + "@commitlint/types": "^20.4.0", + "conventional-changelog-angular": "^8.1.0", + "conventional-commits-parser": "^6.2.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/read": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.6.1.tgz", - "integrity": "sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.0.tgz", + "integrity": "sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/top-level": "^18.6.1", - "@commitlint/types": "^18.6.1", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "@commitlint/top-level": "^20.4.0", + "@commitlint/types": "^20.4.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.6.1.tgz", - "integrity": "sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.0.tgz", + "integrity": "sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^18.6.1", - "@commitlint/types": "^18.6.1", - "import-fresh": "^3.0.0", + "@commitlint/config-validator": "^20.4.0", + "@commitlint/types": "^20.4.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/rules": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.6.1.tgz", - "integrity": "sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.1.tgz", + "integrity": "sha512-WtqypKEPbQEuJwJS4aKs0OoJRBKz1HXPBC9wRtzVNH68FLhPWzxXlF09hpUXM9zdYTpm4vAdoTGkWiBgQ/vL0g==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^18.6.1", - "@commitlint/message": "^18.6.1", - "@commitlint/to-lines": "^18.6.1", - "@commitlint/types": "^18.6.1", - "execa": "^5.0.0" + "@commitlint/ensure": "^20.4.1", + "@commitlint/message": "^20.4.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.4.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.6.1.tgz", - "integrity": "sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", "dev": true, "license": "MIT", "engines": { @@ -2359,26 +1603,27 @@ } }, "node_modules/@commitlint/top-level": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.6.1.tgz", - "integrity": "sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.0.tgz", + "integrity": "sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^5.0.0" + "escalade": "^3.2.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/types": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.6.1.tgz", - "integrity": "sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.0.tgz", + "integrity": "sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0" + "conventional-commits-parser": "^6.2.1", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" @@ -2398,9 +1643,9 @@ } }, "node_modules/@dotenvx/dotenvx": { - "version": "1.51.2", - "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.51.2.tgz", - "integrity": "sha512-+693mNflujDZxudSEqSNGpn92QgFhJlBn9q2mDQ9yGWyHuz3hZ8B5g3EXCwdAz4DMJAI+OFCIbfEFZS+YRdrEA==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.52.0.tgz", + "integrity": "sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w==", "license": "BSD-3-Clause", "dependencies": { "commander": "^11.1.0", @@ -4720,38 +3965,48 @@ ] }, "node_modules/@scalar/core": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/@scalar/core/-/core-0.3.26.tgz", - "integrity": "sha512-CTwhU0zteyhFvlGbiErUC/nt7o4VMraXC4E52x2Cz+s/rgGrmS00pTYtnjO3NVQXXqjScq8BqMTqBZrHQEJhWw==", + "version": "0.3.38", + "resolved": "https://registry.npmjs.org/@scalar/core/-/core-0.3.38.tgz", + "integrity": "sha512-vacEKCx46szDGKI5x8GrFUQygMMoeOVFxeltkLM1kLylAYs7iLprkwkLlEI0zJezE7mqiWIONh9MDJA2lTciIA==", "license": "MIT", "dependencies": { - "@scalar/types": "0.5.2" + "@scalar/types": "0.6.3" }, "engines": { "node": ">=20" } }, "node_modules/@scalar/express-api-reference": { - "version": "0.8.28", - "resolved": "https://registry.npmjs.org/@scalar/express-api-reference/-/express-api-reference-0.8.28.tgz", - "integrity": "sha512-2J9nbykhPuXDLMOwqKEnFhni/8QlPsADAbkfXWpOVZZ+gHjjXjWZXIJ6n6EqTx61OsogyWwG1TH+EnYdGY9I2A==", + "version": "0.8.41", + "resolved": "https://registry.npmjs.org/@scalar/express-api-reference/-/express-api-reference-0.8.41.tgz", + "integrity": "sha512-dN3lSfpIv1TsFf1A9oRPtR7cws619tUILFQ6ZZaccTi5nZKfQDVuXncuIdWr8hp+z2uGMUWNjK/XiJEmT2gwsQ==", "license": "MIT", "dependencies": { - "@scalar/core": "0.3.26" + "@scalar/core": "0.3.38" }, "engines": { "node": ">=20" } }, + "node_modules/@scalar/helpers": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.12.tgz", + "integrity": "sha512-Ig/H1Je8nqcDiY+YwFIpATxF2ko7zKrjIZFWK2gGeNTYK4Np9XnqDHg56jM3Xru439Eh4qHq9P/lX7Se5nnxFA==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, "node_modules/@scalar/types": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@scalar/types/-/types-0.5.2.tgz", - "integrity": "sha512-F5wyb/B/Mu56PpNqhgSfuKwiwVnmhNhzTOo+k5b++HvYhjwAnqnw8BzbDzwXhhn172IPw8kSkupA/vphw61IRA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@scalar/types/-/types-0.6.3.tgz", + "integrity": "sha512-uicRSnA29SO+nwywdW5ycjIp24N/6FziPEpgC5nObCy5upUNpArN+xro06T1WX5zFnT9g7ADeTfFkWT+OLk/jA==", "license": "MIT", "dependencies": { - "nanoid": "5.1.5", - "type-fest": "5.0.0", - "zod": "^4.1.11" + "@scalar/helpers": "0.2.12", + "nanoid": "^5.1.6", + "type-fest": "^5.3.1", + "zod": "^4.3.5" }, "engines": { "node": ">=20" @@ -4786,626 +4041,6 @@ "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", - "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", - "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", - "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^4.2.8", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", - "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", - "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/hash-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", - "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", - "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", - "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", - "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-middleware": "^4.2.7", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", - "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/service-error-classification": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", - "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", - "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", - "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", - "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", - "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", - "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", - "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", - "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", - "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", - "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", - "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", - "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-stream": "^4.5.8", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", - "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", - "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", - "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", - "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.4.5", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", - "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", - "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", - "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^4.2.7", - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", - "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@socket.io/admin-ui": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@socket.io/admin-ui/-/admin-ui-0.5.1.tgz", @@ -5450,9 +4085,9 @@ "license": "MIT" }, "node_modules/@swc/core": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.7.tgz", - "integrity": "sha512-kTGB8XI7P+pTKW83tnUEDVP4zduF951u3UAOn5eTi0vyW6MvL56A3+ggMdfuVFtDI0/DsbSzf5z34HVBbuScWw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", + "integrity": "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -5468,16 +4103,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.7", - "@swc/core-darwin-x64": "1.15.7", - "@swc/core-linux-arm-gnueabihf": "1.15.7", - "@swc/core-linux-arm64-gnu": "1.15.7", - "@swc/core-linux-arm64-musl": "1.15.7", - "@swc/core-linux-x64-gnu": "1.15.7", - "@swc/core-linux-x64-musl": "1.15.7", - "@swc/core-win32-arm64-msvc": "1.15.7", - "@swc/core-win32-ia32-msvc": "1.15.7", - "@swc/core-win32-x64-msvc": "1.15.7" + "@swc/core-darwin-arm64": "1.15.11", + "@swc/core-darwin-x64": "1.15.11", + "@swc/core-linux-arm-gnueabihf": "1.15.11", + "@swc/core-linux-arm64-gnu": "1.15.11", + "@swc/core-linux-arm64-musl": "1.15.11", + "@swc/core-linux-x64-gnu": "1.15.11", + "@swc/core-linux-x64-musl": "1.15.11", + "@swc/core-win32-arm64-msvc": "1.15.11", + "@swc/core-win32-ia32-msvc": "1.15.11", + "@swc/core-win32-x64-msvc": "1.15.11" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5489,9 +4124,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.7.tgz", - "integrity": "sha512-+hNVUfezUid7LeSHqnhoC6Gh3BROABxjlDNInuZ/fie1RUxaEX4qzDwdTgozJELgHhvYxyPIg1ro8ibnKtgO4g==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.11.tgz", + "integrity": "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==", "cpu": [ "arm64" ], @@ -5506,9 +4141,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.7.tgz", - "integrity": "sha512-ZAFuvtSYZTuXPcrhanaD5eyp27H8LlDzx2NAeVyH0FchYcuXf0h5/k3GL9ZU6Jw9eQ63R1E8KBgpXEJlgRwZUQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.11.tgz", + "integrity": "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==", "cpu": [ "x64" ], @@ -5523,9 +4158,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.7.tgz", - "integrity": "sha512-K3HTYocpqnOw8KcD8SBFxiDHjIma7G/X+bLdfWqf+qzETNBrzOub/IEkq9UaeupaJiZJkPptr/2EhEXXWryS/A==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.11.tgz", + "integrity": "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==", "cpu": [ "arm" ], @@ -5540,9 +4175,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.7.tgz", - "integrity": "sha512-HCnVIlsLnCtQ3uXcXgWrvQ6SAraskLA9QJo9ykTnqTH6TvUYqEta+TdTdGjzngD6TOE7XjlAiUs/RBtU8Z0t+Q==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.11.tgz", + "integrity": "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==", "cpu": [ "arm64" ], @@ -5557,9 +4192,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.7.tgz", - "integrity": "sha512-/OOp9UZBg4v2q9+x/U21Jtld0Wb8ghzBScwhscI7YvoSh4E8RALaJ1msV8V8AKkBkZH7FUAFB7Vbv0oVzZsezA==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.11.tgz", + "integrity": "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==", "cpu": [ "arm64" ], @@ -5574,9 +4209,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.7.tgz", - "integrity": "sha512-VBbs4gtD4XQxrHuQ2/2+TDZpPQQgrOHYRnS6SyJW+dw0Nj/OomRqH+n5Z4e/TgKRRbieufipeIGvADYC/90PYQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.11.tgz", + "integrity": "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==", "cpu": [ "x64" ], @@ -5591,9 +4226,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.7.tgz", - "integrity": "sha512-kVuy2unodso6p0rMauS2zby8/bhzoGRYxBDyD6i2tls/fEYAE74oP0VPFzxIyHaIjK1SN6u5TgvV9MpyJ5xVug==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.11.tgz", + "integrity": "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==", "cpu": [ "x64" ], @@ -5608,9 +4243,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.7.tgz", - "integrity": "sha512-uddYoo5Xmo1XKLhAnh4NBIyy5d0xk33x1sX3nIJboFySLNz878ksCFCZ3IBqrt1Za0gaoIWoOSSSk0eNhAc/sw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.11.tgz", + "integrity": "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==", "cpu": [ "arm64" ], @@ -5625,9 +4260,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.7.tgz", - "integrity": "sha512-rqq8JjNMLx3QNlh0aPTtN/4+BGLEHC94rj9mkH1stoNRf3ra6IksNHMHy+V1HUqElEgcZyx+0yeXx3eLOTcoFw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.11.tgz", + "integrity": "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==", "cpu": [ "ia32" ], @@ -5642,9 +4277,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.7.tgz", - "integrity": "sha512-4BK06EGdPnuplgcNhmSbOIiLdRgHYX3v1nl4HXo5uo4GZMfllXaCyBUes+0ePRfwbn9OFgVhCWPcYYjMT6hycQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.11.tgz", + "integrity": "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==", "cpu": [ "x64" ], @@ -5929,13 +4564,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/morgan": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", @@ -5947,9 +4575,9 @@ } }, "node_modules/@types/mssql": { - "version": "9.1.8", - "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-9.1.8.tgz", - "integrity": "sha512-mt9h5jWj+DYE5jxnKaWSV/GqDf9FV52XYVk6T3XZF69noEe+JJV6MKirii48l81+cjmAkSq+qeKX+k61fHkYrQ==", + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-9.1.9.tgz", + "integrity": "sha512-P0nCgw6vzY23UxZMnbI4N7fnLGANt4LI4yvxze1paPj+LuN28cFv5EI+QidP8udnId/BKhkcRhm/BleNsjK65A==", "dev": true, "license": "MIT", "dependencies": { @@ -5969,22 +4597,21 @@ } }, "node_modules/@types/node": { - "version": "24.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.3.tgz", - "integrity": "sha512-gqkrWUsS8hcm0r44yn7/xZeV1ERva/nLgrLxFRUGb7aoNMIJfZJ3AC261zDQuOAKC7MiXai1WCpYc48jAHoShQ==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" } }, "node_modules/@types/nodemailer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.4.tgz", - "integrity": "sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.10.tgz", + "integrity": "sha512-tP+9WggTFN22Zxh0XFyst7239H0qwiRCogsk7v9aQS79sYAJY+WEbTHbNYcxUMaalHKmsNpxmoTe35hBEMMd6g==", "dev": true, "license": "MIT", "dependencies": { - "@aws-sdk/client-sesv2": "^3.839.0", "@types/node": "*" } }, @@ -5999,13 +4626,6 @@ "@types/nodemailer": "*" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/pg": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz", @@ -6464,16 +5084,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", - "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", "devOptional": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.16", - "@vitest/utils": "4.0.16", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -6482,13 +5102,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", - "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.16", + "@vitest/spy": "4.0.18", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -6509,9 +5129,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", - "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -6522,13 +5142,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", - "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", "devOptional": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.16", + "@vitest/utils": "4.0.18", "pathe": "^2.0.3" }, "funding": { @@ -6536,13 +5156,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", - "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", "devOptional": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.16", + "@vitest/pretty-format": "4.0.18", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -6551,9 +5171,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", - "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", "devOptional": true, "license": "MIT", "funding": { @@ -6561,13 +5181,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", - "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", "devOptional": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.16", + "@vitest/pretty-format": "4.0.18", "tinyrainbow": "^3.0.3" }, "funding": { @@ -6635,9 +5255,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -6765,16 +5385,6 @@ "node": ">=8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -6818,13 +5428,13 @@ } }, "node_modules/axios": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz", - "integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -7004,29 +5614,30 @@ "license": "MIT" }, "node_modules/better-auth": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.4.9.tgz", - "integrity": "sha512-usSdjuyTzZwIvM8fjF8YGhPncxV3MAg3dHUO9uPUnf0yklXUSYISiH1+imk6/Z+UBqsscyyPRnbIyjyK97p7YA==", + "version": "1.4.18", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.4.18.tgz", + "integrity": "sha512-bnyifLWBPcYVltH3RhS7CM62MoelEqC6Q+GnZwfiDWNfepXoQZBjEvn4urcERC7NTKgKq5zNBM8rvPvRBa6xcg==", "license": "MIT", "dependencies": { - "@better-auth/core": "1.4.9", - "@better-auth/telemetry": "1.4.9", + "@better-auth/core": "1.4.18", + "@better-auth/telemetry": "1.4.18", "@better-auth/utils": "0.3.0", "@better-fetch/fetch": "1.1.21", "@noble/ciphers": "^2.0.0", "@noble/hashes": "^2.0.0", - "better-call": "1.1.7", + "better-call": "1.1.8", "defu": "^6.1.4", "jose": "^6.1.0", "kysely": "^0.28.5", "nanostores": "^1.0.1", - "zod": "^4.1.12" + "zod": "^4.3.5" }, "peerDependencies": { "@lynx-js/react": "*", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", + "@tanstack/solid-start": "^1.0.0", "better-sqlite3": "^12.0.0", "drizzle-kit": ">=0.31.4", "drizzle-orm": ">=0.41.0", @@ -7055,6 +5666,9 @@ "@tanstack/react-start": { "optional": true }, + "@tanstack/solid-start": { + "optional": true + }, "better-sqlite3": { "optional": true }, @@ -7100,9 +5714,9 @@ } }, "node_modules/better-call": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.1.7.tgz", - "integrity": "sha512-6gaJe1bBIEgVebQu/7q9saahVzvBsGaByEnE8aDVncZEDiJO7sdNB28ot9I6iXSbR25egGmmZ6aIURXyQHRraQ==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.1.8.tgz", + "integrity": "sha512-XMQ2rs6FNXasGNfMjzbyroSwKwYbZ/T3IxruSS6U2MJRsSYh3wYtG3o6H00ZlKZ/C/UPOAD97tqgQJNsxyeTXw==", "license": "MIT", "dependencies": { "@better-auth/utils": "^0.3.0", @@ -7181,13 +5795,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/bowser": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", - "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", - "dev": true, - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -7398,28 +6005,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001761", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz", @@ -7808,6 +6398,47 @@ "typedarray": "^0.0.6" } }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -7831,29 +6462,29 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", + "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", "dev": true, "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.1.0.tgz", + "integrity": "sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==", "dev": true, "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/conventional-commit-types": { @@ -7864,22 +6495,19 @@ "license": "ISC" }, "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", + "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" + "meow": "^13.0.0" }, "bin": { - "conventional-commits-parser": "cli.mjs" + "conventional-commits-parser": "dist/cli/index.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/convert-source-map": { @@ -7916,9 +6544,9 @@ "license": "MIT" }, "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==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -7926,19 +6554,23 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -7956,21 +6588,21 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", - "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz", + "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==", "dev": true, "license": "MIT", "dependencies": { - "jiti": "^1.21.6" + "jiti": "^2.6.1" }, "engines": { - "node": ">=v16" + "node": ">=v18" }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=8.2", - "typescript": ">=4" + "cosmiconfig": ">=9", + "typescript": ">=5" } }, "node_modules/create-require": { @@ -7981,9 +6613,19 @@ "license": "MIT" }, "node_modules/croner": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/croner/-/croner-9.1.0.tgz", - "integrity": "sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/croner/-/croner-10.0.1.tgz", + "integrity": "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==", + "funding": [ + { + "type": "other", + "url": "https://paypal.me/hexagonpp" + }, + { + "type": "github", + "url": "https://github.com/sponsors/hexagon" + } + ], "license": "MIT", "engines": { "node": ">=18.0" @@ -8114,13 +6756,35 @@ } }, "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" } }, "node_modules/dateformat": { @@ -8149,43 +6813,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -8372,9 +6999,9 @@ } }, "node_modules/drizzle-kit": { - "version": "0.31.8", - "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.8.tgz", - "integrity": "sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==", + "version": "0.31.9", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.9.tgz", + "integrity": "sha512-GViD3IgsXn7trFyBUUHyTFBpH/FsHTxYJ66qdbVggxef4UBPHRYxQaRzYLTuekYnk9i5FIEL9pbBIwMqX/Uwrg==", "license": "MIT", "dependencies": { "@drizzle-team/brocli": "^0.10.2", @@ -9145,6 +7772,19 @@ "node": ">=10.2.0" } }, + "node_modules/engine.io-client": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", + "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.18.3", + "xmlhttprequest-ssl": "~2.1.1" + } + }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -9211,6 +7851,16 @@ "node": ">=8.6" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -9679,25 +8329,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -9787,23 +8418,6 @@ "dev": true, "license": "MIT" }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/findup-sync": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", @@ -10082,84 +8696,36 @@ } }, "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, "bin": { - "git-raw-commits": "cli.js" + "git-raw-commits": "cli.mjs" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" + "node": ">=16.10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-raw-commits/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/git-raw-commits/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -10195,17 +8761,30 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.4" + "ini": "4.1.1" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/global-modules": { @@ -10327,16 +8906,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10405,19 +8974,6 @@ "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -10492,15 +9048,15 @@ } }, "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "license": "MIT", "bin": { - "husky": "lib/bin.js" + "husky": "bin.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -10551,6 +9107,13 @@ "node": ">= 4" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -10599,6 +9162,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -10610,16 +9184,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -10824,13 +9388,16 @@ } }, "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-promise": { @@ -10864,19 +9431,6 @@ "node": ">=4" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-undefined": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/is-undefined/-/is-undefined-1.0.12.tgz", @@ -11992,13 +10546,13 @@ } }, "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "devOptional": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/jose": { @@ -12103,33 +10657,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsonwebtoken": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", @@ -12173,16 +10700,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/kysely": { "version": "0.28.8", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.8.tgz", @@ -12210,22 +10727,6 @@ "dev": true, "license": "MIT" }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -12252,13 +10753,6 @@ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -12304,13 +10798,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", @@ -12338,13 +10825,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", @@ -12379,19 +10859,6 @@ "node": ">=0.10.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -12437,19 +10904,6 @@ "tmpl": "1.0.5" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -12469,13 +10923,13 @@ } }, "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=16.10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12587,16 +11041,6 @@ "node": ">=6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12619,21 +11063,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -12816,9 +11245,9 @@ "license": "ISC" }, "node_modules/nanoid": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", - "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", "funding": [ { "type": "github", @@ -12911,9 +11340,9 @@ "peer": true }, "node_modules/nodemailer": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.12.tgz", - "integrity": "sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.1.tgz", + "integrity": "sha512-5kcldIXmaEjZcHR6F28IKGSgpmZHaF1IXLWFTG+Xh3S+Cce4MiakLtWY+PlBU69fLbRa8HlaGIrC/QolUpHkhg==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -12932,20 +11361,56 @@ "nodemailer": ">= 6.0.0" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/nodemon": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz", + "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" }, "engines": { "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/normalize-path": { @@ -12959,9 +11424,9 @@ } }, "node_modules/npm-check-updates": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-19.2.0.tgz", - "integrity": "sha512-XSIuL0FNgzXPDZa4lje7+OwHjiyEt84qQm6QMsQRbixNY5EHEM9nhgOjxjlK9jIbN+ysvSqOV8DKNS0zydwbdg==", + "version": "19.3.2", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-19.3.2.tgz", + "integrity": "sha512-9rr3z7znFjCSuaFxHGTFR2ZBOvLWaJcpLKmIquoTbDBNrwAGiHhv4MZyty6EJ9Xo/aMn35+2ISPSMgWIXx5Xkg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13175,38 +11640,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", @@ -13386,14 +11819,14 @@ "license": "MIT" }, "node_modules/pg": { - "version": "8.16.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", - "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz", + "integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.9.1", - "pg-pool": "^3.10.1", - "pg-protocol": "^1.10.3", + "pg-connection-string": "^2.11.0", + "pg-pool": "^3.11.0", + "pg-protocol": "^1.11.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -13401,7 +11834,7 @@ "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.2.7" + "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -13413,16 +11846,16 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", - "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", - "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", + "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", "license": "MIT" }, "node_modules/pg-int8": { @@ -13435,18 +11868,18 @@ } }, "node_modules/pg-pool": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", - "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.11.0.tgz", + "integrity": "sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", - "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", "license": "MIT" }, "node_modules/pg-types": { @@ -13505,31 +11938,31 @@ } }, "node_modules/pino": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-10.1.0.tgz", - "integrity": "sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", "license": "MIT", "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", + "pino-abstract-transport": "^3.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" + "thread-stream": "^4.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", "license": "MIT", "dependencies": { "split2": "^4.0.0" @@ -13559,15 +11992,6 @@ "pino-pretty": "bin.js" } }, - "node_modules/pino-pretty/node_modules/pino-abstract-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", - "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, "node_modules/pino-pretty/node_modules/strip-json-comments": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", @@ -13703,9 +12127,9 @@ } }, "node_modules/postgres": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", - "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.8.tgz", + "integrity": "sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==", "license": "Unlicense", "engines": { "node": ">=12" @@ -13861,6 +12285,13 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -13890,9 +12321,9 @@ "peer": true }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -13948,16 +12379,6 @@ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -13990,130 +12411,6 @@ "license": "MIT", "peer": true }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, "node_modules/read-yaml-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", @@ -14190,20 +12487,6 @@ "node": ">= 12.13.0" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -14283,19 +12566,6 @@ "node": ">=8" } }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -14597,6 +12867,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -14682,6 +12965,19 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14720,6 +13016,21 @@ "ws": "~8.18.3" } }, + "node_modules/socket.io-client": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", + "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/socket.io-parser": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz", @@ -14847,42 +13158,6 @@ "proc-output": "^1.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -15054,19 +13329,6 @@ "node": ">=6" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -15077,23 +13339,10 @@ "node": ">=0.10.0" } }, - "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/superagent": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.3.tgz", - "integrity": "sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", + "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15101,25 +13350,26 @@ "cookiejar": "^2.1.4", "debug": "^4.3.7", "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.4", + "form-data": "^4.0.5", "formidable": "^3.5.4", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.2" + "qs": "^6.14.1" }, "engines": { "node": ">=14.18.0" } }, "node_modules/supertest": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz", - "integrity": "sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz", + "integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==", "dev": true, "license": "MIT", "dependencies": { + "cookie-signature": "^1.2.2", "methods": "^1.1.2", - "superagent": "^10.2.3" + "superagent": "^10.3.0" }, "engines": { "node": ">=14.18.0" @@ -15297,26 +13547,16 @@ "node": ">=8" } }, - "node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz", + "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==", "license": "MIT", "dependencies": { "real-require": "^0.2.0" + }, + "engines": { + "node": ">=20" } }, "node_modules/through": { @@ -15326,16 +13566,6 @@ "dev": true, "license": "MIT" }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -15454,6 +13684,16 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -15464,16 +13704,6 @@ "tree-kill": "cli.js" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ts-jest": { "version": "29.4.6", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", @@ -15691,9 +13921,9 @@ } }, "node_modules/type-fest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.0.0.tgz", - "integrity": "sha512-GeJop7+u7BYlQ6yQCAY1nBQiRSHR+6OdCEtd8Bwp9a3NK3+fWAVjOaPKJDteB9f6cIJ0wt4IfnScjLG450EpXA==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", "license": "(MIT OR CC0-1.0)", "dependencies": { "tagged-tag": "^1.0.0" @@ -15752,6 +13982,13 @@ "node": ">=0.8.0" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -15895,17 +14132,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -15991,9 +14217,9 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.0.3.tgz", - "integrity": "sha512-7bL7FPX/DSviaZGYUKowWF1AiDVWjMjxNbE8lyaVGDezkedWqfGhlnQ4BZXre0ZN5P4kAgIJfAlgFDVyjrCIyg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz", + "integrity": "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==", "dev": true, "license": "MIT", "dependencies": { @@ -16003,11 +14229,6 @@ }, "peerDependencies": { "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } } }, "node_modules/vite/node_modules/fdir": { @@ -16042,19 +14263,19 @@ } }, "node_modules/vitest": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", - "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.16", - "@vitest/mocker": "4.0.16", - "@vitest/pretty-format": "4.0.16", - "@vitest/runner": "4.0.16", - "@vitest/snapshot": "4.0.16", - "@vitest/spy": "4.0.16", - "@vitest/utils": "4.0.16", + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -16082,10 +14303,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.16", - "@vitest/browser-preview": "4.0.16", - "@vitest/browser-webdriverio": "4.0.16", - "@vitest/ui": "4.0.16", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", "happy-dom": "*", "jsdom": "*" }, @@ -16309,6 +14530,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -16328,13 +14557,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -16380,6 +14602,7 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -16388,9 +14611,9 @@ } }, "node_modules/zod": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", - "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 7153b1c..1d19449 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,18 @@ "scripts": { "test": "dotenvx run -f .env -- vitest", "dev": "dotenvx run -f .env -- npm run dev:app", - "dev:app": "cd backend && tsx watch server.ts", + "dev:app": "tsx watch backend/server.ts", + "dev:agent": "cd agent/src && tsx watch agent.ts", "dev:db:migrate": "npx drizzle-kit push", "dev:db:generate": "tsc && npx drizzle-kit generate --config=drizzle.config.ts", - "build": "npm run specCheck && npm run lint && npm run dev:db:generate && npm run dev:db:migrate && npm run build:app", + "build": "rimraf dist && npm run specCheck && npm run lint && npm run dev:db:generate && npm run dev:db:migrate && npm run build:app && npm run build:copySql", "build:app": "tsc", + "build:agent": "cd agent && tsc -p tsconfig.json", "build:docker": "docker compose up --force-recreate --build -d", + "build:copySql": "xcopy backend\\prodSql\\queries dist\\backend\\prodSql\\queries\\ /E /I /Y ", "lint": "tsc && biome lint", - "start": "dotenvx run -f .env -- node dist/backend/server.js", + "start": "set NODE_ENV=production && npm run start:server", + "start:server": "dotenvx run -f .env -- node dist/backend/server.js", "start:docker": "node dist/backend/server.js", "commit": "cz", "changeset": "changeset", @@ -21,6 +25,11 @@ "release": "dotenvx run -f .env -- npm run version && git push --follow-tags && node scripts/create-release.js", "specCheck": "node scripts/check-route-specs.mjs" }, + "workspaces": [ + "backend", + "agent", + "shared" + ], "repository": { "type": "git", "url": "https://git.tuffraid.net/cowch/lst_v3.git" @@ -30,62 +39,65 @@ "license": "ISC", "type": "module", "devDependencies": { - "@biomejs/biome": "2.3.8", - "@changesets/cli": "^2.27.0", - "@commitlint/cli": "^18.4.0", - "@commitlint/config-conventional": "^18.4.0", - "@swc/core": "^1.15.7", + "@biomejs/biome": "2.4.2", + "@changesets/cli": "^2.29.8", + "@commitlint/cli": "^20.4.1", + "@commitlint/config-conventional": "^20.4.1", + "@swc/core": "^1.15.11", "@swc/jest": "^0.2.39", "@types/cors": "^2.8.19", "@types/express": "^5.0.6", "@types/morgan": "^1.9.10", - "@types/mssql": "^9.1.8", + "@types/mssql": "^9.1.9", "@types/multer": "^2.0.0", - "@types/node": "^24.10.1", - "@types/nodemailer": "^7.0.4", + "@types/node": "^25.2.3", + "@types/nodemailer": "^7.0.10", "@types/nodemailer-express-handlebars": "^4.0.6", "@types/pg": "^8.16.0", "@types/supertest": "^6.0.3", "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.8", "@vercel/ncc": "^0.38.4", - "commitizen": "^4.3.0", + "commitizen": "^4.3.1", "cz-conventional-changelog": "^3.3.0", - "npm-check-updates": "^19.1.2", + "npm-check-updates": "^19.3.2", "openapi-types": "^12.1.3", - "supertest": "^7.1.4", + "supertest": "^7.2.2", "ts-jest": "^29.4.6", "ts-node-dev": "^2.0.0", "tsx": "^4.21.0", "typescript": "^5.9.3", - "vite-tsconfig-paths": "^6.0.3", - "vitest": "^4.0.16" + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.0.18" }, "dependencies": { - "@dotenvx/dotenvx": "^1.51.2", - "@scalar/express-api-reference": "^0.8.28", + "@dotenvx/dotenvx": "^1.52.0", + "@scalar/express-api-reference": "^0.8.41", "@socket.io/admin-ui": "^0.5.1", - "axios": "^1.13.3", - "better-auth": "^1.4.9", - "cors": "^2.8.5", - "croner": "^9.1.0", - "drizzle-kit": "^0.31.8", + "axios": "^1.13.5", + "better-auth": "^1.4.18", + "cors": "^2.8.6", + "croner": "^10.0.1", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "drizzle-kit": "^0.31.9", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", "express": "^5.2.1", - "husky": "^8.0.3", + "husky": "^9.1.7", "morgan": "^1.10.1", "mssql": "^12.2.0", "multer": "^2.0.2", - "nodemailer": "^7.0.12", + "nodemailer": "^8.0.1", "nodemailer-express-handlebars": "^7.0.0", - "pg": "^8.16.3", - "pino": "^10.1.0", + "pg": "^8.18.0", + "pino": "^10.3.1", "pino-pretty": "^13.1.3", - "postgres": "^3.4.7", + "postgres": "^3.4.8", "powershell": "^2.3.3", "socket.io": "^4.8.3", - "zod": "^4.2.1" + "socket.io-client": "^4.8.3", + "zod": "^4.3.6" }, "config": { "commitizen": { diff --git a/scripts/check-route-specs.mjs b/scripts/check-route-specs.mjs index 8c31ed4..44646d7 100644 --- a/scripts/check-route-specs.mjs +++ b/scripts/check-route-specs.mjs @@ -47,4 +47,4 @@ function checkRouteSpecs(baseDir) { } // Adjust paths based on your structure -checkRouteSpecs("backend/src"); +checkRouteSpecs("backend"); diff --git a/scripts/zipApp.ps1 b/scripts/zipApp.ps1 new file mode 100644 index 0000000..2b29a5b --- /dev/null +++ b/scripts/zipApp.ps1 @@ -0,0 +1 @@ +Write-Host "hello world" \ No newline at end of file diff --git a/scripts/zipApp.sh b/scripts/zipApp.sh new file mode 100644 index 0000000..5c2ad1b --- /dev/null +++ b/scripts/zipApp.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# zipApp.sh -- create timestamped archive of the app +# set -e + +# SRC="/workspace/lst_v3" +# DEST="/workspace/lst_v3/builds" +# TS=$(date +%Y%m%d_%H%M) + +# mkdir -p "$DEST" + +# zip -r "$DEST/lst_v3_$TS.zip" "$SRC" \ +# -x "$SRC/.git/*" \ +# -x "$SRC/node_modules/*" \ +# -x "$SRC/.env" \ +# -x "$SRC/logs/*" \ +# -x "$SRC/zips/*" + +# echo "Archive created at $DEST/lst_v3_$TS.zip" + +echo "hello world \ No newline at end of file diff --git a/tests/examplequery.test.ts b/tests/examplequery.test.ts index 49bbf17..d5af5f4 100644 --- a/tests/examplequery.test.ts +++ b/tests/examplequery.test.ts @@ -1,29 +1,29 @@ -import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; -import { connectProdSql } from "../backend/src/prodSql/prodSqlConnection.controller.js"; +// import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +// import { connectProdSql } from "../backend/src/prodSql/prodSqlConnection.controller.js"; -let pool: any; +// let pool: unknown; -describe("Prod SQL connection", () => { - // This may take seconds, so give plenty of time - vi.setTimeout(30000); +// describe("Prod SQL connection", () => { +// // This may take seconds, so give plenty of time +// vi.setTimeout(30000); - beforeAll(async () => { - pool = await connectProdSql(); - }); +// beforeAll(async () => { +// pool = await connectProdSql(); +// }); - afterAll(async () => { - if (pool?.close) await pool.close(); - }); +// afterAll(async () => { +// if (pool?.close) await pool.close(); +// }); - it("should connect and return expected data", async () => { - // Example query — use something safe and consistent - const result = await pool - .request() - .query("SELECT TOP 1 id, name FROM Users ORDER BY id ASC"); +// it("should connect and return expected data", async () => { +// // Example query — use something safe and consistent +// const result = await pool +// .request() +// .query("SELECT TOP 1 id, name FROM Users ORDER BY id ASC"); - expect(result.recordset).toBeDefined(); - expect(Array.isArray(result.recordset)).toBe(true); - expect(result.recordset.length).toBeGreaterThan(0); - expect(result.recordset[0]).toHaveProperty("id"); - }); -}); +// expect(result.recordset).toBeDefined(); +// expect(Array.isArray(result.recordset)).toBe(true); +// expect(result.recordset.length).toBeGreaterThan(0); +// expect(result.recordset[0]).toHaveProperty("id"); +// }); +// }); diff --git a/tsconfig.json b/tsconfig.json index c0719f5..af40419 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,19 +10,13 @@ "outDir": "./dist", "removeComments": true, "allowJs": false, - "rootDir": "./", + "rootDir": ".", "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, "baseUrl": ".", - "paths": { - "@/*": ["backend/*"], - "@features/*": ["backend/features/*"], - "@shared/*": ["backend/shared/*"], - "@config/*": ["backend/config/*"] - }, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, diff --git a/tsconfig.json.bak b/tsconfig.json.bak new file mode 100644 index 0000000..ac9cabf --- /dev/null +++ b/tsconfig.json.bak @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "nodenext", + "strict": true, + "verbatimModuleSyntax": true, + "types": ["node", "better-auth"], + "jsx": "react-jsx", + "outDir": "./dist", + "removeComments": true, + "allowJs": false, + "rootDir": "./backend", + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "baseUrl": ".", + "paths": { + "@/*": ["backend/*"], + "@features/*": ["backend/features/*"], + "@shared/*": ["backend/shared/*"], + "@config/*": ["backend/config/*"] + }, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + //"allowImportingTsExtensions": true, + "noEmit": false + }, + "include": ["backend/**/*"], + "exclude": [ + "node_modules", + "frontend", + "dist", + "lstDocs", + "database/testFiles", + "scripts" + ]} \ No newline at end of file