fnos
v0.3.0
Published
TypeScript client for Fnos WebSocket communication
Maintainers
Readme
fnos
飞牛 fnOS 的 TypeScript SDK。
注意:这个 SDK 非官方提供。
项目信息
- 源代码仓库: https://github.com/Timandes/fnos-ts-client
- 问题追踪: GitHub Issues
- 更新日志: CHANGELOG.md
项目结构
fnos/
├── src/
│ ├── client.ts # FnosClient 核心类(支持 SSL/WSS)
│ ├── crypto.ts # 加密工具类 (RSA + AES + HMAC)
│ ├── exceptions.ts # 异常类
│ ├── resource_monitor.ts # 资源监控类
│ ├── store.ts # 存储类
│ ├── sac.ts # SAC 类
│ ├── system_info.ts # 系统信息类
│ ├── user.ts # 用户类
│ ├── network.ts # 网络类
│ ├── file.ts # 文件类
│ ├── docker_manager.ts # Docker 管理类
│ ├── event_logger.ts # 事件日志类
│ ├── share.ts # 共享配置类
│ ├── notify.ts # 通知类
│ ├── iscsi_manager.ts # iSCSI 管理类
│ ├── logger.ts # 日志工具类
│ ├── index.ts # 主入口文件
│ └── test/
│ ├── unit/ # 单元测试
│ │ ├── client.test.ts
│ │ └── crypto.test.ts
│ └── integration/ # 集成测试(连接 fnos-mock-server)
│ ├── helpers.ts
│ ├── system_info.test.ts
│ ├── file.test.ts
│ ├── store.test.ts
│ ├── user.test.ts
│ ├── network.test.ts
│ ├── resource_monitor.test.ts
│ └── new_modules.test.ts
├── examples/ # 示例脚本
│ ├── demo.ts
│ ├── ssl_connect.ts
│ ├── docker_manager.ts
│ ├── event_logger.ts
│ ├── share.ts
│ ├── notify.ts
│ ├── iscsi_manager.ts
│ ├── resource_monitor.ts
│ ├── resource_monitor_general.ts
│ ├── user.ts
│ ├── network.ts
│ ├── file.ts
│ ├── sac.ts
│ ├── store.ts
│ ├── system_info.ts
│ ├── login_via_token.ts
│ ├── not_connected.ts
│ └── reconnect.ts
├── package.json
├── tsconfig.json
└── README.md安装
pnpm install编译
pnpm build运行测试
pnpm test使用示例
基本使用
import { FnosClient } from './src/index.js';
async function main() {
const client = new FnosClient();
// 设置消息回调
client.onMessage((message) => {
console.log(`收到消息: ${message}`);
});
// 连接到服务器
await client.connect('nas-9.timandes.net:5666');
// 登录
const result = await client.login('SystemMonitor', 'password');
console.log('登录结果:', result);
// 关闭连接
client.close();
}
main().catch(console.error);SSL/WSS 连接
import { FnosClient } from './src/index.js';
async function main() {
const client = new FnosClient();
// 方式一: 使用 wss:// 协议前缀(优先级最高)
await client.connect('wss://nas-9.timandes.net:5667', 3000, true, true);
// 方式二: 使用参数指定 SSL
await client.connect('nas-9.timandes.net:5667', 3000, true, true);
// useSsl skipSslVerify
// 登录
const result = await client.login('admin', 'password');
console.log('登录结果:', result);
client.close();
}
main().catch(console.error);运行示例脚本
# 基本示例
pnpm tsx examples/demo.ts --user=SystemMonitor --password=password -e=nas-9.timandes.net:5666
# 资源监控示例
pnpm tsx examples/resource_monitor.ts --user=SystemMonitor --password=password -e=nas-9.timandes.net:5666
# 用户模块示例
pnpm tsx examples/user.ts --user=SystemMonitor --password=password -e=nas-9.timandes.net:5666
# 其他示例...API 参考
FnosClient
| 方法名 | 简介 |
| ---- | ---- |
| __init__ | 初始化客户端,支持 type 参数("main"、"timer"或"file",默认为"main") |
| connect | 连接到 WebSocket 服务器(支持 SSL/WSS,参数:endpoint, timeout, useSsl, skipSslVerify) |
| login | 用户登录方法 |
| loginViaToken | 使用 token 登录方法 |
| getDecryptedSecret | 获取解密后的 secret |
| onMessage | 设置消息回调函数 |
| request | 发送请求 |
| requestPayload | 以 payload 为主体发送请求 |
| requestPayloadWithResponse | 以 payload 为主体发送请求并返回响应 |
| reconnect | 重新连接到服务器 |
| close | 关闭 WebSocket 连接 |
| isConnected | 获取连接状态 |
ResourceMonitor
| 方法名 | 简介 |
| ---- | ---- |
| cpu | 请求 CPU 资源监控信息 |
| gpu | 请求 GPU 资源监控信息 |
| memory | 请求内存资源监控信息 |
| disk | 请求磁盘资源监控信息 |
| net | 请求网络资源监控信息 |
| general | 请求通用资源监控信息 |
Store
| 方法名 | 简介 |
| ---- | ---- |
| general | 请求存储通用信息 |
| calculateSpace | 计算存储空间信息 |
| listDisks | 列出磁盘信息 |
| getDiskSmart | 获取磁盘 SMART 信息 |
| getState | 获取存储状态信息 |
| getUserStorage | 获取用户存储信息 |
DockerManager
| 方法名 | 简介 |
| ---- | ---- |
| listComposes | 获取 Docker Compose 项目列表 |
| listContainers | 获取容器列表 |
| stats | 获取容器统计信息 |
| getSystemSettings | 获取 Docker 系统设置 |
EventLogger
| 方法名 | 简介 |
| ---- | ---- |
| commonList | 获取事件日志列表 |
Share
| 方法名 | 简介 |
| ---- | ---- |
| smbOpt | 获取 SMB 共享配置信息 |
Notify
| 方法名 | 简介 |
| ---- | ---- |
| unreadTotal | 获取未读通知总数 |
IscsiManager
| 方法名 | 简介 |
| ---- | ---- |
| getConfig | 获取 iSCSI 配置 |
| listInitiators | 获取 iSCSI Initiator 列表 |
| listLuns | 获取 iSCSI LUN 列表 |
| listLunUsergroups | 获取 iSCSI LUN 用户组列表 |
| listTargets | 获取 iSCSI Target 列表 |
SAC
| 方法名 | 简介 |
| ---- | ---- |
| upsStatus | 请求 UPS 状态信息 |
SystemInfo
| 方法名 | 简介 |
| ---- | ---- |
| getHostName | 请求主机名信息 |
| getTrimVersion | 请求 Trim 版本信息 |
| getMachineId | 请求机器 ID 信息 |
| getHardwareInfo | 请求硬件信息 |
| getUptime | 请求系统运行时间信息 |
User
| 方法名 | 简介 |
| ---- | ---- |
| getInfo | 获取用户信息 |
| listUserGroups | 请求用户和组列表信息 |
| groupUsers | 请求用户分组信息 |
| isAdmin | 检查当前用户是否为管理员 |
Network
| 方法名 | 简介 |
| ---- | ---- |
| list | 列出网络信息 |
| detect | 检测网络接口 |
File
| 方法名 | 简介 |
| ---- | ---- |
| list | 列出指定目录下的文件和文件夹 |
| mkdir | 创建文件夹 |
| remove | 删除文件或文件夹 |
| getAcl | 获取文件的 ACL(访问控制列表)信息 |
加密实现
本项目使用 Node.js 内置的 crypto 模块实现了与 pyfnos 项目完全一致的加密功能:
- RSA: 使用 RSA-PKCS1-v1_5 填充进行公钥加密
- AES: 使用 AES-256-CBC 模式进行对称加密
- HMAC: 使用 HMAC-SHA256 进行消息认证
许可证
Apache License 2.0
