@alquimia-ai/tools 1.0.2 → 1.0.5
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/actions/index.d.mts +38 -3
- package/dist/actions/index.d.ts +38 -3
- package/dist/actions/index.js +152 -20
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/index.mjs +153 -12
- package/dist/actions/index.mjs.map +1 -1
- package/dist/hooks/index.d.mts +2 -3
- package/dist/hooks/index.d.ts +2 -3
- package/dist/hooks/index.js +29 -60
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +16 -42
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/providers/index.d.mts +74 -0
- package/dist/providers/index.d.ts +74 -0
- package/dist/providers/index.js +2183 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/index.mjs +2173 -0
- package/dist/providers/index.mjs.map +1 -0
- package/dist/providers-D6FJ6tlA.d.mts +33 -0
- package/dist/providers-D6FJ6tlA.d.ts +33 -0
- package/dist/sdk/index.d.mts +41 -68
- package/dist/sdk/index.d.ts +41 -68
- package/dist/sdk/index.js +1 -374
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/index.mjs +1 -356
- package/dist/sdk/index.mjs.map +1 -1
- package/dist/services/index.js +0 -7
- package/dist/services/index.mjs +1 -0
- package/dist/types/index.js +0 -4
- package/dist/utils/index.js +0 -14
- package/package.json +16 -27
- package/dist/actions/alquimia.action.d.mts +0 -3
- package/dist/actions/alquimia.action.d.ts +0 -3
- package/dist/actions/alquimia.action.js +0 -62
- package/dist/actions/alquimia.action.js.map +0 -1
- package/dist/actions/alquimia.action.mjs +0 -38
- package/dist/actions/alquimia.action.mjs.map +0 -1
- package/dist/actions/baseApi.action.d.mts +0 -20
- package/dist/actions/baseApi.action.d.ts +0 -20
- package/dist/actions/baseApi.action.js +0 -202
- package/dist/actions/baseApi.action.js.map +0 -1
- package/dist/actions/baseApi.action.mjs +0 -173
- package/dist/actions/baseApi.action.mjs.map +0 -1
- package/dist/alquimia-sdk-DK0XLjol.d.mts +0 -77
- package/dist/alquimia-sdk-DK0XLjol.d.ts +0 -77
- package/dist/context/index.d.mts +0 -22
- package/dist/context/index.d.ts +0 -22
- package/dist/context/index.js +0 -124
- package/dist/context/index.js.map +0 -1
- package/dist/context/index.mjs +0 -96
- package/dist/context/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -33
- package/dist/index.d.ts +0 -33
- package/dist/index.js +0 -1277
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1202
- package/dist/index.mjs.map +0 -1
package/dist/actions/index.d.mts
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
export { createResource, deleteResource, readResource, updateResource } from './baseApi.action.mjs';
|
|
3
|
-
import '../types/index.mjs';
|
|
1
|
+
import { BaseAPIConfig } from '../types/index.mjs';
|
|
4
2
|
import '@elastic/apm-rum';
|
|
5
3
|
import 'ai';
|
|
4
|
+
|
|
5
|
+
declare function initConversation(reset?: boolean, topicId?: string): Promise<string>;
|
|
6
|
+
|
|
7
|
+
interface ActionResponse<T = void> {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: T;
|
|
10
|
+
contentType?: string;
|
|
11
|
+
error?: {
|
|
12
|
+
message: string;
|
|
13
|
+
code?: string;
|
|
14
|
+
details?: any;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
declare function createResource<TResponse, TPayload>(config: BaseAPIConfig, payload: TPayload): Promise<ActionResponse<TResponse>>;
|
|
18
|
+
declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<ActionResponse<T>>;
|
|
19
|
+
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
20
|
+
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
21
|
+
|
|
22
|
+
type ChatRouteContext = {
|
|
23
|
+
params: {
|
|
24
|
+
path: string[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
type ChatRequestConfig = {
|
|
28
|
+
assistantBaseUrl: string;
|
|
29
|
+
apiKey: string;
|
|
30
|
+
};
|
|
31
|
+
type ChatResponse = Response | any;
|
|
32
|
+
declare function handleChatRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<ChatResponse>;
|
|
33
|
+
declare function handleStreamRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<Response>;
|
|
34
|
+
|
|
35
|
+
type ApmRequestConfig = {
|
|
36
|
+
apmServerUrl: string;
|
|
37
|
+
};
|
|
38
|
+
declare function handleApmRequest(request: Request, config: ApmRequestConfig): Promise<Response>;
|
|
39
|
+
|
|
40
|
+
export { type ApmRequestConfig, type ChatRequestConfig, type ChatResponse, type ChatRouteContext, createResource, deleteResource, handleApmRequest, handleChatRequest, handleStreamRequest, initConversation, readResource, updateResource };
|
package/dist/actions/index.d.ts
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
export { createResource, deleteResource, readResource, updateResource } from './baseApi.action.js';
|
|
3
|
-
import '../types/index.js';
|
|
1
|
+
import { BaseAPIConfig } from '../types/index.js';
|
|
4
2
|
import '@elastic/apm-rum';
|
|
5
3
|
import 'ai';
|
|
4
|
+
|
|
5
|
+
declare function initConversation(reset?: boolean, topicId?: string): Promise<string>;
|
|
6
|
+
|
|
7
|
+
interface ActionResponse<T = void> {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: T;
|
|
10
|
+
contentType?: string;
|
|
11
|
+
error?: {
|
|
12
|
+
message: string;
|
|
13
|
+
code?: string;
|
|
14
|
+
details?: any;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
declare function createResource<TResponse, TPayload>(config: BaseAPIConfig, payload: TPayload): Promise<ActionResponse<TResponse>>;
|
|
18
|
+
declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<ActionResponse<T>>;
|
|
19
|
+
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
20
|
+
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
21
|
+
|
|
22
|
+
type ChatRouteContext = {
|
|
23
|
+
params: {
|
|
24
|
+
path: string[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
type ChatRequestConfig = {
|
|
28
|
+
assistantBaseUrl: string;
|
|
29
|
+
apiKey: string;
|
|
30
|
+
};
|
|
31
|
+
type ChatResponse = Response | any;
|
|
32
|
+
declare function handleChatRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<ChatResponse>;
|
|
33
|
+
declare function handleStreamRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<Response>;
|
|
34
|
+
|
|
35
|
+
type ApmRequestConfig = {
|
|
36
|
+
apmServerUrl: string;
|
|
37
|
+
};
|
|
38
|
+
declare function handleApmRequest(request: Request, config: ApmRequestConfig): Promise<Response>;
|
|
39
|
+
|
|
40
|
+
export { type ApmRequestConfig, type ChatRequestConfig, type ChatResponse, type ChatRouteContext, createResource, deleteResource, handleApmRequest, handleChatRequest, handleStreamRequest, initConversation, readResource, updateResource };
|
package/dist/actions/index.js
CHANGED
|
@@ -22,6 +22,9 @@ var actions_exports = {};
|
|
|
22
22
|
__export(actions_exports, {
|
|
23
23
|
createResource: () => createResource,
|
|
24
24
|
deleteResource: () => deleteResource,
|
|
25
|
+
handleApmRequest: () => handleApmRequest,
|
|
26
|
+
handleChatRequest: () => handleChatRequest,
|
|
27
|
+
handleStreamRequest: () => handleStreamRequest,
|
|
25
28
|
initConversation: () => initConversation,
|
|
26
29
|
readResource: () => readResource,
|
|
27
30
|
updateResource: () => updateResource
|
|
@@ -63,18 +66,18 @@ async function initConversation(reset, topicId) {
|
|
|
63
66
|
|
|
64
67
|
// src/utils/utils.ts
|
|
65
68
|
function generateHeaders(config) {
|
|
66
|
-
const
|
|
69
|
+
const headers3 = {
|
|
67
70
|
"Content-Type": "application/json"
|
|
68
71
|
};
|
|
69
72
|
if (config.token) {
|
|
70
|
-
|
|
73
|
+
headers3["Authorization"] = `Bearer ${config.token}`;
|
|
71
74
|
}
|
|
72
75
|
if (config.headers) {
|
|
73
76
|
Object.entries(config.headers).forEach(([key, value]) => {
|
|
74
|
-
|
|
77
|
+
headers3[key] = value;
|
|
75
78
|
});
|
|
76
79
|
}
|
|
77
|
-
return
|
|
80
|
+
return headers3;
|
|
78
81
|
}
|
|
79
82
|
function isTextContent(buffer) {
|
|
80
83
|
try {
|
|
@@ -88,10 +91,10 @@ function isTextContent(buffer) {
|
|
|
88
91
|
// src/actions/baseApi.action.ts
|
|
89
92
|
async function createResource(config, payload) {
|
|
90
93
|
try {
|
|
91
|
-
const
|
|
94
|
+
const headers3 = generateHeaders(config);
|
|
92
95
|
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
93
96
|
method: "POST",
|
|
94
|
-
headers,
|
|
97
|
+
headers: headers3,
|
|
95
98
|
body: JSON.stringify(payload),
|
|
96
99
|
cache: "default"
|
|
97
100
|
});
|
|
@@ -119,11 +122,11 @@ async function createResource(config, payload) {
|
|
|
119
122
|
}
|
|
120
123
|
async function readResource(config, id) {
|
|
121
124
|
try {
|
|
122
|
-
const
|
|
125
|
+
const headers3 = generateHeaders(config);
|
|
123
126
|
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
124
127
|
const response = await fetch(url, {
|
|
125
128
|
method: "GET",
|
|
126
|
-
headers,
|
|
129
|
+
headers: headers3,
|
|
127
130
|
cache: "default"
|
|
128
131
|
});
|
|
129
132
|
if (!response.ok) {
|
|
@@ -167,10 +170,10 @@ async function readResource(config, id) {
|
|
|
167
170
|
}
|
|
168
171
|
async function updateResource(config, id, data) {
|
|
169
172
|
try {
|
|
170
|
-
const
|
|
173
|
+
const headers3 = generateHeaders(config);
|
|
171
174
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
172
175
|
method: "PUT",
|
|
173
|
-
headers,
|
|
176
|
+
headers: headers3,
|
|
174
177
|
body: JSON.stringify(data),
|
|
175
178
|
cache: "default"
|
|
176
179
|
});
|
|
@@ -198,10 +201,10 @@ async function updateResource(config, id, data) {
|
|
|
198
201
|
}
|
|
199
202
|
async function deleteResource(config, id) {
|
|
200
203
|
try {
|
|
201
|
-
const
|
|
204
|
+
const headers3 = generateHeaders(config);
|
|
202
205
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
203
206
|
method: "DELETE",
|
|
204
|
-
headers,
|
|
207
|
+
headers: headers3,
|
|
205
208
|
cache: "default"
|
|
206
209
|
});
|
|
207
210
|
if (!response.ok) {
|
|
@@ -225,12 +228,141 @@ async function deleteResource(config, id) {
|
|
|
225
228
|
throw new Error("Failed to delete resource");
|
|
226
229
|
}
|
|
227
230
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
231
|
+
|
|
232
|
+
// src/actions/chat.action.ts
|
|
233
|
+
var import_server = require("next/server");
|
|
234
|
+
var import_headers2 = require("next/headers");
|
|
235
|
+
async function handleChatRequest(request, context, config) {
|
|
236
|
+
try {
|
|
237
|
+
const headersList = await (0, import_headers2.headers)();
|
|
238
|
+
const body = await request.json();
|
|
239
|
+
const routeParams = await context.params;
|
|
240
|
+
const routePath = routeParams.path.join("/");
|
|
241
|
+
const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;
|
|
242
|
+
const response = await fetch(assistantUrl, {
|
|
243
|
+
method: "POST",
|
|
244
|
+
headers: {
|
|
245
|
+
"Content-Type": "application/json",
|
|
246
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
247
|
+
...headersList
|
|
248
|
+
},
|
|
249
|
+
body: JSON.stringify(body)
|
|
250
|
+
});
|
|
251
|
+
if (!response.ok) {
|
|
252
|
+
const errorJson = await response.json();
|
|
253
|
+
console.error("Chat inference server error:", {
|
|
254
|
+
status: response.status,
|
|
255
|
+
statusText: response.statusText,
|
|
256
|
+
body: errorJson
|
|
257
|
+
});
|
|
258
|
+
return import_server.NextResponse.json(
|
|
259
|
+
{
|
|
260
|
+
error: errorJson.message || response.statusText || "Failed to forward Chat data"
|
|
261
|
+
},
|
|
262
|
+
{ status: response.status }
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
return new import_server.NextResponse(response.body, {
|
|
266
|
+
status: 200,
|
|
267
|
+
headers: {
|
|
268
|
+
"Access-Control-Allow-Origin": "*",
|
|
269
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
270
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
} catch (error) {
|
|
274
|
+
return import_server.NextResponse.json(
|
|
275
|
+
{ error: "Failed to forward Chat data" },
|
|
276
|
+
{ status: 500 }
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async function handleStreamRequest(request, context, config) {
|
|
281
|
+
try {
|
|
282
|
+
const headersList = await (0, import_headers2.headers)();
|
|
283
|
+
const routeParams = context.params;
|
|
284
|
+
const path = routeParams.path.join("/");
|
|
285
|
+
const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;
|
|
286
|
+
const response = await fetch(streamUrl, {
|
|
287
|
+
headers: {
|
|
288
|
+
"Content-Type": "application/json",
|
|
289
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
290
|
+
...Object.fromEntries(headersList.entries())
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
if (!response.ok) {
|
|
294
|
+
const errorJson = await response.json();
|
|
295
|
+
console.error("Stream server error:", {
|
|
296
|
+
status: response.status,
|
|
297
|
+
statusText: response.statusText,
|
|
298
|
+
body: errorJson
|
|
299
|
+
});
|
|
300
|
+
return new Response(
|
|
301
|
+
JSON.stringify({
|
|
302
|
+
error: errorJson.message || response.statusText || "Failed to forward Stream data"
|
|
303
|
+
}),
|
|
304
|
+
{ status: response.status }
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
return new Response(response.body, {
|
|
308
|
+
status: 200,
|
|
309
|
+
headers: {
|
|
310
|
+
"Content-Type": "text/event-stream",
|
|
311
|
+
"Cache-Control": "no-cache",
|
|
312
|
+
Connection: "keep-alive"
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
console.error("Stream error:", error);
|
|
317
|
+
return new Response(
|
|
318
|
+
JSON.stringify({ error: "Failed to forward stream data" }),
|
|
319
|
+
{ status: 500 }
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// src/actions/apm.action.ts
|
|
325
|
+
var import_headers3 = require("next/headers");
|
|
326
|
+
async function handleApmRequest(request, config) {
|
|
327
|
+
try {
|
|
328
|
+
const headersList = await (0, import_headers3.headers)();
|
|
329
|
+
const body = await request.arrayBuffer();
|
|
330
|
+
const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;
|
|
331
|
+
const response = await fetch(apmUrl, {
|
|
332
|
+
method: "POST",
|
|
333
|
+
headers: {
|
|
334
|
+
"Content-Type": "application/x-ndjson",
|
|
335
|
+
Accept: "*/*",
|
|
336
|
+
"Content-Encoding": "gzip",
|
|
337
|
+
"User-Agent": "elastic-apm-rum/5.15.0"
|
|
338
|
+
},
|
|
339
|
+
body
|
|
340
|
+
});
|
|
341
|
+
if (!response.ok) {
|
|
342
|
+
const errorText = await response.text();
|
|
343
|
+
console.error("APM server error:", {
|
|
344
|
+
status: response.status,
|
|
345
|
+
statusText: response.statusText,
|
|
346
|
+
body: errorText
|
|
347
|
+
});
|
|
348
|
+
throw new Error(
|
|
349
|
+
`APM server responded with ${response.status}: ${errorText}`
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
return new Response(null, {
|
|
353
|
+
status: 200,
|
|
354
|
+
headers: {
|
|
355
|
+
"Access-Control-Allow-Origin": "*",
|
|
356
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
357
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
} catch (error) {
|
|
361
|
+
console.error("APM proxy error:", error);
|
|
362
|
+
return new Response(
|
|
363
|
+
JSON.stringify({ error: "Failed to forward APM data" }),
|
|
364
|
+
{ status: 500 }
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
236
368
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'\nexport * from './chat.action'\nexport * from './apm.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","import { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n\n const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Chat data\",\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n\n const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","import { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":"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","names":["headers","headers","import_headers","import_headers"]}
|
package/dist/actions/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use server";
|
|
1
2
|
// src/actions/alquimia.action.ts
|
|
2
3
|
import { randomUUID } from "crypto";
|
|
3
4
|
import { cookies } from "next/headers";
|
|
@@ -33,18 +34,18 @@ async function initConversation(reset, topicId) {
|
|
|
33
34
|
|
|
34
35
|
// src/utils/utils.ts
|
|
35
36
|
function generateHeaders(config) {
|
|
36
|
-
const
|
|
37
|
+
const headers3 = {
|
|
37
38
|
"Content-Type": "application/json"
|
|
38
39
|
};
|
|
39
40
|
if (config.token) {
|
|
40
|
-
|
|
41
|
+
headers3["Authorization"] = `Bearer ${config.token}`;
|
|
41
42
|
}
|
|
42
43
|
if (config.headers) {
|
|
43
44
|
Object.entries(config.headers).forEach(([key, value]) => {
|
|
44
|
-
|
|
45
|
+
headers3[key] = value;
|
|
45
46
|
});
|
|
46
47
|
}
|
|
47
|
-
return
|
|
48
|
+
return headers3;
|
|
48
49
|
}
|
|
49
50
|
function isTextContent(buffer) {
|
|
50
51
|
try {
|
|
@@ -58,10 +59,10 @@ function isTextContent(buffer) {
|
|
|
58
59
|
// src/actions/baseApi.action.ts
|
|
59
60
|
async function createResource(config, payload) {
|
|
60
61
|
try {
|
|
61
|
-
const
|
|
62
|
+
const headers3 = generateHeaders(config);
|
|
62
63
|
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
63
64
|
method: "POST",
|
|
64
|
-
headers,
|
|
65
|
+
headers: headers3,
|
|
65
66
|
body: JSON.stringify(payload),
|
|
66
67
|
cache: "default"
|
|
67
68
|
});
|
|
@@ -89,11 +90,11 @@ async function createResource(config, payload) {
|
|
|
89
90
|
}
|
|
90
91
|
async function readResource(config, id) {
|
|
91
92
|
try {
|
|
92
|
-
const
|
|
93
|
+
const headers3 = generateHeaders(config);
|
|
93
94
|
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
94
95
|
const response = await fetch(url, {
|
|
95
96
|
method: "GET",
|
|
96
|
-
headers,
|
|
97
|
+
headers: headers3,
|
|
97
98
|
cache: "default"
|
|
98
99
|
});
|
|
99
100
|
if (!response.ok) {
|
|
@@ -137,10 +138,10 @@ async function readResource(config, id) {
|
|
|
137
138
|
}
|
|
138
139
|
async function updateResource(config, id, data) {
|
|
139
140
|
try {
|
|
140
|
-
const
|
|
141
|
+
const headers3 = generateHeaders(config);
|
|
141
142
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
142
143
|
method: "PUT",
|
|
143
|
-
headers,
|
|
144
|
+
headers: headers3,
|
|
144
145
|
body: JSON.stringify(data),
|
|
145
146
|
cache: "default"
|
|
146
147
|
});
|
|
@@ -168,10 +169,10 @@ async function updateResource(config, id, data) {
|
|
|
168
169
|
}
|
|
169
170
|
async function deleteResource(config, id) {
|
|
170
171
|
try {
|
|
171
|
-
const
|
|
172
|
+
const headers3 = generateHeaders(config);
|
|
172
173
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
173
174
|
method: "DELETE",
|
|
174
|
-
headers,
|
|
175
|
+
headers: headers3,
|
|
175
176
|
cache: "default"
|
|
176
177
|
});
|
|
177
178
|
if (!response.ok) {
|
|
@@ -195,9 +196,149 @@ async function deleteResource(config, id) {
|
|
|
195
196
|
throw new Error("Failed to delete resource");
|
|
196
197
|
}
|
|
197
198
|
}
|
|
199
|
+
|
|
200
|
+
// src/actions/chat.action.ts
|
|
201
|
+
import { NextResponse } from "next/server";
|
|
202
|
+
import { headers } from "next/headers";
|
|
203
|
+
async function handleChatRequest(request, context, config) {
|
|
204
|
+
try {
|
|
205
|
+
const headersList = await headers();
|
|
206
|
+
const body = await request.json();
|
|
207
|
+
const routeParams = await context.params;
|
|
208
|
+
const routePath = routeParams.path.join("/");
|
|
209
|
+
const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;
|
|
210
|
+
const response = await fetch(assistantUrl, {
|
|
211
|
+
method: "POST",
|
|
212
|
+
headers: {
|
|
213
|
+
"Content-Type": "application/json",
|
|
214
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
215
|
+
...headersList
|
|
216
|
+
},
|
|
217
|
+
body: JSON.stringify(body)
|
|
218
|
+
});
|
|
219
|
+
if (!response.ok) {
|
|
220
|
+
const errorJson = await response.json();
|
|
221
|
+
console.error("Chat inference server error:", {
|
|
222
|
+
status: response.status,
|
|
223
|
+
statusText: response.statusText,
|
|
224
|
+
body: errorJson
|
|
225
|
+
});
|
|
226
|
+
return NextResponse.json(
|
|
227
|
+
{
|
|
228
|
+
error: errorJson.message || response.statusText || "Failed to forward Chat data"
|
|
229
|
+
},
|
|
230
|
+
{ status: response.status }
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
return new NextResponse(response.body, {
|
|
234
|
+
status: 200,
|
|
235
|
+
headers: {
|
|
236
|
+
"Access-Control-Allow-Origin": "*",
|
|
237
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
238
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
} catch (error) {
|
|
242
|
+
return NextResponse.json(
|
|
243
|
+
{ error: "Failed to forward Chat data" },
|
|
244
|
+
{ status: 500 }
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async function handleStreamRequest(request, context, config) {
|
|
249
|
+
try {
|
|
250
|
+
const headersList = await headers();
|
|
251
|
+
const routeParams = context.params;
|
|
252
|
+
const path = routeParams.path.join("/");
|
|
253
|
+
const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;
|
|
254
|
+
const response = await fetch(streamUrl, {
|
|
255
|
+
headers: {
|
|
256
|
+
"Content-Type": "application/json",
|
|
257
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
258
|
+
...Object.fromEntries(headersList.entries())
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
if (!response.ok) {
|
|
262
|
+
const errorJson = await response.json();
|
|
263
|
+
console.error("Stream server error:", {
|
|
264
|
+
status: response.status,
|
|
265
|
+
statusText: response.statusText,
|
|
266
|
+
body: errorJson
|
|
267
|
+
});
|
|
268
|
+
return new Response(
|
|
269
|
+
JSON.stringify({
|
|
270
|
+
error: errorJson.message || response.statusText || "Failed to forward Stream data"
|
|
271
|
+
}),
|
|
272
|
+
{ status: response.status }
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
return new Response(response.body, {
|
|
276
|
+
status: 200,
|
|
277
|
+
headers: {
|
|
278
|
+
"Content-Type": "text/event-stream",
|
|
279
|
+
"Cache-Control": "no-cache",
|
|
280
|
+
Connection: "keep-alive"
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
} catch (error) {
|
|
284
|
+
console.error("Stream error:", error);
|
|
285
|
+
return new Response(
|
|
286
|
+
JSON.stringify({ error: "Failed to forward stream data" }),
|
|
287
|
+
{ status: 500 }
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// src/actions/apm.action.ts
|
|
293
|
+
import { headers as headers2 } from "next/headers";
|
|
294
|
+
async function handleApmRequest(request, config) {
|
|
295
|
+
try {
|
|
296
|
+
const headersList = await headers2();
|
|
297
|
+
const body = await request.arrayBuffer();
|
|
298
|
+
const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;
|
|
299
|
+
const response = await fetch(apmUrl, {
|
|
300
|
+
method: "POST",
|
|
301
|
+
headers: {
|
|
302
|
+
"Content-Type": "application/x-ndjson",
|
|
303
|
+
Accept: "*/*",
|
|
304
|
+
"Content-Encoding": "gzip",
|
|
305
|
+
"User-Agent": "elastic-apm-rum/5.15.0"
|
|
306
|
+
},
|
|
307
|
+
body
|
|
308
|
+
});
|
|
309
|
+
if (!response.ok) {
|
|
310
|
+
const errorText = await response.text();
|
|
311
|
+
console.error("APM server error:", {
|
|
312
|
+
status: response.status,
|
|
313
|
+
statusText: response.statusText,
|
|
314
|
+
body: errorText
|
|
315
|
+
});
|
|
316
|
+
throw new Error(
|
|
317
|
+
`APM server responded with ${response.status}: ${errorText}`
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
return new Response(null, {
|
|
321
|
+
status: 200,
|
|
322
|
+
headers: {
|
|
323
|
+
"Access-Control-Allow-Origin": "*",
|
|
324
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
325
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
} catch (error) {
|
|
329
|
+
console.error("APM proxy error:", error);
|
|
330
|
+
return new Response(
|
|
331
|
+
JSON.stringify({ error: "Failed to forward APM data" }),
|
|
332
|
+
{ status: 500 }
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
198
336
|
export {
|
|
199
337
|
createResource,
|
|
200
338
|
deleteResource,
|
|
339
|
+
handleApmRequest,
|
|
340
|
+
handleChatRequest,
|
|
341
|
+
handleStreamRequest,
|
|
201
342
|
initConversation,
|
|
202
343
|
readResource,
|
|
203
344
|
updateResource
|