| | import { WEBUI_API_BASE_URL } from '$lib/constants'; |
| | import { getTimeRange } from '$lib/utils'; |
| |
|
| | type NoteItem = { |
| | title: string; |
| | data: object; |
| | meta?: null | object; |
| | access_grants?: object[]; |
| | }; |
| |
|
| | export const createNewNote = async (token: string, note: NoteItem) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/create`, { |
| | method: 'POST', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | }, |
| | body: JSON.stringify({ |
| | ...note |
| | }) |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const getNotes = async (token: string = '', raw: boolean = false) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/`, { |
| | method: 'GET', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | } |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | if (raw) { |
| | return res; |
| | } |
| |
|
| | if (!Array.isArray(res)) { |
| | return {}; |
| | } |
| |
|
| | |
| | const grouped: Record<string, any[]> = {}; |
| | for (const note of res) { |
| | const timeRange = getTimeRange(note.updated_at / 1000000000); |
| | if (!grouped[timeRange]) { |
| | grouped[timeRange] = []; |
| | } |
| | grouped[timeRange].push({ |
| | ...note, |
| | timeRange |
| | }); |
| | } |
| |
|
| | return grouped; |
| | }; |
| |
|
| | export const searchNotes = async ( |
| | token: string = '', |
| | query: string | null = null, |
| | viewOption: string | null = null, |
| | permission: string | null = null, |
| | sortKey: string | null = null, |
| | page: number | null = null |
| | ) => { |
| | let error = null; |
| | const searchParams = new URLSearchParams(); |
| |
|
| | if (query !== null) { |
| | searchParams.append('query', query); |
| | } |
| |
|
| | if (viewOption !== null) { |
| | searchParams.append('view_option', viewOption); |
| | } |
| |
|
| | if (permission !== null) { |
| | searchParams.append('permission', permission); |
| | } |
| |
|
| | if (sortKey !== null) { |
| | searchParams.append('order_by', sortKey); |
| | } |
| |
|
| | if (page !== null) { |
| | searchParams.append('page', `${page}`); |
| | } |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/search?${searchParams.toString()}`, { |
| | method: 'GET', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | } |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const getNoteList = async (token: string = '', page: number | null = null) => { |
| | let error = null; |
| | const searchParams = new URLSearchParams(); |
| |
|
| | if (page !== null) { |
| | searchParams.append('page', `${page}`); |
| | } |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/?${searchParams.toString()}`, { |
| | method: 'GET', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | } |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const getNoteById = async (token: string, id: string) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/${id}`, { |
| | method: 'GET', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | } |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| |
|
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const updateNoteById = async (token: string, id: string, note: NoteItem) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/${id}/update`, { |
| | method: 'POST', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | }, |
| | body: JSON.stringify({ |
| | ...note |
| | }) |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| |
|
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const updateNoteAccessGrants = async (token: string, id: string, accessGrants: any[]) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/${id}/access/update`, { |
| | method: 'POST', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | }, |
| | body: JSON.stringify({ access_grants: accessGrants }) |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|
| | export const deleteNoteById = async (token: string, id: string) => { |
| | let error = null; |
| |
|
| | const res = await fetch(`${WEBUI_API_BASE_URL}/notes/${id}/delete`, { |
| | method: 'DELETE', |
| | headers: { |
| | Accept: 'application/json', |
| | 'Content-Type': 'application/json', |
| | authorization: `Bearer ${token}` |
| | } |
| | }) |
| | .then(async (res) => { |
| | if (!res.ok) throw await res.json(); |
| | return res.json(); |
| | }) |
| | .then((json) => { |
| | return json; |
| | }) |
| | .catch((err) => { |
| | error = err.detail; |
| |
|
| | console.error(err); |
| | return null; |
| | }); |
| |
|
| | if (error) { |
| | throw error; |
| | } |
| |
|
| | return res; |
| | }; |
| |
|