SDK

Fxd SDK Package

fxd-sdk npm package 包含了 FxdSdk 类 和一些辅助函数:

Fxd SDK 类

  1. 构造函数
  • 用途:SDK 的主类

  • 构造函数参数:

    • packageInfo:对象类型,包信息,可选
      constructor(packageInfo = null) {
          if (!packageInfo) packageInfo = readPackageSync();
          this.apiBase = API_URL;
          this.token = null;
          this.loadToken();
          this.name = packageInfo.name || this.constructor.name;
          this.displayName = packageInfo.displayName || this.name ;
          this.args = packageInfo.meta?.args || [];
          const dbFolder = path.resolve(process.env.HOME, '.fxd', 'db');
          const dbFile = path.resolve(dbFolder, `${this.name}.json`);
          const dbConfig = new Config(dbFile, true, true);
          this.db = new JsonDB(dbConfig);
      }
    
  1. setValue 方法
  • 用途:设置数据
  • 参数:
    • key:字符串,键名,必填
    • value:任意类型,值,必填
    • overwrite:布尔类型,是否覆盖,可选,默认为 true
  1. getValue 方法
  • 用途:获取数据
  • 参数:
    • key:字符串,键名,必填
  1. setToken 方法
  • 用途:设置 token
  • 参数:
    • token:字符串,token 值,必填
  1. saveToken 方法
  • 用途:保存 token 到文件
  • 参数:
    • token:字符串,token 值,必填
  1. loadToken 方法
  • 用途:从文件加载 token
  • 参数:无
  1. cleanToken 方法
  • 用途:清除保存的 token
  • 参数:无
  1. _request 方法
  • 用途:发起请求
  • 参数:
    • method:字符串,请求方法,必填
    • path:字符串,路径,必填
    • data:对象,数据,可选
  1. profile 方法
  • 用途:获取 profile
  • 参数:无
  1. sha1 方法
  • 用途:计算 sha1 值
  • 参数:
    • string:字符串,输入内容,必填
  1. scSend 方法
  • 用途:发送Server酱消息
  • 参数:
    • text:字符串,文本内容,必填
    • desp:字符串,消息内容,可选
    • key:字符串,Server酱的key,可选

辅助函数

  1. getDirname 函数
  • 用途:获取目录名
  • 参数:
    • filePath:字符串,文件路径,必填
  1. getPackageInfo 函数
  • 用途:获取 package.json 信息
  • 参数:
    • filePath:字符串,文件路径,必填
  1. myFetch 函数
  • 用途:扩展 fetch,添加 try catch 和超时
  • 参数:
    • url:字符串,请求地址,必填
    • options:对象,选项,必填
    • timeout:数字,超时时间,可选,默认 5 秒

SDK 的方法在所有的 Fxd APP 中都可以通过 this.sdk.method(args) 的方式来调用。

核心应用 fxd-app-core

fxd-app-core 使用 fxd-sdk 完成一些辅助功能,同时提供 run 方法作为入口。也包含了一些命令行和云端需要使用的内部命令,比如 list(显示本地保存的命令列表,以避免重复输入),login(登入到云端,以使用云端能力)。所有内部命令在命令行下使用时,均以 _ 开头,如 fxd _login

初始化

constructor() 
{
    this.sdk = new fxdsdk(getpackageinfo(import.meta.url)); 
    // 参数获取方法 this.get依赖于this.sdk.args,因此只要使用 this.get 的程序都需要在构造函数中加入上边这行
    // ...
}

fxd-app-core 的其他方法和函数

FxdApp 的方法

  1. run 方法
  • 用途:处理命令行参数,调用对应命令的处理函数
  • 参数:
    • params:数组,命令行参数
    • opts:对象,选项参数
    • raw:布尔值,是否原始模式
  • 返回值:无
  1. list 方法
  • 用途:列出保存的命令
  • 参数:无
  • 返回值:布尔值,表示是否成功
  1. exe 方法
  • 用途:执行保存的某条命令
  • 参数:
    • index:数字,命令索引值
  • 返回值:无
  1. exec 方法
  • 用途:执行保存的某条命令
  • 参数:
    • index:数字,命令索引值
  • 返回值:无
  1. login方法
  • 用途:登录
  • 参数:
    • args:数组,参数
    • opts:对象,选项参数
      • token:字符串,登录 token
  • 返回值:无
  1. logout方法
  • 用途:退出登录
  • 参数:无
  • 返回值:无
  1. profile方法
  • 用途:获取用户信息
  • 参数:无
  • 返回值:用户信息对象
  1. echoError方法
  • 用途:显示错误信息
  • 参数:
    • msg:字符串,错误信息
  • 返回值:无
  1. help方法
  • 用途:显示帮助信息
  • 参数:无
  • 返回值:无
  1. setDefaultOpts方法
  • 用途:设置默认选项参数
  • 参数:
    • opts:对象,要设置的默认选项参数
  • 返回值:无
  1. setDefaultCommand方法
  • 用途:设置默认命令
  • 参数:
    • command:字符串,要设置的默认命令
  • 返回值:无
  1. get方法
  • 用途:获取参数值
  • 参数:
    • key:字符串,参数名
    • opts:对象,选项参数
    • command:字符串,命令名
  • 返回值:参数值
  1. log方法
  • 用途:打印日志
  • 参数:任意个要打印的日志内容
  • 返回值:无
  1. return方法
  • 用途:统一输出最终结果
  • 参数:
    • ret:任意类型,要输出的结果
  • 返回值:传入的结果
  1. feedPublish方法
  • 用途:发布feed
  • 参数:
    • content:字符串,feed内容
    • meta:对象,feed元信息
    • is_public:布尔值,是否公开
    • command:字符串,命令名
  • 返回值:布尔值,表示是否成功
  1. feedRemove方法
  • 用途:删除已发布的feed
  • 参数:
    • id:字符串,feed的id
  • 返回值:布尔值,表示是否成功

辅助函数

  1. mergeProps函数
  • 用途:合并属性
  • 参数:
    • oldObject:对象,原有对象
    • props:字符串,属性定义
  • 返回值:合并后的新对象

mergeProps函数主要用于派生类选择性的继承父类写在 Package.json 中的参数定义等信息。

比如, fxd-app-check-chanPackage.json 中定义了参数:

{
  "name": "fxd-app-check-chan",
  //...
  },
  "meta":
  {
    "args":
    {
      "watch":
      {
        "sendkey": {
          "name": "sendkey",
          "description": "检测到变化时发送消息的发送键",
          "type": "string",
          "example": "abcdefg1234"  
        },
        "feed_publish":
        {
          "name": "feed_publish",
          "description": "是否发布为RSS Feed",
          "type": "boolean",
          "default": false,
          "example": "true"
        }
      },
      "main|check":
      {
        "url": {
          "name": "url",
          "description": "要打开的页面 URL",
          "type": "string",
          "required": true,
          "example": "https://www.example.com" 
        }
        // ... 
      }
    }
}

fxd-app-douyin-count 继承于它,但不想重复在 Package.json 中书写参数定义,那么可以在构造函数中如下处理:

constructor() {
    super();
    const oldArgsSettings = this.sdk.args; // 获得父类的参数定义
    this.sdk = new FxdSdk(getPackageInfo(import.meta.url));
    // 使用 mergeProps 用父类定义中选择性复制部分
    this.sdk.args = this.mergeProps(oldArgsSettings,[
        'watch',// watch 下的全部属性
        'main|check.-selectors,prejs' // 排除 main|check 属性下的 selectors,prejs 属性
    ]);
}