@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,210 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KnowledgeController = void 0;
7
+ const logger_1 = __importDefault(require("../config/logger"));
8
+ class KnowledgeController {
9
+ constructor(knowledgeBase) {
10
+ this.knowledgeBase = knowledgeBase;
11
+ }
12
+ async createItem(req, res) {
13
+ try {
14
+ const { parent_uuid, company_uuid, title, description, type, content, file_url, file_size, file_type, metadata, created_by_uuid } = req.body;
15
+ if (!title || !type || !created_by_uuid) {
16
+ res.status(400).json({ error: 'title, type, and created_by_uuid are required' });
17
+ return;
18
+ }
19
+ // Validate type
20
+ const validTypes = ['folder', 'document', 'file', 'url', 'url_directory'];
21
+ if (!validTypes.includes(type)) {
22
+ res.status(400).json({ error: `type must be one of: ${validTypes.join(', ')}` });
23
+ return;
24
+ }
25
+ // Validate required fields based on type
26
+ if ((type === 'document') && !content) {
27
+ res.status(400).json({ error: 'content is required for document type' });
28
+ return;
29
+ }
30
+ if ((type === 'file' || type === 'url') && !file_url) {
31
+ res.status(400).json({ error: 'file_url is required for file and url types' });
32
+ return;
33
+ }
34
+ const itemId = await this.knowledgeBase.createItem({
35
+ parent_id: parent_uuid,
36
+ company_id: company_uuid || 1,
37
+ title,
38
+ description,
39
+ type,
40
+ content,
41
+ file_url,
42
+ file_size,
43
+ file_type,
44
+ metadata,
45
+ created_by: parseInt(created_by_uuid) || 1
46
+ });
47
+ res.json({
48
+ success: true,
49
+ uuid: itemId
50
+ });
51
+ }
52
+ catch (error) {
53
+ logger_1.default.error('Create knowledge item error:', error);
54
+ res.status(500).json({
55
+ error: 'Failed to create knowledge item',
56
+ message: error instanceof Error ? error.message : 'Unknown error'
57
+ });
58
+ }
59
+ }
60
+ async getItem(req, res) {
61
+ try {
62
+ const { uuid } = req.params;
63
+ const item = await this.knowledgeBase.getItem(uuid);
64
+ if (!item) {
65
+ res.status(404).json({ error: 'Knowledge item not found' });
66
+ return;
67
+ }
68
+ res.json({
69
+ uuid: item.id,
70
+ parent_uuid: item.parent_id,
71
+ company_uuid: item.company_id,
72
+ title: item.title,
73
+ description: item.description,
74
+ type: item.type,
75
+ content: item.content,
76
+ file_url: item.file_url,
77
+ file_size: item.file_size,
78
+ file_type: item.file_type,
79
+ metadata: item.metadata,
80
+ created_by: item.created_by
81
+ });
82
+ }
83
+ catch (error) {
84
+ logger_1.default.error('Get knowledge item error:', error);
85
+ res.status(500).json({
86
+ error: 'Failed to get knowledge item',
87
+ message: error instanceof Error ? error.message : 'Unknown error'
88
+ });
89
+ }
90
+ }
91
+ async listItems(req, res) {
92
+ try {
93
+ const { parent_uuid, company_uuid, type, limit = '50', offset = '0' } = req.query;
94
+ const options = {
95
+ parent_id: parent_uuid,
96
+ company_id: company_uuid ? parseInt(company_uuid) : undefined,
97
+ type: type,
98
+ limit: parseInt(limit),
99
+ offset: parseInt(offset)
100
+ };
101
+ const result = await this.knowledgeBase.listItems(options);
102
+ res.json({
103
+ items: result.items.map(item => ({
104
+ uuid: item.id,
105
+ parent_uuid: item.parent_id,
106
+ company_uuid: item.company_id,
107
+ title: item.title,
108
+ description: item.description,
109
+ type: item.type,
110
+ file_url: item.file_url,
111
+ file_size: item.file_size,
112
+ file_type: item.file_type,
113
+ metadata: item.metadata,
114
+ created_by: item.created_by
115
+ })),
116
+ total: result.total,
117
+ limit: options.limit,
118
+ offset: options.offset
119
+ });
120
+ }
121
+ catch (error) {
122
+ logger_1.default.error('List knowledge items error:', error);
123
+ res.status(500).json({
124
+ error: 'Failed to list knowledge items',
125
+ message: error instanceof Error ? error.message : 'Unknown error'
126
+ });
127
+ }
128
+ }
129
+ async updateItem(req, res) {
130
+ try {
131
+ const { uuid } = req.params;
132
+ const { title, description, content, file_url, file_size, file_type, metadata } = req.body;
133
+ const success = await this.knowledgeBase.updateItem(uuid, {
134
+ title,
135
+ description,
136
+ content,
137
+ file_url,
138
+ file_size,
139
+ file_type,
140
+ metadata
141
+ });
142
+ if (!success) {
143
+ res.status(404).json({ error: 'Knowledge item not found or could not be updated' });
144
+ return;
145
+ }
146
+ res.json({ success: true });
147
+ }
148
+ catch (error) {
149
+ logger_1.default.error('Update knowledge item error:', error);
150
+ res.status(500).json({
151
+ error: 'Failed to update knowledge item',
152
+ message: error instanceof Error ? error.message : 'Unknown error'
153
+ });
154
+ }
155
+ }
156
+ async deleteItem(req, res) {
157
+ try {
158
+ const { uuid } = req.params;
159
+ const success = await this.knowledgeBase.deleteItem(uuid);
160
+ if (!success) {
161
+ res.status(404).json({ error: 'Knowledge item not found or could not be deleted' });
162
+ return;
163
+ }
164
+ res.json({ success: true });
165
+ }
166
+ catch (error) {
167
+ logger_1.default.error('Delete knowledge item error:', error);
168
+ res.status(500).json({
169
+ error: 'Failed to delete knowledge item',
170
+ message: error instanceof Error ? error.message : 'Unknown error'
171
+ });
172
+ }
173
+ }
174
+ async search(req, res) {
175
+ try {
176
+ const { query, limit = '5', threshold = '0.7', type = 'hybrid', company_uuid } = req.body;
177
+ if (!query) {
178
+ res.status(400).json({ error: 'query is required' });
179
+ return;
180
+ }
181
+ const results = await this.knowledgeBase.search(query, {
182
+ limit: parseInt(limit),
183
+ threshold: parseFloat(threshold),
184
+ type: type,
185
+ company_id: company_uuid ? parseInt(company_uuid) : undefined
186
+ });
187
+ res.json({
188
+ query,
189
+ results: results.map(result => ({
190
+ uuid: result.id,
191
+ title: result.title,
192
+ description: result.description,
193
+ content: result.content,
194
+ type: result.type,
195
+ score: result.score,
196
+ metadata: result.metadata
197
+ }))
198
+ });
199
+ }
200
+ catch (error) {
201
+ logger_1.default.error('Search knowledge items error:', error);
202
+ res.status(500).json({
203
+ error: 'Failed to search knowledge items',
204
+ message: error instanceof Error ? error.message : 'Unknown error'
205
+ });
206
+ }
207
+ }
208
+ }
209
+ exports.KnowledgeController = KnowledgeController;
210
+ //# sourceMappingURL=KnowledgeController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeController.js","sourceRoot":"","sources":["../../../src/controllers/KnowledgeController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export interface ApiError extends Error {
3
+ statusCode?: number;
4
+ code?: string;
5
+ details?: any;
6
+ }
7
+ export declare class ValidationError extends Error {
8
+ statusCode: number;
9
+ code: string;
10
+ details: any;
11
+ constructor(message: string, details?: any);
12
+ }
13
+ export declare class NotFoundError extends Error {
14
+ statusCode: number;
15
+ code: string;
16
+ constructor(resource?: string);
17
+ }
18
+ export declare class UnauthorizedError extends Error {
19
+ statusCode: number;
20
+ code: string;
21
+ constructor(message?: string);
22
+ }
23
+ export declare class ForbiddenError extends Error {
24
+ statusCode: number;
25
+ code: string;
26
+ constructor(message?: string);
27
+ }
28
+ export declare class ConflictError extends Error {
29
+ statusCode: number;
30
+ code: string;
31
+ constructor(message?: string);
32
+ }
33
+ export declare class RateLimitError extends Error {
34
+ statusCode: number;
35
+ code: string;
36
+ constructor(message?: string);
37
+ }
38
+ export declare class InternalServerError extends Error {
39
+ statusCode: number;
40
+ code: string;
41
+ constructor(message?: string);
42
+ }
43
+ export declare const errorHandler: (err: ApiError, req: Request, res: Response, next: NextFunction) => void;
44
+ export declare const notFoundHandler: (req: Request, res: Response) => void;
45
+ export declare const asyncHandler: (fn: Function) => (req: Request, res: Response, next: NextFunction) => void;
46
+ export declare const validateRequired: (body: any, requiredFields: string[]) => void;
47
+ export declare const validateTypes: (body: any, fieldTypes: Record<string, string>) => void;
48
+ declare const _default: {
49
+ errorHandler: (err: ApiError, req: Request, res: Response, next: NextFunction) => void;
50
+ notFoundHandler: (req: Request, res: Response) => void;
51
+ asyncHandler: (fn: Function) => (req: Request, res: Response, next: NextFunction) => void;
52
+ validateRequired: (body: any, requiredFields: string[]) => void;
53
+ validateTypes: (body: any, fieldTypes: Record<string, string>) => void;
54
+ ValidationError: typeof ValidationError;
55
+ NotFoundError: typeof NotFoundError;
56
+ UnauthorizedError: typeof UnauthorizedError;
57
+ ForbiddenError: typeof ForbiddenError;
58
+ ConflictError: typeof ConflictError;
59
+ RateLimitError: typeof RateLimitError;
60
+ InternalServerError: typeof InternalServerError;
61
+ };
62
+ export default _default;
63
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../src/middleware/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACjC,UAAU,SAAO;IACjB,IAAI,SAAsB;IAC1B,OAAO,EAAE,GAAG,CAAC;gBAER,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAK3C;AAED,qBAAa,aAAc,SAAQ,KAAK;IAC/B,UAAU,SAAO;IACjB,IAAI,SAAe;gBAEd,QAAQ,GAAE,MAAmB;CAI1C;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACnC,UAAU,SAAO;IACjB,IAAI,SAAkB;gBAEjB,OAAO,GAAE,MAA8B;CAIpD;AAED,qBAAa,cAAe,SAAQ,KAAK;IAChC,UAAU,SAAO;IACjB,IAAI,SAAe;gBAEd,OAAO,GAAE,MAA2B;CAIjD;AAED,qBAAa,aAAc,SAAQ,KAAK;IAC/B,UAAU,SAAO;IACjB,IAAI,SAAc;gBAEb,OAAO,GAAE,MAA4B;CAIlD;AAED,qBAAa,cAAe,SAAQ,KAAK;IAChC,UAAU,SAAO;IACjB,IAAI,SAAyB;gBAExB,OAAO,GAAE,MAA8B;CAIpD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,UAAU,SAAO;IACjB,IAAI,SAA2B;gBAE1B,OAAO,GAAE,MAAgC;CAItD;AAgBD,eAAO,MAAM,YAAY,GACvB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,IAwFF,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,IAa7D,CAAC;AAGF,eAAO,MAAM,YAAY,GAAI,IAAI,QAAQ,MAAM,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SAE7F,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAI,MAAM,GAAG,EAAE,gBAAgB,MAAM,EAAE,KAAG,IAYtE,CAAC;AAGF,eAAO,MAAM,aAAa,GAAI,MAAM,GAAG,EAAE,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,IAmB7E,CAAC;;wBAtJK,QAAQ,OACR,OAAO,OACP,QAAQ,QACP,YAAY,KACjB,IAAI;2BA2F8B,OAAO,OAAO,QAAQ,KAAG,IAAI;uBAgBjC,QAAQ,MAAM,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;6BAKvD,GAAG,kBAAkB,MAAM,EAAE,KAAG,IAAI;0BAevC,GAAG,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,IAAI;;;;;;;;;AAqBlF,wBAaE"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTypes = exports.validateRequired = exports.asyncHandler = exports.notFoundHandler = exports.errorHandler = exports.InternalServerError = exports.RateLimitError = exports.ConflictError = exports.ForbiddenError = exports.UnauthorizedError = exports.NotFoundError = exports.ValidationError = void 0;
4
+ const global_1 = require("../config/global");
5
+ class ValidationError extends Error {
6
+ constructor(message, details) {
7
+ super(message);
8
+ this.statusCode = 400;
9
+ this.code = 'VALIDATION_ERROR';
10
+ this.name = 'ValidationError';
11
+ this.details = details;
12
+ }
13
+ }
14
+ exports.ValidationError = ValidationError;
15
+ class NotFoundError extends Error {
16
+ constructor(resource = 'Resource') {
17
+ super(`${resource} not found`);
18
+ this.statusCode = 404;
19
+ this.code = 'NOT_FOUND';
20
+ this.name = 'NotFoundError';
21
+ }
22
+ }
23
+ exports.NotFoundError = NotFoundError;
24
+ class UnauthorizedError extends Error {
25
+ constructor(message = 'Unauthorized access') {
26
+ super(message);
27
+ this.statusCode = 401;
28
+ this.code = 'UNAUTHORIZED';
29
+ this.name = 'UnauthorizedError';
30
+ }
31
+ }
32
+ exports.UnauthorizedError = UnauthorizedError;
33
+ class ForbiddenError extends Error {
34
+ constructor(message = 'Access forbidden') {
35
+ super(message);
36
+ this.statusCode = 403;
37
+ this.code = 'FORBIDDEN';
38
+ this.name = 'ForbiddenError';
39
+ }
40
+ }
41
+ exports.ForbiddenError = ForbiddenError;
42
+ class ConflictError extends Error {
43
+ constructor(message = 'Resource conflict') {
44
+ super(message);
45
+ this.statusCode = 409;
46
+ this.code = 'CONFLICT';
47
+ this.name = 'ConflictError';
48
+ }
49
+ }
50
+ exports.ConflictError = ConflictError;
51
+ class RateLimitError extends Error {
52
+ constructor(message = 'Rate limit exceeded') {
53
+ super(message);
54
+ this.statusCode = 429;
55
+ this.code = 'RATE_LIMIT_EXCEEDED';
56
+ this.name = 'RateLimitError';
57
+ }
58
+ }
59
+ exports.RateLimitError = RateLimitError;
60
+ class InternalServerError extends Error {
61
+ constructor(message = 'Internal server error') {
62
+ super(message);
63
+ this.statusCode = 500;
64
+ this.code = 'INTERNAL_SERVER_ERROR';
65
+ this.name = 'InternalServerError';
66
+ }
67
+ }
68
+ exports.InternalServerError = InternalServerError;
69
+ // Main error handler middleware
70
+ const errorHandler = (err, req, res, next) => {
71
+ // Default values
72
+ let statusCode = err.statusCode || 500;
73
+ let code = err.code || 'INTERNAL_SERVER_ERROR';
74
+ let message = err.message || 'An unexpected error occurred';
75
+ let details = err.details;
76
+ // Handle specific error types
77
+ if (err.name === 'ValidationError' || err.message.includes('validation')) {
78
+ statusCode = 400;
79
+ code = 'VALIDATION_ERROR';
80
+ }
81
+ else if (err.message.includes('not found') || err.message.includes('does not exist')) {
82
+ statusCode = 404;
83
+ code = 'NOT_FOUND';
84
+ }
85
+ else if (err.message.includes('unauthorized') || err.message.includes('authentication')) {
86
+ statusCode = 401;
87
+ code = 'UNAUTHORIZED';
88
+ }
89
+ else if (err.message.includes('forbidden') || err.message.includes('permission')) {
90
+ statusCode = 403;
91
+ code = 'FORBIDDEN';
92
+ }
93
+ else if (err.message.includes('conflict') || err.message.includes('already exists')) {
94
+ statusCode = 409;
95
+ code = 'CONFLICT';
96
+ }
97
+ else if (err.message.includes('rate limit')) {
98
+ statusCode = 429;
99
+ code = 'RATE_LIMIT_EXCEEDED';
100
+ }
101
+ // Handle JSON parsing errors
102
+ if (err instanceof SyntaxError && 'body' in err) {
103
+ statusCode = 400;
104
+ code = 'INVALID_JSON';
105
+ message = 'Invalid JSON in request body';
106
+ }
107
+ // Handle database constraint errors
108
+ if (err.message.includes('duplicate key') || err.message.includes('unique constraint')) {
109
+ statusCode = 409;
110
+ code = 'DUPLICATE_RESOURCE';
111
+ message = 'Resource already exists';
112
+ }
113
+ // Handle foreign key constraint errors
114
+ if (err.message.includes('foreign key constraint') || err.message.includes('violates foreign key')) {
115
+ statusCode = 400;
116
+ code = 'INVALID_REFERENCE';
117
+ message = 'Referenced resource does not exist';
118
+ }
119
+ // Prepare error response
120
+ const errorResponse = {
121
+ error: {
122
+ code,
123
+ message,
124
+ timestamp: new Date().toISOString(),
125
+ path: req.path,
126
+ method: req.method
127
+ },
128
+ success: false
129
+ };
130
+ // Add details in development/detailed error mode
131
+ if (global_1.config.validation.returnDetailedErrors) {
132
+ errorResponse.error.details = details || {
133
+ stack: err.stack,
134
+ originalError: err.message
135
+ };
136
+ }
137
+ // Log error (but not for client errors like 400, 401, 403, 404)
138
+ if (statusCode >= 500 && global_1.config.logging.enableErrorLogging) {
139
+ console.error(`🚨 Error ${statusCode} - ${code}:`, {
140
+ message: err.message,
141
+ stack: err.stack,
142
+ path: req.path,
143
+ method: req.method,
144
+ body: req.body,
145
+ query: req.query,
146
+ params: req.params,
147
+ headers: req.headers,
148
+ timestamp: new Date().toISOString()
149
+ });
150
+ }
151
+ else if (global_1.config.logging.level === 'debug') {
152
+ console.log(`⚠️ Client Error ${statusCode} - ${code}: ${message}`);
153
+ }
154
+ // Send error response
155
+ res.status(statusCode).json(errorResponse);
156
+ };
157
+ exports.errorHandler = errorHandler;
158
+ // 404 handler for undefined routes
159
+ const notFoundHandler = (req, res) => {
160
+ const errorResponse = {
161
+ error: {
162
+ code: 'ENDPOINT_NOT_FOUND',
163
+ message: `Endpoint ${req.method} ${req.path} not found`,
164
+ timestamp: new Date().toISOString(),
165
+ path: req.path,
166
+ method: req.method
167
+ },
168
+ success: false
169
+ };
170
+ res.status(404).json(errorResponse);
171
+ };
172
+ exports.notFoundHandler = notFoundHandler;
173
+ // Async error wrapper
174
+ const asyncHandler = (fn) => (req, res, next) => {
175
+ Promise.resolve(fn(req, res, next)).catch(next);
176
+ };
177
+ exports.asyncHandler = asyncHandler;
178
+ // Request validation helper
179
+ const validateRequired = (body, requiredFields) => {
180
+ const missing = requiredFields.filter(field => {
181
+ const value = body[field];
182
+ return value === undefined || value === null || value === '';
183
+ });
184
+ if (missing.length > 0) {
185
+ throw new ValidationError(`Missing required fields: ${missing.join(', ')}`, {
186
+ missingFields: missing,
187
+ providedFields: Object.keys(body)
188
+ });
189
+ }
190
+ };
191
+ exports.validateRequired = validateRequired;
192
+ // Type validation helper
193
+ const validateTypes = (body, fieldTypes) => {
194
+ const errors = [];
195
+ Object.entries(fieldTypes).forEach(([field, expectedType]) => {
196
+ const value = body[field];
197
+ if (value !== undefined && value !== null) {
198
+ const actualType = Array.isArray(value) ? 'array' : typeof value;
199
+ if (actualType !== expectedType) {
200
+ errors.push(`Field '${field}' must be of type ${expectedType}, got ${actualType}`);
201
+ }
202
+ }
203
+ });
204
+ if (errors.length > 0) {
205
+ throw new ValidationError('Type validation failed', {
206
+ errors,
207
+ received: body
208
+ });
209
+ }
210
+ };
211
+ exports.validateTypes = validateTypes;
212
+ exports.default = {
213
+ errorHandler: exports.errorHandler,
214
+ notFoundHandler: exports.notFoundHandler,
215
+ asyncHandler: exports.asyncHandler,
216
+ validateRequired: exports.validateRequired,
217
+ validateTypes: exports.validateTypes,
218
+ ValidationError,
219
+ NotFoundError,
220
+ UnauthorizedError,
221
+ ForbiddenError,
222
+ ConflictError,
223
+ RateLimitError,
224
+ InternalServerError
225
+ };
226
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../src/middleware/errorHandler.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAQ1C,MAAa,eAAgB,SAAQ,KAAK;IAKxC,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QALV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,kBAAkB,CAAC;QAK/B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAVD,0CAUC;AAED,MAAa,aAAc,SAAQ,KAAK;IAItC,YAAY,WAAmB,UAAU;QACvC,KAAK,CAAC,GAAG,QAAQ,YAAY,CAAC,CAAC;QAJ1B,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,WAAW,CAAC;QAIxB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AARD,sCAQC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAI1C,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,cAAc,CAAC;QAI3B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AARD,8CAQC;AAED,MAAa,cAAe,SAAQ,KAAK;IAIvC,YAAY,UAAkB,kBAAkB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,WAAW,CAAC;QAIxB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AARD,wCAQC;AAED,MAAa,aAAc,SAAQ,KAAK;IAItC,YAAY,UAAkB,mBAAmB;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,UAAU,CAAC;QAIvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AARD,sCAQC;AAED,MAAa,cAAe,SAAQ,KAAK;IAIvC,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,qBAAqB,CAAC;QAIlC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AARD,wCAQC;AAED,MAAa,mBAAoB,SAAQ,KAAK;IAI5C,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJV,eAAU,GAAG,GAAG,CAAC;QACjB,SAAI,GAAG,uBAAuB,CAAC;QAIpC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AARD,kDAQC;AAeD,gCAAgC;AACzB,MAAM,YAAY,GAAG,CAC1B,GAAa,EACb,GAAY,EACZ,GAAa,EACb,IAAkB,EACZ,EAAE;IACR,iBAAiB;IACjB,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;IACvC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,uBAAuB,CAAC;IAC/C,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,8BAA8B,CAAC;IAC5D,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE1B,8BAA8B;IAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACzE,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,kBAAkB,CAAC;IAC5B,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvF,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1F,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,cAAc,CAAC;IACxB,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnF,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtF,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,UAAU,CAAC;IACpB,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,qBAAqB,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,IAAI,GAAG,YAAY,WAAW,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAChD,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,cAAc,CAAC;QACtB,OAAO,GAAG,8BAA8B,CAAC;IAC3C,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvF,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,oBAAoB,CAAC;QAC5B,OAAO,GAAG,yBAAyB,CAAC;IACtC,CAAC;IAED,uCAAuC;IACvC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACnG,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,GAAG,mBAAmB,CAAC;QAC3B,OAAO,GAAG,oCAAoC,CAAC;IACjD,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAkB;QACnC,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB;QACD,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,iDAAiD;IACjD,IAAI,eAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;QAC3C,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI;YACvC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,aAAa,EAAE,GAAG,CAAC,OAAO;SAC3B,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,IAAI,UAAU,IAAI,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,YAAY,UAAU,MAAM,IAAI,GAAG,EAAE;YACjD,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,eAAM,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,MAAM,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,CAAC,CAAC;AA7FW,QAAA,YAAY,gBA6FvB;AAEF,mCAAmC;AAC5B,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACnE,MAAM,aAAa,GAAkB;QACnC,KAAK,EAAE;YACL,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,YAAY;YACvD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB;QACD,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEF,sBAAsB;AACf,MAAM,YAAY,GAAG,CAAC,EAAY,EAAE,EAAE,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAChG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEF,4BAA4B;AACrB,MAAM,gBAAgB,GAAG,CAAC,IAAS,EAAE,cAAwB,EAAQ,EAAE;IAC5E,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YAC1E,aAAa,EAAE,OAAO;YACtB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B;AAEF,yBAAyB;AAClB,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,UAAkC,EAAQ,EAAE;IACnF,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;YACjE,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,qBAAqB,YAAY,SAAS,UAAU,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE;YAClD,MAAM;YACN,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,aAAa,iBAmBxB;AAEF,kBAAe;IACb,YAAY,EAAZ,oBAAY;IACZ,eAAe,EAAf,uBAAe;IACf,YAAY,EAAZ,oBAAY;IACZ,gBAAgB,EAAhB,wBAAgB;IAChB,aAAa,EAAb,qBAAa;IACb,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,cAAc;IACd,mBAAmB;CACpB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Knex } from 'knex';
2
+ export declare function up(knex: Knex): Promise<void>;
3
+ export declare function down(knex: Knex): Promise<void>;
4
+ //# sourceMappingURL=001_initial_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"001_initial_schema.d.ts","sourceRoot":"","sources":["../../../src/migrations/001_initial_schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpD"}