@lastbrain/ai-ui-core 1.0.53 → 1.0.55

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.
@@ -165,7 +165,7 @@ export function createClient(config) {
165
165
  // Silently fail - don't block the response
166
166
  });
167
167
  }
168
- catch (_error) {
168
+ catch {
169
169
  // Ignore tracking errors
170
170
  }
171
171
  }
@@ -207,7 +207,7 @@ export function createClient(config) {
207
207
  // Silently fail - don't block the response
208
208
  });
209
209
  }
210
- catch (error) {
210
+ catch {
211
211
  // Ignore tracking errors
212
212
  }
213
213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lb-client.d.ts","sourceRoot":"","sources":["../../src/client/lb-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lb-client.d.ts","sourceRoot":"","sources":["../../src/client/lb-client.ts"],"names":[],"mappings":"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"}
@@ -132,7 +132,10 @@ export class LBClient {
132
132
  }
133
133
  async getHistory(params, sessionToken) {
134
134
  const search = params ? `?${new URLSearchParams(params).toString()}` : "";
135
- return this.request(`/auth/history${search}`, { method: "GET", sessionToken });
135
+ return this.request(`/auth/history${search}`, {
136
+ method: "GET",
137
+ sessionToken,
138
+ });
136
139
  }
137
140
  async getHistoryItem(id, sessionToken) {
138
141
  return this.request(`/auth/history/${id}`, { method: "GET", sessionToken });
@@ -1 +1 @@
1
- {"version":3,"file":"enhanced-gateway.d.ts","sourceRoot":"","sources":["../../../src/route-handlers/nextjs/enhanced-gateway.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,GAAG;;YAKotC,CAAC;;iDALtsC,CAAC;AAChC,eAAO,MAAM,IAAI;;YAImtC,CAAC;;iDAJpsC,CAAC;AAClC,eAAO,MAAM,GAAG;;YAGotC,CAAC;;iDAHtsC,CAAC;AAChC,eAAO,MAAM,MAAM;;YAEitC,CAAC;;iDAFhsC,CAAC;AACtC,eAAO,MAAM,KAAK;;YACktC,CAAC;;iDADlsC,CAAC"}
1
+ {"version":3,"file":"enhanced-gateway.d.ts","sourceRoot":"","sources":["../../../src/route-handlers/nextjs/enhanced-gateway.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,GAAG;;YAKqtC,CAAC;;iDALvsC,CAAC;AAChC,eAAO,MAAM,IAAI;;YAIotC,CAAC;;iDAJrsC,CAAC;AAClC,eAAO,MAAM,GAAG;;YAGqtC,CAAC;;iDAHvsC,CAAC;AAChC,eAAO,MAAM,MAAM;;YAEktC,CAAC;;iDAFjsC,CAAC;AACtC,eAAO,MAAM,KAAK;;YACmtC,CAAC;;iDADnsC,CAAC"}
@@ -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;mBA4BlD,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;EAuJzB;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"}
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;mBA4BlD,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;EAwJzB;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"}
@@ -26,7 +26,7 @@ export function createLBProxyHandler(config = {}) {
26
26
  * - Legacy : pas de préfixe si baseUrl contient déjà /api/public/v1
27
27
  * - Sinon : /api/ai pour toutes les routes
28
28
  */
29
- function getApiPrefix(path) {
29
+ function getApiPrefix(_path) {
30
30
  if (isLegacyBaseUrl) {
31
31
  return ""; // Legacy: baseUrl contient déjà le préfixe
32
32
  }
@@ -97,33 +97,34 @@ export function createLBProxyHandler(config = {}) {
97
97
  }
98
98
  headers["Cookie"] = cookieParts.join("; ");
99
99
  }
100
- // Authentification : LB_API_KEY ou session cookie
100
+ // Authentification priorité:
101
+ // 1) Authorization/x-lb-api-key explicites du client
102
+ // 2) lb_session cookie (identité utilisateur)
103
+ // 3) LB_API_KEY fallback serveur (mode service)
101
104
  if (!authorization && !explicitApiKeyHeader) {
102
- if (apiKey) {
105
+ if (sessionToken) {
106
+ // Envoyer le cookie à la fois comme Authorization ET comme Cookie
107
+ // pour que le backend résolve correctement authType=lb_session.
108
+ headers["Authorization"] = `Bearer ${sessionToken}`;
109
+ console.log("[LB Proxy] Forwarding session cookie:", {
110
+ name: sessionCookieName,
111
+ hasValue: !!sessionToken,
112
+ });
113
+ }
114
+ else if (apiKey) {
103
115
  headers["x-lb-api-key"] = apiKey;
104
116
  headers["Authorization"] = `Bearer ${apiKey}`;
105
117
  }
106
- else {
107
- // Lire le cookie de session
108
- if (sessionToken) {
109
- // Envoyer le cookie à la fois comme Authorization ET comme Cookie
110
- headers["Authorization"] = `Bearer ${sessionToken}`;
111
- console.log("[LB Proxy] Forwarding session cookie:", {
112
- name: sessionCookieName,
113
- hasValue: !!sessionToken,
114
- });
115
- }
116
- else if (!isPublicPath) {
117
- // Pas d'auth disponible et route protégée
118
- console.log("[LB Proxy] No auth available for protected route:", {
119
- path,
120
- isPublicPath,
121
- });
122
- return NextResponse.json({
123
- error: "No authentication provided",
124
- hint: "Set LB_API_KEY env variable or login via /api/lastbrain/auth/login",
125
- }, { status: 401 });
126
- }
118
+ else if (!isPublicPath) {
119
+ // Pas d'auth disponible et route protégée
120
+ console.log("[LB Proxy] No auth available for protected route:", {
121
+ path,
122
+ isPublicPath,
123
+ });
124
+ return NextResponse.json({
125
+ error: "No authentication provided",
126
+ hint: "Set LB_API_KEY env variable or login via /api/lastbrain/auth/login",
127
+ }, { status: 401 });
127
128
  }
128
129
  }
129
130
  // Lire le body si c'est POST/PUT/PATCH
@@ -52,6 +52,8 @@ export interface LBApiKey {
52
52
  name: string;
53
53
  /** Préfixe visible de la clé (ex: "lb_live_abc...") */
54
54
  keyPrefix: string;
55
+ /** Environnement de la clé */
56
+ env?: "dev" | "prod";
55
57
  scopes: string[];
56
58
  isActive: boolean;
57
59
  createdAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,YAAY,GACZ,qBAAqB,GACrB,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,qBAAqB;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,YAAY,GACZ,qBAAqB,GACrB,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,qBAAqB;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lastbrain/ai-ui-core",
3
- "version": "1.0.53",
3
+ "version": "1.0.55",
4
4
  "description": "Framework-agnostic core library for LastBrain AI UI Kit",
5
5
  "private": false,
6
6
  "type": "module",
@@ -231,7 +231,7 @@ export function createClient(config: ClientConfig) {
231
231
  }).catch(() => {
232
232
  // Silently fail - don't block the response
233
233
  });
234
- } catch (_error) {
234
+ } catch {
235
235
  // Ignore tracking errors
236
236
  }
237
237
  }
@@ -280,7 +280,7 @@ export function createClient(config: ClientConfig) {
280
280
  }).catch(() => {
281
281
  // Silently fail - don't block the response
282
282
  });
283
- } catch (error) {
283
+ } catch {
284
284
  // Ignore tracking errors
285
285
  }
286
286
  }
@@ -93,7 +93,8 @@ export class LBClient {
93
93
  getAuthHeaders(sessionToken?: string): Record<string, string> {
94
94
  const headers: Record<string, string> = {};
95
95
  const tokenToUse = sessionToken || this.sessionToken;
96
- const mode = this.mode === "auto" ? (this.apiKey ? "env-key" : "session") : this.mode;
96
+ const mode =
97
+ this.mode === "auto" ? (this.apiKey ? "env-key" : "session") : this.mode;
97
98
 
98
99
  if (this.selectedApiKeyId) {
99
100
  headers["x-lb-api-key-selected"] = this.selectedApiKeyId;
@@ -123,7 +124,10 @@ export class LBClient {
123
124
  sessionToken,
124
125
  ...fetchOptions
125
126
  } = options;
126
- const url = joinPath(baseUrl ? normalizeBaseUrl(baseUrl) : this.baseUrl, endpoint);
127
+ const url = joinPath(
128
+ baseUrl ? normalizeBaseUrl(baseUrl) : this.baseUrl,
129
+ endpoint
130
+ );
127
131
  const authHeaders = this.getAuthHeaders(sessionToken);
128
132
 
129
133
  const controller = new AbortController();
@@ -145,7 +149,9 @@ export class LBClient {
145
149
 
146
150
  if (!response.ok) {
147
151
  const payload = await response.json().catch(() => ({}));
148
- throw new Error(payload.error || payload.message || `HTTP ${response.status}`);
152
+ throw new Error(
153
+ payload.error || payload.message || `HTTP ${response.status}`
154
+ );
149
155
  }
150
156
 
151
157
  return (await response.json()) as T;
@@ -206,9 +212,15 @@ export class LBClient {
206
212
  return this.request("/auth/models/users", { method: "GET", sessionToken });
207
213
  }
208
214
 
209
- async getHistory(params?: Record<string, string>, sessionToken?: string): Promise<any> {
215
+ async getHistory(
216
+ params?: Record<string, string>,
217
+ sessionToken?: string
218
+ ): Promise<any> {
210
219
  const search = params ? `?${new URLSearchParams(params).toString()}` : "";
211
- return this.request(`/auth/history${search}`, { method: "GET", sessionToken });
220
+ return this.request(`/auth/history${search}`, {
221
+ method: "GET",
222
+ sessionToken,
223
+ });
212
224
  }
213
225
 
214
226
  async getHistoryItem(id: string, sessionToken?: string): Promise<any> {
@@ -257,10 +269,10 @@ export class LBClient {
257
269
 
258
270
  async verifySession(sessionToken?: string): Promise<LBSession | null> {
259
271
  try {
260
- const response = await this.request<{ session?: LBSession; user?: any }>(
261
- "/auth/session/verify",
262
- { method: "GET", sessionToken }
263
- );
272
+ const response = await this.request<{
273
+ session?: LBSession;
274
+ user?: any;
275
+ }>("/auth/session/verify", { method: "GET", sessionToken });
264
276
  return response?.session || null;
265
277
  } catch {
266
278
  return null;
@@ -46,7 +46,7 @@ export function createLBProxyHandler(config: LBProxyConfig = {}) {
46
46
  * - Legacy : pas de préfixe si baseUrl contient déjà /api/public/v1
47
47
  * - Sinon : /api/ai pour toutes les routes
48
48
  */
49
- function getApiPrefix(path: string): string {
49
+ function getApiPrefix(_path: string): string {
50
50
  if (isLegacyBaseUrl) {
51
51
  return ""; // Legacy: baseUrl contient déjà le préfixe
52
52
  }
@@ -129,34 +129,35 @@ export function createLBProxyHandler(config: LBProxyConfig = {}) {
129
129
  headers["Cookie"] = cookieParts.join("; ");
130
130
  }
131
131
 
132
- // Authentification : LB_API_KEY ou session cookie
132
+ // Authentification priorité:
133
+ // 1) Authorization/x-lb-api-key explicites du client
134
+ // 2) lb_session cookie (identité utilisateur)
135
+ // 3) LB_API_KEY fallback serveur (mode service)
133
136
  if (!authorization && !explicitApiKeyHeader) {
134
- if (apiKey) {
137
+ if (sessionToken) {
138
+ // Envoyer le cookie à la fois comme Authorization ET comme Cookie
139
+ // pour que le backend résolve correctement authType=lb_session.
140
+ headers["Authorization"] = `Bearer ${sessionToken}`;
141
+ console.log("[LB Proxy] Forwarding session cookie:", {
142
+ name: sessionCookieName,
143
+ hasValue: !!sessionToken,
144
+ });
145
+ } else if (apiKey) {
135
146
  headers["x-lb-api-key"] = apiKey;
136
147
  headers["Authorization"] = `Bearer ${apiKey}`;
137
- } else {
138
- // Lire le cookie de session
139
- if (sessionToken) {
140
- // Envoyer le cookie à la fois comme Authorization ET comme Cookie
141
- headers["Authorization"] = `Bearer ${sessionToken}`;
142
- console.log("[LB Proxy] Forwarding session cookie:", {
143
- name: sessionCookieName,
144
- hasValue: !!sessionToken,
145
- });
146
- } else if (!isPublicPath) {
147
- // Pas d'auth disponible et route protégée
148
- console.log("[LB Proxy] No auth available for protected route:", {
149
- path,
150
- isPublicPath,
151
- });
152
- return NextResponse.json(
153
- {
154
- error: "No authentication provided",
155
- hint: "Set LB_API_KEY env variable or login via /api/lastbrain/auth/login",
156
- },
157
- { status: 401 }
158
- );
159
- }
148
+ } else if (!isPublicPath) {
149
+ // Pas d'auth disponible et route protégée
150
+ console.log("[LB Proxy] No auth available for protected route:", {
151
+ path,
152
+ isPublicPath,
153
+ });
154
+ return NextResponse.json(
155
+ {
156
+ error: "No authentication provided",
157
+ hint: "Set LB_API_KEY env variable or login via /api/lastbrain/auth/login",
158
+ },
159
+ { status: 401 }
160
+ );
160
161
  }
161
162
  }
162
163
 
package/src/types/auth.ts CHANGED
@@ -56,6 +56,8 @@ export interface LBApiKey {
56
56
  name: string;
57
57
  /** Préfixe visible de la clé (ex: "lb_live_abc...") */
58
58
  keyPrefix: string;
59
+ /** Environnement de la clé */
60
+ env?: "dev" | "prod";
59
61
  scopes: string[];
60
62
  isActive: boolean;
61
63
  createdAt: string;