@vezlo/assistant-server 1.3.0 → 2.0.0

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.
Files changed (113) hide show
  1. package/README.md +140 -43
  2. package/bin/vezlo-server.js +1 -1
  3. package/database-schema.sql +193 -33
  4. package/dist/knexfile.d.ts.map +1 -1
  5. package/dist/knexfile.js +17 -8
  6. package/dist/knexfile.js.map +1 -1
  7. package/dist/src/config/database.d.ts.map +1 -1
  8. package/dist/src/config/database.js +9 -1
  9. package/dist/src/config/database.js.map +1 -1
  10. package/dist/src/config/global.d.ts.map +1 -1
  11. package/dist/src/config/global.js +5 -2
  12. package/dist/src/config/global.js.map +1 -1
  13. package/dist/src/config/knex.d.ts.map +1 -1
  14. package/dist/src/config/knex.js +22 -2
  15. package/dist/src/config/knex.js.map +1 -1
  16. package/dist/src/config/swagger.d.ts.map +1 -1
  17. package/dist/src/config/swagger.js +34 -73
  18. package/dist/src/config/swagger.js.map +1 -1
  19. package/dist/src/controllers/ApiKeyController.d.ts +17 -0
  20. package/dist/src/controllers/ApiKeyController.d.ts.map +1 -0
  21. package/dist/src/controllers/ApiKeyController.js +84 -0
  22. package/dist/src/controllers/ApiKeyController.js.map +1 -0
  23. package/dist/src/controllers/AuthController.d.ts +14 -0
  24. package/dist/src/controllers/AuthController.d.ts.map +1 -0
  25. package/dist/src/controllers/AuthController.js +212 -0
  26. package/dist/src/controllers/AuthController.js.map +1 -0
  27. package/dist/src/controllers/ChatController.d.ts +8 -5
  28. package/dist/src/controllers/ChatController.d.ts.map +1 -1
  29. package/dist/src/controllers/ChatController.js +139 -31
  30. package/dist/src/controllers/ChatController.js.map +1 -1
  31. package/dist/src/controllers/KnowledgeController.d.ts +5 -4
  32. package/dist/src/controllers/KnowledgeController.d.ts.map +1 -1
  33. package/dist/src/controllers/KnowledgeController.js +54 -16
  34. package/dist/src/controllers/KnowledgeController.js.map +1 -1
  35. package/dist/src/middleware/auth.d.ts +51 -0
  36. package/dist/src/middleware/auth.d.ts.map +1 -0
  37. package/dist/src/middleware/auth.js +232 -0
  38. package/dist/src/middleware/auth.js.map +1 -0
  39. package/dist/src/middleware/errorHandler.d.ts.map +1 -1
  40. package/dist/src/middleware/errorHandler.js +13 -19
  41. package/dist/src/middleware/errorHandler.js.map +1 -1
  42. package/dist/src/migrations/001_initial_schema.d.ts.map +1 -1
  43. package/dist/src/migrations/001_initial_schema.js +39 -64
  44. package/dist/src/migrations/001_initial_schema.js.map +1 -1
  45. package/dist/src/migrations/002_multitenancy_schema.d.ts +4 -0
  46. package/dist/src/migrations/002_multitenancy_schema.d.ts.map +1 -0
  47. package/dist/src/migrations/002_multitenancy_schema.js +119 -0
  48. package/dist/src/migrations/002_multitenancy_schema.js.map +1 -0
  49. package/dist/src/schemas/AuthSchemas.d.ts +89 -0
  50. package/dist/src/schemas/AuthSchemas.d.ts.map +1 -0
  51. package/dist/src/schemas/AuthSchemas.js +63 -0
  52. package/dist/src/schemas/AuthSchemas.js.map +1 -0
  53. package/dist/src/schemas/CommonSchemas.d.ts +62 -0
  54. package/dist/src/schemas/CommonSchemas.d.ts.map +1 -0
  55. package/dist/src/schemas/CommonSchemas.js +65 -0
  56. package/dist/src/schemas/CommonSchemas.js.map +1 -0
  57. package/dist/src/schemas/ConversationSchemas.d.ts +64 -27
  58. package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -1
  59. package/dist/src/schemas/ConversationSchemas.js +28 -9
  60. package/dist/src/schemas/ConversationSchemas.js.map +1 -1
  61. package/dist/src/schemas/FeedbackSchemas.d.ts +43 -5
  62. package/dist/src/schemas/FeedbackSchemas.d.ts.map +1 -1
  63. package/dist/src/schemas/FeedbackSchemas.js +20 -2
  64. package/dist/src/schemas/FeedbackSchemas.js.map +1 -1
  65. package/dist/src/schemas/KnowledgeSchemas.d.ts +114 -35
  66. package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -1
  67. package/dist/src/schemas/KnowledgeSchemas.js +58 -16
  68. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
  69. package/dist/src/schemas/MessageSchemas.d.ts +57 -8
  70. package/dist/src/schemas/MessageSchemas.d.ts.map +1 -1
  71. package/dist/src/schemas/MessageSchemas.js +22 -3
  72. package/dist/src/schemas/MessageSchemas.js.map +1 -1
  73. package/dist/src/schemas/index.d.ts +410 -68
  74. package/dist/src/schemas/index.d.ts.map +1 -1
  75. package/dist/src/schemas/index.js +8 -2
  76. package/dist/src/schemas/index.js.map +1 -1
  77. package/dist/src/server.js +1047 -615
  78. package/dist/src/server.js.map +1 -1
  79. package/dist/src/services/AIService.d.ts +1 -2
  80. package/dist/src/services/AIService.d.ts.map +1 -1
  81. package/dist/src/services/AIService.js +6 -32
  82. package/dist/src/services/AIService.js.map +1 -1
  83. package/dist/src/services/ApiKeyService.d.ts +38 -0
  84. package/dist/src/services/ApiKeyService.d.ts.map +1 -0
  85. package/dist/src/services/ApiKeyService.js +123 -0
  86. package/dist/src/services/ApiKeyService.js.map +1 -0
  87. package/dist/src/services/KnowledgeBaseService.d.ts +2 -2
  88. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
  89. package/dist/src/services/KnowledgeBaseService.js +9 -2
  90. package/dist/src/services/KnowledgeBaseService.js.map +1 -1
  91. package/dist/src/services/MigrationService.d.ts +1 -1
  92. package/dist/src/services/MigrationService.d.ts.map +1 -1
  93. package/dist/src/services/MigrationService.js +4 -8
  94. package/dist/src/services/MigrationService.js.map +1 -1
  95. package/dist/src/services/SetupService.d.ts +102 -0
  96. package/dist/src/services/SetupService.d.ts.map +1 -0
  97. package/dist/src/services/SetupService.js +343 -0
  98. package/dist/src/services/SetupService.js.map +1 -0
  99. package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
  100. package/dist/src/storage/ConversationRepository.js +42 -8
  101. package/dist/src/storage/ConversationRepository.js.map +1 -1
  102. package/dist/src/storage/MessageRepository.d.ts.map +1 -1
  103. package/dist/src/storage/MessageRepository.js +23 -27
  104. package/dist/src/storage/MessageRepository.js.map +1 -1
  105. package/dist/src/types/index.d.ts +0 -8
  106. package/dist/src/types/index.d.ts.map +1 -1
  107. package/env.example +7 -5
  108. package/knexfile.ts +17 -8
  109. package/package.json +25 -16
  110. package/scripts/generate-key.js +124 -0
  111. package/scripts/seed-default.js +72 -0
  112. package/scripts/setup.js +410 -149
  113. package/scripts/validate-db.js +46 -13
