@vezlo/assistant-server 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -43
- package/bin/vezlo-server.js +1 -1
- package/database-schema.sql +193 -33
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +17 -8
- package/dist/knexfile.js.map +1 -1
- package/dist/src/config/database.d.ts.map +1 -1
- package/dist/src/config/database.js +9 -1
- package/dist/src/config/database.js.map +1 -1
- package/dist/src/config/global.d.ts.map +1 -1
- package/dist/src/config/global.js +5 -2
- package/dist/src/config/global.js.map +1 -1
- package/dist/src/config/knex.d.ts.map +1 -1
- package/dist/src/config/knex.js +22 -2
- package/dist/src/config/knex.js.map +1 -1
- package/dist/src/config/swagger.d.ts.map +1 -1
- package/dist/src/config/swagger.js +34 -73
- package/dist/src/config/swagger.js.map +1 -1
- package/dist/src/controllers/ApiKeyController.d.ts +17 -0
- package/dist/src/controllers/ApiKeyController.d.ts.map +1 -0
- package/dist/src/controllers/ApiKeyController.js +84 -0
- package/dist/src/controllers/ApiKeyController.js.map +1 -0
- package/dist/src/controllers/AuthController.d.ts +14 -0
- package/dist/src/controllers/AuthController.d.ts.map +1 -0
- package/dist/src/controllers/AuthController.js +212 -0
- package/dist/src/controllers/AuthController.js.map +1 -0
- package/dist/src/controllers/ChatController.d.ts +8 -5
- package/dist/src/controllers/ChatController.d.ts.map +1 -1
- package/dist/src/controllers/ChatController.js +139 -31
- package/dist/src/controllers/ChatController.js.map +1 -1
- package/dist/src/controllers/KnowledgeController.d.ts +5 -4
- package/dist/src/controllers/KnowledgeController.d.ts.map +1 -1
- package/dist/src/controllers/KnowledgeController.js +54 -16
- package/dist/src/controllers/KnowledgeController.js.map +1 -1
- package/dist/src/middleware/auth.d.ts +51 -0
- package/dist/src/middleware/auth.d.ts.map +1 -0
- package/dist/src/middleware/auth.js +232 -0
- package/dist/src/middleware/auth.js.map +1 -0
- package/dist/src/middleware/errorHandler.d.ts.map +1 -1
- package/dist/src/middleware/errorHandler.js +13 -19
- package/dist/src/middleware/errorHandler.js.map +1 -1
- package/dist/src/migrations/001_initial_schema.d.ts.map +1 -1
- package/dist/src/migrations/001_initial_schema.js +39 -64
- package/dist/src/migrations/001_initial_schema.js.map +1 -1
- package/dist/src/migrations/002_multitenancy_schema.d.ts +4 -0
- package/dist/src/migrations/002_multitenancy_schema.d.ts.map +1 -0
- package/dist/src/migrations/002_multitenancy_schema.js +119 -0
- package/dist/src/migrations/002_multitenancy_schema.js.map +1 -0
- package/dist/src/schemas/AuthSchemas.d.ts +89 -0
- package/dist/src/schemas/AuthSchemas.d.ts.map +1 -0
- package/dist/src/schemas/AuthSchemas.js +63 -0
- package/dist/src/schemas/AuthSchemas.js.map +1 -0
- package/dist/src/schemas/CommonSchemas.d.ts +62 -0
- package/dist/src/schemas/CommonSchemas.d.ts.map +1 -0
- package/dist/src/schemas/CommonSchemas.js +65 -0
- package/dist/src/schemas/CommonSchemas.js.map +1 -0
- package/dist/src/schemas/ConversationSchemas.d.ts +64 -27
- package/dist/src/schemas/ConversationSchemas.d.ts.map +1 -1
- package/dist/src/schemas/ConversationSchemas.js +28 -9
- package/dist/src/schemas/ConversationSchemas.js.map +1 -1
- package/dist/src/schemas/FeedbackSchemas.d.ts +43 -5
- package/dist/src/schemas/FeedbackSchemas.d.ts.map +1 -1
- package/dist/src/schemas/FeedbackSchemas.js +20 -2
- package/dist/src/schemas/FeedbackSchemas.js.map +1 -1
- package/dist/src/schemas/KnowledgeSchemas.d.ts +114 -35
- package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -1
- package/dist/src/schemas/KnowledgeSchemas.js +58 -16
- package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
- package/dist/src/schemas/MessageSchemas.d.ts +57 -8
- package/dist/src/schemas/MessageSchemas.d.ts.map +1 -1
- package/dist/src/schemas/MessageSchemas.js +22 -3
- package/dist/src/schemas/MessageSchemas.js.map +1 -1
- package/dist/src/schemas/index.d.ts +410 -68
- package/dist/src/schemas/index.d.ts.map +1 -1
- package/dist/src/schemas/index.js +8 -2
- package/dist/src/schemas/index.js.map +1 -1
- package/dist/src/server.js +1047 -615
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/AIService.d.ts +1 -2
- package/dist/src/services/AIService.d.ts.map +1 -1
- package/dist/src/services/AIService.js +6 -32
- package/dist/src/services/AIService.js.map +1 -1
- package/dist/src/services/ApiKeyService.d.ts +38 -0
- package/dist/src/services/ApiKeyService.d.ts.map +1 -0
- package/dist/src/services/ApiKeyService.js +123 -0
- package/dist/src/services/ApiKeyService.js.map +1 -0
- package/dist/src/services/KnowledgeBaseService.d.ts +2 -2
- package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
- package/dist/src/services/KnowledgeBaseService.js +9 -2
- package/dist/src/services/KnowledgeBaseService.js.map +1 -1
- package/dist/src/services/MigrationService.d.ts +1 -1
- package/dist/src/services/MigrationService.d.ts.map +1 -1
- package/dist/src/services/MigrationService.js +4 -8
- package/dist/src/services/MigrationService.js.map +1 -1
- package/dist/src/services/SetupService.d.ts +102 -0
- package/dist/src/services/SetupService.d.ts.map +1 -0
- package/dist/src/services/SetupService.js +343 -0
- package/dist/src/services/SetupService.js.map +1 -0
- package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
- package/dist/src/storage/ConversationRepository.js +42 -8
- package/dist/src/storage/ConversationRepository.js.map +1 -1
- package/dist/src/storage/MessageRepository.d.ts.map +1 -1
- package/dist/src/storage/MessageRepository.js +23 -27
- package/dist/src/storage/MessageRepository.js.map +1 -1
- package/dist/src/types/index.d.ts +0 -8
- package/dist/src/types/index.d.ts.map +1 -1
- package/env.example +7 -5
- package/knexfile.ts +17 -8
- package/package.json +25 -16
- package/scripts/generate-key.js +124 -0
- package/scripts/seed-default.js +72 -0
- package/scripts/setup.js +410 -149
- package/scripts/validate-db.js +46 -13
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
export declare class SetupService {
|
|
3
|
+
private supabase;
|
|
4
|
+
constructor(supabase: SupabaseClient);
|
|
5
|
+
/**
|
|
6
|
+
* Get default admin credentials from environment variables
|
|
7
|
+
*/
|
|
8
|
+
static getDefaultCredentials(): {
|
|
9
|
+
adminEmail: string;
|
|
10
|
+
adminPassword: string;
|
|
11
|
+
companyName: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Create default company and admin user for initial setup (CLI compatibility)
|
|
15
|
+
* @deprecated Use getOrCreateDefaultData instead
|
|
16
|
+
*/
|
|
17
|
+
createDefaultData(options: {
|
|
18
|
+
adminEmail: string;
|
|
19
|
+
adminPassword: string;
|
|
20
|
+
companyName: string;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
success: boolean;
|
|
23
|
+
alreadyExists: boolean;
|
|
24
|
+
company: {
|
|
25
|
+
id: any;
|
|
26
|
+
name: any;
|
|
27
|
+
domain: any;
|
|
28
|
+
};
|
|
29
|
+
user: {
|
|
30
|
+
id: any;
|
|
31
|
+
email: any;
|
|
32
|
+
name: any;
|
|
33
|
+
};
|
|
34
|
+
profile: {
|
|
35
|
+
id: any;
|
|
36
|
+
role: any;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Get or create default company and admin user for initial setup
|
|
41
|
+
* Returns existing data if already created
|
|
42
|
+
*/
|
|
43
|
+
getOrCreateDefaultData(options: {
|
|
44
|
+
adminEmail: string;
|
|
45
|
+
adminPassword: string;
|
|
46
|
+
companyName: string;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
success: boolean;
|
|
49
|
+
alreadyExists: boolean;
|
|
50
|
+
company: {
|
|
51
|
+
id: any;
|
|
52
|
+
name: any;
|
|
53
|
+
domain: any;
|
|
54
|
+
};
|
|
55
|
+
user: {
|
|
56
|
+
id: any;
|
|
57
|
+
email: any;
|
|
58
|
+
name: any;
|
|
59
|
+
};
|
|
60
|
+
profile: {
|
|
61
|
+
id: any;
|
|
62
|
+
role: any;
|
|
63
|
+
};
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Check if setup is already completed
|
|
67
|
+
*/
|
|
68
|
+
isSetupCompleted(): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* Get setup status
|
|
71
|
+
*/
|
|
72
|
+
getSetupStatus(): Promise<{
|
|
73
|
+
completed: boolean;
|
|
74
|
+
message: string;
|
|
75
|
+
company?: undefined;
|
|
76
|
+
adminUser?: undefined;
|
|
77
|
+
} | {
|
|
78
|
+
completed: boolean;
|
|
79
|
+
company: {
|
|
80
|
+
name: any;
|
|
81
|
+
domain: any;
|
|
82
|
+
};
|
|
83
|
+
adminUser: {
|
|
84
|
+
email: any;
|
|
85
|
+
name: any;
|
|
86
|
+
};
|
|
87
|
+
message?: undefined;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Execute seed-default API - returns simplified response
|
|
91
|
+
*/
|
|
92
|
+
executeSeedDefault(): Promise<any>;
|
|
93
|
+
/**
|
|
94
|
+
* Execute generate-key API - returns API key for default admin
|
|
95
|
+
*/
|
|
96
|
+
executeGenerateKey(): Promise<{
|
|
97
|
+
company_name: string;
|
|
98
|
+
user_name: any;
|
|
99
|
+
api_key: string;
|
|
100
|
+
}>;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=SetupService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupService.d.ts","sourceRoot":"","sources":["../../../src/services/SetupService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAiB;gBAErB,QAAQ,EAAE,cAAc;IAIpC;;OAEG;IACH,MAAM,CAAC,qBAAqB;;;;;IAQ5B;;;OAGG;IACG,iBAAiB,CAAC,OAAO,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB;;;;;;;;;;;;;;;;;;IAWD;;;OAGG;IACG,sBAAsB,CAAC,OAAO,EAAE;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB;;;;;;;;;;;;;;;;;;IA8ID;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAc1C;;OAEG;IACG,cAAc;;;;;;;;;;;;;;;;;IAiDpB;;OAEG;IACG,kBAAkB;IAmBxB;;OAEG;IACG,kBAAkB;;;;;CA0EzB"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SetupService = void 0;
|
|
40
|
+
const auth_1 = require("../middleware/auth");
|
|
41
|
+
const logger_1 = __importDefault(require("../config/logger"));
|
|
42
|
+
class SetupService {
|
|
43
|
+
constructor(supabase) {
|
|
44
|
+
this.supabase = supabase;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get default admin credentials from environment variables
|
|
48
|
+
*/
|
|
49
|
+
static getDefaultCredentials() {
|
|
50
|
+
return {
|
|
51
|
+
adminEmail: process.env.DEFAULT_ADMIN_EMAIL || 'admin@vezlo.org',
|
|
52
|
+
adminPassword: process.env.DEFAULT_ADMIN_PASSWORD || 'admin123',
|
|
53
|
+
companyName: process.env.ORGANIZATION_NAME || 'Vezlo'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create default company and admin user for initial setup (CLI compatibility)
|
|
58
|
+
* @deprecated Use getOrCreateDefaultData instead
|
|
59
|
+
*/
|
|
60
|
+
async createDefaultData(options) {
|
|
61
|
+
const result = await this.getOrCreateDefaultData(options);
|
|
62
|
+
// Throw error if already exists (maintains CLI behavior)
|
|
63
|
+
if (result.alreadyExists) {
|
|
64
|
+
throw new Error('Default company and admin user already exist');
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get or create default company and admin user for initial setup
|
|
70
|
+
* Returns existing data if already created
|
|
71
|
+
*/
|
|
72
|
+
async getOrCreateDefaultData(options) {
|
|
73
|
+
const { adminEmail, adminPassword, companyName } = options;
|
|
74
|
+
try {
|
|
75
|
+
logger_1.default.info('Checking for existing default company and admin user...');
|
|
76
|
+
// Check if default company already exists
|
|
77
|
+
const { data: existingCompany } = await this.supabase
|
|
78
|
+
.from('vezlo_companies')
|
|
79
|
+
.select('*')
|
|
80
|
+
.eq('domain', 'default')
|
|
81
|
+
.single();
|
|
82
|
+
if (existingCompany) {
|
|
83
|
+
// Get the admin user and profile
|
|
84
|
+
const { data: profile } = await this.supabase
|
|
85
|
+
.from('vezlo_user_company_profiles')
|
|
86
|
+
.select('*, vezlo_users(*)')
|
|
87
|
+
.eq('company_id', existingCompany.id)
|
|
88
|
+
.eq('role', 'admin')
|
|
89
|
+
.single();
|
|
90
|
+
if (profile && profile.vezlo_users) {
|
|
91
|
+
const user = profile.vezlo_users;
|
|
92
|
+
logger_1.default.info('Default data already exists, returning existing data');
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
alreadyExists: true,
|
|
96
|
+
company: {
|
|
97
|
+
id: existingCompany.uuid,
|
|
98
|
+
name: existingCompany.name,
|
|
99
|
+
domain: existingCompany.domain
|
|
100
|
+
},
|
|
101
|
+
user: {
|
|
102
|
+
id: user.uuid,
|
|
103
|
+
email: user.email,
|
|
104
|
+
name: user.name
|
|
105
|
+
},
|
|
106
|
+
profile: {
|
|
107
|
+
id: profile.uuid,
|
|
108
|
+
role: profile.role
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Check if admin user already exists
|
|
114
|
+
const { data: existingUser } = await this.supabase
|
|
115
|
+
.from('vezlo_users')
|
|
116
|
+
.select('id')
|
|
117
|
+
.eq('email', adminEmail)
|
|
118
|
+
.single();
|
|
119
|
+
if (existingUser) {
|
|
120
|
+
throw new Error(`User with email ${adminEmail} already exists`);
|
|
121
|
+
}
|
|
122
|
+
logger_1.default.info('Creating default company and admin user...');
|
|
123
|
+
// Create default company
|
|
124
|
+
const { data: company, error: companyError } = await this.supabase
|
|
125
|
+
.from('vezlo_companies')
|
|
126
|
+
.insert({
|
|
127
|
+
name: companyName,
|
|
128
|
+
domain: 'default'
|
|
129
|
+
})
|
|
130
|
+
.select()
|
|
131
|
+
.single();
|
|
132
|
+
if (companyError) {
|
|
133
|
+
throw new Error(`Failed to create company: ${companyError.message}`);
|
|
134
|
+
}
|
|
135
|
+
logger_1.default.info(`✅ Company created: ${company.name} (${company.uuid})`);
|
|
136
|
+
// Hash password
|
|
137
|
+
const passwordHash = await auth_1.PasswordUtils.hash(adminPassword);
|
|
138
|
+
// Create admin user
|
|
139
|
+
const { data: user, error: userError } = await this.supabase
|
|
140
|
+
.from('vezlo_users')
|
|
141
|
+
.insert({
|
|
142
|
+
email: adminEmail,
|
|
143
|
+
name: 'Default Admin',
|
|
144
|
+
password_hash: passwordHash
|
|
145
|
+
})
|
|
146
|
+
.select()
|
|
147
|
+
.single();
|
|
148
|
+
if (userError) {
|
|
149
|
+
throw new Error(`Failed to create user: ${userError.message}`);
|
|
150
|
+
}
|
|
151
|
+
logger_1.default.info(`✅ Admin user created: ${user.email} (${user.uuid})`);
|
|
152
|
+
// Create admin profile
|
|
153
|
+
const { data: profile, error: profileError } = await this.supabase
|
|
154
|
+
.from('vezlo_user_company_profiles')
|
|
155
|
+
.insert({
|
|
156
|
+
user_id: user.id,
|
|
157
|
+
company_id: company.id,
|
|
158
|
+
role: 'admin',
|
|
159
|
+
status: 'active'
|
|
160
|
+
})
|
|
161
|
+
.select()
|
|
162
|
+
.single();
|
|
163
|
+
if (profileError) {
|
|
164
|
+
throw new Error(`Failed to create profile: ${profileError.message}`);
|
|
165
|
+
}
|
|
166
|
+
logger_1.default.info(`✅ Admin profile created: ${profile.uuid}`);
|
|
167
|
+
const result = {
|
|
168
|
+
success: true,
|
|
169
|
+
alreadyExists: false,
|
|
170
|
+
company: {
|
|
171
|
+
id: company.uuid,
|
|
172
|
+
name: company.name,
|
|
173
|
+
domain: company.domain
|
|
174
|
+
},
|
|
175
|
+
user: {
|
|
176
|
+
id: user.uuid,
|
|
177
|
+
email: user.email,
|
|
178
|
+
name: user.name
|
|
179
|
+
},
|
|
180
|
+
profile: {
|
|
181
|
+
id: profile.uuid,
|
|
182
|
+
role: profile.role
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
logger_1.default.info('Default setup completed successfully!');
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
logger_1.default.error('Setup failed:', error);
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check if setup is already completed
|
|
195
|
+
*/
|
|
196
|
+
async isSetupCompleted() {
|
|
197
|
+
try {
|
|
198
|
+
const { data } = await this.supabase
|
|
199
|
+
.from('vezlo_companies')
|
|
200
|
+
.select('id')
|
|
201
|
+
.eq('domain', 'default')
|
|
202
|
+
.single();
|
|
203
|
+
return !!data;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get setup status
|
|
211
|
+
*/
|
|
212
|
+
async getSetupStatus() {
|
|
213
|
+
try {
|
|
214
|
+
const isCompleted = await this.isSetupCompleted();
|
|
215
|
+
if (!isCompleted) {
|
|
216
|
+
return {
|
|
217
|
+
completed: false,
|
|
218
|
+
message: 'Setup not completed. Run setup to create default company and admin user.'
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// Get default company info
|
|
222
|
+
const { data: company } = await this.supabase
|
|
223
|
+
.from('vezlo_companies')
|
|
224
|
+
.select(`
|
|
225
|
+
*,
|
|
226
|
+
vezlo_user_company_profiles!inner (
|
|
227
|
+
*,
|
|
228
|
+
vezlo_users!inner (
|
|
229
|
+
email,
|
|
230
|
+
name
|
|
231
|
+
)
|
|
232
|
+
)
|
|
233
|
+
`)
|
|
234
|
+
.eq('domain', 'default')
|
|
235
|
+
.eq('vezlo_user_company_profiles.role', 'admin')
|
|
236
|
+
.single();
|
|
237
|
+
return {
|
|
238
|
+
completed: true,
|
|
239
|
+
company: {
|
|
240
|
+
name: company?.name,
|
|
241
|
+
domain: company?.domain
|
|
242
|
+
},
|
|
243
|
+
adminUser: {
|
|
244
|
+
email: company?.vezlo_user_company_profiles?.[0]?.vezlo_users?.email,
|
|
245
|
+
name: company?.vezlo_user_company_profiles?.[0]?.vezlo_users?.name
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
logger_1.default.error('Failed to get setup status:', error);
|
|
251
|
+
return {
|
|
252
|
+
completed: false,
|
|
253
|
+
message: 'Failed to check setup status'
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Execute seed-default API - returns simplified response
|
|
259
|
+
*/
|
|
260
|
+
async executeSeedDefault() {
|
|
261
|
+
const credentials = SetupService.getDefaultCredentials();
|
|
262
|
+
// Wait for schema cache to refresh
|
|
263
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
264
|
+
const result = await this.getOrCreateDefaultData(credentials);
|
|
265
|
+
// Prepare simplified response
|
|
266
|
+
const response = {
|
|
267
|
+
company_name: result.company.name,
|
|
268
|
+
email: result.user.email,
|
|
269
|
+
password: credentials.adminPassword,
|
|
270
|
+
admin_name: result.user.name
|
|
271
|
+
};
|
|
272
|
+
return response;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Execute generate-key API - returns API key for default admin
|
|
276
|
+
*/
|
|
277
|
+
async executeGenerateKey() {
|
|
278
|
+
const credentials = SetupService.getDefaultCredentials();
|
|
279
|
+
// Wait for schema cache to refresh
|
|
280
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
281
|
+
// Find the admin user
|
|
282
|
+
const { data: user, error: userError } = await this.supabase
|
|
283
|
+
.from('vezlo_users')
|
|
284
|
+
.select('id, uuid, name')
|
|
285
|
+
.eq('email', credentials.adminEmail)
|
|
286
|
+
.single();
|
|
287
|
+
if (userError || !user) {
|
|
288
|
+
throw new Error(`Admin user not found (${credentials.adminEmail}). Run seed-default first.`);
|
|
289
|
+
}
|
|
290
|
+
// Find the admin's company profile
|
|
291
|
+
const { data: profile, error: profileError } = await this.supabase
|
|
292
|
+
.from('vezlo_user_company_profiles')
|
|
293
|
+
.select(`
|
|
294
|
+
id,
|
|
295
|
+
role,
|
|
296
|
+
company_id,
|
|
297
|
+
companies:company_id(
|
|
298
|
+
id,
|
|
299
|
+
uuid,
|
|
300
|
+
name,
|
|
301
|
+
domain
|
|
302
|
+
)
|
|
303
|
+
`)
|
|
304
|
+
.eq('user_id', user.id)
|
|
305
|
+
.eq('role', 'admin')
|
|
306
|
+
.single();
|
|
307
|
+
if (profileError || !profile) {
|
|
308
|
+
throw new Error(`Admin profile not found. Run seed-default first.`);
|
|
309
|
+
}
|
|
310
|
+
// Import ApiKeyService
|
|
311
|
+
const { ApiKeyService } = await Promise.resolve().then(() => __importStar(require('./ApiKeyService')));
|
|
312
|
+
// Generate the API key
|
|
313
|
+
const apiKeyService = new ApiKeyService(this.supabase);
|
|
314
|
+
// Use the joined company ID (same as generate-key.js script)
|
|
315
|
+
const companyId = profile.companies?.id || profile.company_id;
|
|
316
|
+
const { uuid, apiKey } = await apiKeyService.generateApiKey(typeof companyId === 'number' ? companyId : parseInt(String(companyId)));
|
|
317
|
+
// Debug profile structure
|
|
318
|
+
console.log('Profile structure:', JSON.stringify(profile, null, 2));
|
|
319
|
+
// Get company name (handle type issues with fallbacks)
|
|
320
|
+
let companyName = 'Unknown Company';
|
|
321
|
+
try {
|
|
322
|
+
// Access as Record to avoid TypeScript errors since structure can vary
|
|
323
|
+
const companies = profile.companies;
|
|
324
|
+
if (companies && typeof companies === 'object') {
|
|
325
|
+
if (companies.name) {
|
|
326
|
+
companyName = companies.name;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
console.log('Error getting company name:', e);
|
|
332
|
+
}
|
|
333
|
+
// Prepare response
|
|
334
|
+
const response = {
|
|
335
|
+
company_name: companyName,
|
|
336
|
+
user_name: user.name,
|
|
337
|
+
api_key: apiKey
|
|
338
|
+
};
|
|
339
|
+
return response;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
exports.SetupService = SetupService;
|
|
343
|
+
//# sourceMappingURL=SetupService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupService.js","sourceRoot":"","sources":["../../../src/services/SetupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationRepository.d.ts","sourceRoot":"","sources":["../../../src/storage/ConversationRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,MAAW;IAK9D,OAAO,CAAC,YAAY;IAId,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0C3E,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAiBzE,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBzG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationRepository.d.ts","sourceRoot":"","sources":["../../../src/storage/ConversationRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,MAAW;IAK9D,OAAO,CAAC,YAAY;IAId,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0C3E,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAiBzE,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBzG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YA+BlF,iBAAiB;CAwChC"}
|
|
@@ -25,7 +25,7 @@ class ConversationRepository {
|
|
|
25
25
|
.single();
|
|
26
26
|
if (error)
|
|
27
27
|
throw new Error(`Failed to update conversation: ${error.message}`);
|
|
28
|
-
return this.rowToConversation(data);
|
|
28
|
+
return await this.rowToConversation(data);
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
31
31
|
// Create new conversation
|
|
@@ -46,7 +46,7 @@ class ConversationRepository {
|
|
|
46
46
|
.single();
|
|
47
47
|
if (error)
|
|
48
48
|
throw new Error(`Failed to create conversation: ${error.message}`);
|
|
49
|
-
return this.rowToConversation(data);
|
|
49
|
+
return await this.rowToConversation(data);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
async getConversation(conversationId) {
|
|
@@ -61,7 +61,7 @@ class ConversationRepository {
|
|
|
61
61
|
return null; // Not found
|
|
62
62
|
throw new Error(`Failed to get conversation: ${error.message}`);
|
|
63
63
|
}
|
|
64
|
-
return this.rowToConversation(data);
|
|
64
|
+
return this.rowToConversation(data, true);
|
|
65
65
|
}
|
|
66
66
|
async updateConversation(conversationId, updates) {
|
|
67
67
|
const tableName = this.getTableName('conversations');
|
|
@@ -79,7 +79,7 @@ class ConversationRepository {
|
|
|
79
79
|
.single();
|
|
80
80
|
if (error)
|
|
81
81
|
throw new Error(`Failed to update conversation: ${error.message}`);
|
|
82
|
-
return this.rowToConversation(data);
|
|
82
|
+
return await this.rowToConversation(data);
|
|
83
83
|
}
|
|
84
84
|
async deleteConversation(conversationId) {
|
|
85
85
|
const tableName = this.getTableName('conversations');
|
|
@@ -104,15 +104,49 @@ class ConversationRepository {
|
|
|
104
104
|
const { data, error } = await query;
|
|
105
105
|
if (error)
|
|
106
106
|
throw new Error(`Failed to get user conversations: ${error.message}`);
|
|
107
|
-
|
|
107
|
+
// Note: getUserConversations doesn't need UUIDs since we're using the internal ID for filtering
|
|
108
|
+
// The ChatController handles the response mapping
|
|
109
|
+
return (data || []).map(row => ({
|
|
110
|
+
id: row.uuid,
|
|
111
|
+
threadId: row.uuid,
|
|
112
|
+
title: row.title,
|
|
113
|
+
userId: row.creator_id?.toString() || '1',
|
|
114
|
+
organizationId: row.company_id?.toString(),
|
|
115
|
+
messageCount: row.message_count || 0,
|
|
116
|
+
createdAt: new Date(row.created_at),
|
|
117
|
+
updatedAt: row.updated_at ? new Date(row.updated_at) : new Date(row.created_at)
|
|
118
|
+
}));
|
|
108
119
|
}
|
|
109
|
-
rowToConversation(row) {
|
|
120
|
+
async rowToConversation(row, fetchUuids = false) {
|
|
121
|
+
let userId = row.creator_id?.toString() || '1';
|
|
122
|
+
let organizationId = row.company_id?.toString();
|
|
123
|
+
// Fetch actual UUIDs if needed
|
|
124
|
+
if (fetchUuids && row.creator_id) {
|
|
125
|
+
const { data: userData } = await this.supabase
|
|
126
|
+
.from(this.getTableName('users'))
|
|
127
|
+
.select('uuid')
|
|
128
|
+
.eq('id', row.creator_id)
|
|
129
|
+
.single();
|
|
130
|
+
if (userData) {
|
|
131
|
+
userId = userData.uuid;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (fetchUuids && row.company_id) {
|
|
135
|
+
const { data: companyData } = await this.supabase
|
|
136
|
+
.from(this.getTableName('companies'))
|
|
137
|
+
.select('uuid')
|
|
138
|
+
.eq('id', row.company_id)
|
|
139
|
+
.single();
|
|
140
|
+
if (companyData) {
|
|
141
|
+
organizationId = companyData.uuid;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
110
144
|
return {
|
|
111
145
|
id: row.uuid,
|
|
112
146
|
threadId: row.uuid, // Use UUID as threadId for conversations
|
|
113
147
|
title: row.title,
|
|
114
|
-
userId
|
|
115
|
-
organizationId
|
|
148
|
+
userId,
|
|
149
|
+
organizationId,
|
|
116
150
|
messageCount: row.message_count || 0,
|
|
117
151
|
createdAt: new Date(row.created_at),
|
|
118
152
|
updatedAt: row.updated_at ? new Date(row.updated_at) : new Date(row.created_at)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationRepository.js","sourceRoot":"","sources":["../../../src/storage/ConversationRepository.ts"],"names":[],"mappings":";;;AAGA,MAAa,sBAAsB;IAIjC,YAAY,QAAwB,EAAE,cAAsB,EAAE;QAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,YAA8B;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;YACpB,+BAA+B;YAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;iBACxC,IAAI,CAAC,SAAS,CAAC;iBACf,MAAM,CAAC;gBACN,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,aAAa,EAAE,YAAY,CAAC,YAAY;gBACxC,UAAU,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC/D,CAAC;iBACD,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;iBAC3B,MAAM,EAAE;iBACR,MAAM,EAAE,CAAC;YAEZ,IAAI,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationRepository.js","sourceRoot":"","sources":["../../../src/storage/ConversationRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageRepository.d.ts","sourceRoot":"","sources":["../../../src/storage/MessageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,MAAW;IAK9D,OAAO,CAAC,YAAY;IAId,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwFnE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwCzF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageRepository.d.ts","sourceRoot":"","sources":["../../../src/storage/MessageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,MAAW;IAK9D,OAAO,CAAC,YAAY;IAId,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwFnE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwCzF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CA4C3E"}
|
|
@@ -140,45 +140,41 @@ class MessageRepository {
|
|
|
140
140
|
}
|
|
141
141
|
async getMessageById(messageId) {
|
|
142
142
|
const tableName = this.getTableName('messages');
|
|
143
|
-
|
|
144
|
-
const { data, error } = await this.supabase
|
|
143
|
+
// First get the message
|
|
144
|
+
const { data: messageData, error: messageError } = await this.supabase
|
|
145
145
|
.from(tableName)
|
|
146
|
-
.select(
|
|
147
|
-
uuid,
|
|
148
|
-
type,
|
|
149
|
-
content,
|
|
150
|
-
status,
|
|
151
|
-
metadata,
|
|
152
|
-
parent_message_id,
|
|
153
|
-
created_at,
|
|
154
|
-
updated_at,
|
|
155
|
-
${conversationsTable}!inner(uuid)
|
|
156
|
-
`)
|
|
146
|
+
.select('*')
|
|
157
147
|
.eq('uuid', messageId)
|
|
158
148
|
.single();
|
|
159
|
-
if (
|
|
160
|
-
if (
|
|
149
|
+
if (messageError) {
|
|
150
|
+
if (messageError.code === 'PGRST116')
|
|
161
151
|
return null; // Not found
|
|
162
|
-
throw new Error(`Failed to get message: ${
|
|
152
|
+
throw new Error(`Failed to get message: ${messageError.message}`);
|
|
163
153
|
}
|
|
164
|
-
if (!
|
|
154
|
+
if (!messageData)
|
|
165
155
|
return null;
|
|
166
|
-
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
156
|
+
// Get the conversation UUID by internal ID
|
|
157
|
+
const conversationsTable = this.getTableName('conversations');
|
|
158
|
+
const { data: conversationData, error: conversationError } = await this.supabase
|
|
159
|
+
.from(conversationsTable)
|
|
160
|
+
.select('uuid')
|
|
161
|
+
.eq('id', messageData.conversation_id)
|
|
162
|
+
.single();
|
|
163
|
+
if (conversationError || !conversationData) {
|
|
164
|
+
throw new Error('Failed to get conversation for message');
|
|
170
165
|
}
|
|
166
|
+
const metadata = messageData.metadata || {};
|
|
171
167
|
return {
|
|
172
|
-
id:
|
|
168
|
+
id: messageData.uuid,
|
|
173
169
|
conversationId: conversationData.uuid,
|
|
174
170
|
threadId: conversationData.uuid,
|
|
175
|
-
role:
|
|
176
|
-
content:
|
|
171
|
+
role: messageData.type,
|
|
172
|
+
content: messageData.content,
|
|
177
173
|
toolCalls: metadata.tool_calls,
|
|
178
174
|
toolResults: metadata.tool_results,
|
|
179
|
-
parentMessageId:
|
|
180
|
-
createdAt: new Date(
|
|
181
|
-
updatedAt:
|
|
175
|
+
parentMessageId: messageData.parent_message_id,
|
|
176
|
+
createdAt: new Date(messageData.created_at),
|
|
177
|
+
updatedAt: messageData.updated_at ? new Date(messageData.updated_at) : undefined
|
|
182
178
|
};
|
|
183
179
|
}
|
|
184
180
|
}
|