@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.
Files changed (57) hide show
  1. package/dist/actions/index.d.mts +38 -3
  2. package/dist/actions/index.d.ts +38 -3
  3. package/dist/actions/index.js +152 -20
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/index.mjs +153 -12
  6. package/dist/actions/index.mjs.map +1 -1
  7. package/dist/hooks/index.d.mts +2 -3
  8. package/dist/hooks/index.d.ts +2 -3
  9. package/dist/hooks/index.js +29 -60
  10. package/dist/hooks/index.js.map +1 -1
  11. package/dist/hooks/index.mjs +16 -42
  12. package/dist/hooks/index.mjs.map +1 -1
  13. package/dist/providers/index.d.mts +74 -0
  14. package/dist/providers/index.d.ts +74 -0
  15. package/dist/providers/index.js +2183 -0
  16. package/dist/providers/index.js.map +1 -0
  17. package/dist/providers/index.mjs +2173 -0
  18. package/dist/providers/index.mjs.map +1 -0
  19. package/dist/providers-D6FJ6tlA.d.mts +33 -0
  20. package/dist/providers-D6FJ6tlA.d.ts +33 -0
  21. package/dist/sdk/index.d.mts +41 -68
  22. package/dist/sdk/index.d.ts +41 -68
  23. package/dist/sdk/index.js +1 -374
  24. package/dist/sdk/index.js.map +1 -1
  25. package/dist/sdk/index.mjs +1 -356
  26. package/dist/sdk/index.mjs.map +1 -1
  27. package/dist/services/index.js +0 -7
  28. package/dist/services/index.mjs +1 -0
  29. package/dist/types/index.js +0 -4
  30. package/dist/utils/index.js +0 -14
  31. package/package.json +16 -27
  32. package/dist/actions/alquimia.action.d.mts +0 -3
  33. package/dist/actions/alquimia.action.d.ts +0 -3
  34. package/dist/actions/alquimia.action.js +0 -62
  35. package/dist/actions/alquimia.action.js.map +0 -1
  36. package/dist/actions/alquimia.action.mjs +0 -38
  37. package/dist/actions/alquimia.action.mjs.map +0 -1
  38. package/dist/actions/baseApi.action.d.mts +0 -20
  39. package/dist/actions/baseApi.action.d.ts +0 -20
  40. package/dist/actions/baseApi.action.js +0 -202
  41. package/dist/actions/baseApi.action.js.map +0 -1
  42. package/dist/actions/baseApi.action.mjs +0 -173
  43. package/dist/actions/baseApi.action.mjs.map +0 -1
  44. package/dist/alquimia-sdk-DK0XLjol.d.mts +0 -77
  45. package/dist/alquimia-sdk-DK0XLjol.d.ts +0 -77
  46. package/dist/context/index.d.mts +0 -22
  47. package/dist/context/index.d.ts +0 -22
  48. package/dist/context/index.js +0 -124
  49. package/dist/context/index.js.map +0 -1
  50. package/dist/context/index.mjs +0 -96
  51. package/dist/context/index.mjs.map +0 -1
  52. package/dist/index.d.mts +0 -33
  53. package/dist/index.d.ts +0 -33
  54. package/dist/index.js +0 -1277
  55. package/dist/index.js.map +0 -1
  56. package/dist/index.mjs +0 -1202
  57. package/dist/index.mjs.map +0 -1
@@ -1,5 +1,40 @@
1
- export { initConversation } from './alquimia.action.mjs';
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 };
@@ -1,5 +1,40 @@
1
- export { initConversation } from './alquimia.action.js';
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 };
@@ -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 headers = {
69
+ const headers3 = {
67
70
  "Content-Type": "application/json"
68
71
  };
69
72
  if (config.token) {
70
- headers["Authorization"] = `Bearer ${config.token}`;
73
+ headers3["Authorization"] = `Bearer ${config.token}`;
71
74
  }
72
75
  if (config.headers) {
73
76
  Object.entries(config.headers).forEach(([key, value]) => {
74
- headers[key] = value;
77
+ headers3[key] = value;
75
78
  });
76
79
  }
77
- return headers;
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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
- // Annotate the CommonJS export names for ESM import in node:
229
- 0 && (module.exports = {
230
- createResource,
231
- deleteResource,
232
- initConversation,
233
- readResource,
234
- updateResource
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"]}
@@ -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 headers = {
37
+ const headers3 = {
37
38
  "Content-Type": "application/json"
38
39
  };
39
40
  if (config.token) {
40
- headers["Authorization"] = `Bearer ${config.token}`;
41
+ headers3["Authorization"] = `Bearer ${config.token}`;
41
42
  }
42
43
  if (config.headers) {
43
44
  Object.entries(config.headers).forEach(([key, value]) => {
44
- headers[key] = value;
45
+ headers3[key] = value;
45
46
  });
46
47
  }
47
- return headers;
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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 headers = generateHeaders(config);
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