@@ -57,15 +57,24 @@ async function validateDatabase() {
57
57
  process.env.SUPABASE_SERVICE_KEY
58
58
  );
59
59
 
60
- // Try to query a table
60
+ // Try to query any table (query will fail if connection is bad)
61
61
  const { error } = await supabase.from('vezlo_conversations').select('count').limit(0);
62
62
 
63
- if (error && error.code !== 'PGRST116') {
64
- throw error;
63
+ if (error) {
64
+ // Check for table not found errors (normal before migrations run)
65
+ if (error.code === 'PGRST116' ||
66
+ error.message.includes('does not exist') ||
67
+ error.message.includes('Could not find the table')) {
68
+ log('✅ Supabase connection successful', 'green');
69
+ log('⚠️ Note: Tables not found yet - this is normal before running migrations\n', 'yellow');
70
+ } else {
71
+ // Only throw if it's a real connection error
72
+ throw error;
73
+ }
74
+ } else {
75
+ log('✅ Supabase connection successful\n', 'green');
65
76
  }
66
77
 
67
- log('✅ Supabase connection successful\n', 'green');
68
-
69
78
  } catch (error) {
70
79
  log(`❌ Supabase connection failed: ${error.message}\n`, 'red');
71
80
  process.exit(1);
@@ -74,10 +83,11 @@ async function validateDatabase() {
74
83
  // Test database connection and validate tables
75
84
  log('Validating database tables...', 'yellow');
76
85
 
86
+ let client;
77
87
  try {
78
88
  const { Client } = require('pg');
79
89
 
80
- const client = new Client({
90
+ client = new Client({
81
91
  host: process.env.SUPABASE_DB_HOST,
82
92
  port: parseInt(process.env.SUPABASE_DB_PORT || '5432'),
83
93
  database: process.env.SUPABASE_DB_NAME || 'postgres',
@@ -86,14 +96,23 @@ async function validateDatabase() {
86
96
  ssl: { rejectUnauthorized: false }
87
97
  });
88
98
 
99
+ // Handle connection errors
100
+ client.on('error', (err) => {
101
+ console.error('Database connection error:', err.message);
102
+ });
103
+
89
104
  await client.connect();
90
105
 
91
106
  // Check required tables
92
107
  const requiredTables = [
93
- 'conversations',
94
- 'messages',
95
- 'message_feedback',
96
- 'knowledge_items'
108
+ 'vezlo_companies',
109
+ 'vezlo_users',
110
+ 'vezlo_user_company_profiles',
111
+ 'vezlo_api_keys',
112
+ 'vezlo_conversations',
113
+ 'vezlo_messages',
114
+ 'vezlo_message_feedback',
115
+ 'vezlo_knowledge_items'
97
116
  ];
98
117
 
99
118
  const result = await client.query(`
@@ -111,7 +130,9 @@ async function validateDatabase() {
111
130
  log(`\n❌ Missing required tables:`, 'red');
112
131
  missingTables.forEach(table => log(` - ${table}`, 'red'));
113
132
  log('\nRun the setup wizard: ' + colors.bright + 'npx vezlo-setup' + colors.reset + '\n', 'yellow');
114
- await client.end();
133
+ if (client) {
134
+ await client.end();
135
+ }
115
136
  process.exit(1);
116
137
  }
117
138
 
@@ -134,7 +155,10 @@ async function validateDatabase() {
134
155
  ORDER BY t.table_name
135
156
  `, [requiredTables]);
136
157
 
137
- log('\n📊 Table Structure:', 'cyan');
158
+ log('\n📊 Database Tables Summary:', 'cyan');
159
+ log(` Total tables found: ${schemaCheck.rows.length}`, 'green');
160
+
161
+ log('\n📋 Table Details:', 'cyan');
138
162
  schemaCheck.rows.forEach(row => {
139
163
  log(` ✓ ${row.table_name} (${row.column_count} columns)`, 'green');
140
164
  });
@@ -156,10 +180,19 @@ async function validateDatabase() {
156
180
  log('Your server is ready to start:', 'cyan');
157
181
  log(' ' + colors.bright + 'vezlo-server' + colors.reset + '\n');
158
182
 
159
- await client.end();
183
+ if (client) {
184
+ await client.end();
185
+ }
160
186
 
161
187
  } catch (error) {
162
188
  log(`\n❌ Database validation failed: ${error.message}\n`, 'red');
189
+ if (client) {
190
+ try {
191
+ await client.end();
192
+ } catch (closeError) {
193
+ // Ignore close errors
194
+ }
195
+ }
163
196
  process.exit(1);
164
197
  }
165
198
  }