调用此 API,可以操控脚本同步
配置的文件储存源,将会在设定目录下创建一个app
目录供此 API 使用.
API 定义如下
/**
* 操控脚本同步配置的文件储存源,将会在同步目录下创建一个app/(uuid或者storageName)目录供此 API 使用
* 当声明了@storageName时,将会将文件上传至指定的@storageName目录,多个脚本也可用此声明公用一个文件夹
* 上传时默认覆盖同名文件
* @param action 操作类型 list 列出指定目录所有文件, upload 上传文件, download 下载文件, delete 删除文件
*/
declare function CAT_fileStorage(
action: "list",
details: {
path?: string;
onload?: (files: CATType.FileStorageFileInfo[]) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "download",
details: {
filename: string;
onload: (data: Blob) => void;
onprogress?: (progress: number) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "delete",
details: {
filename: string;
onload?: () => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "upload",
details: {
filename: string;
data: Blob;
onload?: () => void;
onprogress?: (progress: number) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
interface FileStorageError {
// 错误码 1 用户未配置文件储存源 2 文件储存源配置错误 3 路径不存在
// 4 文件不存在 5 文件已存在 6 上传失败 7 下载失败 8 删除失败
code: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
msg: string;
}
interface FileStorageFileInfo {
path: string;
name: string;
size: number;
isDir: boolean;
}
经讨论有以下问题:
storageName共享
直接的使用@stroageName来指定公共的储存空间容易产生恶意脚本篡改的问题,经哥哥们这么一说,觉得value的@storageName也得加上一些限制。
解决方案
文件这里可以和哥哥们说的一样提供两个储存空间,一个私有的储存空间和公有的储存空间,在操作时通过一个参数指定是将文件储存在私有的还是公有的。
如果是公有的那么将会和GM_xhr一样弹出一个窗口需要用户确认。
初版先只实现私有的吧,公有的再斟酌斟酌
安全问题确实考虑得少,此次发布API提案进行讨论感觉效果不错,帮我考虑到了很多问题,以后如果有新特性加入,也会发布提案。
github issue:
https://github.com/scriptscat/scriptcat/issues/127