@vezlo/assistant-server 1.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/Dockerfile +64 -0
  2. package/LICENSE +661 -0
  3. package/README.md +432 -0
  4. package/bin/vezlo-server.js +36 -0
  5. package/database-schema.sql +154 -0
  6. package/dist/knexfile.d.ts +6 -0
  7. package/dist/knexfile.d.ts.map +1 -0
  8. package/dist/knexfile.js +85 -0
  9. package/dist/knexfile.js.map +1 -0
  10. package/dist/src/config/database.d.ts +4 -0
  11. package/dist/src/config/database.d.ts.map +1 -0
  12. package/dist/src/config/database.js +30 -0
  13. package/dist/src/config/database.js.map +1 -0
  14. package/dist/src/config/global.d.ts +65 -0
  15. package/dist/src/config/global.d.ts.map +1 -0
  16. package/dist/src/config/global.js +113 -0
  17. package/dist/src/config/global.js.map +1 -0
  18. package/dist/src/config/knex.d.ts +9 -0
  19. package/dist/src/config/knex.d.ts.map +1 -0
  20. package/dist/src/config/knex.js +67 -0
  21. package/dist/src/config/knex.js.map +1 -0
  22. package/dist/src/config/logger.d.ts +4 -0
  23. package/dist/src/config/logger.d.ts.map +1 -0
  24. package/dist/src/config/logger.js +30 -0
  25. package/dist/src/config/logger.js.map +1 -0
  26. package/dist/src/config/swagger.d.ts +18 -0
  27. package/dist/src/config/swagger.d.ts.map +1 -0
  28. package/dist/src/config/swagger.js +230 -0
  29. package/dist/src/config/swagger.js.map +1 -0
  30. package/dist/src/controllers/ChatController.d.ts +16 -0
  31. package/dist/src/controllers/ChatController.d.ts.map +1 -0
  32. package/dist/src/controllers/ChatController.js +281 -0
  33. package/dist/src/controllers/ChatController.js.map +1 -0
  34. package/dist/src/controllers/KnowledgeController.d.ts +13 -0
  35. package/dist/src/controllers/KnowledgeController.d.ts.map +1 -0
  36. package/dist/src/controllers/KnowledgeController.js +210 -0
  37. package/dist/src/controllers/KnowledgeController.js.map +1 -0
  38. package/dist/src/middleware/errorHandler.d.ts +63 -0
  39. package/dist/src/middleware/errorHandler.d.ts.map +1 -0
  40. package/dist/src/middleware/errorHandler.js +226 -0
  41. package/dist/src/middleware/errorHandler.js.map +1 -0
  42. package/dist/src/migrations/001_initial_schema.d.ts +4 -0
  43. package/dist/src/migrations/001_initial_schema.d.ts.map +1 -0
  44. package/dist/src/migrations/001_initial_schema.js +144 -0
  45. package/dist/src/migrations/001_initial_schema.js.map +1 -0
  46. package/dist/src/schemas/ConversationSchemas.d.ts +132 -0
  47. package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -0
  48. package/dist/src/schemas/ConversationSchemas.js +71 -0
  49. package/dist/src/schemas/ConversationSchemas.js.map +1 -0
  50. package/dist/src/schemas/FeedbackSchemas.d.ts +222 -0
  51. package/dist/src/schemas/FeedbackSchemas.d.ts.map +1 -0
  52. package/dist/src/schemas/FeedbackSchemas.js +116 -0
  53. package/dist/src/schemas/FeedbackSchemas.js.map +1 -0
  54. package/dist/src/schemas/KnowledgeSchemas.d.ts +266 -0
  55. package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -0
  56. package/dist/src/schemas/KnowledgeSchemas.js +115 -0
  57. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -0
  58. package/dist/src/schemas/MessageSchemas.d.ts +145 -0
  59. package/dist/src/schemas/MessageSchemas.d.ts.map +1 -0
  60. package/dist/src/schemas/MessageSchemas.js +79 -0
  61. package/dist/src/schemas/MessageSchemas.js.map +1 -0
  62. package/dist/src/schemas/index.d.ts +752 -0
  63. package/dist/src/schemas/index.d.ts.map +1 -0
  64. package/dist/src/schemas/index.js +31 -0
  65. package/dist/src/schemas/index.js.map +1 -0
  66. package/dist/src/server.d.ts +2 -0
  67. package/dist/src/server.d.ts.map +1 -0
  68. package/dist/src/server.js +609 -0
  69. package/dist/src/server.js.map +1 -0
  70. package/dist/src/services/AIService.d.ts +17 -0
  71. package/dist/src/services/AIService.d.ts.map +1 -0
  72. package/dist/src/services/AIService.js +174 -0
  73. package/dist/src/services/AIService.js.map +1 -0
  74. package/dist/src/services/ChatManager.d.ts +18 -0
  75. package/dist/src/services/ChatManager.d.ts.map +1 -0
  76. package/dist/src/services/ChatManager.js +174 -0
  77. package/dist/src/services/ChatManager.js.map +1 -0
  78. package/dist/src/services/KnowledgeBaseService.d.ts +72 -0
  79. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -0
  80. package/dist/src/services/KnowledgeBaseService.js +442 -0
  81. package/dist/src/services/KnowledgeBaseService.js.map +1 -0
  82. package/dist/src/storage/ConversationRepository.d.ts +15 -0
  83. package/dist/src/storage/ConversationRepository.d.ts.map +1 -0
  84. package/dist/src/storage/ConversationRepository.js +123 -0
  85. package/dist/src/storage/ConversationRepository.js.map +1 -0
  86. package/dist/src/storage/FeedbackRepository.d.ts +15 -0
  87. package/dist/src/storage/FeedbackRepository.d.ts.map +1 -0
  88. package/dist/src/storage/FeedbackRepository.js +141 -0
  89. package/dist/src/storage/FeedbackRepository.js.map +1 -0
  90. package/dist/src/storage/MessageRepository.d.ts +13 -0
  91. package/dist/src/storage/MessageRepository.d.ts.map +1 -0
  92. package/dist/src/storage/MessageRepository.js +165 -0
  93. package/dist/src/storage/MessageRepository.js.map +1 -0
  94. package/dist/src/storage/SupabaseStorage.d.ts +20 -0
  95. package/dist/src/storage/SupabaseStorage.d.ts.map +1 -0
  96. package/dist/src/storage/SupabaseStorage.js +347 -0
  97. package/dist/src/storage/SupabaseStorage.js.map +1 -0
  98. package/dist/src/storage/UnifiedStorage.d.ts +45 -0
  99. package/dist/src/storage/UnifiedStorage.d.ts.map +1 -0
  100. package/dist/src/storage/UnifiedStorage.js +94 -0
  101. package/dist/src/storage/UnifiedStorage.js.map +1 -0
  102. package/dist/src/storage/index.d.ts +11 -0
  103. package/dist/src/storage/index.d.ts.map +1 -0
  104. package/dist/src/storage/index.js +21 -0
  105. package/dist/src/storage/index.js.map +1 -0
  106. package/dist/src/types/index.d.ts +163 -0
  107. package/dist/src/types/index.d.ts.map +1 -0
  108. package/dist/src/types/index.js +3 -0
  109. package/dist/src/types/index.js.map +1 -0
  110. package/docker-compose.yml +32 -0
  111. package/env.example +46 -0
  112. package/knexfile.ts +86 -0
  113. package/package.json +92 -0
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SupabaseStorage = void 0;
4
+ class SupabaseStorage {
5
+ constructor(supabase, tablePrefix = '') {
6
+ this.supabase = supabase;
7
+ this.tablePrefix = tablePrefix;
8
+ }
9
+ getTableName(table) {
10
+ return this.tablePrefix ? `${this.tablePrefix}_${table}` : table;
11
+ }
12
+ async saveConversation(conversation) {
13
+ const tableName = this.getTableName('conversations');
14
+ if (conversation.id) {
15
+ const { data, error } = await this.supabase
16
+ .from(tableName)
17
+ .update({
18
+ title: conversation.title,
19
+ message_count: conversation.messageCount,
20
+ updated_at: conversation.updatedAt || new Date().toISOString()
21
+ })
22
+ .eq('uuid', conversation.id)
23
+ .select()
24
+ .single();
25
+ if (error)
26
+ throw new Error(`Failed to update conversation: ${error.message}`);
27
+ return this.rowToConversation(data);
28
+ }
29
+ else {
30
+ // Convert string IDs to integers (dummy IDs for now)
31
+ const companyId = conversation.organizationId ? parseInt(conversation.organizationId) || 1 : 1;
32
+ const creatorId = parseInt(conversation.userId) || 1;
33
+ const { data, error } = await this.supabase
34
+ .from(tableName)
35
+ .insert({
36
+ company_id: companyId,
37
+ creator_id: creatorId,
38
+ title: conversation.title,
39
+ message_count: conversation.messageCount,
40
+ created_at: conversation.createdAt.toISOString(),
41
+ updated_at: conversation.updatedAt.toISOString()
42
+ })
43
+ .select()
44
+ .single();
45
+ if (error)
46
+ throw new Error(`Failed to create conversation: ${error.message}`);
47
+ return this.rowToConversation(data);
48
+ }
49
+ }
50
+ async getConversation(conversationId) {
51
+ const tableName = this.getTableName('conversations');
52
+ const { data, error } = await this.supabase
53
+ .from(tableName)
54
+ .select('*')
55
+ .eq('uuid', conversationId)
56
+ .is('deleted_at', null)
57
+ .single();
58
+ if (error) {
59
+ if (error.code === 'PGRST116')
60
+ return null;
61
+ throw new Error(`Failed to get conversation: ${error.message}`);
62
+ }
63
+ return this.rowToConversation(data);
64
+ }
65
+ async updateConversation(conversationId, updates) {
66
+ const tableName = this.getTableName('conversations');
67
+ const updateData = {
68
+ updated_at: new Date().toISOString()
69
+ };
70
+ if (updates.title !== undefined)
71
+ updateData.title = updates.title;
72
+ if (updates.messageCount !== undefined)
73
+ updateData.message_count = updates.messageCount;
74
+ const { data, error } = await this.supabase
75
+ .from(tableName)
76
+ .update(updateData)
77
+ .eq('uuid', conversationId)
78
+ .select()
79
+ .single();
80
+ if (error)
81
+ throw new Error(`Failed to update conversation: ${error.message}`);
82
+ return this.rowToConversation(data);
83
+ }
84
+ async deleteConversation(conversationId) {
85
+ const tableName = this.getTableName('conversations');
86
+ const { error } = await this.supabase
87
+ .from(tableName)
88
+ .update({ deleted_at: new Date().toISOString() })
89
+ .eq('uuid', conversationId);
90
+ if (error)
91
+ throw new Error(`Failed to delete conversation: ${error.message}`);
92
+ return true;
93
+ }
94
+ async getUserConversations(userId, organizationId) {
95
+ const tableName = this.getTableName('conversations');
96
+ // Convert string IDs to integers (dummy IDs for now)
97
+ const creatorId = parseInt(userId) || 1;
98
+ const companyId = organizationId ? parseInt(organizationId) || 1 : null;
99
+ let query = this.supabase
100
+ .from(tableName)
101
+ .select('*')
102
+ .eq('creator_id', creatorId)
103
+ .is('deleted_at', null)
104
+ .order('updated_at', { ascending: false });
105
+ if (companyId) {
106
+ query = query.eq('company_id', companyId);
107
+ }
108
+ const { data, error } = await query;
109
+ if (error)
110
+ throw new Error(`Failed to get user conversations: ${error.message}`);
111
+ return data.map(row => this.rowToConversation(row));
112
+ }
113
+ async saveMessage(message) {
114
+ const tableName = this.getTableName('messages');
115
+ if (message.id) {
116
+ const { data, error } = await this.supabase
117
+ .from(tableName)
118
+ .update({
119
+ content: message.content,
120
+ metadata: { tool_calls: message.toolCalls, tool_results: message.toolResults },
121
+ updated_at: new Date().toISOString()
122
+ })
123
+ .eq('uuid', message.id)
124
+ .select()
125
+ .single();
126
+ if (error)
127
+ throw new Error(`Failed to update message: ${error.message}`);
128
+ const metadata = data.metadata || {};
129
+ return {
130
+ id: data.uuid,
131
+ conversationId: message.conversationId,
132
+ threadId: message.threadId,
133
+ role: data.type,
134
+ content: data.content,
135
+ toolCalls: metadata.tool_calls,
136
+ toolResults: metadata.tool_results,
137
+ parentMessageId: data.parent_message_id,
138
+ createdAt: new Date(data.created_at),
139
+ updatedAt: data.updated_at ? new Date(data.updated_at) : undefined
140
+ };
141
+ }
142
+ else {
143
+ // Get conversation internal ID from UUID
144
+ const conversationQuery = await this.supabase
145
+ .from('conversations')
146
+ .select('id')
147
+ .eq('uuid', message.conversationId)
148
+ .single();
149
+ if (conversationQuery.error)
150
+ throw new Error(`Failed to find conversation: ${conversationQuery.error.message}`);
151
+ // Get parent message internal ID if parentMessageId is provided
152
+ let parentMessageInternalId = null;
153
+ if (message.parentMessageId) {
154
+ const parentMessageQuery = await this.supabase
155
+ .from('messages')
156
+ .select('id')
157
+ .eq('uuid', message.parentMessageId)
158
+ .single();
159
+ if (parentMessageQuery.data && !parentMessageQuery.error) {
160
+ parentMessageInternalId = parentMessageQuery.data.id;
161
+ }
162
+ }
163
+ const { data, error } = await this.supabase
164
+ .from(tableName)
165
+ .insert({
166
+ conversation_id: conversationQuery.data.id,
167
+ parent_message_id: parentMessageInternalId,
168
+ type: message.role,
169
+ content: message.content,
170
+ metadata: { tool_calls: message.toolCalls, tool_results: message.toolResults },
171
+ created_at: message.createdAt.toISOString()
172
+ })
173
+ .select()
174
+ .single();
175
+ if (error)
176
+ throw new Error(`Failed to create message: ${error.message}`);
177
+ const metadata = data.metadata || {};
178
+ return {
179
+ id: data.uuid,
180
+ conversationId: message.conversationId,
181
+ threadId: message.threadId,
182
+ role: data.type,
183
+ content: data.content,
184
+ toolCalls: metadata.tool_calls,
185
+ toolResults: metadata.tool_results,
186
+ parentMessageId: data.parent_message_id,
187
+ createdAt: new Date(data.created_at),
188
+ updatedAt: data.updated_at ? new Date(data.updated_at) : undefined
189
+ };
190
+ }
191
+ }
192
+ async getMessages(conversationId, limit = 50, offset = 0) {
193
+ // Join messages with conversations to get conversation UUID
194
+ const { data, error } = await this.supabase
195
+ .from('messages')
196
+ .select(`
197
+ uuid,
198
+ type,
199
+ content,
200
+ status,
201
+ metadata,
202
+ parent_message_id,
203
+ created_at,
204
+ updated_at,
205
+ conversations!inner(uuid)
206
+ `)
207
+ .eq('conversations.uuid', conversationId)
208
+ .order('created_at', { ascending: true })
209
+ .range(offset, offset + limit - 1);
210
+ if (error)
211
+ throw new Error(`Failed to get messages: ${error.message}`);
212
+ return data.map((row) => ({
213
+ id: row.uuid,
214
+ conversationId: row.conversations.uuid,
215
+ threadId: row.conversations.uuid,
216
+ role: row.type,
217
+ content: row.content,
218
+ toolCalls: row.metadata?.tool_calls,
219
+ toolResults: row.metadata?.tool_results,
220
+ parentMessageId: row.parent_message_id,
221
+ createdAt: new Date(row.created_at),
222
+ updatedAt: row.updated_at ? new Date(row.updated_at) : undefined
223
+ }));
224
+ }
225
+ async deleteMessage(messageId) {
226
+ const tableName = this.getTableName('messages');
227
+ const { error } = await this.supabase
228
+ .from(tableName)
229
+ .delete()
230
+ .eq('uuid', messageId);
231
+ if (error)
232
+ throw new Error(`Failed to delete message: ${error.message}`);
233
+ return true;
234
+ }
235
+ async saveFeedback(feedback) {
236
+ const tableName = this.getTableName('message_feedback');
237
+ if (feedback.id) {
238
+ const { data, error } = await this.supabase
239
+ .from(tableName)
240
+ .update({
241
+ rating: feedback.rating,
242
+ category: feedback.category,
243
+ comment: feedback.comment,
244
+ suggested_improvement: feedback.suggestedImprovement
245
+ })
246
+ .eq('uuid', feedback.id)
247
+ .select()
248
+ .single();
249
+ if (error)
250
+ throw new Error(`Failed to update feedback: ${error.message}`);
251
+ return {
252
+ id: data.uuid,
253
+ messageId: feedback.messageId,
254
+ conversationId: feedback.conversationId,
255
+ userId: data.user_id.toString(),
256
+ rating: data.rating,
257
+ category: data.category,
258
+ comment: data.comment,
259
+ suggestedImprovement: data.suggested_improvement,
260
+ createdAt: new Date(data.created_at)
261
+ };
262
+ }
263
+ else {
264
+ // Get message internal ID from UUID
265
+ const messageQuery = await this.supabase
266
+ .from('messages')
267
+ .select('id')
268
+ .eq('uuid', feedback.messageId)
269
+ .single();
270
+ if (messageQuery.error)
271
+ throw new Error(`Failed to find message: ${messageQuery.error.message}`);
272
+ // Convert user ID to integer (dummy ID for now)
273
+ const userId = parseInt(feedback.userId) || 1;
274
+ const { data, error } = await this.supabase
275
+ .from(tableName)
276
+ .insert({
277
+ message_id: messageQuery.data.id,
278
+ user_id: userId,
279
+ rating: feedback.rating,
280
+ category: feedback.category,
281
+ comment: feedback.comment,
282
+ suggested_improvement: feedback.suggestedImprovement,
283
+ created_at: feedback.createdAt.toISOString()
284
+ })
285
+ .select()
286
+ .single();
287
+ if (error)
288
+ throw new Error(`Failed to create feedback: ${error.message}`);
289
+ return {
290
+ id: data.uuid,
291
+ messageId: feedback.messageId,
292
+ conversationId: feedback.conversationId,
293
+ userId: data.user_id.toString(),
294
+ rating: data.rating,
295
+ category: data.category,
296
+ comment: data.comment,
297
+ suggestedImprovement: data.suggested_improvement,
298
+ createdAt: new Date(data.created_at)
299
+ };
300
+ }
301
+ }
302
+ async getFeedback(messageId) {
303
+ // Join feedback with messages to get message UUID
304
+ const { data, error } = await this.supabase
305
+ .from('message_feedback')
306
+ .select(`
307
+ uuid,
308
+ user_id,
309
+ rating,
310
+ category,
311
+ comment,
312
+ suggested_improvement,
313
+ created_at,
314
+ messages!inner(uuid)
315
+ `)
316
+ .eq('messages.uuid', messageId)
317
+ .order('created_at', { ascending: false });
318
+ if (error)
319
+ throw new Error(`Failed to get feedback: ${error.message}`);
320
+ return data.map((row) => ({
321
+ id: row.uuid,
322
+ messageId: row.messages.uuid,
323
+ conversationId: '', // Will be populated by controller if needed
324
+ userId: row.user_id.toString(),
325
+ rating: row.rating,
326
+ category: row.category,
327
+ comment: row.comment,
328
+ suggestedImprovement: row.suggested_improvement,
329
+ createdAt: new Date(row.created_at)
330
+ }));
331
+ }
332
+ rowToConversation(row) {
333
+ return {
334
+ id: row.uuid,
335
+ threadId: row.uuid, // Use UUID as thread ID
336
+ userId: row.creator_id.toString(),
337
+ organizationId: row.company_id ? row.company_id.toString() : undefined,
338
+ title: row.title,
339
+ messageCount: row.message_count,
340
+ createdAt: new Date(row.created_at),
341
+ updatedAt: new Date(row.updated_at),
342
+ deletedAt: row.deleted_at ? new Date(row.deleted_at) : undefined
343
+ };
344
+ }
345
+ }
346
+ exports.SupabaseStorage = SupabaseStorage;
347
+ //# sourceMappingURL=SupabaseStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseStorage.js","sourceRoot":"","sources":["../../../src/storage/SupabaseStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ import { ChatStorage, ChatConversation, StoredChatMessage, Feedback } from '../types';
3
+ import { ConversationRepository } from './ConversationRepository';
4
+ import { MessageRepository } from './MessageRepository';
5
+ import { FeedbackRepository } from './FeedbackRepository';
6
+ /**
7
+ * Unified Storage Class
8
+ * Combines all repositories and implements the ChatStorage interface
9
+ * This maintains backward compatibility while providing better organization
10
+ */
11
+ export declare class UnifiedStorage implements ChatStorage {
12
+ conversations: ConversationRepository;
13
+ messages: MessageRepository;
14
+ feedback: FeedbackRepository;
15
+ constructor(supabase: SupabaseClient, tablePrefix?: string);
16
+ saveConversation(conversation: ChatConversation): Promise<ChatConversation>;
17
+ getConversation(conversationId: string): Promise<ChatConversation | null>;
18
+ updateConversation(conversationId: string, updates: Partial<ChatConversation>): Promise<ChatConversation>;
19
+ deleteConversation(conversationId: string): Promise<boolean>;
20
+ getUserConversations(userId: string, organizationId?: string): Promise<ChatConversation[]>;
21
+ saveMessage(message: StoredChatMessage): Promise<StoredChatMessage>;
22
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<StoredChatMessage[]>;
23
+ deleteMessage(messageId: string): Promise<boolean>;
24
+ getMessageById(messageId: string): Promise<StoredChatMessage | null>;
25
+ saveFeedback(feedback: Feedback): Promise<Feedback>;
26
+ getFeedback(messageId: string): Promise<Feedback[]>;
27
+ getFeedbackById(feedbackId: string): Promise<Feedback | null>;
28
+ getUserFeedback(userId: string, limit?: number, offset?: number): Promise<Feedback[]>;
29
+ deleteFeedback(feedbackId: string): Promise<boolean>;
30
+ /**
31
+ * Get conversation with all messages
32
+ */
33
+ getConversationWithMessages(conversationId: string): Promise<{
34
+ conversation: ChatConversation | null;
35
+ messages: StoredChatMessage[];
36
+ }>;
37
+ /**
38
+ * Get message with its feedback
39
+ */
40
+ getMessageWithFeedback(messageId: string): Promise<{
41
+ message: StoredChatMessage | null;
42
+ feedback: Feedback[];
43
+ }>;
44
+ }
45
+ //# sourceMappingURL=UnifiedStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnifiedStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/UnifiedStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,cAAe,YAAW,WAAW;IACzC,aAAa,EAAE,sBAAsB,CAAC;IACtC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;gBAGlC,QAAQ,EAAE,cAAc,EACxB,WAAW,GAAE,MAAW;IAWpB,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3E,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAIzE,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIzG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ1F,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAInE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIzF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAQpE,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAInD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI7D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI5E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1D;;OAEG;IACG,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QACjE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;QACtC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;KAC/B,CAAC;IASF;;OAEG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACvD,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAClC,QAAQ,EAAE,QAAQ,EAAE,CAAC;KACtB,CAAC;CAQH"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnifiedStorage = void 0;
4
+ const ConversationRepository_1 = require("./ConversationRepository");
5
+ const MessageRepository_1 = require("./MessageRepository");
6
+ const FeedbackRepository_1 = require("./FeedbackRepository");
7
+ /**
8
+ * Unified Storage Class
9
+ * Combines all repositories and implements the ChatStorage interface
10
+ * This maintains backward compatibility while providing better organization
11
+ */
12
+ class UnifiedStorage {
13
+ constructor(supabase, tablePrefix = '') {
14
+ this.conversations = new ConversationRepository_1.ConversationRepository(supabase, tablePrefix);
15
+ this.messages = new MessageRepository_1.MessageRepository(supabase, tablePrefix);
16
+ this.feedback = new FeedbackRepository_1.FeedbackRepository(supabase, tablePrefix);
17
+ }
18
+ // ============================================================================
19
+ // CONVERSATION METHODS (Delegate to ConversationRepository)
20
+ // ============================================================================
21
+ async saveConversation(conversation) {
22
+ return this.conversations.saveConversation(conversation);
23
+ }
24
+ async getConversation(conversationId) {
25
+ return this.conversations.getConversation(conversationId);
26
+ }
27
+ async updateConversation(conversationId, updates) {
28
+ return this.conversations.updateConversation(conversationId, updates);
29
+ }
30
+ async deleteConversation(conversationId) {
31
+ return this.conversations.deleteConversation(conversationId);
32
+ }
33
+ async getUserConversations(userId, organizationId) {
34
+ return this.conversations.getUserConversations(userId, organizationId);
35
+ }
36
+ // ============================================================================
37
+ // MESSAGE METHODS (Delegate to MessageRepository)
38
+ // ============================================================================
39
+ async saveMessage(message) {
40
+ return this.messages.saveMessage(message);
41
+ }
42
+ async getMessages(conversationId, limit = 50, offset = 0) {
43
+ return this.messages.getMessages(conversationId, limit, offset);
44
+ }
45
+ async deleteMessage(messageId) {
46
+ return this.messages.deleteMessage(messageId);
47
+ }
48
+ async getMessageById(messageId) {
49
+ return this.messages.getMessageById(messageId);
50
+ }
51
+ // ============================================================================
52
+ // FEEDBACK METHODS (Delegate to FeedbackRepository)
53
+ // ============================================================================
54
+ async saveFeedback(feedback) {
55
+ return this.feedback.saveFeedback(feedback);
56
+ }
57
+ async getFeedback(messageId) {
58
+ return this.feedback.getFeedback(messageId);
59
+ }
60
+ async getFeedbackById(feedbackId) {
61
+ return this.feedback.getFeedbackById(feedbackId);
62
+ }
63
+ async getUserFeedback(userId, limit = 50, offset = 0) {
64
+ return this.feedback.getUserFeedback(userId, limit, offset);
65
+ }
66
+ async deleteFeedback(feedbackId) {
67
+ return this.feedback.deleteFeedback(feedbackId);
68
+ }
69
+ // ============================================================================
70
+ // ADDITIONAL CONVENIENCE METHODS
71
+ // ============================================================================
72
+ /**
73
+ * Get conversation with all messages
74
+ */
75
+ async getConversationWithMessages(conversationId) {
76
+ const [conversation, messages] = await Promise.all([
77
+ this.getConversation(conversationId),
78
+ this.getMessages(conversationId)
79
+ ]);
80
+ return { conversation, messages };
81
+ }
82
+ /**
83
+ * Get message with its feedback
84
+ */
85
+ async getMessageWithFeedback(messageId) {
86
+ const [message, feedbackList] = await Promise.all([
87
+ this.getMessageById(messageId),
88
+ this.getFeedback(messageId)
89
+ ]);
90
+ return { message, feedback: feedbackList };
91
+ }
92
+ }
93
+ exports.UnifiedStorage = UnifiedStorage;
94
+ //# sourceMappingURL=UnifiedStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnifiedStorage.js","sourceRoot":"","sources":["../../../src/storage/UnifiedStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Storage Layer Exports
3
+ * Organized repository pattern with separate concerns
4
+ */
5
+ export { ConversationRepository } from './ConversationRepository';
6
+ export { MessageRepository } from './MessageRepository';
7
+ export { FeedbackRepository } from './FeedbackRepository';
8
+ export { UnifiedStorage } from './UnifiedStorage';
9
+ export { SupabaseStorage } from './SupabaseStorage';
10
+ export type { ChatStorage, ChatConversation, StoredChatMessage, Feedback } from '../types';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Storage Layer Exports
4
+ * Organized repository pattern with separate concerns
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SupabaseStorage = exports.UnifiedStorage = exports.FeedbackRepository = exports.MessageRepository = exports.ConversationRepository = void 0;
8
+ // Individual repositories for specific entities
9
+ var ConversationRepository_1 = require("./ConversationRepository");
10
+ Object.defineProperty(exports, "ConversationRepository", { enumerable: true, get: function () { return ConversationRepository_1.ConversationRepository; } });
11
+ var MessageRepository_1 = require("./MessageRepository");
12
+ Object.defineProperty(exports, "MessageRepository", { enumerable: true, get: function () { return MessageRepository_1.MessageRepository; } });
13
+ var FeedbackRepository_1 = require("./FeedbackRepository");
14
+ Object.defineProperty(exports, "FeedbackRepository", { enumerable: true, get: function () { return FeedbackRepository_1.FeedbackRepository; } });
15
+ // Unified storage that combines all repositories
16
+ var UnifiedStorage_1 = require("./UnifiedStorage");
17
+ Object.defineProperty(exports, "UnifiedStorage", { enumerable: true, get: function () { return UnifiedStorage_1.UnifiedStorage; } });
18
+ // Legacy export for backward compatibility
19
+ var SupabaseStorage_1 = require("./SupabaseStorage");
20
+ Object.defineProperty(exports, "SupabaseStorage", { enumerable: true, get: function () { return SupabaseStorage_1.SupabaseStorage; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,gDAAgD;AAChD,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAE3B,iDAAiD;AACjD,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,2CAA2C;AAC3C,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"}