diff --git a/apps/journal/app/components/ClientMap.tsx b/apps/journal/app/components/ClientMap.tsx new file mode 100644 index 0000000..774bf1b --- /dev/null +++ b/apps/journal/app/components/ClientMap.tsx @@ -0,0 +1,21 @@ +import { useState, useEffect, type ComponentProps } from "react"; + +type MapProps = ComponentProps; + +export function ClientMap(props: MapProps) { + const [Component, setComponent] = useState>(); + + useEffect(() => { + import("./RouteMapThumbnail.client").then((m) => setComponent(() => m.RouteMapThumbnail)); + }, []); + + if (!Component) { + return ( +
+ Loading map... +
+ ); + } + + return ; +} diff --git a/apps/journal/app/components/RouteMapThumbnail.tsx b/apps/journal/app/components/RouteMapThumbnail.client.tsx similarity index 100% rename from apps/journal/app/components/RouteMapThumbnail.tsx rename to apps/journal/app/components/RouteMapThumbnail.client.tsx diff --git a/apps/journal/app/routes/activities.$id.tsx b/apps/journal/app/routes/activities.$id.tsx index 2ddb6f5..1b80106 100644 --- a/apps/journal/app/routes/activities.$id.tsx +++ b/apps/journal/app/routes/activities.$id.tsx @@ -1,4 +1,3 @@ -import { Suspense, lazy } from "react"; import { data, redirect } from "react-router"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/activities.$id"; @@ -7,10 +6,7 @@ import { getActivity, deleteActivity, linkActivityToRoute, createRouteFromActivi import { deleteImportByActivity } from "~/lib/sync/imports.server"; import { listRoutes } from "~/lib/routes.server"; import { ClientDate } from "~/components/ClientDate"; - -const RouteMapThumbnail = lazy(() => - import("~/components/RouteMapThumbnail").then((m) => ({ default: m.RouteMapThumbnail })), -); +import { ClientMap } from "~/components/ClientMap"; export async function loader({ params, request }: Route.LoaderArgs) { const activity = await getActivity(params.id); @@ -125,9 +121,7 @@ export default function ActivityDetailPage({ loaderData }: Route.ComponentProps) {activity.geojson && (
- Loading map...
}> - - + )} diff --git a/apps/journal/app/routes/activities._index.tsx b/apps/journal/app/routes/activities._index.tsx index 6a4daef..4380be9 100644 --- a/apps/journal/app/routes/activities._index.tsx +++ b/apps/journal/app/routes/activities._index.tsx @@ -1,14 +1,10 @@ import { data, redirect } from "react-router"; -import { Suspense, lazy } from "react"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/activities._index"; import { getSessionUser } from "~/lib/auth.server"; import { listActivities } from "~/lib/activities.server"; import { ClientDate } from "~/components/ClientDate"; - -const RouteMapThumbnail = lazy(() => - import("~/components/RouteMapThumbnail").then((m) => ({ default: m.RouteMapThumbnail })), -); +import { ClientMap } from "~/components/ClientMap"; export async function loader({ request }: Route.LoaderArgs) { const user = await getSessionUser(request); @@ -64,9 +60,7 @@ export default function ActivitiesListPage({ loaderData }: Route.ComponentProps)
{activity.geojson ? ( - }> - - + ) : (
{t("routes.noMapPreview")} diff --git a/apps/journal/app/routes/api.health.ts b/apps/journal/app/routes/api.health.ts deleted file mode 100644 index 6603a65..0000000 --- a/apps/journal/app/routes/api.health.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { data } from "react-router"; -import { withDb } from "@trails-cool/db"; - -const version = process.env.SENTRY_RELEASE ?? "dev"; - -export async function loader() { - try { - await withDb(async () => {}); - return data({ status: "ok", version, db: "connected" }); - } catch { - return data({ status: "degraded", version, db: "unreachable" }, { status: 503 }); - } -} diff --git a/apps/journal/app/routes/routes.$id.tsx b/apps/journal/app/routes/routes.$id.tsx index 8773c2c..662ba9b 100644 --- a/apps/journal/app/routes/routes.$id.tsx +++ b/apps/journal/app/routes/routes.$id.tsx @@ -1,14 +1,11 @@ -import { useState, useCallback, Suspense, lazy } from "react"; +import { useState, useCallback } from "react"; import { data, redirect } from "react-router"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/routes.$id"; import { getSessionUser } from "~/lib/auth.server"; import { getRoute, getRouteWithVersions, deleteRoute, updateRoute } from "~/lib/routes.server"; import { ClientDate } from "~/components/ClientDate"; - -const RouteMapThumbnail = lazy(() => - import("~/components/RouteMapThumbnail").then((m) => ({ default: m.RouteMapThumbnail })), -); +import { ClientMap } from "~/components/ClientMap"; export async function loader({ params, request }: Route.LoaderArgs) { @@ -161,9 +158,7 @@ export default function RouteDetailPage({ loaderData }: Route.ComponentProps) { {route.geojson && (
- Loading map...
}> - - +
)} diff --git a/apps/journal/app/routes/routes._index.tsx b/apps/journal/app/routes/routes._index.tsx index 1f4210c..85511a6 100644 --- a/apps/journal/app/routes/routes._index.tsx +++ b/apps/journal/app/routes/routes._index.tsx @@ -1,14 +1,10 @@ import { data, redirect } from "react-router"; -import { Suspense, lazy } from "react"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/routes._index"; import { getSessionUser } from "~/lib/auth.server"; import { listRoutes } from "~/lib/routes.server"; import { ClientDate } from "~/components/ClientDate"; - -const RouteMapThumbnail = lazy(() => - import("~/components/RouteMapThumbnail").then((m) => ({ default: m.RouteMapThumbnail })), -); +import { ClientMap } from "~/components/ClientMap"; export async function loader({ request }: Route.LoaderArgs) { const user = await getSessionUser(request); @@ -62,9 +58,7 @@ export default function RoutesListPage({ loaderData }: Route.ComponentProps) {
{route.geojson ? ( - }> - - + ) : (
{t("routes.noMapPreview")} diff --git a/apps/journal/package.json b/apps/journal/package.json index a6edfca..9d3ac4b 100644 --- a/apps/journal/package.json +++ b/apps/journal/package.json @@ -13,8 +13,8 @@ "dependencies": { "@react-router/node": "catalog:", "@react-router/serve": "catalog:", - "@sentry/node": "^10.46.0", - "@sentry/react": "^10.46.0", + "@sentry/node": "^10.47.0", + "@sentry/react": "^10.47.0", "@simplewebauthn/browser": "^13.3.0", "@simplewebauthn/server": "^13.3.0", "@trails-cool/db": "workspace:*", @@ -24,9 +24,9 @@ "@trails-cool/types": "workspace:*", "@trails-cool/ui": "workspace:*", "drizzle-orm": "catalog:", - "isbot": "^5.1.0", + "isbot": "^5.1.37", "jose": "^6.2.2", - "nodemailer": "^8.0.4", + "nodemailer": "^8.0.5", "pino": "^10.3.1", "prom-client": "^15.1.3", "react": "catalog:", diff --git a/apps/journal/server.ts b/apps/journal/server.ts index 3385112..2f696db 100644 --- a/apps/journal/server.ts +++ b/apps/journal/server.ts @@ -4,6 +4,7 @@ import { createReadStream, statSync } from "node:fs"; import { join, extname, resolve } from "node:path"; import { logger } from "./app/lib/logger.server.ts"; import { httpRequestDuration, registry } from "./app/lib/metrics.server.ts"; +import postgres from "postgres"; const port = Number(process.env.PORT ?? 3000); const CLIENT_DIR = resolve(import.meta.dirname, "build", "client"); @@ -56,16 +57,16 @@ async function handleMetrics(_req: IncomingMessage, res: ServerResponse): Promis const version = process.env.SENTRY_RELEASE ?? "dev"; async function handleHealth(_req: IncomingMessage, res: ServerResponse): Promise { + const client = postgres(process.env.DATABASE_URL ?? "postgres://trails:trails@localhost:5432/trails", { max: 1 }); try { - const { createDb } = await import("@trails-cool/db"); - const { sql } = await import("drizzle-orm"); - const db = createDb(); - await db.execute(sql`SELECT 1`); + await client`SELECT 1`; res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify({ status: "ok", version, db: "connected" })); } catch { res.writeHead(503, { "Content-Type": "application/json" }); res.end(JSON.stringify({ status: "degraded", version, db: "unreachable" })); + } finally { + await client.end(); } } diff --git a/apps/planner/package.json b/apps/planner/package.json index 48c9e19..3c5edfd 100644 --- a/apps/planner/package.json +++ b/apps/planner/package.json @@ -14,8 +14,8 @@ "@geoman-io/leaflet-geoman-free": "^2.19.2", "@react-router/node": "catalog:", "@react-router/serve": "catalog:", - "@sentry/node": "^10.46.0", - "@sentry/react": "^10.46.0", + "@sentry/node": "^10.47.0", + "@sentry/react": "^10.47.0", "@trails-cool/db": "workspace:*", "@trails-cool/gpx": "workspace:*", "@trails-cool/i18n": "workspace:*", @@ -23,7 +23,7 @@ "@trails-cool/types": "workspace:*", "@trails-cool/ui": "workspace:*", "drizzle-orm": "catalog:", - "isbot": "^5.1.0", + "isbot": "^5.1.37", "lib0": "^0.2.117", "pino": "^10.3.1", "prom-client": "^15.1.3", diff --git a/apps/planner/server.ts b/apps/planner/server.ts index cc984c8..457d8da 100644 --- a/apps/planner/server.ts +++ b/apps/planner/server.ts @@ -6,6 +6,7 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht import { createReadStream, statSync } from "node:fs"; import { join, extname, resolve } from "node:path"; import { setupYjsWebSocket } from "./app/lib/yjs-server.ts"; +import postgres from "postgres"; const sentryEnvironment = process.env.CI ? "ci" : (process.env.NODE_ENV ?? "development"); @@ -74,16 +75,16 @@ async function handleMetrics(_req: IncomingMessage, res: ServerResponse): Promis const version = process.env.SENTRY_RELEASE ?? "dev"; async function handleHealth(_req: IncomingMessage, res: ServerResponse): Promise { + const client = postgres(process.env.DATABASE_URL ?? "postgres://trails:trails@localhost:5432/trails", { max: 1 }); try { - const { createDb } = await import("@trails-cool/db"); - const { sql } = await import("drizzle-orm"); - const db = createDb(); - await db.execute(sql`SELECT 1`); + await client`SELECT 1`; res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify({ status: "ok", version, db: "connected" })); } catch { res.writeHead(503, { "Content-Type": "application/json" }); res.end(JSON.stringify({ status: "degraded", version, db: "unreachable" })); + } finally { + await client.end(); } } diff --git a/openspec/changes/activity-photos/specs/activity-photos/spec.md b/openspec/changes/activity-photos/specs/activity-photos/spec.md new file mode 100644 index 0000000..aa24477 --- /dev/null +++ b/openspec/changes/activity-photos/specs/activity-photos/spec.md @@ -0,0 +1,52 @@ +## ADDED Requirements + +### Requirement: Photo upload via presigned URLs +Users SHALL be able to upload photos to an activity using presigned PUT URLs, with client-side image processing before upload. + +#### Scenario: Upload photo +- **WHEN** a user selects a photo on the activity detail page +- **THEN** the client resizes the image (max 2048px long edge), strips EXIF data, converts to WebP +- **AND** requests a presigned PUT URL from `POST /api/activities/:id/photos` +- **AND** uploads directly to Garage (S3-compatible storage) +- **AND** confirms the upload via `PATCH /api/activities/:id/photos/:photoId` + +#### Scenario: Size limit enforced +- **WHEN** a processed photo exceeds 5 MB +- **THEN** the presigned URL rejects the upload via content-length condition + +#### Scenario: Per-activity photo limit +- **WHEN** an activity already has 20 photos +- **THEN** the server rejects new presigned URL requests + +### Requirement: Photo gallery display +The activity detail page SHALL display uploaded photos in a responsive grid with lightbox viewing. + +#### Scenario: Gallery grid +- **WHEN** a user views an activity with photos +- **THEN** photos are displayed in a responsive grid (1 column mobile, 2 tablet, 3 desktop) with lazy loading + +#### Scenario: Lightbox view +- **WHEN** a user clicks a photo in the gallery +- **THEN** a full-size lightbox overlay opens with left/right navigation and close on escape + +### Requirement: Photo deletion +Activity owners SHALL be able to delete photos with soft delete and background S3 cleanup. + +#### Scenario: Delete photo +- **WHEN** a user clicks the delete icon on a photo +- **THEN** the photo status is set to 'deleted' and it disappears from the UI +- **AND** the S3 object is cleaned up on next page load or periodic cleanup + +### Requirement: Photo storage infrastructure +Photos SHALL be stored in Garage (S3-compatible, self-hosted) running as a Docker container. + +#### Scenario: Garage container +- **WHEN** docker compose starts +- **THEN** a Garage container is running with an `activity-photos` bucket + +### Requirement: Photo privacy disclosure +Photo storage and EXIF handling SHALL be documented in the privacy manifest. + +#### Scenario: Privacy page updated +- **WHEN** a user visits the privacy page +- **THEN** it documents photo storage location, EXIF stripping, and deletion behavior diff --git a/openspec/changes/local-dev-stack/specs/local-dev-environment/spec.md b/openspec/changes/local-dev-stack/specs/local-dev-environment/spec.md new file mode 100644 index 0000000..af699e6 --- /dev/null +++ b/openspec/changes/local-dev-stack/specs/local-dev-environment/spec.md @@ -0,0 +1,29 @@ +## MODIFIED Requirements + +### Requirement: Optional local monitoring stack +The dev environment SHALL support an optional monitoring profile matching the production stack. + +#### Scenario: Start with monitoring +- **WHEN** a developer runs `pnpm dev:full` with `--profile monitoring` +- **THEN** Prometheus, Grafana, and Loki start alongside the app services + +### Requirement: Production-aligned PostgreSQL config +The dev PostgreSQL SHALL match production configuration including pg_stat_statements. + +#### Scenario: pg_stat_statements available +- **WHEN** the dev PostgreSQL container starts +- **THEN** pg_stat_statements is enabled via initialization scripts + +### Requirement: Database seed script +The dev environment SHALL provide a seed script for consistent test data. + +#### Scenario: Seed database +- **WHEN** a developer runs the seed script +- **THEN** test users, routes, and activities are created in the local database + +### Requirement: Dev environment reset +The dev environment SHALL provide a command to tear down and recreate the local stack. + +#### Scenario: Reset dev environment +- **WHEN** a developer runs `pnpm dev:reset` +- **THEN** all Docker volumes are removed, containers are recreated, and the database is re-seeded diff --git a/openspec/changes/multi-day-routes/specs/multi-day-routes/spec.md b/openspec/changes/multi-day-routes/specs/multi-day-routes/spec.md new file mode 100644 index 0000000..45c50a4 --- /dev/null +++ b/openspec/changes/multi-day-routes/specs/multi-day-routes/spec.md @@ -0,0 +1,50 @@ +## ADDED Requirements + +### Requirement: Overnight waypoint markers +Any waypoint SHALL be toggleable as an overnight stop, creating day boundaries in the route. + +#### Scenario: Toggle overnight +- **WHEN** a user toggles the overnight flag on a waypoint +- **THEN** the waypoint's `overnight: true` flag is set in the Yjs document +- **AND** the route is visually divided into days at that point + +#### Scenario: Implicit day boundaries +- **WHEN** overnight stops are set +- **THEN** the first waypoint is the implicit start of Day 1 and the last waypoint is the implicit end of the final day + +### Requirement: Per-day statistics +The Planner SHALL compute and display distance, ascent, and estimated duration for each day. + +#### Scenario: Day stats computed +- **WHEN** a route has overnight waypoints +- **THEN** per-day distance, total ascent, and estimated duration are derived from segment boundaries and coordinates + +### Requirement: Day-aware sidebar +The sidebar SHALL group waypoints by day with collapsible sections and per-day stats. + +#### Scenario: Day breakdown +- **WHEN** a route has multiple days +- **THEN** waypoints are grouped under "Day 1", "Day 2", etc. with collapsible sections +- **AND** each section header shows day distance and ascent + +### Requirement: Elevation chart day dividers +The elevation chart SHALL show day boundaries as dashed vertical lines. + +#### Scenario: Day dividers on chart +- **WHEN** a route has multiple days +- **THEN** dashed vertical lines with "Day N" labels appear at each overnight waypoint position + +### Requirement: Map day labels +The map SHALL display day summary labels at day boundary waypoints. + +#### Scenario: Day labels on map +- **WHEN** a route has multiple days +- **THEN** white pill markers at day boundaries show "Day N . X km" + +### Requirement: Multi-day GPX export +Day structure SHALL be preserved in GPX exports via waypoint type elements. + +#### Scenario: Export multi-day route +- **WHEN** a user exports a plan with overnight waypoints +- **THEN** overnight waypoints include a `overnight` element in the GPX +- **AND** reimporting the GPX restores the day structure diff --git a/openspec/changes/route-discovery/specs/route-discovery/spec.md b/openspec/changes/route-discovery/specs/route-discovery/spec.md new file mode 100644 index 0000000..93264b9 --- /dev/null +++ b/openspec/changes/route-discovery/specs/route-discovery/spec.md @@ -0,0 +1,28 @@ +## ADDED Requirements + +### Requirement: Map-based route exploration +The Journal SHALL provide an explore page with a full-page map for browsing public routes by location. + +#### Scenario: Browse public routes +- **WHEN** a user visits `/routes/explore` +- **THEN** a full-page Leaflet map is displayed +- **AND** public routes within the current viewport are shown as clickable polylines + +#### Scenario: Route popup +- **WHEN** a user clicks a route polyline on the explore map +- **THEN** a popup shows the route name, distance, elevation gain, author, and a link to the detail page + +### Requirement: Bounding box spatial query +The Journal SHALL provide an API endpoint for querying public routes by map viewport bounds. + +#### Scenario: Viewport query +- **WHEN** the map viewport changes +- **THEN** the client requests routes intersecting the current bounds via PostGIS `ST_Intersects` +- **AND** results are limited to 50 routes with simplified geometries + +### Requirement: Spatial index +The routes table SHALL have a GiST index on the geometry column for fast bounding box queries. + +#### Scenario: Index exists +- **WHEN** the database is set up +- **THEN** a GiST index on `journal.routes.geom` supports efficient spatial queries diff --git a/openspec/changes/route-sharing/specs/route-sharing/spec.md b/openspec/changes/route-sharing/specs/route-sharing/spec.md new file mode 100644 index 0000000..bd8fddf --- /dev/null +++ b/openspec/changes/route-sharing/specs/route-sharing/spec.md @@ -0,0 +1,38 @@ +## ADDED Requirements + +### Requirement: Route visibility +Routes and activities SHALL support private (default) and public visibility levels. + +#### Scenario: Set route public +- **WHEN** a route owner toggles visibility to "public" +- **THEN** the route is viewable by anyone with the link + +#### Scenario: Default private +- **WHEN** a new route is created +- **THEN** its visibility is "private" (owner-only) + +### Requirement: Per-user route sharing +Route owners SHALL be able to share routes with specific users at view or edit permission levels. + +#### Scenario: Share with user +- **WHEN** a route owner shares a route with another user at "view" level +- **THEN** the shared user sees the route in their collection and can view it + +#### Scenario: Edit permission +- **WHEN** a route owner shares a route with "edit" permission +- **THEN** the shared user can update the route name, description, and GPX + +### Requirement: Route forking +Logged-in users SHALL be able to fork any public route into their own collection. + +#### Scenario: Fork public route +- **WHEN** a user clicks "Fork" on a public route +- **THEN** a copy of the route metadata and latest GPX is created in their collection +- **AND** a `forkedFromId` link references the original route + +### Requirement: Contributor tracking +Route versions SHALL record the identity of the contributor who saved them. + +#### Scenario: Planner callback contributor +- **WHEN** the Planner saves back to the Journal via JWT callback +- **THEN** the contributor's identity is recorded on the new route version diff --git a/openspec/changes/visual-redesign/specs/design-system/spec.md b/openspec/changes/visual-redesign/specs/design-system/spec.md new file mode 100644 index 0000000..e01a1b8 --- /dev/null +++ b/openspec/changes/visual-redesign/specs/design-system/spec.md @@ -0,0 +1,40 @@ +## ADDED Requirements + +### Requirement: Design token system +The Planner SHALL use CSS custom properties for colors, typography, and spacing with Tailwind config extensions. + +#### Scenario: Consistent styling +- **WHEN** a component is styled +- **THEN** it uses project design tokens (warm off-whites, sage green accent, earthy tones) via Tailwind classes + +#### Scenario: Typography +- **WHEN** text is rendered +- **THEN** body text uses Outfit font and statistics use Geist Mono + +### Requirement: Redesigned topbar +The Planner topbar SHALL include a logo, segmented color mode toggle, participant avatars, and export controls. + +#### Scenario: Topbar layout +- **WHEN** a user is in a planning session +- **THEN** the topbar shows: logo with mountain mark, color mode toggle, participant avatars with names, and Export GPX button + +### Requirement: Redesigned sidebar +The Planner sidebar SHALL display a route summary header with stats, collapsible day breakdown, and waypoints nested inside days. + +#### Scenario: Route summary +- **WHEN** a route is computed +- **THEN** the sidebar header shows route name, distance, ascent, and estimated duration + +### Requirement: Redesigned map markers +Map waypoint markers SHALL use olive/dark numbered circles with overnight badges on stop waypoints. + +#### Scenario: Marker styling +- **WHEN** waypoints are displayed on the map +- **THEN** they appear as dark numbered circles instead of default blue markers + +### Requirement: Mobile responsive layout +The Planner SHALL use a bottom sheet pattern on mobile instead of a hidden sidebar. + +#### Scenario: Mobile view +- **WHEN** the Planner is viewed on a mobile device +- **THEN** a bottom sheet replaces the sidebar with swipeable tabs (Days/Waypoints/Notes) diff --git a/openspec/changes/waypoint-notes/specs/waypoint-notes/spec.md b/openspec/changes/waypoint-notes/specs/waypoint-notes/spec.md new file mode 100644 index 0000000..1a8e3d5 --- /dev/null +++ b/openspec/changes/waypoint-notes/specs/waypoint-notes/spec.md @@ -0,0 +1,46 @@ +## ADDED Requirements + +### Requirement: Per-waypoint text notes +Each waypoint SHALL support an optional plain-text note synced via Yjs. + +#### Scenario: Add note to waypoint +- **WHEN** a user clicks the note area under a waypoint in the sidebar and types text +- **THEN** the note is stored in the waypoint's Y.Map as a `note` string field +- **AND** auto-saves on blur + +#### Scenario: Note syncs to participants +- **WHEN** a user adds or edits a waypoint note +- **THEN** all other participants see the update in real-time via Yjs + +### Requirement: Map note indicators +Waypoint markers with notes SHALL show a visual indicator on the map. + +#### Scenario: Note icon on marker +- **WHEN** a waypoint has a note +- **THEN** its map marker shows a small note icon + +#### Scenario: Note tooltip +- **WHEN** a user hovers or taps a marker with a note +- **THEN** the note text appears in a tooltip + +### Requirement: Notes in GPX export +Waypoint notes SHALL be exported as `` elements in GPX output. + +#### Scenario: Export notes +- **WHEN** a user exports a plan with waypoint notes +- **THEN** each waypoint's note appears as a `` element in the GPX file + +### Requirement: Nearby POI display +When a waypoint is selected, nearby POIs from OpenStreetMap SHALL be shown on the map and in the sidebar. + +#### Scenario: POI lookup +- **WHEN** a user selects a waypoint +- **THEN** nearby POIs are fetched from the Overpass API and displayed as small markers on the map and as a list in the sidebar + +### Requirement: Snap waypoint to POI +Users SHALL be able to move a waypoint to a nearby POI's exact coordinates. + +#### Scenario: Snap to POI +- **WHEN** a user clicks a nearby POI +- **THEN** the waypoint moves to the POI's coordinates +- **AND** the POI's name and type are added as a note prefix (e.g., "Campsite - Waldcamp Fichtelberg") diff --git a/openspec/specs/account-settings/spec.md b/openspec/specs/account-settings/spec.md index e323676..385c578 100644 --- a/openspec/specs/account-settings/spec.md +++ b/openspec/specs/account-settings/spec.md @@ -1,4 +1,8 @@ -## MODIFIED Requirements +## Purpose + +User account settings page with connected services management, profile editing, and security controls. + +## Requirements ### Requirement: Connected Services section The settings page SHALL include a "Connected Services" section for managing external integrations. diff --git a/openspec/specs/activity-feed/spec.md b/openspec/specs/activity-feed/spec.md index aed90e4..21f2c7b 100644 --- a/openspec/specs/activity-feed/spec.md +++ b/openspec/specs/activity-feed/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Activity creation, chronological feed, detail views, and route linking in the Journal app. + +## Requirements ### Requirement: Create activity The Journal SHALL allow authenticated users to create an activity by uploading a GPX trace and adding a description. diff --git a/openspec/specs/brouter-integration/spec.md b/openspec/specs/brouter-integration/spec.md index 6757712..3ccf4fa 100644 --- a/openspec/specs/brouter-integration/spec.md +++ b/openspec/specs/brouter-integration/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Route computation between waypoints via the BRouter HTTP API, including routing host election, result broadcasting via Yjs, profile selection, and rate-limited proxying. + +## Requirements ### Requirement: Route computation from waypoints The Planner SHALL compute a route between ordered waypoints by calling the BRouter HTTP API with tiledesc enabled and returning the result as an EnrichedRoute, preserving per-point elevation, surface data, and segment boundary indices. diff --git a/openspec/specs/crash-recovery/spec.md b/openspec/specs/crash-recovery/spec.md index 20de3f4..d760b38 100644 --- a/openspec/specs/crash-recovery/spec.md +++ b/openspec/specs/crash-recovery/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Browser crash resilience via localStorage-based Yjs state persistence and recovery on reconnect. + ## Requirements ### Requirement: localStorage crash recovery diff --git a/openspec/specs/gpx-import/spec.md b/openspec/specs/gpx-import/spec.md index 2666e02..f066bff 100644 --- a/openspec/specs/gpx-import/spec.md +++ b/openspec/specs/gpx-import/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +GPX file import in the Planner via home page file picker and in-session drag-and-drop, with client-side parsing and waypoint extraction. + +## Requirements ### Requirement: Import GPX from home page Users SHALL be able to import a GPX file from the planner home page to start a new planning session. @@ -30,7 +34,9 @@ Users SHALL be able to drag a GPX file onto the map in an existing session. - **WHEN** a user drops a GPX file and the confirmation dialog appears - **THEN** clicking "Cancel" leaves the session unchanged -### Requirement: Non-GPX files are rejected +### Requirement: Non-GPX file rejection +The Planner SHALL reject non-GPX files dropped on the map. + #### Scenario: Drop non-GPX file - **WHEN** a user drops a non-GPX file on the map - **THEN** the file is ignored with a brief error toast diff --git a/openspec/specs/infrastructure/spec.md b/openspec/specs/infrastructure/spec.md index b37dfe6..b708a26 100644 --- a/openspec/specs/infrastructure/spec.md +++ b/openspec/specs/infrastructure/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Server provisioning on Hetzner, Docker Compose deployment, CI/CD pipelines, database and BRouter management, TLS, Sentry, Grafana, and monitoring stack for the flagship instance. + +## Requirements ### Requirement: Terraform Hetzner provisioning Infrastructure SHALL be provisioned on Hetzner Cloud using Terraform with the Hetzner provider. diff --git a/openspec/specs/journal-auth/spec.md b/openspec/specs/journal-auth/spec.md index 4d8a60e..ffd4d34 100644 --- a/openspec/specs/journal-auth/spec.md +++ b/openspec/specs/journal-auth/spec.md @@ -1,4 +1,8 @@ -## MODIFIED Requirements +## Purpose + +Authentication for the Journal app, including OAuth token storage for external services in the sync_connections table. + +## Requirements ### Requirement: Store external service tokens The journal auth system SHALL store OAuth tokens for external services alongside user credentials. diff --git a/openspec/specs/local-dev-environment/spec.md b/openspec/specs/local-dev-environment/spec.md index d943ad8..e9de720 100644 --- a/openspec/specs/local-dev-environment/spec.md +++ b/openspec/specs/local-dev-environment/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +One-command local development setup with PostgreSQL, BRouter, automatic schema migration, and segment downloading. + +## Requirements ### Requirement: One-command dev startup The project SHALL provide a single command that starts all services needed for local development. diff --git a/openspec/specs/map-display/spec.md b/openspec/specs/map-display/spec.md index f9c7760..bdbb97e 100644 --- a/openspec/specs/map-display/spec.md +++ b/openspec/specs/map-display/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Interactive map rendering with Leaflet and OSM tiles, waypoint editing, route visualization, elevation profiles, multiplayer cursors, and polygon drawing for both Planner and Journal apps. + +## Requirements ### Requirement: Map rendering with OSM tiles The Planner and Journal SHALL render interactive maps using Leaflet with OpenStreetMap tiles as the default base layer. diff --git a/openspec/specs/no-go-areas/spec.md b/openspec/specs/no-go-areas/spec.md index 5c4c60d..d60a68f 100644 --- a/openspec/specs/no-go-areas/spec.md +++ b/openspec/specs/no-go-areas/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Polygon-based route avoidance areas drawn on the map, synced via Yjs, sent to BRouter as constraints, and persisted in GPX extensions. + ## Requirements ### Requirement: Draw no-go areas @@ -35,22 +39,16 @@ No-go areas SHALL be preserved when saving to the journal or exporting a plan. - **AND** the file is compatible with any GPX-consuming application ### Requirement: GPX extensions format -No-go areas are stored in GPX using a custom XML namespace: +No-go areas SHALL be stored in GPX using the `trails:planning` custom XML namespace with point-based polygon representation. -```xml - - - - - - - - - - - -``` +#### Scenario: Valid no-go area in GPX +- **WHEN** a GPX file contains a `` element with 3+ `` child elements +- **THEN** the parser creates a no-go area polygon from the point coordinates -- Each `` element contains 3+ `` elements -- Parser accepts both namespaced (`trails:nogo`) and non-namespaced (`nogo`) elements -- Areas with fewer than 3 points are rejected on parse +#### Scenario: Namespace-agnostic parsing +- **WHEN** a GPX file contains non-namespaced `` elements instead of `` +- **THEN** the parser accepts them identically + +#### Scenario: Invalid no-go area rejected +- **WHEN** a GPX file contains a no-go area with fewer than 3 points +- **THEN** the parser rejects it diff --git a/openspec/specs/observability/spec.md b/openspec/specs/observability/spec.md index 88ae7ca..ae48ccc 100644 --- a/openspec/specs/observability/spec.md +++ b/openspec/specs/observability/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Health endpoints, Prometheus metrics, structured logging, Grafana dashboards, and alerting for both apps and the flagship instance. + ## Requirements ### Requirement: Health endpoints diff --git a/openspec/specs/planner-journal-handoff/spec.md b/openspec/specs/planner-journal-handoff/spec.md index 900a2a0..ec2bf29 100644 --- a/openspec/specs/planner-journal-handoff/spec.md +++ b/openspec/specs/planner-journal-handoff/spec.md @@ -1,7 +1,11 @@ -## MODIFIED Requirements +## Purpose + +Round-trip GPX exchange between Planner and Journal, including JWT-scoped callbacks for saving routes and GPX reimport in the Planner. + +## Requirements ### Requirement: Export Plan reimport -The "Export Plan" GPX can now be reimported directly in the planner via the file upload UI, completing the round-trip without needing the journal. +The Planner SHALL support reimporting an exported plan GPX via the file upload UI, completing the round-trip without needing the journal. #### Scenario: Reimport exported plan - **WHEN** a user exports a plan and later imports it via the planner's GPX upload diff --git a/openspec/specs/planner-session/spec.md b/openspec/specs/planner-session/spec.md index 9026a2b..e839e41 100644 --- a/openspec/specs/planner-session/spec.md +++ b/openspec/specs/planner-session/spec.md @@ -1,7 +1,11 @@ -## MODIFIED Requirements +## Purpose -### Requirement: Session initialization -Sessions can now be initialized from a GPX file upload in addition to URL parameters and the journal handoff. +Collaborative planning session management with Yjs CRDT synchronization, supporting initialization from URL parameters, journal handoff, and GPX file upload. + +## Requirements + +### Requirement: Session initialization from GPX +The Planner SHALL support initializing sessions from a GPX file upload in addition to URL parameters and the journal handoff. #### Scenario: Session created from GPX upload - **WHEN** a session is created via GPX file upload on the home page diff --git a/openspec/specs/rate-limiting/spec.md b/openspec/specs/rate-limiting/spec.md index d9e8681..0e81957 100644 --- a/openspec/specs/rate-limiting/spec.md +++ b/openspec/specs/rate-limiting/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Request rate limiting for Planner session creation and BRouter API calls to prevent abuse. + ## Requirements ### Requirement: Session creation rate limit diff --git a/openspec/specs/route-coloring/spec.md b/openspec/specs/route-coloring/spec.md index a837197..be460ea 100644 --- a/openspec/specs/route-coloring/spec.md +++ b/openspec/specs/route-coloring/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Multi-mode route visualization (plain, elevation gradient, surface type) with session-synced color mode selection. + ## Requirements ### Requirement: Route color modes diff --git a/openspec/specs/route-drag-reshape/spec.md b/openspec/specs/route-drag-reshape/spec.md index 676ecb5..a5002c7 100644 --- a/openspec/specs/route-drag-reshape/spec.md +++ b/openspec/specs/route-drag-reshape/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Ghost marker drag interaction for reshaping routes by inserting new waypoints mid-segment. + ## Requirements ### Requirement: Ghost marker on route hover diff --git a/openspec/specs/route-management/spec.md b/openspec/specs/route-management/spec.md index b911f1e..df14b4b 100644 --- a/openspec/specs/route-management/spec.md +++ b/openspec/specs/route-management/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Route CRUD operations, GPX import/export, sequential versioning, PostGIS spatial storage, and route metadata in the Journal app. + +## Requirements ### Requirement: Create route The Journal SHALL allow authenticated users to create a new route with a name and optional description. diff --git a/openspec/specs/route-preview/spec.md b/openspec/specs/route-preview/spec.md index 6b4a297..52c6bcf 100644 --- a/openspec/specs/route-preview/spec.md +++ b/openspec/specs/route-preview/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Map thumbnails on route and activity list pages, and interactive maps with zoom and layer switching on detail pages. + +## Requirements ### Requirement: Route map preview on list pages Route and activity list pages SHALL show a small map thumbnail for each item that has geometry. diff --git a/openspec/specs/route-splitting/spec.md b/openspec/specs/route-splitting/spec.md index 95cb2f1..54e1556 100644 --- a/openspec/specs/route-splitting/spec.md +++ b/openspec/specs/route-splitting/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Waypoint insertion by clicking the ghost marker on the route polyline, splitting a segment into two. + ## Requirements ### Requirement: Insert waypoint by clicking on route diff --git a/openspec/specs/secret-management/spec.md b/openspec/specs/secret-management/spec.md index 3d64bb1..d31b9c2 100644 --- a/openspec/specs/secret-management/spec.md +++ b/openspec/specs/secret-management/spec.md @@ -1,3 +1,7 @@ +## Purpose + +SOPS-encrypted secrets stored in the repository, split into app and infra files, decryptable with a single age key at deploy time. + ## Requirements ### Requirement: Encrypted secrets in repository diff --git a/openspec/specs/security-hardening/spec.md b/openspec/specs/security-hardening/spec.md index 874ec46..35b4e7e 100644 --- a/openspec/specs/security-hardening/spec.md +++ b/openspec/specs/security-hardening/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Security headers, scanner path blocking, secret scanning, dependency auditing, non-root containers, and vulnerability disclosure policy. + ## Requirements ### Requirement: Security response headers diff --git a/openspec/specs/session-notes/spec.md b/openspec/specs/session-notes/spec.md index dac0808..1c206c2 100644 --- a/openspec/specs/session-notes/spec.md +++ b/openspec/specs/session-notes/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Collaborative text notes in Planner sessions, synced in real-time via Yjs. + ## Requirements ### Requirement: Collaborative session notes diff --git a/openspec/specs/shared-packages/spec.md b/openspec/specs/shared-packages/spec.md index ec7aa45..960cc45 100644 --- a/openspec/specs/shared-packages/spec.md +++ b/openspec/specs/shared-packages/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Shared TypeScript packages (@trails-cool/types, gpx, map, ui, i18n) used by both Planner and Journal apps. + +## Requirements ### Requirement: Shared types package The `@trails-cool/types` package SHALL export TypeScript interfaces for Route, Activity, Waypoint, RouteVersion, and RouteMetadata used by both apps. diff --git a/openspec/specs/transactional-emails/spec.md b/openspec/specs/transactional-emails/spec.md index 4e50bee..3edd696 100644 --- a/openspec/specs/transactional-emails/spec.md +++ b/openspec/specs/transactional-emails/spec.md @@ -1,3 +1,7 @@ +## Purpose + +Transactional email sending with HTML and plain-text templates for magic links and welcome messages, using SMTP in production and console logging in dev. + ## Requirements ### Requirement: Email sending interface diff --git a/openspec/specs/wahoo-import/spec.md b/openspec/specs/wahoo-import/spec.md index 2b34eff..881905f 100644 --- a/openspec/specs/wahoo-import/spec.md +++ b/openspec/specs/wahoo-import/spec.md @@ -1,4 +1,8 @@ -## ADDED Requirements +## Purpose + +Provider-agnostic activity sync framework with Wahoo as the first provider, supporting OAuth connection, webhook-based automatic sync, manual import, and FIT-to-GPX conversion. + +## Requirements ### Requirement: Provider-agnostic sync framework The system SHALL provide a common interface for external activity sync providers. diff --git a/package.json b/package.json index 8b5c2c2..0a2fe43 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "overrides": { "picomatch@>=4.0.0 <4.0.4": "4.0.4", "brace-expansion@>=4.0.0 <5.0.5": "5.0.5", - "path-to-regexp@<0.1.13": "0.1.13" + "path-to-regexp@<0.1.13": "0.1.13", + "lodash@<4.18.1": "4.18.1" }, "onlyBuiltDependencies": [ "@sentry/cli", @@ -35,10 +36,10 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", - "@playwright/test": "^1.58.2", - "@react-router/dev": "^7.13.2", - "@react-router/node": "^7.13.2", - "@react-router/serve": "^7.13.2", + "@playwright/test": "^1.59.1", + "@react-router/dev": "catalog:", + "@react-router/node": "catalog:", + "@react-router/serve": "catalog:", "@sentry/vite-plugin": "^5.1.1", "@tailwindcss/vite": "^4.2.2", "@testing-library/jest-dom": "^6.9.1", @@ -50,25 +51,25 @@ "drizzle-kit": "^0.31.10", "drizzle-orm": "^0.45.2", "drizzle-postgis": "^1.1.1", - "eslint": "^10.1.0", + "eslint": "^10.2.0", "eslint-config-prettier": "^10.1.8", "fit-file-parser": "^2.3.3", - "i18next": "^26.0.1", + "i18next": "^26.0.3", "i18next-browser-languagedetector": "^8.2.1", "jsdom": "^29.0.1", "leaflet": "^1.9.4", "linkedom": "^0.18.12", - "playwright": "^1.58.2", - "postgres": "^3.4.8", + "playwright": "^1.59.1", + "postgres": "catalog:", "prettier": "^3.8.1", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-i18next": "^17.0.1", + "react-i18next": "^17.0.2", "react-leaflet": "^5.0.0", - "react-router": "^7.13.2", + "react-router": "catalog:", "tailwindcss": "^4.2.2", - "turbo": "^2.8.21", - "typescript-eslint": "^8.57.2", + "turbo": "^2.9.3", + "typescript-eslint": "^8.58.0", "vite": "catalog:", "vitest": "^4.1.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 83947ff..f21b4a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,14 +7,14 @@ settings: catalogs: default: '@react-router/dev': - specifier: ^7.13.2 - version: 7.13.2 + specifier: ^7.14.0 + version: 7.14.0 '@react-router/node': - specifier: ^7.13.2 - version: 7.13.2 + specifier: ^7.14.0 + version: 7.14.0 '@react-router/serve': - specifier: ^7.13.2 - version: 7.13.2 + specifier: ^7.14.0 + version: 7.14.0 '@tailwindcss/vite': specifier: ^4.1.7 version: 4.2.2 @@ -28,8 +28,8 @@ catalogs: specifier: ^0.45.2 version: 0.45.2 postgres: - specifier: ^3.4.0 - version: 3.4.8 + specifier: ^3.4.9 + version: 3.4.9 react: specifier: ^19.1.0 version: 19.2.4 @@ -37,8 +37,8 @@ catalogs: specifier: ^19.1.0 version: 19.2.4 react-router: - specifier: ^7.13.2 - version: 7.13.2 + specifier: ^7.14.0 + version: 7.14.0 tailwindcss: specifier: ^4.1.7 version: 4.2.2 @@ -46,13 +46,14 @@ catalogs: specifier: ^5.8.3 version: 5.9.3 vite: - specifier: ^6.0.0 - version: 6.4.1 + specifier: ^6.4.2 + version: 6.4.2 overrides: picomatch@>=4.0.0 <4.0.4: 4.0.4 brace-expansion@>=4.0.0 <5.0.5: 5.0.5 path-to-regexp@<0.1.13: 0.1.13 + lodash@<4.18.1: 4.18.1 importers: @@ -60,25 +61,25 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) '@playwright/test': - specifier: ^1.58.2 - version: 1.58.2 + specifier: ^1.59.1 + version: 1.59.1 '@react-router/dev': - specifier: ^7.13.2 - version: 7.13.2(@react-router/serve@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + specifier: 'catalog:' + version: 7.14.0(@react-router/serve@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@react-router/node': - specifier: ^7.13.2 - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + specifier: 'catalog:' + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@react-router/serve': - specifier: ^7.13.2 - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + specifier: 'catalog:' + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@sentry/vite-plugin': specifier: ^5.1.1 version: 5.1.1(rollup@4.60.0) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 4.2.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -102,22 +103,22 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.8) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.9) drizzle-postgis: specifier: ^1.1.1 version: 1.1.1 eslint: - specifier: ^10.1.0 - version: 10.1.0(jiti@2.6.1) + specifier: ^10.2.0 + version: 10.2.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) fit-file-parser: specifier: ^2.3.3 version: 2.3.3 i18next: - specifier: ^26.0.1 - version: 26.0.1(typescript@5.9.3) + specifier: ^26.0.3 + version: 26.0.3(typescript@5.9.3) i18next-browser-languagedetector: specifier: ^8.2.1 version: 8.2.1 @@ -131,11 +132,11 @@ importers: specifier: ^0.18.12 version: 0.18.12 playwright: - specifier: ^1.58.2 - version: 1.58.2 + specifier: ^1.59.1 + version: 1.59.1 postgres: - specifier: ^3.4.8 - version: 3.4.8 + specifier: 'catalog:' + version: 3.4.9 prettier: specifier: ^3.8.1 version: 3.8.1 @@ -146,44 +147,44 @@ importers: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) react-i18next: - specifier: ^17.0.1 - version: 17.0.1(i18next@26.0.1(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + specifier: ^17.0.2 + version: 17.0.2(i18next@26.0.3(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-leaflet: specifier: ^5.0.0 version: 5.0.0(leaflet@1.9.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-router: - specifier: ^7.13.2 - version: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tailwindcss: specifier: ^4.2.2 version: 4.2.2 turbo: - specifier: ^2.8.21 - version: 2.8.21 + specifier: ^2.9.3 + version: 2.9.3 typescript-eslint: - specifier: ^8.57.2 - version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.58.0 + version: 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + version: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) vitest: specifier: ^4.1.2 - version: 4.1.2(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(jsdom@29.0.1)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 4.1.2(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(jsdom@29.0.1)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) apps/journal: dependencies: '@react-router/node': specifier: 'catalog:' - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@react-router/serve': specifier: 'catalog:' - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@sentry/node': - specifier: ^10.46.0 - version: 10.46.0 + specifier: ^10.47.0 + version: 10.47.0 '@sentry/react': - specifier: ^10.46.0 - version: 10.46.0(react@19.2.4) + specifier: ^10.47.0 + version: 10.47.0(react@19.2.4) '@simplewebauthn/browser': specifier: ^13.3.0 version: 13.3.0 @@ -210,16 +211,16 @@ importers: version: link:../../packages/ui drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.8) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.9) isbot: - specifier: ^5.1.0 - version: 5.1.36 + specifier: ^5.1.37 + version: 5.1.37 jose: specifier: ^6.2.2 version: 6.2.2 nodemailer: - specifier: ^8.0.4 - version: 8.0.4 + specifier: ^8.0.5 + version: 8.0.5 pino: specifier: ^10.3.1 version: 10.3.1 @@ -234,17 +235,17 @@ importers: version: 19.2.4(react@19.2.4) react-router: specifier: 'catalog:' - version: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) devDependencies: '@react-router/dev': specifier: 'catalog:' - version: 7.13.2(@react-router/serve@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 7.14.0(@react-router/serve@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@simplewebauthn/types': specifier: ^12.0.0 version: 12.0.0 '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 4.2.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@types/nodemailer': specifier: ^8.0.0 version: 8.0.0 @@ -256,7 +257,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-basic-ssl': specifier: ^2.3.0 - version: 2.3.0(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 2.3.0(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) pino-pretty: specifier: ^13.1.3 version: 13.1.3 @@ -268,7 +269,7 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + version: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) apps/planner: dependencies: @@ -277,16 +278,16 @@ importers: version: 2.19.2(leaflet@1.9.4) '@react-router/node': specifier: 'catalog:' - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@react-router/serve': specifier: 'catalog:' - version: 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + version: 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@sentry/node': - specifier: ^10.46.0 - version: 10.46.0 + specifier: ^10.47.0 + version: 10.47.0 '@sentry/react': - specifier: ^10.46.0 - version: 10.46.0(react@19.2.4) + specifier: ^10.47.0 + version: 10.47.0(react@19.2.4) '@trails-cool/db': specifier: workspace:* version: link:../../packages/db @@ -307,10 +308,10 @@ importers: version: link:../../packages/ui drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.8) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.9) isbot: - specifier: ^5.1.0 - version: 5.1.36 + specifier: ^5.1.37 + version: 5.1.37 lib0: specifier: ^0.2.117 version: 0.2.117 @@ -328,7 +329,7 @@ importers: version: 19.2.4(react@19.2.4) react-router: specifier: 'catalog:' - version: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ws: specifier: ^8.20.0 version: 8.20.0 @@ -344,10 +345,10 @@ importers: devDependencies: '@react-router/dev': specifier: 'catalog:' - version: 7.13.2(@react-router/serve@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 7.14.0(@react-router/serve@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 4.2.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@types/react': specifier: 'catalog:' version: 19.2.14 @@ -368,16 +369,16 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + version: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) packages/db: dependencies: drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.8) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.9) postgres: specifier: 'catalog:' - version: 3.4.8 + version: 3.4.9 packages/gpx: dependencies: @@ -389,13 +390,13 @@ importers: dependencies: i18next: specifier: '>=26' - version: 26.0.1(typescript@5.9.3) + version: 26.0.3(typescript@5.9.3) react: specifier: '>=18' version: 19.2.4 react-i18next: specifier: '>=17' - version: 17.0.1(i18next@26.0.1(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 17.0.2(i18next@26.0.3(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) packages/map: dependencies: @@ -1070,16 +1071,16 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.23.3': - resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + '@eslint/config-array@0.23.4': + resolution: {integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.3': - resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + '@eslint/config-helpers@0.5.4': + resolution: {integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.1': - resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + '@eslint/core@1.2.0': + resolution: {integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@10.0.1': @@ -1091,12 +1092,12 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.3': - resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + '@eslint/object-schema@3.0.4': + resolution: {integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.6.1': - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + '@eslint/plugin-kit@0.7.0': + resolution: {integrity: sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@exodus/bytes@1.15.0': @@ -1108,8 +1109,8 @@ packages: '@noble/hashes': optional: true - '@fastify/otel@0.17.1': - resolution: {integrity: sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg==} + '@fastify/otel@0.18.0': + resolution: {integrity: sha512-3TASCATfw+ctICSb4ymrv7iCm0qJ0N9CarB+CZ7zIJ7KqNbwI5JjyDL1/sxoC0ccTO1Zyd1iQ+oqncPg5FJXaA==} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -1168,12 +1169,8 @@ packages: resolution: {integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==} engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.213.0': - resolution: {integrity: sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + '@opentelemetry/api-logs@0.214.0': + resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.1': @@ -1186,146 +1183,140 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.6.0': - resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.6.1': resolution: {integrity: sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/instrumentation-amqplib@0.60.0': - resolution: {integrity: sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg==} + '@opentelemetry/instrumentation-amqplib@0.61.0': + resolution: {integrity: sha512-mCKoyTGfRNisge4br0NpOFSy2Z1NnEW8hbCJdUDdJFHrPqVzc4IIBPA/vX0U+LUcQqrQvJX+HMIU0dbDRe0i0Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-connect@0.56.0': - resolution: {integrity: sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw==} + '@opentelemetry/instrumentation-connect@0.57.0': + resolution: {integrity: sha512-FMEBChnI4FLN5TE9DHwfH7QpNir1JzXno1uz/TAucVdLCyrG0jTrKIcNHt/i30A0M2AunNBCkcd8Ei26dIPKdg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-dataloader@0.30.0': - resolution: {integrity: sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg==} + '@opentelemetry/instrumentation-dataloader@0.31.0': + resolution: {integrity: sha512-f654tZFQXS5YeLDNb9KySrwtg7SnqZN119FauD7acBoTzuLduaiGTNz88ixcVSOOMGZ+EjJu/RFtx5klObC95g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-express@0.61.0': - resolution: {integrity: sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ==} + '@opentelemetry/instrumentation-express@0.62.0': + resolution: {integrity: sha512-Tvx+vgAZKEQxU3Rx+xWLiR0mLxHwmk69/8ya04+VsV9WYh8w6Lhx5hm5yAMvo1wy0KqWgFKBLwSeo3sHCwdOww==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fs@0.32.0': - resolution: {integrity: sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ==} + '@opentelemetry/instrumentation-fs@0.33.0': + resolution: {integrity: sha512-sCZWXGalQ01wr3tAhSR9ucqFJ0phidpAle6/17HVjD6gN8FLmZMK/8sKxdXYHy3PbnlV1P4zeiSVFNKpbFMNLA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-generic-pool@0.56.0': - resolution: {integrity: sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg==} + '@opentelemetry/instrumentation-generic-pool@0.57.0': + resolution: {integrity: sha512-orhmlaK+ZIW9hKU+nHTbXrCSXZcH83AescTqmpamHRobRmYSQwRbD0a1odc0yAzuzOtxYiHiXAnpnIpaSSY7Ow==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-graphql@0.61.0': - resolution: {integrity: sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew==} + '@opentelemetry/instrumentation-graphql@0.62.0': + resolution: {integrity: sha512-3YNuLVPUxafXkH1jBAbGsKNsP3XVzcFDhCDCE3OqBwCwShlqQbLMRMFh1T/d5jaVZiGVmSsfof+ICKD2iOV8xg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-hapi@0.59.0': - resolution: {integrity: sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA==} + '@opentelemetry/instrumentation-hapi@0.60.0': + resolution: {integrity: sha512-aNljZKYrEa7obLAxd1bCEDxF7kzCLGXTuTJZ8lMR9rIVEjmuKBXN1gfqpm/OB//Zc2zP4iIve1jBp7sr3mQV6w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.213.0': - resolution: {integrity: sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA==} + '@opentelemetry/instrumentation-http@0.214.0': + resolution: {integrity: sha512-FlkDhZDRjDJDcO2LcSCtjRpkal1NJ8y0fBqBhTvfAR3JSYY2jAIj1kSS5IjmEBt4c3aWv+u/lqLuoCDrrKCSKg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-ioredis@0.61.0': - resolution: {integrity: sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg==} + '@opentelemetry/instrumentation-ioredis@0.62.0': + resolution: {integrity: sha512-ZYt//zcPve8qklaZX+5Z4MkU7UpEkFRrxsf2cnaKYBitqDnsCN69CPAuuMOX6NYdW2rG9sFy7V/QWtBlP5XiNQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-kafkajs@0.22.0': - resolution: {integrity: sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA==} + '@opentelemetry/instrumentation-kafkajs@0.23.0': + resolution: {integrity: sha512-4K+nVo+zI+aDz0Z85SObwbdixIbzS9moIuKJaYsdlzcHYnKOPtB7ya8r8Ezivy/GVIBHiKJVq4tv+BEkgOMLaQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-knex@0.57.0': - resolution: {integrity: sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw==} + '@opentelemetry/instrumentation-knex@0.58.0': + resolution: {integrity: sha512-Hc/o8fSsaWxZ8r1Yw4rNDLwTpUopTf4X32y4W6UhlHmW8Wizz8wfhgOKIelSeqFVTKBBPIDUOsQWuIMxBmu8Bw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-koa@0.61.0': - resolution: {integrity: sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ==} + '@opentelemetry/instrumentation-koa@0.62.0': + resolution: {integrity: sha512-uVip0VuGUQXZ+vFxkKxAUNq8qNl+VFlyHDh/U6IQ8COOEDfbEchdaHnpFrMYF3psZRUuoSIgb7xOeXj00RdwDA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.9.0 - '@opentelemetry/instrumentation-lru-memoizer@0.57.0': - resolution: {integrity: sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA==} + '@opentelemetry/instrumentation-lru-memoizer@0.58.0': + resolution: {integrity: sha512-6grM3TdMyHzlGY1cUA+mwoPueB1F3dYKgKtZIH6jOFXqfHAByyLTc+6PFjGM9tKh52CFBJaDwodNlL/Td39z7Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongodb@0.66.0': - resolution: {integrity: sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw==} + '@opentelemetry/instrumentation-mongodb@0.67.0': + resolution: {integrity: sha512-1WJp5N1lYfHq2IhECOTewFs5Tf2NfUOwQRqs/rZdXKTezArMlucxgzAaqcgp3A3YREXopXTpXHsxZTGHjNhMdQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongoose@0.59.0': - resolution: {integrity: sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw==} + '@opentelemetry/instrumentation-mongoose@0.60.0': + resolution: {integrity: sha512-8BahAZpKsOoc+lrZGb7Ofn4g3z8qtp5IxDfvAVpKXsEheQN7ONMH5djT5ihy6yf8yyeQJGS0gXFfpEAEeEHqQg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql2@0.59.0': - resolution: {integrity: sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw==} + '@opentelemetry/instrumentation-mysql2@0.60.0': + resolution: {integrity: sha512-m/5d3bxQALllCzezYDk/6vajh0tj5OijMMvOZGr+qN1NMXm1dzMNwyJ0gNZW7Fo3YFRyj/jJMxIw+W7d525dlw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql@0.59.0': - resolution: {integrity: sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw==} + '@opentelemetry/instrumentation-mysql@0.60.0': + resolution: {integrity: sha512-08pO8GFPEIz2zquKDGteBZDNmwketdgH8hTe9rVYgW9kCJXq1Psj3wPQGx+VaX4ZJKCfPeoLMYup9+cxHvZyVQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pg@0.65.0': - resolution: {integrity: sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ==} + '@opentelemetry/instrumentation-pg@0.66.0': + resolution: {integrity: sha512-KxfLGXBb7k2ueaPJfq2GXBDXBly8P+SpR/4Mj410hhNgmQF3sCqwXvUBQxZQkDAmsdBAoenM+yV1LhtsMRamcA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-redis@0.61.0': - resolution: {integrity: sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q==} + '@opentelemetry/instrumentation-redis@0.62.0': + resolution: {integrity: sha512-y3pPpot7WzR/8JtHcYlTYsyY8g+pbFhAqbwAuG5bLPnR6v6pt1rQc0DpH0OlGP/9CZbWBP+Zhwp9yFoygf/ZXQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-tedious@0.32.0': - resolution: {integrity: sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA==} + '@opentelemetry/instrumentation-tedious@0.33.0': + resolution: {integrity: sha512-Q6WQwAD01MMTub31GlejoiFACYNw26J426wyjvU7by7fDIr2nZXNW4vhTGs7i7F0TnXBO3xN688g1tdUgYwJ5w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-undici@0.23.0': - resolution: {integrity: sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg==} + '@opentelemetry/instrumentation-undici@0.24.0': + resolution: {integrity: sha512-oKzZ3uvqP17sV0EsoQcJgjEfIp0kiZRbYu/eD8p13Cbahumf8lb/xpYeNr/hfAJ4owzEtIDcGIjprfLcYbIKBQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.7.0 @@ -1342,8 +1333,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.213.0': - resolution: {integrity: sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w==} + '@opentelemetry/instrumentation@0.214.0': + resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -1414,13 +1405,13 @@ packages: '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} - '@playwright/test@1.58.2': - resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} + '@playwright/test@1.59.1': + resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} engines: {node: '>=18'} hasBin: true - '@prisma/instrumentation@7.4.2': - resolution: {integrity: sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg==} + '@prisma/instrumentation@7.6.0': + resolution: {integrity: sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ==} peerDependencies: '@opentelemetry/api': ^1.8 @@ -1431,17 +1422,17 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@react-router/dev@7.13.2': - resolution: {integrity: sha512-8Lgf+WCEIPDhp22YB3fyoiWnNyM39sjkfWnSxAwy+Sg83OHxnQFQg0OK1oPM9lm1n/hxJe4lLYOPNwDSyeGiog==} + '@react-router/dev@7.14.0': + resolution: {integrity: sha512-/1ElF4lDTEIZ/rbEdlj6MmRY9ERRDyaTswWes+3pbqEKF2r/ixSzACueHWIfV9ULg/x5/weCvSexDD9f16ObwA==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - '@react-router/serve': ^7.13.2 - '@vitejs/plugin-rsc': ~0.5.7 - react-router: ^7.13.2 + '@react-router/serve': ^7.14.0 + '@vitejs/plugin-rsc': ~0.5.21 + react-router: ^7.14.0 react-server-dom-webpack: ^19.2.3 typescript: ^5.1.0 - vite: ^5.1.0 || ^6.0.0 || ^7.0.0 + vite: ^5.1.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 wrangler: ^3.28.2 || ^4.0.0 peerDependenciesMeta: '@react-router/serve': @@ -1455,33 +1446,33 @@ packages: wrangler: optional: true - '@react-router/express@7.13.2': - resolution: {integrity: sha512-OuhenOg3LmCLT23+WA6CU/nIyhGv0/3kmyqpQuXxearj6Gbn1ufI+mkejFWPXsNJf+/y1ttY6P6XL8PzNX5E8w==} + '@react-router/express@7.14.0': + resolution: {integrity: sha512-isrPotskov4KJ/v0GvTACaXWua/3iPs71717iZZfxix77MqVo1uW7jtuXc8ChJRRWSHZOv2NFvIOYCUFXzmNJA==} engines: {node: '>=20.0.0'} peerDependencies: express: ^4.17.1 || ^5 - react-router: 7.13.2 + react-router: 7.14.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - '@react-router/node@7.13.2': - resolution: {integrity: sha512-1q0v1gclPga2mNQ7Q+MLuLdEPRpDefAmz25jOlrEz+jSyYkaFt9qbSdkTUPw/QIg/DDnnT3QV8lhgr6r5iIAOA==} + '@react-router/node@7.14.0': + resolution: {integrity: sha512-ZxJJLE4PX29+cHLacH3pmCHMCJQz/1dpEgFQtm8Pst2IP5GI6897rShYylLZbJ7jRBJSkskHn+opSEh+o6mmOA==} engines: {node: '>=20.0.0'} peerDependencies: - react-router: 7.13.2 + react-router: 7.14.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - '@react-router/serve@7.13.2': - resolution: {integrity: sha512-H/clM2tMw7daRd7bTM0kYYim4ZLrcWd30DY+R/xu8h2t2YvdfLAfHD0GfqGu3Ds8yAOrWFqH5Ly7BM7jk7fvCg==} + '@react-router/serve@7.14.0': + resolution: {integrity: sha512-setPBP5+ci0vwx+ufGZl0inOwsCoGU1ssOJcW4fHo+Pb6GbbMTrbCOVO6yQkDsTrQju+iStp3d7FTxLHphLhcA==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - react-router: 7.13.2 + react-router: 7.14.0 '@remix-run/node-fetch-server@0.13.0': resolution: {integrity: sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA==} @@ -1611,28 +1602,28 @@ packages: cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@10.46.0': - resolution: {integrity: sha512-WB1gBT9G13V02ekZ6NpUhoI1aGHV2eNfjEPthkU2bGBvFpQKnstwzjg7waIRGR7cu+YSW2Q6UI6aQLgBeOPD1g==} + '@sentry-internal/browser-utils@10.47.0': + resolution: {integrity: sha512-bVFRAeJWMBcBCvJKIFCMJ1/yQToL4vPGqfmlnDZeypcxkqUDKQ/Y3ziLHXoDL2sx0lagcgU2vH1QhCQ67Aujjw==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.46.0': - resolution: {integrity: sha512-c4pI/z9nZCQXe9GYEw/hE/YTY9AxGBp8/wgKI+T8zylrN35SGHaXv63szzE1WbI8lacBY8lBF7rstq9bQVCaHw==} + '@sentry-internal/feedback@10.47.0': + resolution: {integrity: sha512-pdvMmi4dQpX5S/vAAzrhHPIw3T3HjUgDNgUiCBrlp7N9/6zGO2gNPhUnNekP+CjgI/z0rvf49RLqlDenpNrMOg==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.46.0': - resolution: {integrity: sha512-ub314MWUsekVCuoH0/HJbbimlI24SkV745UW2pj9xRbxOAEf1wjkmIzxKrMDbTgJGuEunug02XZVdJFJUzOcDw==} + '@sentry-internal/replay-canvas@10.47.0': + resolution: {integrity: sha512-A5OY8friSe6g8WAK4L8IeOPiEd9D3Ps40DzRH5j2f6SUja0t90mKMvHRcRf8zq0d4BkdB+JM7tjOkwxpuv8heA==} engines: {node: '>=18'} - '@sentry-internal/replay@10.46.0': - resolution: {integrity: sha512-JBsWeXG6bRbxBFK8GzWymWGOB9QE7Kl57BeF3jzgdHTuHSWZ2mRnAmb1K05T4LU+gVygk6yW0KmdC8Py9Qzg9A==} + '@sentry-internal/replay@10.47.0': + resolution: {integrity: sha512-ScdovxP7hJxgMt70+7hFvwT02GIaIUAxdEM/YPsayZBeCoAukPW8WiwztJfoKtsfPyKJ5A6f0H3PIxTPcA9Row==} engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@5.1.1': resolution: {integrity: sha512-x2wEpBHwsTyTF2rWsLKJlzrRF1TTIGOfX+ngdE+Yd5DBkoS58HwQv824QOviPGQRla4/ypISqAXzjdDPL/zalg==} engines: {node: '>= 18'} - '@sentry/browser@10.46.0': - resolution: {integrity: sha512-80DmGlTk5Z2/OxVOzLNxwolMyouuAYKqG8KUcoyintZqHbF6kO1RulI610HmyUt3OagKeBCqt9S7w0VIfCRL+Q==} + '@sentry/browser@10.47.0': + resolution: {integrity: sha512-rC0agZdxKA5XWfL4VwPOr/rJMogXDqZgnVzr93YWpFn9DMZT/7LzxSJVPIJwRUjx3bFEby3PcTa3YaX7pxm1AA==} engines: {node: '>=18'} '@sentry/bundler-plugin-core@5.1.1': @@ -1691,17 +1682,18 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@10.46.0': - resolution: {integrity: sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==} + '@sentry/core@10.47.0': + resolution: {integrity: sha512-nsYRAx3EWezDut+Zl+UwwP07thh9uY7CfSAi2whTdcJl5hu1nSp2z8bba7Vq/MGbNLnazkd3A+GITBEML924JA==} engines: {node: '>=18'} - '@sentry/node-core@10.46.0': - resolution: {integrity: sha512-gwLGXfkzmiCmUI1VWttyoZBaVp1ItpDKc8AV2mQblWPQGdLSD0c6uKV/FkU291yZA3rXsrLXVwcWoibwnjE2vw==} + '@sentry/node-core@10.47.0': + resolution: {integrity: sha512-qv6LsqHbkQmd0aQEUox/svRSz26J+l4gGjFOUNEay2armZu9XLD+Ct89jpFgZD5oIPNAj2jraodTRqydXiwS5w==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0 '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' '@opentelemetry/instrumentation': '>=0.57.1 <1' '@opentelemetry/resources': ^1.30.1 || ^2.1.0 '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 @@ -1713,6 +1705,8 @@ packages: optional: true '@opentelemetry/core': optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true '@opentelemetry/instrumentation': optional: true '@opentelemetry/resources': @@ -1722,12 +1716,12 @@ packages: '@opentelemetry/semantic-conventions': optional: true - '@sentry/node@10.46.0': - resolution: {integrity: sha512-vF+7FrUXEtmYWuVcnvBjlWKeyLw/kwHpwnGj9oUmO/a2uKjDmUr53ZVcapggNxCjivavGYr9uHOY64AGdeUyzA==} + '@sentry/node@10.47.0': + resolution: {integrity: sha512-R+btqPepv88o635G6HtVewLjqCLUedBg5HBs7Nq1qbbKvyti01uArUF2f+3DsLenk5B9LUNiRlE+frZA44Ahmw==} engines: {node: '>=18'} - '@sentry/opentelemetry@10.46.0': - resolution: {integrity: sha512-dzzV2ovruGsx9jzusGGr6cNPvMgYRu2BIrF8aMZ3rkQ1OpPJjPStqtA1l1fw0aoxHOxIjFU7ml4emF+xdmMl3g==} + '@sentry/opentelemetry@10.47.0': + resolution: {integrity: sha512-f6Hw2lrpCjlOksiosP0Z2jK/+l+21SIdoNglVeG/sttMyx8C8ywONKh0Ha50sFsvB1VaB8n94RKzzf3hkh9V3g==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -1736,8 +1730,8 @@ packages: '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 '@opentelemetry/semantic-conventions': ^1.39.0 - '@sentry/react@10.46.0': - resolution: {integrity: sha512-Rb1S+9OuUPVwsz7GWnQ6Kgf3azbsseUymIegg3JZHNcW/fM1nPpaljzTBnuineia113DH0pgMBcdrrZDLaosFQ==} + '@sentry/react@10.47.0': + resolution: {integrity: sha512-ZtJV6xxF8jUVE9e3YQUG3Do0XapG1GjniyLyqMPgN6cNvs/HaRJODf7m60By+VGqcl5XArEjEPTvx8CdPUXDfA==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x @@ -1879,33 +1873,33 @@ packages: '@types/react-dom': optional: true - '@turbo/darwin-64@2.8.21': - resolution: {integrity: sha512-kfGoM0Iw8ZNZpbds+4IzOe0hjvHldqJwUPRAjXJi3KBxg/QOZL95N893SRoMtf2aJ+jJ3dk32yPkp8rvcIjP9g==} + '@turbo/darwin-64@2.9.3': + resolution: {integrity: sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.8.21': - resolution: {integrity: sha512-o9HEflxUEyr987x0cTUzZBhDOyL6u95JmdmlkH2VyxAw7zq2sdtM5e72y9ufv2N5SIoOBw1fVn9UES5VY5H6vQ==} + '@turbo/darwin-arm64@2.9.3': + resolution: {integrity: sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.8.21': - resolution: {integrity: sha512-uTxlCcXWy5h1fSSymP8XSJ+AudzEHMDV3IDfKX7+DGB8kgJ+SLoTUAH7z4OFA7I/l2sznz0upPdbNNZs91YMag==} + '@turbo/linux-64@2.9.3': + resolution: {integrity: sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.8.21': - resolution: {integrity: sha512-cdHIcxNcihHHkCHp0Y4Zb60K4Qz+CK4xw1gb6s/t/9o4SMeMj+hTBCtoW6QpPnl9xPYmxuTou8Zw6+cylTnREg==} + '@turbo/linux-arm64@2.9.3': + resolution: {integrity: sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.8.21': - resolution: {integrity: sha512-/iBj4OzbqEY8CX+eaeKbBTMZv2CLXNrt0692F7HnK7LcyYwyDecaAiSET6ZzL4opT7sbwkKvzAC/fhqT3Quu1A==} + '@turbo/windows-64@2.9.3': + resolution: {integrity: sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.8.21': - resolution: {integrity: sha512-95tMA/ZbIidJFUUtkmqioQ1gf3n3I1YbRP3ZgVdWTVn2qVbkodcIdGXBKRHHrIbRsLRl99SiHi/L7IxhpZDagQ==} + '@turbo/windows-arm64@2.9.3': + resolution: {integrity: sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ==} cpu: [arm64] os: [win32] @@ -1984,9 +1978,6 @@ packages: '@types/mysql@2.15.27': resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} - '@types/node@25.5.0': - resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} - '@types/node@25.5.2': resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} @@ -2013,63 +2004,63 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.57.2': - resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + '@typescript-eslint/eslint-plugin@8.58.0': + resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.2 + '@typescript-eslint/parser': ^8.58.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.2': - resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + '@typescript-eslint/parser@8.58.0': + resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.2': - resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + '@typescript-eslint/project-service@8.58.0': + resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.2': - resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + '@typescript-eslint/scope-manager@8.58.0': + resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.2': - resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + '@typescript-eslint/tsconfig-utils@8.58.0': + resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.2': - resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + '@typescript-eslint/type-utils@8.58.0': + resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.2': - resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.2': - resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + '@typescript-eslint/typescript-estree@8.58.0': + resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.2': - resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + '@typescript-eslint/utils@8.58.0': + resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.2': - resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + '@typescript-eslint/visitor-keys@8.58.0': + resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-basic-ssl@2.3.0': @@ -2577,8 +2568,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.1.0: - resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} + eslint@10.2.0: + resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2768,8 +2759,8 @@ packages: i18next-browser-languagedetector@8.2.1: resolution: {integrity: sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==} - i18next@26.0.1: - resolution: {integrity: sha512-vtz5sXU4+nkCm8yEU+JJ6yYIx0mkg9e68W0G0PXpnOsmzLajNsW5o28DJMqbajxfsfq0gV3XdrBudsDQnwxfsQ==} + i18next@26.0.3: + resolution: {integrity: sha512-1571kXINxHKY7LksWp8wP+zP0YqHSSpl/OW0Y0owFEf2H3s8gCAffWaZivcz14rMkOvn3R/psiQxVsR9t2Nafg==} peerDependencies: typescript: ^5 || ^6 peerDependenciesMeta: @@ -2824,8 +2815,8 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - isbot@5.1.36: - resolution: {integrity: sha512-C/ZtXyJqDPZ7G7JPr06ApWyYoHjYexQbS6hPYD4WYCzpv2Qes6Z+CCEfTX4Owzf+1EJ933PoI2p+B9v7wpGZBQ==} + isbot@5.1.37: + resolution: {integrity: sha512-5bcicX81xf6NlTEV8rWdg7Pk01LFizDetuYGHx6d/f6y3lR2/oo8IfxjzJqn1UdDEyCcwT9e7NRloj8DwCYujQ==} engines: {node: '>=18'} isexe@2.0.0: @@ -2974,8 +2965,8 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lru-cache@11.2.7: resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} @@ -3082,8 +3073,8 @@ packages: node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} - nodemailer@8.0.4: - resolution: {integrity: sha512-k+jf6N8PfQJ0Fe8ZhJlgqU5qJU44Lpvp2yvidH3vp1lPnVQMgi4yEEMPXg5eJS1gFIJTVq1NHBk7Ia9ARdSBdQ==} + nodemailer@8.0.5: + resolution: {integrity: sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==} engines: {node: '>=6.0.0'} nth-check@2.1.1: @@ -3194,13 +3185,13 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.58.2: - resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + playwright-core@1.59.1: + resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} engines: {node: '>=18'} hasBin: true - playwright@1.58.2: - resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + playwright@1.59.1: + resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} engines: {node: '>=18'} hasBin: true @@ -3230,8 +3221,8 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres@3.4.8: - resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==} + postgres@3.4.9: + resolution: {integrity: sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw==} engines: {node: '>=12'} prelude-ls@1.2.1: @@ -3305,8 +3296,8 @@ packages: peerDependencies: react: ^19.2.4 - react-i18next@17.0.1: - resolution: {integrity: sha512-iG65FGnFHcYyHNuT01ukffYWCOBFTWSdVD8EZd/dCVWgtjFPObcSsvYYNwcsokO/rDcTb5d6D8Acv8MrOdm6Hw==} + react-i18next@17.0.2: + resolution: {integrity: sha512-shBftH2vaTWK2Bsp7FiL+cevx3xFJlvFxmsDFQSrJc+6twHkP0tv/bGa01VVWzpreUVVwU+3Hev5iFqRg65RwA==} peerDependencies: i18next: '>= 26.0.1' react: '>= 16.8.0' @@ -3335,8 +3326,8 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router@7.13.2: - resolution: {integrity: sha512-tX1Aee+ArlKQP+NIUd7SE6Li+CiGKwQtbS+FfRxPX6Pe4vHOo6nr9d++u5cwg+Z8K/x8tP+7qLmujDtfrAoUJA==} + react-router@7.14.0: + resolution: {integrity: sha512-m/xR9N4LQLmAS0ZhkY2nkPA1N7gQ5TUVa5n8TgANuDTARbn1gt+zLPXEm7W0XDTbrQ2AJSJKhoa6yx1D8BcpxQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3576,8 +3567,8 @@ packages: resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} - turbo@2.8.21: - resolution: {integrity: sha512-FlJ8OD5Qcp0jTAM7E4a/RhUzRNds2GzKlyxHKA6N247VLy628rrxAGlMpIXSz6VB430+TiQDJ/SMl6PL1lu6wQ==} + turbo@2.9.3: + resolution: {integrity: sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ==} hasBin: true type-check@0.4.0: @@ -3588,12 +3579,12 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript-eslint@8.57.2: - resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==} + typescript-eslint@8.58.0: + resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -3649,8 +3640,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.4.1: - resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + vite@6.4.2: + resolution: {integrity: sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4288,43 +4279,43 @@ snapshots: '@esbuild/win32-x64@0.27.4': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))': dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.3': + '@eslint/config-array@0.23.4': dependencies: - '@eslint/object-schema': 3.0.3 + '@eslint/object-schema': 3.0.4 debug: 4.4.3 minimatch: 10.2.4 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.3': + '@eslint/config-helpers@0.5.4': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.0 - '@eslint/core@1.1.1': + '@eslint/core@1.2.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.2.0(jiti@2.6.1))': optionalDependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.6.1) - '@eslint/object-schema@3.0.3': {} + '@eslint/object-schema@3.0.4': {} - '@eslint/plugin-kit@0.6.1': + '@eslint/plugin-kit@0.7.0': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.0 levn: 0.4.1 '@exodus/bytes@1.15.0': {} - '@fastify/otel@0.17.1(@opentelemetry/api@1.9.1)': + '@fastify/otel@0.18.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) @@ -4341,7 +4332,7 @@ snapshots: '@turf/line-intersect': 7.3.4 '@turf/line-split': 7.3.4 leaflet: 1.9.4 - lodash: 4.17.23 + lodash: 4.18.1 polyclip-ts: 0.16.8 '@hexagon/base64@1.1.28': {} @@ -4388,185 +4379,178 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs@0.213.0': + '@opentelemetry/api-logs@0.214.0': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/api@1.9.0': {} - '@opentelemetry/api@1.9.1': {} '@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/instrumentation-amqplib@0.60.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-amqplib@0.61.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-connect@0.56.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-connect@0.57.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@types/connect': 3.4.38 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dataloader@0.30.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-dataloader@0.31.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-express@0.61.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-express@0.62.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fs@0.32.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-fs@0.33.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.56.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-generic-pool@0.57.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-graphql@0.61.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-graphql@0.62.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-hapi@0.59.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-hapi@0.60.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.213.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-http@0.214.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 forwarded-parse: 2.1.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.61.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-ioredis@0.62.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/redis-common': 0.38.2 '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-kafkajs@0.22.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-kafkajs@0.23.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-knex@0.57.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-knex@0.58.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-koa@0.61.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-koa@0.62.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.57.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-lru-memoizer@0.58.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongodb@0.66.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-mongodb@0.67.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.59.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-mongoose@0.60.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql2@0.59.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-mysql2@0.60.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.1) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql@0.59.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-mysql@0.60.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@types/mysql': 2.15.27 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pg@0.65.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-pg@0.66.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.1) '@types/pg': 8.15.6 @@ -4574,29 +4558,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis@0.61.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-redis@0.62.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/redis-common': 0.38.2 '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.32.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-tedious@0.33.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.23.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation-undici@0.24.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color @@ -4619,10 +4603,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/api-logs': 0.214.0 import-in-the-middle: 3.0.0 require-in-the-middle: 8.0.1 transitivePeerDependencies: @@ -4748,11 +4732,11 @@ snapshots: '@pinojs/redact@0.4.0': {} - '@playwright/test@1.58.2': + '@playwright/test@1.59.1': dependencies: - playwright: 1.58.2 + playwright: 1.59.1 - '@prisma/instrumentation@7.4.2(@opentelemetry/api@1.9.1)': + '@prisma/instrumentation@7.6.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/instrumentation': 0.207.0(@opentelemetry/api@1.9.1) @@ -4765,7 +4749,7 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@react-router/dev@7.13.2(@react-router/serve@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': + '@react-router/dev@7.14.0(@react-router/serve@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3))(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tsx@4.21.0)(typescript@5.9.3)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -4774,7 +4758,7 @@ snapshots: '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@react-router/node': 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@react-router/node': 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) '@remix-run/node-fetch-server': 0.13.0 arg: 5.0.2 babel-dead-code-elimination: 1.0.12 @@ -4782,23 +4766,23 @@ snapshots: dedent: 1.7.2 es-module-lexer: 1.7.0 exit-hook: 2.2.1 - isbot: 5.1.36 + isbot: 5.1.37 jsesc: 3.0.2 - lodash: 4.17.23 + lodash: 4.18.1 p-map: 7.0.4 pathe: 1.1.2 picocolors: 1.1.1 pkg-types: 2.3.0 prettier: 3.8.1 react-refresh: 0.14.2 - react-router: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) semver: 7.7.4 tinyglobby: 0.2.15 valibot: 1.3.1(typescript@5.9.3) - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) vite-node: 3.2.4(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) optionalDependencies: - '@react-router/serve': 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@react-router/serve': 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - '@types/node' @@ -4815,31 +4799,31 @@ snapshots: - tsx - yaml - '@react-router/express@7.13.2(express@4.22.1)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': + '@react-router/express@7.14.0(express@4.22.1)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': dependencies: - '@react-router/node': 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@react-router/node': 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) express: 4.22.1 - react-router: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) optionalDependencies: typescript: 5.9.3 - '@react-router/node@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': + '@react-router/node@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': dependencies: '@mjackson/node-fetch-server': 0.2.0 - react-router: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) optionalDependencies: typescript: 5.9.3 - '@react-router/serve@7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': + '@react-router/serve@7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3)': dependencies: '@mjackson/node-fetch-server': 0.2.0 - '@react-router/express': 7.13.2(express@4.22.1)(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) - '@react-router/node': 7.13.2(react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@react-router/express': 7.14.0(express@4.22.1)(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) + '@react-router/node': 7.14.0(react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.9.3) compression: 1.8.1 express: 4.22.1 get-port: 5.1.1 morgan: 1.10.1 - react-router: 7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-router: 7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) source-map-support: 0.5.21 transitivePeerDependencies: - supports-color @@ -4922,33 +4906,33 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - '@sentry-internal/browser-utils@10.46.0': + '@sentry-internal/browser-utils@10.47.0': dependencies: - '@sentry/core': 10.46.0 + '@sentry/core': 10.47.0 - '@sentry-internal/feedback@10.46.0': + '@sentry-internal/feedback@10.47.0': dependencies: - '@sentry/core': 10.46.0 + '@sentry/core': 10.47.0 - '@sentry-internal/replay-canvas@10.46.0': + '@sentry-internal/replay-canvas@10.47.0': dependencies: - '@sentry-internal/replay': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/replay': 10.47.0 + '@sentry/core': 10.47.0 - '@sentry-internal/replay@10.46.0': + '@sentry-internal/replay@10.47.0': dependencies: - '@sentry-internal/browser-utils': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/browser-utils': 10.47.0 + '@sentry/core': 10.47.0 '@sentry/babel-plugin-component-annotate@5.1.1': {} - '@sentry/browser@10.46.0': + '@sentry/browser@10.47.0': dependencies: - '@sentry-internal/browser-utils': 10.46.0 - '@sentry-internal/feedback': 10.46.0 - '@sentry-internal/replay': 10.46.0 - '@sentry-internal/replay-canvas': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry-internal/browser-utils': 10.47.0 + '@sentry-internal/feedback': 10.47.0 + '@sentry-internal/replay': 10.47.0 + '@sentry-internal/replay-canvas': 10.47.0 + '@sentry/core': 10.47.0 '@sentry/bundler-plugin-core@5.1.1': dependencies: @@ -5007,75 +4991,76 @@ snapshots: - encoding - supports-color - '@sentry/core@10.46.0': {} + '@sentry/core@10.47.0': {} - '@sentry/node-core@10.46.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': + '@sentry/node-core@10.47.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': dependencies: - '@sentry/core': 10.46.0 - '@sentry/opentelemetry': 10.46.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/core': 10.47.0 + '@sentry/opentelemetry': 10.47.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) import-in-the-middle: 3.0.0 optionalDependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@sentry/node@10.46.0': + '@sentry/node@10.47.0': dependencies: - '@fastify/otel': 0.17.1(@opentelemetry/api@1.9.1) + '@fastify/otel': 0.18.0(@opentelemetry/api@1.9.1) '@opentelemetry/api': 1.9.1 '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-amqplib': 0.60.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-connect': 0.56.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-dataloader': 0.30.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-express': 0.61.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-fs': 0.32.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-generic-pool': 0.56.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-graphql': 0.61.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-hapi': 0.59.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-http': 0.213.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-ioredis': 0.61.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-kafkajs': 0.22.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-knex': 0.57.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-koa': 0.61.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-lru-memoizer': 0.57.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-mongodb': 0.66.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-mongoose': 0.59.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-mysql': 0.59.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-mysql2': 0.59.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-pg': 0.65.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-redis': 0.61.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-tedious': 0.32.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation-undici': 0.23.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-amqplib': 0.61.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-connect': 0.57.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-dataloader': 0.31.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-express': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-fs': 0.33.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-generic-pool': 0.57.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-graphql': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-hapi': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-http': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-ioredis': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-kafkajs': 0.23.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-knex': 0.58.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-koa': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-lru-memoizer': 0.58.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mongodb': 0.67.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mongoose': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mysql': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-mysql2': 0.60.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-pg': 0.66.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-redis': 0.62.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-tedious': 0.33.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation-undici': 0.24.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@prisma/instrumentation': 7.4.2(@opentelemetry/api@1.9.1) - '@sentry/core': 10.46.0 - '@sentry/node-core': 10.46.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) - '@sentry/opentelemetry': 10.46.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + '@prisma/instrumentation': 7.6.0(@opentelemetry/api@1.9.1) + '@sentry/core': 10.47.0 + '@sentry/node-core': 10.47.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/opentelemetry': 10.47.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) import-in-the-middle: 3.0.0 transitivePeerDependencies: + - '@opentelemetry/exporter-trace-otlp-http' - supports-color - '@sentry/opentelemetry@10.46.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': + '@sentry/opentelemetry@10.47.0(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@sentry/core': 10.46.0 + '@sentry/core': 10.47.0 - '@sentry/react@10.46.0(react@19.2.4)': + '@sentry/react@10.47.0(react@19.2.4)': dependencies: - '@sentry/browser': 10.46.0 - '@sentry/core': 10.46.0 + '@sentry/browser': 10.47.0 + '@sentry/core': 10.47.0 react: 19.2.4 '@sentry/rollup-plugin@5.1.1(rollup@4.60.0)': @@ -5174,12 +5159,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': + '@tailwindcss/vite@4.2.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) '@testing-library/dom@10.4.1': dependencies: @@ -5211,22 +5196,22 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@turbo/darwin-64@2.8.21': + '@turbo/darwin-64@2.9.3': optional: true - '@turbo/darwin-arm64@2.8.21': + '@turbo/darwin-arm64@2.9.3': optional: true - '@turbo/linux-64@2.8.21': + '@turbo/linux-64@2.9.3': optional: true - '@turbo/linux-arm64@2.8.21': + '@turbo/linux-arm64@2.9.3': optional: true - '@turbo/windows-64@2.8.21': + '@turbo/windows-64@2.9.3': optional: true - '@turbo/windows-arm64@2.8.21': + '@turbo/windows-arm64@2.9.3': optional: true '@turf/bbox@7.3.4': @@ -5375,10 +5360,6 @@ snapshots: dependencies: '@types/node': 25.5.2 - '@types/node@25.5.0': - dependencies: - undici-types: 7.18.2 - '@types/node@25.5.2': dependencies: undici-types: 7.18.2 @@ -5411,17 +5392,17 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.5.0 + '@types/node': 25.5.2 - '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.2 - eslint: 10.1.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 + eslint: 10.2.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -5429,56 +5410,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.2': + '@typescript-eslint/scope-manager@8.58.0': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.2': {} + '@typescript-eslint/types@8.58.0': {} - '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 @@ -5488,25 +5469,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - eslint: 10.1.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + eslint: 10.2.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.2': + '@typescript-eslint/visitor-keys@8.58.0': dependencies: - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.58.0 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-basic-ssl@2.3.0(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) '@vitest/expect@4.1.2': dependencies: @@ -5517,13 +5498,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': + '@vitest/mocker@4.1.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) '@vitest/pretty-format@4.1.2': dependencies: @@ -5813,11 +5794,11 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.8): + drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(postgres@3.4.9): optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/pg': 8.15.6 - postgres: 3.4.8 + postgres: 3.4.9 drizzle-postgis@1.1.1: dependencies: @@ -5951,9 +5932,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)): dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.6.1) eslint-scope@9.1.2: dependencies: @@ -5966,14 +5947,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.1.0(jiti@2.6.1): + eslint@10.2.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.3 - '@eslint/config-helpers': 0.5.3 - '@eslint/core': 1.1.1 - '@eslint/plugin-kit': 0.6.1 + '@eslint/config-array': 0.23.4 + '@eslint/config-helpers': 0.5.4 + '@eslint/core': 1.2.0 + '@eslint/plugin-kit': 0.7.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -6215,7 +6196,7 @@ snapshots: dependencies: '@babel/runtime': 7.29.2 - i18next@26.0.1(typescript@5.9.3): + i18next@26.0.3(typescript@5.9.3): dependencies: '@babel/runtime': 7.29.2 optionalDependencies: @@ -6261,7 +6242,7 @@ snapshots: is-potential-custom-element-name@1.0.1: {} - isbot@5.1.36: {} + isbot@5.1.37: {} isexe@2.0.0: {} @@ -6387,7 +6368,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash@4.17.23: {} + lodash@4.18.1: {} lru-cache@11.2.7: {} @@ -6461,7 +6442,7 @@ snapshots: node-releases@2.0.36: {} - nodemailer@8.0.4: {} + nodemailer@8.0.5: {} nth-check@2.1.1: dependencies: @@ -6585,11 +6566,11 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.58.2: {} + playwright-core@1.59.1: {} - playwright@1.58.2: + playwright@1.59.1: dependencies: - playwright-core: 1.58.2 + playwright-core: 1.59.1 optionalDependencies: fsevents: 2.3.2 @@ -6618,7 +6599,7 @@ snapshots: dependencies: xtend: 4.0.2 - postgres@3.4.8: {} + postgres@3.4.9: {} prelude-ls@1.2.1: {} @@ -6636,7 +6617,7 @@ snapshots: prom-client@15.1.3: dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 tdigest: 0.1.2 proxy-addr@2.0.7: @@ -6685,11 +6666,11 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-i18next@17.0.1(i18next@26.0.1(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + react-i18next@17.0.2(i18next@26.0.3(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: '@babel/runtime': 7.29.2 html-parse-stringify: 3.0.1 - i18next: 26.0.1(typescript@5.9.3) + i18next: 26.0.3(typescript@5.9.3) react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: @@ -6707,7 +6688,7 @@ snapshots: react-refresh@0.14.2: {} - react-router@7.13.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-router@7.14.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: cookie: 1.1.1 react: 19.2.4 @@ -6956,14 +6937,14 @@ snapshots: dependencies: tslib: 1.14.1 - turbo@2.8.21: + turbo@2.9.3: optionalDependencies: - '@turbo/darwin-64': 2.8.21 - '@turbo/darwin-arm64': 2.8.21 - '@turbo/linux-64': 2.8.21 - '@turbo/linux-arm64': 2.8.21 - '@turbo/windows-64': 2.8.21 - '@turbo/windows-arm64': 2.8.21 + '@turbo/darwin-64': 2.9.3 + '@turbo/darwin-arm64': 2.9.3 + '@turbo/linux-64': 2.9.3 + '@turbo/linux-arm64': 2.9.3 + '@turbo/windows-64': 2.9.3 + '@turbo/windows-arm64': 2.9.3 type-check@0.4.0: dependencies: @@ -6974,13 +6955,13 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.1.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.2.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7023,7 +7004,7 @@ snapshots: debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) transitivePeerDependencies: - '@types/node' - jiti @@ -7038,7 +7019,7 @@ snapshots: - tsx - yaml - vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0): + vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -7053,10 +7034,10 @@ snapshots: lightningcss: 1.32.0 tsx: 4.21.0 - vitest@4.1.2(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(jsdom@29.0.1)(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): + vitest@4.1.2(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(jsdom@29.0.1)(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): dependencies: '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + '@vitest/mocker': 4.1.2(vite@6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@vitest/pretty-format': 4.1.2 '@vitest/runner': 4.1.2 '@vitest/snapshot': 4.1.2 @@ -7073,7 +7054,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 6.4.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 6.4.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a0e4aa0..cb04669 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,20 +5,20 @@ packages: catalog: react: ^19.1.0 react-dom: ^19.1.0 - react-router: ^7.13.2 - "@react-router/dev": ^7.13.2 - "@react-router/node": ^7.13.2 - "@react-router/serve": ^7.13.2 + react-router: ^7.14.0 + "@react-router/dev": ^7.14.0 + "@react-router/node": ^7.14.0 + "@react-router/serve": ^7.14.0 "@types/react": ^19.1.4 "@types/react-dom": ^19.1.5 tailwindcss: ^4.1.7 "@tailwindcss/vite": ^4.1.7 typescript: ^5.8.3 - vite: ^6.0.0 + vite: ^6.4.2 drizzle-orm: ^0.45.2 drizzle-kit: ^0.31.0 drizzle-postgis: ^1.1.0 - postgres: ^3.4.0 + postgres: ^3.4.9 overrides: esbuild: ">=0.25.0"