=== DIAGNOSTICS: START ===
Tue Jul 28 00:15:41 IST 2026
=== NODE & NPM VERSION ===
v24.18.0
11.16.0
=== DIRECTORY STRUCTURE ===
total 252
drwxr-xr-x 17 waqtmoney nobody 4096 Jul 28 00:14 .
drwxr-xr-x 20 waqtmoney nobody 4096 Jul 24 01:53 ..
-rw-r--r-- 1 waqtmoney waqtmoney 2112 Jul 28 00:14 app.js
-rw-r--r-- 1 root root 1884 Jul 27 19:52 app.log
-rw-r--r-- 1 waqtmoney waqtmoney 2301 Jul 28 00:14 check-disb-totals.js
-rw-r--r-- 1 waqtmoney waqtmoney 2193 Jul 28 00:14 check-geetpay-users.js
-rw-r--r-- 1 waqtmoney waqtmoney 1133 Jul 28 00:14 check-github-actions.js
-rw-r--r-- 1 waqtmoney waqtmoney 1267 Jul 28 00:14 check-last-paid.js
-rw-r--r-- 1 waqtmoney waqtmoney 682 Jul 28 00:14 check-master-tenants.js
-rw-r--r-- 1 waqtmoney waqtmoney 1503 Jul 28 00:14 check-stats-one-more-time.js
-rw-r--r-- 1 waqtmoney waqtmoney 2156 Jul 28 00:14 check-tables.js
drwxr-xr-x 2 waqtmoney waqtmoney 51 Jul 28 00:14 config
drwxr-xr-x 2 waqtmoney waqtmoney 4096 Jul 28 00:14 controllers
drwxr-xr-x 2 waqtmoney waqtmoney 81 Jul 28 00:14 database
-rw-r--r-- 1 waqtmoney waqtmoney 799 Jul 28 00:14 debug-api-stats.js
-rw-r--r-- 1 waqtmoney waqtmoney 128 Jul 28 00:15 diagnostics.txt
drwxr-xr-x 2 waqtmoney waqtmoney 31 Jul 28 00:14 docs
-rw------- 1 waqtmoney waqtmoney 3217 Jul 9 11:23 .env
-rw------- 1 root root 0 Jul 9 10:38 .env.save
-rw-r--r-- 1 waqtmoney waqtmoney 3152 Jul 9 10:38 .env.save.1
-rw-r--r-- 1 waqtmoney waqtmoney 171 Jul 28 00:14 .htaccess
-rw-r--r-- 1 waqtmoney waqtmoney 49 Jul 28 00:14 index.js
-rw-r--r-- 1 waqtmoney waqtmoney 1399 Jul 28 00:14 list-tables.js
drwxr-xr-x 2 waqtmoney waqtmoney 202 Jul 28 00:14 middleware
drwxr-xr-x 2 waqtmoney waqtmoney 4096 Jul 28 00:14 models
drwxr-xr-x 166 root root 8192 Jul 27 23:51 node_modules
-rw-r--r-- 1 waqtmoney waqtmoney 886 Jul 28 00:14 package.json
-rw-r--r-- 1 waqtmoney waqtmoney 89157 Jul 28 00:14 package-lock.json
-rw-r--r-- 1 waqtmoney waqtmoney 9244 Jul 28 00:14 README.md
drwxr-xr-x 2 waqtmoney waqtmoney 4096 Jul 28 00:14 routes
drwxr-xr-x 2 waqtmoney waqtmoney 8192 Jul 28 00:14 scratch
drwxr-xr-x 2 waqtmoney waqtmoney 4096 Jul 28 00:14 scripts
-rw-r--r-- 1 waqtmoney waqtmoney 1773 Jul 28 00:14 server.js
drwxr-xr-x 2 waqtmoney waqtmoney 4096 Jul 28 00:14 services
-rw-r--r-- 1 root root 1302 Jul 27 23:51 superadmin_debug.log
-rw-r--r-- 1 waqtmoney waqtmoney 1231 Jul 28 00:14 test-disb-ok.js
-rw-r--r-- 1 waqtmoney waqtmoney 5374 Jul 28 00:14 test-real-stats.js
-rw-r--r-- 1 waqtmoney waqtmoney 2796 Jul 28 00:14 test-reports-match.js
-rw-r--r-- 1 waqtmoney waqtmoney 3810 Jul 28 00:14 test-stats.js
-rw-r--r-- 1 waqtmoney waqtmoney 1872 Jul 28 00:14 test-trend.js
drwxr-xr-x 2 waqtmoney waqtmoney 25 Jul 8 19:51 tmp
drwxr-xr-x 8 root root 128 Jul 10 15:40 uploads
drwxr-xr-x 2 waqtmoney waqtmoney 62 Jul 28 00:14 utils
drwxr-xr-x 3 waqtmoney waqtmoney 28 May 22 16:30 .well-known
=== NODE_MODULES DETAILS ===
drwxr-xr-x 166 root root 8192 Jul 27 23:51 node_modules
total 20
drwxr-xr-x 4 root root 65 Jul 27 23:51 .
drwxr-xr-x 166 root root 8192 Jul 27 23:51 ..
drwxr-xr-x 5 root root 76 Jul 27 23:51 lib
-rw-r--r-- 1 root root 4067 Jul 27 23:51 package.json
-rw-r--r-- 1 root root 3013 Jul 27 23:51 README.md
drwxr-xr-x 11 root root 293 Jul 27 23:51 src
=== HTACCESS DETAILS ===
DirectoryIndex disabled
# RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ http://localhost:8082/$1 [P,L]
# EDI_API_SUBDOMAIN_BYPASS_START
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(edi-api|testing-edi-api)\.waqtmoney\.com$ [NC]
RewriteRule ^ - [L]
# EDI_API_SUBDOMAIN_BYPASS_END
Header set Permissions-Policy "camera=(self), microphone=(self), geolocation=(), payment=()"
# ====================================================================
# WAQT MONEY PRODUCTION .HTACCESS
# React + Vite + cPanel + Apache
# High Performance + Security + Caching + EDI API Bypass
# ====================================================================
DirectoryIndex index.html
# ==========================================================
# Compression (GZIP)
# ==========================================================
AddOutputFilterByType DEFLATE \
text/plain \
text/html \
text/xml \
text/css \
text/javascript \
application/javascript \
application/json \
application/xml \
application/rss+xml \
image/svg+xml \
application/vnd.ms-fontobject \
font/ttf \
font/otf \
font/woff \
font/woff2
# ==========================================================
# Brotli Compression
# ==========================================================
AddOutputFilterByType BROTLI_COMPRESS \
text/plain \
text/html \
text/css \
text/javascript \
application/javascript \
application/json \
image/svg+xml \
font/woff2
# ==========================================================
# Browser Cache
# ==========================================================
ExpiresActive On
# HTML
ExpiresByType text/html "access plus 0 seconds"
# Images
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/avif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# CSS
ExpiresByType text/css "access plus 1 year"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
# Fonts
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType application/font-woff "access plus 1 year"
# ==========================================================
# Headers
# ==========================================================
# Static assets cache
Header set Cache-Control "public, max-age=31536000, immutable"
# HTML no cache
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
# Security Headers
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
# ==========================================================
# React SPA + EDI API Routing
# ==========================================================
RewriteEngine On
RewriteBase /
# ------------------------------------------------------
# Force HTTPS
# ------------------------------------------------------
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# ------------------------------------------------------
# Skip React Routing for EDI APIs
# ------------------------------------------------------
RewriteCond %{HTTP_HOST} ^(edi-api|testing-edi-api)\.waqtmoney\.com$ [NC]
RewriteRule ^ - [L]
# ------------------------------------------------------
# Existing files/directories
# ------------------------------------------------------
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# ------------------------------------------------------
# React Router
# ------------------------------------------------------
RewriteRule ^ index.html [L]
# React Router 404
ErrorDocument 404 /index.html
# ==========================================================
# PHP Handler (cPanel)
# ==========================================================
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php82” package as the default “PHP” programming language.
AddHandler application/x-httpd-ea-php82 .php .php8 .phtml
# php -- END cPanel-generated handler, do not edit
=== RUNNING DIAGNOSTIC SCRIPT ===
=== DIAGNOSING VIA SSH-PUTTY EMULATION ===
Executing: whoami
Output:
waqtmoney
Executing: pm2 list || true
/bin/bash: pm2: command not found
Output:
(No stdout)
Executing: sudo pm2 list || true
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required
Output:
(No stdout)
Executing: ls -ld /home/waqtmoney/public_html/payday-api/node_modules || echo 'node_modules does not exist'
Output:
drwxr-xr-x 166 root root 8192 Jul 27 23:51 /home/waqtmoney/public_html/payday-api/node_modules
Executing: ls -la /home/waqtmoney/public_html/payday-api/database
Output:
total 92
drwxr-xr-x 2 waqtmoney waqtmoney 81 Jul 28 00:14 .
drwxr-xr-x 17 waqtmoney nobody 4096 Jul 28 00:14 ..
-rw-r--r-- 1 waqtmoney waqtmoney 3369 Jul 28 00:14 bootstrap.js
-rw-r--r-- 1 waqtmoney waqtmoney 10074 Jul 28 00:14 masterSchema.js
-rw-r--r-- 1 waqtmoney waqtmoney 65117 Jul 28 00:14 schema.js
-rw-r--r-- 1 waqtmoney waqtmoney 4959 Jul 28 00:14 seed.js
Executing: node -e "console.log(require('./database/bootstrap'))" || true
Output:
{ bootstrap: [AsyncFunction: bootstrap] }
Executing: node -e "console.log(require('./app'))" || true
/home/waqtmoney/public_html/payday-api/config/uploads.js:36
if (CONFIGURED_UPLOADS_ROOT === DEFAULT_UPLOADS_ROOT) throw error;
^
Error: EACCES: permission denied, access '/home/waqtmoney/public_html/payday-api/uploads'
at Object.accessSync (node:fs:242:11)
at prepareUploadsRoot (/home/waqtmoney/public_html/payday-api/config/uploads.js:28:6)
at resolveUploadsRoot (/home/waqtmoney/public_html/payday-api/config/uploads.js:34:12)
at Object. (/home/waqtmoney/public_html/payday-api/config/uploads.js:46:22)
at Module._compile (node:internal/modules/cjs/loader:1871:14)
at Module._extensions..js (node:internal/modules/cjs/loader:2002:10)
at Module.load (node:internal/modules/cjs/loader:1594:32)
at Module._load (node:internal/modules/cjs/loader:1396:12)
at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
at Module.require (node:internal/modules/cjs/loader:1617:12) {
errno: -13,
code: 'EACCES',
syscall: 'access',
path: '/home/waqtmoney/public_html/payday-api/uploads'
}
Node.js v24.18.0
Output:
(No stdout)
=== APACHE ERROR LOGS ===
=== READING APACHE ERROR LOG ===
Apache error log does not exist.
=== DIAGNOSTICS: END ===