@alquimia-ai/tools 1.0.1 → 1.0.2
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/alquimia.action.d.mts +3 -0
- package/dist/actions/alquimia.action.d.ts +3 -0
- package/dist/actions/alquimia.action.js +62 -0
- package/dist/actions/alquimia.action.js.map +1 -0
- package/dist/actions/alquimia.action.mjs +38 -0
- package/dist/actions/alquimia.action.mjs.map +1 -0
- package/dist/actions/baseApi.action.d.mts +20 -0
- package/dist/actions/baseApi.action.d.ts +20 -0
- package/dist/actions/baseApi.action.js +202 -0
- package/dist/actions/baseApi.action.js.map +1 -0
- package/dist/actions/baseApi.action.mjs +173 -0
- package/dist/actions/baseApi.action.mjs.map +1 -0
- package/dist/actions/index.d.mts +5 -0
- package/dist/actions/index.d.ts +5 -0
- package/dist/actions/index.js +236 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/index.mjs +205 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/alquimia-sdk-DK0XLjol.d.mts +77 -0
- package/dist/alquimia-sdk-DK0XLjol.d.ts +77 -0
- package/dist/context/index.d.mts +22 -0
- package/dist/context/index.d.ts +22 -0
- package/dist/context/index.js +124 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/index.mjs +96 -0
- package/dist/context/index.mjs.map +1 -0
- package/dist/hooks/index.d.mts +54 -0
- package/dist/hooks/index.d.ts +54 -0
- package/dist/hooks/index.js +344 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.mjs +316 -0
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/index.d.mts +14 -303
- package/dist/index.d.ts +14 -303
- package/dist/index.js +1143 -2448
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1079 -2213
- package/dist/index.mjs.map +1 -1
- package/dist/sdk/index.d.mts +74 -0
- package/dist/sdk/index.d.ts +74 -0
- package/dist/sdk/index.js +561 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/index.mjs +510 -0
- package/dist/sdk/index.mjs.map +1 -0
- package/dist/services/index.d.mts +26 -0
- package/dist/services/index.d.ts +26 -0
- package/dist/services/index.js +93 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/index.mjs +63 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/types/index.d.mts +105 -0
- package/dist/types/index.d.ts +105 -0
- package/dist/types/index.js +41 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +14 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/utils/index.d.mts +29 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.js +170 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +133 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +42 -13
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use server";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/actions/alquimia.action.ts
|
|
22
|
+
var alquimia_action_exports = {};
|
|
23
|
+
__export(alquimia_action_exports, {
|
|
24
|
+
initConversation: () => initConversation
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(alquimia_action_exports);
|
|
27
|
+
var import_crypto = require("crypto");
|
|
28
|
+
var import_headers = require("next/headers");
|
|
29
|
+
async function initConversation(reset, topicId) {
|
|
30
|
+
const cookieStore = await (0, import_headers.cookies)();
|
|
31
|
+
if (!topicId) {
|
|
32
|
+
let conversationId = (0, import_crypto.randomUUID)().toString();
|
|
33
|
+
const alquimia_session = cookieStore.get("alquimia-session");
|
|
34
|
+
if (!alquimia_session || reset) {
|
|
35
|
+
cookieStore.set("alquimia-session", conversationId);
|
|
36
|
+
} else {
|
|
37
|
+
conversationId = alquimia_session.value;
|
|
38
|
+
}
|
|
39
|
+
return conversationId;
|
|
40
|
+
}
|
|
41
|
+
let conversationsMap = {};
|
|
42
|
+
const existingConversations = cookieStore.get("alquimia-sessions");
|
|
43
|
+
if (existingConversations) {
|
|
44
|
+
try {
|
|
45
|
+
const decodedValue = decodeURIComponent(existingConversations.value);
|
|
46
|
+
conversationsMap = JSON.parse(decodedValue);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error("Error parsing conversations cookie:", e);
|
|
49
|
+
conversationsMap = {};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!conversationsMap[topicId] || reset) {
|
|
53
|
+
conversationsMap[topicId] = (0, import_crypto.randomUUID)().toString();
|
|
54
|
+
}
|
|
55
|
+
cookieStore.set("alquimia-sessions", JSON.stringify(conversationsMap));
|
|
56
|
+
return conversationsMap[topicId];
|
|
57
|
+
}
|
|
58
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
59
|
+
0 && (module.exports = {
|
|
60
|
+
initConversation
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=alquimia.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/alquimia.action.ts"],"sourcesContent":["'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}"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAC3B,qBAAwB;AAGxB,eAAsB,iBAAiB,OAAiB,SAAkB;AACxE,QAAM,cAAc,UAAM,wBAAQ;AAElC,MAAI,CAAC,SAAS;AACZ,QAAI,qBAAiB,0BAAW,EAAE,SAAS;AAC3C,UAAM,mBAAmB,YAAY,IAAI,kBAAkB;AAE3D,QAAI,CAAC,oBAAoB,OAAO;AAC9B,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACpD,OAAO;AACL,uBAAiB,iBAAiB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,mBAAqC,CAAC;AAC1C,QAAM,wBAAwB,YAAY,IAAI,mBAAmB;AAEjE,MAAI,uBAAuB;AACzB,QAAI;AACF,YAAM,eAAe,mBAAmB,sBAAsB,KAAK;AACnE,yBAAmB,KAAK,MAAM,YAAY;AAAA,IAC5C,SAAS,GAAG;AACV,cAAQ,MAAM,uCAAuC,CAAC;AACtD,yBAAmB,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,OAAO,KAAK,OAAO;AACvC,qBAAiB,OAAO,QAAI,0BAAW,EAAE,SAAS;AAAA,EACpD;AAEA,cAAY,IAAI,qBAAqB,KAAK,UAAU,gBAAgB,CAAC;AAErE,SAAO,iBAAiB,OAAO;AACjC;","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
|
|
3
|
+
// src/actions/alquimia.action.ts
|
|
4
|
+
import { randomUUID } from "crypto";
|
|
5
|
+
import { cookies } from "next/headers";
|
|
6
|
+
async function initConversation(reset, topicId) {
|
|
7
|
+
const cookieStore = await cookies();
|
|
8
|
+
if (!topicId) {
|
|
9
|
+
let conversationId = randomUUID().toString();
|
|
10
|
+
const alquimia_session = cookieStore.get("alquimia-session");
|
|
11
|
+
if (!alquimia_session || reset) {
|
|
12
|
+
cookieStore.set("alquimia-session", conversationId);
|
|
13
|
+
} else {
|
|
14
|
+
conversationId = alquimia_session.value;
|
|
15
|
+
}
|
|
16
|
+
return conversationId;
|
|
17
|
+
}
|
|
18
|
+
let conversationsMap = {};
|
|
19
|
+
const existingConversations = cookieStore.get("alquimia-sessions");
|
|
20
|
+
if (existingConversations) {
|
|
21
|
+
try {
|
|
22
|
+
const decodedValue = decodeURIComponent(existingConversations.value);
|
|
23
|
+
conversationsMap = JSON.parse(decodedValue);
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.error("Error parsing conversations cookie:", e);
|
|
26
|
+
conversationsMap = {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (!conversationsMap[topicId] || reset) {
|
|
30
|
+
conversationsMap[topicId] = randomUUID().toString();
|
|
31
|
+
}
|
|
32
|
+
cookieStore.set("alquimia-sessions", JSON.stringify(conversationsMap));
|
|
33
|
+
return conversationsMap[topicId];
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
initConversation
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=alquimia.action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/alquimia.action.ts"],"sourcesContent":["'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}"],"mappings":";;;AACA,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AAGxB,eAAsB,iBAAiB,OAAiB,SAAkB;AACxE,QAAM,cAAc,MAAM,QAAQ;AAElC,MAAI,CAAC,SAAS;AACZ,QAAI,iBAAiB,WAAW,EAAE,SAAS;AAC3C,UAAM,mBAAmB,YAAY,IAAI,kBAAkB;AAE3D,QAAI,CAAC,oBAAoB,OAAO;AAC9B,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACpD,OAAO;AACL,uBAAiB,iBAAiB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,mBAAqC,CAAC;AAC1C,QAAM,wBAAwB,YAAY,IAAI,mBAAmB;AAEjE,MAAI,uBAAuB;AACzB,QAAI;AACF,YAAM,eAAe,mBAAmB,sBAAsB,KAAK;AACnE,yBAAmB,KAAK,MAAM,YAAY;AAAA,IAC5C,SAAS,GAAG;AACV,cAAQ,MAAM,uCAAuC,CAAC;AACtD,yBAAmB,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,OAAO,KAAK,OAAO;AACvC,qBAAiB,OAAO,IAAI,WAAW,EAAE,SAAS;AAAA,EACpD;AAEA,cAAY,IAAI,qBAAqB,KAAK,UAAU,gBAAgB,CAAC;AAErE,SAAO,iBAAiB,OAAO;AACjC;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseAPIConfig } from '../types/index.mjs';
|
|
2
|
+
import '@elastic/apm-rum';
|
|
3
|
+
import 'ai';
|
|
4
|
+
|
|
5
|
+
interface ActionResponse<T = void> {
|
|
6
|
+
success: boolean;
|
|
7
|
+
data?: T;
|
|
8
|
+
contentType?: string;
|
|
9
|
+
error?: {
|
|
10
|
+
message: string;
|
|
11
|
+
code?: string;
|
|
12
|
+
details?: any;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
declare function createResource<TResponse, TPayload>(config: BaseAPIConfig, payload: TPayload): Promise<ActionResponse<TResponse>>;
|
|
16
|
+
declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<ActionResponse<T>>;
|
|
17
|
+
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
18
|
+
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
19
|
+
|
|
20
|
+
export { createResource, deleteResource, readResource, updateResource };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseAPIConfig } from '../types/index.js';
|
|
2
|
+
import '@elastic/apm-rum';
|
|
3
|
+
import 'ai';
|
|
4
|
+
|
|
5
|
+
interface ActionResponse<T = void> {
|
|
6
|
+
success: boolean;
|
|
7
|
+
data?: T;
|
|
8
|
+
contentType?: string;
|
|
9
|
+
error?: {
|
|
10
|
+
message: string;
|
|
11
|
+
code?: string;
|
|
12
|
+
details?: any;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
declare function createResource<TResponse, TPayload>(config: BaseAPIConfig, payload: TPayload): Promise<ActionResponse<TResponse>>;
|
|
16
|
+
declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<ActionResponse<T>>;
|
|
17
|
+
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
18
|
+
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
19
|
+
|
|
20
|
+
export { createResource, deleteResource, readResource, updateResource };
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use server";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/actions/baseApi.action.ts
|
|
22
|
+
var baseApi_action_exports = {};
|
|
23
|
+
__export(baseApi_action_exports, {
|
|
24
|
+
createResource: () => createResource,
|
|
25
|
+
deleteResource: () => deleteResource,
|
|
26
|
+
readResource: () => readResource,
|
|
27
|
+
updateResource: () => updateResource
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(baseApi_action_exports);
|
|
30
|
+
|
|
31
|
+
// src/utils/utils.ts
|
|
32
|
+
function generateHeaders(config) {
|
|
33
|
+
const headers = {
|
|
34
|
+
"Content-Type": "application/json"
|
|
35
|
+
};
|
|
36
|
+
if (config.token) {
|
|
37
|
+
headers["Authorization"] = `Bearer ${config.token}`;
|
|
38
|
+
}
|
|
39
|
+
if (config.headers) {
|
|
40
|
+
Object.entries(config.headers).forEach(([key, value]) => {
|
|
41
|
+
headers[key] = value;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return headers;
|
|
45
|
+
}
|
|
46
|
+
function isTextContent(buffer) {
|
|
47
|
+
try {
|
|
48
|
+
const text = new TextDecoder().decode(buffer);
|
|
49
|
+
return /^[\w\#\-\*]/.test(text.trim());
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/actions/baseApi.action.ts
|
|
56
|
+
async function createResource(config, payload) {
|
|
57
|
+
try {
|
|
58
|
+
const headers = generateHeaders(config);
|
|
59
|
+
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers,
|
|
62
|
+
body: JSON.stringify(payload),
|
|
63
|
+
cache: "default"
|
|
64
|
+
});
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
const error = await response.json();
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: {
|
|
70
|
+
message: error.message || `Server returned ${response.status}`,
|
|
71
|
+
code: response.status.toString(),
|
|
72
|
+
details: {
|
|
73
|
+
status: response.status,
|
|
74
|
+
statusText: response.statusText
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
success: true,
|
|
81
|
+
data: await response.json()
|
|
82
|
+
};
|
|
83
|
+
} catch (error) {
|
|
84
|
+
throw new Error("Failed to create resource");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function readResource(config, id) {
|
|
88
|
+
try {
|
|
89
|
+
const headers = generateHeaders(config);
|
|
90
|
+
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
91
|
+
const response = await fetch(url, {
|
|
92
|
+
method: "GET",
|
|
93
|
+
headers,
|
|
94
|
+
cache: "default"
|
|
95
|
+
});
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
const error = await response.json();
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: {
|
|
101
|
+
message: error.message || `Server returned ${response.status}`,
|
|
102
|
+
code: response.status.toString(),
|
|
103
|
+
details: {
|
|
104
|
+
status: response.status,
|
|
105
|
+
statusText: response.statusText
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const contentType = response.headers.get("content-type");
|
|
111
|
+
if (contentType?.includes("application/json")) {
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
data: await response.json(),
|
|
115
|
+
contentType: contentType || void 0
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
119
|
+
if (contentType?.includes("octet-stream") && isTextContent(arrayBuffer)) {
|
|
120
|
+
return {
|
|
121
|
+
success: true,
|
|
122
|
+
data: arrayBuffer,
|
|
123
|
+
contentType: "text/plain"
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
data: await response.json(),
|
|
129
|
+
contentType: contentType || void 0
|
|
130
|
+
};
|
|
131
|
+
} catch (error) {
|
|
132
|
+
throw new Error("Failed to read resource");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function updateResource(config, id, data) {
|
|
136
|
+
try {
|
|
137
|
+
const headers = generateHeaders(config);
|
|
138
|
+
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
139
|
+
method: "PUT",
|
|
140
|
+
headers,
|
|
141
|
+
body: JSON.stringify(data),
|
|
142
|
+
cache: "default"
|
|
143
|
+
});
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
const error = await response.json();
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: {
|
|
149
|
+
message: error.message || `Server returned ${response.status}`,
|
|
150
|
+
code: response.status.toString(),
|
|
151
|
+
details: {
|
|
152
|
+
status: response.status,
|
|
153
|
+
statusText: response.statusText
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: true,
|
|
160
|
+
data: await response.json()
|
|
161
|
+
};
|
|
162
|
+
} catch (error) {
|
|
163
|
+
throw new Error("Failed to update resource");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function deleteResource(config, id) {
|
|
167
|
+
try {
|
|
168
|
+
const headers = generateHeaders(config);
|
|
169
|
+
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
170
|
+
method: "DELETE",
|
|
171
|
+
headers,
|
|
172
|
+
cache: "default"
|
|
173
|
+
});
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
const error = await response.json();
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
error: {
|
|
179
|
+
message: error.message || `Server returned ${response.status}`,
|
|
180
|
+
code: response.status.toString(),
|
|
181
|
+
details: {
|
|
182
|
+
status: response.status,
|
|
183
|
+
statusText: response.statusText
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
success: true
|
|
190
|
+
};
|
|
191
|
+
} catch (error) {
|
|
192
|
+
throw new Error("Failed to delete resource");
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
196
|
+
0 && (module.exports = {
|
|
197
|
+
createResource,
|
|
198
|
+
deleteResource,
|
|
199
|
+
readResource,
|
|
200
|
+
updateResource
|
|
201
|
+
});
|
|
202
|
+
//# sourceMappingURL=baseApi.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/baseApi.action.ts","../../src/utils/utils.ts"],"sourcesContent":["\"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 { 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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
|
|
3
|
+
// src/utils/utils.ts
|
|
4
|
+
function generateHeaders(config) {
|
|
5
|
+
const headers = {
|
|
6
|
+
"Content-Type": "application/json"
|
|
7
|
+
};
|
|
8
|
+
if (config.token) {
|
|
9
|
+
headers["Authorization"] = `Bearer ${config.token}`;
|
|
10
|
+
}
|
|
11
|
+
if (config.headers) {
|
|
12
|
+
Object.entries(config.headers).forEach(([key, value]) => {
|
|
13
|
+
headers[key] = value;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return headers;
|
|
17
|
+
}
|
|
18
|
+
function isTextContent(buffer) {
|
|
19
|
+
try {
|
|
20
|
+
const text = new TextDecoder().decode(buffer);
|
|
21
|
+
return /^[\w\#\-\*]/.test(text.trim());
|
|
22
|
+
} catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// src/actions/baseApi.action.ts
|
|
28
|
+
async function createResource(config, payload) {
|
|
29
|
+
try {
|
|
30
|
+
const headers = generateHeaders(config);
|
|
31
|
+
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers,
|
|
34
|
+
body: JSON.stringify(payload),
|
|
35
|
+
cache: "default"
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const error = await response.json();
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: {
|
|
42
|
+
message: error.message || `Server returned ${response.status}`,
|
|
43
|
+
code: response.status.toString(),
|
|
44
|
+
details: {
|
|
45
|
+
status: response.status,
|
|
46
|
+
statusText: response.statusText
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
success: true,
|
|
53
|
+
data: await response.json()
|
|
54
|
+
};
|
|
55
|
+
} catch (error) {
|
|
56
|
+
throw new Error("Failed to create resource");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function readResource(config, id) {
|
|
60
|
+
try {
|
|
61
|
+
const headers = generateHeaders(config);
|
|
62
|
+
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
63
|
+
const response = await fetch(url, {
|
|
64
|
+
method: "GET",
|
|
65
|
+
headers,
|
|
66
|
+
cache: "default"
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const error = await response.json();
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: {
|
|
73
|
+
message: error.message || `Server returned ${response.status}`,
|
|
74
|
+
code: response.status.toString(),
|
|
75
|
+
details: {
|
|
76
|
+
status: response.status,
|
|
77
|
+
statusText: response.statusText
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const contentType = response.headers.get("content-type");
|
|
83
|
+
if (contentType?.includes("application/json")) {
|
|
84
|
+
return {
|
|
85
|
+
success: true,
|
|
86
|
+
data: await response.json(),
|
|
87
|
+
contentType: contentType || void 0
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
91
|
+
if (contentType?.includes("octet-stream") && isTextContent(arrayBuffer)) {
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
data: arrayBuffer,
|
|
95
|
+
contentType: "text/plain"
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
data: await response.json(),
|
|
101
|
+
contentType: contentType || void 0
|
|
102
|
+
};
|
|
103
|
+
} catch (error) {
|
|
104
|
+
throw new Error("Failed to read resource");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function updateResource(config, id, data) {
|
|
108
|
+
try {
|
|
109
|
+
const headers = generateHeaders(config);
|
|
110
|
+
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
111
|
+
method: "PUT",
|
|
112
|
+
headers,
|
|
113
|
+
body: JSON.stringify(data),
|
|
114
|
+
cache: "default"
|
|
115
|
+
});
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
const error = await response.json();
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: {
|
|
121
|
+
message: error.message || `Server returned ${response.status}`,
|
|
122
|
+
code: response.status.toString(),
|
|
123
|
+
details: {
|
|
124
|
+
status: response.status,
|
|
125
|
+
statusText: response.statusText
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
success: true,
|
|
132
|
+
data: await response.json()
|
|
133
|
+
};
|
|
134
|
+
} catch (error) {
|
|
135
|
+
throw new Error("Failed to update resource");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function deleteResource(config, id) {
|
|
139
|
+
try {
|
|
140
|
+
const headers = generateHeaders(config);
|
|
141
|
+
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
142
|
+
method: "DELETE",
|
|
143
|
+
headers,
|
|
144
|
+
cache: "default"
|
|
145
|
+
});
|
|
146
|
+
if (!response.ok) {
|
|
147
|
+
const error = await response.json();
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: {
|
|
151
|
+
message: error.message || `Server returned ${response.status}`,
|
|
152
|
+
code: response.status.toString(),
|
|
153
|
+
details: {
|
|
154
|
+
status: response.status,
|
|
155
|
+
statusText: response.statusText
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
success: true
|
|
162
|
+
};
|
|
163
|
+
} catch (error) {
|
|
164
|
+
throw new Error("Failed to delete resource");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export {
|
|
168
|
+
createResource,
|
|
169
|
+
deleteResource,
|
|
170
|
+
readResource,
|
|
171
|
+
updateResource
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=baseApi.action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/utils.ts","../../src/actions/baseApi.action.ts"],"sourcesContent":["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":[]}
|