@vezlo/assistant-server 1.2.0 → 1.4.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.
- package/README.md +152 -36
- package/bin/vezlo-server.js +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +7 -0
- package/dist/knexfile.js.map +1 -1
- package/dist/src/config/global.d.ts.map +1 -1
- package/dist/src/config/global.js +5 -2
- package/dist/src/config/global.js.map +1 -1
- package/dist/src/config/swagger.d.ts.map +1 -1
- package/dist/src/config/swagger.js +16 -2
- package/dist/src/config/swagger.js.map +1 -1
- package/dist/src/server.js +129 -2
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/AIService.d.ts +0 -1
- package/dist/src/services/AIService.d.ts.map +1 -1
- package/dist/src/services/AIService.js +0 -30
- package/dist/src/services/AIService.js.map +1 -1
- package/dist/src/services/MigrationService.d.ts +42 -0
- package/dist/src/services/MigrationService.d.ts.map +1 -0
- package/dist/src/services/MigrationService.js +227 -0
- package/dist/src/services/MigrationService.js.map +1 -0
- package/dist/src/storage/MessageRepository.d.ts.map +1 -1
- package/dist/src/storage/MessageRepository.js +24 -3
- package/dist/src/storage/MessageRepository.js.map +1 -1
- package/dist/src/storage/SupabaseStorage.d.ts.map +1 -1
- package/dist/src/storage/SupabaseStorage.js +4 -0
- package/dist/src/storage/SupabaseStorage.js.map +1 -1
- package/dist/src/types/index.d.ts +0 -8
- package/dist/src/types/index.d.ts.map +1 -1
- package/docker-compose.yml +1 -1
- package/env.example +6 -6
- package/knexfile.ts +8 -0
- package/package.json +16 -15
- package/scripts/setup.js +277 -151
- package/scripts/validate-db.js +24 -7
package/README.md
CHANGED
|
@@ -32,11 +32,25 @@ cd assistant-server
|
|
|
32
32
|
npm install
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
## 🏪 Vercel Marketplace Integration
|
|
36
|
+
|
|
37
|
+
**🚀 Recommended for Vercel Users** - Deploy with automated setup:
|
|
38
|
+
|
|
39
|
+
[](https://vercel.com/marketplace/vezlo-assistant-server)
|
|
40
|
+
|
|
41
|
+
The Vercel Marketplace integration provides:
|
|
42
|
+
- **Guided Configuration** - Step-by-step setup wizard
|
|
43
|
+
- **Automatic Environment Setup** - No manual configuration needed
|
|
44
|
+
- **Database Migration** - Automatic table creation
|
|
45
|
+
- **Production Optimization** - Optimized for Vercel's serverless platform
|
|
46
|
+
|
|
47
|
+
[Learn more about the marketplace integration →](https://vercel.com/marketplace/vezlo-assistant-server)
|
|
48
|
+
|
|
35
49
|
## 🚀 Quick Start (Interactive Setup)
|
|
36
50
|
|
|
37
51
|
### Prerequisites
|
|
38
52
|
- Node.js 20+ and npm 9+
|
|
39
|
-
- Supabase project
|
|
53
|
+
- Supabase project
|
|
40
54
|
- OpenAI API key
|
|
41
55
|
|
|
42
56
|
### Easy Setup with Interactive Wizard
|
|
@@ -55,10 +69,11 @@ npm run setup
|
|
|
55
69
|
```
|
|
56
70
|
|
|
57
71
|
The wizard will guide you through:
|
|
58
|
-
1. **
|
|
59
|
-
2. **OpenAI
|
|
60
|
-
3. **
|
|
61
|
-
4. **
|
|
72
|
+
1. **Supabase Configuration** - URL, Service Role Key, DB host/port/name/user/password (with defaults)
|
|
73
|
+
2. **OpenAI Configuration** - API key, model, temperature, max tokens
|
|
74
|
+
3. **Validation (non‑blocking)** - Tests Supabase API and DB connectivity
|
|
75
|
+
4. **Migrations** - Runs Knex migrations if DB validation passes; otherwise shows how to run later
|
|
76
|
+
5. **Environment** - Generates `.env` (does not overwrite if it already exists)
|
|
62
77
|
|
|
63
78
|
After setup completes, start the server:
|
|
64
79
|
|
|
@@ -89,27 +104,37 @@ Get your Supabase credentials from:
|
|
|
89
104
|
```env
|
|
90
105
|
# Supabase Configuration
|
|
91
106
|
SUPABASE_URL=https://your-project.supabase.co
|
|
107
|
+
SUPABASE_ANON_KEY=your-anon-key
|
|
92
108
|
SUPABASE_SERVICE_KEY=your-service-role-key
|
|
109
|
+
|
|
110
|
+
# Database Configuration for Migrations
|
|
93
111
|
SUPABASE_DB_HOST=db.your-project.supabase.co
|
|
112
|
+
SUPABASE_DB_PORT=5432
|
|
113
|
+
SUPABASE_DB_NAME=postgres
|
|
114
|
+
SUPABASE_DB_USER=postgres
|
|
94
115
|
SUPABASE_DB_PASSWORD=your-database-password
|
|
95
116
|
|
|
96
117
|
# OpenAI Configuration
|
|
97
118
|
OPENAI_API_KEY=sk-your-api-key
|
|
98
|
-
|
|
119
|
+
AI_MODEL=gpt-4o
|
|
99
120
|
|
|
100
|
-
|
|
121
|
+
# Migration Security
|
|
122
|
+
MIGRATION_SECRET_KEY=your-secure-migration-key-here
|
|
123
|
+
```
|
|
101
124
|
|
|
102
|
-
|
|
125
|
+
#### 3. Run Database Migrations (Recommended)
|
|
103
126
|
```bash
|
|
104
|
-
|
|
127
|
+
# Using Knex migrations (primary method)
|
|
128
|
+
npm run migrate:latest
|
|
129
|
+
|
|
130
|
+
# Or via API after server is running
|
|
131
|
+
curl "http://localhost:3000/api/migrate?key=$MIGRATION_SECRET_KEY"
|
|
105
132
|
```
|
|
106
133
|
|
|
107
|
-
|
|
134
|
+
Optional fallback (not recommended if using migrations):
|
|
108
135
|
```bash
|
|
109
|
-
#
|
|
136
|
+
# Run raw SQL in Supabase Dashboard → SQL Editor
|
|
110
137
|
cat database-schema.sql
|
|
111
|
-
|
|
112
|
-
# Then execute in Supabase Dashboard → SQL Editor
|
|
113
138
|
```
|
|
114
139
|
|
|
115
140
|
#### 4. Validate Setup
|
|
@@ -138,7 +163,7 @@ npm run build && npm start
|
|
|
138
163
|
### Docker Deployment
|
|
139
164
|
|
|
140
165
|
```bash
|
|
141
|
-
# Start with Docker Compose
|
|
166
|
+
# Start with Docker Compose (uses .env from project root)
|
|
142
167
|
docker-compose up -d
|
|
143
168
|
|
|
144
169
|
# View logs
|
|
@@ -147,19 +172,36 @@ docker-compose logs -f vezlo-server
|
|
|
147
172
|
|
|
148
173
|
## ☁️ Vercel Deployment
|
|
149
174
|
|
|
150
|
-
Deploy to Vercel's serverless platform with
|
|
175
|
+
Deploy to Vercel's serverless platform with multiple options. The Marketplace integration collects your credentials during configuration and sets environment variables automatically.
|
|
176
|
+
|
|
177
|
+
### Option 1: Vercel Marketplace Integration (Recommended)
|
|
151
178
|
|
|
152
|
-
|
|
179
|
+
**🚀 Deploy via Vercel Marketplace** - Automated setup with guided configuration:
|
|
153
180
|
|
|
154
|
-
[](https://vercel.com/marketplace/vezlo-assistant-server)
|
|
182
|
+
|
|
183
|
+
**Benefits:**
|
|
184
|
+
- ✅ **Guided Setup** - Step-by-step configuration wizard
|
|
185
|
+
- ✅ **Automatic Environment Variables** - No manual env var configuration needed
|
|
186
|
+
- ✅ **Database Migration** - Automatic table creation and schema setup
|
|
187
|
+
- ✅ **Production Ready** - Optimized for Vercel's serverless platform
|
|
188
|
+
|
|
189
|
+
**After Installation:**
|
|
190
|
+
1. Run the migration URL: `https://your-project.vercel.app/api/migrate?key=YOUR_MIGRATION_SECRET`
|
|
191
|
+
2. Verify deployment: `https://your-project.vercel.app/health`
|
|
192
|
+
3. Access API docs: `https://your-project.vercel.app/docs`
|
|
193
|
+
|
|
194
|
+
### Option 2: One-Click Deploy Button
|
|
195
|
+
|
|
196
|
+
[](https://vercel.com/new/clone?repository-url=https://github.com/vezlo/assistant-server&integration-ids=oac_f2GcBt8U4FhiVJ4qWv5PYMEZ)
|
|
155
197
|
|
|
156
198
|
This will:
|
|
157
199
|
- Fork the repository to your GitHub
|
|
158
200
|
- Create a Vercel project
|
|
159
|
-
-
|
|
201
|
+
- Require marketplace integration setup
|
|
160
202
|
- Deploy automatically
|
|
161
203
|
|
|
162
|
-
### Manual Vercel Deploy
|
|
204
|
+
### Option 3: Manual Vercel Deploy
|
|
163
205
|
|
|
164
206
|
```bash
|
|
165
207
|
# Install Vercel CLI
|
|
@@ -173,9 +215,9 @@ vercel
|
|
|
173
215
|
|
|
174
216
|
### Prerequisites for Vercel
|
|
175
217
|
|
|
176
|
-
1.
|
|
177
|
-
2.
|
|
178
|
-
3.
|
|
218
|
+
1. Supabase project (URL, Service Role key, DB host/port/name/user/password)
|
|
219
|
+
2. OpenAI API key
|
|
220
|
+
3. If not using the Marketplace, add environment variables in Vercel project settings
|
|
179
221
|
|
|
180
222
|
See [docs/VERCEL_DEPLOYMENT.md](docs/VERCEL_DEPLOYMENT.md) for detailed deployment guide.
|
|
181
223
|
|
|
@@ -186,15 +228,24 @@ Edit `.env` file with your credentials:
|
|
|
186
228
|
```bash
|
|
187
229
|
# REQUIRED - Supabase Configuration
|
|
188
230
|
SUPABASE_URL=https://your-project-id.supabase.co
|
|
189
|
-
SUPABASE_ANON_KEY=your-anon-key
|
|
190
231
|
SUPABASE_SERVICE_KEY=your-service-role-key
|
|
191
232
|
|
|
233
|
+
# REQUIRED - Database Configuration for Knex.js Migrations
|
|
234
|
+
SUPABASE_DB_HOST=db.your-project.supabase.co
|
|
235
|
+
SUPABASE_DB_PORT=5432
|
|
236
|
+
SUPABASE_DB_NAME=postgres
|
|
237
|
+
SUPABASE_DB_USER=postgres
|
|
238
|
+
SUPABASE_DB_PASSWORD=your-database-password
|
|
239
|
+
|
|
192
240
|
# REQUIRED - OpenAI Configuration
|
|
193
241
|
OPENAI_API_KEY=sk-your-openai-api-key
|
|
194
242
|
AI_MODEL=gpt-4o
|
|
195
243
|
AI_TEMPERATURE=0.7
|
|
196
244
|
AI_MAX_TOKENS=1000
|
|
197
245
|
|
|
246
|
+
# REQUIRED - Database Migration Security
|
|
247
|
+
MIGRATION_SECRET_KEY=your-secure-migration-key-here
|
|
248
|
+
|
|
198
249
|
# OPTIONAL - Server Configuration
|
|
199
250
|
PORT=3000
|
|
200
251
|
NODE_ENV=production
|
|
@@ -203,6 +254,9 @@ LOG_LEVEL=info
|
|
|
203
254
|
# OPTIONAL - CORS Configuration
|
|
204
255
|
CORS_ORIGINS=http://localhost:3000,http://localhost:5173
|
|
205
256
|
|
|
257
|
+
# OPTIONAL - Swagger Base URL
|
|
258
|
+
BASE_URL=http://localhost:3000
|
|
259
|
+
|
|
206
260
|
# OPTIONAL - Rate Limiting
|
|
207
261
|
RATE_LIMIT_WINDOW=60000
|
|
208
262
|
RATE_LIMIT_MAX=100
|
|
@@ -221,7 +275,8 @@ CHUNK_OVERLAP=200
|
|
|
221
275
|
The package provides these command-line tools:
|
|
222
276
|
|
|
223
277
|
### vezlo-setup
|
|
224
|
-
Interactive wizard
|
|
278
|
+
**Interactive setup wizard** that guides you through the complete configuration process. This CLI tool provides the same functionality as the web-based setup wizard but runs in your terminal.
|
|
279
|
+
|
|
225
280
|
```bash
|
|
226
281
|
vezlo-setup
|
|
227
282
|
```
|
|
@@ -267,6 +322,39 @@ http://localhost:3000/api
|
|
|
267
322
|
- `GET /api/knowledge/items/:uuid` - Get knowledge item
|
|
268
323
|
- `PUT /api/knowledge/items/:uuid` - Update knowledge item
|
|
269
324
|
- `DELETE /api/knowledge/items/:uuid` - Delete knowledge item
|
|
325
|
+
|
|
326
|
+
#### Database Migrations
|
|
327
|
+
- `GET /api/migrate?key=<secret>` - Run pending database migrations
|
|
328
|
+
- `GET /api/migrate/status?key=<secret>` - Check migration status
|
|
329
|
+
|
|
330
|
+
**Migration Workflow:**
|
|
331
|
+
1. **Create Migration**: Use `npm run migrate:make migration_name` to create new migration files
|
|
332
|
+
2. **Check Status**: Use `/api/migrate/status` to see pending migrations
|
|
333
|
+
3. **Run Migrations**: Use `/api/migrate` to execute pending migrations remotely
|
|
334
|
+
|
|
335
|
+
**Migration Endpoints Usage:**
|
|
336
|
+
```bash
|
|
337
|
+
# Check migration status
|
|
338
|
+
curl "http://localhost:3000/api/migrate/status?key=your-migration-secret-key"
|
|
339
|
+
|
|
340
|
+
# Run pending migrations
|
|
341
|
+
curl "http://localhost:3000/api/migrate?key=your-migration-secret-key"
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**Required Environment Variable:**
|
|
345
|
+
- `MIGRATION_SECRET_KEY` - Secret key for authenticating migration requests
|
|
346
|
+
|
|
347
|
+
**Migration Creation Example:**
|
|
348
|
+
```bash
|
|
349
|
+
# Create a new migration
|
|
350
|
+
npm run migrate:make add_users_table
|
|
351
|
+
|
|
352
|
+
# This creates: src/migrations/002_add_users_table.ts
|
|
353
|
+
# Edit the file to add your schema changes
|
|
354
|
+
# Then run via endpoint or command line
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
#### Knowledge Search
|
|
270
358
|
- `POST /api/knowledge/search` - Search knowledge base
|
|
271
359
|
|
|
272
360
|
#### Feedback
|
|
@@ -333,19 +421,32 @@ curl -X POST /api/messages/msg456/generate \
|
|
|
333
421
|
|
|
334
422
|
## 🗄️ Database Setup
|
|
335
423
|
|
|
336
|
-
|
|
424
|
+
### Option A: Run Migrations (Recommended)
|
|
425
|
+
|
|
426
|
+
Use the built‑in migration endpoints to create/upgrade tables:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# Run pending migrations
|
|
430
|
+
curl "http://localhost:3000/api/migrate?key=your-migration-secret-key"
|
|
431
|
+
|
|
432
|
+
# Check migration status
|
|
433
|
+
curl "http://localhost:3000/api/migrate/status?key=your-migration-secret-key"
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
These endpoints execute Knex migrations and keep schema versioned.
|
|
437
|
+
|
|
438
|
+
### Option B: Manual SQL (Fallback)
|
|
439
|
+
|
|
440
|
+
If you prefer manual setup, run the SQL schema in Supabase SQL Editor:
|
|
337
441
|
|
|
338
442
|
```bash
|
|
339
|
-
#
|
|
340
|
-
|
|
443
|
+
# View the schema SQL locally
|
|
444
|
+
cat database-schema.sql
|
|
445
|
+
|
|
446
|
+
# Copy into Supabase Dashboard → SQL Editor and execute
|
|
341
447
|
```
|
|
342
448
|
|
|
343
|
-
The `database-schema.sql`
|
|
344
|
-
- **conversations** - Chat conversation management
|
|
345
|
-
- **messages** - Individual messages within conversations
|
|
346
|
-
- **message_feedback** - User feedback on messages
|
|
347
|
-
- **knowledge_items** - Knowledge base items with vector embeddings
|
|
348
|
-
- **match_knowledge_items()** - Vector similarity search function
|
|
449
|
+
The `database-schema.sql` contains all required tables and functions.
|
|
349
450
|
|
|
350
451
|
## 🐳 Docker Commands
|
|
351
452
|
|
|
@@ -418,8 +519,11 @@ npm install
|
|
|
418
519
|
# Build TypeScript
|
|
419
520
|
npm run build
|
|
420
521
|
|
|
421
|
-
# Start
|
|
422
|
-
npm
|
|
522
|
+
# Start server (Node)
|
|
523
|
+
npm start
|
|
524
|
+
|
|
525
|
+
# Or start via CLI wrapper
|
|
526
|
+
npx vezlo-server
|
|
423
527
|
|
|
424
528
|
# Run tests
|
|
425
529
|
npm test
|
|
@@ -455,9 +559,12 @@ vezlo/
|
|
|
455
559
|
### Environment Variables
|
|
456
560
|
Ensure all required environment variables are set:
|
|
457
561
|
- `SUPABASE_URL` and `SUPABASE_SERVICE_KEY` (required)
|
|
562
|
+
- `SUPABASE_DB_HOST`, `SUPABASE_DB_PASSWORD` (required for migrations)
|
|
458
563
|
- `OPENAI_API_KEY` (required)
|
|
564
|
+
- `MIGRATION_SECRET_KEY` (required for migration endpoints)
|
|
459
565
|
- `NODE_ENV=production`
|
|
460
566
|
- `CORS_ORIGINS` (set to your domain)
|
|
567
|
+
- `BASE_URL` (optional, for custom Swagger server URL)
|
|
461
568
|
|
|
462
569
|
### Docker Production
|
|
463
570
|
```bash
|
|
@@ -477,6 +584,15 @@ docker run -d \
|
|
|
477
584
|
- Docker health check configured
|
|
478
585
|
- Logs available in `./logs/` directory
|
|
479
586
|
|
|
587
|
+
### Database Migrations in Production
|
|
588
|
+
```bash
|
|
589
|
+
# Check migration status
|
|
590
|
+
curl "https://your-domain.com/api/migrate/status?key=your-migration-secret-key"
|
|
591
|
+
|
|
592
|
+
# Run pending migrations
|
|
593
|
+
curl "https://your-domain.com/api/migrate?key=your-migration-secret-key"
|
|
594
|
+
```
|
|
595
|
+
|
|
480
596
|
## 🤝 Contributing
|
|
481
597
|
|
|
482
598
|
### Development Workflow
|
|
@@ -532,4 +648,4 @@ This project is dual-licensed:
|
|
|
532
648
|
|
|
533
649
|
---
|
|
534
650
|
|
|
535
|
-
**Status**: ✅ Production Ready | **Version**: 1.
|
|
651
|
+
**Status**: ✅ Production Ready | **Version**: 1.4.0 | **Node.js**: 20+ | **TypeScript**: 5+
|
package/bin/vezlo-server.js
CHANGED
|
@@ -9,7 +9,7 @@ const path = require('path');
|
|
|
9
9
|
const fs = require('fs');
|
|
10
10
|
|
|
11
11
|
// Check if server is built
|
|
12
|
-
const serverPath = path.join(__dirname, '..', 'dist', 'server.js');
|
|
12
|
+
const serverPath = path.join(__dirname, '..', 'dist', 'src', 'server.js');
|
|
13
13
|
|
|
14
14
|
if (!fs.existsSync(serverPath)) {
|
|
15
15
|
console.error('❌ Error: Server not built. Please run "npm run build" first.');
|
package/dist/knexfile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knexfile.d.ts","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"knexfile.d.ts","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAcjC,QAAA,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;CA4EzC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/knexfile.js
CHANGED
|
@@ -6,6 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
7
7
|
// Load environment variables
|
|
8
8
|
dotenv_1.default.config();
|
|
9
|
+
// Register ts-node for TypeScript support in migrations (works in all environments)
|
|
10
|
+
try {
|
|
11
|
+
require('ts-node/register');
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
// ts-node not available, that's okay - migrations will use compiled JS
|
|
15
|
+
}
|
|
9
16
|
const config = {
|
|
10
17
|
development: {
|
|
11
18
|
client: 'postgresql',
|
package/dist/knexfile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/config/global.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/config/global.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IACF,EAAE,EAAE;QACF,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,UAAU,EAAE;QACV,uBAAuB,EAAE,OAAO,CAAC;QACjC,wBAAwB,EAAE,OAAO,CAAC;QAClC,oBAAoB,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,oBAAoB,EAAE,OAAO,CAAC;QAC9B,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH;AAGD,eAAO,MAAM,aAAa,EAAE,YAuD3B,CAAC;AAwBF,eAAO,MAAM,MAAM,EAAE,YAYpB,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAerC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.config = exports.defaultConfig = void 0;
|
|
8
8
|
exports.validateConfig = validateConfig;
|
|
9
|
+
const dotenv_1 = require("dotenv");
|
|
10
|
+
// Load environment variables first
|
|
11
|
+
(0, dotenv_1.config)();
|
|
9
12
|
// Default configuration
|
|
10
13
|
exports.defaultConfig = {
|
|
11
14
|
app: {
|
|
@@ -26,7 +29,7 @@ exports.defaultConfig = {
|
|
|
26
29
|
},
|
|
27
30
|
ai: {
|
|
28
31
|
provider: 'openai',
|
|
29
|
-
model: process.env.
|
|
32
|
+
model: process.env.AI_MODEL || 'gpt-4o-mini',
|
|
30
33
|
embeddingModel: 'text-embedding-ada-002',
|
|
31
34
|
maxTokens: 4096,
|
|
32
35
|
temperature: 0.7,
|
|
@@ -99,7 +102,7 @@ exports.config = {
|
|
|
99
102
|
function validateConfig() {
|
|
100
103
|
const required = [
|
|
101
104
|
'SUPABASE_URL',
|
|
102
|
-
'
|
|
105
|
+
'SUPABASE_SERVICE_KEY',
|
|
103
106
|
'OPENAI_API_KEY'
|
|
104
107
|
];
|
|
105
108
|
const missing = required.filter(key => !process.env[key]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/config/global.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/config/global.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAiO3C,eAAO,MAAM,KAAK,QAAwB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;CAoB5B,CAAC"}
|
|
@@ -4,11 +4,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.swaggerUiOptions = exports.swaggerUi = exports.specs = void 0;
|
|
7
|
+
const dotenv_1 = require("dotenv");
|
|
7
8
|
const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
|
|
8
9
|
const swagger_ui_express_1 = __importDefault(require("swagger-ui-express"));
|
|
9
10
|
exports.swaggerUi = swagger_ui_express_1.default;
|
|
10
11
|
const global_1 = require("./global");
|
|
11
12
|
const schemas_1 = require("../schemas");
|
|
13
|
+
// Load environment variables
|
|
14
|
+
(0, dotenv_1.config)();
|
|
15
|
+
const getServerUrl = () => {
|
|
16
|
+
// Always use BASE_URL if set, otherwise fallback to appropriate default
|
|
17
|
+
if (process.env.BASE_URL) {
|
|
18
|
+
return process.env.BASE_URL;
|
|
19
|
+
}
|
|
20
|
+
// Fallback to Vercel URL or localhost
|
|
21
|
+
if (process.env.VERCEL_URL) {
|
|
22
|
+
return `https://${process.env.VERCEL_URL}`;
|
|
23
|
+
}
|
|
24
|
+
return 'http://localhost:3000';
|
|
25
|
+
};
|
|
12
26
|
const options = {
|
|
13
27
|
definition: {
|
|
14
28
|
openapi: '3.0.0',
|
|
@@ -19,8 +33,8 @@ const options = {
|
|
|
19
33
|
},
|
|
20
34
|
servers: [
|
|
21
35
|
{
|
|
22
|
-
url:
|
|
23
|
-
description: process.env.VERCEL_URL ? '
|
|
36
|
+
url: getServerUrl(),
|
|
37
|
+
description: process.env.VERCEL_URL ? 'Current deployment' : 'Development server'
|
|
24
38
|
}
|
|
25
39
|
],
|
|
26
40
|
components: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,4EAA2C;
|
|
1
|
+
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -89,7 +122,6 @@ async function initializeServices() {
|
|
|
89
122
|
model: process.env.AI_MODEL || 'gpt-4',
|
|
90
123
|
temperature: parseFloat(process.env.AI_TEMPERATURE || '0.7'),
|
|
91
124
|
maxTokens: parseInt(process.env.AI_MAX_TOKENS || '1000'),
|
|
92
|
-
enableFeedbackDetection: process.env.ENABLE_FEEDBACK_DETECTION === 'true',
|
|
93
125
|
knowledgeBaseService: knowledgeBase
|
|
94
126
|
});
|
|
95
127
|
// Initialize chat manager
|
|
@@ -548,6 +580,102 @@ app.put('/api/knowledge/items/:uuid', (req, res) => knowledgeController.updateIt
|
|
|
548
580
|
*/
|
|
549
581
|
app.delete('/api/knowledge/items/:uuid', (req, res) => knowledgeController.deleteItem(req, res));
|
|
550
582
|
// ============================================================================
|
|
583
|
+
// MIGRATION ENDPOINTS
|
|
584
|
+
// ============================================================================
|
|
585
|
+
/**
|
|
586
|
+
* @swagger
|
|
587
|
+
* /api/migrate:
|
|
588
|
+
* get:
|
|
589
|
+
* summary: Run database migrations
|
|
590
|
+
* description: Executes pending database migrations with API key authentication
|
|
591
|
+
* tags: [System]
|
|
592
|
+
* parameters:
|
|
593
|
+
* - in: query
|
|
594
|
+
* name: key
|
|
595
|
+
* required: true
|
|
596
|
+
* schema:
|
|
597
|
+
* type: string
|
|
598
|
+
* description: Migration API key
|
|
599
|
+
* responses:
|
|
600
|
+
* 200:
|
|
601
|
+
* description: Migrations completed successfully
|
|
602
|
+
* content:
|
|
603
|
+
* application/json:
|
|
604
|
+
* schema:
|
|
605
|
+
* type: object
|
|
606
|
+
* properties:
|
|
607
|
+
* success:
|
|
608
|
+
* type: boolean
|
|
609
|
+
* message:
|
|
610
|
+
* type: string
|
|
611
|
+
* currentVersion:
|
|
612
|
+
* type: string
|
|
613
|
+
* details:
|
|
614
|
+
* type: object
|
|
615
|
+
* 400:
|
|
616
|
+
* description: Bad request (missing API key or environment variables)
|
|
617
|
+
* 401:
|
|
618
|
+
* description: Unauthorized (invalid API key)
|
|
619
|
+
* 500:
|
|
620
|
+
* description: Internal server error
|
|
621
|
+
*/
|
|
622
|
+
app.get('/api/migrate', (0, errorHandler_1.asyncHandler)(async (req, res) => {
|
|
623
|
+
const { MigrationService } = await Promise.resolve().then(() => __importStar(require('./services/MigrationService')));
|
|
624
|
+
const apiKey = req.query.key || req.headers['x-migration-key'];
|
|
625
|
+
if (!apiKey) {
|
|
626
|
+
return res.status(400).json({
|
|
627
|
+
success: false,
|
|
628
|
+
message: 'Migration API key is required',
|
|
629
|
+
error: 'MISSING_API_KEY',
|
|
630
|
+
details: {
|
|
631
|
+
usage: 'Add ?key=your-secret-key to the URL or x-migration-key header'
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
const result = await MigrationService.runMigrations(apiKey);
|
|
636
|
+
const statusCode = result.success ? 200 :
|
|
637
|
+
result.error === 'UNAUTHORIZED' ? 401 :
|
|
638
|
+
result.error === 'MISSING_ENV_VARS' || result.error === 'DATABASE_CONNECTION_FAILED' ? 400 : 500;
|
|
639
|
+
res.status(statusCode).json(result);
|
|
640
|
+
}));
|
|
641
|
+
/**
|
|
642
|
+
* @swagger
|
|
643
|
+
* /api/migrate/status:
|
|
644
|
+
* get:
|
|
645
|
+
* summary: Get migration status
|
|
646
|
+
* description: Check current migration status without running migrations
|
|
647
|
+
* tags: [System]
|
|
648
|
+
* parameters:
|
|
649
|
+
* - in: query
|
|
650
|
+
* name: key
|
|
651
|
+
* required: true
|
|
652
|
+
* schema:
|
|
653
|
+
* type: string
|
|
654
|
+
* description: Migration API key
|
|
655
|
+
* responses:
|
|
656
|
+
* 200:
|
|
657
|
+
* description: Migration status retrieved
|
|
658
|
+
* 401:
|
|
659
|
+
* description: Unauthorized (invalid API key)
|
|
660
|
+
* 500:
|
|
661
|
+
* description: Internal server error
|
|
662
|
+
*/
|
|
663
|
+
app.get('/api/migrate/status', (0, errorHandler_1.asyncHandler)(async (req, res) => {
|
|
664
|
+
const { MigrationService } = await Promise.resolve().then(() => __importStar(require('./services/MigrationService')));
|
|
665
|
+
const apiKey = req.query.key || req.headers['x-migration-key'];
|
|
666
|
+
if (!apiKey) {
|
|
667
|
+
return res.status(400).json({
|
|
668
|
+
success: false,
|
|
669
|
+
message: 'Migration API key is required',
|
|
670
|
+
error: 'MISSING_API_KEY'
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
const result = await MigrationService.getStatus(apiKey);
|
|
674
|
+
const statusCode = result.success ? 200 :
|
|
675
|
+
result.error === 'UNAUTHORIZED' ? 401 : 500;
|
|
676
|
+
res.status(statusCode).json(result);
|
|
677
|
+
}));
|
|
678
|
+
// ============================================================================
|
|
551
679
|
// WEBSOCKET HANDLING
|
|
552
680
|
// ============================================================================
|
|
553
681
|
// WebSocket handling
|
|
@@ -565,7 +693,6 @@ io.on('connection', (socket) => {
|
|
|
565
693
|
message: response.content,
|
|
566
694
|
conversation_id: response.conversationId,
|
|
567
695
|
message_id: response.messageId,
|
|
568
|
-
feedback_detection: response.feedbackDetection,
|
|
569
696
|
suggested_links: response.suggestedLinks
|
|
570
697
|
});
|
|
571
698
|
// Broadcast to all clients in the conversation
|