nutstore-webdav-secret-cli
v0.4.0
Published
Terminal UI for managing Nutstore WebDAV app passwords.
Maintainers
Readme
Nutstore WebDAV Secret CLI
一个基于 Bun、Solid 和 OpenTUI 的终端工具,用来查看和管理坚果云 WebDAV 第三方应用密码。
安装
- Bun
1.3+
全局安装:
npm i -g nutstore-webdav-secret-cli直接运行:
npx nutstore-webdav-secret-cli
bunx nutstore-webdav-secret-cli全局安装后也可以用短命令:
nswds注意:
- 这是 Bun CLI,机器上需要先安装 Bun
- npm 包当前分发的是预构建 JS,不是跨平台预编译二进制
- 如果你不想全局安装,也可以直接用源码开发模式
开发
安装依赖:
bun install开发模式:
bun run dev调试模式:
bun run debugdebug 脚本会:
- 关闭 alternate screen
- 打开 OpenTUI console overlay
- 更方便查看日志和错误
功能
- 读取并缓存本地 Cookie
- 拉取
mobile_asp页面并解析已有 app passwords - 创建新的 app password
- 删除已有 app password
- 复制:
- secret
- WebDAV URL
- account
本地发布
这个项目支持两种本地产物:
- npm 发布用的 Bun JS bundle
- 本地单文件二进制
构建走的是:
Bun.build(...)@opentui/solid/bun-plugin- JS 入口 wrapper 输出到
dist/cli.js - 主 bundle 输出到
dist/main.js - 二进制模式下
compile.target根据当前本机平台自动推断
类型检查:
bun run typecheck构建 npm 发布用 JS:
bun run build运行 JS 产物:
bun run run:dist构建本地二进制:
bun run build:bin产物路径:
./dist/cli.js
./dist/main.js
./dist/nswds运行已构建二进制:
bun run run:bin本地发布流程:
bun run release:local它会执行:
bun run typecheckbun run build
如果你要本地出单文件二进制:
bun run release:local:bin如果你想手动指定目标平台,可以覆盖:
BUILD_TARGET=bun-darwin-arm64 bun run build
BUILD_TARGET=bun-linux-x64 bun run buildnpm 发布
发布前检查:
bun run typecheck
bun run pack:check发布:
bun publish如果你用 npm:
npm publish --access public当前 package.json 已经配置:
bin.nswds -> ./dist/cli.jspublishConfig.access = publicprepublishOnly会先跑类型检查、构建 JS bundle 和npm pack --dry-run
GitHub 发布流
仓库现在按 Changesets + GitHub Actions + npm trusted publishing 设计。
日常流程:
- 开功能分支
- 改代码
- 运行
bun run changeset - 提交 PR
CIworkflow 会跑类型检查、二进制构建和npm pack --dry-run- PR 合并到
main Releaseworkflow 会自动创建或更新一个 release PR- 合并这个 release PR
- workflow 自动发布 npm
也就是说:
- 普通功能 PR 不会直接发 npm
- 只有 release PR 合并后才真正发布
- 版本号和 changelog 由 changesets 自动维护
在 npm 侧你需要做什么
- 登录 npm
- 进入这个包的设置页
- 打开
Trusted Publishers - 添加一个 GitHub Actions publisher
建议填写:
- Owner: 你的 GitHub 用户名或组织名
- Repository:
nutstore-webdav-secret-cli - Workflow file:
release.yml - Environment: 留空
配置完成后,GitHub Action 就可以通过 OIDC 直接发布,不需要单独保存 NPM_TOKEN。
在 GitHub 侧你需要做什么
- 把默认分支确认成
main - 打开仓库
Settings -> Actions -> General - 确保允许工作流读写 Pull Requests 和 Contents
- 如果你启用了分支保护,允许
GITHUB_TOKEN创建 release PR
创建 changeset
bun run changeset常用选择:
patch: 修 bug、文案调整、小优化minor: 新功能major: 破坏性变更
Cookie
首次启动如果没有本地 Cookie,会进入手动输入流程。
Cookie 会保存到:
~/.config/nswds/cookie这里保存的是完整的 Cookie header 内容。
快捷键
列表页:
Up/Down选择 secretEnter复制当前 secretU复制 WebDAV URLA复制 accountN新增 secretD删除当前 secretR刷新列表Q退出
新增 secret:
Enter提交创建Esc取消
删除 secret:
D进入确认Y确认删除Esc取消
请求接口
当前已经接上的接口:
- 列表:
https://www.jianguoyun.com/d/mobile_asp - 创建:
https://www.jianguoyun.com/d/ajax/userop/generateAsp - 删除:
https://www.jianguoyun.com/d/ajax/userop/revokeAsp
创建和删除接口都按浏览器同源 AJAX 请求的方式发送:
application/x-www-form-urlencodedX-Requested-With: XMLHttpRequestOrigin: https://www.jianguoyun.comReferer: https://www.jianguoyun.com/d/mobile_asp
如果创建或删除返回 403,优先检查:
- 本地保存的 Cookie 是否完整
- Cookie 是否仍然有效
- 是否包含接口依赖的关键字段
当前限制
- account 目前是从返回 HTML 里做启发式提取,不是严格结构化字段
- 自动检测浏览器 Cookie 入口还没有启用
- 删除和创建成功后依赖刷新列表同步状态
