@lastbrain/ai-ui-core 1.0.34 → 1.0.36
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/client/createClient.d.ts.map +1 -1
- package/dist/client/createClient.js +7 -6
- package/dist/route-handlers/nextjs/lb-proxy.d.ts.map +1 -1
- package/dist/route-handlers/nextjs/lb-proxy.js +13 -20
- package/package.json +1 -1
- package/src/client/createClient.ts +7 -6
- package/src/route-handlers/nextjs/lb-proxy.ts +15 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createClient.d.ts","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,QAAQ,EACR,qBAAqB,EACtB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createClient.d.ts","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,QAAQ,EACR,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAyGlB,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY;qBAsBnB,OAAO,CAAC,QAAQ,EAAE,CAAC;iCAqKP,OAAO,CAAC,qBAAqB,CAAC;wBAhIrC,aAAa,KAAG,OAAO,CAAC,cAAc,CAAC;yBAoCtC,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC;iBAqDjD,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC;qBAkBvC,OAAO,CAAC,QAAQ,CAAC;EAiD9C"}
|
|
@@ -47,16 +47,17 @@ function buildUrl(baseUrl, endpoint) {
|
|
|
47
47
|
const isPublicApi = baseUrl.includes("/api/public/v1");
|
|
48
48
|
const isExternalProxy = baseUrl.includes("/api/lastbrain");
|
|
49
49
|
// Map endpoints for internal vs external context
|
|
50
|
+
// Pour external: le proxy ajoute /api/ai/ automatiquement, donc on envoie juste auth/*, public/*, etc.
|
|
50
51
|
const endpointMap = {
|
|
51
52
|
// Text and image generation
|
|
52
|
-
"text-ai": { internal: "/generate-text", external: "/text-ai" },
|
|
53
|
-
"image-ai": { internal: "/generate-image", external: "/image-ai" },
|
|
54
|
-
// Auth endpoints
|
|
55
|
-
status: { internal: "/auth/status", external: "/status" },
|
|
56
|
-
provider: { internal: "/auth/provider", external: "/provider" },
|
|
53
|
+
"text-ai": { internal: "/generate-text", external: "/auth/text-ai" },
|
|
54
|
+
"image-ai": { internal: "/generate-image", external: "/auth/image-ai" },
|
|
55
|
+
// Auth endpoints - le proxy ajoutera /api/ai/ devant
|
|
56
|
+
status: { internal: "/auth/status", external: "/auth/status" },
|
|
57
|
+
provider: { internal: "/auth/provider", external: "/auth/provider" },
|
|
57
58
|
"gateway-models": {
|
|
58
59
|
internal: "/public/gateway-models",
|
|
59
|
-
external: "/gateway-models",
|
|
60
|
+
external: "/public/gateway-models",
|
|
60
61
|
},
|
|
61
62
|
// Other endpoints
|
|
62
63
|
"track-usage": { internal: "/track-usage", external: "/track-usage" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lb-proxy.d.ts","sourceRoot":"","sources":["../../../src/route-handlers/nextjs/lb-proxy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,aAAkB;
|
|
1
|
+
{"version":3,"file":"lb-proxy.d.ts","sourceRoot":"","sources":["../../../src/route-handlers/nextjs/lb-proxy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,aAAkB;mBA6BlD,WAAW,YACV;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACjD,OAAO,CAAC,YAAY,CAAC;oBAFb,WAAW,YACV;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACjD,OAAO,CAAC,YAAY,CAAC;mBAFb,WAAW,YACV;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACjD,OAAO,CAAC,YAAY,CAAC;sBAFb,WAAW,YACV;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACjD,OAAO,CAAC,YAAY,CAAC;qBAFb,WAAW,YACV;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,KACjD,OAAO,CAAC,YAAY,CAAC;EAoIzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,MAAe,GACzB,YAAY,CAYd;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CAGzE"}
|
|
@@ -23,32 +23,15 @@ export function createLBProxyHandler(config = {}) {
|
|
|
23
23
|
const isLegacyBaseUrl = baseUrl.includes("/api/public/v1");
|
|
24
24
|
/**
|
|
25
25
|
* Détermine le préfixe API à ajouter selon le path
|
|
26
|
-
* - Routes auth/* : /api/ai/auth/*
|
|
27
|
-
* - Routes ai/* : /api/ai/* (déjà préfixé)
|
|
28
|
-
* - Routes public/* : /api/ai/public/*
|
|
29
|
-
* - Routes status, provider, gateway-models : /api/ai/*
|
|
30
26
|
* - Legacy : pas de préfixe si baseUrl contient déjà /api/public/v1
|
|
27
|
+
* - Sinon : toujours /api/ai (le client envoie les bons paths)
|
|
31
28
|
*/
|
|
32
29
|
function getApiPrefix(path) {
|
|
33
30
|
if (isLegacyBaseUrl) {
|
|
34
31
|
return ""; // Legacy: baseUrl contient déjà le préfixe
|
|
35
32
|
}
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
return "/api";
|
|
39
|
-
}
|
|
40
|
-
// Routes qui vont directement sous /api/ai/
|
|
41
|
-
const directRoutes = [
|
|
42
|
-
"auth/",
|
|
43
|
-
"public/",
|
|
44
|
-
"status",
|
|
45
|
-
"provider",
|
|
46
|
-
"gateway-models",
|
|
47
|
-
];
|
|
48
|
-
if (directRoutes.some(route => path.startsWith(route) || path === route)) {
|
|
49
|
-
return "/api/ai";
|
|
50
|
-
}
|
|
51
|
-
// Par défaut, utiliser /api/ai
|
|
33
|
+
// Pour le nouveau format, toujours /api/ai
|
|
34
|
+
// Le client envoie déjà les bons paths (auth/*, public/*, ai/*)
|
|
52
35
|
return "/api/ai";
|
|
53
36
|
}
|
|
54
37
|
/**
|
|
@@ -105,10 +88,20 @@ export function createLBProxyHandler(config = {}) {
|
|
|
105
88
|
// Lire le cookie de session
|
|
106
89
|
const sessionToken = request.cookies.get(sessionCookieName)?.value;
|
|
107
90
|
if (sessionToken) {
|
|
91
|
+
// Envoyer le cookie à la fois comme Authorization ET comme Cookie
|
|
108
92
|
headers["Authorization"] = `Bearer ${sessionToken}`;
|
|
93
|
+
headers["Cookie"] = `${sessionCookieName}=${sessionToken}`;
|
|
94
|
+
console.log("[LB Proxy] Forwarding session cookie:", {
|
|
95
|
+
name: sessionCookieName,
|
|
96
|
+
hasValue: !!sessionToken,
|
|
97
|
+
});
|
|
109
98
|
}
|
|
110
99
|
else if (!isPublicPath) {
|
|
111
100
|
// Pas d'auth disponible et route protégée
|
|
101
|
+
console.log("[LB Proxy] No auth available for protected route:", {
|
|
102
|
+
path,
|
|
103
|
+
isPublicPath,
|
|
104
|
+
});
|
|
112
105
|
return NextResponse.json({
|
|
113
106
|
error: "No authentication provided",
|
|
114
107
|
hint: "Set LB_API_KEY env variable or login via /api/lastbrain/auth/login",
|
package/package.json
CHANGED
|
@@ -82,16 +82,17 @@ function buildUrl(baseUrl: string, endpoint: string): string {
|
|
|
82
82
|
const isExternalProxy = baseUrl.includes("/api/lastbrain");
|
|
83
83
|
|
|
84
84
|
// Map endpoints for internal vs external context
|
|
85
|
+
// Pour external: le proxy ajoute /api/ai/ automatiquement, donc on envoie juste auth/*, public/*, etc.
|
|
85
86
|
const endpointMap: Record<string, { internal: string; external: string }> = {
|
|
86
87
|
// Text and image generation
|
|
87
|
-
"text-ai": { internal: "/generate-text", external: "/text-ai" },
|
|
88
|
-
"image-ai": { internal: "/generate-image", external: "/image-ai" },
|
|
89
|
-
// Auth endpoints
|
|
90
|
-
status: { internal: "/auth/status", external: "/status" },
|
|
91
|
-
provider: { internal: "/auth/provider", external: "/provider" },
|
|
88
|
+
"text-ai": { internal: "/generate-text", external: "/auth/text-ai" },
|
|
89
|
+
"image-ai": { internal: "/generate-image", external: "/auth/image-ai" },
|
|
90
|
+
// Auth endpoints - le proxy ajoutera /api/ai/ devant
|
|
91
|
+
status: { internal: "/auth/status", external: "/auth/status" },
|
|
92
|
+
provider: { internal: "/auth/provider", external: "/auth/provider" },
|
|
92
93
|
"gateway-models": {
|
|
93
94
|
internal: "/public/gateway-models",
|
|
94
|
-
external: "/gateway-models",
|
|
95
|
+
external: "/public/gateway-models",
|
|
95
96
|
},
|
|
96
97
|
// Other endpoints
|
|
97
98
|
"track-usage": { internal: "/track-usage", external: "/track-usage" },
|
|
@@ -40,39 +40,19 @@ export function createLBProxyHandler(config: LBProxyConfig = {}) {
|
|
|
40
40
|
|
|
41
41
|
// Déterminer le chemin de base API selon le format de baseUrl et le path
|
|
42
42
|
const isLegacyBaseUrl = baseUrl.includes("/api/public/v1");
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
/**
|
|
45
45
|
* Détermine le préfixe API à ajouter selon le path
|
|
46
|
-
* - Routes auth/* : /api/ai/auth/*
|
|
47
|
-
* - Routes ai/* : /api/ai/* (déjà préfixé)
|
|
48
|
-
* - Routes public/* : /api/ai/public/*
|
|
49
|
-
* - Routes status, provider, gateway-models : /api/ai/*
|
|
50
46
|
* - Legacy : pas de préfixe si baseUrl contient déjà /api/public/v1
|
|
47
|
+
* - Sinon : toujours /api/ai (le client envoie les bons paths)
|
|
51
48
|
*/
|
|
52
49
|
function getApiPrefix(path: string): string {
|
|
53
50
|
if (isLegacyBaseUrl) {
|
|
54
51
|
return ""; // Legacy: baseUrl contient déjà le préfixe
|
|
55
52
|
}
|
|
56
|
-
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
return "/api";
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Routes qui vont directement sous /api/ai/
|
|
63
|
-
const directRoutes = [
|
|
64
|
-
"auth/",
|
|
65
|
-
"public/",
|
|
66
|
-
"status",
|
|
67
|
-
"provider",
|
|
68
|
-
"gateway-models",
|
|
69
|
-
];
|
|
70
|
-
|
|
71
|
-
if (directRoutes.some(route => path.startsWith(route) || path === route)) {
|
|
72
|
-
return "/api/ai";
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Par défaut, utiliser /api/ai
|
|
53
|
+
|
|
54
|
+
// Pour le nouveau format, toujours /api/ai
|
|
55
|
+
// Le client envoie déjà les bons paths (auth/*, public/*, ai/*)
|
|
76
56
|
return "/api/ai";
|
|
77
57
|
}
|
|
78
58
|
|
|
@@ -138,9 +118,19 @@ export function createLBProxyHandler(config: LBProxyConfig = {}) {
|
|
|
138
118
|
// Lire le cookie de session
|
|
139
119
|
const sessionToken = request.cookies.get(sessionCookieName)?.value;
|
|
140
120
|
if (sessionToken) {
|
|
121
|
+
// Envoyer le cookie à la fois comme Authorization ET comme Cookie
|
|
141
122
|
headers["Authorization"] = `Bearer ${sessionToken}`;
|
|
123
|
+
headers["Cookie"] = `${sessionCookieName}=${sessionToken}`;
|
|
124
|
+
console.log("[LB Proxy] Forwarding session cookie:", {
|
|
125
|
+
name: sessionCookieName,
|
|
126
|
+
hasValue: !!sessionToken,
|
|
127
|
+
});
|
|
142
128
|
} else if (!isPublicPath) {
|
|
143
129
|
// Pas d'auth disponible et route protégée
|
|
130
|
+
console.log("[LB Proxy] No auth available for protected route:", {
|
|
131
|
+
path,
|
|
132
|
+
isPublicPath,
|
|
133
|
+
});
|
|
144
134
|
return NextResponse.json(
|
|
145
135
|
{
|
|
146
136
|
error: "No authentication provided",
|