siyuan-jsdraw-plugin/src/api.ts
2024-06-04 15:04:07 +08:00

456 lines
12 KiB
TypeScript

/**
* 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 { fetchPost, 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<IReslsNotebooks> {
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<Notebook> {
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<IResGetNotebookConf> {
let data = { notebook: notebook };
let url = '/api/notebook/getNotebookConf';
return request(url, data);
}
export async function setNotebookConf(notebook: NotebookId, conf: NotebookConf): Promise<NotebookConf> {
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<DocumentId> {
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<DocumentId> {
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<string> {
let data = {
notebook: notebook,
path: path
};
let url = '/api/filetree/getHPathByPath';
return request(url, data);
}
export async function getHPathByID(id: BlockId): Promise<string> {
let data = {
id: id
};
let url = '/api/filetree/getHPathByID';
return request(url, data);
}
export async function getIDsByHPath(notebook: NotebookId, path: string): Promise<BlockId[]> {
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<IResUpload> {
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<IResdoOperations[]> {
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<IResdoOperations[]> {
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<IResdoOperations[]> {
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<IResdoOperations[]> {
let payload = {
dataType: dataType,
data: data,
id: id
}
let url = '/api/block/updateBlock';
return request(url, payload);
}
export async function deleteBlock(id: BlockId): Promise<IResdoOperations[]> {
let data = {
id: id
}
let url = '/api/block/deleteBlock';
return request(url, data);
}
export async function moveBlock(id: BlockId, previousID?: PreviousID, parentID?: ParentID): Promise<IResdoOperations[]> {
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<IResGetBlockKramdown> {
let data = {
id: id
}
let url = '/api/block/getBlockKramdown';
return request(url, data);
}
export async function getChildBlocks(id: BlockId): Promise<IResGetChildBlock[]> {
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<any[]> {
let sqldata = {
stmt: sql,
};
let url = '/api/query/sql';
return request(url, sqldata);
}
export async function getBlockByID(blockId: string): Promise<Block> {
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<IResGetTemplates> {
let data = {
id: id,
path: path
}
let url = '/api/template/render';
return request(url, data);
}
export async function renderSprig(template: string): Promise<string> {
let url = '/api/template/renderSprig';
return request(url, { template: template });
}
// **************************************** File ****************************************
export async function getFile(path: string): Promise<any> {
let data = {
path: path
}
let url = '/api/file/getFile';
return new Promise((resolve, _) => {
fetchPost(url, data, (content: any) => {
resolve(content)
});
});
}
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<IResReadDir> {
let data = {
path: path
}
let url = '/api/file/readDir';
return request(url, data);
}
// **************************************** Export ****************************************
export async function exportMdContent(id: DocumentId): Promise<IResExportMdContent> {
let data = {
id: id
}
let url = '/api/export/exportMdContent';
return request(url, data);
}
export async function exportResources(paths: string[], name: string): Promise<IResExportResources> {
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<IResForwardProxy> {
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<IResBootProgress> {
return request('/api/system/bootProgress', {});
}
export async function version(): Promise<string> {
return request('/api/system/version', {});
}
export async function currentTime(): Promise<number> {
return request('/api/system/currentTime', {});
}