@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.
@@ -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;AAwGlB,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"}
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 need /auth/ prefix for internal
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;mBAiDlD,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;EA0HzB;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;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
- // Si le path commence déjà par ai/, ne rien ajouter (juste /api/)
37
- if (path.startsWith("ai/")) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lastbrain/ai-ui-core",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "Framework-agnostic core library for LastBrain AI UI Kit",
5
5
  "private": false,
6
6
  "type": "module",
@@ -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 need /auth/ prefix for internal
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
- // Si le path commence déjà par ai/, ne rien ajouter (juste /api/)
58
- if (path.startsWith("ai/")) {
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",