diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7a56199..7f808e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,6 +22,16 @@ jobs: - uses: actions/checkout@v5 - name: Test controller run: bash tests/controller_test.sh + - name: Test template rendering + run: bash tests/template_test.sh + - name: Validate release tag + if: startsWith(github.ref, 'refs/tags/v') + run: | + version="$(sed -n 's/^versionName=//p' template.properties)" + test "$GITHUB_REF_NAME" = "v$version" || { + echo "Tag $GITHUB_REF_NAME does not match template version v$version" >&2 + exit 1 + } binaries: needs: test @@ -50,7 +60,7 @@ jobs: name: oxidebot-binary-${{ matrix.target }} if-no-files-found: error retention-days: 1 - path: runner/target/${{ matrix.target }}/release/my_oxidebot + path: runner/target/${{ matrix.target }}/release/oxidebot_app manager: needs: test @@ -68,9 +78,10 @@ jobs: working-directory: manager-app run: | ./gradlew assembleDebug - version="$(sed -n 's/^version=//p' ../module.prop)" + version="$(sed -n 's/^versionName=//p' ../template.properties)" + module_id="$(sed -n 's/^moduleId=//p' ../template.properties)" mkdir -p dist - cp app/build/outputs/apk/debug/app-debug.apk "dist/OxideBot-Manager-${version}-debug.apk" + cp app/build/outputs/apk/debug/app-debug.apk "dist/${module_id}-manager-v${version}-debug.apk" - uses: actions/upload-artifact@v7 with: name: oxidebot-manager @@ -103,13 +114,15 @@ jobs: - name: Build module ZIP run: BINARY_DIR=runner/target bash build.sh - name: Verify module ZIP - run: unzip -t build/oxidebot-root-*.zip + run: unzip -t build/*.zip - uses: actions/upload-artifact@v7 with: name: oxidebot-module if-no-files-found: error retention-days: 1 - path: build/*.zip + path: | + build/*.zip + build/update.json bundle: needs: [module, manager] @@ -165,9 +178,10 @@ jobs: OXIDEBOT_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} run: | ./gradlew assembleRelease - version="$(sed -n 's/^version=//p' ../module.prop)" + version="$(sed -n 's/^versionName=//p' ../template.properties)" + module_id="$(sed -n 's/^moduleId=//p' ../template.properties)" mkdir -p dist - cp app/build/outputs/apk/release/app-release.apk "dist/OxideBot-Manager-${version}.apk" + cp app/build/outputs/apk/release/app-release.apk "dist/${module_id}-manager-v${version}.apk" - uses: actions/upload-artifact@v7 with: name: oxidebot-manager-release @@ -194,4 +208,5 @@ jobs: uses: softprops/action-gh-release@v2 with: fail_on_unmatched_files: true + generate_release_notes: true files: dist/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 2772237..ffa5de1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,5 @@ -# 更新记录 +# Changelog -## v1.0.0 +## 0.1.0 -- 全新模块架构,统一支持 Magisk、KernelSU、SukiSU Ultra 与 APatch。 -- 新增响应式模块 WebUI 和配套原生 Android 管理 App。 -- 新增安全的环境变量编辑、完整状态展示、日志查看与服务动作按钮。 -- 新增多 ABI 打包、进程 supervisor、日志轮换和异常退出自动恢复。 +- Replace this entry with the first release notes for your own OxideBot application. diff --git a/README.md b/README.md index 65a13d7..45e5503 100644 --- a/README.md +++ b/README.md @@ -1,111 +1,219 @@ -# OxideBot for Root +# OxideBot Root App Template -面向现代 Android Root 生态重新设计的 OxideBot 后台运行模块。一个安装包支持 -Magisk、KernelSU、SukiSU Ultra 和 APatch;同时提供模块 WebUI、Root 管理器中的动作按钮、 -命令行控制器,以及使用同一界面的原生 Android 管理 App。 +这是一个用于创建“自己的 OxideBot Android Root 应用”的 GitHub Template Repository, +不是一个预先实现好业务功能的通用机器人。 -## 功能 +OxideBot 本身是 Rust Bot 框架。你需要选择 Bot 适配器、编写 Handler,并把自己的应用代码 +放进 `runner/`。本模板负责把这份代码交叉编译成 Android ELF,再打包成兼容 Magisk、 +KernelSU、SukiSU Ultra 和 APatch 的模块,同时生成模块 WebUI 和配套 Android 管理 App。 -- 支持 `arm64-v8a`、`armeabi-v7a`、`x86_64`、`x86` 四种 Android ABI。 -- 开机延迟启动和轻量 supervisor;进程异常退出后带退避策略自动恢复。 -- 启动、停止、重启、启用/关闭开机启动、实时状态、运行时长和日志查看。 -- 现代响应式 WebUI,可直接在 KernelSU、SukiSU Ultra、APatch 等兼容管理器中打开。 -- 原生 Android 管理 App,为 Magisk 等场景提供完整图形界面;App 只允许调用模块控制器。 -- 环境变量使用持久化的 `env.conf`,模块更新不会覆盖 Token、数据库或日志。 -- 配置按纯 `KEY=value` 解析,不执行 shell 命令替换;默认权限为 `0600`。 -- 日志达到 2 MiB 时轮换,保留三份历史日志。 +## 从模板开始 -## 安装和首次运行 - -1. 从 Releases 下载 `oxidebot-root-v*.zip`,在 Root 管理器中选择“从本地安装”。 -2. 重启 Android。 -3. KernelSU / SukiSU / APatch 用户可在模块卡片中打开 WebUI;其他用户安装配套 APK。 -4. 在「配置」页填写: +1. 点击 GitHub 仓库页面上的 **Use this template**。 +2. 创建你自己的仓库,不要直接 fork 后沿用本模板的模块 ID。 +3. 首先编辑 [`template.properties`](template.properties): ```properties - TELEGRAM_BOT_TOKEN=123456:your-token - RUST_LOG=info + moduleId=my_oxidebot + moduleName=My OxideBot + moduleAuthor=your-github-name + moduleDescription=My custom OxideBot application for Android Root + versionName=0.1.0 + versionCode=1 + applicationId=dev.example.myoxidebot + appName=My OxideBot + requiredEnv=TELEGRAM_BOT_TOKEN + repository=your-name/your-repository ``` -5. 保存后回到首页点击「启动服务」。 +4. 编辑 `runner/Cargo.toml`,加入你的 Bot 适配器、Handler 或业务 crate。 +5. 用你自己的实现替换 `runner/src/example_handler.rs`,并在 `runner/src/main.rs` 注册。 +6. 推送到 `main`。GitHub Actions 会构建四种 ABI、模块 ZIP 和测试 APK。 +7. 测试完成并配置正式 Android 签名后,推送与 `versionName` 一致的 `v*` tag 发布。 + +## 模板配置 + +| 配置 | 用途 | 约束 | +|---|---|---| +| `moduleId` | Root 模块 ID、数据目录名 | 字母开头,只使用字母、数字、`.`、`_`、`-` | +| `moduleName` | Root 管理器和 WebUI 显示名称 | 建议保持简短、唯一 | +| `moduleAuthor` | `module.prop` 作者 | GitHub 用户名或组织名 | +| `moduleDescription` | 模块简介 | 不要换行 | +| `versionName` | 模块、APK 和 Release 版本 | 推荐 SemVer,例如 `0.1.0` | +| `versionCode` | Android/Root 数字版本 | 每次发布递增的整数 | +| `applicationId` | Android APK 唯一包名 | 例如 `io.github.alice.mybot` | +| `appName` | Android 桌面名称 | 可以与 `moduleName` 相同 | +| `requiredEnv` | 启动前必须非空的环境变量 | 逗号分隔,例如 `BOT_TOKEN,API_KEY`;可留空 | +| `repository` | 本地构建生成的 Release URL | `owner/repository`;Actions 中会自动使用当前仓库 | + +构建时会根据这些值生成 `module.prop`、`update.json`、APK BuildConfig、WebUI 控制器路径和 +独立数据目录。不要只修改根目录里的示例 `module.prop`;发布产物以 +`template.properties` 为准。 + +## 示例应用 + +模板内的 runner 只是最小示例: + +- 使用 `telegram_bot_oxidebot` 接收 Telegram 事件; +- 从 `TELEGRAM_BOT_TOKEN` 环境变量读取 Token; +- `/start` 返回模板说明; +- `/echo ` 回复输入内容。 + +入口在 [`runner/src/main.rs`](runner/src/main.rs),示例 Handler 在 +[`runner/src/example_handler.rs`](runner/src/example_handler.rs)。 + +典型的应用接线方式是: + +```rust +oxidebot::OxideBotManager::new() + .bot(my_bot_adapter) + .await + .filter(MyFilter) + .handler(MyHandler::new(...).await?) + .run_block() + .await +``` -数据与模块本体分离: +你可以: -```text -/data/adb/modules/oxidebot_root/ 模块、控制器和当前 ABI 二进制 -/data/adb/oxidebot/env.conf 环境变量(0600) -/data/adb/oxidebot/data/ OxideBot 工作目录与数据库 -/data/adb/oxidebot/logs/oxidebot.log 当前日志 -/data/adb/oxidebot/run/ PID 和运行状态 -``` +- 换成 `onebot_v11_oxidebot` 或其他 Bot 适配器; +- 引入自己发布的 Handler crate; +- 直接在 `runner/src/` 编写业务模块; +- 注册多个 Bot、Filter、Event Handler 和 Active Handler; +- 从 `env.conf` 读取数据库地址、Token、API Key 或其他运行配置。 -卸载模块默认保留 `/data/adb/oxidebot`,便于重装。若确实需要随卸载一并清除,在卸载前把 -`REMOVE_DATA_ON_UNINSTALL=1` 写入 `env.conf`。该操作不可恢复。 +请不要把真实 Token、Cookie 或 API Key 写进 Rust 源码、`template.properties` 或 GitHub +仓库。运行密钥应在安装后的 WebUI/App 中配置。 -## 控制器 +## Android 上的环境变量 -所有 UI 都通过同一个控制器工作,也可以直接在终端中使用: +安装后,在 Root 管理器 WebUI 或配套 App 中编辑: -```sh -su -c /data/adb/modules/oxidebot_root/scripts/oxidebotctl status -su -c /data/adb/modules/oxidebot_root/scripts/oxidebotctl start -su -c /data/adb/modules/oxidebot_root/scripts/oxidebotctl stop -su -c /data/adb/modules/oxidebot_root/scripts/oxidebotctl restart -su -c /data/adb/modules/oxidebot_root/scripts/oxidebotctl logs 200 +```properties +TELEGRAM_BOT_TOKEN=123456:your-token +RUST_LOG=info +MY_API_URL=https://example.com/api +MY_API_KEY=secret ``` -模块管理器里的动作按钮会在“启用并启动”和“停止并关闭自动启动”之间切换。 +所有 `KEY=value` 会原样作为环境变量传给 runner。配置文件不是 Shell 脚本,不会执行 +`$()` 或反引号。 + +每个模板项目使用独立目录: + +```text +/data/adb/modules// 模块、WebUI、控制器和 Android ELF +/data/adb//env.conf 环境变量(0600) +/data/adb//data/ 应用工作目录和数据库 +/data/adb//logs/ 日志和轮换日志 +/data/adb//run/ PID、锁和运行状态 +``` ## 本地构建 -仓库内的 `runner` 是可公开构建的 OxideBot 运行程序入口。先构建它的四种 Android 目标: +需要 Rust 1.97、Android SDK、Android NDK 29 和 Java 17。 ```sh bash runner/scripts/build-android.sh bash build.sh -``` -默认从 `runner/target` 打包,也可以用 `BINARY_DIR=/path/to/target bash build.sh` 指定其他 -二进制目录。模块产物位于 -`build/oxidebot-root-v*.zip`。 - -构建原生管理 App: - -```sh cd manager-app ./gradlew assembleDebug ``` -WebUI 会在 Android 构建前自动同步到 App assets,因此两种入口不会产生两套交互逻辑。 +也可以指定已有的 Android ELF 目录: -## 验证 +```sh +BINARY_DIR=/path/to/target bash build.sh +``` -控制器测试不需要 Android 或 Root: +`build.sh` 会生成: -```sh -bash tests/controller_test.sh +```text +build/-v.zip +build/update.json ``` -项目的发布工作流会构建四种 ABI、运行控制器测试、生成模块 ZIP 和可侧载的管理 APK。 +## CI + +每次 `main` push、Pull Request 或手动运行都会执行: + +1. 控制器、配置安全和模板渲染测试; +2. 四种 Android ABI 并行编译; +3. Android Debug 管理 App 构建; +4. 模块 ZIP 打包和完整性检查; +5. 生成包含模块、`update.json` 和 Debug APK 的 `oxidebot-root` artifact。 -普通 `main`/PR 构建使用 Android Debug 签名,仅作为 Actions artifact 提供测试。创建 `v*` -tag 前,需要在 GitHub Actions 配置以下仓库 Secrets,CD 才会构建可长期升级的 Release APK: +四种目标是: -- `ANDROID_SIGNING_KEY_BASE64`:JKS/PKCS12 文件的 Base64 内容 +- `aarch64-linux-android` +- `armv7-linux-androideabi` +- `x86_64-linux-android` +- `i686-linux-android` + +普通 CI 不会创建 GitHub Release。 + +## 配置正式发布 + +正式 APK 必须使用你自己长期保存的签名证书。在仓库的 +**Settings → Secrets and variables → Actions** 中配置: + +- `ANDROID_SIGNING_KEY_BASE64` - `ANDROID_KEYSTORE_PASSWORD` - `ANDROID_KEY_ALIAS` - `ANDROID_KEY_PASSWORD` -任一签名 Secret 缺失时,tag 构建会明确失败,不会把 Debug APK 发布为正式版本。 +例如: + +```sh +base64 < my-release.jks | gh secret set ANDROID_SIGNING_KEY_BASE64 +gh secret set ANDROID_KEYSTORE_PASSWORD +gh secret set ANDROID_KEY_ALIAS +gh secret set ANDROID_KEY_PASSWORD +``` + +然后确保 `template.properties` 中的 `versionName`、`versionCode` 已更新并提交,再发布: + +```sh +git tag -a v0.1.0 -m "v0.1.0" +git push origin v0.1.0 +``` + +tag 必须严格等于 `v`。CD 会发布: + +- `-v.zip` +- `-manager-v.apk` +- `update.json` + +缺少签名 Secret 或 tag/版本不一致时,发布会安全失败,不会上传 Debug APK。 + +## 运行架构 + +```text +你的 Rust 代码 + OxideBot 框架 + Bot/Handler crates + │ + ▼ + Android ELF runner + │ + oxidebotctl / supervisor + ┌───────┴────────┐ + ▼ ▼ + Root 管理器模块 WebUI Android 管理 App +``` + +WebUI 是 KernelSU、SukiSU Ultra、APatch 的标准模块入口;Android App 为 Magisk 等场景提供 +图形入口。两者复用同一套离线页面,但最终都只控制你的 runner,不包含远程 Web 服务。 -## 安全说明 +## Root 兼容性 -- 不要把 Telegram Token 写入源码、Issue 或公开日志。 -- 原生 App 的 JavaScript Root 桥只接受 `oxidebotctl` 的固定命令集合。 -- 原生 App 不申请网络权限,也禁止 WebView 离开内置页面。 -- WebUI 不依赖远程 CDN,不会把配置发送到网络。 -- Root 环境本身拥有完整设备权限,请只安装来自可信 Release、且校验过的构建产物。 +- Magisk +- KernelSU +- SukiSU Ultra +- APatch +- Android API 24+ +- `arm64-v8a`、`armeabi-v7a`、`x86_64`、`x86` -## 开源许可证 +## 许可证 -本仓库使用 `GPL-3.0-only`。OxideBot 核心及适配器各自的许可证与来源见其上游仓库。 +模板本身使用 `GPL-3.0-only`。你加入的 OxideBot 适配器、Handler 和业务依赖可能有不同的 +许可证;发布应用前请检查并遵守所有依赖的许可证要求。 diff --git a/build.sh b/build.sh index 5d93ce4..619c6ab 100755 --- a/build.sh +++ b/build.sh @@ -2,21 +2,66 @@ set -euo pipefail project_dir="$(cd "$(dirname "$0")" && pwd)" +config_file="$project_dir/template.properties" binary_root="${BINARY_DIR:-$project_dir/runner/target}" build_dir="$project_dir/build" stage_dir="$build_dir/staging" -version="$(sed -n 's/^version=//p' "$project_dir/module.prop")" -version="${version#v}" -output_zip="$build_dir/oxidebot-root-v${version}.zip" +config_value() { + local key=$1 value + value="$(sed -n "s/^${key}=//p" "$config_file" | tail -n 1)" + if [[ -z "$value" ]]; then + printf 'Missing %s in %s\n' "$key" "$config_file" >&2 + exit 1 + fi + printf '%s\n' "$value" +} + +config_optional_value() { + local key=$1 + sed -n "s/^${key}=//p" "$config_file" | tail -n 1 +} + +module_id="$(config_value moduleId)" +module_name="$(config_value moduleName)" +module_author="$(config_value moduleAuthor)" +module_description="$(config_value moduleDescription)" +version="$(config_value versionName)" +version_code="$(config_value versionCode)" +required_env="$(config_optional_value requiredEnv)" +repository="${GITHUB_REPOSITORY:-$(config_value repository)}" + +[[ "$module_id" =~ ^[A-Za-z][A-Za-z0-9._-]*$ ]] || { + printf 'Invalid moduleId: %s\n' "$module_id" >&2 + exit 1 +} +[[ "$version" =~ ^[0-9A-Za-z][0-9A-Za-z._-]*$ ]] || { + printf 'Invalid versionName: %s\n' "$version" >&2 + exit 1 +} +[[ "$version_code" =~ ^[0-9]+$ ]] || { + printf 'versionCode must be an integer\n' >&2 + exit 1 +} +[[ "$repository" =~ ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ ]] || { + printf 'Invalid repository: %s\n' "$repository" >&2 + exit 1 +} +if [[ -n "$required_env" ]] && ! [[ "$required_env" =~ ^[A-Za-z_][A-Za-z0-9_]*(,[A-Za-z_][A-Za-z0-9_]*)*$ ]]; then + printf 'requiredEnv must be empty or a comma-separated list of environment variable names\n' >&2 + exit 1 +fi + +output_zip="$build_dir/${module_id}-v${version}.zip" +update_json="$build_dir/update.json" find_binary() { local target=$1 local candidate for candidate in \ - "$binary_root/$target/release/my_oxidebot" \ - "$binary_root/target/$target/release/my_oxidebot" \ - "$binary_root/my_oxidebot-$target"; do + "$binary_root/$target/release/oxidebot_app" \ + "$binary_root/target/$target/release/oxidebot_app" \ + "$binary_root/oxidebot_app-$target"; do if [[ -f "$candidate" ]]; then printf '%s\n' "$candidate" return 0 @@ -28,7 +73,7 @@ find_binary() { prepare_binary() { local abi=$1 target=$2 source if ! source="$(find_binary "$target")"; then - printf 'Missing %s binary. Build my_oxidebot first or set BINARY_DIR.\n' "$target" >&2 + printf 'Missing %s binary. Build runner first or set BINARY_DIR.\n' "$target" >&2 exit 1 fi install -m 0755 "$source" "$stage_dir/bin/$abi/oxidebot" @@ -38,11 +83,34 @@ mkdir -p "$stage_dir/bin/arm64-v8a" "$stage_dir/bin/armeabi-v7a" "$stage_dir/bin find "$stage_dir" -mindepth 1 -maxdepth 1 ! -name bin -exec rm -rf {} + find "$stage_dir/bin" -type f -name oxidebot -delete -cp "$project_dir/module.prop" "$project_dir/customize.sh" "$project_dir/service.sh" \ - "$project_dir/action.sh" "$project_dir/uninstall.sh" "$project_dir/env.example" \ - "$project_dir/update.json" "$project_dir/CHANGELOG.md" "$stage_dir/" +cp "$project_dir/customize.sh" "$project_dir/service.sh" "$project_dir/action.sh" \ + "$project_dir/uninstall.sh" "$project_dir/env.example" "$project_dir/CHANGELOG.md" "$stage_dir/" cp -R "$project_dir/scripts" "$project_dir/webroot" "$project_dir/META-INF" "$stage_dir/" +printf '%s\n' \ + "id=$module_id" \ + "name=$module_name" \ + "version=v$version" \ + "versionCode=$version_code" \ + "author=$module_author" \ + "description=$module_description" \ + "updateJson=https://github.com/$repository/releases/latest/download/update.json" \ + > "$stage_dir/module.prop" + +for template_target in \ + "$stage_dir/customize.sh" \ + "$stage_dir/uninstall.sh" \ + "$stage_dir/scripts/oxidebotctl" \ + "$stage_dir/scripts/supervisor.sh" \ + "$stage_dir/webroot/index.html"; do + sed "s/__MODULE_ID__/$module_id/g" "$template_target" > "$template_target.rendered" + mv -f "$template_target.rendered" "$template_target" +done + +sed "s/__REQUIRED_ENV__/$required_env/g" "$stage_dir/scripts/oxidebotctl" \ + > "$stage_dir/scripts/oxidebotctl.rendered" +mv -f "$stage_dir/scripts/oxidebotctl.rendered" "$stage_dir/scripts/oxidebotctl" + prepare_binary arm64-v8a aarch64-linux-android prepare_binary armeabi-v7a armv7-linux-androideabi prepare_binary x86_64 x86_64-linux-android @@ -59,4 +127,14 @@ rm -f "$output_zip" zip -9 -r "$output_zip" . -x '*.DS_Store' ) +printf '%s\n' \ + '{' \ + " \"version\": \"v$version\"," \ + " \"versionCode\": $version_code," \ + " \"zipUrl\": \"https://github.com/$repository/releases/download/v$version/${module_id}-v${version}.zip\"," \ + " \"changelog\": \"https://github.com/$repository/releases/tag/v$version\"" \ + '}' \ + > "$update_json" + printf 'Built %s\n' "$output_zip" +printf 'Built %s\n' "$update_json" diff --git a/customize.sh b/customize.sh index 29354d7..c76bfe8 100755 --- a/customize.sh +++ b/customize.sh @@ -6,10 +6,6 @@ PROPFILE=false POSTFSDATA=false LATESTARTSERVICE=true -ui_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ui_print " OxideBot for Root v1.0.0" -ui_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - if [ "$BOOTMODE" != "true" ]; then abort "! 请从 Root 管理器安装;不支持 Recovery 安装" fi @@ -17,6 +13,12 @@ fi # customize.sh 会在模块主体自动解压前执行,因此在这里统一展开安装内容。 unzip -o "$ZIPFILE" -x 'META-INF/*' -d "$MODPATH" >&2 +module_name=$(sed -n 's/^name=//p' "$MODPATH/module.prop") +module_version=$(sed -n 's/^version=//p' "$MODPATH/module.prop") +ui_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +ui_print " $module_name $module_version" +ui_print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + case "$ARCH" in arm64) module_abi="arm64-v8a" ;; arm) module_abi="armeabi-v7a" ;; @@ -38,7 +40,7 @@ else fi ui_print "- 设备架构:$module_abi" -DATA_DIR=${OXIDEBOT_DATA_DIR:-/data/adb/oxidebot} +DATA_DIR=${OXIDEBOT_DATA_DIR:-/data/adb/__MODULE_ID__} mkdir -p "$DATA_DIR/run" "$DATA_DIR/logs" "$DATA_DIR/data" if [ ! -f "$DATA_DIR/env.conf" ]; then @@ -62,5 +64,5 @@ set_perm_recursive "$DATA_DIR" 0 0 0700 0600 # KernelSU/SukiSU/APatch 会为 webroot 自动设置正确的权限和 SELinux 标签。 ui_print "- WebUI:受支持的管理器可直接点击“打开”" ui_print "- 配置:$DATA_DIR/env.conf" -ui_print "- 首次启动前请填写 TELEGRAM_BOT_TOKEN" +ui_print "- 首次启动前请在 WebUI 配置应用所需的环境变量" ui_print "- 安装完成,请重启设备" diff --git a/env.example b/env.example index 42c2d28..9447d0b 100644 --- a/env.example +++ b/env.example @@ -7,5 +7,5 @@ TELEGRAM_BOT_TOKEN= # 日志级别:error / warn / info / debug / trace RUST_LOG=info -# 卸载模块时默认保留配置和数据库;改为 1 才会同时清除 /data/adb/oxidebot +# 卸载模块时默认保留配置和数据库;改为 1 才会同时清除 /data/adb/ REMOVE_DATA_ON_UNINSTALL=0 diff --git a/manager-app/app/build.gradle.kts b/manager-app/app/build.gradle.kts index 9ec8ac4..814a2aa 100644 --- a/manager-app/app/build.gradle.kts +++ b/manager-app/app/build.gradle.kts @@ -1,7 +1,25 @@ +import java.util.Properties + plugins { id("com.android.application") } +val templatePropertiesFile = rootProject.file("../template.properties") +val templateProperties = Properties().apply { + require(templatePropertiesFile.isFile) { "Missing template.properties" } + templatePropertiesFile.inputStream().use(::load) +} + +fun templateValue(name: String): String = + templateProperties.getProperty(name)?.trim()?.takeIf(String::isNotEmpty) + ?: error("Missing $name in template.properties") + +val templateModuleId = templateValue("moduleId") +val templateApplicationId = templateValue("applicationId") +val templateAppName = templateValue("appName") +val templateVersionName = templateValue("versionName") +val templateVersionCode = templateValue("versionCode").toInt() + val releaseKeystoreFile = providers.environmentVariable("OXIDEBOT_KEYSTORE_FILE").orNull val releaseKeystorePassword = providers.environmentVariable("OXIDEBOT_KEYSTORE_PASSWORD").orNull val releaseKeyAlias = providers.environmentVariable("OXIDEBOT_KEY_ALIAS").orNull @@ -12,11 +30,13 @@ android { compileSdk = 35 defaultConfig { - applicationId = "io.github.canxin121.oxidebotroot" + applicationId = templateApplicationId minSdk = 24 targetSdk = 35 - versionCode = 10000 - versionName = "1.0.0" + versionCode = templateVersionCode + versionName = templateVersionName + buildConfigField("String", "MODULE_ID", "\"$templateModuleId\"") + resValue("string", "app_name", templateAppName) } val releaseSigning = if ( @@ -51,11 +71,17 @@ android { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } + + buildFeatures { + buildConfig = true + } } val syncWebUi by tasks.registering(Copy::class) { + inputs.file(templatePropertiesFile) from(rootProject.projectDir.resolve("../webroot")) into(layout.projectDirectory.dir("src/main/assets")) + filter { line: String -> line.replace("__MODULE_ID__", templateModuleId) } } tasks.named("preBuild").configure { dependsOn(syncWebUi) } diff --git a/manager-app/app/src/main/AndroidManifest.xml b/manager-app/app/src/main/AndroidManifest.xml index 8928313..536f9c5 100644 --- a/manager-app/app/src/main/AndroidManifest.xml +++ b/manager-app/app/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ diff --git a/manager-app/app/src/main/java/io/github/canxin121/oxidebotroot/MainActivity.java b/manager-app/app/src/main/java/io/github/canxin121/oxidebotroot/MainActivity.java index 7e2e10e..84de5b1 100644 --- a/manager-app/app/src/main/java/io/github/canxin121/oxidebotroot/MainActivity.java +++ b/manager-app/app/src/main/java/io/github/canxin121/oxidebotroot/MainActivity.java @@ -68,7 +68,7 @@ protected void onDestroy() { public final class RootBridge { private static final String CONTROLLER = - "/data/adb/modules/oxidebot_root/scripts/oxidebotctl"; + "/data/adb/modules/" + BuildConfig.MODULE_ID + "/scripts/oxidebotctl"; private final Pattern allowed = Pattern.compile( "^" + Pattern.quote(CONTROLLER) + " (?:status --properties|start|stop|restart|enable|disable|logs [0-9]{1,4}|clear-logs|config-export|config-import [A-Za-z0-9+/=]{1,65536})$"); diff --git a/module.prop b/module.prop index c57d3f9..471a7ec 100644 --- a/module.prop +++ b/module.prop @@ -1,7 +1,7 @@ -id=oxidebot_root -name=OxideBot for Root -version=v1.0.0 -versionCode=10000 -author=canxin121 -description=OxideBot 后台服务 · Magisk / KernelSU / SukiSU Ultra / APatch -updateJson=https://raw.githubusercontent.com/canxin121/oxidebot_root/main/update.json +id=my_oxidebot +name=My OxideBot +version=v0.1.0 +versionCode=1 +author=your-github-name +description=My custom OxideBot application for Android Root +updateJson=https://github.com/your-name/your-repository/releases/latest/download/update.json diff --git a/runner/Cargo.lock b/runner/Cargo.lock index 62be73f..fb48e96 100644 --- a/runner/Cargo.lock +++ b/runner/Cargo.lock @@ -2,52 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "const-random", - "getrandom 0.3.4", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -57,249 +11,12 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - [[package]] name = "anyhow" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" -[[package]] -name = "arrayvec" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" - -[[package]] -name = "arrow" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd47f2a6ddc39244bd722a27ee5da66c03369d087b9e024eafdb03e98b98ea7" -dependencies = [ - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ord", - "arrow-row", - "arrow-schema", - "arrow-select", - "arrow-string", -] - -[[package]] -name = "arrow-arith" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7bbd679c5418b8639b92be01f361d60013c4906574b578b77b63c78356594c" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "num-traits", -] - -[[package]] -name = "arrow-array" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a4ab47b3f3eac60f7fd31b81e9028fda018607bcc63451aca4f2b755269862" -dependencies = [ - "ahash 0.8.12", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "half", - "hashbrown 0.16.1", - "num-complex", - "num-integer", - "num-traits", -] - -[[package]] -name = "arrow-buffer" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d18b89b4c4f4811d0858175e79541fe98e33e18db3b011708bc287b1240593f" -dependencies = [ - "bytes", - "half", - "num-bigint", - "num-traits", -] - -[[package]] -name = "arrow-cast" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722b5c41dd1d14d0a879a1bce92c6fe33f546101bb2acce57a209825edd075b3" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-ord", - "arrow-schema", - "arrow-select", - "atoi", - "base64 0.22.1", - "chrono", - "half", - "lexical-core", - "num-traits", - "ryu", -] - -[[package]] -name = "arrow-data" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1683705c63dcf0d18972759eda48489028cbbff67af7d6bef2c6b7b74ab778a" -dependencies = [ - "arrow-buffer", - "arrow-schema", - "half", - "num-integer", - "num-traits", -] - -[[package]] -name = "arrow-ord" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "082342947d4e5a2bcccf029a0a0397e21cb3bb8421edd9571d34fb5dd2670256" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", -] - -[[package]] -name = "arrow-row" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a931b520a2a5e22033e01a6f2486b4cdc26f9106b759abeebc320f125e94d7" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "half", -] - -[[package]] -name = "arrow-schema" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4cf0d4a6609679e03002167a61074a21d7b1ad9ea65e462b2c0a97f8a3b2bc6" - -[[package]] -name = "arrow-select" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b320d86a9806923663bb0fd9baa65ecaba81cb0cd77ff8c1768b9716b4ef891" -dependencies = [ - "ahash 0.8.12", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "num-traits", -] - -[[package]] -name = "arrow-string" -version = "57.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b493e99162e5764077e7823e50ba284858d365922631c7aaefe9487b1abd02c2" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "memchr", - "num-traits", - "regex", - "regex-syntax", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "async-trait" version = "0.1.91" @@ -311,15 +28,6 @@ dependencies = [ "syn 3.0.3", ] -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -367,55 +75,11 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9" -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bigdecimal" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" -dependencies = [ - "autocfg", - "libm", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "bitflags" version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" -dependencies = [ - "serde_core", -] - -[[package]] -name = "bitvec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] [[package]] name = "block-buffer" @@ -426,64 +90,12 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "borsh" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" -dependencies = [ - "borsh-derive", - "bytes", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f347189c62a579b8cd5f80714efa178f52e461dc2e6d701d264f5ff22e566c" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "bumpalo" version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.12.1" @@ -521,58 +133,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", - "rand_core 0.10.1", -] - -[[package]] -name = "china-unicom-rs" -version = "1.0.0" -source = "git+https://github.com/canxin121/china-unicom-rs#33fde99fbdee5ca682780c63a8711d7626fb4dd9" -dependencies = [ - "base64 0.23.0", - "chrono", - "chrono-tz", - "clap", - "fs2", - "hmac", - "lettre", - "rand 0.10.2", - "regex", - "reqwest 0.13.4", - "rpassword", - "rsa", - "serde", - "serde_json", - "sha1 0.11.0", - "sha2 0.11.0", - "tempfile", - "thiserror 2.0.19", - "tokio", - "tracing", - "tracing-subscriber", - "url", - "urlencoding", -] - -[[package]] -name = "china_unicom_oxidebot" -version = "0.3.0" -source = "git+https://github.com/canxin121/china_unicom_oxidebot#54b583cbba8bda948fb839241e157fb2e721dd14" -dependencies = [ - "anyhow", - "async-trait", - "china-unicom-rs", - "chrono", - "clap", - "dashmap", - "oxidebot", - "sea-orm", - "sea-orm-migration", - "serde_json", - "shlex", - "tokio", - "tracing", + "cpufeatures", + "rand_core", ] [[package]] @@ -584,1507 +146,643 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde", "wasm-bindgen", "windows-link", ] [[package]] -name = "chrono-tz" -version = "0.10.4" +name = "cmake" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ - "chrono", - "phf", + "cc", ] [[package]] -name = "clap" -version = "4.6.4" +name = "cmov" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" -dependencies = [ - "clap_builder", - "clap_derive", -] +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] -name = "clap_builder" -version = "4.6.2" +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "bytes", + "memchr", ] [[package]] -name = "clap_derive" -version = "4.6.4" +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "core-foundation" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 3.0.3", + "core-foundation-sys", + "libc", ] [[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - -[[package]] -name = "cmake" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" -dependencies = [ - "cc", -] - -[[package]] -name = "cmov" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" - -[[package]] -name = "colorchoice" -version = "1.0.5" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "combine" -version = "4.6.7" +name = "cpufeatures" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ - "bytes", - "memchr", + "libc", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "crypto-common" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "crossbeam-utils", + "hybrid-array", ] [[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - -[[package]] -name = "const-random" -version = "0.1.18" +name = "ctutils" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" dependencies = [ - "const-random-macro", + "cmov", ] [[package]] -name = "const-random-macro" -version = "0.1.16" +name = "digest" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "getrandom 0.2.17", - "once_cell", - "tiny-keccak", + "block-buffer", + "const-oid", + "crypto-common", + "ctutils", ] [[package]] -name = "cookie" -version = "0.18.1" +name = "displaydoc" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ - "percent-encoding", - "time", - "version_check", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] -name = "cookie_store" -version = "0.22.1" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" -dependencies = [ - "cookie", - "document-features", - "idna", - "log", - "publicsuffix", - "serde", - "serde_derive", - "serde_json", - "time", - "url", -] +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "core-foundation" -version = "0.10.1" +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "core-foundation-sys", "libc", + "windows-sys 0.61.2", ] [[package]] -name = "core-foundation-sys" -version = "0.8.7" +name = "find-msvc-tools" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "form_urlencoded" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ - "libc", + "percent-encoding", ] [[package]] -name = "cpufeatures" -version = "0.3.0" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] -name = "crc" -version = "3.4.0" +name = "futures-channel" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ - "crc-catalog", + "futures-core", ] [[package]] -name = "crc-catalog" -version = "2.5.0" +name = "futures-core" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-io" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] -name = "crossbeam-queue" -version = "0.3.13" +name = "futures-macro" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ - "crossbeam-utils", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] -name = "crossbeam-utils" -version = "0.8.22" +name = "futures-sink" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] -name = "crunchy" -version = "0.2.4" +name = "futures-task" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] -name = "crypto-common" -version = "0.1.7" +name = "futures-util" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ - "generic-array", - "typenum", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", ] [[package]] -name = "crypto-common" -version = "0.2.2" +name = "getrandom" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ - "hybrid-array", + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", ] [[package]] -name = "ctutils" -version = "0.4.2" +name = "getrandom" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ - "cmov", + "cfg-if", + "js-sys", + "libc", + "r-efi", + "rand_core", + "wasm-bindgen", ] [[package]] -name = "darling" -version = "0.20.11" +name = "hmac" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "darling_core", - "darling_macro", + "digest", ] [[package]] -name = "darling_core" -version = "0.20.11" +name = "http" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "syn 2.0.119", + "bytes", + "itoa", ] [[package]] -name = "darling_macro" -version = "0.20.11" +name = "http-body" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ - "darling_core", - "quote", - "syn 2.0.119", + "bytes", + "http", ] [[package]] -name = "dashmap" -version = "6.2.1" +name = "http-body-util" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", ] [[package]] -name = "data-encoding" -version = "2.11.0" +name = "httparse" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "der" -version = "0.7.10" +name = "hybrid-array" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ - "const-oid 0.9.6", - "pem-rfc7468", - "zeroize", + "typenum", ] [[package]] -name = "deranged" -version = "0.5.8" +name = "hyper" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ - "serde_core", + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", ] [[package]] -name = "derive-where" -version = "1.6.1" +name = "hyper-rustls" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", ] [[package]] -name = "derive_more" -version = "2.1.1" +name = "hyper-util" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "derive_more-impl", + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", ] [[package]] -name = "derive_more-impl" -version = "2.1.1" +name = "iana-time-zone" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.119", - "unicode-xid", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", ] [[package]] -name = "digest" -version = "0.10.7" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "block-buffer 0.10.4", - "const-oid 0.9.6", - "crypto-common 0.1.7", + "cc", ] [[package]] -name = "digest" -version = "0.11.3" +name = "icu_collections" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ - "block-buffer 0.12.1", - "const-oid 0.10.2", - "crypto-common 0.2.2", - "ctutils", + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "displaydoc" -version = "0.2.6" +name = "icu_locale_core" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "document-features" -version = "0.2.12" +name = "icu_normalizer" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "litrs", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", ] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "icu_normalizer_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] -name = "dunce" -version = "1.0.5" +name = "icu_properties" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] [[package]] -name = "either" -version = "1.17.0" +name = "icu_properties_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" -dependencies = [ - "serde", -] +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] -name = "email-encoding" -version = "0.4.1" +name = "icu_provider" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9298e6504d9b9e780ed3f7dfd43a61be8cd0e09eb07f7706a945b0072b6670b6" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ - "base64 0.22.1", - "memchr", + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", ] [[package]] -name = "email_address" -version = "0.2.9" +name = "idna" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "idna_adapter" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ - "cfg-if", + "icu_normalizer", + "icu_properties", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "ipnet" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] -name = "errno" -version = "0.3.14" +name = "itoa" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" dependencies = [ - "libc", - "windows-sys 0.61.2", + "cfg-if", + "combine", + "jni-macros", + "jni-sys", + "log", + "simd_cesu8", + "thiserror", + "walkdir", + "windows-link", ] [[package]] -name = "etcetera" -version = "0.11.0" +name = "jni-macros" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" dependencies = [ - "cfg-if", - "windows-sys 0.61.2", + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", ] [[package]] -name = "event-listener" -version = "5.4.1" +name = "jni-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "jni-sys-macros", ] [[package]] -name = "fastrand" -version = "2.5.0" +name = "jni-sys-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] [[package]] -name = "find-msvc-tools" -version = "0.1.9" +name = "jobserver" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] [[package]] -name = "flume" -version = "0.12.0" +name = "js-sys" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ - "futures-core", - "futures-sink", - "spin", + "cfg-if", + "futures-util", + "wasm-bindgen", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "foldhash" -version = "0.2.0" +name = "libc" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "litemap" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] -name = "fs2" -version = "0.4.3" +name = "lock_api" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "libc", - "winapi", + "scopeguard", ] [[package]] -name = "fs_extra" -version = "1.3.0" +name = "log" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] -name = "funty" -version = "2.0.0" +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] -name = "futures-channel" -version = "0.3.33" +name = "memchr" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" -dependencies = [ - "futures-core", - "futures-sink", -] +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] -name = "futures-core" -version = "0.3.33" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "futures-executor" -version = "0.3.33" +name = "mime_guess" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "mime", + "unicase", ] [[package]] -name = "futures-intrusive" -version = "0.5.0" +name = "mio" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ - "futures-core", - "lock_api", - "parking_lot", + "libc", + "wasi", + "windows-sys 0.61.2", ] [[package]] -name = "futures-io" -version = "0.3.33" +name = "nu-ansi-term" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] [[package]] -name = "futures-macro" -version = "0.3.33" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "futures-sink" -version = "0.3.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" - -[[package]] -name = "futures-task" -version = "0.3.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" - -[[package]] -name = "futures-util" -version = "0.3.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] - -[[package]] -name = "getrandom" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasm-bindgen", -] - -[[package]] -name = "glob" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" - -[[package]] -name = "h2" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "num-traits", - "zerocopy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "hashlink" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" -dependencies = [ - "hashbrown 0.16.1", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest 0.11.3", -] - -[[package]] -name = "http" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hybrid-array" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" -dependencies = [ - "typenum", -] - -[[package]] -name = "hyper" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" -dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - -[[package]] -name = "icu_properties" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - -[[package]] -name = "icu_provider" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", -] - -[[package]] -name = "indoc" -version = "2.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" -dependencies = [ - "rustversion", -] - -[[package]] -name = "ipnet" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys", - "log", - "simd_cesu8", - "thiserror 2.0.19", - "walkdir", - "windows-link", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.119", -] - -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.119", -] - -[[package]] -name = "jobserver" -version = "0.1.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" -dependencies = [ - "getrandom 0.4.3", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" -dependencies = [ - "cfg-if", - "futures-util", - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "lettre" -version = "0.11.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da65617f6cb926332d039cb578aad56178da86e128db6a1b09f4c94fa5b3349" -dependencies = [ - "async-trait", - "base64 0.22.1", - "email-encoding", - "email_address", - "fastrand", - "futures-io", - "futures-util", - "httpdate", - "idna", - "mime", - "nom", - "percent-encoding", - "quoted_printable", - "rustls", - "socket2", - "tokio", - "tokio-rustls", - "url", - "webpki-roots", -] - -[[package]] -name = "lexical-core" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" -dependencies = [ - "lexical-parse-integer", - "lexical-util", -] - -[[package]] -name = "lexical-parse-integer" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" -dependencies = [ - "lexical-util", -] - -[[package]] -name = "lexical-util" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" - -[[package]] -name = "lexical-write-float" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" -dependencies = [ - "lexical-util", - "lexical-write-integer", -] - -[[package]] -name = "lexical-write-integer" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" -dependencies = [ - "lexical-util", -] - -[[package]] -name = "libc" -version = "0.2.189" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[package]] -name = "libsqlite3-sys" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "litemap" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac_address" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" -dependencies = [ - "nix", - "serde", - "winapi", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "md-5" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" -dependencies = [ - "cfg-if", - "digest 0.11.3", -] - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "mio" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "my_oxidebot" -version = "0.2.0" -dependencies = [ - "anyhow", - "china_unicom_oxidebot", - "onebot_v11_oxidebot", - "oxidebot", - "telegram_bot_oxidebot", - "tokio", - "tracing-subscriber", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" -dependencies = [ - "memchr", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-bigint" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.7", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", + "autocfg", ] [[package]] @@ -2093,98 +791,12 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "onebot_v11" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162f231266076e44108b2aeff34e8e90ac90d165228f02c6cec6e787afc87655" -dependencies = [ - "anyhow", - "futures-util", - "onebot_v11_macro", - "rand 0.8.7", - "reqwest 0.12.28", - "serde", - "serde_json", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "onebot_v11_macro" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c6250ca7222aad6ecc2fe58c9f9de33a94f447f794f09461403492b8ffa36" -dependencies = [ - "quote", - "syn 2.0.119", -] - -[[package]] -name = "onebot_v11_oxidebot" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b054774d5cd8f318f8cd7f0c59301fe2f16fe339a36f87151b0d425c16ea6e" -dependencies = [ - "anyhow", - "chrono", - "hyper", - "mime_guess", - "onebot_v11", - "oxidebot", - "serde", - "serde_json", - "tokio", - "tracing", -] - [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ouroboros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" -dependencies = [ - "aliasable", - "ouroboros_macro", - "static_assertions", -] - -[[package]] -name = "ouroboros_macro" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.119", -] - [[package]] name = "oxidebot" version = "0.1.8" @@ -2197,7 +809,7 @@ dependencies = [ "hyper", "mime", "mime_guess", - "reqwest 0.13.4", + "reqwest", "serde", "serde_json", "tokio", @@ -2206,10 +818,16 @@ dependencies = [ ] [[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +name = "oxidebot_app" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "oxidebot", + "telegram_bot_oxidebot", + "tokio", + "tracing-subscriber", +] [[package]] name = "parking_lot" @@ -2234,91 +852,24 @@ dependencies = [ "windows-link", ] -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pgvector" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3673cba5b9a124916096a423b806a9f29620972c6c97b08db5f2053e9428b481" -dependencies = [ - "serde", -] - -[[package]] -name = "phf" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_shared" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project-lite" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" -[[package]] -name = "pluralizer" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b3eba432a00a1f6c16f39147847a870e94e2e9b992759b503e330efec778cbe" -dependencies = [ - "once_cell", - "regex", -] - [[package]] name = "potential_utf" version = "0.1.5" @@ -2328,30 +879,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.107" @@ -2361,55 +888,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", - "version_check", - "yansi", -] - -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" -dependencies = [ - "idna", - "psl-types", -] - [[package]] name = "quinn" version = "0.11.11" @@ -2424,7 +902,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.19", + "thiserror", "tokio", "tracing", "web-time", @@ -2440,14 +918,14 @@ dependencies = [ "bytes", "getrandom 0.4.3", "lru-slab", - "rand 0.10.2", + "rand", "rand_pcg", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.19", + "thiserror", "tinyvec", "tracing", "web-time", @@ -2476,69 +954,21 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "quoted_printable" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478e0585659a122aa407eb7e3c0e1fa51b1d8a870038bd29f0cf4a8551eea972" - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - [[package]] name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" -dependencies = [ - "libc", - "rand_chacha", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" -dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "rand_core" -version = "0.6.4" +name = "rand" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "getrandom 0.2.17", + "chacha20", + "getrandom 0.4.3", + "rand_core", ] [[package]] @@ -2553,7 +983,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "rand_core 0.10.1", + "rand_core", ] [[package]] @@ -2565,82 +995,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "regex" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" - -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", -] - [[package]] name = "reqwest" version = "0.13.4" @@ -2649,12 +1003,8 @@ checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64 0.22.1", "bytes", - "cookie", - "cookie_store", - "encoding_rs", "futures-core", "futures-util", - "h2", "http", "http-body", "http-body-util", @@ -2663,7 +1013,6 @@ dependencies = [ "hyper-util", "js-sys", "log", - "mime", "mime_guess", "percent-encoding", "pin-project-lite", @@ -2673,7 +1022,6 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "serde_urlencoded", "sync_wrapper", "tokio", "tokio-rustls", @@ -2702,93 +1050,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rkyv" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rpassword" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196" -dependencies = [ - "libc", - "rtoolbox", - "windows-sys 0.61.2", -] - -[[package]] -name = "rsa" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid 0.9.6", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "signature", - "spki", - "subtle", - "zeroize", -] - -[[package]] -name = "rtoolbox" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50a0e551c1e27e1731aba276dbeaeac73f53c7cd34d1bda485d02bd1e0f36844" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "rust_decimal" -version = "1.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" -dependencies = [ - "arrayvec", - "borsh", - "bytes", - "num-traits", - "rand 0.8.7", - "rkyv", - "serde", - "serde_json", - "wasm-bindgen", -] - [[package]] name = "rustc-hash" version = "2.1.3" @@ -2804,19 +1065,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - [[package]] name = "rustls" version = "0.23.42" @@ -2824,289 +1072,103 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", - "log", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pki-types" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-platform-verifier" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" -dependencies = [ - "core-foundation", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.103.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sea-bae" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260bbc7148a8d6818ac5032a1b9970da1a68bdd723d45b12d59f7c1bf3565e24" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "sea-orm" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549c6d29a2e7a84e35c5dfbc06370a62c4d35f2328c31005267bec586b34f682" -dependencies = [ - "async-stream", - "async-trait", - "bigdecimal", - "chrono", - "derive-where", - "derive_more", - "futures-util", - "itertools", - "log", - "mac_address", - "ouroboros", - "pgvector", - "rust_decimal", - "sea-orm-arrow", - "sea-orm-macros", - "sea-query", - "sea-query-sqlx", - "sea-schema", - "serde", - "serde_json", - "sqlx", - "sqlx-core", - "strum", - "thiserror 2.0.19", - "time", - "tracing", - "url", - "uuid", - "web-time", -] - -[[package]] -name = "sea-orm-arrow" -version = "2.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2eee8405f16c1f337fe3a83389361caea83c928d14dbd666a480407072c365" -dependencies = [ - "arrow", - "sea-query", - "thiserror 2.0.19", -] - -[[package]] -name = "sea-orm-cli" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec4b7c39c90efa92b8bb0b91ac7159684b9fa0d6371ce39bfab0a9793ce7394" -dependencies = [ - "chrono", - "glob", - "indoc", - "regex", - "sea-schema", - "sqlx", - "tokio", - "tracing", - "tracing-subscriber", - "url", + "zeroize", ] [[package]] -name = "sea-orm-macros" -version = "2.0.0" +name = "rustls-native-certs" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4cbb7ae053b9b37c919ea944a3bc52f7830a90c223f8a765c908293bca8f22d" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ - "heck 0.5.0", - "itertools", - "pluralizer", - "proc-macro2", - "quote", - "sea-bae", - "syn 2.0.119", - "unicode-ident", + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", ] [[package]] -name = "sea-orm-migration" -version = "2.0.0" +name = "rustls-pki-types" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef3576c5301b67ea7d2ce4515858d700066e51911c7d228a439c00ff258695c8" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ - "async-trait", - "sea-orm", - "sea-orm-cli", - "sea-schema", - "tracing", - "tracing-subscriber", + "web-time", + "zeroize", ] [[package]] -name = "sea-query" -version = "1.0.1" +name = "rustls-platform-verifier" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d190cfb3bcceb8a8d7d04dee5a0c77f60c7627979cdcb47fdcb8934f009badf" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ - "chrono", - "ordered-float", - "rust_decimal", - "sea-query-derive", - "serde_json", - "time", - "uuid", + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] [[package]] -name = "sea-query-derive" -version = "1.0.0" +name = "rustls-platform-verifier-android" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b0f466921cdd3cf4b89d5c3ac2173dba89a873ab395b123a645de181ec7537" -dependencies = [ - "darling", - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.119", - "thiserror 2.0.19", -] +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] -name = "sea-query-sqlx" -version = "0.9.1" +name = "rustls-webpki" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eaa419cdb9157da1361186b1959983eb2ea0dcb9a3c69dc45c449ecb2af8fef" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "sea-query", - "sqlx", + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "sea-schema" -version = "0.18.1" +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3553c77dceed56e95bece9ea876c4dd67ca879ef51055a0b97a7bb89a8ae4fed" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "async-trait", - "sea-query", - "sea-query-sqlx", - "sea-schema-derive", - "sqlx", + "winapi-util", ] [[package]] -name = "sea-schema-derive" -version = "0.3.0" +name = "schannel" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.119", + "windows-sys 0.61.2", ] [[package]] -name = "seahash" -version = "4.1.0" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" @@ -3173,7 +1235,6 @@ version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ - "indexmap", "itoa", "memchr", "serde", @@ -3181,51 +1242,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - -[[package]] -name = "sha1" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.3", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.11.0" @@ -3233,8 +1249,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.3", + "cpufeatures", + "digest", ] [[package]] @@ -3255,310 +1271,56 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd_cesu8" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" -dependencies = [ - "rustc_version", - "simdutf8", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "siphasher" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "smallvec" -version = "1.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "spin" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlx" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" -dependencies = [ - "base64 0.22.1", - "bytes", - "cfg-if", - "chrono", - "crc", - "crossbeam-queue", - "either", - "event-listener", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.16.1", - "hashlink", - "indexmap", - "log", - "memchr", - "percent-encoding", - "rust_decimal", - "rustls", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "thiserror 2.0.19", - "time", - "tokio", - "tokio-stream", - "tracing", - "url", - "uuid", - "webpki-roots", -] - -[[package]] -name = "sqlx-macros" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.119", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" -dependencies = [ - "cfg-if", - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.119", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27" -dependencies = [ - "bitflags", - "byteorder", - "bytes", - "chrono", - "crc", - "digest 0.11.3", - "dotenvy", - "either", - "futures-core", - "futures-util", - "generic-array", - "log", - "percent-encoding", - "rust_decimal", - "serde", - "sha1 0.11.0", - "sha2 0.11.0", - "sqlx-core", - "thiserror 2.0.19", - "time", - "tracing", - "uuid", -] - -[[package]] -name = "sqlx-postgres" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags", - "byteorder", - "chrono", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "rand 0.10.2", - "rust_decimal", - "serde", - "serde_json", - "sha2 0.11.0", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.19", - "time", - "tracing", - "uuid", - "whoami", +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", ] [[package]] -name = "sqlx-sqlite" -version = "0.9.0" +name = "simd_cesu8" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ - "atoi", - "chrono", - "flume", - "form_urlencoded", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "sqlx-core", - "thiserror 2.0.19", - "time", - "tracing", - "url", - "uuid", + "rustc_version", + "simdutf8", ] [[package]] -name = "stable_deref_trait" -version = "1.2.1" +name = "simdutf8" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] -name = "static_assertions" -version = "1.1.0" +name = "slab" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "stringprep" -version = "0.1.5" +name = "smallvec" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] -name = "strsim" -version = "0.11.1" +name = "socket2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] [[package]] -name = "strum" -version = "0.28.0" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "subtle" @@ -3566,17 +1328,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.119" @@ -3619,12 +1370,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "telegram_bot_oxidebot" version = "0.1.4" @@ -3639,55 +1384,22 @@ dependencies = [ "hyper", "mime_guess", "oxidebot", - "reqwest 0.13.4", + "reqwest", "serde", "serde_json", - "sha2 0.11.0", + "sha2", "tokio", "tracing", "url", ] -[[package]] -name = "tempfile" -version = "3.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" -dependencies = [ - "fastrand", - "getrandom 0.4.3", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.19", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", + "thiserror-impl", ] [[package]] @@ -3710,45 +1422,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "time" -version = "0.3.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" - -[[package]] -name = "time-macros" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -3812,29 +1485,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-stream" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - [[package]] name = "tokio-util" version = "0.7.19" @@ -3844,41 +1494,10 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "libc", "pin-project-lite", "tokio", ] -[[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.25.13+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" -dependencies = [ - "winnow", -] - [[package]] name = "tower" version = "0.5.3" @@ -3930,7 +1549,6 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3974,14 +1592,10 @@ version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ - "matchers", "nu-ansi-term", - "once_cell", - "regex-automata", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", ] @@ -3992,24 +1606,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.8.7", - "sha1 0.10.7", - "thiserror 1.0.69", - "utf-8", -] - [[package]] name = "typenum" version = "1.20.1" @@ -4022,39 +1618,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-normalization" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.9.0" @@ -4073,59 +1642,18 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "uuid" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" -dependencies = [ - "js-sys", - "serde_core", - "wasm-bindgen", -] - [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "walkdir" version = "2.5.0" @@ -4151,15 +1679,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" version = "0.2.126" @@ -4169,7 +1688,6 @@ dependencies = [ "cfg-if", "once_cell", "rustversion", - "serde", "wasm-bindgen-macro", "wasm-bindgen-shared", ] @@ -4258,37 +1776,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "whoami" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.11" @@ -4298,12 +1785,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.62.2" @@ -4372,15 +1853,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -4454,42 +1926,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - [[package]] name = "writeable" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - [[package]] name = "yoke" version = "0.8.3" @@ -4513,26 +1955,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "zerofrom" version = "0.1.8" diff --git a/runner/Cargo.toml b/runner/Cargo.toml index 8c90c47..20fd5af 100644 --- a/runner/Cargo.toml +++ b/runner/Cargo.toml @@ -1,20 +1,18 @@ [package] -name = "my_oxidebot" -version = "0.2.0" +name = "oxidebot_app" +version = "0.1.0" edition = "2024" rust-version = "1.97" -description = "OxideBot runtime bundled by OxideBot for Root" -repository = "https://github.com/canxin121/oxidebot_root" +description = "Example OxideBot application for the OxideBot Root template" publish = false [dependencies] -onebot_v11_oxidebot = "0.1.4" telegram_bot_oxidebot = "0.1.4" oxidebot = "0.1.8" tokio = { version = "1.53.1", features = ["full"] } tracing-subscriber = "0.3.23" anyhow = "1.0.104" -china_unicom_oxidebot = { version = "0.3.0", git = "https://github.com/canxin121/china_unicom_oxidebot" } +async-trait = "0.1.89" [profile.release] lto = true diff --git a/runner/README.md b/runner/README.md new file mode 100644 index 0000000..d02672d --- /dev/null +++ b/runner/README.md @@ -0,0 +1,21 @@ +# Application runner + +这个目录是模板用户真正编写 OxideBot 应用的地方。 + +- `Cargo.toml`:添加 Bot 适配器、Handler 和业务依赖; +- `src/main.rs`:初始化适配器并注册 Filter/Handler; +- `src/example_handler.rs`:最小 `/start`、`/echo` 示例,可直接删除替换; +- `scripts/build-android.sh`:将当前 crate 交叉编译到四种 Android ABI; +- `Cargo.lock`:必须提交,保证 GitHub Actions 可复现构建。 + +修改依赖后运行: + +```sh +cd runner +cargo check +cargo generate-lockfile +``` + +不要在这里硬编码 Token。使用 Android 模块的 `env.conf`,然后通过 `std::env::var` 读取。 +runner 的 Cargo 包名固定为 `oxidebot_app`,模块/App 的用户可见身份由根目录 +`template.properties` 控制,通常无需修改包名。 diff --git a/runner/src/example_handler.rs b/runner/src/example_handler.rs new file mode 100644 index 0000000..67eebb3 --- /dev/null +++ b/runner/src/example_handler.rs @@ -0,0 +1,52 @@ +//! A deliberately small example handler. +//! +//! `/start` explains that this is a template, while `/echo ` replies with +//! the supplied text. Delete this file when your own application handlers are +//! ready. + +use anyhow::Result; +use async_trait::async_trait; +use oxidebot::{ + source::message::MessageSegment, EventHandlerTrait, Handler, Matcher, +}; + +pub struct ExampleHandler; + +impl From for Handler { + fn from(handler: ExampleHandler) -> Self { + Self { + event_handler: Some(Box::new(handler)), + active_handler: None, + } + } +} + +#[async_trait] +impl EventHandlerTrait for ExampleHandler { + async fn handle(&self, matcher: Matcher) -> Result<()> { + let Some(message) = matcher.try_get_message() else { + return Ok(()); + }; + let text = message.get_raw_text(); + + if text == "/start" { + matcher + .try_reply_message(vec![MessageSegment::text( + "OxideBot Root template is running. Replace ExampleHandler with your own application. Try /echo hello.", + )]) + .await?; + } else if let Some(echo) = text.strip_prefix("/echo") { + let echo = echo.trim(); + let response = if echo.is_empty() { + "Usage: /echo " + } else { + echo + }; + matcher + .try_reply_message(vec![MessageSegment::text(response)]) + .await?; + } + + Ok(()) + } +} diff --git a/runner/src/main.rs b/runner/src/main.rs index b94db3e..34f4ccb 100644 --- a/runner/src/main.rs +++ b/runner/src/main.rs @@ -1,24 +1,29 @@ +//! Minimal application example for the OxideBot Root template. +//! +//! Replace `ExampleHandler` with your own handlers and add any Bot adapters or +//! application dependencies you need in `runner/Cargo.toml`. + +mod example_handler; + use anyhow::Context; -use china_unicom_oxidebot::ChinaUnicomHandler; +use example_handler::ExampleHandler; use telegram_bot_oxidebot::bot::TelegramBot; #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::fmt::init(); - let token = std::env::var("TELEGRAM_BOT_TOKEN").context("TELEGRAM_BOT_TOKEN is not set")?; + + let token = std::env::var("TELEGRAM_BOT_TOKEN") + .context("TELEGRAM_BOT_TOKEN is not set; configure it in env.conf")?; let telegram = TelegramBot::try_new(token, Default::default()).await?; oxidebot::OxideBotManager::new() .bot(telegram) .await - .wait_handler(|sender| { - Box::pin(async move { - ChinaUnicomHandler::try_new(sender) - .await - .expect("failed to initialize China Unicom handler") - }) - }) - .await + .handler(ExampleHandler) + // Add your filters and handlers here: + // .filter(MyFilter) + // .handler(MyHandler::new(...).await?) .run_block() .await } diff --git a/scripts/oxidebotctl b/scripts/oxidebotctl index 939d5ef..10c08c8 100755 --- a/scripts/oxidebotctl +++ b/scripts/oxidebotctl @@ -1,7 +1,7 @@ #!/system/bin/sh MODDIR=${OXIDEBOT_MODDIR:-${0%/*}/..} -DATA_DIR=${OXIDEBOT_DATA_DIR:-/data/adb/oxidebot} +DATA_DIR=${OXIDEBOT_DATA_DIR:-/data/adb/__MODULE_ID__} RUN_DIR="$DATA_DIR/run" LOG_DIR="$DATA_DIR/logs" WORK_DIR="$DATA_DIR/data" @@ -11,6 +11,7 @@ START_FILE="$RUN_DIR/started_at" EXIT_FILE="$RUN_DIR/last_exit" LOCK_DIR="$RUN_DIR/control.lock" LOG_FILE="$LOG_DIR/oxidebot.log" +REQUIRED_ENV="${OXIDEBOT_REQUIRED_ENV:-__REQUIRED_ENV__}" ensure_dirs() { mkdir -p "$RUN_DIR" "$LOG_DIR" "$WORK_DIR" @@ -79,15 +80,22 @@ enabled() { configured() { [ -f "$ENV_FILE" ] || return 1 - token=$(sed -n 's/^TELEGRAM_BOT_TOKEN=//p' "$ENV_FILE" | tail -n 1) - [ -n "$token" ] + [ -z "$REQUIRED_ENV" ] && return 0 + required_keys=$(printf '%s' "$REQUIRED_ENV" | tr ',' ' ') + for required_key in $required_keys; do + required_value=$(sed -n "s/^${required_key}=//p" "$ENV_FILE" | tail -n 1) + [ -n "$required_value" ] || return 1 + done + return 0 } set_description() { state=$1 prop="$MODDIR/module.prop" [ -f "$prop" ] || return 0 - sed -i "s|^description=.*|description=OxideBot 后台服务 · $state|" "$prop" 2>/dev/null + module_name=$(sed -n 's/^name=//p' "$prop" 2>/dev/null) + safe_name=$(printf '%s' "$module_name" | sed 's/[&|\\]/\\&/g') + sed -i "s|^description=.*|description=$safe_name · $state|" "$prop" 2>/dev/null } acquire_lock() { @@ -165,7 +173,7 @@ start_service() { chmod 0755 "$bin" if ! configured; then - echo "尚未配置 TELEGRAM_BOT_TOKEN" >&2 + echo "尚未配置必填环境变量:$REQUIRED_ENV" >&2 set_description "⚠️ 等待配置" release_lock return 3 @@ -243,16 +251,19 @@ status_properties() { fi last_exit=$(sed -n '1p' "$EXIT_FILE" 2>/dev/null) version=$(sed -n 's/^version=//p' "$MODDIR/module.prop" 2>/dev/null) + module_name=$(sed -n 's/^name=//p' "$MODDIR/module.prop" 2>/dev/null) printf 'status=%s\n' "$service_status" printf 'pid=%s\n' "$pid" printf 'autostart=%s\n' "$autostart" printf 'configured=%s\n' "$has_config" + printf 'required_env=%s\n' "$REQUIRED_ENV" printf 'uptime_seconds=%s\n' "$uptime" printf 'started_at=%s\n' "$started_at" printf 'last_exit=%s\n' "$last_exit" printf 'abi=%s\n' "$(detect_abi)" printf 'root_manager=%s\n' "$(detect_root)" printf 'version=%s\n' "$version" + printf 'name=%s\n' "$module_name" printf 'binary=%s\n' "$(binary_path)" printf 'data_dir=%s\n' "$DATA_DIR" } @@ -264,7 +275,7 @@ status_human() { echo "状态:⏹ 已停止" fi if enabled; then echo "自动启动:已启用"; else echo "自动启动:已关闭"; fi - if configured; then echo "环境配置:已配置"; else echo "环境配置:等待 TELEGRAM_BOT_TOKEN"; fi + if configured; then echo "环境配置:已配置"; else echo "环境配置:等待 $REQUIRED_ENV"; fi echo "Root:$(detect_root)" echo "架构:$(detect_abi)" echo "日志:$LOG_FILE" diff --git a/scripts/supervisor.sh b/scripts/supervisor.sh index 764743e..08564e6 100755 --- a/scripts/supervisor.sh +++ b/scripts/supervisor.sh @@ -2,7 +2,7 @@ MODDIR=${0%/*}/.. CTL="$MODDIR/scripts/oxidebotctl" -DATA_DIR=/data/adb/oxidebot +DATA_DIR=/data/adb/__MODULE_ID__ RUN_DIR="$DATA_DIR/run" SUPERVISOR_PID="$RUN_DIR/supervisor.pid" diff --git a/template.properties b/template.properties new file mode 100644 index 0000000..f194fc5 --- /dev/null +++ b/template.properties @@ -0,0 +1,12 @@ +# Edit this file immediately after creating a repository from the template. +# Keep one key=value pair per line. Values may contain spaces. +moduleId=my_oxidebot +moduleName=My OxideBot +moduleAuthor=your-github-name +moduleDescription=My custom OxideBot application for Android Root +versionName=0.1.0 +versionCode=1 +applicationId=dev.example.myoxidebot +appName=My OxideBot +requiredEnv=TELEGRAM_BOT_TOKEN +repository=your-name/your-repository diff --git a/tests/controller_test.sh b/tests/controller_test.sh index 7102cee..b13634c 100755 --- a/tests/controller_test.sh +++ b/tests/controller_test.sh @@ -8,6 +8,7 @@ data_dir="$test_root/data" cleanup() { if [[ -f "$module_dir/scripts/oxidebotctl" ]]; then env OXIDEBOT_MODDIR="$module_dir" OXIDEBOT_DATA_DIR="$data_dir" OXIDEBOT_ABI=arm64-v8a \ + OXIDEBOT_REQUIRED_ENV=TELEGRAM_BOT_TOKEN \ sh "$module_dir/scripts/oxidebotctl" disable >/dev/null 2>&1 || true fi rm -rf "$test_root" @@ -22,7 +23,7 @@ cp "$project_dir/env.example" "$module_dir/env.example" cp "$project_dir/tests/fake_oxidebot.sh" "$module_dir/bin/arm64-v8a/oxidebot" chmod 0755 "$module_dir/scripts/oxidebotctl" "$module_dir/bin/arm64-v8a/oxidebot" -ctl=(env OXIDEBOT_MODDIR="$module_dir" OXIDEBOT_DATA_DIR="$data_dir" OXIDEBOT_ABI=arm64-v8a sh "$module_dir/scripts/oxidebotctl") +ctl=(env OXIDEBOT_MODDIR="$module_dir" OXIDEBOT_DATA_DIR="$data_dir" OXIDEBOT_ABI=arm64-v8a OXIDEBOT_REQUIRED_ENV=TELEGRAM_BOT_TOKEN sh "$module_dir/scripts/oxidebotctl") config='TELEGRAM_BOT_TOKEN=test-token RUST_LOG=debug diff --git a/tests/template_test.sh b/tests/template_test.sh new file mode 100755 index 0000000..f831ddd --- /dev/null +++ b/tests/template_test.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +set -euo pipefail + +project_dir="$(cd "$(dirname "$0")/.." && pwd)" +test_root="$(mktemp -d)" +trap 'rm -rf "$test_root"' EXIT + +for target in \ + aarch64-linux-android \ + armv7-linux-androideabi \ + x86_64-linux-android \ + i686-linux-android; do + mkdir -p "$test_root/$target/release" + cp "$project_dir/tests/fake_oxidebot.sh" "$test_root/$target/release/oxidebot_app" +done + +GITHUB_REPOSITORY=octocat/custom-oxidebot BINARY_DIR="$test_root" \ + bash "$project_dir/build.sh" >/dev/null + +module_zip="$project_dir/build/my_oxidebot-v0.1.0.zip" +test -f "$module_zip" +unzip -t "$module_zip" >/dev/null + +module_prop="$(unzip -p "$module_zip" module.prop)" +grep -q '^id=my_oxidebot$' <<<"$module_prop" +grep -q '^name=My OxideBot$' <<<"$module_prop" +grep -q '^version=v0.1.0$' <<<"$module_prop" +grep -q '^updateJson=https://github.com/octocat/custom-oxidebot/releases/latest/download/update.json$' <<<"$module_prop" + +controller="$(unzip -p "$module_zip" scripts/oxidebotctl)" +grep -q '/data/adb/my_oxidebot' <<<"$controller" +grep -q 'OXIDEBOT_REQUIRED_ENV:-TELEGRAM_BOT_TOKEN' <<<"$controller" +if grep -q '__MODULE_ID__' <<<"$controller"; then + echo 'unrendered module ID in controller' >&2 + exit 1 +fi + +webui="$(unzip -p "$module_zip" webroot/index.html)" +grep -q '/data/adb/modules/my_oxidebot/scripts/oxidebotctl' <<<"$webui" + +jq -e ' + .version == "v0.1.0" + and .versionCode == 1 + and .zipUrl == "https://github.com/octocat/custom-oxidebot/releases/download/v0.1.0/my_oxidebot-v0.1.0.zip" +' "$project_dir/build/update.json" >/dev/null + +echo 'template rendering tests passed' diff --git a/uninstall.sh b/uninstall.sh index c19131e..cf131dc 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -2,7 +2,7 @@ MODDIR=${0%/*} CTL="$MODDIR/scripts/oxidebotctl" -DATA_DIR=/data/adb/oxidebot +DATA_DIR=/data/adb/__MODULE_ID__ if [ -x "$CTL" ]; then "$CTL" disable >/dev/null 2>&1 diff --git a/update.json b/update.json deleted file mode 100644 index 8808be6..0000000 --- a/update.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "v1.0.0", - "versionCode": 10000, - "zipUrl": "https://github.com/canxin121/oxidebot_root/releases/download/v1.0.0/oxidebot-root-v1.0.0.zip", - "changelog": "https://raw.githubusercontent.com/canxin121/oxidebot_root/main/CHANGELOG.md" -} diff --git a/webroot/index.html b/webroot/index.html index 9240058..8cf05f9 100644 --- a/webroot/index.html +++ b/webroot/index.html @@ -141,7 +141,7 @@
-
OxideBot
Root service
+
OxideBot
Root service
@@ -156,7 +156,7 @@ -
还没有设置 Telegram Token。请打开「配置」页填写环境变量,保存后启动服务。
+
还没有设置必填环境变量。请打开「配置」页填写,保存后启动服务。

运行概览

—
运行时间
—
@@ -171,7 +171,7 @@

环境配置

每行填写一个 KEY=value。配置保存在模块外部,升级不会覆盖;内容只会通过 Root 桥接在本机读写。

env.conf

-

至少需要 TELEGRAM_BOT_TOKEN。无需引号;等号后的全部内容都会作为变量值原样传给 OxideBot。

+

本应用要求:请查看 runner 代码。无需引号;等号后的全部内容都会作为变量值原样传给 OxideBot。

权限 0600
@@ -196,12 +196,12 @@

关于

面向现代 Android Root 生态重新设计的 OxideBot 后台运行环境。

-

OxideBot for Root

+

OxideBot

同一个控制器、同一套界面,同时服务于模块 WebUI、原生 Android 管理器和命令行。

模块版本—
-
模块 IDoxidebot_root
-
数据目录/data/adb/oxidebot
+
模块 ID__MODULE_ID__
+
数据目录/data/adb/__MODULE_ID__
兼容Magisk · KernelSU · SukiSU · APatch
许可证GPL-3.0-only
@@ -219,7 +219,7 @@

OxideBot for Root