ai-agent-router 0.1.6 → 0.1.7
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/dist/src/app/api/config/route.js +23 -18
- package/dist/src/app/api/gateway/[...path]/route.js +22 -14
- package/dist/src/app/api/gateway/route.js +16 -11
- package/dist/src/app/api/logs/route.js +18 -14
- package/dist/src/app/api/models/route.js +51 -43
- package/dist/src/app/api/providers/route.js +45 -38
- package/dist/src/app/api/providers/test/route.js +20 -16
- package/dist/src/app/api/service/start/route.js +23 -16
- package/dist/src/app/api/service/status/route.js +13 -9
- package/dist/src/app/api/service/stop/route.js +14 -10
- package/dist/src/app/components/ConfirmDialog.jsx +4 -1
- package/dist/src/app/components/Nav.jsx +14 -8
- package/dist/src/app/components/Toast.jsx +6 -3
- package/dist/src/app/components/ToastProvider.jsx +15 -8
- package/dist/src/app/layout.jsx +9 -5
- package/dist/src/app/logs/page.jsx +17 -11
- package/dist/src/app/models/page.jsx +31 -25
- package/dist/src/app/page.jsx +31 -25
- package/dist/src/app/providers/page.jsx +29 -23
- package/dist/src/cli/index.js +17 -12
- package/dist/src/db/database.js +23 -15
- package/dist/src/db/queries.js +75 -49
- package/dist/src/db/schema.js +4 -1
- package/dist/src/server/crypto.js +17 -8
- package/dist/src/server/gateway-server.js +15 -8
- package/dist/src/server/gateway.js +11 -8
- package/dist/src/server/logger.js +14 -11
- package/dist/src/server/providers/anthropic.js +7 -3
- package/dist/src/server/providers/gemini.js +8 -4
- package/dist/src/server/providers/index.js +14 -8
- package/dist/src/server/providers/openai.js +8 -4
- package/dist/src/server/providers/types.js +2 -1
- package/dist/src/server/service-manager.js +23 -17
- package/package.json +1 -1
- package/tsconfig.json +2 -2
|
@@ -1,44 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtime = void 0;
|
|
4
|
+
exports.GET = GET;
|
|
5
|
+
exports.POST = POST;
|
|
6
|
+
const server_1 = require("next/server");
|
|
7
|
+
const database_1 = require("@/db/database");
|
|
8
|
+
const queries_1 = require("@/db/queries");
|
|
4
9
|
// Ensure Node.js runtime (required for SQLite)
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
exports.runtime = 'nodejs';
|
|
11
|
+
async function GET(request) {
|
|
7
12
|
try {
|
|
8
13
|
// Initialize database on request (safer than module load)
|
|
9
|
-
getDatabase();
|
|
14
|
+
(0, database_1.getDatabase)();
|
|
10
15
|
const { searchParams } = new URL(request.url);
|
|
11
16
|
const key = searchParams.get('key');
|
|
12
17
|
if (key) {
|
|
13
|
-
const config = getConfig(key);
|
|
18
|
+
const config = (0, queries_1.getConfig)(key);
|
|
14
19
|
if (!config) {
|
|
15
|
-
return NextResponse.json({ error: 'Config not found' }, { status: 404 });
|
|
20
|
+
return server_1.NextResponse.json({ error: 'Config not found' }, { status: 404 });
|
|
16
21
|
}
|
|
17
|
-
return NextResponse.json(config);
|
|
22
|
+
return server_1.NextResponse.json(config);
|
|
18
23
|
}
|
|
19
|
-
const configs = getAllConfig();
|
|
20
|
-
return NextResponse.json(configs);
|
|
24
|
+
const configs = (0, queries_1.getAllConfig)();
|
|
25
|
+
return server_1.NextResponse.json(configs);
|
|
21
26
|
}
|
|
22
27
|
catch (error) {
|
|
23
28
|
console.error('Config API error:', error);
|
|
24
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
29
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
25
30
|
}
|
|
26
31
|
}
|
|
27
|
-
|
|
32
|
+
async function POST(request) {
|
|
28
33
|
try {
|
|
29
34
|
// Initialize database on request
|
|
30
|
-
getDatabase();
|
|
35
|
+
(0, database_1.getDatabase)();
|
|
31
36
|
const body = await request.json();
|
|
32
37
|
const { key, value } = body;
|
|
33
38
|
if (!key) {
|
|
34
|
-
return NextResponse.json({ error: 'Key is required' }, { status: 400 });
|
|
39
|
+
return server_1.NextResponse.json({ error: 'Key is required' }, { status: 400 });
|
|
35
40
|
}
|
|
36
41
|
// Allow value to be null, undefined, or empty string (save as empty string)
|
|
37
|
-
const config = setConfig(key, (value === undefined || value === null) ? '' : typeof value === 'string' ? value : JSON.stringify(value));
|
|
38
|
-
return NextResponse.json(config);
|
|
42
|
+
const config = (0, queries_1.setConfig)(key, (value === undefined || value === null) ? '' : typeof value === 'string' ? value : JSON.stringify(value));
|
|
43
|
+
return server_1.NextResponse.json(config);
|
|
39
44
|
}
|
|
40
45
|
catch (error) {
|
|
41
46
|
console.error('Config POST API error:', error);
|
|
42
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
47
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
43
48
|
}
|
|
44
49
|
}
|
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtime = void 0;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
exports.GET = GET;
|
|
6
|
+
exports.PUT = PUT;
|
|
7
|
+
exports.PATCH = PATCH;
|
|
8
|
+
exports.DELETE = DELETE;
|
|
9
|
+
const server_1 = require("next/server");
|
|
10
|
+
const database_1 = require("@/db/database");
|
|
11
|
+
const gateway_1 = require("@/server/gateway");
|
|
4
12
|
// Ensure Node.js runtime (required for SQLite)
|
|
5
|
-
|
|
6
|
-
|
|
13
|
+
exports.runtime = 'nodejs';
|
|
14
|
+
async function POST(request, { params }) {
|
|
7
15
|
return handleRequest(request, params, 'POST');
|
|
8
16
|
}
|
|
9
|
-
|
|
17
|
+
async function GET(request, { params }) {
|
|
10
18
|
return handleRequest(request, params, 'GET');
|
|
11
19
|
}
|
|
12
|
-
|
|
20
|
+
async function PUT(request, { params }) {
|
|
13
21
|
return handleRequest(request, params, 'PUT');
|
|
14
22
|
}
|
|
15
|
-
|
|
23
|
+
async function PATCH(request, { params }) {
|
|
16
24
|
return handleRequest(request, params, 'PATCH');
|
|
17
25
|
}
|
|
18
|
-
|
|
26
|
+
async function DELETE(request, { params }) {
|
|
19
27
|
return handleRequest(request, params, 'DELETE');
|
|
20
28
|
}
|
|
21
29
|
async function handleRequest(request, params, method) {
|
|
22
30
|
try {
|
|
23
|
-
getDatabase();
|
|
31
|
+
(0, database_1.getDatabase)();
|
|
24
32
|
// Extract model ID from path or query
|
|
25
33
|
// Common patterns: /v1/models/{model_id}/... or ?model=...
|
|
26
34
|
const path = params.path.join('/');
|
|
@@ -55,7 +63,7 @@ async function handleRequest(request, params, method) {
|
|
|
55
63
|
}
|
|
56
64
|
const bodyProvider = body?.provider;
|
|
57
65
|
if (!modelId) {
|
|
58
|
-
return NextResponse.json({ error: { message: 'Model ID not specified' } }, { status: 400 });
|
|
66
|
+
return server_1.NextResponse.json({ error: { message: 'Model ID not specified' } }, { status: 400 });
|
|
59
67
|
}
|
|
60
68
|
// Build gateway request
|
|
61
69
|
const gatewayRequest = {
|
|
@@ -67,14 +75,14 @@ async function handleRequest(request, params, method) {
|
|
|
67
75
|
};
|
|
68
76
|
// Handle the request (pass provider name if specified)
|
|
69
77
|
const finalProviderName = providerName || bodyProvider;
|
|
70
|
-
const response = await handleGatewayRequest(modelId, gatewayRequest, finalProviderName || undefined);
|
|
78
|
+
const response = await (0, gateway_1.handleGatewayRequest)(modelId, gatewayRequest, finalProviderName || undefined);
|
|
71
79
|
// Return response
|
|
72
|
-
return NextResponse.json(response.body, {
|
|
80
|
+
return server_1.NextResponse.json(response.body, {
|
|
73
81
|
status: response.status,
|
|
74
82
|
headers: response.headers,
|
|
75
83
|
});
|
|
76
84
|
}
|
|
77
85
|
catch (error) {
|
|
78
|
-
return NextResponse.json({ error: { message: error.message || 'Internal server error' } }, { status: 500 });
|
|
86
|
+
return server_1.NextResponse.json({ error: { message: error.message || 'Internal server error' } }, { status: 500 });
|
|
79
87
|
}
|
|
80
88
|
}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtime = void 0;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
exports.GET = GET;
|
|
6
|
+
const server_1 = require("next/server");
|
|
7
|
+
const database_1 = require("@/db/database");
|
|
8
|
+
const gateway_1 = require("@/server/gateway");
|
|
4
9
|
// Ensure Node.js runtime (required for SQLite)
|
|
5
|
-
|
|
10
|
+
exports.runtime = 'nodejs';
|
|
6
11
|
// Handle requests to /api/gateway (root gateway endpoint)
|
|
7
|
-
|
|
12
|
+
async function POST(request) {
|
|
8
13
|
return handleGatewayRequestDirect(request, 'POST');
|
|
9
14
|
}
|
|
10
|
-
|
|
15
|
+
async function GET(request) {
|
|
11
16
|
return handleGatewayRequestDirect(request, 'GET');
|
|
12
17
|
}
|
|
13
18
|
async function handleGatewayRequestDirect(request, method) {
|
|
14
19
|
try {
|
|
15
|
-
getDatabase();
|
|
20
|
+
(0, database_1.getDatabase)();
|
|
16
21
|
const searchParams = request.nextUrl.searchParams;
|
|
17
22
|
let modelId = searchParams.get('model') || searchParams.get('model_id');
|
|
18
23
|
const providerName = searchParams.get('provider');
|
|
@@ -35,7 +40,7 @@ async function handleGatewayRequestDirect(request, method) {
|
|
|
35
40
|
}
|
|
36
41
|
const bodyProvider = body?.provider;
|
|
37
42
|
if (!modelId) {
|
|
38
|
-
return NextResponse.json({ error: { message: 'Model ID not specified' } }, { status: 400 });
|
|
43
|
+
return server_1.NextResponse.json({ error: { message: 'Model ID not specified' } }, { status: 400 });
|
|
39
44
|
}
|
|
40
45
|
// Build gateway request
|
|
41
46
|
const gatewayRequest = {
|
|
@@ -47,14 +52,14 @@ async function handleGatewayRequestDirect(request, method) {
|
|
|
47
52
|
};
|
|
48
53
|
// Handle the request (pass provider name if specified)
|
|
49
54
|
const finalProviderName = providerName || bodyProvider;
|
|
50
|
-
const response = await handleGatewayRequest(modelId, gatewayRequest, finalProviderName || undefined);
|
|
55
|
+
const response = await (0, gateway_1.handleGatewayRequest)(modelId, gatewayRequest, finalProviderName || undefined);
|
|
51
56
|
// Return response
|
|
52
|
-
return NextResponse.json(response.body, {
|
|
57
|
+
return server_1.NextResponse.json(response.body, {
|
|
53
58
|
status: response.status,
|
|
54
59
|
headers: response.headers,
|
|
55
60
|
});
|
|
56
61
|
}
|
|
57
62
|
catch (error) {
|
|
58
|
-
return NextResponse.json({ error: { message: error.message || 'Internal server error' } }, { status: 500 });
|
|
63
|
+
return server_1.NextResponse.json({ error: { message: error.message || 'Internal server error' } }, { status: 500 });
|
|
59
64
|
}
|
|
60
65
|
}
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dynamic = exports.runtime = void 0;
|
|
4
|
+
exports.GET = GET;
|
|
5
|
+
const server_1 = require("next/server");
|
|
6
|
+
const database_1 = require("@/db/database");
|
|
7
|
+
const queries_1 = require("@/db/queries");
|
|
4
8
|
// Ensure Node.js runtime (required for SQLite)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
exports.runtime = 'nodejs';
|
|
10
|
+
exports.dynamic = 'force-dynamic';
|
|
11
|
+
async function GET(request) {
|
|
8
12
|
try {
|
|
9
|
-
getDatabase();
|
|
13
|
+
(0, database_1.getDatabase)();
|
|
10
14
|
const { searchParams } = new URL(request.url);
|
|
11
15
|
const id = searchParams.get('id');
|
|
12
16
|
const limit = parseInt(searchParams.get('limit') || '100');
|
|
13
17
|
const offset = parseInt(searchParams.get('offset') || '0');
|
|
14
18
|
const modelId = searchParams.get('model_id');
|
|
15
19
|
if (id) {
|
|
16
|
-
const log = getRequestLogById(parseInt(id));
|
|
20
|
+
const log = (0, queries_1.getRequestLogById)(parseInt(id));
|
|
17
21
|
if (!log) {
|
|
18
|
-
return NextResponse.json({ error: 'Log not found' }, { status: 404 });
|
|
22
|
+
return server_1.NextResponse.json({ error: 'Log not found' }, { status: 404 });
|
|
19
23
|
}
|
|
20
|
-
return NextResponse.json(log);
|
|
24
|
+
return server_1.NextResponse.json(log);
|
|
21
25
|
}
|
|
22
|
-
const logs = getRequestLogs(limit, offset, modelId ? parseInt(modelId) : undefined);
|
|
23
|
-
const total = getRequestLogCount(modelId ? parseInt(modelId) : undefined);
|
|
24
|
-
return NextResponse.json({
|
|
26
|
+
const logs = (0, queries_1.getRequestLogs)(limit, offset, modelId ? parseInt(modelId) : undefined);
|
|
27
|
+
const total = (0, queries_1.getRequestLogCount)(modelId ? parseInt(modelId) : undefined);
|
|
28
|
+
return server_1.NextResponse.json({
|
|
25
29
|
logs,
|
|
26
30
|
total,
|
|
27
31
|
limit,
|
|
@@ -30,6 +34,6 @@ export async function GET(request) {
|
|
|
30
34
|
}
|
|
31
35
|
catch (error) {
|
|
32
36
|
console.error('Logs API error:', error);
|
|
33
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
37
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
34
38
|
}
|
|
35
39
|
}
|
|
@@ -1,56 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtime = void 0;
|
|
4
|
+
exports.GET = GET;
|
|
5
|
+
exports.POST = POST;
|
|
6
|
+
exports.PUT = PUT;
|
|
7
|
+
exports.DELETE = DELETE;
|
|
8
|
+
exports.PATCH = PATCH;
|
|
9
|
+
const server_1 = require("next/server");
|
|
10
|
+
const database_1 = require("@/db/database");
|
|
11
|
+
const queries_1 = require("@/db/queries");
|
|
12
|
+
const providers_1 = require("@/server/providers");
|
|
5
13
|
// Ensure Node.js runtime (required for SQLite)
|
|
6
|
-
|
|
7
|
-
|
|
14
|
+
exports.runtime = 'nodejs';
|
|
15
|
+
async function GET(request) {
|
|
8
16
|
try {
|
|
9
|
-
getDatabase();
|
|
17
|
+
(0, database_1.getDatabase)();
|
|
10
18
|
const { searchParams } = new URL(request.url);
|
|
11
19
|
const providerId = searchParams.get('provider_id');
|
|
12
20
|
if (providerId) {
|
|
13
|
-
const models = getModelsByProvider(parseInt(providerId));
|
|
14
|
-
return NextResponse.json(models);
|
|
21
|
+
const models = (0, queries_1.getModelsByProvider)(parseInt(providerId));
|
|
22
|
+
return server_1.NextResponse.json(models);
|
|
15
23
|
}
|
|
16
24
|
else {
|
|
17
|
-
const models = getAllModels();
|
|
18
|
-
return NextResponse.json(models);
|
|
25
|
+
const models = (0, queries_1.getAllModels)();
|
|
26
|
+
return server_1.NextResponse.json(models);
|
|
19
27
|
}
|
|
20
28
|
}
|
|
21
29
|
catch (error) {
|
|
22
30
|
console.error('Models API error:', error);
|
|
23
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
31
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
24
32
|
}
|
|
25
33
|
}
|
|
26
|
-
|
|
34
|
+
async function POST(request) {
|
|
27
35
|
try {
|
|
28
|
-
getDatabase();
|
|
36
|
+
(0, database_1.getDatabase)();
|
|
29
37
|
const body = await request.json();
|
|
30
38
|
const { provider_id, name, model_id, enabled } = body;
|
|
31
39
|
if (!provider_id || !name || !model_id) {
|
|
32
|
-
return NextResponse.json({ error: 'Missing required fields' }, { status: 400 });
|
|
40
|
+
return server_1.NextResponse.json({ error: 'Missing required fields' }, { status: 400 });
|
|
33
41
|
}
|
|
34
|
-
const model = createModel({
|
|
42
|
+
const model = (0, queries_1.createModel)({
|
|
35
43
|
provider_id,
|
|
36
44
|
name,
|
|
37
45
|
model_id,
|
|
38
46
|
enabled: enabled !== undefined ? enabled : true,
|
|
39
47
|
});
|
|
40
|
-
return NextResponse.json(model);
|
|
48
|
+
return server_1.NextResponse.json(model);
|
|
41
49
|
}
|
|
42
50
|
catch (error) {
|
|
43
51
|
console.error('Models API error:', error);
|
|
44
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
52
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
|
-
|
|
55
|
+
async function PUT(request) {
|
|
48
56
|
try {
|
|
49
|
-
getDatabase();
|
|
57
|
+
(0, database_1.getDatabase)();
|
|
50
58
|
const body = await request.json();
|
|
51
59
|
const { id, name, model_id, enabled, provider_id } = body;
|
|
52
60
|
if (!id) {
|
|
53
|
-
return NextResponse.json({ error: 'Model ID is required' }, { status: 400 });
|
|
61
|
+
return server_1.NextResponse.json({ error: 'Model ID is required' }, { status: 400 });
|
|
54
62
|
}
|
|
55
63
|
const updateData = {};
|
|
56
64
|
if (name !== undefined)
|
|
@@ -61,48 +69,48 @@ export async function PUT(request) {
|
|
|
61
69
|
updateData.enabled = enabled;
|
|
62
70
|
if (provider_id !== undefined)
|
|
63
71
|
updateData.provider_id = provider_id;
|
|
64
|
-
const model = updateModel(id, updateData);
|
|
72
|
+
const model = (0, queries_1.updateModel)(id, updateData);
|
|
65
73
|
if (!model) {
|
|
66
|
-
return NextResponse.json({ error: 'Model not found' }, { status: 404 });
|
|
74
|
+
return server_1.NextResponse.json({ error: 'Model not found' }, { status: 404 });
|
|
67
75
|
}
|
|
68
|
-
return NextResponse.json(model);
|
|
76
|
+
return server_1.NextResponse.json(model);
|
|
69
77
|
}
|
|
70
78
|
catch (error) {
|
|
71
79
|
console.error('Models API error:', error);
|
|
72
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
80
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
73
81
|
}
|
|
74
82
|
}
|
|
75
|
-
|
|
83
|
+
async function DELETE(request) {
|
|
76
84
|
try {
|
|
77
|
-
getDatabase();
|
|
85
|
+
(0, database_1.getDatabase)();
|
|
78
86
|
const { searchParams } = new URL(request.url);
|
|
79
87
|
const id = searchParams.get('id');
|
|
80
88
|
if (!id) {
|
|
81
|
-
return NextResponse.json({ error: 'Model ID is required' }, { status: 400 });
|
|
89
|
+
return server_1.NextResponse.json({ error: 'Model ID is required' }, { status: 400 });
|
|
82
90
|
}
|
|
83
|
-
const success = deleteModel(parseInt(id));
|
|
91
|
+
const success = (0, queries_1.deleteModel)(parseInt(id));
|
|
84
92
|
if (!success) {
|
|
85
|
-
return NextResponse.json({ error: 'Model not found' }, { status: 404 });
|
|
93
|
+
return server_1.NextResponse.json({ error: 'Model not found' }, { status: 404 });
|
|
86
94
|
}
|
|
87
|
-
return NextResponse.json({ success: true });
|
|
95
|
+
return server_1.NextResponse.json({ success: true });
|
|
88
96
|
}
|
|
89
97
|
catch (error) {
|
|
90
98
|
console.error('Models API error:', error);
|
|
91
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
99
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
// Fetch models from provider
|
|
95
|
-
|
|
103
|
+
async function PATCH(request) {
|
|
96
104
|
try {
|
|
97
|
-
getDatabase();
|
|
105
|
+
(0, database_1.getDatabase)();
|
|
98
106
|
const body = await request.json();
|
|
99
107
|
const { provider_id } = body;
|
|
100
108
|
if (!provider_id) {
|
|
101
|
-
return NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
109
|
+
return server_1.NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
102
110
|
}
|
|
103
|
-
const provider = getProviderById(provider_id);
|
|
111
|
+
const provider = (0, queries_1.getProviderById)(provider_id);
|
|
104
112
|
if (!provider) {
|
|
105
|
-
return NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
113
|
+
return server_1.NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
106
114
|
}
|
|
107
115
|
console.log('[Models API] Fetching models for provider:', {
|
|
108
116
|
providerId: provider_id,
|
|
@@ -110,23 +118,23 @@ export async function PATCH(request) {
|
|
|
110
118
|
protocol: provider.protocol,
|
|
111
119
|
baseUrl: provider.base_url,
|
|
112
120
|
});
|
|
113
|
-
const adapter = getProviderAdapter(provider.protocol);
|
|
121
|
+
const adapter = (0, providers_1.getProviderAdapter)(provider.protocol);
|
|
114
122
|
const models = await adapter.listModels(provider);
|
|
115
123
|
console.log('[Models API] Fetched models:', models.length);
|
|
116
124
|
// Create or update models
|
|
117
125
|
const results = [];
|
|
118
126
|
for (const modelInfo of models) {
|
|
119
127
|
try {
|
|
120
|
-
const existing = getAllModels().find(m => m.provider_id === provider_id && m.model_id === modelInfo.id);
|
|
128
|
+
const existing = (0, queries_1.getAllModels)().find(m => m.provider_id === provider_id && m.model_id === modelInfo.id);
|
|
121
129
|
if (existing) {
|
|
122
|
-
updateModel(existing.id, {
|
|
130
|
+
(0, queries_1.updateModel)(existing.id, {
|
|
123
131
|
name: modelInfo.name,
|
|
124
132
|
model_id: modelInfo.id,
|
|
125
133
|
});
|
|
126
134
|
results.push({ ...existing, name: modelInfo.name });
|
|
127
135
|
}
|
|
128
136
|
else {
|
|
129
|
-
const newModel = createModel({
|
|
137
|
+
const newModel = (0, queries_1.createModel)({
|
|
130
138
|
provider_id,
|
|
131
139
|
name: modelInfo.name,
|
|
132
140
|
model_id: modelInfo.id,
|
|
@@ -139,7 +147,7 @@ export async function PATCH(request) {
|
|
|
139
147
|
console.error(`Failed to create/update model ${modelInfo.id}:`, error);
|
|
140
148
|
}
|
|
141
149
|
}
|
|
142
|
-
return NextResponse.json({
|
|
150
|
+
return server_1.NextResponse.json({
|
|
143
151
|
success: true,
|
|
144
152
|
models: results,
|
|
145
153
|
count: results.length,
|
|
@@ -147,6 +155,6 @@ export async function PATCH(request) {
|
|
|
147
155
|
}
|
|
148
156
|
catch (error) {
|
|
149
157
|
console.error('Models API error:', error);
|
|
150
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
158
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
151
159
|
}
|
|
152
160
|
}
|
|
@@ -1,77 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runtime = void 0;
|
|
4
|
+
exports.GET = GET;
|
|
5
|
+
exports.POST = POST;
|
|
6
|
+
exports.PUT = PUT;
|
|
7
|
+
exports.DELETE = DELETE;
|
|
8
|
+
const server_1 = require("next/server");
|
|
9
|
+
const database_1 = require("@/db/database");
|
|
10
|
+
const queries_1 = require("@/db/queries");
|
|
11
|
+
const crypto_1 = require("@/server/crypto");
|
|
5
12
|
// Ensure Node.js runtime (required for SQLite)
|
|
6
|
-
|
|
7
|
-
|
|
13
|
+
exports.runtime = 'nodejs';
|
|
14
|
+
async function GET(request) {
|
|
8
15
|
try {
|
|
9
|
-
getDatabase();
|
|
16
|
+
(0, database_1.getDatabase)();
|
|
10
17
|
const { searchParams } = new URL(request.url);
|
|
11
18
|
const id = searchParams.get('id');
|
|
12
19
|
const includeKey = searchParams.get('includeKey') === 'true';
|
|
13
20
|
// If ID is provided, return single provider (for editing)
|
|
14
21
|
if (id) {
|
|
15
|
-
const provider = getProviderById(parseInt(id));
|
|
22
|
+
const provider = (0, queries_1.getProviderById)(parseInt(id));
|
|
16
23
|
if (!provider) {
|
|
17
|
-
return NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
24
|
+
return server_1.NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
18
25
|
}
|
|
19
26
|
// Return with decrypted API key if requested (for editing)
|
|
20
|
-
return NextResponse.json({
|
|
27
|
+
return server_1.NextResponse.json({
|
|
21
28
|
...provider,
|
|
22
|
-
api_key: includeKey ? decryptApiKey(provider.api_key) : '***',
|
|
29
|
+
api_key: includeKey ? (0, crypto_1.decryptApiKey)(provider.api_key) : '***',
|
|
23
30
|
});
|
|
24
31
|
}
|
|
25
32
|
// Return all providers
|
|
26
|
-
const providers = getAllProviders();
|
|
33
|
+
const providers = (0, queries_1.getAllProviders)();
|
|
27
34
|
// Don't return API keys in list view
|
|
28
35
|
const sanitized = providers.map(p => ({
|
|
29
36
|
...p,
|
|
30
37
|
api_key: '***',
|
|
31
38
|
}));
|
|
32
|
-
return NextResponse.json(sanitized);
|
|
39
|
+
return server_1.NextResponse.json(sanitized);
|
|
33
40
|
}
|
|
34
41
|
catch (error) {
|
|
35
42
|
console.error('Providers API error:', error);
|
|
36
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
43
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
37
44
|
}
|
|
38
45
|
}
|
|
39
|
-
|
|
46
|
+
async function POST(request) {
|
|
40
47
|
try {
|
|
41
|
-
getDatabase();
|
|
48
|
+
(0, database_1.getDatabase)();
|
|
42
49
|
const body = await request.json();
|
|
43
50
|
const { name, protocol, base_url, api_key } = body;
|
|
44
51
|
if (!name || !protocol || !base_url || !api_key) {
|
|
45
|
-
return NextResponse.json({ error: 'Missing required fields' }, { status: 400 });
|
|
52
|
+
return server_1.NextResponse.json({ error: 'Missing required fields' }, { status: 400 });
|
|
46
53
|
}
|
|
47
|
-
const encryptedKey = encryptApiKey(api_key.trim());
|
|
48
|
-
const provider = createProvider({
|
|
54
|
+
const encryptedKey = (0, crypto_1.encryptApiKey)(api_key.trim());
|
|
55
|
+
const provider = (0, queries_1.createProvider)({
|
|
49
56
|
name,
|
|
50
57
|
protocol,
|
|
51
58
|
base_url,
|
|
52
59
|
api_key: encryptedKey,
|
|
53
60
|
});
|
|
54
|
-
return NextResponse.json({
|
|
61
|
+
return server_1.NextResponse.json({
|
|
55
62
|
...provider,
|
|
56
63
|
api_key: '***',
|
|
57
64
|
});
|
|
58
65
|
}
|
|
59
66
|
catch (error) {
|
|
60
67
|
console.error('Providers API error:', error);
|
|
61
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
68
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
|
-
|
|
71
|
+
async function PUT(request) {
|
|
65
72
|
try {
|
|
66
|
-
getDatabase();
|
|
73
|
+
(0, database_1.getDatabase)();
|
|
67
74
|
const body = await request.json();
|
|
68
75
|
const { id, name, protocol, base_url, api_key } = body;
|
|
69
76
|
if (!id) {
|
|
70
|
-
return NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
77
|
+
return server_1.NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
71
78
|
}
|
|
72
|
-
const existingProvider = getProviderById(id);
|
|
79
|
+
const existingProvider = (0, queries_1.getProviderById)(id);
|
|
73
80
|
if (!existingProvider) {
|
|
74
|
-
return NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
81
|
+
return server_1.NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
75
82
|
}
|
|
76
83
|
const updateData = {};
|
|
77
84
|
if (name !== undefined)
|
|
@@ -81,38 +88,38 @@ export async function PUT(request) {
|
|
|
81
88
|
if (base_url !== undefined)
|
|
82
89
|
updateData.base_url = base_url;
|
|
83
90
|
if (api_key !== undefined && api_key !== null && api_key.trim() !== '') {
|
|
84
|
-
updateData.api_key = encryptApiKey(api_key.trim());
|
|
91
|
+
updateData.api_key = (0, crypto_1.encryptApiKey)(api_key.trim());
|
|
85
92
|
}
|
|
86
|
-
const provider = updateProvider(id, updateData);
|
|
93
|
+
const provider = (0, queries_1.updateProvider)(id, updateData);
|
|
87
94
|
if (!provider) {
|
|
88
|
-
return NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
95
|
+
return server_1.NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
89
96
|
}
|
|
90
|
-
return NextResponse.json({
|
|
97
|
+
return server_1.NextResponse.json({
|
|
91
98
|
...provider,
|
|
92
99
|
api_key: '***',
|
|
93
100
|
});
|
|
94
101
|
}
|
|
95
102
|
catch (error) {
|
|
96
103
|
console.error('Providers API error:', error);
|
|
97
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
104
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
98
105
|
}
|
|
99
106
|
}
|
|
100
|
-
|
|
107
|
+
async function DELETE(request) {
|
|
101
108
|
try {
|
|
102
|
-
getDatabase();
|
|
109
|
+
(0, database_1.getDatabase)();
|
|
103
110
|
const { searchParams } = new URL(request.url);
|
|
104
111
|
const id = searchParams.get('id');
|
|
105
112
|
if (!id) {
|
|
106
|
-
return NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
113
|
+
return server_1.NextResponse.json({ error: 'Provider ID is required' }, { status: 400 });
|
|
107
114
|
}
|
|
108
|
-
const success = deleteProvider(parseInt(id));
|
|
115
|
+
const success = (0, queries_1.deleteProvider)(parseInt(id));
|
|
109
116
|
if (!success) {
|
|
110
|
-
return NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
117
|
+
return server_1.NextResponse.json({ error: 'Provider not found' }, { status: 404 });
|
|
111
118
|
}
|
|
112
|
-
return NextResponse.json({ success: true });
|
|
119
|
+
return server_1.NextResponse.json({ success: true });
|
|
113
120
|
}
|
|
114
121
|
catch (error) {
|
|
115
122
|
console.error('Providers API error:', error);
|
|
116
|
-
return NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
123
|
+
return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
|
|
117
124
|
}
|
|
118
125
|
}
|