/** * Copyright (c) 2023 frostime. All rights reserved. * https://github.com/frostime/sy-plugin-template-vite * * See API Document in [API.md](https://github.com/siyuan-note/siyuan/blob/master/API.md) * API 文档见 [API_zh_CN.md](https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md) */ import { fetchSyncPost, IWebSocketData } from "siyuan"; export async function request(url: string, data: any) { let response: IWebSocketData = await fetchSyncPost(url, data); let res = response.code === 0 ? response.data : null; return res; } // **************************************** Noteboook **************************************** export async function lsNotebooks(): Promise { let url = '/api/notebook/lsNotebooks'; return request(url, ''); } export async function openNotebook(notebook: NotebookId) { let url = '/api/notebook/openNotebook'; return request(url, { notebook: notebook }); } export async function closeNotebook(notebook: NotebookId) { let url = '/api/notebook/closeNotebook'; return request(url, { notebook: notebook }); } export async function renameNotebook(notebook: NotebookId, name: string) { let url = '/api/notebook/renameNotebook'; return request(url, { notebook: notebook, name: name }); } export async function createNotebook(name: string): Promise { let url = '/api/notebook/createNotebook'; return request(url, { name: name }); } export async function removeNotebook(notebook: NotebookId) { let url = '/api/notebook/removeNotebook'; return request(url, { notebook: notebook }); } export async function getNotebookConf(notebook: NotebookId): Promise { let data = { notebook: notebook }; let url = '/api/notebook/getNotebookConf'; return request(url, data); } export async function setNotebookConf(notebook: NotebookId, conf: NotebookConf): Promise { let data = { notebook: notebook, conf: conf }; let url = '/api/notebook/setNotebookConf'; return request(url, data); } // **************************************** File Tree **************************************** export async function createDocWithMd(notebook: NotebookId, path: string, markdown: string): Promise { let data = { notebook: notebook, path: path, markdown: markdown, }; let url = '/api/filetree/createDocWithMd'; return request(url, data); } export async function renameDoc(notebook: NotebookId, path: string, title: string): Promise { let data = { doc: notebook, path: path, title: title }; let url = '/api/filetree/renameDoc'; return request(url, data); } export async function removeDoc(notebook: NotebookId, path: string) { let data = { notebook: notebook, path: path, }; let url = '/api/filetree/removeDoc'; return request(url, data); } export async function moveDocs(fromPaths: string[], toNotebook: NotebookId, toPath: string) { let data = { fromPaths: fromPaths, toNotebook: toNotebook, toPath: toPath }; let url = '/api/filetree/moveDocs'; return request(url, data); } export async function getHPathByPath(notebook: NotebookId, path: string): Promise { let data = { notebook: notebook, path: path }; let url = '/api/filetree/getHPathByPath'; return request(url, data); } export async function getHPathByID(id: BlockId): Promise { let data = { id: id }; let url = '/api/filetree/getHPathByID'; return request(url, data); } export async function getIDsByHPath(notebook: NotebookId, path: string): Promise { let data = { notebook: notebook, path: path }; let url = '/api/filetree/getIDsByHPath'; return request(url, data); } // **************************************** Asset Files **************************************** export async function upload(assetsDirPath: string, files: any[]): Promise { let form = new FormData(); form.append('assetsDirPath', assetsDirPath); for (let file of files) { form.append('file[]', file); } let url = '/api/asset/upload'; return request(url, form); } // **************************************** Block **************************************** type DataType = "markdown" | "dom"; export async function insertBlock( dataType: DataType, data: string, nextID?: BlockId, previousID?: BlockId, parentID?: BlockId ): Promise { let payload = { dataType: dataType, data: data, nextID: nextID, previousID: previousID, parentID: parentID } let url = '/api/block/insertBlock'; return request(url, payload); } export async function prependBlock(dataType: DataType, data: string, parentID: BlockId | DocumentId): Promise { let payload = { dataType: dataType, data: data, parentID: parentID } let url = '/api/block/prependBlock'; return request(url, payload); } export async function appendBlock(dataType: DataType, data: string, parentID: BlockId | DocumentId): Promise { let payload = { dataType: dataType, data: data, parentID: parentID } let url = '/api/block/appendBlock'; return request(url, payload); } export async function updateBlock(dataType: DataType, data: string, id: BlockId): Promise { let payload = { dataType: dataType, data: data, id: id } let url = '/api/block/updateBlock'; return request(url, payload); } export async function deleteBlock(id: BlockId): Promise { let data = { id: id } let url = '/api/block/deleteBlock'; return request(url, data); } export async function moveBlock(id: BlockId, previousID?: PreviousID, parentID?: ParentID): Promise { let data = { id: id, previousID: previousID, parentID: parentID } let url = '/api/block/moveBlock'; return request(url, data); } export async function foldBlock(id: BlockId) { let data = { id: id } let url = '/api/block/foldBlock'; return request(url, data); } export async function unfoldBlock(id: BlockId) { let data = { id: id } let url = '/api/block/unfoldBlock'; return request(url, data); } export async function getBlockKramdown(id: BlockId): Promise { let data = { id: id } let url = '/api/block/getBlockKramdown'; return request(url, data); } export async function getChildBlocks(id: BlockId): Promise { let data = { id: id } let url = '/api/block/getChildBlocks'; return request(url, data); } export async function transferBlockRef(fromID: BlockId, toID: BlockId, refIDs: BlockId[]) { let data = { fromID: fromID, toID: toID, refIDs: refIDs } let url = '/api/block/transferBlockRef'; return request(url, data); } // **************************************** Attributes **************************************** export async function setBlockAttrs(id: BlockId, attrs: { [key: string]: string }) { let data = { id: id, attrs: attrs } let url = '/api/attr/setBlockAttrs'; return request(url, data); } export async function getBlockAttrs(id: BlockId): Promise<{ [key: string]: string }> { let data = { id: id } let url = '/api/attr/getBlockAttrs'; return request(url, data); } // **************************************** SQL **************************************** export async function sql(sql: string): Promise { let sqldata = { stmt: sql, }; let url = '/api/query/sql'; return request(url, sqldata); } export async function getBlockByID(blockId: string): Promise { let sqlScript = `select * from blocks where id ='${blockId}'`; let data = await sql(sqlScript); return data[0]; } // **************************************** Template **************************************** export async function render(id: DocumentId, path: string): Promise { let data = { id: id, path: path } let url = '/api/template/render'; return request(url, data); } export async function renderSprig(template: string): Promise { let url = '/api/template/renderSprig'; return request(url, { template: template }); } // **************************************** File **************************************** export async function getFile(path: string): Promise { let data = { path: path } let url = '/api/file/getFile'; try { let file = await fetchSyncPost(url, data); return file; } catch (error_msg) { return null; } } export async function putFile(path: string, isDir: boolean, file: any) { let form = new FormData(); form.append('path', path); form.append('isDir', isDir.toString()); // Copyright (c) 2023, terwer. // https://github.com/terwer/siyuan-plugin-importer/blob/v1.4.1/src/api/kernel-api.ts form.append('modTime', Math.floor(Date.now() / 1000).toString()); form.append('file', file); let url = '/api/file/putFile'; return request(url, form); } export async function removeFile(path: string) { let data = { path: path } let url = '/api/file/removeFile'; return request(url, data); } export async function readDir(path: string): Promise { let data = { path: path } let url = '/api/file/readDir'; return request(url, data); } // **************************************** Export **************************************** export async function exportMdContent(id: DocumentId): Promise { let data = { id: id } let url = '/api/export/exportMdContent'; return request(url, data); } export async function exportResources(paths: string[], name: string): Promise { let data = { paths: paths, name: name } let url = '/api/export/exportResources'; return request(url, data); } // **************************************** Convert **************************************** export type PandocArgs = string; export async function pandoc(args: PandocArgs[]) { let data = { args: args } let url = '/api/convert/pandoc'; return request(url, data); } // **************************************** Notification **************************************** // /api/notification/pushMsg // { // "msg": "test", // "timeout": 7000 // } export async function pushMsg(msg: string, timeout: number = 7000) { let payload = { msg: msg, timeout: timeout }; let url = "/api/notification/pushMsg"; return request(url, payload); } export async function pushErrMsg(msg: string, timeout: number = 7000) { let payload = { msg: msg, timeout: timeout }; let url = "/api/notification/pushErrMsg"; return request(url, payload); } // **************************************** Network **************************************** export async function forwardProxy( url: string, method: string = 'GET', payload: any = {}, headers: any[] = [], timeout: number = 7000, contentType: string = "text/html" ): Promise { let data = { url: url, method: method, timeout: timeout, contentType: contentType, headers: headers, payload: payload } let url1 = '/api/network/forwardProxy'; return request(url1, data); } // **************************************** System **************************************** export async function bootProgress(): Promise { return request('/api/system/bootProgress', {}); } export async function version(): Promise { return request('/api/system/version', {}); } export async function currentTime(): Promise { return request('/api/system/currentTime', {}); }