librianAI_v1.9 / src /lib /api.js
opencode
Deploy stable Inference-API version to v1.9
5afb033
Raw
History Blame Contribute Delete
5.29 kB
// On Hugging Face, we serve from the same origin.
// On GitHub Pages, we point to the HF API.
const isGitHubPages = window.location.hostname.includes('github.io');
const BACKEND_URL = isGitHubPages
? "https://butler-columnists-christopher-fantasy.trycloudflare.com"
: "";
const LIBRARIAN_KEY = "hellowork.1234";
export async function search(prompt, library = "all") {
const res = await fetch(`${BACKEND_URL}/api/search`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${LIBRARIAN_KEY}`,
'x-librarian-key': LIBRARIAN_KEY
},
body: JSON.stringify({ prompt, library, top_k: 5 })
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function listBooks(library, query = null) {
const res = await fetch(`${BACKEND_URL}/api/list`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${LIBRARIAN_KEY}`,
'x-librarian-key': LIBRARIAN_KEY
},
body: JSON.stringify({ library, query })
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function advancedSearch(params) {
const res = await fetch(`${BACKEND_URL}/api/advanced-search`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${LIBRARIAN_KEY}`,
'x-librarian-key': LIBRARIAN_KEY
},
body: JSON.stringify(params)
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function sendWhatsAppMessage(instance, number, text) {
const res = await fetch(`${BACKEND_URL}/api/whatsapp/send`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${LIBRARIAN_KEY}`,
'x-librarian-key': LIBRARIAN_KEY
},
body: JSON.stringify({ instance, number, text })
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function fetchInstances() {
const res = await fetch(`${BACKEND_URL}/instance/fetchInstances`, {
headers: { 'apikey': LIBRARIAN_KEY }
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function createInstance(name) {
const res = await fetch(`${BACKEND_URL}/instance/create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': LIBRARIAN_KEY
},
body: JSON.stringify({
instanceName: name,
token: Math.random().toString(36).substring(2, 15),
qrcode: true,
integration: 'WHATSAPP-BAILEYS'
})
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function requestPairingCode(name, number) {
// Try the most likely endpoints for the latest Evolution API versions
const endpoints = [
`${BACKEND_URL}/instance/connect/${name}/pairingCode`,
`${BACKEND_URL}/instance/connect/${name}/pairing_code`,
`${BACKEND_URL}/instance/pairingcode/${name}`,
];
for (const url of endpoints) {
try {
const res = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'apikey': LIBRARIAN_KEY
},
body: JSON.stringify({ phoneNumber: number })
});
if (res.ok) {
return await res.json();
}
} catch (e) {
console.log(`[api] Trying endpoint ${url} failed...`);
}
}
throw new Error("Pairing code endpoint not found on this API version");
}
export async function connectInstance(name, number = null) {
let url = `${BACKEND_URL}/instance/connect/${name}`;
if (number) url += `?number=${number}`;
const res = await fetch(url, {
headers: { 'apikey': LIBRARIAN_KEY }
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function logoutInstance(name) {
const res = await fetch(`${BACKEND_URL}/instance/logout/${name}`, {
method: 'DELETE',
headers: { 'apikey': LIBRARIAN_KEY }
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function deleteInstance(name) {
const res = await fetch(`${BACKEND_URL}/instance/delete/${name}`, {
method: 'DELETE',
headers: { 'apikey': LIBRARIAN_KEY }
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function fetchOverdueBooks() {
const res = await fetch(`${BACKEND_URL}/api/overdue`, {
headers: {
'Authorization': `Bearer ${LIBRARIAN_KEY}`,
'x-librarian-key': LIBRARIAN_KEY
}
});
if (!res.ok) throw new Error(`Server error: ${res.status}`);
return await res.json();
}
export async function getCachedQR(instanceName) {
try {
const res = await fetch(`${BACKEND_URL}/api/whatsapp/qr`);
if (!res.ok) return null;
const data = await res.json();
// Only return the cache if it belongs to the requested instance
if (data?.instance === instanceName) {
return data;
}
return null;
} catch (e) {
console.error("[api] getCachedQR error:", e);
return null;
}
}