neoagent 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"052f31d115eceda8cbff1b3481fcde4330c4ae
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "599795310" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "2062946621" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -13,6 +13,30 @@ const authLimiter = rateLimit({
13
13
  legacyHeaders: false
14
14
  });
15
15
 
16
+ function establishSession(req, res, user) {
17
+ req.session.regenerate((regenerateError) => {
18
+ if (regenerateError) {
19
+ console.error('Auth session regenerate error:', regenerateError);
20
+ return res.status(500).json({ error: 'Session error' });
21
+ }
22
+
23
+ req.session.userId = user.id;
24
+ req.session.username = user.username;
25
+ req.session.save((saveError) => {
26
+ if (saveError) {
27
+ console.error('Auth session save error:', saveError);
28
+ return res.status(500).json({ error: 'Session save error' });
29
+ }
30
+
31
+ return res.json({
32
+ success: true,
33
+ redirect: '/app',
34
+ user: { id: user.id, username: user.username }
35
+ });
36
+ });
37
+ });
38
+ }
39
+
16
40
  router.get('/api/auth/status', (req, res) => {
17
41
  const count = db.prepare('SELECT COUNT(*) as count FROM users').get();
18
42
  res.json({ hasUser: count.count > 0 });
@@ -36,14 +60,9 @@ router.post('/api/auth/register', authLimiter, async (req, res) => {
36
60
  const hash = await bcrypt.hash(password, 12);
37
61
  const result = db.prepare('INSERT INTO users (username, password) VALUES (?, ?)').run(username, hash);
38
62
 
39
- req.session.regenerate((err) => {
40
- if (err) return res.status(500).json({ error: 'Session error' });
41
- req.session.userId = result.lastInsertRowid;
42
- req.session.username = username;
43
- req.session.save((err) => {
44
- if (err) return res.status(500).json({ error: 'Session save error' });
45
- res.json({ success: true, redirect: '/app', user: { id: result.lastInsertRowid, username } });
46
- });
63
+ establishSession(req, res, {
64
+ id: result.lastInsertRowid,
65
+ username
47
66
  });
48
67
  } catch (err) {
49
68
  console.error('Register error:', err);
@@ -68,17 +87,14 @@ router.post('/api/auth/login', authLimiter, async (req, res) => {
68
87
  return res.status(401).json({ error: 'Invalid credentials' });
69
88
  }
70
89
 
71
- db.prepare('UPDATE users SET last_login = datetime(\'now\') WHERE id = ?').run(user.id);
90
+ try {
91
+ db.prepare('UPDATE users SET last_login = datetime(\'now\') WHERE id = ?').run(user.id);
92
+ } catch (updateError) {
93
+ // Keep login functional even if analytics-style metadata cannot be written.
94
+ console.warn('Login last_login update failed:', updateError);
95
+ }
72
96
 
73
- req.session.regenerate((err) => {
74
- if (err) return res.status(500).json({ error: 'Session error' });
75
- req.session.userId = user.id;
76
- req.session.username = user.username;
77
- req.session.save((err) => {
78
- if (err) return res.status(500).json({ error: 'Session save error' });
79
- res.json({ success: true, redirect: '/app', user: { id: user.id, username: user.username } });
80
- });
81
- });
97
+ establishSession(req, res, user);
82
98
  } catch (err) {
83
99
  console.error('Login error:', err);
84
100
  res.status(500).json({ error: 'Login failed' });