Sync api-security-scanner updates

This commit is contained in:
hschinmaybharadwaj 2026-06-13 17:23:59 +05:30
parent 18840625c0
commit 070398cc4d
10 changed files with 184 additions and 154 deletions

View File

@ -32,9 +32,9 @@ BACKEND_PORT=8000
CORS_ORIGINS=http://localhost:5173,http://localhost:3000,http://localhost,http://localhost:8000
# Frontend API URL
# When using Docker with nginx: http://localhost/api
# When running Vite directly (npm run dev): http://localhost:8000
VITE_API_URL=http://localhost/api
# When using Docker with nginx: http://localhost/api/
# When running Vite directly (npm run dev): http://localhost:8000/
VITE_API_URL=http://localhost/api/
# ---------------------------------------------
# Docker Host Port Mappings

View File

@ -16,19 +16,7 @@
> Full-stack API vulnerability scanner targeting the OWASP API Security Top 10 with configurable scan modules and a React dashboard.
<p align="center">
<a href="https://youtu.be/CvuvFfh24cE">
<img src="https://img.shields.io/badge/Watch_on-YouTube-FF0000?logo=youtube&logoColor=white" alt="Watch on YouTube">
</a>
</p>
<p align="center">
<a href="https://youtu.be/CvuvFfh24cE">
<img src="https://img.youtube.com/vi/CvuvFfh24cE/maxresdefault.jpg" alt="Video Thumbnail" width="800">
</a>
</p>
*Learn docs here: [learn modules](#learn).*
*This is a quick overview — security theory, architecture, and full walkthroughs are in the [learn modules](#learn).*
## What It Does

View File

@ -1,7 +1,7 @@
# ⒸAngelaMos | 2025
# Development FastAPI Dockerfile
FROM python:3.11-slim
FROM python:3.13-slim
# Set environment variables
ENV PYTHONUNBUFFERED=1 \
@ -18,11 +18,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Copy only requirements first (for layer caching)
COPY backend/requirements.txt .
# Copy pyproject.toml for dependency installation
COPY backend/pyproject.toml .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Install Python dependencies from pyproject.toml
RUN pip install --no-cache-dir .
# Copy application code
COPY backend/ .

View File

@ -8,11 +8,14 @@ FROM node:20-alpine
# Set working directory
WORKDIR /app
# Install pnpm
RUN npm install -g pnpm
# Copy package files first (for layer caching)
COPY frontend/package*.json ./
COPY frontend/package.json frontend/pnpm-lock.yaml ./
# Install dependencies
RUN npm ci
RUN pnpm install --frozen-lockfile
# Copy application code (in dev this is overridden by volume mount)
COPY frontend/ .
@ -21,4 +24,4 @@ COPY frontend/ .
EXPOSE 5173
# Run Vite dev server with --host to allow external connections
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
CMD ["pnpm", "dev", "--", "--host", "0.0.0.0"]

View File

@ -3,7 +3,7 @@
# Optimized for performance with gunicorn multi-worker setup
# No hot reload, built image (no volume mounts)
FROM python:3.11-slim
FROM python:3.13-slim
# Set environment variables
ENV PYTHONUNBUFFERED=1 \
@ -20,11 +20,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Copy only requirements first (for layer caching)
COPY backend/requirements.txt .
# Copy pyproject.toml for dependency installation
COPY backend/pyproject.toml .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Install Python dependencies from pyproject.toml
RUN pip install --no-cache-dir .
# Install gunicorn for production
RUN pip install --no-cache-dir gunicorn

View File

@ -9,17 +9,20 @@ FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY frontend/package*.json ./
# Install pnpm
RUN npm install -g pnpm
# Install dependencies
RUN npm ci --only=production
# Copy package files
COPY frontend/package.json frontend/pnpm-lock.yaml ./
# Install dependencies (including dev deps for build)
RUN pnpm install --frozen-lockfile
# Copy source code
COPY frontend/ .
# Build the app (creates dist/ folder with static files)
RUN npm run build
RUN pnpm run build

View File

@ -67,8 +67,8 @@ http {
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Backend API routes
location /api {
proxy_pass http://backend;
location /api/ {
proxy_pass http://backend/;
# Apply common proxy settings
proxy_http_version 1.1;

View File

@ -27,7 +27,7 @@
"@radix-ui/react-tooltip": "^1.2.8",
"@tanstack/react-query": "^5.90.21",
"@tanstack/react-query-devtools": "^5.91.3",
"axios": "^1.16.0",
"axios": "^1.15.2",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
"immer": "^11.1.4",
@ -46,6 +46,7 @@
"devDependencies": {
"@biomejs/biome": "^2.4.2",
"@eslint/js": "^9.39.2",
"@types/node": "^20.0.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
@ -65,23 +66,5 @@
"typescript-eslint": "^8.56.0",
"vite": "^7.3.2",
"vite-tsconfig-paths": "^6.1.1"
},
"pnpm": {
"overrides": {
"ajv@<6.14.0": ">=6.14.0",
"brace-expansion@<1.1.13": ">=1.1.13",
"brace-expansion@>=2.0.0 <2.0.3": ">=2.0.3",
"fast-uri@<=3.1.0": ">=3.1.1",
"fast-uri@<=3.1.1": ">=3.1.2",
"flatted@<3.4.0": ">=3.4.0",
"flatted@<=3.4.1": ">=3.4.2",
"minimatch@<3.1.3": ">=3.1.3",
"minimatch@<3.1.4": ">=3.1.4",
"minimatch@>=9.0.0 <9.0.6": ">=9.0.6",
"minimatch@>=9.0.0 <9.0.7": ">=9.0.7",
"postcss@<8.5.10": ">=8.5.10",
"socket.io-parser@>=4.0.0 <4.2.6": ">=4.2.6",
"ws@>=8.0.0 <8.20.1": ">=8.20.1"
}
}
}

View File

@ -4,22 +4,6 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
overrides:
ajv@<6.14.0: '>=6.14.0'
brace-expansion@<1.1.13: '>=1.1.13'
brace-expansion@>=2.0.0 <2.0.3: '>=2.0.3'
fast-uri@<=3.1.0: '>=3.1.1'
fast-uri@<=3.1.1: '>=3.1.2'
flatted@<3.4.0: '>=3.4.0'
flatted@<=3.4.1: '>=3.4.2'
minimatch@<3.1.3: '>=3.1.3'
minimatch@<3.1.4: '>=3.1.4'
minimatch@>=9.0.0 <9.0.6: '>=9.0.6'
minimatch@>=9.0.0 <9.0.7: '>=9.0.7'
postcss@<8.5.10: '>=8.5.10'
socket.io-parser@>=4.0.0 <4.2.6: '>=4.2.6'
ws@>=8.0.0 <8.20.1: '>=8.20.1'
importers:
.:
@ -52,8 +36,8 @@ importers:
specifier: ^5.91.3
version: 5.91.3(@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4)
axios:
specifier: ^1.16.0
version: 1.16.0
specifier: ^1.15.2
version: 1.15.2
clsx:
specifier: ^2.1.1
version: 2.1.1
@ -103,6 +87,9 @@ importers:
'@eslint/js':
specifier: ^9.39.2
version: 9.39.2
'@types/node':
specifier: ^20.0.0
version: 20.19.41
'@types/react':
specifier: ^19.2.14
version: 19.2.14
@ -111,7 +98,7 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
version: 5.1.4(vite@7.3.2)
version: 5.1.4(vite@7.3.2(@types/node@20.19.41))
eslint:
specifier: ^9.39.2
version: 9.39.2
@ -147,7 +134,7 @@ importers:
version: 1.0.0(stylelint@17.3.0(typescript@5.9.3))
stylelint-config-standard-scss:
specifier: ^17.0.0
version: 17.0.0(postcss@8.5.14)(stylelint@17.3.0(typescript@5.9.3))
version: 17.0.0(postcss@8.5.9)(stylelint@17.3.0(typescript@5.9.3))
typescript:
specifier: ~5.9.3
version: 5.9.3
@ -156,10 +143,10 @@ importers:
version: 8.56.0(eslint@9.39.2)(typescript@5.9.3)
vite:
specifier: ^7.3.2
version: 7.3.2
version: 7.3.2(@types/node@20.19.41)
vite-tsconfig-paths:
specifier: ^6.1.1
version: 6.1.1(typescript@5.9.3)(vite@7.3.2)
version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@20.19.41))
packages:
@ -1201,6 +1188,9 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@20.19.41':
resolution: {integrity: sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==}
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
@ -1297,6 +1287,9 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ajv@8.18.0:
resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
@ -1373,8 +1366,8 @@ packages:
resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines: {node: '>=4'}
axios@1.16.0:
resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==}
axios@1.15.2:
resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@ -1383,21 +1376,22 @@ packages:
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
balanced-match@3.0.1:
resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==}
engines: {node: '>= 16'}
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
baseline-browser-mapping@2.9.19:
resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
hasBin: true
brace-expansion@5.0.6:
resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
engines: {node: 18 || 20 || >=22}
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@ -1470,6 +1464,9 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@ -1778,11 +1775,14 @@ packages:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fast-uri@3.1.2:
resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==}
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
@ -1822,8 +1822,8 @@ packages:
flat-cache@6.1.20:
resolution: {integrity: sha512-AhHYqwvN62NVLp4lObVXGVluiABTHapoB57EyegZVmazN+hhGhLTn3uZbOofoTw4DSDvVCadzzyChXhOAvy8uQ==}
flatted@3.4.2:
resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
follow-redirects@1.16.0:
resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
@ -1962,8 +1962,8 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
hasown@2.0.4:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
hasown@2.0.3:
resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
engines: {node: '>= 0.4'}
hast-util-to-jsx-runtime@2.3.6:
@ -2191,6 +2191,9 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@ -2373,9 +2376,8 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
minimatch@10.2.5:
resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
@ -2494,13 +2496,13 @@ packages:
resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
engines: {node: '>=18.0'}
peerDependencies:
postcss: '>=8.5.10'
postcss: ^8.4.31
postcss-scss@4.0.9:
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: '>=8.5.10'
postcss: ^8.4.29
postcss-selector-parser@7.1.1:
resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
@ -2509,8 +2511,12 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.14:
resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.9:
resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@ -2532,6 +2538,10 @@ packages:
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
engines: {node: '>=10'}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
qified@0.6.0:
resolution: {integrity: sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==}
engines: {node: '>=20'}
@ -2768,8 +2778,8 @@ packages:
resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
engines: {node: '>=10.0.0'}
socket.io-parser@4.2.6:
resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==}
socket.io-parser@4.2.5:
resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
engines: {node: '>=10.0.0'}
sonner@2.0.7:
@ -2852,7 +2862,7 @@ packages:
resolution: {integrity: sha512-VkVD9r7jfUT/dq3mA3/I1WXXk2U71rO5wvU2yIil9PW5o1g3UM7Xc82vHmuVJHV7Y8ok5K137fmW5u3HbhtTOA==}
engines: {node: '>=20'}
peerDependencies:
postcss: '>=8.5.10'
postcss: ^8.3.3
stylelint: ^17.0.0
peerDependenciesMeta:
postcss:
@ -2868,7 +2878,7 @@ packages:
resolution: {integrity: sha512-uLJS6xgOCBw5EMsDW7Ukji8l28qRoMnkRch15s0qwZpskXvWt9oPzMmcYM307m9GN4MxuWLsQh4I6hU9yI53cQ==}
engines: {node: '>=20'}
peerDependencies:
postcss: '>=8.5.10'
postcss: ^8.3.3
stylelint: ^17.0.0
peerDependenciesMeta:
postcss:
@ -2986,6 +2996,9 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unicorn-magic@0.4.0:
resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
engines: {node: '>=20'}
@ -3014,6 +3027,9 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
use-callback-ref@1.3.3:
resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
engines: {node: '>=10'}
@ -3129,8 +3145,8 @@ packages:
resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==}
engines: {node: ^20.17.0 || >=22.9.0}
ws@8.20.1:
resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==}
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@ -3458,7 +3474,7 @@ snapshots:
dependencies:
'@eslint/object-schema': 2.1.7
debug: 4.4.3
minimatch: 9.0.5
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@ -3472,14 +3488,14 @@ snapshots:
'@eslint/eslintrc@3.3.3':
dependencies:
ajv: 8.18.0
ajv: 6.12.6
debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.1
minimatch: 9.0.5
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
@ -4087,6 +4103,10 @@ snapshots:
'@types/ms@2.1.0': {}
'@types/node@20.19.41':
dependencies:
undici-types: 6.21.0
'@types/react-dom@19.2.3(@types/react@19.2.14)':
dependencies:
'@types/react': 19.2.14
@ -4168,7 +4188,7 @@ snapshots:
'@typescript-eslint/types': 8.56.0
'@typescript-eslint/visitor-keys': 8.56.0
debug: 4.4.3
minimatch: 10.2.5
minimatch: 9.0.5
semver: 7.7.4
tinyglobby: 0.2.16
ts-api-utils: 2.4.0(typescript@5.9.3)
@ -4194,7 +4214,7 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
'@vitejs/plugin-react@5.1.4(vite@7.3.2)':
'@vitejs/plugin-react@5.1.4(vite@7.3.2(@types/node@20.19.41))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@ -4202,7 +4222,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-rc.3
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
vite: 7.3.2
vite: 7.3.2(@types/node@20.19.41)
transitivePeerDependencies:
- supports-color
@ -4212,10 +4232,17 @@ snapshots:
acorn@8.15.0: {}
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
fast-uri: 3.1.2
fast-uri: 3.1.0
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
@ -4306,7 +4333,7 @@ snapshots:
axe-core@4.11.1: {}
axios@1.16.0:
axios@1.15.2:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.5
@ -4318,15 +4345,20 @@ snapshots:
bail@2.0.2: {}
balanced-match@3.0.1: {}
balanced-match@1.0.2: {}
balanced-match@4.0.4: {}
balanced-match@3.0.1: {}
baseline-browser-mapping@2.9.19: {}
brace-expansion@5.0.6:
brace-expansion@1.1.12:
dependencies:
balanced-match: 4.0.4
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
braces@3.0.3:
dependencies:
@ -4400,6 +4432,8 @@ snapshots:
comma-separated-tokens@2.0.3: {}
concat-map@0.0.1: {}
convert-source-map@2.0.0: {}
cookie@1.1.1: {}
@ -4545,7 +4579,7 @@ snapshots:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
engine.io-parser: 5.2.3
ws: 8.20.1
ws: 8.18.3
xmlhttprequest-ssl: 2.1.2
transitivePeerDependencies:
- bufferutil
@ -4649,7 +4683,7 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.4
hasown: 2.0.3
es-shim-unscopables@1.1.0:
dependencies:
@ -4714,7 +4748,7 @@ snapshots:
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
minimatch: 9.0.5
minimatch: 3.1.2
object.fromentries: 2.0.8
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
@ -4746,7 +4780,7 @@ snapshots:
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
minimatch: 9.0.5
minimatch: 3.1.2
object.entries: 1.1.9
object.fromentries: 2.0.8
object.values: 1.2.1
@ -4781,7 +4815,7 @@ snapshots:
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
ajv: 8.18.0
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.3
@ -4800,7 +4834,7 @@ snapshots:
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2
minimatch: 9.0.5
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
transitivePeerDependencies:
@ -4840,9 +4874,11 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.8
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
fast-uri@3.1.2: {}
fast-uri@3.1.0: {}
fastest-levenshtein@1.0.16: {}
@ -4873,16 +4909,16 @@ snapshots:
flat-cache@4.0.1:
dependencies:
flatted: 3.4.2
flatted: 3.3.3
keyv: 4.5.4
flat-cache@6.1.20:
dependencies:
cacheable: 2.3.2
flatted: 3.4.2
flatted: 3.3.3
hookified: 1.15.1
flatted@3.4.2: {}
flatted@3.3.3: {}
follow-redirects@1.16.0: {}
@ -4895,7 +4931,7 @@ snapshots:
asynckit: 0.4.0
combined-stream: 1.0.8
es-set-tostringtag: 2.1.0
hasown: 2.0.4
hasown: 2.0.3
mime-types: 2.1.35
fsevents@2.3.3:
@ -4909,7 +4945,7 @@ snapshots:
call-bound: 1.0.4
define-properties: 1.2.1
functions-have-names: 1.2.3
hasown: 2.0.4
hasown: 2.0.3
is-callable: 1.2.7
functions-have-names@1.2.3: {}
@ -5016,7 +5052,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
hasown@2.0.4:
hasown@2.0.3:
dependencies:
function-bind: 1.1.2
@ -5241,6 +5277,8 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
json-schema-traverse@0.4.1: {}
json-schema-traverse@1.0.0: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@ -5542,13 +5580,13 @@ snapshots:
dependencies:
mime-db: 1.52.0
minimatch@10.2.5:
minimatch@3.1.2:
dependencies:
brace-expansion: 5.0.6
brace-expansion: 1.1.12
minimatch@9.0.5:
dependencies:
brace-expansion: 5.0.6
brace-expansion: 2.0.2
ms@2.1.3: {}
@ -5665,13 +5703,13 @@ snapshots:
postcss-resolve-nested-selector@0.1.6: {}
postcss-safe-parser@7.0.1(postcss@8.5.14):
postcss-safe-parser@7.0.1(postcss@8.5.6):
dependencies:
postcss: 8.5.14
postcss: 8.5.6
postcss-scss@4.0.9(postcss@8.5.14):
postcss-scss@4.0.9(postcss@8.5.9):
dependencies:
postcss: 8.5.14
postcss: 8.5.9
postcss-selector-parser@7.1.1:
dependencies:
@ -5680,7 +5718,13 @@ snapshots:
postcss-value-parser@4.2.0: {}
postcss@8.5.14:
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.5.9:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@ -5700,6 +5744,8 @@ snapshots:
proxy-from-env@2.1.0: {}
punycode@2.3.1: {}
qified@0.6.0:
dependencies:
hookified: 1.15.1
@ -6006,13 +6052,13 @@ snapshots:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
engine.io-client: 6.6.4
socket.io-parser: 4.2.6
socket.io-parser: 4.2.5
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
socket.io-parser@4.2.6:
socket.io-parser@4.2.5:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
@ -6121,26 +6167,26 @@ snapshots:
dependencies:
stylelint: 17.3.0(typescript@5.9.3)
stylelint-config-recommended-scss@17.0.0(postcss@8.5.14)(stylelint@17.3.0(typescript@5.9.3)):
stylelint-config-recommended-scss@17.0.0(postcss@8.5.9)(stylelint@17.3.0(typescript@5.9.3)):
dependencies:
postcss-scss: 4.0.9(postcss@8.5.14)
postcss-scss: 4.0.9(postcss@8.5.9)
stylelint: 17.3.0(typescript@5.9.3)
stylelint-config-recommended: 18.0.0(stylelint@17.3.0(typescript@5.9.3))
stylelint-scss: 7.0.0(stylelint@17.3.0(typescript@5.9.3))
optionalDependencies:
postcss: 8.5.14
postcss: 8.5.9
stylelint-config-recommended@18.0.0(stylelint@17.3.0(typescript@5.9.3)):
dependencies:
stylelint: 17.3.0(typescript@5.9.3)
stylelint-config-standard-scss@17.0.0(postcss@8.5.14)(stylelint@17.3.0(typescript@5.9.3)):
stylelint-config-standard-scss@17.0.0(postcss@8.5.9)(stylelint@17.3.0(typescript@5.9.3)):
dependencies:
stylelint: 17.3.0(typescript@5.9.3)
stylelint-config-recommended-scss: 17.0.0(postcss@8.5.14)(stylelint@17.3.0(typescript@5.9.3))
stylelint-config-recommended-scss: 17.0.0(postcss@8.5.9)(stylelint@17.3.0(typescript@5.9.3))
stylelint-config-standard: 40.0.0(stylelint@17.3.0(typescript@5.9.3))
optionalDependencies:
postcss: 8.5.14
postcss: 8.5.9
stylelint-config-standard@40.0.0(stylelint@17.3.0(typescript@5.9.3)):
dependencies:
@ -6191,8 +6237,8 @@ snapshots:
micromatch: 4.0.8
normalize-path: 3.0.0
picocolors: 1.1.1
postcss: 8.5.14
postcss-safe-parser: 7.0.1(postcss@8.5.14)
postcss: 8.5.6
postcss-safe-parser: 7.0.1(postcss@8.5.6)
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
string-width: 8.2.0
@ -6309,6 +6355,8 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
undici-types@6.21.0: {}
unicorn-magic@0.4.0: {}
unified@11.0.5:
@ -6350,6 +6398,10 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4):
dependencies:
react: 19.2.4
@ -6398,25 +6450,26 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2):
vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@20.19.41)):
dependencies:
debug: 4.4.3
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.9.3)
vite: 7.3.2
vite: 7.3.2(@types/node@20.19.41)
transitivePeerDependencies:
- supports-color
- typescript
vite@7.3.2:
vite@7.3.2(@types/node@20.19.41):
dependencies:
esbuild: 0.27.7
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
postcss: 8.5.14
postcss: 8.5.9
rollup: 4.60.1
tinyglobby: 0.2.16
optionalDependencies:
'@types/node': 20.19.41
fsevents: 2.3.3
which-boxed-primitive@1.1.1:
@ -6475,7 +6528,7 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 4.1.0
ws@8.20.1: {}
ws@8.18.3: {}
xmlhttprequest-ssl@2.1.2: {}

View File

@ -11,7 +11,7 @@ export const API_BASE_URL =
import.meta.env.VITE_API_URL !== null &&
import.meta.env.VITE_API_URL !== ''
? import.meta.env.VITE_API_URL
: '/api'
: '/api/'
/**
* Auth API Endpoints