@vezlo/assistant-server 2.2.1 → 2.3.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 +27 -18
- package/database-schema.sql +181 -7
- package/dist/knexfile.js +5 -6
- package/dist/knexfile.js.map +1 -1
- package/dist/src/bootstrap/initializeServices.d.ts.map +1 -1
- package/dist/src/bootstrap/initializeServices.js +14 -1
- package/dist/src/bootstrap/initializeServices.js.map +1 -1
- package/dist/src/config/global.d.ts.map +1 -1
- package/dist/src/config/global.js +11 -2
- package/dist/src/config/global.js.map +1 -1
- package/dist/src/controllers/AuthController.d.ts +4 -1
- package/dist/src/controllers/AuthController.d.ts.map +1 -1
- package/dist/src/controllers/AuthController.js +8 -3
- package/dist/src/controllers/AuthController.js.map +1 -1
- package/dist/src/controllers/ChatController.d.ts +9 -1
- package/dist/src/controllers/ChatController.d.ts.map +1 -1
- package/dist/src/controllers/ChatController.js +502 -85
- package/dist/src/controllers/ChatController.js.map +1 -1
- package/dist/src/controllers/KnowledgeController.d.ts.map +1 -1
- package/dist/src/controllers/KnowledgeController.js +0 -4
- package/dist/src/controllers/KnowledgeController.js.map +1 -1
- package/dist/src/migrations/005_add_conversation_handoff_columns.d.ts +4 -0
- package/dist/src/migrations/005_add_conversation_handoff_columns.d.ts.map +1 -0
- package/dist/src/migrations/005_add_conversation_handoff_columns.js +42 -0
- package/dist/src/migrations/005_add_conversation_handoff_columns.js.map +1 -0
- package/dist/src/migrations/006_add_knowledge_chunks.d.ts +4 -0
- package/dist/src/migrations/006_add_knowledge_chunks.d.ts.map +1 -0
- package/dist/src/migrations/006_add_knowledge_chunks.js +245 -0
- package/dist/src/migrations/006_add_knowledge_chunks.js.map +1 -0
- package/dist/src/schemas/ConversationSchemas.d.ts +125 -33
- package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -1
- package/dist/src/schemas/ConversationSchemas.js +47 -18
- package/dist/src/schemas/ConversationSchemas.js.map +1 -1
- package/dist/src/schemas/MessageSchemas.d.ts +9 -0
- package/dist/src/schemas/MessageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/MessageSchemas.js +3 -1
- package/dist/src/schemas/MessageSchemas.js.map +1 -1
- package/dist/src/schemas/index.d.ts +134 -33
- package/dist/src/schemas/index.d.ts.map +1 -1
- package/dist/src/server.js +225 -27
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/AIService.d.ts.map +1 -1
- package/dist/src/services/AIService.js +1 -3
- package/dist/src/services/AIService.js.map +1 -1
- package/dist/src/services/ChatManager.d.ts.map +1 -1
- package/dist/src/services/ChatManager.js +26 -29
- package/dist/src/services/ChatManager.js.map +1 -1
- package/dist/src/services/IntentService.d.ts +2 -1
- package/dist/src/services/IntentService.d.ts.map +1 -1
- package/dist/src/services/IntentService.js +29 -7
- package/dist/src/services/IntentService.js.map +1 -1
- package/dist/src/services/KnowledgeBaseService.d.ts +20 -5
- package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
- package/dist/src/services/KnowledgeBaseService.js +203 -137
- package/dist/src/services/KnowledgeBaseService.js.map +1 -1
- package/dist/src/services/RealtimePublisher.d.ts +6 -0
- package/dist/src/services/RealtimePublisher.d.ts.map +1 -0
- package/dist/src/services/RealtimePublisher.js +43 -0
- package/dist/src/services/RealtimePublisher.js.map +1 -0
- package/dist/src/storage/ConversationRepository.d.ts +2 -2
- package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
- package/dist/src/storage/ConversationRepository.js +36 -19
- package/dist/src/storage/ConversationRepository.js.map +1 -1
- package/dist/src/storage/MessageRepository.d.ts +4 -1
- package/dist/src/storage/MessageRepository.d.ts.map +1 -1
- package/dist/src/storage/MessageRepository.js +10 -4
- package/dist/src/storage/MessageRepository.js.map +1 -1
- package/dist/src/storage/SupabaseStorage.d.ts +5 -3
- package/dist/src/storage/SupabaseStorage.d.ts.map +1 -1
- package/dist/src/storage/SupabaseStorage.js +42 -11
- package/dist/src/storage/SupabaseStorage.js.map +1 -1
- package/dist/src/storage/UnifiedStorage.d.ts +5 -3
- package/dist/src/storage/UnifiedStorage.d.ts.map +1 -1
- package/dist/src/storage/UnifiedStorage.js +4 -4
- package/dist/src/storage/UnifiedStorage.js.map +1 -1
- package/dist/src/types/index.d.ts +24 -4
- package/dist/src/types/index.d.ts.map +1 -1
- package/knexfile.ts +4 -4
- package/package.json +2 -2
- package/scripts/test-chunks-embeddings.js +190 -0
package/README.md
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
# Vezlo AI Assistant Server
|
|
2
2
|
|
|
3
|
-
🚀 **Production-ready Node.js/TypeScript API server** for the Vezlo AI Assistant platform - Complete backend APIs with Docker deployment and database migrations.
|
|
3
|
+
🚀 **Production-ready Node.js/TypeScript API server** for the Vezlo AI Assistant platform - Complete backend APIs with advanced RAG (chunk-based semantic search + adjacent retrieval), Docker deployment, and database migrations.
|
|
4
4
|
|
|
5
|
-
## 🚨 Breaking Change Notice
|
|
5
|
+
## 🚨 Breaking Change Notice
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### v2.3.0 - Enhanced RAG System (Latest)
|
|
8
|
+
**New chunk-based architecture with adjacent retrieval for better code understanding.**
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
10
|
+
- **Database Schema**: New `vezlo_knowledge_chunks` table and RPC functions
|
|
11
|
+
- **Embedding Model**: Upgraded to `text-embedding-3-large` (3072 dimensions)
|
|
12
|
+
- **Migration**: Automatic via `npm run migrate:latest` (migration 006)
|
|
13
|
+
- **Rollback**: Supported via `npm run migrate:rollback`
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
**Upgrade Steps:**
|
|
16
|
+
```bash
|
|
17
|
+
npm install @vezlo/assistant-server@latest
|
|
18
|
+
npm run migrate:latest
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### v2.0.0 - Multi-tenancy Support
|
|
22
|
+
**Introduced multi-tenancy with authentication. Existing data not auto-migrated.**
|
|
18
23
|
|
|
19
24
|
See [CHANGELOG.md](./CHANGELOG.md) for complete migration guide.
|
|
20
25
|
|
|
@@ -23,9 +28,10 @@ See [CHANGELOG.md](./CHANGELOG.md) for complete migration guide.
|
|
|
23
28
|
## 🏗️ Architecture
|
|
24
29
|
|
|
25
30
|
- **Backend APIs** - RESTful API endpoints for AI chat and knowledge management
|
|
26
|
-
- **Real-time Communication** - WebSocket support for live chat
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
31
|
+
- **Real-time Communication** - WebSocket support for live chat with Supabase Realtime broadcasting
|
|
32
|
+
- **Human Agent Handoff** - Agent join/leave workflows with realtime status updates and message synchronization
|
|
33
|
+
- **Advanced RAG System** - Chunk-based semantic search with adjacent retrieval using OpenAI text-embedding-3-large (3072 dims) and pgvector
|
|
34
|
+
- **Conversation Management** - Persistent conversation history with agent support
|
|
29
35
|
- **Feedback System** - Message rating and improvement tracking
|
|
30
36
|
- **Database Migrations** - Knex.js migration system for schema management
|
|
31
37
|
- **Production Ready** - Docker containerization with health checks
|
|
@@ -227,7 +233,6 @@ Deploy to Vercel's serverless platform with multiple options. The Marketplace in
|
|
|
227
233
|
1. Run the migration URL: `https://your-project.vercel.app/api/migrate?key=YOUR_MIGRATION_SECRET`
|
|
228
234
|
2. Verify deployment: `https://your-project.vercel.app/health`
|
|
229
235
|
3. Access API docs: `https://your-project.vercel.app/docs`
|
|
230
|
-
|
|
231
236
|
### Option 2: One-Click Deploy Button
|
|
232
237
|
|
|
233
238
|
[](https://vercel.com/new/clone?repository-url=https://github.com/vezlo/assistant-server&integration-ids=oac_f2GcBt8U4FhiVJ4qWv5PYMEZ)
|
|
@@ -255,6 +260,7 @@ vercel
|
|
|
255
260
|
1. Supabase project (URL, Service Role key, DB host/port/name/user/password)
|
|
256
261
|
2. OpenAI API key
|
|
257
262
|
3. If not using the Marketplace, add environment variables in Vercel project settings
|
|
263
|
+
4. Disable Vercel Deployment Protection if the API needs to be publicly accessible; otherwise Vercel shows its SSO page and the browser never reaches your server.
|
|
258
264
|
|
|
259
265
|
See [docs/VERCEL_DEPLOYMENT.md](docs/VERCEL_DEPLOYMENT.md) for detailed deployment guide.
|
|
260
266
|
|
|
@@ -307,7 +313,7 @@ RATE_LIMIT_MAX=100
|
|
|
307
313
|
ORGANIZATION_NAME=Vezlo
|
|
308
314
|
ASSISTANT_NAME=Vezlo Assistant
|
|
309
315
|
|
|
310
|
-
# OPTIONAL - Knowledge Base
|
|
316
|
+
# OPTIONAL - Knowledge Base (uses text-embedding-3-large, 3072 dims)
|
|
311
317
|
CHUNK_SIZE=1000
|
|
312
318
|
CHUNK_OVERLAP=200
|
|
313
319
|
```
|
|
@@ -365,10 +371,13 @@ http://localhost:3000/api
|
|
|
365
371
|
### Core Endpoints
|
|
366
372
|
|
|
367
373
|
#### Conversations
|
|
368
|
-
- `POST /api/conversations` - Create new conversation
|
|
374
|
+
- `POST /api/conversations` - Create new conversation (public widget endpoint)
|
|
375
|
+
- `GET /api/conversations` - List company conversations (agent dashboard)
|
|
369
376
|
- `GET /api/conversations/:uuid` - Get conversation with messages
|
|
370
377
|
- `DELETE /api/conversations/:uuid` - Delete conversation
|
|
371
|
-
- `
|
|
378
|
+
- `POST /api/conversations/:uuid/join` - Agent joins a conversation
|
|
379
|
+
- `POST /api/conversations/:uuid/messages/agent` - Agent sends a message
|
|
380
|
+
- `POST /api/conversations/:uuid/close` - Agent closes a conversation
|
|
372
381
|
|
|
373
382
|
#### Messages
|
|
374
383
|
- `POST /api/conversations/:uuid/messages` - Create user message
|
package/database-schema.sql
CHANGED
|
@@ -42,6 +42,14 @@ INSERT INTO knex_migrations (name, batch, migration_time)
|
|
|
42
42
|
SELECT '004_add_vector_search_rpc.ts', 1, NOW()
|
|
43
43
|
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '004_add_vector_search_rpc.ts');
|
|
44
44
|
|
|
45
|
+
INSERT INTO knex_migrations (name, batch, migration_time)
|
|
46
|
+
SELECT '005_add_conversation_handoff_columns.ts', 1, NOW()
|
|
47
|
+
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '005_add_conversation_handoff_columns.ts');
|
|
48
|
+
|
|
49
|
+
INSERT INTO knex_migrations (name, batch, migration_time)
|
|
50
|
+
SELECT '006_add_knowledge_chunks.ts', 1, NOW()
|
|
51
|
+
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '006_add_knowledge_chunks.ts');
|
|
52
|
+
|
|
45
53
|
-- Set migration lock to unlocked (0 = unlocked, 1 = locked)
|
|
46
54
|
INSERT INTO knex_migrations_lock (index, is_locked)
|
|
47
55
|
VALUES (1, 0)
|
|
@@ -106,6 +114,10 @@ CREATE TABLE IF NOT EXISTS vezlo_conversations (
|
|
|
106
114
|
creator_id BIGINT NOT NULL,
|
|
107
115
|
title TEXT NOT NULL,
|
|
108
116
|
message_count INTEGER DEFAULT 0,
|
|
117
|
+
joined_at TIMESTAMPTZ,
|
|
118
|
+
responded_at TIMESTAMPTZ,
|
|
119
|
+
closed_at TIMESTAMPTZ,
|
|
120
|
+
last_message_at TIMESTAMPTZ,
|
|
109
121
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
110
122
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
111
123
|
deleted_at TIMESTAMPTZ -- Soft delete
|
|
@@ -120,6 +132,7 @@ CREATE TABLE IF NOT EXISTS vezlo_messages (
|
|
|
120
132
|
content TEXT NOT NULL,
|
|
121
133
|
status TEXT DEFAULT 'completed', -- generating, completed, stopped, failed
|
|
122
134
|
metadata JSONB DEFAULT '{}', -- For tool_calls, tool_results, etc.
|
|
135
|
+
author_id BIGINT REFERENCES vezlo_users(id) ON DELETE SET NULL,
|
|
123
136
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
124
137
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
125
138
|
);
|
|
@@ -154,13 +167,36 @@ CREATE TABLE IF NOT EXISTS vezlo_knowledge_items (
|
|
|
154
167
|
file_size BIGINT, -- File size in bytes
|
|
155
168
|
file_type TEXT, -- MIME type for files
|
|
156
169
|
metadata JSONB DEFAULT '{}', -- Flexible metadata storage
|
|
157
|
-
embedding vector(1536), -- OpenAI embeddings for search
|
|
170
|
+
embedding vector(1536), -- OpenAI embeddings for search (legacy, not used with chunks)
|
|
158
171
|
processed_at TIMESTAMPTZ, -- When embedding was generated
|
|
159
172
|
created_by BIGINT NOT NULL,
|
|
160
173
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
161
174
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
162
175
|
);
|
|
163
176
|
|
|
177
|
+
-- ============================================================================
|
|
178
|
+
-- KNOWLEDGE CHUNKS TABLE (Migration 006)
|
|
179
|
+
-- ============================================================================
|
|
180
|
+
-- This table stores text chunks from knowledge items with their embeddings.
|
|
181
|
+
-- Each document can have multiple chunks for better semantic search on large content.
|
|
182
|
+
-- Uses text-embedding-3-large model which produces 3072-dimensional vectors.
|
|
183
|
+
|
|
184
|
+
CREATE TABLE IF NOT EXISTS vezlo_knowledge_chunks (
|
|
185
|
+
id BIGSERIAL PRIMARY KEY,
|
|
186
|
+
uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
|
|
187
|
+
document_id BIGINT NOT NULL REFERENCES vezlo_knowledge_items(id) ON DELETE CASCADE,
|
|
188
|
+
chunk_text TEXT NOT NULL,
|
|
189
|
+
chunk_index INTEGER NOT NULL,
|
|
190
|
+
start_char INTEGER,
|
|
191
|
+
end_char INTEGER,
|
|
192
|
+
token_count INTEGER,
|
|
193
|
+
embedding vector(3072), -- OpenAI text-embedding-3-large embeddings
|
|
194
|
+
metadata JSONB DEFAULT '{}',
|
|
195
|
+
processed_at TIMESTAMPTZ,
|
|
196
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
197
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
198
|
+
);
|
|
199
|
+
|
|
164
200
|
-- ============================================================================
|
|
165
201
|
-- ADD FOREIGN KEY CONSTRAINTS (Matching Migration 002)
|
|
166
202
|
-- These constraints use explicit names matching Knex migration naming convention
|
|
@@ -236,6 +272,9 @@ CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_company_id ON vezlo_conversat
|
|
|
236
272
|
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_creator_id ON vezlo_conversations(creator_id);
|
|
237
273
|
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_deleted ON vezlo_conversations(deleted_at) WHERE deleted_at IS NULL;
|
|
238
274
|
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_updated_at ON vezlo_conversations(updated_at DESC);
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_last_message_at ON vezlo_conversations(last_message_at DESC);
|
|
276
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_joined_at ON vezlo_conversations(joined_at);
|
|
277
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_closed_at ON vezlo_conversations(closed_at);
|
|
239
278
|
|
|
240
279
|
-- Messages indexes
|
|
241
280
|
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_uuid ON vezlo_messages(uuid);
|
|
@@ -244,6 +283,7 @@ CREATE INDEX IF NOT EXISTS idx_vezlo_messages_parent_id ON vezlo_messages(parent
|
|
|
244
283
|
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_type ON vezlo_messages(type);
|
|
245
284
|
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_status ON vezlo_messages(status);
|
|
246
285
|
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_created_at ON vezlo_messages(created_at DESC);
|
|
286
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_author_id ON vezlo_messages(author_id);
|
|
247
287
|
|
|
248
288
|
-- Message feedback indexes
|
|
249
289
|
CREATE INDEX IF NOT EXISTS idx_vezlo_feedback_uuid ON vezlo_message_feedback(uuid);
|
|
@@ -260,15 +300,38 @@ CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_type ON vezlo_knowledge_items(typ
|
|
|
260
300
|
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_created_by ON vezlo_knowledge_items(created_by);
|
|
261
301
|
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_created_at ON vezlo_knowledge_items(created_at DESC);
|
|
262
302
|
|
|
303
|
+
-- Knowledge chunks indexes (Migration 006)
|
|
304
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_chunks_uuid ON vezlo_knowledge_chunks(uuid);
|
|
305
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_chunks_document_id ON vezlo_knowledge_chunks(document_id);
|
|
306
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_chunks_chunk_index ON vezlo_knowledge_chunks(document_id, chunk_index);
|
|
307
|
+
|
|
263
308
|
-- Full-text search index for knowledge items
|
|
264
309
|
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_search
|
|
265
310
|
ON vezlo_knowledge_items USING gin(to_tsvector('english', title || ' ' || COALESCE(description, '') || ' ' || COALESCE(content, '')));
|
|
266
311
|
|
|
267
|
-
-- Vector similarity index for semantic search (only for items with content)
|
|
312
|
+
-- Vector similarity index for semantic search (only for items with content - legacy)
|
|
268
313
|
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_embedding
|
|
269
314
|
ON vezlo_knowledge_items USING ivfflat (embedding vector_cosine_ops)
|
|
270
315
|
WHERE embedding IS NOT NULL;
|
|
271
316
|
|
|
317
|
+
-- Vector similarity index for chunks (Migration 006)
|
|
318
|
+
-- HNSW index for 3072-dimensional vectors (text-embedding-3-large)
|
|
319
|
+
-- Note: May fail on older pgvector versions, vector search will use sequential scan
|
|
320
|
+
DO $$
|
|
321
|
+
BEGIN
|
|
322
|
+
BEGIN
|
|
323
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_chunks_embedding
|
|
324
|
+
ON vezlo_knowledge_chunks USING hnsw (embedding vector_cosine_ops)
|
|
325
|
+
WHERE embedding IS NOT NULL;
|
|
326
|
+
EXCEPTION WHEN OTHERS THEN
|
|
327
|
+
RAISE NOTICE 'HNSW index creation skipped: % (Vector search will use sequential scan)', SQLERRM;
|
|
328
|
+
END;
|
|
329
|
+
END $$;
|
|
330
|
+
|
|
331
|
+
-- GIN index for full-text keyword search on chunks (Migration 006)
|
|
332
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_chunks_chunk_text_gin
|
|
333
|
+
ON vezlo_knowledge_chunks USING gin (to_tsvector('english', chunk_text));
|
|
334
|
+
|
|
272
335
|
-- Sparse indexes for better performance
|
|
273
336
|
-- Note: idx_vezlo_knowledge_content was removed in migration 003
|
|
274
337
|
-- because btree indexes fail on large content (>2704 bytes).
|
|
@@ -290,6 +353,7 @@ ALTER TABLE vezlo_conversations ENABLE ROW LEVEL SECURITY;
|
|
|
290
353
|
ALTER TABLE vezlo_messages ENABLE ROW LEVEL SECURITY;
|
|
291
354
|
ALTER TABLE vezlo_message_feedback ENABLE ROW LEVEL SECURITY;
|
|
292
355
|
ALTER TABLE vezlo_knowledge_items ENABLE ROW LEVEL SECURITY;
|
|
356
|
+
ALTER TABLE vezlo_knowledge_chunks ENABLE ROW LEVEL SECURITY;
|
|
293
357
|
|
|
294
358
|
-- Policies for service role access (full access)
|
|
295
359
|
CREATE POLICY "Service role can access all users" ON vezlo_users
|
|
@@ -316,6 +380,9 @@ CREATE POLICY "Service role can access all feedback" ON vezlo_message_feedback
|
|
|
316
380
|
CREATE POLICY "Service role can access all knowledge items" ON vezlo_knowledge_items
|
|
317
381
|
FOR ALL USING (auth.role() = 'service_role');
|
|
318
382
|
|
|
383
|
+
CREATE POLICY "Service role can access all knowledge chunks" ON vezlo_knowledge_chunks
|
|
384
|
+
FOR ALL USING (auth.role() = 'service_role');
|
|
385
|
+
|
|
319
386
|
-- Example company-based policies (uncomment and modify as needed)
|
|
320
387
|
-- CREATE POLICY "Users can access their company conversations" ON vezlo_conversations
|
|
321
388
|
-- FOR ALL USING (company_id = auth.jwt() ->> 'company_id');
|
|
@@ -324,13 +391,120 @@ CREATE POLICY "Service role can access all knowledge items" ON vezlo_knowledge_i
|
|
|
324
391
|
-- FOR ALL USING (company_id = auth.jwt() ->> 'company_id');
|
|
325
392
|
|
|
326
393
|
-- ============================================================================
|
|
327
|
-
-- RPC
|
|
394
|
+
-- RPC FUNCTIONS FOR VECTOR SEARCH
|
|
328
395
|
-- ============================================================================
|
|
329
396
|
|
|
330
|
-
--
|
|
331
|
-
--
|
|
332
|
-
--
|
|
333
|
-
--
|
|
397
|
+
-- ============================================================================
|
|
398
|
+
-- INSERT RPC FUNCTION FOR CHUNKS (Migration 006)
|
|
399
|
+
-- ============================================================================
|
|
400
|
+
-- Ensures embeddings are stored as proper vector(3072) type
|
|
401
|
+
CREATE OR REPLACE FUNCTION vezlo_insert_knowledge_chunk(
|
|
402
|
+
p_document_id bigint,
|
|
403
|
+
p_chunk_text text,
|
|
404
|
+
p_chunk_index int,
|
|
405
|
+
p_start_char int,
|
|
406
|
+
p_end_char int,
|
|
407
|
+
p_token_count int,
|
|
408
|
+
p_embedding text,
|
|
409
|
+
p_processed_at timestamptz
|
|
410
|
+
)
|
|
411
|
+
RETURNS bigint
|
|
412
|
+
LANGUAGE plpgsql
|
|
413
|
+
AS $$
|
|
414
|
+
DECLARE
|
|
415
|
+
new_id bigint;
|
|
416
|
+
BEGIN
|
|
417
|
+
INSERT INTO vezlo_knowledge_chunks (
|
|
418
|
+
document_id,
|
|
419
|
+
chunk_text,
|
|
420
|
+
chunk_index,
|
|
421
|
+
start_char,
|
|
422
|
+
end_char,
|
|
423
|
+
token_count,
|
|
424
|
+
embedding,
|
|
425
|
+
processed_at,
|
|
426
|
+
metadata
|
|
427
|
+
) VALUES (
|
|
428
|
+
p_document_id,
|
|
429
|
+
p_chunk_text,
|
|
430
|
+
p_chunk_index,
|
|
431
|
+
p_start_char,
|
|
432
|
+
p_end_char,
|
|
433
|
+
p_token_count,
|
|
434
|
+
p_embedding::vector(3072),
|
|
435
|
+
p_processed_at,
|
|
436
|
+
'{}'::jsonb
|
|
437
|
+
)
|
|
438
|
+
RETURNING id INTO new_id;
|
|
439
|
+
|
|
440
|
+
RETURN new_id;
|
|
441
|
+
END;
|
|
442
|
+
$$;
|
|
443
|
+
|
|
444
|
+
-- ============================================================================
|
|
445
|
+
-- CHUNK-BASED VECTOR SEARCH RPC FUNCTION (Migration 006)
|
|
446
|
+
-- ============================================================================
|
|
447
|
+
-- Searches through chunks and joins back to parent documents for metadata.
|
|
448
|
+
-- Uses 3072-dimensional vectors for text-embedding-3-large.
|
|
449
|
+
CREATE OR REPLACE FUNCTION vezlo_match_knowledge_chunks(
|
|
450
|
+
query_embedding text,
|
|
451
|
+
match_threshold float DEFAULT 0.5,
|
|
452
|
+
match_count int DEFAULT 10,
|
|
453
|
+
filter_company_id bigint DEFAULT NULL
|
|
454
|
+
)
|
|
455
|
+
RETURNS TABLE (
|
|
456
|
+
chunk_id bigint,
|
|
457
|
+
chunk_uuid uuid,
|
|
458
|
+
document_id bigint,
|
|
459
|
+
document_uuid uuid,
|
|
460
|
+
chunk_text text,
|
|
461
|
+
chunk_index int,
|
|
462
|
+
start_char int,
|
|
463
|
+
end_char int,
|
|
464
|
+
token_count int,
|
|
465
|
+
document_title text,
|
|
466
|
+
document_description text,
|
|
467
|
+
document_type text,
|
|
468
|
+
document_metadata jsonb,
|
|
469
|
+
chunk_metadata jsonb,
|
|
470
|
+
company_id bigint,
|
|
471
|
+
similarity float
|
|
472
|
+
)
|
|
473
|
+
LANGUAGE plpgsql
|
|
474
|
+
AS $$
|
|
475
|
+
BEGIN
|
|
476
|
+
RETURN QUERY
|
|
477
|
+
SELECT
|
|
478
|
+
c.id AS chunk_id,
|
|
479
|
+
c.uuid AS chunk_uuid,
|
|
480
|
+
c.document_id,
|
|
481
|
+
ki.uuid AS document_uuid,
|
|
482
|
+
c.chunk_text,
|
|
483
|
+
c.chunk_index,
|
|
484
|
+
c.start_char,
|
|
485
|
+
c.end_char,
|
|
486
|
+
c.token_count,
|
|
487
|
+
ki.title AS document_title,
|
|
488
|
+
ki.description AS document_description,
|
|
489
|
+
ki.type AS document_type,
|
|
490
|
+
ki.metadata AS document_metadata,
|
|
491
|
+
c.metadata AS chunk_metadata,
|
|
492
|
+
ki.company_id,
|
|
493
|
+
1 - (c.embedding <=> query_embedding::vector(3072)) AS similarity
|
|
494
|
+
FROM vezlo_knowledge_chunks c
|
|
495
|
+
INNER JOIN vezlo_knowledge_items ki ON c.document_id = ki.id
|
|
496
|
+
WHERE c.embedding IS NOT NULL
|
|
497
|
+
AND (filter_company_id IS NULL OR ki.company_id = filter_company_id)
|
|
498
|
+
AND (1 - (c.embedding <=> query_embedding::vector(3072))) >= match_threshold
|
|
499
|
+
ORDER BY c.embedding <=> query_embedding::vector(3072)
|
|
500
|
+
LIMIT match_count;
|
|
501
|
+
END;
|
|
502
|
+
$$;
|
|
503
|
+
|
|
504
|
+
-- ============================================================================
|
|
505
|
+
-- LEGACY RPC FUNCTION (Pre-Migration 006)
|
|
506
|
+
-- ============================================================================
|
|
507
|
+
-- This function searches the parent table directly (legacy, not used with chunks)
|
|
334
508
|
CREATE OR REPLACE FUNCTION match_vezlo_knowledge(
|
|
335
509
|
query_embedding vector(1536),
|
|
336
510
|
match_threshold float DEFAULT 0.5,
|
package/dist/knexfile.js
CHANGED
|
@@ -24,12 +24,11 @@ const tsMigrationProbe = path.join(srcMigrationsPath, '001_initial_schema.ts');
|
|
|
24
24
|
const jsMigrationProbe = path.join(distMigrationsPath, '001_initial_schema.js');
|
|
25
25
|
const hasTsMigrations = fs.existsSync(tsMigrationProbe);
|
|
26
26
|
const hasJsMigrations = fs.existsSync(jsMigrationProbe);
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const migrationExtension = hasTsMigrations ? 'ts' : (hasJsMigrations ? 'js' : 'ts');
|
|
27
|
+
const preferJsMigrations = hasJsMigrations;
|
|
28
|
+
const resolvedMigrationsDirectory = preferJsMigrations
|
|
29
|
+
? distMigrationsPath
|
|
30
|
+
: srcMigrationsPath;
|
|
31
|
+
const migrationExtension = preferJsMigrations ? 'js' : 'ts';
|
|
33
32
|
const migrationLoadExtensions = migrationExtension === 'ts' ? ['.ts'] : ['.js'];
|
|
34
33
|
const supabaseMigrationsDirectory = fs.existsSync(distMigrationsPath)
|
|
35
34
|
? distMigrationsPath
|
package/dist/knexfile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":";;;;;AACA,oDAA4B;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB,6BAA6B;AAC7B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,oFAAoF;AACpF,IAAI,CAAC;IACH,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAC9B,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,uEAAuE;AACzE,CAAC;AAGD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrE,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAE/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;AAEhF,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACxD,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAExD,MAAM,
|
|
1
|
+
{"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializeServices.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"initializeServices.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE;QACR,OAAO,EAAE,cAAc,CAAC;QACxB,aAAa,EAAE,oBAAoB,CAAC;QACpC,SAAS,EAAE,SAAS,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,aAAa,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE;QACX,cAAc,EAAE,cAAc,CAAC;QAC/B,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,cAAc,EAAE,cAAc,CAAC;QAC/B,gBAAgB,EAAE,gBAAgB,CAAC;KACpC,CAAC;IACF,MAAM,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,CAa7C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,uBAAuB,CA0G3F"}
|
|
@@ -16,6 +16,7 @@ const AuthController_1 = require("../controllers/AuthController");
|
|
|
16
16
|
const ApiKeyService_1 = require("../services/ApiKeyService");
|
|
17
17
|
const ApiKeyController_1 = require("../controllers/ApiKeyController");
|
|
18
18
|
const IntentService_1 = require("../services/IntentService");
|
|
19
|
+
const RealtimePublisher_1 = require("../services/RealtimePublisher");
|
|
19
20
|
const DEFAULT_CHAT_HISTORY_LENGTH = 2;
|
|
20
21
|
const DEFAULT_CONVERSATION_TIMEOUT = 3600000; // 1 hour
|
|
21
22
|
function getChatHistoryLength() {
|
|
@@ -41,6 +42,7 @@ function initializeCoreServices(options) {
|
|
|
41
42
|
supabase,
|
|
42
43
|
tableName: knowledgeTableName
|
|
43
44
|
});
|
|
45
|
+
// Initialize V2 service for adjacent chunk retrieval
|
|
44
46
|
// Read AI configuration from environment
|
|
45
47
|
// Use AI_MODEL for all OpenAI calls (intent classification + response generation)
|
|
46
48
|
const aiModel = process.env.AI_MODEL || 'gpt-4o-mini';
|
|
@@ -61,6 +63,7 @@ function initializeCoreServices(options) {
|
|
|
61
63
|
maxTokens: aiMaxTokens,
|
|
62
64
|
knowledgeBaseService: knowledgeBase
|
|
63
65
|
});
|
|
66
|
+
// Set V2 service for adjacent chunk retrieval
|
|
64
67
|
const chatManager = new ChatManager_1.ChatManager({
|
|
65
68
|
aiService,
|
|
66
69
|
storage,
|
|
@@ -75,9 +78,19 @@ function initializeCoreServices(options) {
|
|
|
75
78
|
assistantName: process.env.ASSISTANT_NAME,
|
|
76
79
|
organizationName: process.env.ORGANIZATION_NAME
|
|
77
80
|
});
|
|
81
|
+
// Initialize realtime publisher if env vars are available
|
|
82
|
+
let realtimePublisher;
|
|
83
|
+
if (process.env.SUPABASE_URL && process.env.SUPABASE_SERVICE_KEY) {
|
|
84
|
+
realtimePublisher = new RealtimePublisher_1.RealtimePublisher(process.env.SUPABASE_URL, process.env.SUPABASE_SERVICE_KEY);
|
|
85
|
+
logger_1.default.info('✅ Realtime publisher initialized');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
logger_1.default.warn('⚠️ Realtime publisher not initialized (missing SUPABASE_URL or SUPABASE_SERVICE_KEY)');
|
|
89
|
+
}
|
|
78
90
|
const chatController = new ChatController_1.ChatController(chatManager, storage, supabase, {
|
|
79
91
|
historyLength: resolvedHistoryLength,
|
|
80
|
-
intentService
|
|
92
|
+
intentService,
|
|
93
|
+
realtimePublisher
|
|
81
94
|
});
|
|
82
95
|
const knowledgeController = new KnowledgeController_1.KnowledgeController(knowledgeBase, aiService);
|
|
83
96
|
const authController = new AuthController_1.AuthController(supabase);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializeServices.js","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"initializeServices.js","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.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;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;
|
|
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;AAeD,eAAO,MAAM,aAAa,EAAE,YAuD3B,CAAC;AAwBF,eAAO,MAAM,MAAM,EAAE,YAYpB,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAerC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -9,6 +9,15 @@ exports.validateConfig = validateConfig;
|
|
|
9
9
|
const dotenv_1 = require("dotenv");
|
|
10
10
|
// Load environment variables first
|
|
11
11
|
(0, dotenv_1.config)();
|
|
12
|
+
const getDefaultCorsOrigins = () => {
|
|
13
|
+
if (!process.env.CORS_ORIGINS) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const parsedOrigins = process.env.CORS_ORIGINS.split(',')
|
|
17
|
+
.map((origin) => origin.trim())
|
|
18
|
+
.filter(Boolean);
|
|
19
|
+
return parsedOrigins;
|
|
20
|
+
};
|
|
12
21
|
// Default configuration
|
|
13
22
|
exports.defaultConfig = {
|
|
14
23
|
app: {
|
|
@@ -21,7 +30,7 @@ exports.defaultConfig = {
|
|
|
21
30
|
api: {
|
|
22
31
|
prefix: '/api',
|
|
23
32
|
version: 'v1',
|
|
24
|
-
timeout:
|
|
33
|
+
timeout: 60000, // 60 seconds (matches Vercel Pro plan limit)
|
|
25
34
|
rateLimiting: {
|
|
26
35
|
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW || '900000'), // Default 15 minutes
|
|
27
36
|
maxRequests: parseInt(process.env.RATE_LIMIT_MAX || '100') // per window
|
|
@@ -56,7 +65,7 @@ exports.defaultConfig = {
|
|
|
56
65
|
},
|
|
57
66
|
cors: {
|
|
58
67
|
enabled: true,
|
|
59
|
-
origins:
|
|
68
|
+
origins: getDefaultCorsOrigins(),
|
|
60
69
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
|
|
61
70
|
credentials: true
|
|
62
71
|
},
|
|
@@ -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":";AAAA;;;GAGG;;;AA2KH,wCAeC;AAxLD,mCAAgD;AAEhD,mCAAmC;AACnC,IAAA,eAAY,GAAE,CAAC;AA2Df,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;SACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAC9B,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,wBAAwB;AACX,QAAA,aAAa,GAAiB;IACzC,GAAG,EAAE;QACH,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,qHAAqH;QAClI,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;KACnD;IACD,GAAG,EAAE;QACH,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK,EAAE,6CAA6C;QAC7D,YAAY,EAAE;YACZ,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,QAAQ,CAAC,EAAE,qBAAqB;YACpF,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,aAAa;SACzE;KACF;IACD,EAAE,EAAE;QACF,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;QAC5C,cAAc,EAAE,wBAAwB;QACxC,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,KAAK,CAAC,aAAa;KAC7B;IACD,SAAS,EAAE;QACT,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;QACrD,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC;QAC1D,mBAAmB,EAAE,GAAG;QACxB,gBAAgB,EAAE,EAAE;QACpB,mBAAmB,EAAE,IAAI,CAAC,4BAA4B;KACvD;IACD,UAAU,EAAE;QACV,uBAAuB,EAAE,IAAI;QAC7B,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;QAChE,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;KAC5D;IACD,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAC9C,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,qHAAqH;QAClI,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,OAAO;KACd;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,qBAAqB,EAAE;QAChC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;QAC7D,WAAW,EAAE,IAAI;KAClB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,IAAI;KACzB;CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,SAAS,GAA0B,EAAE,CAAC;AAE5C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,qBAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjE,SAAS,CAAC,UAAU,GAAG;QACrB,GAAG,qBAAa,CAAC,UAAU;QAC3B,oBAAoB,EAAE,KAAK;QAC3B,wBAAwB,EAAE,KAAK;KAChC,CAAC;IACF,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,qBAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC;AAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;IACpC,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,qBAAa,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACjE,SAAS,CAAC,GAAG,GAAG;QACd,GAAG,qBAAa,CAAC,GAAG;QACpB,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,uBAAuB;AACV,QAAA,MAAM,GAAiB;IAClC,GAAG,qBAAa;IAChB,GAAG,SAAS;IACZ,4BAA4B;IAC5B,GAAG,EAAE,EAAE,GAAG,qBAAa,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE;IAC/C,GAAG,EAAE,EAAE,GAAG,qBAAa,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,GAAG,qBAAa,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;IAC5C,SAAS,EAAE,EAAE,GAAG,qBAAa,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE;IACjE,UAAU,EAAE,EAAE,GAAG,qBAAa,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE;IACpE,OAAO,EAAE,EAAE,GAAG,qBAAa,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;IAC3D,IAAI,EAAE,EAAE,GAAG,qBAAa,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,EAAE,GAAG,qBAAa,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;CAC5D,CAAC;AAEF,oBAAoB;AACpB,SAAgB,cAAc;IAC5B,MAAM,QAAQ,GAAG;QACf,cAAc;QACd,sBAAsB;QACtB,gBAAgB;KACjB,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,eAAe,cAAM,CAAC,GAAG,CAAC,IAAI,KAAK,cAAM,CAAC,GAAG,CAAC,OAAO,OAAO,cAAM,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,CAAC;AACzG,CAAC;AAED,kBAAe,cAAM,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
import type { RealtimePublisher } from '../services/RealtimePublisher';
|
|
2
3
|
export declare class AuthController {
|
|
3
4
|
private supabase;
|
|
4
|
-
|
|
5
|
+
private realtimePublisher?;
|
|
6
|
+
constructor(supabase: SupabaseClient, realtimePublisher?: RealtimePublisher);
|
|
7
|
+
setRealtimePublisher(publisher: RealtimePublisher): void;
|
|
5
8
|
login(req: any, res: any): Promise<void>;
|
|
6
9
|
logout(req: any, res: any): Promise<void>;
|
|
7
10
|
getMe(req: any, res: any): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAElC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAK3E,oBAAoB,CAAC,SAAS,EAAE,iBAAiB;IAK3C,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DxC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;YAiChC,WAAW;YAcX,cAAc;YAsBd,cAAc;YAcd,mBAAmB;YAsBnB,wBAAwB;CAUvC"}
|
|
@@ -40,8 +40,12 @@ exports.AuthController = void 0;
|
|
|
40
40
|
const auth_1 = require("../middleware/auth");
|
|
41
41
|
const logger_1 = __importDefault(require("../config/logger"));
|
|
42
42
|
class AuthController {
|
|
43
|
-
constructor(supabase) {
|
|
43
|
+
constructor(supabase, realtimePublisher) {
|
|
44
44
|
this.supabase = supabase;
|
|
45
|
+
this.realtimePublisher = realtimePublisher;
|
|
46
|
+
}
|
|
47
|
+
setRealtimePublisher(publisher) {
|
|
48
|
+
this.realtimePublisher = publisher;
|
|
45
49
|
}
|
|
46
50
|
// Login endpoint
|
|
47
51
|
async login(req, res) {
|
|
@@ -115,7 +119,7 @@ class AuthController {
|
|
|
115
119
|
res.status(401).json({ error: 'Not authenticated' });
|
|
116
120
|
return;
|
|
117
121
|
}
|
|
118
|
-
|
|
122
|
+
const responsePayload = {
|
|
119
123
|
user: {
|
|
120
124
|
uuid: req.user.uuid,
|
|
121
125
|
email: req.user.email,
|
|
@@ -127,7 +131,8 @@ class AuthController {
|
|
|
127
131
|
company_name: req.profile.companyName,
|
|
128
132
|
role: req.profile.role
|
|
129
133
|
}
|
|
130
|
-
}
|
|
134
|
+
};
|
|
135
|
+
res.json(responsePayload);
|
|
131
136
|
}
|
|
132
137
|
catch (error) {
|
|
133
138
|
logger_1.default.error('Get me error:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthController.js","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAmD;AACnD,8DAAsC;
|
|
1
|
+
{"version":3,"file":"AuthController.js","sourceRoot":"","sources":["../../../src/controllers/AuthController.ts"],"names":[],"mappings":"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"}
|