456 lines
12 KiB
TypeScript
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', {});
|
|
}
|