diff --git a/.firebase/hosting.YnVpbGQ.cache b/.firebase/hosting.YnVpbGQ.cache
index 9aec138..09b2b17 100644
--- a/.firebase/hosting.YnVpbGQ.cache
+++ b/.firebase/hosting.YnVpbGQ.cache
@@ -1,33 +1,35 @@
-index.html,1725860405793,6310d84ffdca1cba888ffec82dec1bd853728243a85f931c7bbb1ea501234ed9
-robots.txt,1725860392506,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2
-logo192.png,1725860392504,f66564670b5bfe49f3f04a5b63107bae60f4a7736f1d3b83aa0115f7acf45150
-favicon.ico,1725860392503,1463be9bedc82e16f9364eec7a1f5152cbe56229401381eed65c1496cb884407
-asset-manifest.json,1725860405804,4e32ba450098f872b3a581873dc770a8b5c91d6d56f58e07f8ffe31b70c53ef7
-logo512.png,1725860392505,2356e0b814e58a349935c8de17226873d615d088a867d591fef48a64c80c9a2f
-static/media/exit.5b9b641b90012b1192056a8c7e1b8c45.svg,1725860405791,4ff12475566874f3f3d3be8e8c97ca14a7b9292a04481947610725c16bb1599d
-static/media/coffee.46aafd6dd9e4a1d3460e80ff9969dc6e.svg,1725860405791,f27933e7a7e8113c7a2be9eba7492922dd5918b77575f02a8ad595cb079e5547
-static/media/infinity.d099870a8639593717e3b17aea138c92.svg,1725860405791,70485bc15570a561994193d7e3e6b08a1f2de236248676255b871c8697e4c577
-manifest.json,1725860392505,4e1d3adad9ce7e17c0d13fac197f1c27091906f4ecf3909c9f51247bff345118
-static/media/cardo-greek-ext-400-normal.134b821611b16e279388.woff2,1725860405791,f47df12ed94c7e7bb8a2e37e21d10cde4a47fd41eeda611d924a55187ad01466
-static/media/cardo-latin-400-normal.4911b85d7a3867b3911f.woff2,1725860405791,8f43ac21350311e2925bf981b9fd8da34935abad28c7b1028c2ca2756af003f3
-static/media/cardo-greek-400-normal.79d37e879083ce714bd7.woff2,1725860405791,074bc81d8ca5a2111b391b121b56d17a67601361e97404d3d7792dbda1dbe5bd
-static/media/cardo-greek-400-normal.82ddcf833fd34281b75d.woff,1725860405791,3b4c19d6c84e7a572ee345b68fc874deeec43d4690c7d590a9029fddf3dbddf5
-static/media/bracket.910c02ed0a238012f80f22086064c5d9.svg,1725860405791,fc713f945dd7cd2ca06c86d392ebdea3a6cf04a3e009e72877aec5e3be787486
-static/media/cardo-greek-ext-400-normal.f2008e9d17e15badfffd.woff,1725860405791,f3e91ac60b6103eb6065b6d12d6adb656d95b1ab9904f98d15916b49849385ec
-static/js/main.4e103dc0.js.LICENSE.txt,1725860405805,fd222b36f412805419e026feba067f18ca36cf439c430ae6dfd4bf072d541304
-static/js/453.18d94f3f.chunk.js,1725860405805,0c85c1b7dd1771b07c17867a1b4cc9147aac500e2761b78e5f43c3af5a990b97
-static/js/453.18d94f3f.chunk.js.map,1725860405805,01852c42a7189dcf6095a7437716308dcf1058fbf9afeee17e1d113d8fc0016f
-static/css/main.f0edc1a0.css,1725860405805,1c87f7cfa7da9415d7b6abe70cf41d8705f1d751ee0f4d6b406baafbb9bcca8b
-static/css/main.f0edc1a0.css.map,1725860405805,1a40319fdab387a87e11b7c3aadf554d86722ada29a129ba316b832bcdbaefa0
-static/media/cardo-latin-ext-400-normal.d90efa9a5c52b57c81be.woff2,1725860405792,ac5c40b8f0f0170763306cbd56736ea93f3bc8a46bd69691097be496e3b9a604
-static/media/cardo-latin-400-normal.a3fc903c20de90e51735.woff,1725860405791,cf7c3f21e093e6af8f4490da55d497398a38ff9485afae511311013338b8fe82
-static/media/cardo-latin-ext-400-normal.448cff0b9a0afb700151.woff,1725860405791,b285c4d668a7c861ca15b7dd3e126f26f6c06449c41a2c823a10146b0550089c
-static/media/Blackmild Regular.5b441560e0d850038d0f.otf,1725860405791,60300d3ccf8a22a528b216703a9677022b27e7f05fe71f9768e58220c132a4c9
-static/media/Cinzel-VariableFont_wght.2d087b545bf495f3d86d.ttf,1725860405791,3394f58fb0427fbe8d8dcc90863079661330c57c41d22309fabdda6f9bbbf7e3
-static/media/Cardo-Regular.4ad75d4da97e1cf6655b.ttf,1725860405791,9441d454efe51434f20f9f848652531e4caa3ffa57a3c7d2caa08370b01b2c63
-static/media/card.1d7fa489536497609c42.png,1725860405805,aed32aacda18dd89590e88b93da24764ec4c8d3a94f9390d90b241fb88f20788
-static/js/main.4e103dc0.js,1725860405805,20a9e0c99d6ba25a839ea31b3fcceb3d71c1e6835061ddb862bc51a56f0cf0ca
-static/media/applogo.9a90eed8f247993fa372.png,1725860405805,162fdef5335b42be3160731c6f9472f17d8a47b1a91f0f14f2a4fcf3b46559cd
-static/media/titlecard.420823b8e1f5db1380e4.png,1725860405806,77bccf483368ffe9622e590756dac4c2011d125589802b193a9d9ac79f1ddf0b
-static/media/cardback.6c07d542c2853cbf82d3.png,1725860405806,4cd2749fe35df98d738b7504afe8469dbdd2ba23101544b81c9592be8c5321f4
-static/js/main.4e103dc0.js.map,1725860405807,61fad40e9da546f6b8440539286164bb2d5d301525c6149d772184ed61d7dc04
+robots.txt,1726876647544,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2
+manifest.json,1726876647544,4e1d3adad9ce7e17c0d13fac197f1c27091906f4ecf3909c9f51247bff345118
+index.html,1726876659230,354b28bc9760fd2b17eab90a8d858fc8e52f9564c0c63c37be8a99d181e133e7
+asset-manifest.json,1726876659241,afa5940bbd1bc504018bd4f1fddfedc7ec8465288067dd8d8f933e89e71b170d
+favicon.ico,1726876647541,6048ca490d966978cc92b22151024057c5643b3bc69f6cdf9856fba38e8877fa
+static/media/exit.5b9b641b90012b1192056a8c7e1b8c45.svg,1726876659228,4ff12475566874f3f3d3be8e8c97ca14a7b9292a04481947610725c16bb1599d
+static/media/infinity.d099870a8639593717e3b17aea138c92.svg,1726876659228,70485bc15570a561994193d7e3e6b08a1f2de236248676255b871c8697e4c577
+static/media/coffee.46aafd6dd9e4a1d3460e80ff9969dc6e.svg,1726876659228,f27933e7a7e8113c7a2be9eba7492922dd5918b77575f02a8ad595cb079e5547
+static/media/cardo-latin-400-normal.4911b85d7a3867b3911f.woff2,1726876659228,8f43ac21350311e2925bf981b9fd8da34935abad28c7b1028c2ca2756af003f3
+static/media/cardo-greek-400-normal.79d37e879083ce714bd7.woff2,1726876659228,074bc81d8ca5a2111b391b121b56d17a67601361e97404d3d7792dbda1dbe5bd
+static/media/cardo-greek-400-normal.82ddcf833fd34281b75d.woff,1726876659228,3b4c19d6c84e7a572ee345b68fc874deeec43d4690c7d590a9029fddf3dbddf5
+static/media/cardo-greek-ext-400-normal.134b821611b16e279388.woff2,1726876659228,f47df12ed94c7e7bb8a2e37e21d10cde4a47fd41eeda611d924a55187ad01466
+static/media/bracket.910c02ed0a238012f80f22086064c5d9.svg,1726876659228,fc713f945dd7cd2ca06c86d392ebdea3a6cf04a3e009e72877aec5e3be787486
+static/media/cardo-greek-ext-400-normal.f2008e9d17e15badfffd.woff,1726876659228,f3e91ac60b6103eb6065b6d12d6adb656d95b1ab9904f98d15916b49849385ec
+static/js/main.cce1692b.js.LICENSE.txt,1726876659241,fd222b36f412805419e026feba067f18ca36cf439c430ae6dfd4bf072d541304
+static/js/453.18d94f3f.chunk.js,1726876659241,0c85c1b7dd1771b07c17867a1b4cc9147aac500e2761b78e5f43c3af5a990b97
+static/js/453.18d94f3f.chunk.js.map,1726876659242,01852c42a7189dcf6095a7437716308dcf1058fbf9afeee17e1d113d8fc0016f
+static/css/main.59a52c37.css,1726876659242,cb1aee4c30f148e3e41a58b1f43c2b03814942da517af2d341db473565473725
+static/css/main.59a52c37.css.map,1726876659241,bcdda2feb46a3e91c65dcaabd8cc9bab2ee623d259e7fee95565b88ef3e7aa1d
+static/media/cardo-latin-ext-400-normal.d90efa9a5c52b57c81be.woff2,1726876659228,ac5c40b8f0f0170763306cbd56736ea93f3bc8a46bd69691097be496e3b9a604
+static/media/cardo-latin-400-normal.a3fc903c20de90e51735.woff,1726876659228,cf7c3f21e093e6af8f4490da55d497398a38ff9485afae511311013338b8fe82
+static/media/cardo-latin-ext-400-normal.448cff0b9a0afb700151.woff,1726876659228,b285c4d668a7c861ca15b7dd3e126f26f6c06449c41a2c823a10146b0550089c
+static/media/CyarenLogo.d899a3de152d4020e373.png,1726876659241,06d88a03004c107e8170e6995d20c27ef9383ff8ac1fd3c8432f119eb3b6431a
+static/media/Blackmild Regular.5b441560e0d850038d0f.otf,1726876659227,60300d3ccf8a22a528b216703a9677022b27e7f05fe71f9768e58220c132a4c9
+logo192.png,1726876647542,1a626b8669164ea8df1bc1b55b3fba2844f6e258f86204ebcadc2e283d8d7d0a
+static/media/Cinzel-VariableFont_wght.2d087b545bf495f3d86d.ttf,1726876659227,3394f58fb0427fbe8d8dcc90863079661330c57c41d22309fabdda6f9bbbf7e3
+static/media/logo.9ad0b2edab4ef5fc261b.png,1726876659241,cf3180ffbfd0da385f809b161518dd1f9ae74b33b803ae92ab1f689f518620a5
+static/media/Cardo-Regular.4ad75d4da97e1cf6655b.ttf,1726876659228,9441d454efe51434f20f9f848652531e4caa3ffa57a3c7d2caa08370b01b2c63
+static/media/card.1d7fa489536497609c42.png,1726876659241,aed32aacda18dd89590e88b93da24764ec4c8d3a94f9390d90b241fb88f20788
+logo512.png,1726876647543,3d55e276f6674ba35ec7f6da0170e3e7b3c0016d0a84ee80f11954f7ab341862
+static/js/main.cce1692b.js,1726876659243,38fa9b797c454b23fa57226e91c0299f19185c48629de59381d4937bd38f98ab
+static/media/applogo.9a90eed8f247993fa372.png,1726876659241,162fdef5335b42be3160731c6f9472f17d8a47b1a91f0f14f2a4fcf3b46559cd
+static/media/titlecard.420823b8e1f5db1380e4.png,1726876659243,77bccf483368ffe9622e590756dac4c2011d125589802b193a9d9ac79f1ddf0b
+static/media/cardback.6c07d542c2853cbf82d3.png,1726876659242,4cd2749fe35df98d738b7504afe8469dbdd2ba23101544b81c9592be8c5321f4
+static/js/main.cce1692b.js.map,1726876659242,c5543305e62b653f85b5c8d20534d0d3766509eecec9ea27d6e93ae218dfadea
diff --git a/.firebaseignore b/.firebaseignore
new file mode 100644
index 0000000..8bae803
--- /dev/null
+++ b/.firebaseignore
@@ -0,0 +1 @@
+**/*.xcf
diff --git a/.gitignore b/.gitignore
index 71255bc..f27256e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,5 @@ yarn-error.log*
# storybook
*storybook.log
+
+**/*.xcf
diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz
index adf05de..85b4498 100644
Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ
diff --git a/database-debug.log b/database-debug.log
index 3e5ee87..173e92e 100644
--- a/database-debug.log
+++ b/database-debug.log
@@ -1,9 +1,9 @@
-21:13:22.421 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
-21:13:22.572 [main] INFO com.firebase.server.forge.App$ - Listening at 127.0.0.1:9000
-21:13:31.975 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO com.firebase.core.namespace.NamespaceActor - fibonacci-fold-default-rtdb successfully activated FBKV (SurveyIdle(0)) wait: 121ms, init: 0ms
-21:13:32.035 [NamespaceSystem-blocking-namespace-operation-dispatcher-6] INFO com.firebase.core.namespace.StateManager - Namespace fibonacci-fold-default-rtdb status Active to Active
-21:14:00.571 [FirebaseWorkerPool-1-2] WARN com.firebase.core.persistence.backend.dummy.EmulatorMetadataPersistence - Multiple projectIds are not recommended in single project mode. Requested
+22:11:37.220 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
+22:11:37.437 [main] INFO com.firebase.server.forge.App$ - Listening at 127.0.0.1:9000
+22:11:46.657 [NamespaceSystem-akka.actor.default-dispatcher-4] INFO com.firebase.core.namespace.NamespaceActor - fibonacci-fold-default-rtdb successfully activated FBKV (SurveyIdle(0)) wait: 152ms, init: 0ms
+22:11:46.748 [NamespaceSystem-blocking-namespace-operation-dispatcher-6] INFO com.firebase.core.namespace.StateManager - Namespace fibonacci-fold-default-rtdb status Active to Active
+22:11:51.139 [FirebaseWorkerPool-1-3] WARN com.firebase.core.persistence.backend.dummy.EmulatorMetadataPersistence - Multiple projectIds are not recommended in single project mode. Requested
namespace fake-project-id, but the emulator is configured for fibonacci-fold-default-rtdb. To
opt-out of single project mode add/set the singleProjectMode: false property in
the firebase.json emulators config.
-21:14:00.575 [NamespaceSystem-akka.actor.default-dispatcher-10] INFO com.firebase.core.namespace.NamespaceActor - fake-project-id successfully activated FBKV (SurveyIdle(0)) wait: 1ms, init: 0ms
+22:11:51.147 [NamespaceSystem-akka.actor.default-dispatcher-5] INFO com.firebase.core.namespace.NamespaceActor - fake-project-id successfully activated FBKV (SurveyIdle(0)) wait: 3ms, init: 0ms
diff --git a/database.rules.json b/database.rules.json
index a994485..259d617 100644
--- a/database.rules.json
+++ b/database.rules.json
@@ -1,11 +1,11 @@
{
"rules": {
- ".read": "auth != null",
- ".write": "auth != null",
+ ".read": "auth != null && auth.provider == 'anonymous'",
+ ".write": "auth != null && auth.provider == 'anonymous'",
"users": {
"$uid": {
- ".read": "$uid === auth.uid",
- ".write": "$uid === auth.uid"
+ ".read": "$uid === auth.uid && auth.provider == 'anonymous'",
+ ".write": "$uid === auth.uid && auth.provider == 'anonymous'"
}
}
}
diff --git a/package.json b/package.json
index 10e10ad..4a42684 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.7.7",
"crypto-js": "^4.2.0",
"firebase": "^10.13.0",
"react": "^18.3.1",
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..114de5e
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,30 @@
+# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
+
+PassengerAppRoot "/home/cyarsflu/nodejs_app"
+PassengerBaseURI "/"
+PassengerNodejs "/home/cyarsflu/nodevenv/nodejs_app/20/bin/node"
+PassengerAppType node
+PassengerStartupFile server.js
+
+# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
+
+
+ RewriteEngine On
+ RewriteBase /
+
+ # Allow API requests to be handled by the Node.js app directly
+ RewriteCond %{REQUEST_URI} ^/api/ [NC]
+ RewriteRule ^ - [L]
+
+ # Redirect all other routes to index.html for React frontend routing
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^ /index.html [L]
+
+
+# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGIN
+
+
+
+
+# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END
diff --git a/public/favicon.ico b/public/favicon.ico
index a11777c..f701ec1 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/index.html b/public/index.html
index ef643e6..868291c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -5,13 +5,10 @@
-
+
-
React App
+ Fibonacci's Fold
diff --git a/public/logo192.png b/public/logo192.png
index fc44b0a..dbed278 100644
Binary files a/public/logo192.png and b/public/logo192.png differ
diff --git a/public/logo512.png b/public/logo512.png
index a4e47a6..f4a0511 100644
Binary files a/public/logo512.png and b/public/logo512.png differ
diff --git a/server/app.js b/server/app.js
new file mode 100644
index 0000000..712a311
--- /dev/null
+++ b/server/app.js
@@ -0,0 +1,25 @@
+const express = require('express');
+const session = require('express-session');
+const app = express();
+const dotenv = require('dotenv');
+
+// Load environment variables
+dotenv.config();
+
+// Ensure that SESSION_SECRET is defined
+if (!process.env.SESSIONS_SECRET) {
+ console.error('FATAL ERROR: SESSIONS_SECRET is not defined.');
+ process.exit(1);
+}
+
+// Middleware
+app.use(express.json());
+app.use(
+ session({
+ secret: process.env.SESSIONS_SECRET,
+ resave: false,
+ saveUninitialized: true,
+ })
+);
+
+module.exports = app;
diff --git a/server/authRoutes.js b/server/authRoutes.js
new file mode 100644
index 0000000..75cbbdc
--- /dev/null
+++ b/server/authRoutes.js
@@ -0,0 +1,151 @@
+const express = require('express');
+const router = express.Router();
+const passport = require('passport');
+const GoogleStrategy = require('passport-google-oauth20').Strategy;
+const jwt = require('jsonwebtoken');
+const db = require('./db');
+const { generateUniqueId } = require('../shared/utils/crypto');
+
+// Check user session (GET)
+router.get('/api/auth/session', (req, res) => {
+ const token = req.cookies.token;
+
+ if (!token) {
+ return res.json({ userId: null });
+ }
+
+ try {
+ // Verify the token
+ const decoded = jwt.verify(token, process.env.JWT_SECRET);
+ res.json({ userId: decoded.userId });
+ } catch (error) {
+ console.error('Invalid token:', error);
+ res.status(401).json({ userId: null, error: 'Invalid token' });
+ }
+});
+
+// Sign in anonymously (POST)
+router.post('/api/auth/signin-anonymous', async (req, res) => {
+ const userId = generateUniqueId(); // Generate unique ID for anonymous user
+
+ try {
+ // Insert the anonymous user into the database (no sensitive data, just ID)
+ await db.query('INSERT INTO users (id, provider) VALUES (?, ?)', [
+ userId,
+ 'anonymous',
+ ]);
+
+ // Generate JWT token for the anonymous user
+ const token = jwt.sign(
+ { userId, provider: 'anonymous' },
+ process.env.JWT_SECRET,
+ { expiresIn: '1h' }
+ );
+
+ // Set the JWT in an httpOnly cookie for better security
+ res.cookie('token', token, { httpOnly: true });
+
+ res.status(200).json({ message: 'Anonymous user signed in' });
+ } catch (error) {
+ console.error('Error creating anonymous user:', error);
+ res.status(500).json({ error: 'Server error' });
+ }
+});
+
+router.post('/api/auth/refresh-token', (req, res) => {
+ const refreshToken = req.cookies.refreshToken;
+ if (!refreshToken) return res.status(403).send('Refresh token required');
+
+ // Verify the refresh token and issue a new JWT
+ try {
+ const decoded = jwt.verify(refreshToken, process.env.JWT_REFRESH_SECRET);
+ const newToken = jwt.sign(
+ { userId: decoded.userId },
+ process.env.JWT_SECRET,
+ { expiresIn: '1h' }
+ );
+ res.cookie('token', newToken, { httpOnly: true });
+ res.json({ message: 'Token refreshed' });
+ } catch (error) {
+ res.status(403).send('Invalid refresh token');
+ }
+});
+
+// Initialize Passport
+router.use(passport.initialize());
+
+// Google OAuth Strategy
+passport.use(
+ new GoogleStrategy(
+ {
+ clientID: process.env.GOOGLE_CLIENT_ID,
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
+ callbackURL: '/api/auth/google/callback',
+ },
+ async (accessToken, refreshToken, profile, done) => {
+ const googleId = profile.id; // This is the unique ID from Google
+
+ try {
+ // Insert the Google user into the database if they don't exist
+ await db.query(
+ 'INSERT INTO users (id, provider) VALUES (?, ?) ON DUPLICATE KEY UPDATE id = id',
+ [googleId, 'google']
+ );
+
+ // Generate JWT token for the Google user
+ const token = jwt.sign(
+ { userId: googleId, provider: 'google' },
+ process.env.JWT_SECRET,
+ { expiresIn: '1h' }
+ );
+
+ // Pass the token back
+ return done(null, token);
+ } catch (error) {
+ return done(error);
+ }
+ }
+ )
+);
+
+// Start Google OAuth login
+router.get(
+ '/api/auth/google',
+ passport.authenticate('google', { scope: ['profile', 'email'] })
+);
+
+// Callback route for Google OAuth
+router.get(
+ '/api/auth/google/callback',
+ passport.authenticate('google', { failureRedirect: '/' }),
+ (req, res) => {
+ // After successful authentication, generate the JWT (which is in req.user)
+ const token = req.user; // Passport's Google strategy should return the JWT
+
+ // Set the JWT in an httpOnly cookie
+ res.cookie('token', token, { httpOnly: true });
+
+ // Redirect to the frontend dashboard or a secure page without the token in the URL
+ res.redirect('/dashboard');
+ }
+);
+
+// Example of a protected route (no need for query token)
+router.get('/dashboard', (req, res) => {
+ // Extract token from cookies (JWT is automatically sent as a cookie)
+ const token = req.cookies.token;
+
+ if (!token) {
+ return res.status(403).send('Token is required');
+ }
+
+ try {
+ // Verify the token and decode it
+ const decoded = jwt.verify(token, process.env.JWT_SECRET);
+ res.send(`Welcome, user with ID: ${decoded.userId}`);
+ } catch (err) {
+ res.status(403).send('Invalid token');
+ }
+});
+
+module.exports = router;
diff --git a/server/db.js b/server/db.js
new file mode 100644
index 0000000..5dabfce
--- /dev/null
+++ b/server/db.js
@@ -0,0 +1,15 @@
+const mysql = require('mysql2/promise');
+const dotenv = require('dotenv');
+
+// Load environment variables
+dotenv.config();
+
+// Create a MySQL connection pool with promises
+const db = mysql.createPool({
+ host: process.env.MYSQL_HOST,
+ user: process.env.MYSQL_USER,
+ password: process.env.MYSQL_PASSWORD,
+ database: process.env.MYSQL_DATABASE,
+});
+
+module.exports = db;
diff --git a/server/package.json b/server/package.json
new file mode 100644
index 0000000..5a7f7bd
--- /dev/null
+++ b/server/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "fibonacci-fold-server",
+ "version": "1.0.0",
+ "main": "server.js",
+ "scripts": {
+ "start": "node server.js"
+ },
+ "dependencies": {
+ "crypto-js": "^4.2.0",
+ "dotenv": "^8.2.0",
+ "express": "^4.17.1",
+ "express-session": "^1.18.0",
+ "jsonwebtoken": "^9.0.2",
+ "mysql2": "^2.3.3",
+ "passport": "^0.7.0",
+ "passport-google-oauth20": "^2.0.0",
+ "uuid": "^10.0.0"
+ }
+}
diff --git a/server/server.js b/server/server.js
new file mode 100644
index 0000000..f3cdba0
--- /dev/null
+++ b/server/server.js
@@ -0,0 +1,113 @@
+const authRoutes = require('./authRoutes');
+const app = require('./app');
+const db = require('./db');
+
+// Routes
+app.use(authRoutes); // Use the auth routes
+
+// Create new session
+app.post('/api/session', async (req, res) => {
+ const sessionId = req.body.sessionId;
+ const query = 'INSERT INTO sessions (id) VALUES (?)';
+ await db.query(query, [sessionId], (err, result) => {
+ if (err) return res.status(500).json({ error: err });
+ res.status(200).json({ sessionId });
+ });
+});
+
+// Add user to session
+app.post('/api/session/:sessionId/user', async (req, res) => {
+ const { sessionId } = req.params;
+ const { userId, provider } = req.body;
+
+ // Insert the user into the `users` table if they don't already exist
+ const userQuery = `
+ INSERT INTO users (id, provider)
+ VALUES (?, ?)
+ ON DUPLICATE KEY UPDATE id = id`; // If the user already exists, do nothing
+
+ // Insert the user into the `session_users` table for this session
+ const sessionUserQuery = `
+ INSERT INTO session_users (session_id, user_id, provider)
+ VALUES (?, ?, ?)
+ ON DUPLICATE KEY UPDATE session_id = session_id`; // If the user is already in the session, do nothing
+
+ // Insert the initial vote (-1) for the user in this session
+ const voteQuery = `
+ INSERT INTO votes (session_id, user_id, vote)
+ VALUES (?, ?, -1)
+ ON DUPLICATE KEY UPDATE vote = -1`; // If a vote already exists, reset it to -1
+
+ try {
+ // Insert the user into the `users` table
+ await db.query(userQuery, [userId, provider]);
+
+ // Add the user to the `session_users` table
+ await db.query(sessionUserQuery, [sessionId, userId, provider]);
+
+ // Set the initial vote for the user in the session
+ await db.query(voteQuery, [sessionId, userId]);
+
+ res.status(200).json({ userId });
+ } catch (err) {
+ console.error('Error adding user to session:', err);
+ res.status(500).json({ error: 'Server error' });
+ }
+});
+
+// Get users in a session
+app.get('/api/session/:sessionId/users', async (req, res) => {
+ const { sessionId } = req.params;
+ const query = `
+ SELECT users.id, users.username
+ FROM votes
+ JOIN users ON votes.user_id = users.id
+ WHERE session_id = ?
+ `;
+
+ try {
+ const [results] = await db.query(query, [sessionId]);
+ console.log('Query results:', results); // Log query result
+ res.status(200).json(results);
+ } catch (err) {
+ console.error('Error fetching session users:', err);
+ res.status(500).json({ error: 'Server error' });
+ }
+});
+
+app.delete('/api/session/:sessionId/votes/:userId', async (req, res) => {
+ const { sessionId, userId } = req.params;
+ const query = 'DELETE FROM votes WHERE session_id = ? AND user_id = ?';
+
+ try {
+ const [result] = await db.query(query, [sessionId, userId]);
+ res
+ .status(200)
+ .json({ success: true, message: 'Vote removed successfully' });
+ } catch (error) {
+ console.error('Error removing vote:', error);
+ res.status(500).json({ error: 'Server error' });
+ }
+});
+
+app.delete('/api/session/:sessionId/users/:userId', async (req, res) => {
+ const { sessionId, userId } = req.params;
+ const query =
+ 'DELETE FROM session_users WHERE session_id = ? AND user_id = ?';
+
+ try {
+ const [result] = await db.query(query, [sessionId, userId]);
+ res
+ .status(200)
+ .json({ success: true, message: 'User removed successfully' });
+ } catch (error) {
+ console.error('Error removing user:', error);
+ res.status(500).json({ error: 'Server error' });
+ }
+});
+
+// Start the server
+const PORT = process.env.PORT || 5000;
+app.listen(PORT, () => {
+ console.log(`Server is running on port ${PORT}`);
+});
diff --git a/server/stderr.log b/server/stderr.log
new file mode 100644
index 0000000..f133ada
--- /dev/null
+++ b/server/stderr.log
@@ -0,0 +1,1267 @@
+MySQL query error: Error: getaddrinfo ENOTFOUND server269.web-hosting.com:3306
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:31:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ENOTFOUND',
+ errno: -3008,
+ sql: undefined,
+ sqlState: undefined,
+ sqlMessage: undefined
+}
+MySQL query error: Error: getaddrinfo ENOTFOUND server269.web-hosting.com:3306
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:31:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ENOTFOUND',
+ errno: -3008,
+ sql: undefined,
+ sqlState: undefined,
+ sqlMessage: undefined
+}
+MySQL query error: Error: Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:26:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ER_NO_SUCH_TABLE',
+ errno: 1146,
+ sql: 'SELECT * FROM my_table',
+ sqlState: '42S02',
+ sqlMessage: "Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist"
+}
+MySQL query error: Error: Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:26:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ER_NO_SUCH_TABLE',
+ errno: 1146,
+ sql: 'SELECT * FROM my_table',
+ sqlState: '42S02',
+ sqlMessage: "Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist"
+}
+MySQL query error: Error: Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:26:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ER_NO_SUCH_TABLE',
+ errno: 1146,
+ sql: 'SELECT * FROM my_table',
+ sqlState: '42S02',
+ sqlMessage: "Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist"
+}
+MySQL query error: Error: Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:26:31
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:346:12)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:280:10)
+ at jsonParser (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/body-parser/lib/types/json.js:113:7) {
+ code: 'ER_NO_SUCH_TABLE',
+ errno: 1146,
+ sql: 'SELECT * FROM my_table',
+ sqlState: '42S02',
+ sqlMessage: "Table 'cyarsflu_fibonacci-fold.my_table' doesn't exist"
+}
+Error connecting to MySQL: Error: Access denied for user 'your-mysql-username'@'localhost' (using password: YES)
+ at Packet.asError (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/packets/packet.js:728:17)
+ at ClientHandshake.execute (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/commands/command.js:29:26)
+ at Connection.handlePacket (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/connection.js:456:32)
+ at PacketParser.onPacket (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/connection.js:85:12)
+ at PacketParser.executeStart (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/packet_parser.js:75:16)
+ at Socket. (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/connection.js:92:25)
+ at Socket.emit (node:events:519:28)
+ at addChunk (node:internal/streams/readable:559:12)
+ at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
+ at Readable.push (node:internal/streams/readable:390:5) {
+ code: 'ER_ACCESS_DENIED_ERROR',
+ errno: 1045,
+ sqlState: '28000',
+ sqlMessage: "Access denied for user 'your-mysql-username'@'localhost' (using password: YES)",
+ sql: undefined
+}
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'express-session'
+Require stack:
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/server.js:4:17)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'express-session'
+Require stack:
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/server.js:4:17)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'express-session'
+Require stack:
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/server.js:4:17)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'express-session'
+Require stack:
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/server.js:4:17)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'express-session'
+Require stack:
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/server.js:4:17)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './db'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:3:12)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module './utils'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:4:26)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module '../shared/utils/crypto'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:4:30)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module '../shared/utils/crypto'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:4:30)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module '../shared/utils/crypto'
+Require stack:
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/nodejs_app/authRoutes.js:4:30)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'uuid'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:1:24)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'uuid'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:1:24)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'uuid'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:1:24)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'crypto-js'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:2:18)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'crypto-js'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:2:18)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'crypto-js'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:2:18)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+node:internal/modules/cjs/loader:1228
+ throw err;
+ ^
+
+Error: Cannot find module 'crypto-js'
+Require stack:
+- /home/cyarsflu/shared/utils/crypto.js
+- /home/cyarsflu/nodejs_app/authRoutes.js
+- /home/cyarsflu/nodejs_app/server.js
+- /usr/local/lsws/fcgi-bin/lsnode.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
+ at Module._load (node:internal/modules/cjs/loader:1051:27)
+ at Module.require (node:internal/modules/cjs/loader:1311:19)
+ at require (node:internal/modules/helpers:179:18)
+ at Object. (/home/cyarsflu/shared/utils/crypto.js:2:18)
+ at Module._compile (node:internal/modules/cjs/loader:1469:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
+ at Module.load (node:internal/modules/cjs/loader:1288:32)
+ at Module._load (node:internal/modules/cjs/loader:1104:12)
+ at Module.require (node:internal/modules/cjs/loader:1311:19) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '/home/cyarsflu/shared/utils/crypto.js',
+ '/home/cyarsflu/nodejs_app/authRoutes.js',
+ '/home/cyarsflu/nodejs_app/server.js',
+ '/usr/local/lsws/fcgi-bin/lsnode.js'
+ ]
+}
+
+Node.js v20.17.0
+Error creating anonymous user: Error: You have tried to call .then(), .catch(), or invoked await on the result of query that is not a promise, which is a programming error. Try calling con.promise().query(), or require('mysql2/promise') instead of 'mysql2' for a promise-compatible version of the query interface. To learn how to use async/await or Promises check out documentation at https://www.npmjs.com/package/mysql2#using-promise-wrapper, or the mysql2 documentation at https://github.com/sidorares/node-mysql2/tree/master/documentation/Promise-Wrapper.md
+ at Query.then (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/lib/commands/query.js:43:11)
+ at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
+Error fetching session users: Error: Unknown column 'session_id' in 'where clause'
+ at PromisePool.query (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/mysql2/promise.js:341:22)
+ at /home/cyarsflu/nodejs_app/server.js:71:32
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at next (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:149:13)
+ at Route.dispatch (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/route.js:119:3)
+ at Layer.handle [as handle_request] (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/layer.js:95:5)
+ at /home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:284:15
+ at param (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:365:14)
+ at param (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:376:14)
+ at Function.process_params (/home/cyarsflu/nodevenv/nodejs_app/20/lib/node_modules/express/lib/router/index.js:421:3) {
+ code: 'ER_BAD_FIELD_ERROR',
+ errno: 1054,
+ sql: '\n' +
+ ' SELECT * \n' +
+ ' FROM users\n' +
+ " WHERE session_id = '62c57e189a9507575e9e3037aba0'\n" +
+ ' ',
+ sqlState: '42S22',
+ sqlMessage: "Unknown column 'session_id' in 'where clause'"
+}
diff --git a/server/tmp/restart.txt b/server/tmp/restart.txt
new file mode 100644
index 0000000..e69de29
diff --git a/shared/utils/crypto.js b/shared/utils/crypto.js
new file mode 100644
index 0000000..5a57e99
--- /dev/null
+++ b/shared/utils/crypto.js
@@ -0,0 +1,14 @@
+const { v4: uuidv4 } = require('uuid');
+const CryptoJS = require('crypto-js');
+
+// Generate a session ID hash
+const generateUniqueId = () => {
+ const uuid = uuidv4();
+ const hash = CryptoJS.SHA256(uuid).toString();
+ // Use the first 28 characters of the hash
+ return hash.substring(0, 28);
+};
+
+module.exports = {
+ generateUniqueId,
+};
diff --git a/src/App.jsx b/src/App.jsx
index 53733f7..f797cac 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -5,11 +5,13 @@ import {
Route,
Navigate,
} from 'react-router-dom';
-import Lobby from './components/Lobby/Lobby';
-import VotingTable from './components/VotingTable/VotingTable';
-import UserSessionListener from './components/UserSessionListener/UserSessionListener';
-import { signInAnonymously, onAuthStateChanged } from 'firebase/auth';
-import { auth } from './services/firebase';
+import Lobby from './components/Lobby';
+import VotingTable from './components/VotingTable';
+import UserSessionListener from './components/UserSessionListener';
+import axios from 'axios';
+import cyarenLogo from './assets/images/CyarenLogo.png';
+import cardLogo from './assets/images/logo.png';
+import styles from './App.module.css';
const App = () => {
const [userId, setUserId] = useState('');
@@ -21,37 +23,67 @@ const App = () => {
};
useEffect(() => {
- // Sign in the user anonymously
- signInAnonymously(auth).catch((error) => {
- console.error('Anonymous sign-in error:', error);
- });
-
- // Handle user state changes
- onAuthStateChanged(auth, (user) => {
- if (user) {
- console.log('User is signed in:', user);
- } else {
- console.log('User is signed out');
- }
- setLoading(false);
- });
+ // Check if there's a user session by making a request to the backend
+ axios
+ .get('/api/auth/session')
+ .then((response) => {
+ const { userId } = response.data;
+ if (userId) {
+ setUserId(userId); // User is logged in
+ } else {
+ // If no user session exists, create an anonymous user session
+ axios
+ .post('/api/auth/signin-anonymous')
+ .then((response) => {
+ setUserId(response.data.userId);
+ })
+ .catch((error) => {
+ console.error('Error signing in anonymously:', error);
+ });
+ }
+ })
+ .catch((error) => {
+ console.error('Error checking user session:', error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
}, []);
return (
-
- }
- loading={loading}
- />
- }
- />
- } />
-
+
+
+
+ }
+ loading={loading}
+ />
+ }
+ />
+ } />
+
+
+
+
);
};
diff --git a/src/App.module.css b/src/App.module.css
new file mode 100644
index 0000000..a33157a
--- /dev/null
+++ b/src/App.module.css
@@ -0,0 +1,69 @@
+.app {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ height: 100%;
+}
+
+.app section.header {
+ flex: 1 auto;
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ width: 100%;
+}
+
+.app section.footer {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ margin: 0;
+ padding-bottom: 20px;
+ position: relative;
+ user-select: none;
+ width: 10%;
+}
+
+.app section.footer .logoEnvelope {
+ width: 0;
+ overflow: hidden;
+ opacity: 0;
+ transition:
+ opacity 0.2s ease-in-out,
+ width 0.2s ease-in-out;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.app section.footer:hover .logoEnvelope {
+ width: 140px;
+ opacity: 1;
+ text-align: center;
+}
+
+.cyaren {
+ /* width: calc(10%); */
+ width: 140px;
+ min-width: 140px;
+}
+
+.cardLogo {
+ width: calc(2%);
+ min-width: 30px;
+ position: absolute;
+ opacity: 0.1;
+ transition:
+ margin 0.2s ease-in-out,
+ opacity 0.2s ease-in-out;
+}
+
+.app section.footer:hover .moveLeft {
+ margin-right: 120px;
+ opacity: 1;
+}
+
+.app section.footer:hover .moveRight {
+ margin-left: 120px;
+ opacity: 1;
+}
diff --git a/src/assets/fonts/fonts.css b/src/assets/fonts/fonts.css
index af5e266..559eea0 100644
--- a/src/assets/fonts/fonts.css
+++ b/src/assets/fonts/fonts.css
@@ -1,14 +1,6 @@
-@font-face {
- font-family: 'blackmild-regular';
- src: url('/src/assets/fonts/Blackmild\ Regular/Blackmild\ Regular.otf')
- format('opentype');
- font-weight: normal;
- font-style: normal;
-}
-
@font-face {
font-family: 'cardo-regular';
- src: url('/src/assets/fonts/Cardo/Cardo-Regular.ttf') format('opentype');
+ src: url('/src/assets/fonts/Cardo/Cardo-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@@ -16,7 +8,7 @@
@font-face {
font-family: 'cinzel';
src: url('/src/assets/fonts/Cinzel/Cinzel-VariableFont_wght.ttf')
- format('opentype');
+ format('truetype');
font-weight: normal;
font-style: normal;
}
diff --git a/src/assets/images/CyarenLogo.png b/src/assets/images/CyarenLogo.png
new file mode 100644
index 0000000..2e69824
Binary files /dev/null and b/src/assets/images/CyarenLogo.png differ
diff --git a/src/assets/images/applogo.xcf b/src/assets/images/applogo.xcf
index 37e5c7c..c1ef28b 100644
Binary files a/src/assets/images/applogo.xcf and b/src/assets/images/applogo.xcf differ
diff --git a/src/assets/images/bracket.svg b/src/assets/images/bracket.svg
new file mode 100644
index 0000000..bdb31fd
--- /dev/null
+++ b/src/assets/images/bracket.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/images/card.xcf b/src/assets/images/card.xcf
index 636aa5c..e70aa72 100644
Binary files a/src/assets/images/card.xcf and b/src/assets/images/card.xcf differ
diff --git a/src/assets/images/cardback.xcf b/src/assets/images/cardback.xcf
index dc6f30a..2d9e185 100644
Binary files a/src/assets/images/cardback.xcf and b/src/assets/images/cardback.xcf differ
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
new file mode 100644
index 0000000..a4c26dd
Binary files /dev/null and b/src/assets/images/logo.png differ
diff --git a/src/assets/images/smalllogo.png b/src/assets/images/smalllogo.png
new file mode 100644
index 0000000..e3e8218
Binary files /dev/null and b/src/assets/images/smalllogo.png differ
diff --git a/src/assets/images/titlecard-mini.png b/src/assets/images/titlecard-mini.png
new file mode 100644
index 0000000..53425d2
Binary files /dev/null and b/src/assets/images/titlecard-mini.png differ
diff --git a/src/assets/images/titlecard.xcf b/src/assets/images/titlecard.xcf
index 37c9449..178540b 100644
Binary files a/src/assets/images/titlecard.xcf and b/src/assets/images/titlecard.xcf differ
diff --git a/src/components/BoardCard copy/index.jsx b/src/components/BoardCard copy/index.jsx
new file mode 100644
index 0000000..7d4f0b7
--- /dev/null
+++ b/src/components/BoardCard copy/index.jsx
@@ -0,0 +1,29 @@
+import React, { useEffect, useState } from 'react';
+import VoteValue from '../VoteValue';
+import cardBack from '../../assets/images/cardback.png';
+import cardFront from '../../assets/images/cardfront.png';
+import styles from './BoardCard.module.css';
+
+const BoardCard = ({ vote, isDimmed, isRevealed = true }) => {
+ const [isFlipped, setIsFlipped] = useState(false);
+
+ useEffect(() => {
+ if (isRevealed) {
+ setTimeout(() => setIsFlipped(true), 300);
+ } else if (isFlipped) {
+ setIsFlipped(false);
+ }
+ }, [isFlipped, isRevealed]);
+
+ return (
+
+
+

+

+
+
+
+ );
+};
+
+export default BoardCard;
diff --git a/src/components/BoardCard/BoardCard.jsx b/src/components/BoardCard/index.jsx
similarity index 94%
rename from src/components/BoardCard/BoardCard.jsx
rename to src/components/BoardCard/index.jsx
index 4a45967..4d03942 100644
--- a/src/components/BoardCard/BoardCard.jsx
+++ b/src/components/BoardCard/index.jsx
@@ -1,7 +1,7 @@
import React from 'react';
import cardBack from '../../assets/images/cardback.png';
import { ReactComponent as BracketIcon } from '../../assets/images/bracket.svg';
-import FrontCard from '../FrontCard/FrontCard';
+import FrontCard from '../FrontCard';
import styles from './BoardCard.module.css';
const BoardCard = ({ username, vote, isRevealed, isDimmed, isHighlighted }) => {
diff --git a/src/components/FrontCard/FrontCard.jsx b/src/components/FrontCard/index.jsx
similarity index 90%
rename from src/components/FrontCard/FrontCard.jsx
rename to src/components/FrontCard/index.jsx
index c5faa48..187d190 100644
--- a/src/components/FrontCard/FrontCard.jsx
+++ b/src/components/FrontCard/index.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import card from '../../assets/images/card.png';
-import VoteValue from '../VoteValue/VoteValue';
+import VoteValue from '../VoteValue';
import styles from './FrontCard.module.css';
const FrontCard = ({ value, className }) => {
diff --git a/src/components/LoadingRoute/index.jsx b/src/components/LoadingRoute/index.jsx
new file mode 100644
index 0000000..9b713f2
--- /dev/null
+++ b/src/components/LoadingRoute/index.jsx
@@ -0,0 +1,14 @@
+import React, { Fragment } from 'react';
+import { Route } from 'react-router-dom';
+
+const LoadingRoute = ({ loading = false, element, ...rest }) => {
+ debugger;
+ console.log('this.type', this.type);
+ return } />;
+};
+
+// const LoadingRoute = Route;
+
+// console.log('LoadingRoute', LoadingRoute);
+
+export default LoadingRoute;
diff --git a/src/components/Lobby/Lobby.jsx b/src/components/Lobby/index.jsx
similarity index 52%
rename from src/components/Lobby/Lobby.jsx
rename to src/components/Lobby/index.jsx
index aff220d..61b33a6 100644
--- a/src/components/Lobby/Lobby.jsx
+++ b/src/components/Lobby/index.jsx
@@ -1,11 +1,9 @@
import React, { useState, useEffect } from 'react';
-import { ref, onValue, set } from 'firebase/database';
-import { realtimeDb } from '../../services/firebase';
-import { generateUniqueId } from '../../utils/crypto';
+import { useNavigate, useParams } from 'react-router-dom';
import appLogo from '../../assets/images/applogo.png';
import styles from './Lobby.module.css';
-import { useNavigate, useParams } from 'react-router-dom';
-import { auth } from '../../services/firebase';
+import api from '../../services/api';
+import { generateUniqueId } from '../../shared/utils/crypto';
const Lobby = ({ onJoinSession = () => {} }) => {
const navigate = useNavigate();
@@ -18,60 +16,40 @@ const Lobby = ({ onJoinSession = () => {} }) => {
// Get or generate the session ID
if (!sessionId) {
const newSessionId = generateUniqueId();
- // Update the URL with the session ID if it wasn't already there
navigate(`/lobby/${newSessionId}`);
+ } else {
+ // Fetch users in the session
+ api
+ .get(`/api/session/${sessionId}/users`)
+ .then((response) => {
+ setUsers(response.data);
+ })
+ .catch((error) => {
+ console.error('Error fetching users:', error);
+ });
}
-
- const sessionRef = ref(realtimeDb, `sessions/${sessionId}/users`);
-
- // Listen for changes to the session users data
- const unsubscribe = onValue(sessionRef, (snapshot) => {
- const users = snapshot.val();
- if (!users) return;
-
- const userList = Object.entries(users).map(([uid, userInfo]) => ({
- uid,
- username: userInfo.username,
- }));
- setUsers(userList);
- });
-
- return () => {
- unsubscribe();
- };
}, [navigate, sessionId]);
const handleJoinSession = async () => {
- const user = auth.currentUser;
- const userId = user ? user.uid : generateUniqueId();
+ const userId = generateUniqueId(); // Generate unique ID for user
- // Check if the uid is already part of the session
- if (users.includes(userId)) {
+ // Check if the username is already taken
+ if (users.some((user) => user.username === username)) {
setIsUsernameTaken(true);
return;
- } else {
- // Set the initial vote for the user
- const voteRef = ref(realtimeDb, `sessions/${sessionId}/votes/${userId}`);
- await set(voteRef, -1);
+ }
- // Add the user to the session's user list with their uid and username
- const userRef = ref(realtimeDb, `sessions/${sessionId}/users/${userId}`);
- await set(userRef, {
- username: username,
- uid: userId,
- });
-
- // Also save the current session ID under the user's record in the database
- const userSessionRef = ref(realtimeDb, `users/${userId}`);
- await set(userSessionRef, {
- currentSessionId: `session/${sessionId}`,
- });
+ // Add the user to the session
+ try {
+ await api.post(`/api/session/${sessionId}/user`, { userId, username });
// Call the onJoinSession callback with the username
onJoinSession(userId);
// Navigate to the session
navigate(`/session/${sessionId}`);
+ } catch (error) {
+ console.error('Error joining session:', error);
}
};
@@ -103,8 +81,8 @@ const Lobby = ({ onJoinSession = () => {} }) => {
Current Users In Session
- {users.map(({ uid, username }) => (
-
+ {users.map(({ id, username }) => (
+
))}
diff --git a/src/components/ProfileMenuButton/ProfileMenuButton.module.css b/src/components/ProfileMenuButton/ProfileMenuButton.module.css
new file mode 100644
index 0000000..b86dd72
--- /dev/null
+++ b/src/components/ProfileMenuButton/ProfileMenuButton.module.css
@@ -0,0 +1,80 @@
+.root {
+ position: absolute;
+ top: 10px;
+ right: 35px;
+}
+
+/* Container for the entire menu */
+.menuContainer {
+ position: relative;
+ display: inline-block;
+ text-align: center;
+}
+
+/* Label with circular border */
+.menuLabel {
+ width: 20px;
+ height: 20px;
+ padding: 0.5rem;
+ border: 2px solid #f0dcb1;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: bold;
+ user-select: none;
+}
+
+/* Container for the buttons */
+.menuButtons {
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ transform: translateX(-50%);
+ display: none;
+ background-color: transparent;
+ padding: 4px 0;
+ box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
+ z-index: 1000;
+ min-width: 100px;
+}
+
+/* Buttons styling */
+.menuButtons button {
+ display: block;
+ width: 100%;
+ margin: 8px 0;
+ background-color: #f0dcb1;
+ border: 1px solid #1b191a;
+ border-radius: 4px;
+ color: #1b191a;
+ padding: 4px 4px;
+ cursor: pointer;
+ font-weight: 800;
+ user-select: none;
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 1);
+ transition: background-color 0.3s ease;
+}
+
+.menuButtons button:hover {
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 1);
+ background-color: #cdba95;
+}
+
+.menuButtons button:active {
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
+ background-color: #f0dcb1;
+ transform: scale(0.95);
+}
+
+/* Show buttons on hover */
+.menuContainer:hover .menuButtons {
+ display: block;
+}
+
+.menuContainer .invite {
+}
+
+.menuContainer .invite .checkmark {
+ font-weight: 800;
+}
diff --git a/src/components/ProfileMenuButton/index.jsx b/src/components/ProfileMenuButton/index.jsx
new file mode 100644
index 0000000..e1cb522
--- /dev/null
+++ b/src/components/ProfileMenuButton/index.jsx
@@ -0,0 +1,49 @@
+import React, { useState, useEffect, useRef } from 'react';
+
+import styles from './ProfileMenuButton.module.css';
+import { getAcronym } from '../../utils/strings';
+
+const ProfileMenuButton = ({ username, className, onLogout, onInvite }) => {
+ const [isInviteCopied, setIsInviteCopied] = useState(false);
+ const acronym = getAcronym(username).slice(0, 2);
+ const timeoutIdRef = useRef(null);
+
+ async function handleInvite() {
+ try {
+ await onInvite();
+ setIsInviteCopied(true);
+ timeoutIdRef.current = setTimeout(() => {
+ setIsInviteCopied(false);
+ }, 2000);
+ } catch (err) {
+ console.log(err);
+ }
+ }
+
+ useEffect(() => {
+ // Cleanup the timeout if the component unmounts before the timeout is complete
+ return () => clearTimeout(timeoutIdRef.current);
+ }, []);
+
+ return (
+
+
+
{acronym}
+
+
+
+
+
+
+ );
+};
+
+export default ProfileMenuButton;
diff --git a/src/components/Results/Results.jsx b/src/components/Results/index.jsx
similarity index 94%
rename from src/components/Results/Results.jsx
rename to src/components/Results/index.jsx
index 7da4b8b..b76b9f2 100644
--- a/src/components/Results/Results.jsx
+++ b/src/components/Results/index.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import styles from './Results.module.css';
-import VoteValue from '../VoteValue/VoteValue';
+import VoteValue from '../VoteValue';
const Results = ({ votes }) => {
const voteCounts = Object.values(votes).reduce((acc, vote) => {
diff --git a/src/components/UserSessionListener/UserSessionListener.jsx b/src/components/UserSessionListener/UserSessionListener.jsx
deleted file mode 100644
index fcc13b0..0000000
--- a/src/components/UserSessionListener/UserSessionListener.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { useEffect, useState } from 'react';
-import { ref, onValue, remove } from 'firebase/database';
-import { realtimeDb } from '../../services/firebase';
-import { useNavigate } from 'react-router-dom';
-import { generateUniqueId } from '../../utils/crypto';
-import { auth } from '../../services/firebase';
-
-const UserSessionListener = () => {
- const navigate = useNavigate();
- const user = auth.currentUser;
- const userId = user ? user.uid : generateUniqueId();
- const [isRedirecting, setIsRedirecting] = useState(false);
-
- useEffect(() => {
- const userRef = ref(realtimeDb, `users/${userId}/currentSessionId`);
-
- const unsubscribe = onValue(userRef, async (snapshot) => {
- const currentSessionId = snapshot.val() || generateUniqueId();
-
- // Only redirect if the user is not already being redirected
- if (
- !isRedirecting &&
- currentSessionId &&
- currentSessionId.startsWith('lobby')
- ) {
- setIsRedirecting(true);
-
- console.log(`Removing user from: users/${userId}`);
-
- // Remove the entire user entry from the database
- const fullUserRef = ref(realtimeDb, `users/${userId}`);
- await remove(fullUserRef);
-
- navigate(`/${currentSessionId}`);
-
- setIsRedirecting(false);
- }
- });
-
- return () => unsubscribe();
- }, [userId, navigate, isRedirecting]);
-
- return null;
-};
-
-export default UserSessionListener;
diff --git a/src/components/UserSessionListener/index.jsx b/src/components/UserSessionListener/index.jsx
new file mode 100644
index 0000000..dc6a514
--- /dev/null
+++ b/src/components/UserSessionListener/index.jsx
@@ -0,0 +1,48 @@
+import { useEffect, useState } from 'react';
+import api from '../../services/api'; // Import the Axios instance with the interceptor
+import { useNavigate } from 'react-router-dom';
+import { generateUniqueId } from '../../shared/utils/crypto';
+
+const UserSessionListener = () => {
+ const navigate = useNavigate();
+ const [isRedirecting, setIsRedirecting] = useState(false);
+
+ const userId = generateUniqueId(); // Use the unique ID generator for anonymous users
+
+ useEffect(() => {
+ const fetchUserSession = async () => {
+ try {
+ // Get the user's current session ID from the API
+ const response = await api.get(`/users/${userId}/session`);
+
+ const currentSessionId =
+ response.data.currentSessionId || generateUniqueId();
+
+ // Only redirect if the user is not already being redirected
+ if (
+ !isRedirecting &&
+ currentSessionId &&
+ currentSessionId.startsWith('lobby')
+ ) {
+ setIsRedirecting(true);
+
+ // Delete the user from the session via API
+ await api.delete(`/users/${userId}`);
+
+ // Redirect to the session
+ navigate(`/${currentSessionId}`);
+
+ setIsRedirecting(false);
+ }
+ } catch (error) {
+ console.error('Error fetching user session:', error);
+ }
+ };
+
+ fetchUserSession();
+ }, [userId, navigate, isRedirecting]);
+
+ return null;
+};
+
+export default UserSessionListener;
diff --git a/src/components/VoteCard/VoteCard.module.css b/src/components/VoteCard/VoteCard.module.css
index 93088a1..9de0707 100644
--- a/src/components/VoteCard/VoteCard.module.css
+++ b/src/components/VoteCard/VoteCard.module.css
@@ -1,3 +1,9 @@
+button.voteCard {
+ font-family: 'Cardo', serif;
+ font-weight: 400;
+ font-style: normal;
+}
+
.voteCard {
width: 50px;
height: 75px;
@@ -31,12 +37,6 @@
z-index: 1;
}
-.cardo-regular {
- font-family: 'Cardo', serif;
- font-weight: 400;
- font-style: normal;
-}
-
.shadow {
position: absolute;
width: 50px;
diff --git a/src/components/VoteCard/VoteCard.jsx b/src/components/VoteCard/index.jsx
similarity index 83%
rename from src/components/VoteCard/VoteCard.jsx
rename to src/components/VoteCard/index.jsx
index dfc69cd..b21e700 100644
--- a/src/components/VoteCard/VoteCard.jsx
+++ b/src/components/VoteCard/index.jsx
@@ -1,12 +1,12 @@
import React from 'react';
import styles from './VoteCard.module.css';
-import FrontCard from '../FrontCard/FrontCard';
+import FrontCard from '../FrontCard';
const VoteCard = ({ number, isSelected, onClick, className }) => {
return (