From f264c98fbfccd4f1eb6dfdcb28b69903711a9e2b Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Thu, 16 Oct 2025 14:34:58 -0500 Subject: [PATCH] ci(app): config changes to bruno and incoming sqls --- .env-example | 3 + .../app/admin/User/RevokeRole by ID.bru | 8 +- .../app/logistics/folder.bru | 8 + .../app/logistics/labeling/Preprint.bru | 28 + .../app/logistics/labeling/folder.bru | 8 + .../environments/lst.bru | 4 +- .../0073_add_logs_notify_trigger.sql | 12 + lstV2/package.json | 190 +-- migrations/0019_bizarre_tarot.sql | 17 + migrations/meta/0019_snapshot.json | 1352 +++++++++++++++++ migrations/meta/_journal.json | 7 + package-lock.json | 13 + package.json | 177 +-- 13 files changed, 1638 insertions(+), 189 deletions(-) create mode 100644 LogisticsSupportTool_API_DOCS/app/logistics/folder.bru create mode 100644 LogisticsSupportTool_API_DOCS/app/logistics/labeling/Preprint.bru create mode 100644 LogisticsSupportTool_API_DOCS/app/logistics/labeling/folder.bru create mode 100644 lstV2/database/migrations/0073_add_logs_notify_trigger.sql create mode 100644 migrations/0019_bizarre_tarot.sql create mode 100644 migrations/meta/0019_snapshot.json diff --git a/.env-example b/.env-example index fb68830..3b59ece 100644 --- a/.env-example +++ b/.env-example @@ -12,6 +12,9 @@ LOG_LEVEL=debug # alpaprod tec apiKey TEC_API_KEY=api key +# v1 listener +DATABASE_URL_V1=postgresql://ausername:password@localhost:5433/lst_db + # postgres connection DATABASE_HOST=localhost DATABASE_PORT=5432 diff --git a/LogisticsSupportTool_API_DOCS/app/admin/User/RevokeRole by ID.bru b/LogisticsSupportTool_API_DOCS/app/admin/User/RevokeRole by ID.bru index ef58d43..60943e3 100644 --- a/LogisticsSupportTool_API_DOCS/app/admin/User/RevokeRole by ID.bru +++ b/LogisticsSupportTool_API_DOCS/app/admin/User/RevokeRole by ID.bru @@ -4,8 +4,8 @@ meta { seq: 3 } -post { - url: {{url}}/lst/api/admin/:userID/grant +patch { + url: {{url}}/lst/api/admin/:userID/revoke body: json auth: inherit } @@ -16,8 +16,8 @@ params:path { body:json { { - "module":"siloAdjustments", - "role":"viewer" + "module":"ocp" + } } diff --git a/LogisticsSupportTool_API_DOCS/app/logistics/folder.bru b/LogisticsSupportTool_API_DOCS/app/logistics/folder.bru new file mode 100644 index 0000000..75c4fed --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/logistics/folder.bru @@ -0,0 +1,8 @@ +meta { + name: logistics + seq: 4 +} + +auth { + mode: inherit +} diff --git a/LogisticsSupportTool_API_DOCS/app/logistics/labeling/Preprint.bru b/LogisticsSupportTool_API_DOCS/app/logistics/labeling/Preprint.bru new file mode 100644 index 0000000..9b2931e --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/logistics/labeling/Preprint.bru @@ -0,0 +1,28 @@ +meta { + name: Preprint + type: http + seq: 1 +} + +post { + url: {{url}}/lst/api/logistics/labeling/preprint + body: json + auth: inherit +} + +body:json { + { + "scannerId": 999, + "lotNr": 26321, + "machineId": 3, // 457=22, 458=23 + "printerId": 7, // 457=22, 458=23 + "layoutId": 25, + "numberOfCopies": 0, + "qtyToPrint": 5 + } +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/LogisticsSupportTool_API_DOCS/app/logistics/labeling/folder.bru b/LogisticsSupportTool_API_DOCS/app/logistics/labeling/folder.bru new file mode 100644 index 0000000..947e7eb --- /dev/null +++ b/LogisticsSupportTool_API_DOCS/app/logistics/labeling/folder.bru @@ -0,0 +1,8 @@ +meta { + name: labeling + seq: 1 +} + +auth { + mode: inherit +} diff --git a/LogisticsSupportTool_API_DOCS/environments/lst.bru b/LogisticsSupportTool_API_DOCS/environments/lst.bru index d7e22d9..04722d4 100644 --- a/LogisticsSupportTool_API_DOCS/environments/lst.bru +++ b/LogisticsSupportTool_API_DOCS/environments/lst.bru @@ -1,7 +1,7 @@ vars { - url: http://localhost:4200 + url: https://usmcd1vms036.alpla.net session_cookie: - urlv2: http://usiow1vms006:3001 + urlv2: http://usmcd1vms036:3000 jwtV2: } vars:secret [ diff --git a/lstV2/database/migrations/0073_add_logs_notify_trigger.sql b/lstV2/database/migrations/0073_add_logs_notify_trigger.sql new file mode 100644 index 0000000..e768340 --- /dev/null +++ b/lstV2/database/migrations/0073_add_logs_notify_trigger.sql @@ -0,0 +1,12 @@ +CREATE OR REPLACE FUNCTION notify_new_log() +RETURNS trigger AS $$ +BEGIN + PERFORM pg_notify('logs_channel', row_to_json(NEW)::text); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER logs_notify_trigger +AFTER INSERT ON logs +FOR EACH ROW +EXECUTE FUNCTION notify_new_log(); \ No newline at end of file diff --git a/lstV2/package.json b/lstV2/package.json index fc2873f..18894b5 100644 --- a/lstV2/package.json +++ b/lstV2/package.json @@ -1,97 +1,97 @@ { - "name": "lstv2", - "version": "2.27.0", - "type": "module", - "scripts": { - "dev": "concurrently -n \"server,frontend\" -c \"#007755,#2f6da3\" \"npm run dev:server\" \"cd frontend && npm run dev\"", - "dev:server": "dotenvx run -f .env -- tsx watch server/index.ts", - "dev:frontend": "cd frontend && npm run dev", - "dev:dbgen": " drizzle-kit generate --config=drizzle-dev.config.ts", - "dev:dbmigrate": " drizzle-kit migrate --config=drizzle-dev.config.ts", - "build": "npm run build:server && npm run build:frontend", - "build:server": "rimraf dist && tsc --build && npm run copy:scripts && xcopy server\\services\\notifications\\utils\\views\\ dist\\server\\services\\notifications\\utils\\views\\ /E /I /Y", - "build:frontend": "cd frontend && npm run build", - "build:iisNet": "rimraf dotnetwrapper\\bin && xcopy frontend\\dist dotnetwrapper\\wwwroot /E /I /Y && cd dotnetwrapper && dotnet publish lst-wrapper.csproj --configuration Release --output ../prodBuild", - "copy:scripts": "tsx server/scripts/copyScripts.ts", - "copy:servers": "xcopy server\\services\\server\\utils\\serverData.json dist\\server\\services\\server\\utils /E /I /Y", - "start": "set NODE_ENV=production && npm run start:server", - "start:server": "dotenvx run -f .env -- node dist/server/index.js", - "db:generate": "npx drizzle-kit generate", - "db:migrate": "npx drizzle-kit push", - "db:dev": "npm run build && npm run db:generate && npm run db:migrate", - "deploy": "standard-version --conventional-commits && npm run build", - "zipServer": "dotenvx run -f .env -- tsx server/scripts/zipUpBuild.ts \"C:\\Users\\matthes01\\Documents\\lstv2\"", - "newBuild": "npm run build:server && npm run build:frontend", - "copyToNew": "powershell -ExecutionPolicy Bypass -File server/scripts/copyToLst.ps1 -dir \"C:\\Users\\matthes01\\Documents\\lstv2\"", - "removeOld": "rimraf dist && rimraf frontend/dist", - "prodBuild": "npm run v1Build && npm run build && npm run zipServer && npm run dev", - "commit": "cz", - "prodinstall": "npm i --omit=dev && npm run db:migrate", - "checkupdates": "npx npm-check-updates", - "testingCode": "dotenvx run -f .env -- tsx watch server/services/logistics/controller/warehouse/cycleCountChecks/cyclecountCheck.ts" - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - }, - "admConfig": { - "build": 661, - "oldBuild": "backend-0.1.3.zip" - }, - "devDependencies": { - "@types/adm-zip": "^0.5.7", - "@types/bcrypt": "^5.0.2", - "@types/fs-extra": "^11.0.4", - "@types/js-cookie": "^3.0.6", - "@types/mssql": "^9.1.7", - "@types/node": "^24.0.3", - "@types/node-cron": "^3.0.11", - "@types/nodemailer": "^6.4.17", - "@types/pg": "^8.15.4", - "@types/ws": "^8.18.1", - "concurrently": "^9.1.2", - "cz-conventional-changelog": "^3.3.0", - "standard-version": "^9.5.0", - "tsx": "^4.20.3", - "typescript": "^5.8.3" - }, - "dependencies": { - "@dotenvx/dotenvx": "^1.45.1", - "@hono/node-server": "^1.14.4", - "@hono/zod-openapi": "^0.19.8", - "@scalar/hono-api-reference": "^0.9.5", - "@tanstack/react-form": "^1.12.3", - "@tanstack/react-table": "^8.21.3", - "@types/jsonwebtoken": "^9.0.10", - "@types/nodemailer-express-handlebars": "^4.0.5", - "adm-zip": "^0.5.16", - "axios": "^1.10.0", - "bcryptjs": "^3.0.2", - "croner": "^9.1.0", - "date-fns": "^4.1.0", - "date-fns-tz": "^3.2.0", - "drizzle-kit": "^0.31.1", - "drizzle-orm": "^0.44.2", - "drizzle-zod": "^0.8.2", - "excel-date-to-js": "^1.1.5", - "fast-xml-parser": "^5.2.5", - "fs-extra": "^11.3.0", - "jsonwebtoken": "^9.0.2", - "morgan": "^1.10.1", - "mssql": "^11.0.1", - "nodemailer": "^7.0.3", - "nodemailer-express-handlebars": "^7.0.0", - "pg": "^8.16.2", - "pino": "^9.7.0", - "pino-abstract-transport": "^2.0.0", - "pino-pretty": "^13.0.0", - "postgres": "^3.4.7", - "react-resizable-panels": "^3.0.3", - "rimraf": "^6.0.1", - "st-ethernet-ip": "^2.7.5", - "ws": "^8.18.2", - "xlsx": "^0.18.5", - "zod": "^3.25.67" - } + "name": "lstv2", + "version": "2.27.0", + "type": "module", + "scripts": { + "dev": "concurrently -n \"server,frontend\" -c \"#007755,#2f6da3\" \"npm run dev:server\" \"cd frontend && npm run dev\"", + "dev:server": "dotenvx run -f .env -- tsx watch server/index.ts", + "dev:frontend": "cd frontend && npm run dev", + "dev:dbgen": " drizzle-kit generate --config=drizzle-dev.config.ts", + "dev:dbmigrate": " drizzle-kit migrate --config=drizzle-dev.config.ts", + "build": "npm run build:server && npm run build:frontend", + "build:server": "rimraf dist && tsc --build && npm run copy:scripts && xcopy server\\services\\notifications\\utils\\views\\ dist\\server\\services\\notifications\\utils\\views\\ /E /I /Y ", + "build:frontend": "cd frontend && npm run build", + "build:iisNet": "rimraf dotnetwrapper\\bin && xcopy frontend\\dist dotnetwrapper\\wwwroot /E /I /Y && cd dotnetwrapper && dotnet publish lst-wrapper.csproj --configuration Release --output ../prodBuild", + "copy:scripts": "tsx server/scripts/copyScripts.ts", + "copy:servers": "xcopy server\\services\\server\\utils\\serverData.json dist\\server\\services\\server\\utils /E /I /Y", + "start": "set NODE_ENV=production && npm run start:server", + "start:server": "dotenvx run -f .env -- node dist/server/index.js", + "db:generate": "npx drizzle-kit generate", + "db:migrate": "npx drizzle-kit push", + "db:dev": "npm run build && npm run db:generate && npm run db:migrate", + "deploy": "standard-version --conventional-commits && npm run build", + "zipServer": "dotenvx run -f .env -- tsx server/scripts/zipUpBuild.ts \"C:\\Users\\matthes01\\Documents\\lstv2\"", + "newBuild": "npm run build:server && npm run build:frontend", + "copyToNew": "powershell -ExecutionPolicy Bypass -File server/scripts/copyToLst.ps1 -dir \"C:\\Users\\matthes01\\Documents\\lstv2\"", + "removeOld": "rimraf dist && rimraf frontend/dist", + "prodBuild": "npm run v1Build && npm run build && npm run zipServer && npm run dev", + "commit": "cz", + "prodinstall": "npm i --omit=dev && npm run db:migrate", + "checkupdates": "npx npm-check-updates", + "testingCode": "dotenvx run -f .env -- tsx watch server/services/logistics/controller/warehouse/cycleCountChecks/cyclecountCheck.ts" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "admConfig": { + "build": 661, + "oldBuild": "backend-0.1.3.zip" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.7", + "@types/bcrypt": "^5.0.2", + "@types/fs-extra": "^11.0.4", + "@types/js-cookie": "^3.0.6", + "@types/mssql": "^9.1.7", + "@types/node": "^24.0.3", + "@types/node-cron": "^3.0.11", + "@types/nodemailer": "^6.4.17", + "@types/pg": "^8.15.4", + "@types/ws": "^8.18.1", + "concurrently": "^9.1.2", + "cz-conventional-changelog": "^3.3.0", + "standard-version": "^9.5.0", + "tsx": "^4.20.3", + "typescript": "^5.8.3" + }, + "dependencies": { + "@dotenvx/dotenvx": "^1.45.1", + "@hono/node-server": "^1.14.4", + "@hono/zod-openapi": "^0.19.8", + "@scalar/hono-api-reference": "^0.9.5", + "@tanstack/react-form": "^1.12.3", + "@tanstack/react-table": "^8.21.3", + "@types/jsonwebtoken": "^9.0.10", + "@types/nodemailer-express-handlebars": "^4.0.5", + "adm-zip": "^0.5.16", + "axios": "^1.10.0", + "bcryptjs": "^3.0.2", + "croner": "^9.1.0", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "drizzle-kit": "^0.31.1", + "drizzle-orm": "^0.44.2", + "drizzle-zod": "^0.8.2", + "excel-date-to-js": "^1.1.5", + "fast-xml-parser": "^5.2.5", + "fs-extra": "^11.3.0", + "jsonwebtoken": "^9.0.2", + "morgan": "^1.10.1", + "mssql": "^11.0.1", + "nodemailer": "^7.0.3", + "nodemailer-express-handlebars": "^7.0.0", + "pg": "^8.16.2", + "pino": "^9.7.0", + "pino-abstract-transport": "^2.0.0", + "pino-pretty": "^13.0.0", + "postgres": "^3.4.7", + "react-resizable-panels": "^3.0.3", + "rimraf": "^6.0.1", + "st-ethernet-ip": "^2.7.5", + "ws": "^8.18.2", + "xlsx": "^0.18.5", + "zod": "^3.25.67" + } } diff --git a/migrations/0019_bizarre_tarot.sql b/migrations/0019_bizarre_tarot.sql new file mode 100644 index 0000000..2034df4 --- /dev/null +++ b/migrations/0019_bizarre_tarot.sql @@ -0,0 +1,17 @@ +CREATE TABLE "prodPermissions" ( + "prodPerm_id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "description" text NOT NULL, + "roles" jsonb DEFAULT '[]'::jsonb, + "rolesLegacy" jsonb DEFAULT '[]'::jsonb, + "add_User" text DEFAULT 'LST_System' NOT NULL, + "add_Date" timestamp DEFAULT now(), + "upd_User" text DEFAULT 'LST_System' NOT NULL, + "upd_date" timestamp DEFAULT now() +); +--> statement-breakpoint +ALTER TABLE "serverData" ADD COLUMN "add_user" text DEFAULT 'lst_user';--> statement-breakpoint +ALTER TABLE "serverData" ADD COLUMN "add_date" timestamp DEFAULT now();--> statement-breakpoint +ALTER TABLE "serverData" ADD COLUMN "upd_user" text DEFAULT 'lst_user';--> statement-breakpoint +ALTER TABLE "serverData" ADD COLUMN "upd_date" timestamp DEFAULT now();--> statement-breakpoint +CREATE UNIQUE INDEX "prodPermName" ON "prodPermissions" USING btree ("name"); \ No newline at end of file diff --git a/migrations/meta/0019_snapshot.json b/migrations/meta/0019_snapshot.json new file mode 100644 index 0000000..4bb0af2 --- /dev/null +++ b/migrations/meta/0019_snapshot.json @@ -0,0 +1,1352 @@ +{ + "id": "393b94ef-0a76-4554-8db0-cffe14f8a3e8", + "prevId": "53167ac2-af96-420d-a227-3622fbef4fc1", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.apiHits": { + "name": "apiHits", + "schema": "", + "columns": { + "apiHit_id": { + "name": "apiHit_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "ip": { + "name": "ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 86400000 + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 10 + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.jwks": { + "name": "jwks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_login": { + "name": "last_login", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_username_unique": { + "name": "user_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.logs": { + "name": "logs", + "schema": "", + "columns": { + "log_id": { + "name": "log_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "level": { + "name": "level", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subModule": { + "name": "subModule", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stack": { + "name": "stack", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "checked": { + "name": "checked", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.orderScheduler": { + "name": "orderScheduler", + "schema": "", + "columns": { + "schedule_id": { + "name": "schedule_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "av": { + "name": "av", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_type": { + "name": "order_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "order_number": { + "name": "order_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "line_item_number": { + "name": "line_item_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customer_release_number": { + "name": "customer_release_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "delivery_date": { + "name": "delivery_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "loading_date": { + "name": "loading_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "order_qty": { + "name": "order_qty", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "order_lu": { + "name": "order_lu", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "delivered_qty": { + "name": "delivered_qty", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "delivered_lu": { + "name": "delivered_lu", + "type": "real", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "remark": { + "name": "remark", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_as_EDI": { + "name": "created_as_EDI", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "current_state": { + "name": "current_state", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "lst_date_check": { + "name": "lst_date_check", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "customer_address_id": { + "name": "customer_address_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "customer_description": { + "name": "customer_description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dock": { + "name": "dock", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "order_from": { + "name": "order_from", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "orderNumber": { + "name": "orderNumber", + "columns": [ + { + "expression": "order_number", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prodPermissions": { + "name": "prodPermissions", + "schema": "", + "columns": { + "prodPerm_id": { + "name": "prodPerm_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "rolesLegacy": { + "name": "rolesLegacy", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "prodPermName": { + "name": "prodPermName", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverData": { + "name": "serverData", + "schema": "", + "columns": { + "server_id": { + "name": "server_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverDNS": { + "name": "serverDNS", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "plantToken": { + "name": "plantToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "greatPlainsPlantCode": { + "name": "greatPlainsPlantCode", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "streetAddress": { + "name": "streetAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cityState": { + "name": "cityState", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "zipcode": { + "name": "zipcode", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "contactEmail": { + "name": "contactEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contactPhone": { + "name": "contactPhone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customerTiAcc": { + "name": "customerTiAcc", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "lstServerPort": { + "name": "lstServerPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "serverLoc": { + "name": "serverLoc", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUpdated": { + "name": "lastUpdated", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "isUpgrading": { + "name": "isUpgrading", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "add_user": { + "name": "add_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "add_date": { + "name": "add_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_user": { + "name": "upd_user", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'lst_user'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "plantToken": { + "name": "plantToken", + "columns": [ + { + "expression": "plantToken", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.serverStats": { + "name": "serverStats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "default": "'serverStats'" + }, + "build": { + "name": "build", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "lastUpdate": { + "name": "lastUpdate", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.settings": { + "name": "settings", + "schema": "", + "columns": { + "settings_id": { + "name": "settings_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "moduleName": { + "name": "moduleName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "roles": { + "name": "roles", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[\"systemAdmin\"]'::jsonb" + }, + "add_User": { + "name": "add_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "add_Date": { + "name": "add_Date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "upd_User": { + "name": "upd_User", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'LST_System'" + }, + "upd_date": { + "name": "upd_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": { + "name": { + "name": "name", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_role_id": { + "name": "user_role_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "module": { + "name": "module", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "unique_user_module": { + "name": "unique_user_module", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "module", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_roles_user_id_user_id_fk": { + "name": "user_roles_user_id_user_id_fk", + "tableFrom": "user_roles", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json index 660eb0c..ee64abb 100644 --- a/migrations/meta/_journal.json +++ b/migrations/meta/_journal.json @@ -134,6 +134,13 @@ "when": 1760480733009, "tag": "0018_aspiring_silver_samurai", "breakpoints": true + }, + { + "idx": 19, + "version": "7", + "when": 1760623729227, + "tag": "0019_bizarre_tarot", + "breakpoints": true } ] } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d4f1b2a..161203b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "@types/node": "^24.7.1", "@types/nodemailer": "^7.0.2", "@types/nodemailer-express-handlebars": "^4.0.5", + "@types/pg": "^8.15.5", "concurrently": "^9.2.1", "cz-conventional-changelog": "^3.3.0", "standard-version": "^9.5.0", @@ -3384,6 +3385,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/pg": { + "version": "8.15.5", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.5.tgz", + "integrity": "sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "node_modules/@types/qs": { "version": "6.14.0", "dev": true, diff --git a/package.json b/package.json index 104d562..74023c0 100644 --- a/package.json +++ b/package.json @@ -1,90 +1,91 @@ { - "name": "lst", - "version": "1.5.0", - "description": "Logistics support tool - the place where the support happens.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev:app": "dotenvx run -f .env -- tsx watch app/main.ts", - "dev:docs": "npm run translateDocs && cd lstDocs && npm start", - "dev:front": "cd frontend && npm run dev", - "dev:db:migrate": "npx drizzle-kit push", - "dev:db:generate": "tsc && npx drizzle-kit generate --config=drizzle-dev.config.ts", - "dev": "concurrently -n \"server,frontend,docs\" -c \"#007755,#2f6da3,#DB4FE0\" \"npm run dev:app\" \"npm run dev:front\" \"npm run dev:docs\"", - "copy:docs": "node scripts/lstDocCopy.mjs", - "build:app": "rimraf dist && npx tsc", - "build:front": "cd frontend && rimraf dist && npm run build", - "build:docs": "cd lstDocs && rimraf build && npm run build", - "build:wrapper": "cd lstWrapper && rimraf publish && dotnet publish -c Release -o ./publish", - "build:ctl": " ", - "build": "npm run translateDocs && npm run build:docs && npm run build:front && npm run build:app", - "install:front": "cd frontend && npm i", - "install:docs": "cd lstDocs && npm i", - "install:app": "npm i", - "start:app": "node dist/main.js", - "start": "dotenvx run -f .env -- npm run start:app", - "start:win": "set NODE_ENV=production && node dist/main.js", - "docker": "docker compose up --build --force-recreate -d", - "commit": "cz", - "deploy": "standard-version --conventional-commits && npm run translateDocs && npm run build && cd lstV2 && npm run build", - "db:migrate": "npx drizzle-kit push", - "db:generate": "npx drizzle-kit generate", - "translateDocs": "cd scripts && node translateScript.js", - "auth:generate": "npx @better-auth/cli generate --config ./app/src/pkg/auth/auth.ts", - "updates": "ncu -g" - }, - "repository": { - "type": "git", - "url": "https://git.tuffraid.net/cowch/lst.git" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "module", - "dependencies": { - "@dotenvx/dotenvx": "^1.51.0", - "@tanstack/react-table": "^8.21.3", - "@types/cors": "^2.8.19", - "axios": "^1.12.2", - "better-auth": "^1.3.27", - "cors": "^2.8.5", - "date-fns": "^4.1.0", - "date-fns-tz": "^3.2.0", - "drizzle-kit": "^0.31.5", - "drizzle-orm": "^0.44.6", - "drizzle-zod": "^0.8.3", - "express": "^5.1.0", - "handlebars": "^4.7.8", - "morgan": "^1.10.1", - "mssql": "^12.0.0", - "nodemailer": "^7.0.9", - "nodemailer-express-handlebars": "^7.0.0", - "npm-check-updates": "^19.0.0", - "pg": "^8.16.3", - "pino": "^10.0.0", - "pino-pretty": "^13.1.2", - "postgres": "^3.4.7", - "socket.io": "^4.8.1", - "zod": "^4.1.12" - }, - "devDependencies": { - "@biomejs/biome": "2.2.6", - "@types/express": "^5.0.3", - "@types/morgan": "^1.9.10", - "@types/mssql": "^9.1.8", - "@types/node": "^24.7.1", - "@types/nodemailer": "^7.0.2", - "@types/nodemailer-express-handlebars": "^4.0.5", - "concurrently": "^9.2.1", - "cz-conventional-changelog": "^3.3.0", - "standard-version": "^9.5.0", - "ts-node-dev": "^2.0.0", - "tsx": "^4.20.6", - "typescript": "^5.9.3" - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - } + "name": "lst", + "version": "1.5.0", + "description": "Logistics support tool - the place where the support happens.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev:app": "dotenvx run -f .env -- tsx watch app/main.ts", + "dev:docs": "npm run translateDocs && cd lstDocs && npm start", + "dev:front": "cd frontend && npm run dev", + "dev:db:migrate": "npx drizzle-kit push", + "dev:db:generate": "tsc && npx drizzle-kit generate --config=drizzle-dev.config.ts", + "dev": "concurrently -n \"server,frontend,docs\" -c \"#007755,#2f6da3,#DB4FE0\" \"npm run dev:app\" \"npm run dev:front\" \"npm run dev:docs\"", + "copy:docs": "node scripts/lstDocCopy.mjs", + "build:app": "rimraf dist && npx tsc && xcopy app\\src\\internal\\system\\controller\\settings\\settings.json dist\\src\\internal\\system\\controller\\settings /E /I /Y", + "build:front": "cd frontend && rimraf dist && npm run build", + "build:docs": "cd lstDocs && rimraf build && npm run build", + "build:wrapper": "cd lstWrapper && rimraf publish && dotnet publish -c Release -o ./publish", + "build:ctl": " ", + "build": "npm run translateDocs && npm run build:docs && npm run build:front && npm run build:app", + "install:front": "cd frontend && npm i", + "install:docs": "cd lstDocs && npm i", + "install:app": "npm i", + "start:app": "node dist/main.js", + "start": "dotenvx run -f .env -- npm run start:app", + "start:win": "set NODE_ENV=production && node dist/main.js", + "docker": "docker compose up --build --force-recreate -d", + "commit": "cz", + "deploy": "standard-version --conventional-commits && npm run translateDocs && npm run build && cd lstV2 && npm run build", + "db:migrate": "npx drizzle-kit push", + "db:generate": "npx drizzle-kit generate", + "translateDocs": "cd scripts && node translateScript.js", + "auth:generate": "npx @better-auth/cli generate --config ./app/src/pkg/auth/auth.ts", + "updates": "ncu -g" + }, + "repository": { + "type": "git", + "url": "https://git.tuffraid.net/cowch/lst.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "module", + "dependencies": { + "@dotenvx/dotenvx": "^1.51.0", + "@tanstack/react-table": "^8.21.3", + "@types/cors": "^2.8.19", + "axios": "^1.12.2", + "better-auth": "^1.3.27", + "cors": "^2.8.5", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "drizzle-kit": "^0.31.5", + "drizzle-orm": "^0.44.6", + "drizzle-zod": "^0.8.3", + "express": "^5.1.0", + "handlebars": "^4.7.8", + "morgan": "^1.10.1", + "mssql": "^12.0.0", + "nodemailer": "^7.0.9", + "nodemailer-express-handlebars": "^7.0.0", + "npm-check-updates": "^19.0.0", + "pg": "^8.16.3", + "pino": "^10.0.0", + "pino-pretty": "^13.1.2", + "postgres": "^3.4.7", + "socket.io": "^4.8.1", + "zod": "^4.1.12" + }, + "devDependencies": { + "@biomejs/biome": "2.2.6", + "@types/express": "^5.0.3", + "@types/morgan": "^1.9.10", + "@types/mssql": "^9.1.8", + "@types/node": "^24.7.1", + "@types/nodemailer": "^7.0.2", + "@types/nodemailer-express-handlebars": "^4.0.5", + "@types/pg": "^8.15.5", + "concurrently": "^9.2.1", + "cz-conventional-changelog": "^3.3.0", + "standard-version": "^9.5.0", + "ts-node-dev": "^2.0.0", + "tsx": "^4.20.6", + "typescript": "^5.9.3" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + } }