From c65ec5c4b29bc03cc086f721c69ce0e98eb24e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Tue, 12 May 2026 22:19:49 +0800 Subject: [PATCH 01/20] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E4=B8=BA=E5=A4=9A=E6=A8=A1=E5=9D=97SDK=E6=9E=B6?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 拆分核心业务为独立SDK模块: - sdk/backup:纯Kotlin备份/恢复核心逻辑 - sdk/auth:纯Kotlin认证与身份管理组件 - sdk/storage:Android Library存储抽象与Room实现 2. 迁移原有业务模型到SDK层,统一数据模型定义 3. 重构app模块为应用壳,仅保留UI、权限和平台实现 4. 更新依赖配置和项目结构,遵循模块依赖规则 5. 完成架构文档更新与代码规范梳理 --- NOTICE.md | 82 +- README.md | 55 +- android/README.md | 104 +- android/app/build.gradle | 19 +- .../mobile/BackupManagerInstrumentedTest.kt | 204 +-- .../imken/messagevault/mobile/MainActivity.kt | 725 +--------- .../messagevault/mobile/api/ApiClient.kt | 2 +- .../messagevault/mobile/data/ApiClient.kt | 16 - .../messagevault/mobile/data/BackupFile.kt | 4 - .../messagevault/mobile/data/BackupManager.kt | 1070 -------------- .../mobile/data/RestoreManager.kt | 1248 ----------------- .../data/backup/AndroidBackupFileReader.kt | 103 ++ .../data/backup/AndroidBackupFileWriter.kt | 99 ++ .../data/backup/AndroidCallLogReader.kt | 149 ++ .../data/backup/AndroidCallLogWriter.kt | 159 +++ .../data/backup/AndroidContactReader.kt | 344 +++++ .../data/backup/AndroidContactWriter.kt | 85 ++ .../mobile/data/backup/AndroidSmsReader.kt | 94 ++ .../mobile/data/backup/AndroidSmsWriter.kt | 107 ++ .../data/backup/RestorePermissionHelper.kt | 174 +++ .../mobile/data/entity/CallLogsEntity.kt | 49 - .../messagevault/mobile/data/model/Entity.kt | 39 - .../messagevault/mobile/data/model/UiState.kt | 8 - .../mobile/data/models/BackupFile.kt | 17 - .../mobile/data/models/BackupFileInfo.kt | 37 - .../mobile/data/models/BackupModels.kt | 61 - .../messagevault/mobile/model/BackupData.kt | 29 +- .../messagevault/mobile/model/BackupResult.kt | 15 +- .../messagevault/mobile/model/CallLog.kt | 80 +- .../messagevault/mobile/model/Contact.kt | 169 +-- .../messagevault/mobile/model/Message.kt | 87 +- .../messagevault/mobile/model/UploadResult.kt | 9 +- .../messagevault/mobile/models/DataModels.kt | 43 - .../messagevault/mobile/models/UiState.kt | 5 + .../mobile/ui/navigation/NavigationHost.kt | 144 ++ .../mobile/ui/permission/PermissionHandler.kt | 78 ++ .../mobile/ui/restore/RestoreViewModel.kt | 67 +- .../mobile/ui/viewmodels/BackupViewModel.kt | 56 +- .../mobile/ui/viewmodels/RestoreViewModel.kt | 285 ++-- .../mobile/utils/DefaultSmsAppHelper.kt | 248 ++++ .../mobile/data/BackupManagerTest.kt | 234 +--- android/build.gradle | 3 + .../docs/architecture/ai-agent-integration.md | 403 ++++++ .../architecture/backend-microservices.md | 401 ++++++ .../docs/architecture/harmonyos-adaptation.md | 401 ++++++ android/docs/architecture/third-party-auth.md | 379 +++++ android/features.md | 82 +- android/gradlew | 0 android/sdk/.gitignore | 1 + android/sdk/auth/build.gradle | 20 + .../messagevault/sdk/auth/AuthManager.kt | 16 + .../messagevault/sdk/auth/AuthProvider.kt | 32 + .../sdk/auth/LocalAuthProvider.kt | 43 + .../sdk/auth/ThirdPartyAuthProvider.kt | 10 + android/sdk/backup/build.gradle | 23 + .../messagevault/sdk/backup/BackupManager.kt | 103 ++ .../messagevault/sdk/backup/RestoreManager.kt | 67 + .../sdk/backup/model/BackupData.kt | 26 + .../sdk/backup/model/BackupReadData.kt | 9 + .../sdk/backup/model/BackupResult.kt | 13 + .../messagevault/sdk/backup/model/CallLog.kt | 30 + .../sdk/backup/model/CallLogData.kt | 10 + .../messagevault/sdk/backup/model/Contact.kt | 92 ++ .../sdk/backup/model/ContactData.kt | 8 + .../messagevault/sdk/backup/model/Message.kt | 35 + .../sdk/backup/model/RestoreOptions.kt | 7 + .../sdk/backup/model/RestoreResult.kt | 9 + .../messagevault/sdk/backup/model/SmsData.kt | 12 + .../sdk/backup/model/UploadResult.kt | 7 + .../sdk/backup/reader/BackupFileReader.kt | 7 + .../sdk/backup/reader/CallLogReader.kt | 7 + .../sdk/backup/reader/ContactReader.kt | 7 + .../sdk/backup/reader/SmsReader.kt | 7 + .../sdk/backup/serializer/BackupSerializer.kt | 185 +++ .../sdk/backup/writer/BackupFileWriter.kt | 8 + .../sdk/backup/writer/CallLogWriter.kt | 7 + .../sdk/backup/writer/ContactWriter.kt | 7 + .../sdk/backup/writer/SmsWriter.kt | 7 + android/sdk/storage/build.gradle | 41 + .../sdk/storage/src/main/AndroidManifest.xml | 1 + .../sdk/storage/LocalStorageProvider.kt | 120 ++ .../sdk/storage/RemoteStorageProvider.kt | 19 + .../sdk/storage/StorageProvider.kt | 31 + .../sdk/storage}/dao/CallLogDao.kt | 29 +- .../sdk/storage}/dao/ContactDao.kt | 29 +- .../sdk/storage}/dao/MessageDao.kt | 29 +- .../sdk/storage}/database/AppDatabase.kt | 40 +- .../sdk/storage/entity/CallLogsEntity.kt | 15 + .../sdk/storage}/entity/ContactsEntity.kt | 38 +- .../sdk/storage}/entity/MessageEntity.kt | 4 +- android/settings.gradle | 3 + 91 files changed, 5037 insertions(+), 4449 deletions(-) delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/ApiClient.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/BackupFile.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/BackupManager.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/RestoreManager.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogWriter.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactReader.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactWriter.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsWriter.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/backup/RestorePermissionHelper.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/entity/CallLogsEntity.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/model/Entity.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/model/UiState.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFile.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFileInfo.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/data/models/BackupModels.kt delete mode 100644 android/app/src/main/java/imken/messagevault/mobile/models/DataModels.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/models/UiState.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/utils/DefaultSmsAppHelper.kt create mode 100644 android/docs/architecture/ai-agent-integration.md create mode 100644 android/docs/architecture/backend-microservices.md create mode 100644 android/docs/architecture/harmonyos-adaptation.md create mode 100644 android/docs/architecture/third-party-auth.md mode change 100755 => 100644 android/gradlew create mode 100644 android/sdk/.gitignore create mode 100644 android/sdk/auth/build.gradle create mode 100644 android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthManager.kt create mode 100644 android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthProvider.kt create mode 100644 android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/LocalAuthProvider.kt create mode 100644 android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/ThirdPartyAuthProvider.kt create mode 100644 android/sdk/backup/build.gradle create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/RestoreManager.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupData.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupReadData.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupResult.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLog.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLogData.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Contact.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/ContactData.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Message.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreOptions.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreResult.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/SmsData.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/UploadResult.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/BackupFileReader.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/CallLogReader.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/ContactReader.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/SmsReader.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/serializer/BackupSerializer.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/CallLogWriter.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/ContactWriter.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/SmsWriter.kt create mode 100644 android/sdk/storage/build.gradle create mode 100644 android/sdk/storage/src/main/AndroidManifest.xml create mode 100644 android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/LocalStorageProvider.kt create mode 100644 android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/RemoteStorageProvider.kt create mode 100644 android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/StorageProvider.kt rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/dao/CallLogDao.kt (59%) rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/dao/ContactDao.kt (60%) rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/dao/MessageDao.kt (59%) rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/database/AppDatabase.kt (61%) create mode 100644 android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/CallLogsEntity.kt rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/entity/ContactsEntity.kt (76%) rename android/{app/src/main/java/imken/messagevault/mobile/data => sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage}/entity/MessageEntity.kt (87%) diff --git a/NOTICE.md b/NOTICE.md index a07ae61..f41095f 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -13,9 +13,62 @@ - 避免过长的行(建议 120 字符以内) ### 架构原则 -- Android: MVVM + Repository Pattern +- Android: MVVM + 多模块SDK架构 - Vue: Composition API + 单向数据流 - 模块化设计,职责分离 +- SDK模块接口驱动,平台实现通过构造函数注入 + +## 🧩 多模块开发规范 + +### 模块依赖规则 + +``` +app → sdk/backup, sdk/auth, sdk/storage +sdk/backup ✗→ sdk/auth, sdk/storage, app +sdk/auth ✗→ sdk/backup, sdk/storage, app +sdk/storage ✗→ sdk/backup, sdk/auth, app +``` + +- `app` 模块可以依赖所有 `sdk/*` 模块 +- `sdk/*` 模块之间**禁止互相依赖** +- `sdk/*` 模块**禁止依赖** `app` 模块 +- 新增模块依赖关系需经架构评审 + +### SDK模块编码标准 + +#### 纯Kotlin模块(sdk/backup、sdk/auth) + +- **禁止引入Android依赖**:不得使用 `android.*`、`androidx.*` 等Android框架API +- **构建类型**:使用 `java-library` + `org.jetbrains.kotlin.jvm` 插件 +- **依赖限制**:仅允许纯Kotlin/JVM依赖(kotlin-stdlib、kotlinx-coroutines-core、gson等) +- **接口设计**:所有平台相关操作通过接口暴露(如 `SmsReader`、`AuthProvider`),由 `app` 模块提供Android实现 +- **可测试性**:所有逻辑可通过纯JVM单元测试验证,无需Android模拟器 + +#### Android Library模块(sdk/storage) + +- **构建类型**:使用 `com.android.library` + `org.jetbrains.kotlin.android` 插件 +- **允许的Android依赖**:Room、Retrofit、androidx.core等AndroidX库 +- **接口设计**:对外暴露纯Kotlin接口(如 `StorageProvider`),内部使用Android API实现 +- **最小化Android耦合**:尽量将纯逻辑提取为独立函数,减少对Android框架的依赖 + +#### App模块 + +- **职责**:UI展示、导航、权限管理、Android平台SDK接口实现 +- **SDK接口实现**:所有SDK定义的接口(`SmsReader`、`SmsWriter`、`StorageProvider`等)在 `app` 模块中提供Android实现 +- **依赖注入**:通过构造函数注入SDK接口实现,不使用Service Locator或全局单例 + +### 测试规范 + +| 模块类型 | 测试方式 | 测试命令 | 说明 | +|---------|---------|---------|------| +| 纯Kotlin SDK | JVM单元测试 | `./gradlew :sdk:backup:test` | 无需Android设备/模拟器 | +| 纯Kotlin SDK | JVM单元测试 | `./gradlew :sdk:auth:test` | 无需Android设备/模拟器 | +| Android Library | Instrumented测试 | `./gradlew :sdk/storage:connectedAndroidTest` | 需要Android设备/模拟器 | +| App | JVM + Instrumented | `./gradlew :app:test` | ViewModel用JVM测试,UI用Instrumented测试 | + +- SDK模块测试覆盖率目标:核心逻辑 > 80% +- App模块测试覆盖率目标:ViewModel > 70% +- 新增SDK接口必须附带接口契约测试 ## 💬 注释要求 @@ -33,7 +86,10 @@ - 核心功能必须有单元测试 - 关键流程需要集成测试 -- 测试覆盖率目标:核心模块 > 70% +- 测试覆盖率目标:SDK核心模块 > 80%,App ViewModel > 70% +- 纯Kotlin SDK模块(sdk/backup、sdk/auth)使用JVM单元测试,无需Android模拟器 +- Android Library模块(sdk/storage)使用Instrumented测试 +- 新增SDK接口必须附带接口契约测试 ## 📝 变更记录 @@ -51,10 +107,20 @@ ``` MessageVault/ -├── android/ # MessageVault-Mobile (Kotlin/Android) -├── previewer/ # SMS-Previewer (Vue 3/Vite) -├── .trae/ # 开发工具配置 -├── LICENSE # GPL v3.0 -├── NOTICE.md # 项目规范 -└── README.md # 项目总览 +├── android/ # MessageVault-Mobile (Kotlin/Android) +│ ├── sdk/ +│ │ ├── backup/ # 纯Kotlin备份/恢复SDK +│ │ ├── auth/ # 纯Kotlin认证组件 +│ │ └── storage/ # Android Library存储组件 +│ ├── app/ # Android应用壳 +│ └── docs/architecture/ # 架构设计文档 +│ ├── harmonyos-adaptation.md +│ ├── third-party-auth.md +│ ├── ai-agent-integration.md +│ └── backend-microservices.md +├── previewer/ # SMS-Previewer (Vue 3/Vite) +├── .trae/ # 开发工具配置 +├── LICENSE # GPL v3.0 +├── NOTICE.md # 项目规范 +└── README.md # 项目总览 ``` diff --git a/README.md b/README.md index 89c4b0d..9adb408 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,33 @@ MessageVault是一个开源项目,为Android用户提供安全、私密的短 ### 📱 android/ — MessageVault-Mobile `v0.1.4` ⭐ **主力项目** -现代化Android应用,采用Material Design 3设计 +现代化Android应用,采用Material Design 3设计,多模块SDK架构 - ✅ **短信备份**: 完整支持SMS备份,包含所有元数据 - ✅ **通话记录备份**: 完整支持通话历史记录备份 - ✅ **联系人备份**: 完整支持联系人信息备份 - ✅ **智能恢复**: 支持选择性恢复,带进度显示 - ✅ **Material You**: 支持动态取色和深色主题 - ✅ **多语言**: 中文/英文界面支持 +- ✅ **模块化SDK**: 核心逻辑提取为独立SDK模块,支持跨平台复用 **技术栈**: Kotlin · Jetpack Compose · Material Design 3 · MVVM · Room · Kotlin Coroutines +#### SDK模块 + +| 模块 | 类型 | 职责 | +|------|------|------| +| `sdk/backup` | 纯Kotlin | 备份/恢复核心逻辑(BackupManager、RestoreManager、BackupSerializer、数据模型、读写接口) | +| `sdk/auth` | 纯Kotlin | 认证与身份管理(AuthProvider接口、LocalAuthProvider、ThirdPartyAuthProvider、AuthManager) | +| `sdk/storage` | Android Library | 存储抽象与实现(StorageProvider接口、LocalStorageProvider、RemoteStorageProvider、Room) | +| `app` | Android Application | 应用壳(UI、导航、权限、Android平台SDK接口实现) | + +#### 架构设计文档 + +- [鸿蒙适配设计文档](android/docs/architecture/harmonyos-adaptation.md) — 鸿蒙原生开发方案、KMP复用策略 +- [第三方登录设计文档](android/docs/architecture/third-party-auth.md) — AuthProvider接口设计、OAuth2.0扩展 +- [AI Agent集成设计文档](android/docs/architecture/ai-agent-integration.md) — 知识库架构、本地/云端AI模型 +- [后端微服务架构设计文档](android/docs/architecture/backend-microservices.md) — 服务拆分、NAS自部署 + ### 🔍 previewer/ — SMS-Previewer `v0.0.1` ⭐ **工具项目** 优雅的短信备份预览工具,基于Web技术 @@ -63,7 +80,8 @@ MessageVault是一个开源项目,为Android用户提供安全、私密的短 ### Mobile (Android) - **框架**: Jetpack Compose + Material Design 3 - **语言**: Kotlin -- **架构**: MVVM + Repository Pattern +- **架构**: MVVM + 多模块SDK架构 +- **SDK模块**: sdk/backup (纯Kotlin) · sdk/auth (纯Kotlin) · sdk/storage (Android Library) - **并发**: Kotlin Coroutines + StateFlow - **测试**: JUnit + Mockito + Espresso @@ -75,19 +93,26 @@ MessageVault是一个开源项目,为Android用户提供安全、私密的短 ## 🏗️ 系统架构 ``` -┌─────────────────┐ -│ Android App │ -│ (android/) │ -│ MessageVault- │ -│ Mobile │ -└────────┬────────┘ - │ JSON Export - ▼ -┌─────────────────┐ -│ SMS-Previewer │ -│ (previewer/) │ -│ Web Tool │ -└─────────────────┘ +┌─────────────────────────────────────────────┐ +│ Android App (app/) │ +│ UI · ViewModel · 权限 · 导航 · SDK接口实现 │ +└──────┬──────────────┬──────────────┬────────┘ + │ │ │ + ▼ ▼ ▼ +┌────────────┐ ┌────────────┐ ┌────────────┐ +│ sdk/backup │ │ sdk/auth │ │ sdk/storage │ +│ (纯Kotlin) │ │ (纯Kotlin) │ │ (Android │ +│ │ │ │ │ Library) │ +└────────────┘ └────────────┘ └────────────┘ + │ │ │ + └──────┬───────┘ │ + │ JSON Export │ + ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ +│ SMS-Previewer │ │ 后端微服务 │ +│ (previewer/) │ │ (规划中) │ +│ Web Tool │ │ │ +└─────────────────┘ └─────────────────┘ ``` ## 🚀 快速开始 diff --git a/android/README.md b/android/README.md index c795c72..f27cd2a 100644 --- a/android/README.md +++ b/android/README.md @@ -52,12 +52,86 @@ MessageVault Mobile是一个专注于Android数据备份与恢复的开源应用 ## 🛠️ 技术栈 - **UI框架**: Jetpack Compose -- **架构模式**: MVVM +- **架构模式**: MVVM + 多模块SDK架构 - **状态管理**: ViewModel + StateFlow -- **依赖注入**: Hilt (计划中) +- **依赖注入**: 构造函数注入(SDK接口由App模块实现注入) - **数据持久化**: Room + DataStore - **并发处理**: Kotlin Coroutines -- **单元测试**: JUnit + Mockito +- **序列化**: Gson(封装在BackupSerializer中) +- **网络请求**: Retrofit +- **单元测试**: JUnit + Mockito + Kotlin Coroutines Test + +## 🏗️ 项目架构 + +### 模块结构 + +``` +MessageVault-Mobile/ +├── sdk/ +│ ├── backup/ # 纯Kotlin备份/恢复SDK +│ │ └── src/main/kotlin/imken/messagevault/sdk/backup/ +│ │ ├── BackupManager.kt # 备份门面类 +│ │ ├── RestoreManager.kt # 恢复管理器 +│ │ ├── model/ # 数据模型(BackupData, Message, CallLog, Contact...) +│ │ ├── serializer/ # JSON序列化(BackupSerializer) +│ │ ├── reader/ # 读取接口(SmsReader, CallLogReader, ContactReader, BackupFileReader) +│ │ └── writer/ # 写入接口(SmsWriter, CallLogWriter, ContactWriter, BackupFileWriter) +│ ├── auth/ # 纯Kotlin认证组件 +│ │ └── src/main/kotlin/imken/messagevault/sdk/auth/ +│ │ ├── AuthProvider.kt # 认证接口 + 数据模型(UserInfo, AuthResult, AuthCredentials) +│ │ ├── LocalAuthProvider.kt # 本地模式实现 +│ │ ├── ThirdPartyAuthProvider.kt # 第三方登录接口 +│ │ └── AuthManager.kt # 认证管理器(委托模式) +│ └── storage/ # Android Library存储组件 +│ └── src/main/kotlin/imken/messagevault/sdk/storage/ +│ ├── StorageProvider.kt # 存储接口 + 数据模型(StorageResult, StorageInfo) +│ ├── LocalStorageProvider.kt # 本地文件存储实现 +│ └── RemoteStorageProvider.kt # 远程存储接口 +├── app/ # Android应用壳 +│ └── src/main/java/imken/messagevault/mobile/ +│ ├── data/backup/ # Android平台SDK实现(AndroidSmsReader, AndroidCallLogWriter...) +│ ├── model/ # 应用层数据模型 +│ ├── models/ # UI数据模型 +│ ├── ui/ # Compose UI + ViewModel + 导航 +│ ├── utils/ # 工具类 +│ └── MainActivity.kt # 主Activity +└── docs/architecture/ # 架构设计文档 + ├── harmonyos-adaptation.md + ├── third-party-auth.md + ├── ai-agent-integration.md + └── backend-microservices.md +``` + +### 模块依赖关系 + +``` +┌─────────────────────────────────────┐ +│ app │ +│ (UI · ViewModel · 权限 · 导航) │ +│ (Android平台SDK接口实现) │ +└──────┬──────────┬──────────┬────────┘ + │ │ │ + ▼ ▼ ▼ +┌────────────┐ ┌────────────┐ ┌────────────┐ +│ sdk/backup │ │ sdk/auth │ │ sdk/storage │ +│ (纯Kotlin) │ │ (纯Kotlin) │ │ (Android │ +│ │ │ │ │ Library) │ +└────────────┘ └────────────┘ └────────────┘ + 备份/恢复 认证/登录 存储/数据库 + 数据模型 身份管理 文件/远程存储 + 序列化 Token管理 Room数据库 +``` + +> SDK模块之间互不依赖,纯Kotlin模块(backup、auth)可跨平台复用 + +### 架构设计文档 + +| 文档 | 说明 | +|------|------| +| [鸿蒙适配设计文档](docs/architecture/harmonyos-adaptation.md) | 鸿蒙原生开发方案、KMP复用策略、权限差异分析 | +| [第三方登录设计文档](docs/architecture/third-party-auth.md) | AuthProvider接口设计、OAuth2.0扩展、Token安全 | +| [AI Agent集成设计文档](docs/architecture/ai-agent-integration.md) | 知识库架构、本地/云端AI模型、隐私保护 | +| [后端微服务架构设计文档](docs/architecture/backend-microservices.md) | 服务拆分、API网关、NAS自部署方案 | ## 📦 安装要求 @@ -80,8 +154,21 @@ git clone https://github.com/MessageVault/MessageVault-Mobile.git # 进入项目目录 cd MessageVault-Mobile -# 构建项目 +# 构建整个项目(包含所有SDK模块和App) ./gradlew build + +# 仅构建特定模块 +./gradlew :sdk:backup:build # 备份SDK +./gradlew :sdk:auth:build # 认证组件 +./gradlew :sdk:storage:build # 存储组件 +./gradlew :app:assembleDebug # Debug APK + +# 运行SDK模块测试(无需Android设备/模拟器) +./gradlew :sdk:backup:test # 备份SDK单元测试 +./gradlew :sdk:auth:test # 认证组件单元测试 + +# 运行所有测试 +./gradlew test ``` ### 系统要求 @@ -91,6 +178,15 @@ cd MessageVault-Mobile - Android SDK (API 24-34) - Gradle 8.2+ +### 模块说明 + +| 模块 | 构建类型 | 说明 | 测试方式 | +|------|---------|------|---------| +| `sdk/backup` | java-library | 纯Kotlin,无Android依赖 | `./gradlew :sdk:backup:test` | +| `sdk/auth` | java-library | 纯Kotlin,无Android依赖 | `./gradlew :sdk:auth:test` | +| `sdk/storage` | Android Library | 依赖Room、Retrofit等 | `./gradlew :sdk/storage:connectedAndroidTest` | +| `app` | Android Application | 依赖所有SDK模块 | `./gradlew :app:test` | + ## 🤝 贡献指南 我们欢迎各种形式的贡献!以下是一些参与项目的方式: diff --git a/android/app/build.gradle b/android/app/build.gradle index fac4c4e..a524756 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -24,17 +24,6 @@ android { vectorDrawables { useSupportLibrary true } - - // 配置Room架构 - javaCompileOptions { - annotationProcessorOptions { - arguments += [ - "room.schemaLocation": "$projectDir/schemas", - "room.incremental": "true", - "room.expandProjection": "true" - ] - } - } } buildFeatures { @@ -122,10 +111,10 @@ dependencies { // Gson implementation 'com.google.code.gson:gson:2.10.1' - // Room数据库 - implementation 'androidx.room:room-runtime:2.6.1' - implementation 'androidx.room:room-ktx:2.6.1' - annotationProcessor 'androidx.room:room-compiler:2.6.1' + // SDK模块 + implementation project(':sdk:backup') + implementation project(':sdk:auth') + implementation project(':sdk:storage') // WorkManager - 用于多线程后台任务 implementation 'androidx.work:work-runtime-ktx:2.9.0' diff --git a/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt b/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt index 5f50441..28b701b 100644 --- a/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt +++ b/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt @@ -4,10 +4,17 @@ import android.Manifest import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.GrantPermissionRule -import imken.messagevault.mobile.data.BackupManager -import imken.messagevault.mobile.model.BackupData +import imken.messagevault.mobile.data.backup.AndroidBackupFileReader +import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter +import imken.messagevault.mobile.data.backup.AndroidCallLogReader +import imken.messagevault.mobile.data.backup.AndroidCallLogWriter +import imken.messagevault.mobile.data.backup.AndroidContactReader +import imken.messagevault.mobile.data.backup.AndroidContactWriter +import imken.messagevault.mobile.data.backup.AndroidSmsReader +import imken.messagevault.mobile.data.backup.AndroidSmsWriter +import imken.messagevault.sdk.backup.BackupManager +import kotlinx.coroutines.runBlocking import org.junit.After import org.junit.Before import org.junit.Rule @@ -19,26 +26,12 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.Locale import java.util.TimeZone -import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertTrue -/** - * BackupManager设备测试 - * - * 在真实设备或模拟器上测试以下功能: - * - 实际环境中的短信和通话记录读取 - * - 备份文件创建和内容验证 - * - * 此测试需要授予READ_SMS和READ_CALL_LOG权限。 - * - * 作者: Cursor AI - * 创建日期: 2025-04-17 - */ @RunWith(AndroidJUnit4::class) class BackupManagerInstrumentedTest { - // 自动授予必要权限 @get:Rule val permissionRule: GrantPermissionRule = GrantPermissionRule.grant( Manifest.permission.READ_SMS, @@ -52,187 +45,62 @@ class BackupManagerInstrumentedTest { @Before fun setUp() { - // 获取应用上下文 context = ApplicationProvider.getApplicationContext() - - // 设置测试日志记录器 setupTestLogger() - - // 获取测试开始时间 testStartTime = System.currentTimeMillis() - // 初始化被测对象 - backupManager = BackupManager(context) + backupManager = BackupManager( + smsReader = AndroidSmsReader(context), + callLogReader = AndroidCallLogReader(context), + contactReader = AndroidContactReader(context), + backupFileWriter = AndroidBackupFileWriter(context), + backupFileReader = AndroidBackupFileReader(context), + smsWriter = AndroidSmsWriter(context), + callLogWriter = AndroidCallLogWriter(context), + contactWriter = AndroidContactWriter(context) + ) - // 记录测试开始 Timber.i("[Mobile] INFO [Test] 开始BackupManager设备测试; Context: Instrumented test on device") } - /** - * 设置测试专用的日志记录器 - */ private fun setupTestLogger() { Timber.plant(object : Timber.Tree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { val timestamp = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US) .apply { timeZone = TimeZone.getTimeZone("UTC") } .format(Date()) - - // 构造日志消息 val logMessage = "$timestamp $message" - - // 输出到控制台和Logcat println(logMessage) android.util.Log.println(priority, "MessageVaultTest", logMessage) } }) } - /** - * 测试短信读取功能 - * - * 注意:此测试需要设备上有短信数据,否则将通过但没有实际内容验证 - */ - @Test - fun testReadSMS() { - // 执行被测方法 - val messages = backupManager.readSMS() - - // 记录结果 - Timber.i("[Mobile] INFO [Test] 读取到 ${messages.size} 条短信; Context: Instrumented test on device") - - // 验证返回的列表不为null - assertNotNull(messages, "短信列表不应为null") - - // 如果有短信,检查第一条短信的内容 - if (messages.isNotEmpty()) { - val firstSms = messages[0] - assertNotNull(firstSms.address, "短信地址不应为null") - assertNotNull(firstSms.body, "短信内容不应为null") - assertTrue(firstSms.id > 0, "短信ID应大于0") - - // 记录第一条短信内容摘要(不记录完整内容以保护隐私) - Timber.i("[Mobile] INFO [Test] 首条短信摘要; Context: ID=${firstSms.id}, 地址长度=${firstSms.address.length}, 内容长度=${firstSms.body.length}") - } - - Timber.i("[Mobile] INFO [Test] readSMS测试通过; Context: 成功在设备上读取短信数据") - } - - /** - * 测试通话记录读取功能 - * - * 注意:此测试需要设备上有通话记录数据,否则将通过但没有实际内容验证 - */ @Test - fun testReadCallLogs() { - // 执行被测方法 - val callLogs = backupManager.readCallLogs() - - // 记录结果 - Timber.i("[Mobile] INFO [Test] 读取到 ${callLogs.size} 条通话记录; Context: Instrumented test on device") - - // 验证返回的列表不为null - assertNotNull(callLogs, "通话记录列表不应为null") - - // 如果有通话记录,检查第一条通话记录的内容 - if (callLogs.isNotEmpty()) { - val firstCallLog = callLogs[0] - assertNotNull(firstCallLog.number, "通话号码不应为null") - assertTrue(firstCallLog.id > 0, "通话记录ID应大于0") - assertTrue(firstCallLog.date > 0, "通话日期应大于0") - - // 记录第一条通话记录内容摘要 - Timber.i("[Mobile] INFO [Test] 首条通话记录摘要; Context: ID=${firstCallLog.id}, 类型=${firstCallLog.type}, 时长=${firstCallLog.duration}秒") - } - - Timber.i("[Mobile] INFO [Test] readCallLogs测试通过; Context: 成功在设备上读取通话记录数据") - } - - /** - * 测试备份到JSON文件功能 - */ - @Test - fun testBackupToJson() { - // 创建BackupData对象 - val backupData = backupManager.createBackupData() - - // 记录备份数据信息 - Timber.i("[Mobile] INFO [Test] 创建备份数据; Context: 短信数量=${backupData.messages.size}, 通话记录数量=${backupData.callLogs.size}") - - // 执行备份 - val filePath = backupManager.backupToJson(backupData) - - // 验证文件路径 - assertNotNull(filePath, "备份文件路径不应为null") - - // 验证文件是否实际创建 - val backupFile = File(filePath) - assertTrue(backupFile.exists(), "备份文件应该存在") - assertTrue(backupFile.length() > 0, "备份文件不应为空") - - // 记录文件信息 - Timber.i("[Mobile] INFO [Test] 创建备份文件; Context: 文件路径=$filePath, 文件大小=${backupFile.length()}字节") - - // 清理测试生成的文件 - backupFile.delete() - - Timber.i("[Mobile] INFO [Test] backupToJson测试通过; Context: 成功在设备上创建备份文件") - } - - /** - * 测试完整备份流程 - */ - @Test - fun testExecuteBackup() { - // 记录测试开始 - Timber.i("[Mobile] INFO [Test] 测试完整备份流程; Context: Instrumented test on device") - - // 创建测试回调 - var callbackResult: Boolean? = null - var callbackMessage: String? = null - - // 执行备份(只本地备份,不上传) - backupManager.executeBackup(false) { success, message -> - callbackResult = success - callbackMessage = message - - // 记录回调结果 - Timber.i("[Mobile] INFO [Test] 备份回调; Context: success=$success, message=$message") - } - - // 等待异步操作完成 - Thread.sleep(2000) - - // 验证回调结果 - assertNotNull(callbackResult, "回调结果不应为null") - assertNotNull(callbackMessage, "回调消息不应为null") - assertEquals(true, callbackResult, "备份应成功完成") - - // 获取备份文件路径 - val filePath = callbackMessage?.let { - if (it.startsWith("本地备份成功:")) { - it.substringAfter("本地备份成功:").trim() - } else { - it.substringAfter("本地:").substringBefore("\n").trim() - } - } - - // 验证文件是否存在 - if (filePath != null) { - val backupFile = File(filePath) + fun testPerformBackup() = runBlocking { + val result = backupManager.performBackup( + hasSmsPermission = true, + hasCallLogPermission = true, + hasContactsPermission = true, + deviceInfo = "Test Device" + ) + + Timber.i("[Mobile] INFO [Test] 备份结果; Context: success=${result.success}, smsCount=${result.smsCount}, callLogCount=${result.callLogCount}") + + if (result.success) { + assertNotNull(result.filePath, "备份文件路径不应为null") + val backupFile = File(result.filePath!!) assertTrue(backupFile.exists(), "备份文件应该存在") assertTrue(backupFile.length() > 0, "备份文件不应为空") - - // 清理测试生成的文件 backupFile.delete() } - Timber.i("[Mobile] INFO [Test] executeBackup测试通过; Context: 成功执行完整备份流程") + Timber.i("[Mobile] INFO [Test] performBackup测试通过; Context: 成功在设备上执行备份") } @After fun tearDown() { Timber.i("[Mobile] INFO [Test] 完成BackupManager设备测试; Context: Test duration=${System.currentTimeMillis() - testStartTime}ms") - Timber.uprootAll() // 移除日志记录器 + Timber.uprootAll() } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt b/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt index fe668a4..14e7052 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt @@ -1,203 +1,49 @@ package imken.messagevault.mobile -import android.Manifest import android.content.Context -import android.content.pm.PackageManager import android.content.res.Configuration -import android.os.Build import android.os.Bundle -import android.provider.Settings +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Backup -import androidx.compose.material.icons.filled.MoreHoriz -import androidx.compose.material.icons.filled.Preview -import androidx.compose.material.icons.filled.Restore -import androidx.compose.material3.* +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.core.content.ContextCompat import androidx.lifecycle.viewmodel.compose.viewModel -import androidx.navigation.NavDestination.Companion.hierarchy -import androidx.navigation.NavGraph.Companion.findStartDestination -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController import imken.messagevault.mobile.config.Config +import imken.messagevault.mobile.ui.navigation.MessageVaultAppWithNavigation +import imken.messagevault.mobile.ui.navigation.NavigationItem +import imken.messagevault.mobile.ui.navigation.navigationItems +import imken.messagevault.mobile.ui.permission.PermissionHandler import imken.messagevault.mobile.ui.theme.MessageVaultTheme -import imken.messagevault.mobile.ui.screens.BackupScreen -import imken.messagevault.mobile.ui.screens.RestoreScreen -import imken.messagevault.mobile.ui.screens.PreviewScreen -import imken.messagevault.mobile.ui.screens.MoreScreen import imken.messagevault.mobile.ui.viewmodels.BackupViewModel import imken.messagevault.mobile.ui.viewmodels.RestoreViewModel -import timber.log.Timber -import java.util.* -import androidx.compose.runtime.collectAsState -import android.net.Uri -import imken.messagevault.mobile.data.RestoreManager -import imken.messagevault.mobile.api.ApiClient -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import imken.messagevault.mobile.model.BackupData -import java.io.InputStream -import imken.messagevault.mobile.models.BackupFile -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import androidx.compose.ui.graphics.vector.ImageVector -import android.util.Log -import android.content.Intent -import android.provider.Telephony -import android.app.AlertDialog -import android.widget.Toast -import androidx.fragment.app.FragmentContainerView -import androidx.lifecycle.ViewModelProvider -import android.app.role.RoleManager +import imken.messagevault.mobile.utils.DefaultSmsAppHelper import imken.messagevault.mobile.utils.PermissionUtils -import java.io.File -import java.text.SimpleDateFormat +import timber.log.Timber +import java.util.Locale -/** - * MessageVault主活动 - * - * 此活动是应用的主入口点,负责: - * 1. 请求必要的权限(短信、通话记录) - * 2. 显示主界面,提供备份和恢复功能 - * 3. 处理用户交互并调用相应的业务逻辑 - * - * UI采用Jetpack Compose和Material Design 3实现,遵循以下设计原则: - * - 简洁明了的界面布局 - * - 符合直觉的交互方式 - * - 适配不同屏幕尺寸 - * - 支持动态主题颜色(Android 12+) - * - * 参考资料: - * - Material Design 3: https://m3.material.io/ - */ class MainActivity : ComponentActivity() { - + companion object { private const val TAG = "MainActivity" - private const val DEFAULT_SMS_REQUEST_CODE = 1001 - private val REQUIRED_PERMISSIONS = arrayOf( - // 读取权限 - Manifest.permission.READ_SMS, - Manifest.permission.READ_CALL_LOG, - Manifest.permission.READ_CONTACTS, - - // 写入权限 - 恢复功能需要 - // 注意:Manifest.permission.WRITE_SMS 不是标准Android权限 - // 系统短信的写入使用 SEND_SMS 权限 - Manifest.permission.SEND_SMS, - Manifest.permission.WRITE_CALL_LOG, - Manifest.permission.WRITE_CONTACTS, - - // 存储权限 - Manifest.permission.WRITE_EXTERNAL_STORAGE - ) - } - - // 导航项定义 - sealed class NavigationItem(val route: String, val iconData: ImageVector, val labelResId: Int) { - object Backup : NavigationItem("backup", Icons.Filled.Backup, R.string.backup_tab) - object Restore : NavigationItem("restore", Icons.Filled.Restore, R.string.restore_tab) - object Preview : NavigationItem("preview", Icons.Filled.Preview, R.string.preview_tab) - object More : NavigationItem("more", Icons.Filled.MoreHoriz, R.string.more_tab) } - - // 获取所有导航项 - private val navigationItems = listOf( - NavigationItem.Backup, - NavigationItem.Restore, - NavigationItem.Preview, - NavigationItem.More - ) - - // 配置 + private lateinit var config: Config - private lateinit var restoreManager: RestoreManager - - // 恢复进度 - private val restoreProgress = MutableStateFlow(false) - - // 初始权限状态 + private lateinit var permissionHandler: PermissionHandler + private lateinit var defaultSmsAppHelper: DefaultSmsAppHelper + private var initialPermissionsChecked = false - - // 权限请求启动器 - private val requestPermissionLauncher = registerForActivityResult( - ActivityResultContracts.RequestMultiplePermissions() - ) { permissions -> - // 检查所有请求的权限是否都已授予 - val allGranted = permissions.entries.all { it.value } - if (allGranted) { - Timber.i("[Mobile] INFO [Permissions] 所有请求的权限已授予") - Toast.makeText(this, "所有权限已授予,可以继续操作", Toast.LENGTH_SHORT).show() - } else { - // 处理未授予的权限 - val deniedPermissions = permissions.filterValues { !it }.keys - Timber.w("[Mobile] WARN [Permissions] 部分权限被拒绝: $deniedPermissions") - - // 检查是否有被永久拒绝的权限,如果有则引导用户到设置页面手动授予 - if (deniedPermissions.any { shouldShowRequestPermissionRationale(it) }) { - // 显示权限说明对话框 - showPermissionRationaleDialog() - } else { - // 部分权限被永久拒绝,引导用户到设置页面 - PermissionUtils.openAppSettings(this) - Toast.makeText(this, "请在设置中手动授予权限", Toast.LENGTH_LONG).show() - } - } - } - - // 默认短信应用设置结果处理 - private val defaultSmsLauncher = registerForActivityResult( - ActivityResultContracts.StartActivityForResult() - ) { result -> - // 检查是否设置成功 - val isSmsAppNow = isDefaultSmsApp() - if (isSmsAppNow) { - // 更新SharedPreferences状态 - getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() - .putBoolean("is_default_sms_app", true) - .apply() - - // 获取当前RestoreViewModel - val restoreViewModel = ViewModelProvider(this, RestoreViewModel.Factory(this)) - .get(RestoreViewModel::class.java) - - // 通知ViewModel状态已变更 - restoreViewModel.notifyDefaultSmsAppChanged(true) - - // 记录结果并显示通知 - Timber.i("[Mobile] INFO [Permission] 已成功设置为默认短信应用; Context: ActivityResultLauncher回调") - Toast.makeText(this, "成功设置为默认短信应用,可以恢复短信", Toast.LENGTH_SHORT).show() - - // 处理后续操作 - handleDefaultSmsAppGranted() - } else { - // 如果设置失败,也要更新状态 - getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() - .putBoolean("is_default_sms_app", false) - .apply() - - Timber.w("[Mobile] WARN [Permission] 未能设置为默认短信应用; Context: 用户拒绝") - Toast.makeText(this, "需要设置为默认短信应用才能恢复短信", Toast.LENGTH_LONG).show() - } - } - + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - // 初始化日志系统 + if (Timber.forest().isEmpty()) { Timber.plant(object : Timber.DebugTree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { @@ -206,41 +52,33 @@ class MainActivity : ComponentActivity() { } }) } - - // 输出测试日志以确认日志系统工作正常 + Timber.d("[Mobile] DEBUG 日志系统初始化完成") Log.d("MessageVault", "主活动创建 - 直接Log测试") - - // 初始化配置 + config = Config.getInstance(this) - - // 初始化恢复管理器 - restoreManager = RestoreManager(this, config, ApiClient(config)) - - // 应用语言设置 + permissionHandler = PermissionHandler(this) + defaultSmsAppHelper = DefaultSmsAppHelper(this) + applyLanguage() - - // 设置Compose UI + setContent { MessageVaultTheme { - // 创建ViewModels val backupViewModel: BackupViewModel = viewModel( factory = BackupViewModel.Factory(this) ) - + val restoreViewModel: RestoreViewModel = viewModel( factory = RestoreViewModel.Factory(this) ) - - // 检查权限并通知ViewModels + if (!initialPermissionsChecked) { - val permissionsGranted = checkPermissions() + val permissionsGranted = permissionHandler.checkPermissions() backupViewModel.setPermissionsGranted(permissionsGranted) restoreViewModel.setPermissionsGranted(permissionsGranted) initialPermissionsChecked = true } - - // Surface容器使用背景色 + Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background @@ -253,526 +91,60 @@ class MainActivity : ComponentActivity() { } } } - + Timber.i("[Mobile] INFO [UI] 实现MD3 UI与底部导航; Context: 应用启动") } - - /** - * 应用语言设置 - */ + private fun applyLanguage() { val langCode = config.getLanguage() val locale = Locale(langCode) Locale.setDefault(locale) - + val configuration = Configuration(resources.configuration) configuration.setLocale(locale) createConfigurationContext(configuration) } - - /** - * 在配置变化时调用 - * 用于处理语言变化情况 - */ + override fun attachBaseContext(newBase: Context) { val config = Config.getInstance(newBase) val langCode = config.getLanguage() val locale = Locale(langCode) Locale.setDefault(locale) - + val configuration = Configuration(newBase.resources.configuration) configuration.setLocale(locale) val context = newBase.createConfigurationContext(configuration) - - super.attachBaseContext(context) - } - - /** - * 检查必要权限 - * - * @return 是否已授权所有必要权限 - */ - private fun checkPermissions(): Boolean { - // 对于API 29+,不需要WRITE_EXTERNAL_STORAGE权限 - val permissionsToCheck = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - arrayOf( - // 读取权限 - Manifest.permission.READ_SMS, - Manifest.permission.READ_CALL_LOG, - Manifest.permission.READ_CONTACTS, - - // 写入权限 - 恢复功能需要 - Manifest.permission.SEND_SMS, - Manifest.permission.WRITE_CALL_LOG, - Manifest.permission.WRITE_CONTACTS - ) - } else { - REQUIRED_PERMISSIONS - } - - val allPermissionsGranted = permissionsToCheck.all { - ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED - } - - if (allPermissionsGranted) { - Timber.i("[Mobile] INFO [Permission] 已有所有必要权限; Context: 启动检查") - } else { - Timber.i("[Mobile] INFO [Permission] 请求权限; Context: 启动检查") - requestPermissionLauncher.launch(permissionsToCheck) - } - - return allPermissionsGranted - } - private fun handleRestore(backupFile: BackupFile) { - Timber.d("[Mobile] DEBUG [Restore] 开始恢复流程...") - - // ...existing code... - - // 替换所有Log调用为Timber - Timber.d("[Mobile] DEBUG [Restore] 找到备份文件: $backupFile") - - // ...existing code... - - // 使用更安全的方式获取设备标识符 - val context = this - val deviceId = Settings.Secure.getString(context.contentResolver, - Settings.Secure.ANDROID_ID) ?: "unknown" - - // ...existing code... + super.attachBaseContext(context) } - /** - * 启动恢复流程 - * - * @param backupFile 要恢复的备份文件 - */ - private fun startRestoreProcess(backupFile: BackupFile) { - // 如果有短信需要恢复,检查是否需要设置为默认短信应用 - // 注意:这里需要检查备份文件中是否包含短信数据 - val restoreViewModel = ViewModelProvider(this, RestoreViewModel.Factory(this)) - .get(RestoreViewModel::class.java) - - // 直接使用RestoreViewModel恢复备份文件 - restoreViewModel.restoreBackupFile(backupFile) - } - - /** - * 检查应用是否为默认短信应用 - */ - private fun isDefaultSmsApp(): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - // 优先使用RoleManager(Android 10+) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - try { - val roleManager = getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager - if (roleManager != null) { - val hasRole = roleManager.isRoleHeld(android.app.role.RoleManager.ROLE_SMS) - Timber.d("[Mobile] DEBUG [Permission] RoleManager角色检查结果: $hasRole") - if (hasRole) { - // 如果RoleManager报告应用持有SMS角色,记录状态并返回true - getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() - .putBoolean("is_default_sms_app", true) - .apply() - return true - } - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Permission] 检查RoleManager时出错") - } - } - - // 传统方法 - val defaultSmsPackage = Telephony.Sms.getDefaultSmsPackage(this) - val isDefault = packageName == defaultSmsPackage - - Timber.d("[Mobile] DEBUG [Permission] 默认短信应用检查: 系统报告默认包名=$defaultSmsPackage, 当前=${packageName}, 是默认=$isDefault") - - // 保存检测结果到SharedPreferences - getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() - .putBoolean("is_default_sms_app", isDefault) - .apply() - - return isDefault - } - return true - } - - /** - * 显示设置默认短信应用对话框 - */ - private fun showDefaultSmsAppDialog() { - val builder = AlertDialog.Builder(this) - builder.setTitle(R.string.permission_required) - .setMessage("恢复短信需要临时将此应用设置为默认短信应用。\n\n恢复完成后,您可以将其改回原来的应用。\n\n在接下来的系统界面中选择\"是\",将信驿云储设为默认短信应用,以开始恢复任务。") - .setPositiveButton(R.string.settings) { _, _ -> - requestDefaultSmsApp() - } - .setNegativeButton(R.string.cancel) { dialog, _ -> - dialog.dismiss() - } - .create() - .show() - } - - /** - * 请求设置为默认短信应用 - * - * 此方法用于向系统请求将应用设置为默认短信应用,是恢复短信功能的必要前提。 - * - * 实现策略: - * - 对于Android 10(Q)及以上版本,优先使用现代的RoleManager API - * - 对于Android 4.4-9版本,使用传统的Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT方法 - * - 对于更低版本,不需要此权限(Android 4.4以下没有默认短信应用的概念) - * - * 异常处理: - * - 如果RoleManager不可用或请求失败,会自动降级到传统方法 - * - 完整的错误日志记录,便于排查问题 - * - * 流程: - * 1. 此方法启动系统的权限请求界面 - * 2. 用户做出选择(同意或拒绝) - * 3. 系统结果返回到ActivityResultLauncher回调 - * 4. 在回调中处理用户的选择结果 - * 5. 如果用户同意,继续恢复流程;如果拒绝,提示用户并终止恢复 - */ - fun requestDefaultSmsApp() { - Timber.d("[Mobile] DEBUG [Permission] 开始请求默认短信应用权限,Android版本: ${Build.VERSION.SDK_INT}") - var requestSent = false - - try { - // 首先检查是否已经是默认短信应用 - if (isDefaultSmsApp()) { - Timber.i("[Mobile] INFO [Permission] 应用已经是默认短信应用,直接处理") - handleDefaultSmsAppGranted() - return - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - // 使用RoleManager(Android 10及以上) - val roleManager = getSystemService(Context.ROLE_SERVICE) as? RoleManager - - if (roleManager != null) { - // 检查应用是否可以请求短信角色 - if (roleManager.isRoleAvailable(RoleManager.ROLE_SMS)) { - try { - // 创建请求角色的意图 - val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) - - // 使用ActivityResultLauncher发起请求 - defaultSmsLauncher.launch(intent) - - // 记录详细日志 - val message = "使用RoleManager请求SMS角色,Android版本: ${Build.VERSION.SDK_INT}" - Timber.i("[Mobile] INFO [Permission] $message; Context: 用户操作") - logToFile(message) - requestSent = true - } catch (e: Exception) { - val errorMsg = "启动RoleManager请求失败: ${e.message}" - Timber.e(e, "[Mobile] ERROR [Permission] $errorMsg") - logToFile(errorMsg) - // 异常会继续处理,尝试传统方法 - } - } else { - val warningMsg = "此设备的RoleManager不支持SMS角色 (isRoleAvailable返回false)" - Timber.w("[Mobile] WARN [Permission] $warningMsg") - logToFile(warningMsg) - } - } else { - val warningMsg = "无法获取RoleManager服务 (getSystemService返回null)" - Timber.w("[Mobile] WARN [Permission] $warningMsg") - logToFile(warningMsg) - } - } - - // 如果RoleManager方法未成功,使用传统方法 - if (!requestSent) { - requestDefaultSmsAppLegacy() - } - } catch (e: Exception) { - val errorMsg = "请求默认短信应用时发生异常: ${e.message}" - Timber.e(e, "[Mobile] ERROR [Permission] $errorMsg") - logToFile(errorMsg) - - // 如果出现异常,尝试使用传统方法 - if (!requestSent) { - requestDefaultSmsAppLegacy() - } - } - } - - /** - * 记录信息到日志文件 - */ - private fun logToFile(message: String) { - try { - val logDir = File(filesDir, "logs") - if (!logDir.exists()) { - logDir.mkdirs() - } - - val logFile = File(logDir, "ui-2025-05-13.log") - val timestamp = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()).format(Date()) - val logEntry = "$timestamp - $message\n" - - logFile.appendText(logEntry) - - // 同时添加到assets中的日志文件,方便调试 - val assetLogDir = File(applicationContext.getExternalFilesDir(null), "logs") - if (!assetLogDir.exists()) { - assetLogDir.mkdirs() - } - val assetLogFile = File(assetLogDir, "ui-2025-05-13.log") - assetLogFile.appendText(logEntry) - - // 如果是修复日志,添加特殊标记 - if (message.contains("Fixed SMS role request") || message.contains("Fix SMS role request")) { - assetLogFile.appendText("$timestamp - Fixed SMS role request dialog for Android 16\n") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Log] 写入日志文件失败: ${e.message}") - } - } - - /** - * 使用旧方法请求设置为默认短信应用(Android 4.4-9) - */ - private fun requestDefaultSmsAppLegacy() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - try { - val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName) - - // 使用ActivityResultLauncher代替startActivityForResult - defaultSmsLauncher.launch(intent) - - Timber.d("[Mobile] DEBUG [Permission] 请求成为默认短信应用 (旧API); Context: 用户操作") - logToFile("使用传统方法请求设置为默认短信应用") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Permission] 使用传统方法请求默认短信应用失败: ${e.message}") - logToFile("使用传统方法请求默认短信应用失败: ${e.message}") - - // 如果传统方法也失败,尝试打开设置页面 - Toast.makeText( - this, - "无法自动请求设置默认短信应用,请手动设置", - Toast.LENGTH_LONG - ).show() - } - } - } - - /** - * 显示恢复默认短信应用对话框 - */ - private fun showRestoreDefaultSmsAppDialog() { - val builder = AlertDialog.Builder(this) - builder.setTitle("恢复默认短信应用") - .setMessage("短信恢复已完成。现在您可以将默认短信应用改回原来的应用,也可以稍后再改回。\n\n如果您需要继续恢复其他备份,建议暂时保持本应用为默认短信应用。") - .setPositiveButton("现在改回") { _, _ -> - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - // 使用RoleManager(Android 10及以上) - val roleManager = getSystemService(Context.ROLE_SERVICE) as RoleManager - val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) - startActivity(intent) - } else { - // 使用旧API - val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, "") - startActivity(intent) - } - } - .setNegativeButton("稍后改回") { dialog, _ -> - dialog.dismiss() - } - .create() - .show() - } - - /** - * 显示权限说明对话框 - */ - private fun showPermissionRationaleDialog() { - // 在实际应用中,这里应该显示一个对话框,解释为什么应用需要这些权限 - Toast.makeText(this, "需要这些权限才能备份和恢复您的短信和通话记录", Toast.LENGTH_LONG).show() - } - - /** - * 继续恢复流程 - */ - private fun continueRestoreProcess() { - // 在这里可以继续恢复流程,例如调用RestoreManager的方法 - Timber.d("[Mobile] DEBUG [Restore] 继续恢复流程") - } - - /** - * 在onResume中检查权限状态 - */ override fun onResume() { super.onResume() - // 检查是否有权限更新,例如用户可能在设置中手动授予了权限 if (PermissionUtils.checkAllRequiredPermissions(this)) { Timber.d("[Mobile] DEBUG [Permissions] 所有需要的权限已授予") } } - - // 不要忘记为APIClient添加一个占位符 - private val apiClient by lazy { - object {} + + fun requestDefaultSmsApp() { + defaultSmsAppHelper.requestDefaultSmsApp() } - /** - * 处理已获得默认短信应用权限的情况 - */ - private fun handleDefaultSmsAppGranted() { - // 保存状态到SharedPreferences供其他组件使用 - getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() - .putBoolean("is_default_sms_app", true) - .apply() - - // 获取当前屏幕上的RestoreViewModel,执行恢复操作 - val restoreViewModel = ViewModelProvider(this, RestoreViewModel.Factory(this)) - .get(RestoreViewModel::class.java) - - // 强制更新RestoreViewModel的默认短信应用状态 - restoreViewModel.notifyDefaultSmsAppChanged(true) - - // 获取选中的备份文件并执行恢复 - val selectedBackupFile = restoreViewModel.selectedBackupFile.value - if (selectedBackupFile != null) { - Timber.i("[Mobile] INFO [Restore] 开始恢复备份; Context: 已设置为默认短信应用") - restoreViewModel.restoreBackupFile(selectedBackupFile) - } else { - Timber.w("[Mobile] WARN [Restore] 没有选中备份文件; Context: 已设置为默认短信应用但无备份可恢复") - Toast.makeText(this, "没有选中备份文件,请先选择要恢复的备份", Toast.LENGTH_LONG).show() - } - - // 记录修复信息到日志 - logToFile("Fixed SMS role request dialog for Android 16") + fun isDefaultSmsApp(): Boolean { + return defaultSmsAppHelper.isDefaultSmsApp() } -} -/** - * 主应用界面组合函数(带底部导航) - * - * 显示应用的主界面,包括底部导航栏和各个功能页面 - * 遵循Material Design 3设计规范 - * - * @param backupViewModel 备份视图模型 - * @param restoreViewModel 恢复视图模型 - * @param navigationItems 导航项列表 - */ -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun MessageVaultAppWithNavigation( - backupViewModel: BackupViewModel, - restoreViewModel: RestoreViewModel, - navigationItems: List -) { - val navController = rememberNavController() - - Scaffold( - topBar = { - CenterAlignedTopAppBar( - title = { - Text( - text = stringResource(id = R.string.app_title), - style = MaterialTheme.typography.titleLarge - ) - } - ) - }, - bottomBar = { - NavigationBar { - val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentDestination = navBackStackEntry?.destination - - navigationItems.forEach { item -> - NavigationBarItem( - icon = { Icon(item.iconData, contentDescription = null) }, - label = { Text(stringResource(item.labelResId)) }, - selected = currentDestination?.hierarchy?.any { it.route == item.route } == true, - onClick = { - navController.navigate(item.route) { - // 防止多次点击创建多个页面 - popUpTo(navController.graph.findStartDestination().id) { - saveState = true - } - // 避免重复导航到同一目的地 - launchSingleTop = true - // 恢复状态 - restoreState = true - } - } - ) - } - } - } - ) { innerPadding -> - NavHost( - navController = navController, - startDestination = MainActivity.NavigationItem.Backup.route, - modifier = Modifier.padding(innerPadding) - ) { - composable(MainActivity.NavigationItem.Backup.route) { - BackupScreen( - permissionsGranted = backupViewModel.getPermissionsGranted(), - isOperating = backupViewModel.isOperating(), - backupStatus = backupViewModel.getBackupStatus(), - onBackupClick = { backupViewModel.startBackup() } - ) - } - composable(MainActivity.NavigationItem.Restore.route) { - // 使用collectAsState收集Flow状态 - val backupFiles by restoreViewModel.backupFiles.collectAsState(initial = emptyList()) - val selectedBackupFile by restoreViewModel.selectedBackupFile.collectAsState(initial = null) - - RestoreScreen( - backupFiles = backupFiles, - isOperating = restoreViewModel.isOperating.value, - restoreStatus = restoreViewModel.restoreStatus.value, - onRestoreClick = { backupFile -> - restoreViewModel.restoreBackupFile(backupFile) - }, - onBackupItemClick = { backupFile -> - restoreViewModel.selectBackupFile(backupFile) - }, - selectedBackupFile = selectedBackupFile, - viewModel = restoreViewModel - ) - } - composable(MainActivity.NavigationItem.Preview.route) { - PreviewScreen(permissionsGranted = backupViewModel.getPermissionsGranted()) - } - composable(MainActivity.NavigationItem.More.route) { - MoreScreen( - onNavigateToRestore = { - navController.navigate(MainActivity.NavigationItem.Restore.route) { - // 防止多次点击创建多个页面 - popUpTo(navController.graph.findStartDestination().id) { - saveState = true - } - // 避免重复导航到同一目的地 - launchSingleTop = true - // 恢复状态 - restoreState = true - } - } - ) - } - } + fun showDefaultSmsAppDialog() { + defaultSmsAppHelper.showDefaultSmsAppDialog() + } + + fun showRestoreDefaultSmsAppDialog() { + defaultSmsAppHelper.showRestoreDefaultSmsAppDialog() } } -/** - * 预览函数 - * - * 提供界面预览,用于开发时查看UI效果 - */ @Preview(showBackground = true) @Composable fun MessageVaultAppPreview() { - // 注意:预览中无法使用真实的ViewModels,此处仅为布局预览 MessageVaultTheme { Surface( modifier = Modifier.fillMaxSize(), @@ -783,14 +155,14 @@ fun MessageVaultAppPreview() { horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { - Text( + androidx.compose.material3.Text( text = stringResource(id = R.string.app_title), style = MaterialTheme.typography.headlineLarge ) - + Spacer(modifier = Modifier.height(16.dp)) - - Text( + + androidx.compose.material3.Text( text = stringResource(id = R.string.app_description), style = MaterialTheme.typography.bodyLarge ) @@ -798,4 +170,3 @@ fun MessageVaultAppPreview() { } } } - diff --git a/android/app/src/main/java/imken/messagevault/mobile/api/ApiClient.kt b/android/app/src/main/java/imken/messagevault/mobile/api/ApiClient.kt index 8703232..9331ceb 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/api/ApiClient.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/api/ApiClient.kt @@ -1,7 +1,7 @@ package imken.messagevault.mobile.api import imken.messagevault.mobile.config.Config -import imken.messagevault.mobile.data.BackupFile +import imken.messagevault.mobile.models.BackupFile import timber.log.Timber /** diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/ApiClient.kt b/android/app/src/main/java/imken/messagevault/mobile/data/ApiClient.kt deleted file mode 100644 index 146d6d1..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/ApiClient.kt +++ /dev/null @@ -1,16 +0,0 @@ -package imken.messagevault.mobile.data - -/** - * API客户端类,用于处理网络请求 - */ -class ApiClient { - // 实现API通信功能 - - // 获取备份文件列表 - fun getBackupFiles(): List { - // 实现从服务器获取备份文件列表 - return emptyList() // 临时返回空列表 - } - - // 其他API相关方法 -} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/BackupFile.kt b/android/app/src/main/java/imken/messagevault/mobile/data/BackupFile.kt deleted file mode 100644 index 488fda3..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/BackupFile.kt +++ /dev/null @@ -1,4 +0,0 @@ -package imken.messagevault.mobile.data - -// 使用 data.models 包中的 BackupFile 类 -typealias BackupFile = imken.messagevault.mobile.data.models.BackupFile diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/BackupManager.kt b/android/app/src/main/java/imken/messagevault/mobile/data/BackupManager.kt deleted file mode 100644 index 7702e7d..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/BackupManager.kt +++ /dev/null @@ -1,1070 +0,0 @@ -package imken.messagevault.mobile.data - -import android.content.ContentResolver -import android.content.Context -import android.database.Cursor -import android.net.Uri -import android.os.Build -import android.provider.CallLog.Calls -import android.provider.ContactsContract -import android.provider.Telephony -import com.google.gson.FieldNamingPolicy -import com.google.gson.GsonBuilder -import imken.messagevault.mobile.model.BackupData -import imken.messagevault.mobile.model.Contact -import imken.messagevault.mobile.model.CallLog -import imken.messagevault.mobile.model.Message -import timber.log.Timber -import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream -import java.io.IOException -import java.io.ObjectInputStream -import java.io.ObjectOutputStream -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale -import java.util.UUID - -/** - * 备份管理器 - * - * 负责执行备份操作,包括短信、通话记录和联系人的备份 - */ -class BackupManager(private val context: Context) { - - // 使用优化的Gson配置,减小JSON文件大小 - private val gson = GsonBuilder() - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) - // .excludeFieldsWithoutExposeAnnotation() // 移除此配置,因为可能导致序列化问题 - .serializeNulls() // 允许序列化null值 - .disableHtmlEscaping() // 不转义HTML字符 - .setLenient() // 使用宽松模式解析 - .setPrettyPrinting() // 启用美化打印,使JSON输出格式化 - .create() - - /** - * 执行备份操作 - * - * @return 备份结果,包含备份的短信、通话记录和联系人数量 - */ - suspend fun performBackup(): BackupResult { - try { - Timber.i("[Mobile] INFO [Backup] 开始备份; Context: 用户请求") - - // 检查是否有必要的权限 - val hasSmsPermission = context.checkSelfPermission(android.Manifest.permission.READ_SMS) == android.content.pm.PackageManager.PERMISSION_GRANTED - val hasCallLogPermission = context.checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) == android.content.pm.PackageManager.PERMISSION_GRANTED - val hasContactsPermission = context.checkSelfPermission(android.Manifest.permission.READ_CONTACTS) == android.content.pm.PackageManager.PERMISSION_GRANTED - - if (!hasSmsPermission && !hasCallLogPermission && !hasContactsPermission) { - Timber.e("[Mobile] ERROR [Backup] 备份失败: 没有任何所需权限") - return BackupResult( - timestamp = Date(), - messagesCount = 0, - callLogsCount = 0, - contactsCount = 0, - backupFilePath = null, - errorMessage = "备份失败: 没有任何所需权限" - ) - } - - // 读取短信 - val messages = if (hasSmsPermission) readMessages() else null - val messagesCount = messages?.size ?: 0 - Timber.i("[Mobile] INFO [Backup] 读取到 $messagesCount 条短信") - - // 读取通话记录 - val callLogs = if (hasCallLogPermission) readCallLogs() else null - val callLogsCount = callLogs?.size ?: 0 - Timber.i("[Mobile] INFO [Backup] 读取到 $callLogsCount 条通话记录") - - // 读取联系人 - val contacts = if (hasContactsPermission) readContacts() else null - val contactsCount = contacts?.size ?: 0 - Timber.i("[Mobile] INFO [Backup] 读取到 $contactsCount 个联系人") - - // 检查是否有任何数据可以备份 - if (messagesCount == 0 && callLogsCount == 0 && contactsCount == 0) { - Timber.w("[Mobile] WARN [Backup] 没有找到任何数据可以备份") - return BackupResult( - timestamp = Date(), - messagesCount = 0, - callLogsCount = 0, - contactsCount = 0, - backupFilePath = null, - errorMessage = "没有找到任何数据可以备份" - ) - } - - // 创建备份数据对象 - val backupData = BackupData( - messages = messages, - callLogs = callLogs, - contacts = contacts, - timestamp = System.currentTimeMillis(), - deviceInfo = "${Build.MANUFACTURER} ${Build.MODEL}" - ) - - // 保存到本地文件 - val backupFile = createLocalBackup(backupData) - - if (backupFile == null) { - Timber.e("[Mobile] ERROR [Backup] 创建备份文件失败") - return BackupResult( - timestamp = Date(), - messagesCount = messagesCount, - callLogsCount = callLogsCount, - contactsCount = contactsCount, - backupFilePath = null, - errorMessage = "创建备份文件失败" - ) - } - - Timber.i("[Mobile] INFO [Backup] 备份完成; Context: 保存至 ${backupFile.absolutePath}") - - // 返回备份结果 - return BackupResult( - timestamp = Date(), - messagesCount = messagesCount, - callLogsCount = callLogsCount, - contactsCount = contactsCount, - backupFilePath = backupFile.absolutePath - ) - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 备份过程出现异常; Context: ${e.message}") - return BackupResult( - timestamp = Date(), - messagesCount = 0, - callLogsCount = 0, - contactsCount = 0, - backupFilePath = null, - errorMessage = "备份过程出现异常: ${e.message}" - ) - } - } - - /** - * 创建本地备份文件 - */ - private fun createLocalBackup(backupData: BackupData): File? { - try { - // 创建备份目录 - val backupDir = File(context.getExternalFilesDir(null), "backups") - if (!backupDir.exists()) { - backupDir.mkdirs() - } - - // 生成友好的文件名而不是使用base64编码 - val fileName = generateUserFriendlyFileName() - - // 创建备份文件 - val backupFile = File(backupDir, fileName) - - // 将备份数据转换为JSON前单独记录各部分数据的状态 - Timber.d("[Mobile] DEBUG [Backup] 数据准备情况: 短信=${backupData.messages?.size ?: 0}, 通话记录=${backupData.callLogs?.size ?: 0}, 联系人=${backupData.contacts?.size ?: 0}, 设备信息=${backupData.deviceInfo}") - - try { - // 尝试分段序列化,先只序列化基本字段 - val testData = BackupData( - messages = null, - callLogs = null, - contacts = null, - timestamp = backupData.timestamp, - deviceInfo = backupData.deviceInfo - ) - - // 测试序列化基本结构 - val testJson = gson.toJson(testData) - if (testJson.isNullOrBlank() || testJson == "{}" || testJson == "null") { - Timber.e("[Mobile] ERROR [Backup] 基本数据结构序列化失败") - } else { - Timber.d("[Mobile] DEBUG [Backup] 基本数据结构序列化成功: $testJson") - } - - // 逐步添加数据进行序列化测试 - try { - val messagesJson = gson.toJson(backupData.messages) - Timber.d("[Mobile] DEBUG [Backup] 短信JSON长度: ${messagesJson.length}, 前100个字符: ${messagesJson.take(100)}") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 短信数据序列化失败: ${e.message}") - } - - try { - val callLogsJson = gson.toJson(backupData.callLogs) - Timber.d("[Mobile] DEBUG [Backup] 通话记录JSON长度: ${callLogsJson.length}, 前100个字符: ${callLogsJson.take(100)}") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 通话记录数据序列化失败: ${e.message}") - } - - try { - val contactsJson = gson.toJson(backupData.contacts) - Timber.d("[Mobile] DEBUG [Backup] 联系人JSON长度: ${contactsJson.length}, 前100个字符: ${contactsJson.take(100)}") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 联系人数据序列化失败: ${e.message}") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 分段序列化测试过程中出现异常: ${e.message}") - } - - // 尝试创建一个清理过的备份数据对象 - // 检查联系人数据是否有问题 - var cleanedContacts = backupData.contacts?.map { contact -> - // 创建一个具有基本字段的新联系人对象 - Contact( - id = contact.id, - name = contact.name.replace(Regex("[^\\p{Print}]"), ""), // 移除不可打印字符 - phoneNumbers = contact.phoneNumbers.map { it.replace(Regex("[^\\p{Print}]"), "") }.toMutableList(), - emails = contact.emails?.map { it.replace(Regex("[^\\p{Print}]"), "") }, - note = contact.note?.replace(Regex("[^\\p{Print}]"), ""), - addresses = contact.addresses?.map { - Contact.Address( - type = it.type.replace(Regex("[^\\p{Print}]"), ""), - value = it.value.replace(Regex("[^\\p{Print}]"), "") - ) - }, - groups = contact.groups?.map { it.replace(Regex("[^\\p{Print}]"), "") } - ) - } - - // 清理消息数据 - var cleanedMessages = backupData.messages?.map { message -> - try { - Message( - id = message.id, - address = message.address.replace(Regex("[^\\p{Print}]"), ""), - body = message.body?.replace(Regex("[^\\p{Print}]"), ""), - date = message.date, - type = message.type, - readState = message.readState, - messageStatus = message.messageStatus, - threadId = message.threadId - ) - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 清理短信数据时出错: ${e.message}") - null - } - }?.filterNotNull() - - // 清理通话记录数据 - var cleanedCallLogs = backupData.callLogs?.map { callLog -> - try { - CallLog( - id = callLog.id, - number = callLog.number.replace(Regex("[^\\p{Print}]"), ""), - type = callLog.type, - date = callLog.date, - duration = callLog.duration, - contact = callLog.contact?.replace(Regex("[^\\p{Print}]"), "") - ) - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 清理通话记录数据时出错: ${e.message}") - null - } - }?.filterNotNull() - - // 创建清理后的备份数据 - val cleanedBackupData = BackupData( - messages = cleanedMessages, - callLogs = cleanedCallLogs, - contacts = cleanedContacts, - timestamp = backupData.timestamp, - deviceInfo = backupData.deviceInfo - ) - - // 完整序列化 - try { - Timber.d("[Mobile] DEBUG [Backup] 尝试使用清理后的数据进行序列化") - - // 先创建一个超简化的备份数据对象,仅包含基本信息 - val minimalBackupData = BackupData( - messages = emptyList(), - callLogs = emptyList(), - contacts = emptyList(), - timestamp = cleanedBackupData.timestamp, - deviceInfo = cleanedBackupData.deviceInfo - ) - - // 测试序列化最小数据 - val minimalJson = gson.toJson(minimalBackupData) - if (minimalJson.isNullOrBlank() || minimalJson == "{}" || minimalJson == "null") { - Timber.e("[Mobile] ERROR [Backup] 最小数据结构序列化失败,这表明Gson配置有问题") - return null - } - - Timber.d("[Mobile] DEBUG [Backup] 最小数据序列化成功: $minimalJson") - - // 创建一个可能最终使用的数据结构 - var finalMessages = cleanedMessages - var finalCallLogs = cleanedCallLogs - var finalContacts = cleanedContacts - - // 尝试序列化短信数据 - if (!cleanedMessages.isNullOrEmpty()) { - try { - val testMessagesJson = gson.toJson(cleanedMessages) - Timber.d("[Mobile] DEBUG [Backup] 短信序列化测试成功,大小: ${testMessagesJson.length} 字节") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 短信数据序列化失败,使用空列表: ${e.message}") - finalMessages = emptyList() - } - } - - // 尝试序列化通话记录数据 - if (!cleanedCallLogs.isNullOrEmpty()) { - try { - val testCallLogsJson = gson.toJson(cleanedCallLogs) - Timber.d("[Mobile] DEBUG [Backup] 通话记录序列化测试成功,大小: ${testCallLogsJson.length} 字节") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 通话记录数据序列化失败,使用空列表: ${e.message}") - finalCallLogs = emptyList() - } - } - - // 尝试序列化联系人数据 - if (!cleanedContacts.isNullOrEmpty()) { - try { - val testContactsJson = gson.toJson(cleanedContacts) - Timber.d("[Mobile] DEBUG [Backup] 联系人序列化测试成功,大小: ${testContactsJson.length} 字节") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 联系人数据序列化失败,使用空列表: ${e.message}") - finalContacts = emptyList() - } - } - - // 创建最终备份数据 - val finalBackupData = BackupData( - messages = finalMessages, - callLogs = finalCallLogs, - contacts = finalContacts, - timestamp = cleanedBackupData.timestamp, - deviceInfo = cleanedBackupData.deviceInfo - ) - - // 创建完整的JSON数据 - val jsonString: String - try { - jsonString = gson.toJson(finalBackupData) - - // 验证JSON数据不为空且格式正确 - if (jsonString.isBlank() || jsonString == "{}" || jsonString == "null") { - Timber.e("[Mobile] ERROR [Backup] 创建的备份数据为空或格式无效") - return null - } - - // 尝试解析JSON以验证格式有效 - gson.fromJson(jsonString, BackupData::class.java) - Timber.d("[Mobile] DEBUG [Backup] JSON格式验证成功") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] JSON序列化或格式验证失败: ${e.message}") - return null - } - - // 记录数据大小信息 - val jsonBytes = jsonString.toByteArray(Charsets.UTF_8) - Timber.d("[Mobile] DEBUG [Backup] JSON数据大小: ${jsonBytes.size} 字节") - - // 如果文件太大(超过10MB),尝试仅保存部分数据 - var finalJsonString = jsonString - if (jsonBytes.size > 10 * 1024 * 1024) { - Timber.w("[Mobile] WARN [Backup] JSON数据超过10MB,尝试减少数据量") - - // 创建一个精简版的备份数据(限制每种类型最多500条记录) - val limitedBackupData = BackupData( - messages = finalMessages?.take(500), - callLogs = finalCallLogs?.take(500), - contacts = finalContacts?.take(500), - timestamp = cleanedBackupData.timestamp, - deviceInfo = "${cleanedBackupData.deviceInfo} (数据已精简,原始数据: ${finalMessages?.size ?: 0}条短信, ${finalCallLogs?.size ?: 0}条通话记录, ${finalContacts?.size ?: 0}个联系人)" - ) - - finalJsonString = gson.toJson(limitedBackupData) - Timber.d("[Mobile] DEBUG [Backup] 精简后的JSON数据大小: ${finalJsonString.toByteArray(Charsets.UTF_8).size} 字节") - } - - // 将备份数据写入文件 - try { - backupFile.writeText(finalJsonString) - Timber.d("[Mobile] DEBUG [Backup] 成功将数据写入文件") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 写入文件失败: ${e.message}") - return null - } - - // 验证写入的文件大小 - if (!backupFile.exists() || backupFile.length() <= 10) { // 空的JSON至少有"{}"两个字符 - Timber.e("[Mobile] ERROR [Backup] 创建的备份文件为空或过小: ${backupFile.length()} 字节") - backupFile.delete() // 删除无效文件 - return null - } - - Timber.i("[Mobile] INFO [Backup] 成功创建备份文件: ${backupFile.absolutePath}, 大小: ${backupFile.length()} 字节") - return backupFile - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] JSON序列化过程中出现异常: ${e.message}") - return null - } - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 创建本地备份文件失败; Context: ${e.message}") - return null - } - } - - /** - * 生成用户友好的文件名 - * 格式: MessageVault_设备名_yyyy-MM-dd_HH-mm.json - */ - private fun generateUserFriendlyFileName(deviceName: String? = null): String { - val dateFormat = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault()) - val timestamp = dateFormat.format(Date()) - val device = deviceName ?: Build.MODEL.replace(" ", "_") - - return "MessageVault_${device}_${timestamp}.json" - } - - private fun readMessages(): List? { - val messages = mutableListOf() - - try { - // 检查权限 - val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_SMS) - if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { - Timber.e("[Mobile] ERROR [Backup] 备份短信失败: 没有 READ_SMS 权限") - return null - } - - Timber.d("[Mobile] DEBUG [Backup] 开始读取短信...") - - // 查询短信内容提供者 - val uri = android.provider.Telephony.Sms.CONTENT_URI - val projection = arrayOf( - android.provider.Telephony.Sms._ID, - android.provider.Telephony.Sms.ADDRESS, - android.provider.Telephony.Sms.BODY, - android.provider.Telephony.Sms.DATE, - android.provider.Telephony.Sms.TYPE, - android.provider.Telephony.Sms.READ, - android.provider.Telephony.Sms.STATUS - ) - val sortOrder = "${android.provider.Telephony.Sms.DATE} DESC" - - context.contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> - - Timber.d("[Mobile] DEBUG [Backup] 找到 ${cursor.count} 条短信") - - val idColumn = cursor.getColumnIndex(android.provider.Telephony.Sms._ID) - val addressColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.ADDRESS) - val bodyColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.BODY) - val dateColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.DATE) - val typeColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.TYPE) - val readColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.READ) - val statusColumn = cursor.getColumnIndex(android.provider.Telephony.Sms.STATUS) - - while (cursor.moveToNext()) { - val id = if (idColumn != -1) cursor.getLong(idColumn) else 0 - - // 获取原始地址值 - val originalAddress = if (addressColumn != -1) cursor.getString(addressColumn) else "" - - // 规范化地址(电话号码) - val normalizedAddress = if (originalAddress.isNotBlank()) { - val normalized = imken.messagevault.mobile.utils.PhoneNumberUtils.normalizePhoneNumber(originalAddress) - // 如果规范化后的地址与原地址不同,记录日志 - if (normalized != originalAddress) { - Timber.d("[Mobile] DEBUG [Backup] 短信地址已规范化: $originalAddress -> $normalized") - } - normalized - } else { - originalAddress - } - - val body = if (bodyColumn != -1) cursor.getString(bodyColumn) else "" - val date = if (dateColumn != -1) cursor.getLong(dateColumn) else 0 - val type = if (typeColumn != -1) cursor.getInt(typeColumn) else 0 - val read = if (readColumn != -1) cursor.getInt(readColumn) else 0 - val status = if (statusColumn != -1) cursor.getInt(statusColumn) else 0 - - val message = imken.messagevault.mobile.model.Message( - id = id, - address = normalizedAddress, - body = body, - date = date, - type = type, - readState = read, - messageStatus = status - ) - - messages.add(message) - } - } ?: run { - Timber.e("[Mobile] ERROR [Backup] 备份短信失败: 无法查询短信内容提供者") - return null - } - - Timber.i("[Mobile] INFO [Backup] 成功读取 ${messages.size} 条短信") - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 备份短信异常: ${e.message}") - return null - } - - return messages - } - - private fun readCallLogs(): List? { - val callLogs = mutableListOf() - - try { - // 检查权限 - val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) - if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { - Timber.e("[Mobile] ERROR [Backup] 备份通话记录失败: 没有 READ_CALL_LOG 权限") - return null - } - - Timber.d("[Mobile] DEBUG [Backup] 开始读取通话记录...") - - // 查询通话记录 - val uri = android.provider.CallLog.Calls.CONTENT_URI - val projection = arrayOf( - android.provider.CallLog.Calls._ID, - android.provider.CallLog.Calls.NUMBER, - android.provider.CallLog.Calls.CACHED_NAME, - android.provider.CallLog.Calls.DATE, - android.provider.CallLog.Calls.DURATION, - android.provider.CallLog.Calls.TYPE - ) - val sortOrder = "${android.provider.CallLog.Calls.DATE} DESC" - - // 使用分批查询减轻内存压力,每批100条记录 - val timeRanges = generateTimeRanges() - var totalCallLogs = 0 - - for (range in timeRanges) { - val selection = "${android.provider.CallLog.Calls.DATE} >= ? AND ${android.provider.CallLog.Calls.DATE} <= ?" - val selectionArgs = arrayOf(range.first.toString(), range.second.toString()) - - Timber.d("[Mobile] DEBUG [Backup] 查询时间范围: ${range.first} 到 ${range.second}") - - try { - context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)?.use { cursor -> - totalCallLogs += cursor.count - - val idColumn = cursor.getColumnIndex(android.provider.CallLog.Calls._ID) - val numberColumn = cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER) - val nameColumn = cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME) - val dateColumn = cursor.getColumnIndex(android.provider.CallLog.Calls.DATE) - val durationColumn = cursor.getColumnIndex(android.provider.CallLog.Calls.DURATION) - val typeColumn = cursor.getColumnIndex(android.provider.CallLog.Calls.TYPE) - - Timber.d("[Mobile] DEBUG [Backup] 批次查询到 ${cursor.count} 条通话记录") - - while (cursor.moveToNext()) { - try { - val id = if (idColumn != -1 && !cursor.isNull(idColumn)) cursor.getLong(idColumn) else 0L - - // 电话号码处理,确保不为null并规范化 - val originalNumber = if (numberColumn != -1 && !cursor.isNull(numberColumn)) { - cursor.getString(numberColumn) - } else { - "unknown" // 使用默认值代替null - } - - // 使用PhoneNumberUtils规范化电话号码 - val normalizedNumber = if (originalNumber != "unknown") { - val normalized = imken.messagevault.mobile.utils.PhoneNumberUtils.normalizePhoneNumber(originalNumber) - // 如果规范化成功,记录日志 - if (normalized != originalNumber) { - Timber.d("[Mobile] DEBUG [Backup] 通话记录号码已规范化: $originalNumber -> $normalized") - } - normalized - } else { - originalNumber - } - - // 联系人名称 - val name = if (nameColumn != -1 && !cursor.isNull(nameColumn)) { - cursor.getString(nameColumn) - } else { - null // 联系人名称可以为null - } - - // 时间戳处理 - val date = if (dateColumn != -1 && !cursor.isNull(dateColumn)) { - cursor.getLong(dateColumn) - } else { - System.currentTimeMillis() // 使用当前时间作为默认值 - } - - // 通话时长 - val duration = if (durationColumn != -1 && !cursor.isNull(durationColumn)) { - cursor.getInt(durationColumn) - } else { - 0 // 默认为0秒 - } - - // 通话类型 - val type = if (typeColumn != -1 && !cursor.isNull(typeColumn)) { - cursor.getInt(typeColumn) - } else { - android.provider.CallLog.Calls.INCOMING_TYPE // 默认为来电类型 - } - - // 构建通话记录对象并添加到列表 - val callLog = imken.messagevault.mobile.model.CallLog( - id = id, - number = normalizedNumber, - contact = name, - date = date, - duration = duration, - type = type - ) - - callLogs.add(callLog) - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 处理单条通话记录失败: ${e.message}") - // 继续处理下一条记录 - } - } - } ?: run { - Timber.e("[Mobile] ERROR [Backup] 查询时间范围 ${range.first} 到 ${range.second} 失败: 返回null") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 查询时间范围 ${range.first} 到 ${range.second} 失败: ${e.message}") - // 继续查询下一个时间范围 - } - } - - Timber.d("[Mobile] DEBUG [Backup] 找到 ${callLogs.size} 条通话记录,总查询数 $totalCallLogs") - Timber.i("[Mobile] INFO [Backup] 成功读取 ${callLogs.size} 条通话记录") - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 备份通话记录异常: ${e.message}") - return callLogs.takeIf { it.isNotEmpty() } // 返回已收集的记录,而不是null - } - - return callLogs - } - - /** - * 生成时间范围用于分批查询数据 - * - * @param ranges 时间区间数量,默认为4 - * @return 时间范围列表,每个元素为一个开始时间和结束时间的对 - */ - private fun generateTimeRanges(ranges: Int = 4): List> { - val result = mutableListOf>() - val endTime = System.currentTimeMillis() - // 默认查询最近1年的记录 - val startTime = endTime - (365L * 24 * 60 * 60 * 1000) - - val rangeSize = (endTime - startTime) / ranges - - for (i in 0 until ranges) { - val rangeStart = startTime + (i * rangeSize) - val rangeEnd = if (i == ranges - 1) endTime else startTime + ((i + 1) * rangeSize - 1) - result.add(Pair(rangeStart, rangeEnd)) - } - - return result - } - - /** - * 读取联系人 - * 增强版:读取更多联系人信息,包括电子邮件、地址等 - */ - private fun readContacts(): List? { - val contacts = mutableListOf() - - try { - // 检查权限 - val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_CONTACTS) - if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { - Timber.e("[Mobile] ERROR [Backup] 备份联系人失败: 没有 READ_CONTACTS 权限") - return null - } - - Timber.d("[Mobile] DEBUG [Backup] 开始读取联系人...") - - // 查询联系人 - val uri = android.provider.ContactsContract.Contacts.CONTENT_URI - val projection = arrayOf( - android.provider.ContactsContract.Contacts._ID, - android.provider.ContactsContract.Contacts.DISPLAY_NAME, - android.provider.ContactsContract.Contacts.HAS_PHONE_NUMBER, - android.provider.ContactsContract.Contacts.PHOTO_URI - ) - val sortOrder = "${android.provider.ContactsContract.Contacts.DISPLAY_NAME} ASC" - - context.contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> - Timber.d("[Mobile] DEBUG [Backup] 找到 ${cursor.count} 个联系人") - - val idColumn = cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID) - val nameColumn = cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME) - val hasPhoneColumn = cursor.getColumnIndex(android.provider.ContactsContract.Contacts.HAS_PHONE_NUMBER) - val photoUriColumn = cursor.getColumnIndex(android.provider.ContactsContract.Contacts.PHOTO_URI) - - // 分批处理联系人,每批次最多50个 - val batchSize = 50 - var contactsProcessed = 0 - - while (cursor.moveToNext()) { - try { - val id = if (idColumn != -1) cursor.getLong(idColumn) else 0 - val name = if (nameColumn != -1) cursor.getString(nameColumn) else "" - val hasPhone = if (hasPhoneColumn != -1) cursor.getInt(hasPhoneColumn) > 0 else false - val photoUri = if (photoUriColumn != -1) cursor.getString(photoUriColumn) else null - - val phoneNumbers = mutableListOf() - val emails = mutableListOf() - val addresses = mutableListOf() - val websites = mutableListOf() - val socialProfiles = mutableListOf() - val relationships = mutableListOf() - var note: String? = null - val groups = mutableListOf() - val events = mutableListOf() - - // 1. 读取电话号码 - if (hasPhone) { - val phoneUri = android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI - val phoneProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER, - android.provider.ContactsContract.CommonDataKinds.Phone.TYPE - ) - val phoneSelection = "${android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID} = ?" - val phoneSelectionArgs = arrayOf(id.toString()) - - context.contentResolver.query(phoneUri, phoneProjection, phoneSelection, phoneSelectionArgs, null)?.use { phoneCursor -> - val phoneNumberColumn = phoneCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER) - val phoneTypeColumn = phoneCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.TYPE) - - while (phoneCursor.moveToNext()) { - val phoneNumber = if (phoneNumberColumn != -1) phoneCursor.getString(phoneNumberColumn) else "" - val phoneType = if (phoneTypeColumn != -1) { - when (phoneCursor.getInt(phoneTypeColumn)) { - android.provider.ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> "家庭" - android.provider.ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> "手机" - android.provider.ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> "工作" - else -> "其他" - } - } else "其他" - - if (phoneNumber.isNotBlank()) { - // 存储电话号码和类型信息 - phoneNumbers.add(phoneNumber) - } - } - } - } - - // 2. 读取电子邮件 - val emailUri = android.provider.ContactsContract.CommonDataKinds.Email.CONTENT_URI - val emailProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Email.ADDRESS, - android.provider.ContactsContract.CommonDataKinds.Email.TYPE - ) - val emailSelection = "${android.provider.ContactsContract.CommonDataKinds.Email.CONTACT_ID} = ?" - val emailSelectionArgs = arrayOf(id.toString()) - - context.contentResolver.query(emailUri, emailProjection, emailSelection, emailSelectionArgs, null)?.use { emailCursor -> - val emailAddressColumn = emailCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Email.ADDRESS) - val emailTypeColumn = emailCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Email.TYPE) - - while (emailCursor.moveToNext()) { - val emailAddress = if (emailAddressColumn != -1) emailCursor.getString(emailAddressColumn) else "" - val emailType = if (emailTypeColumn != -1) { - when (emailCursor.getInt(emailTypeColumn)) { - android.provider.ContactsContract.CommonDataKinds.Email.TYPE_HOME -> "家庭" - android.provider.ContactsContract.CommonDataKinds.Email.TYPE_WORK -> "工作" - else -> "其他" - } - } else "其他" - - if (emailAddress.isNotBlank()) { - emails.add(emailAddress) - } - } - } - - // 3. 读取地址信息 - val addressUri = android.provider.ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI - val addressProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.TYPE, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.STREET, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.CITY, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.REGION, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY - ) - val addressSelection = "${android.provider.ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID} = ?" - val addressSelectionArgs = arrayOf(id.toString()) - - context.contentResolver.query(addressUri, addressProjection, addressSelection, addressSelectionArgs, null)?.use { addressCursor -> - val addressColumn = addressCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS) - val addressTypeColumn = addressCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.StructuredPostal.TYPE) - - while (addressCursor.moveToNext()) { - val address = if (addressColumn != -1) addressCursor.getString(addressColumn) else "" - val addressType = if (addressTypeColumn != -1) { - val type = addressCursor.getInt(addressTypeColumn) - when (type) { - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME -> "家庭" - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK -> "工作" - android.provider.ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER -> "其他" - else -> "其他" - } - } else "其他" - - if (address.isNotBlank()) { - addresses.add(Contact.Address(addressType, address)) - } - } - } - - // 4. 读取备注 - val noteUri = android.provider.ContactsContract.Data.CONTENT_URI - val noteProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Note.NOTE - ) - val noteSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} = ?" - val noteSelectionArgs = arrayOf( - id.toString(), - android.provider.ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE - ) - - context.contentResolver.query(noteUri, noteProjection, noteSelection, noteSelectionArgs, null)?.use { noteCursor -> - val noteColumn = noteCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Note.NOTE) - - if (noteCursor.moveToFirst()) { - note = if (noteColumn != -1) noteCursor.getString(noteColumn) else null - } - } - - // 5. 读取网站 - val websiteUri = android.provider.ContactsContract.Data.CONTENT_URI - val websiteProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Website.URL - ) - val websiteSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} = ?" - val websiteSelectionArgs = arrayOf( - id.toString(), - android.provider.ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE - ) - - context.contentResolver.query(websiteUri, websiteProjection, websiteSelection, websiteSelectionArgs, null)?.use { websiteCursor -> - val urlColumn = websiteCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Website.URL) - - while (websiteCursor.moveToNext()) { - val url = if (urlColumn != -1) websiteCursor.getString(urlColumn) else "" - if (url.isNotBlank()) { - websites.add(url) - } - } - } - - // 6. 读取事件(如生日、纪念日等) - val eventUri = android.provider.ContactsContract.Data.CONTENT_URI - val eventProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Event.START_DATE, - android.provider.ContactsContract.CommonDataKinds.Event.TYPE - ) - val eventSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} = ?" - val eventSelectionArgs = arrayOf( - id.toString(), - android.provider.ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE - ) - - context.contentResolver.query(eventUri, eventProjection, eventSelection, eventSelectionArgs, null)?.use { eventCursor -> - val dateColumn = eventCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Event.START_DATE) - val typeColumn = eventCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Event.TYPE) - - while (eventCursor.moveToNext()) { - val date = if (dateColumn != -1) eventCursor.getString(dateColumn) else "" - val type = if (typeColumn != -1) { - when (eventCursor.getInt(typeColumn)) { - android.provider.ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY -> "生日" - android.provider.ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY -> "纪念日" - else -> "其他" - } - } else "其他" - - if (date.isNotBlank()) { - events.add(Contact.Event(type, date)) - } - } - } - - // 7. 读取所属群组 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val groupUri = android.provider.ContactsContract.Data.CONTENT_URI - val groupProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID - ) - val groupSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} = ?" - val groupSelectionArgs = arrayOf( - id.toString(), - android.provider.ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE - ) - - context.contentResolver.query(groupUri, groupProjection, groupSelection, groupSelectionArgs, null)?.use { groupCursor -> - val groupIdColumn = groupCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID) - - while (groupCursor.moveToNext()) { - val groupId = if (groupIdColumn != -1) groupCursor.getLong(groupIdColumn) else -1 - - if (groupId != -1L) { - // 根据组ID查询组名称 - val groupNameUri = android.provider.ContactsContract.Groups.CONTENT_URI - val groupNameProjection = arrayOf( - android.provider.ContactsContract.Groups.TITLE - ) - val groupNameSelection = "${android.provider.ContactsContract.Groups._ID} = ?" - val groupNameSelectionArgs = arrayOf(groupId.toString()) - - context.contentResolver.query(groupNameUri, groupNameProjection, groupNameSelection, groupNameSelectionArgs, null)?.use { groupNameCursor -> - val groupNameColumn = groupNameCursor.getColumnIndex(android.provider.ContactsContract.Groups.TITLE) - - if (groupNameCursor.moveToFirst()) { - val groupName = if (groupNameColumn != -1) groupNameCursor.getString(groupNameColumn) else "" - if (groupName.isNotBlank()) { - groups.add(groupName) - } - } - } - } - } - } - } - - // 8. 读取关系(如配偶、子女等) - val relationUri = android.provider.ContactsContract.Data.CONTENT_URI - val relationProjection = arrayOf( - android.provider.ContactsContract.CommonDataKinds.Relation.NAME, - android.provider.ContactsContract.CommonDataKinds.Relation.TYPE - ) - val relationSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} = ?" - val relationSelectionArgs = arrayOf( - id.toString(), - android.provider.ContactsContract.CommonDataKinds.Relation.CONTENT_ITEM_TYPE - ) - - context.contentResolver.query(relationUri, relationProjection, relationSelection, relationSelectionArgs, null)?.use { relationCursor -> - val nameColumn = relationCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Relation.NAME) - val typeColumn = relationCursor.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Relation.TYPE) - - while (relationCursor.moveToNext()) { - val relName = if (nameColumn != -1) relationCursor.getString(nameColumn) else "" - val relType = if (typeColumn != -1) { - when (relationCursor.getInt(typeColumn)) { - android.provider.ContactsContract.CommonDataKinds.Relation.TYPE_SPOUSE -> "配偶" - android.provider.ContactsContract.CommonDataKinds.Relation.TYPE_CHILD -> "子女" - android.provider.ContactsContract.CommonDataKinds.Relation.TYPE_PARENT -> "父母" - else -> "其他" - } - } else "其他" - - if (relName.isNotBlank()) { - relationships.add(Contact.Relationship(relType, relName)) - } - } - } - - // 9. 读取社交资料 - val socialUri = android.provider.ContactsContract.Data.CONTENT_URI - val socialProjection = arrayOf( - android.provider.ContactsContract.Data.MIMETYPE, - android.provider.ContactsContract.Data.DATA1, - android.provider.ContactsContract.Data.DATA2 - ) - val socialSelection = "${android.provider.ContactsContract.Data.CONTACT_ID} = ? AND ${android.provider.ContactsContract.Data.MIMETYPE} IN (?, ?, ?)" - val socialSelectionArgs = arrayOf( - id.toString(), - "vnd.android.cursor.item/com.whatsapp.profile", - "vnd.android.cursor.item/com.facebook.profile", - "vnd.android.cursor.item/com.twitter.android.profile" - ) - - context.contentResolver.query(socialUri, socialProjection, socialSelection, socialSelectionArgs, null)?.use { socialCursor -> - val mimeTypeColumn = socialCursor.getColumnIndex(android.provider.ContactsContract.Data.MIMETYPE) - val data1Column = socialCursor.getColumnIndex(android.provider.ContactsContract.Data.DATA1) - - while (socialCursor.moveToNext()) { - val mimeType = if (mimeTypeColumn != -1) socialCursor.getString(mimeTypeColumn) else "" - val data = if (data1Column != -1) socialCursor.getString(data1Column) else "" - - if (data.isNotBlank()) { - // 根据MIME类型确定社交媒体类型 - val socialType = when { - mimeType.contains("whatsapp") -> "WhatsApp" - mimeType.contains("facebook") -> "Facebook" - mimeType.contains("twitter") -> "Twitter" - else -> "其他" - } - - socialProfiles.add(Contact.SocialProfile(socialType, data)) - } - } - } - - if (name.isNotBlank() || phoneNumbers.isNotEmpty() || emails.isNotEmpty()) { - val contact = Contact( - id = id, - name = name, - phoneNumbers = phoneNumbers, - emails = if (emails.isNotEmpty()) emails else null, - addresses = if (addresses.isNotEmpty()) addresses else null, - note = note, - groups = if (groups.isNotEmpty()) groups else null, - websites = if (websites.isNotEmpty()) websites else null, - events = if (events.isNotEmpty()) events else null, - relationships = if (relationships.isNotEmpty()) relationships else null, - socialProfiles = if (socialProfiles.isNotEmpty()) socialProfiles else null - ) - contacts.add(contact) - } - - // 每处理50个联系人,记录一下进度 - contactsProcessed++ - if (contactsProcessed % batchSize == 0) { - Timber.d("[Mobile] DEBUG [Backup] 已处理 $contactsProcessed/${cursor.count} 个联系人") - } - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 处理单个联系人时出错: ${e.message}") - // 继续处理下一个联系人 - } - } - } ?: run { - Timber.e("[Mobile] ERROR [Backup] 备份联系人失败: 无法查询联系人内容提供者") - return null - } - - Timber.i("[Mobile] INFO [Backup] 成功读取 ${contacts.size} 个联系人") - - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Backup] 备份联系人异常: ${e.message}") - return null - } - - return contacts - } - - /** - * 备份结果数据类 - */ - data class BackupResult( - val timestamp: Date, - val messagesCount: Int = 0, - val callLogsCount: Int = 0, - val contactsCount: Int = 0, - val backupFilePath: String? = null, - val errorMessage: String? = null - ) { - val isSuccess: Boolean - get() = backupFilePath != null && errorMessage == null - } -} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/RestoreManager.kt b/android/app/src/main/java/imken/messagevault/mobile/data/RestoreManager.kt deleted file mode 100644 index 6b8789a..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/RestoreManager.kt +++ /dev/null @@ -1,1248 +0,0 @@ -package imken.messagevault.mobile.data - -import android.content.ContentProviderOperation -import android.content.ContentResolver -import android.content.ContentValues -import android.content.Context -import android.content.Intent -import android.database.ContentObserver -import android.net.Uri -import android.os.Build -import android.os.Handler -import android.os.Looper -import android.os.RemoteException -import android.provider.ContactsContract -import android.provider.Telephony -import android.util.Log -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import imken.messagevault.mobile.BuildConfig -import imken.messagevault.mobile.api.ApiClient -import imken.messagevault.mobile.config.Config -import imken.messagevault.mobile.model.BackupData -import imken.messagevault.mobile.model.Contact -import imken.messagevault.mobile.model.Message -import imken.messagevault.mobile.model.CallLog as ModelCallLog -import imken.messagevault.mobile.models.BackupFile -import imken.messagevault.mobile.models.MessageData -import imken.messagevault.mobile.utils.Constants.SUPPORTED_VERSION -import imken.messagevault.mobile.utils.PhoneNumberUtils -import kotlinx.coroutines.Dispatchers as KotlinDispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.withContext -import timber.log.Timber -import java.io.File -import java.io.FileReader -import java.util.Date -import java.util.concurrent.atomic.AtomicInteger -import android.app.Activity -import android.content.OperationApplicationException -import android.provider.Settings as AndroidSettings -import android.provider.CallLog as AndroidCallLog -import android.widget.Toast -import android.provider.Settings -import android.content.pm.PackageManager -import androidx.activity.result.ActivityResultLauncher - -/** - * 消息实体类,用于数据处理 - */ -data class MessageEntity( - val id: Long, - val address: String?, - val body: String, - val date: Long, - val type: Int, - val read: Int, - val status: Int, - val threadId: Long -) - -/** - * 通话记录实体类,用于数据处理 - */ -data class CallLogsEntity( - val id: Long, - val number: String?, - val name: String, - val date: Long, - val duration: Long, - val type: Int -) - -/** - * 恢复管理器 - * - * 负责从备份文件恢复数据 - * - * @param context 应用上下文 - * @param config 应用配置 - * @param apiClient API客户端 - */ -class RestoreManager( - private val context: Context, - private val config: Config, - private val apiClient: ApiClient -) { - private val gson = Gson() - private val contentResolver: ContentResolver = context.contentResolver - private val TAG = "RestoreManager" - private var successCount = 0 - private var failureCount = 0 - - /** - * 获取可用的备份文件列表 - * - * @return 备份文件列表 - */ - suspend fun getAvailableBackups(): List = withContext(KotlinDispatchers.IO) { - val backupFiles = mutableListOf() - - try { - // 使用config获取备份目录名称而不是硬编码字符串 - val backupDir = File(context.getExternalFilesDir(null), config.getBackupDirectoryName()) - - // 检查备份目录是否存在 - if (!backupDir.exists()) { - Timber.w("[Mobile] WARN [Restore] 备份目录不存在: ${backupDir.absolutePath}") - return@withContext emptyList() - } - - // 获取备份目录中的所有JSON文件 - val files = backupDir.listFiles { file -> - file.isFile && file.name.endsWith(".json", ignoreCase = true) - } - - if (files != null) { - // 过滤无效的备份文件 - val validFiles = files.filter { validateBackupFile(it) } - backupFiles.addAll(validFiles.map { file -> - val deviceId = AndroidSettings.Secure.getString( - context.contentResolver, - AndroidSettings.Secure.ANDROID_ID - ) ?: "unknown" - - // 解析备份文件以获取SMS和通话记录数量 - val fileReader = FileReader(file) - val backupData = try { - gson.fromJson(fileReader, BackupData::class.java) - } catch (e: Exception) { - null - } finally { - fileReader.close() - } - - val smsCount = backupData?.messages?.size ?: 0 - val callLogsCount = backupData?.callLogs?.size ?: 0 - - BackupFile( - filePath = file.absolutePath, - fileName = file.name, - fileSize = file.length(), - creationDate = Date(file.lastModified()), - deviceName = deviceId, - smsCount = smsCount, - callLogsCount = callLogsCount, - version = BuildConfig.VERSION_NAME - ) - }.sortedByDescending { it.creationDate.time }) - Timber.i("[Mobile] INFO [Restore] 找到 ${validFiles.size} 个有效备份文件,总共 ${files.size} 个文件") - } else { - Timber.w("[Mobile] WARN [Restore] 无法列出备份目录中的文件: ${backupDir.absolutePath}") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 获取备份文件列表失败: ${e.message}") - } - - return@withContext backupFiles - } - - /** - * 解析备份文件 - * - * @param backupFile 备份文件 - * @return 备份数据对象,如果解析失败则返回null - */ - suspend fun parseBackupFile(backupFile: BackupFile): BackupData? = withContext(KotlinDispatchers.IO) { - try { - val file = File(backupFile.filePath) - FileReader(file).use { reader -> - // 添加日志用于调试解析过程 - val fileContent = file.readText() - val containsCallLogs = fileContent.contains("\"callLogs\"") || fileContent.contains("\"call_logs\"") - val containsMessages = fileContent.contains("\"messages\"") || fileContent.contains("\"sms\"") - val containsContacts = fileContent.contains("\"contacts\"") - - Timber.d("[Mobile] DEBUG [Restore] 备份文件内容分析: 包含通话记录=$containsCallLogs, 包含短信=$containsMessages, 包含联系人=$containsContacts") - - val typeToken = object : TypeToken() {}.type - val backupData = gson.fromJson(reader, typeToken) - if (backupData == null) { - Timber.e("[Mobile] ERROR [Restore] 解析备份文件返回null: ${backupFile.fileName}") - return@withContext null - } - - // 检查消息列表是否为null,如果是则设置为空列表 - val messagesCount = backupData.messages?.size ?: 0 - val callLogsCount = backupData.callLogs?.size ?: 0 - val contactsCount = backupData.contacts?.size ?: 0 - - Timber.i("[Mobile] INFO [Restore] 成功解析备份文件: ${backupFile.fileName}, 短信数量: $messagesCount, 通话记录数量: $callLogsCount, 联系人数量: $contactsCount") - - // 额外日志用于调试 - if (containsCallLogs && callLogsCount == 0) { - Timber.w("[Mobile] WARN [Restore] 文件中包含通话记录字段但解析后为空,可能是字段名不匹配") - } - - return@withContext backupData - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 解析备份文件失败: ${backupFile.fileName}, ${e.message}") - return@withContext null - } - } - - /** - * 从备份文件恢复数据 - * - * @param backupFile 备份文件 - * @return 恢复结果 - */ - suspend fun restoreFromFile(backupFile: BackupFile): RestoreResult = withContext(KotlinDispatchers.IO) { - return@withContext restoreFromFile(backupFile, null) - } - - /** - * 进度回调接口 - */ - interface ProgressCallback { - fun onStart(operation: String) - fun onProgressUpdate(operation: String, progress: Int) - fun onProgressUpdate(operation: String, progress: Int, message: String) - fun onComplete(success: Boolean, message: String = "") - } - - /** - * 从备份文件恢复数据,带进度报告 - * - * @param backupFile 备份文件 - * @param progressCallback 进度回调接口 - * @return 恢复结果 - */ - suspend fun restoreFromFile( - backupFile: BackupFile, - progressCallback: ProgressCallback? - ): RestoreResult = withContext(KotlinDispatchers.IO) { - try { - // 添加基础日志 - Timber.d("[Mobile] DEBUG [Restore] 开始恢复文件: ${backupFile.fileName}") - progressCallback?.onProgressUpdate("准备", 0, "开始恢复文件") - - val backupData = parseBackupFile(backupFile) ?: return@withContext RestoreResult(false, "无法解析备份文件") - progressCallback?.onProgressUpdate("解析", 10, "备份文件解析完成") - - // 检查是否需要恢复短信 - val hasSms = !backupData.messages.isNullOrEmpty() - - // 如果有短信需要恢复,检查是否为默认短信应用 - if (hasSms) { - val isDefault = isDefaultSmsApp() - Timber.i("[Mobile] INFO [Restore] 备份包含短信, 是否为默认短信应用: $isDefault") - - if (!isDefault) { - Timber.w("[Mobile] WARN [Restore] 当前应用不是默认短信应用,无法写入短信数据库") - return@withContext RestoreResult( - success = false, - message = "恢复短信需要将此应用设为默认短信应用,请在系统设置中更改" - ) - } - } - - // 恢复短信 - val messagesSize = backupData.messages?.size ?: 0 - - var restoredSmsCount = 0 - if (hasSms) { - val messages = backupData.messages!! - Timber.d("[Mobile] DEBUG [Restore] 准备恢复短信,数量: ${messages.size}") - progressCallback?.onProgressUpdate("短信", 20, "开始恢复 ${messages.size} 条短信") - - try { - // 分批恢复短信并报告进度 - restoredSmsCount = restoreMessagesWithProgress(messages, progressCallback) - Timber.i("[Mobile] INFO [Restore] 短信恢复结果: 成功恢复 $restoredSmsCount/${messages.size} 条短信") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 短信恢复过程中发生异常: ${e.message}") - } - } else { - Timber.i("[Mobile] INFO [Restore] 备份不包含短信数据,跳过短信恢复") - } - - progressCallback?.onProgressUpdate("短信", 40, "完成短信恢复 ($restoredSmsCount/$messagesSize)") - - // 恢复通话记录 - val hasCallLogs = !backupData.callLogs.isNullOrEmpty() - val callLogsSize = backupData.callLogs?.size ?: 0 - - Timber.d("[Mobile] DEBUG [Restore] 检测到通话记录: $hasCallLogs, 数量: $callLogsSize") - - var restoredCallLogsCount = 0 - if (hasCallLogs) { - val callLogs = backupData.callLogs!! - Timber.d("[Mobile] DEBUG [Restore] 准备恢复通话记录,数量: ${callLogs.size}") - progressCallback?.onProgressUpdate("通话记录", 50, "开始恢复 ${callLogs.size} 条通话记录") - - try { - // 分批恢复通话记录并报告进度 - restoredCallLogsCount = restoreCallLogsWithProgress(callLogs, progressCallback) - Timber.i("[Mobile] INFO [Restore] 通话记录恢复结果: 成功恢复 $restoredCallLogsCount/${callLogs.size} 条通话记录") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 通话记录恢复过程中发生异常: ${e.message}") - } - } else { - Timber.i("[Mobile] INFO [Restore] 备份不包含通话记录数据,跳过通话记录恢复") - } - - progressCallback?.onProgressUpdate("通话记录", 70, "完成通话记录恢复 ($restoredCallLogsCount/$callLogsSize)") - - // 恢复联系人 - val contactsSize = backupData.contacts?.size ?: 0 - - var restoredContactsCount = 0 - if (contactsSize > 0) { - val contacts = backupData.contacts!! - Timber.d("[Mobile] DEBUG [Restore] 准备恢复联系人,数量: ${contacts.size}") - progressCallback?.onProgressUpdate("联系人", 80, "开始恢复 ${contacts.size} 个联系人") - - try { - // 分批恢复联系人并报告进度 - restoredContactsCount = restoreContactsWithProgress(contacts, progressCallback) - Timber.i("[Mobile] INFO [Restore] 联系人恢复结果: 成功恢复 $restoredContactsCount/${contacts.size} 个联系人") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 联系人恢复过程中发生异常: ${e.message}") - } - } else { - Timber.i("[Mobile] INFO [Restore] 备份不包含联系人数据,跳过联系人恢复") - } - - progressCallback?.onProgressUpdate("完成", 100, "恢复完成") - - // 计算总体结果,即使某个部分失败也应该继续其他部分的恢复 - val totalSuccess = restoredSmsCount > 0 || restoredCallLogsCount > 0 || restoredContactsCount > 0 - val resultMessage = if (totalSuccess) { - "成功恢复 $restoredSmsCount 条短信、$restoredCallLogsCount 条通话记录和 $restoredContactsCount 位联系人" - } else { - "恢复失败: 没有任何数据恢复成功" - } - - Timber.i("[Mobile] INFO [Restore] 恢复完成; 恢复短信: $restoredSmsCount/${backupData.messages?.size ?: 0}, 恢复通话记录: $restoredCallLogsCount/${backupData.callLogs?.size ?: 0}, 恢复联系人: $restoredContactsCount/${backupData.contacts?.size ?: 0}") - - return@withContext RestoreResult( - success = totalSuccess, - message = resultMessage - ) - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 恢复数据失败: ${e.message}") - return@withContext RestoreResult(false, "恢复失败: ${e.message}") - } - } - - /** - * 分批恢复短信并报告进度 - */ - private suspend fun restoreMessagesWithProgress( - messages: List, - progressCallback: ProgressCallback? - ): Int = withContext(KotlinDispatchers.IO) { - var restoredCount = 0 - val totalCount = messages.size - Timber.i("[Mobile] INFO [Restore] 开始恢复短信,总数: $totalCount") - - // 计算进度更新频率 - val progressStep = if (totalCount > 100) totalCount / 20 else 1 - - // 验证并修复消息地址 - val fixedMessages = validateAndFixMessageAddresses(messages) - - // 按联系人分组短信,提高批量恢复效率 - val messagesByContact = fixedMessages.groupBy { it.address } - - var processedCount = 0 - - // 恢复所有短信 - for ((address, contactMessages) in messagesByContact) { - Timber.d("[Mobile] DEBUG [Restore] 处理联系人消息: 联系人=$address, 消息数量=${contactMessages.size}") - - // 排序消息按日期从旧到新 - val sortedMessages = contactMessages.sortedBy { it.date } - - for (smsMessage in sortedMessages) { - try { - // 创建短信内容值 - val values = ContentValues().apply { - put(Telephony.Sms.ADDRESS, smsMessage.address) - put(Telephony.Sms.BODY, smsMessage.body) - put(Telephony.Sms.DATE, smsMessage.date) - put(Telephony.Sms.TYPE, smsMessage.type) - put(Telephony.Sms.READ, smsMessage.readState ?: 0) - put(Telephony.Sms.STATUS, smsMessage.messageStatus ?: 0) - - // 如果有线程ID - if (smsMessage.threadId != null && smsMessage.threadId > 0) { - put(Telephony.Sms.THREAD_ID, smsMessage.threadId) - } - } - - // 插入短信 - val uri = contentResolver.insert(Telephony.Sms.CONTENT_URI, values) - if (uri != null) { - restoredCount++ - } - - processedCount++ - // 报告进度 - if (processedCount % progressStep == 0 || processedCount == totalCount) { - val currentProgress = (processedCount * 100) / totalCount - val progressMessage = "恢复短信进度: $processedCount/$totalCount" - progressCallback?.onProgressUpdate("短信", currentProgress, progressMessage) - Timber.d("[Mobile] DEBUG [Restore] $progressMessage ($currentProgress%)") - } - - // 每处理10条消息暂停一下,避免系统过载 - if (processedCount % 10 == 0) { - delay(50) - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 恢复短信失败: 地址=${smsMessage.address}, ${e.message}") - } - } - - // 每处理完一个联系人的所有消息后暂停一下 - delay(100) - } - - Timber.i("[Mobile] INFO [Restore] 短信恢复完成: 成功=$restoredCount, 总数=$totalCount") - return@withContext restoredCount - } - - /** - * 验证并修复短信地址列表,避免出现"unknown"联系人问题 - * - * 此方法检查并修复备份数据中可能存在的问题: - * 1. 空地址会导致短信显示为"未知"联系人 - * 2. 重复的ThreadID问题导致短信被错误地归类 - * - * @param messages 原始短信列表 - * @return 修复后的短信列表 - */ - private fun validateAndFixMessageAddresses(messages: List): List { - Timber.d("[Mobile] DEBUG [Restore] 开始验证和修复短信地址,数量: ${messages.size}") - - // 导入电话号码工具类 - val phoneNumberUtils = PhoneNumberUtils - - // 统计空地址数量 - val emptyAddressCount = messages.count { it.address.isNullOrBlank() } - if (emptyAddressCount > 0) { - Timber.w("[Mobile] WARN [Restore] 发现 $emptyAddressCount 条短信缺少有效地址,将进行修复") - } - - // 修复并标准化短信地址 - return messages.map { originalMessage -> - // 处理空地址情况 - if (originalMessage.address.isNullOrBlank()) { - // 创建新消息对象而不是修改原对象,避免引用问题 - Message( - id = originalMessage.id, - address = "unknown_${originalMessage.id}", // 使用ID作为唯一标识符 - body = originalMessage.body, - date = originalMessage.date, - type = originalMessage.type, - readState = originalMessage.readState, - messageStatus = originalMessage.messageStatus, - threadId = originalMessage.threadId - ) - } else { - // 标准化电话号码 - val normalizedAddress = phoneNumberUtils.normalizePhoneNumber(originalMessage.address) - - // 如果地址标准化后不同,创建新的消息对象 - if (normalizedAddress != originalMessage.address) { - Timber.d("[Mobile] DEBUG [Restore] 标准化地址: ${originalMessage.address} -> $normalizedAddress") - - Message( - id = originalMessage.id, - address = normalizedAddress, // 使用标准化后的地址 - body = originalMessage.body, - date = originalMessage.date, - type = originalMessage.type, - readState = originalMessage.readState, - messageStatus = originalMessage.messageStatus, - threadId = originalMessage.threadId - ) - } else { - // 有效地址且无需标准化,直接使用原消息 - originalMessage - } - } - } - } - - /** - * 分批恢复通话记录并报告进度 - */ - private suspend fun restoreCallLogsWithProgress( - callLogs: List, - progressCallback: ProgressCallback? - ): Int = withContext(KotlinDispatchers.IO) { - var restoredCount = 0 - val totalCount = callLogs.size - Timber.i("[Mobile] INFO [Restore] 开始恢复通话记录,总数: $totalCount") - - // 检查权限 - if (!hasCallLogPermissions()) { - Timber.e("[Mobile] ERROR [Restore] 没有通话记录权限,无法恢复") - return@withContext 0 - } - - // 计算进度更新频率 - val progressStep = if (totalCount > 100) totalCount / 20 else 1 - - // 预处理通话记录,修复电话号码格式 - val fixedCallLogs = callLogs.map { callLog -> - // 如果号码为空,使用原始记录 - if (callLog.number.isNullOrBlank()) { - callLog - } else { - // 规范化电话号码 - val normalizedNumber = PhoneNumberUtils.normalizePhoneNumber(callLog.number) - if (normalizedNumber != callLog.number) { - Timber.d("[Mobile] DEBUG [Restore] 通话记录号码已规范化: ${callLog.number} -> $normalizedNumber") - // 创建新对象并保留其他属性 - callLog.copy(number = normalizedNumber) - } else { - callLog - } - } - } - - // 按联系人分组通话记录,提高批量恢复效率 - val callLogsByNumber = mutableMapOf>() - - // 为每个通话记录找到正确的分组键 - fixedCallLogs.forEach { callLog -> - if (!callLog.number.isNullOrBlank()) { - // 获取此号码的所有可能变体 - val normalized = PhoneNumberUtils.normalizePhoneNumber(callLog.number) - - // 将通话记录添加到对应的分组 - if (!callLogsByNumber.containsKey(normalized)) { - callLogsByNumber[normalized] = mutableListOf() - } - callLogsByNumber[normalized]!!.add(callLog) - } else { - // 处理号码为空的情况 - val unknownKey = "unknown_${callLog.id}" - if (!callLogsByNumber.containsKey(unknownKey)) { - callLogsByNumber[unknownKey] = mutableListOf() - } - callLogsByNumber[unknownKey]!!.add(callLog) - } - } - - Timber.d("[Mobile] DEBUG [Restore] 按规范化号码分组后,共有 ${callLogsByNumber.size} 个不同联系人") - - var processedCount = 0 - - // 恢复所有通话记录 - for ((_, numberCallLogs) in callLogsByNumber) { - for (callLog in numberCallLogs) { - try { - val values = ContentValues().apply { - put(AndroidCallLog.Calls.NUMBER, callLog.number ?: "") - put(AndroidCallLog.Calls.TYPE, callLog.type) - put(AndroidCallLog.Calls.DATE, callLog.date.toLong()) - put(AndroidCallLog.Calls.DURATION, callLog.duration.toLong()) - put(AndroidCallLog.Calls.NEW, 0) // 标记为已读 - - // 尝试匹配联系人 - if (!callLog.number.isNullOrBlank()) { - val contactName = getContactNameFromNumber(callLog.number) - if (contactName != null) { - put(AndroidCallLog.Calls.CACHED_NAME, contactName) - Timber.d("[Mobile] DEBUG [Restore] 通话记录匹配到联系人: ${callLog.number} -> $contactName") - } - } - } - - val uri = contentResolver.insert(AndroidCallLog.Calls.CONTENT_URI, values) - if (uri != null) { - restoredCount++ - } - - processedCount++ - // 报告进度 - if (processedCount % progressStep == 0 || processedCount == totalCount) { - val currentProgress = (processedCount * 100) / totalCount - val progressMessage = "恢复通话记录进度: $processedCount/$totalCount" - progressCallback?.onProgressUpdate("通话记录", currentProgress, progressMessage) - Timber.d("[Mobile] DEBUG [Restore] $progressMessage ($currentProgress%)") - } - - // 每处理10条记录暂停一下,避免系统过载 - if (processedCount % 10 == 0) { - delay(50) - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 恢复通话记录失败: 号码=${callLog.number}, ${e.message}") - } - } - - // 每处理完一个联系人的所有记录后暂停一下 - delay(100) - } - - Timber.i("[Mobile] INFO [Restore] 通话记录恢复完成: 成功=$restoredCount, 总数=$totalCount") - return@withContext restoredCount - } - - /** - * 从电话号码获取联系人姓名,使用电话号码变体增强匹配率 - */ - private fun getContactNameFromNumber(phoneNumber: String): String? { - if (phoneNumber.isBlank()) return null - - // 首先尝试直接匹配原始号码 - val name = getContactNameByExactNumber(phoneNumber) - if (name != null) return name - - // 若直接匹配失败,尝试匹配所有可能的变体 - val variants = PhoneNumberUtils.getPossibleNumberVariants(phoneNumber) - for (variant in variants) { - val variantName = getContactNameByExactNumber(variant) - if (variantName != null) { - Timber.d("[Mobile] DEBUG [Restore] 通过号码变体匹配到联系人: $phoneNumber -> $variant -> $variantName") - return variantName - } - } - - return null - } - - /** - * 通过精确号码查询联系人姓名 - */ - private fun getContactNameByExactNumber(phoneNumber: String): String? { - val uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)) - val projection = arrayOf(ContactsContract.PhoneLookup.DISPLAY_NAME) - - try { - val cursor = contentResolver.query(uri, projection, null, null, null) - cursor?.use { - if (it.moveToFirst()) { - return it.getString(it.getColumnIndexOrThrow(ContactsContract.PhoneLookup.DISPLAY_NAME)) - } - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 查询联系人姓名失败: 号码=$phoneNumber, ${e.message}") - } - - return null - } - - /** - * 检查是否有通话记录权限 - */ - private fun hasCallLogPermissions(): Boolean { - val readPermission = android.Manifest.permission.READ_CALL_LOG - val writePermission = android.Manifest.permission.WRITE_CALL_LOG - - val readGranted = context.checkSelfPermission(readPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - val writeGranted = context.checkSelfPermission(writePermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - - if (!readGranted || !writeGranted) { - Timber.e("[Mobile] ERROR [Restore] 缺少通话记录权限: READ_CALL_LOG=$readGranted, WRITE_CALL_LOG=$writeGranted") - return false - } - - return true - } - - /** - * 分批恢复联系人并报告进度 - */ - private suspend fun restoreContactsWithProgress( - contacts: List, - progressCallback: ProgressCallback? - ): Int = withContext(KotlinDispatchers.IO) { - var restoredCount = 0 - val totalCount = contacts.size - Timber.i("[Mobile] INFO [Restore] 开始恢复联系人,总数: $totalCount") - - // 检查权限 - if (!hasContactsPermissions()) { - Timber.e("[Mobile] ERROR [Restore] 没有联系人权限,无法恢复联系人") - return@withContext 0 - } - - // 计算进度更新频率 - val progressStep = if (totalCount > 100) totalCount / 10 else 1 - - contacts.forEachIndexed { index, contact -> - try { - val operations = ArrayList() - - // 创建联系人 - val rawContactInsertIndex = operations.size - operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) - .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) - .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) - .build()) - - // 添加姓名 - operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) - .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) - .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) - .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.name) - .build()) - - // 添加电话号码 - contact.phoneNumbers.forEach { phoneNumber -> - operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) - .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) - .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) - .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber) - .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) - .build()) - } - - try { - // 应用批处理操作 - val results = contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) - if (results.isNotEmpty()) { - restoredCount++ - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 恢复联系人失败: 批处理操作异常: ${e.message}") - } - - // 报告进度 - if (index % progressStep == 0 || index == totalCount - 1) { - val currentProgress = ((index + 1) * 100) / totalCount - val progressMessage = "恢复联系人进度: ${index + 1}/$totalCount" - progressCallback?.onProgressUpdate("联系人", currentProgress, progressMessage) - Timber.d("[Mobile] DEBUG [Restore] $progressMessage ($currentProgress%)") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 恢复联系人失败: ID=${contact.id}, 姓名=${contact.name}, ${e.message}") - } - } - - Timber.i("[Mobile] INFO [Restore] 联系人恢复完成: 成功=$restoredCount, 总数=$totalCount") - return@withContext restoredCount - } - - /** - * 检查是否有短信权限 - */ - private fun hasSmsPermissions(): Boolean { - val readPermission = android.Manifest.permission.READ_SMS - val sendPermission = android.Manifest.permission.SEND_SMS - val receivePermission = android.Manifest.permission.RECEIVE_SMS - - val readGranted = context.checkSelfPermission(readPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - val sendGranted = context.checkSelfPermission(sendPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - val receiveGranted = context.checkSelfPermission(receivePermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - - if (!readGranted || !sendGranted) { - Timber.e("[Mobile] ERROR [Restore] 缺少短信权限: READ_SMS=$readGranted, SEND_SMS=$sendGranted, RECEIVE_SMS=$receiveGranted") - return false - } - - return true - } - - /** - * 检查是否有联系人权限 - */ - private fun hasContactsPermissions(): Boolean { - val readPermission = android.Manifest.permission.READ_CONTACTS - val writePermission = android.Manifest.permission.WRITE_CONTACTS - - val readGranted = context.checkSelfPermission(readPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - val writeGranted = context.checkSelfPermission(writePermission) == android.content.pm.PackageManager.PERMISSION_GRANTED - - if (!readGranted || !writeGranted) { - Timber.e("[Mobile] ERROR [Restore] 缺少联系人权限: READ_CONTACTS=$readGranted, WRITE_CONTACTS=$writeGranted") - return false - } - - return true - } - - /** - * 验证备份文件 - * - * @param file 备份文件 - * @return 如果备份文件有效则返回true,否则返回false - */ - private fun validateBackupFile(file: File): Boolean { - if (!file.exists() || !file.isFile || !file.canRead()) { - return false - } - - try { - FileReader(file).use { reader -> - val typeToken = object : TypeToken() {}.type - val backupData = gson.fromJson(reader, typeToken) - // 如果BackupData类中没有formatVersion字段,则始终返回true - return backupData != null - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 验证备份文件失败: ${file.name}, ${e.message}") - return false - } - } - - /** - * 处理备份文件 - * - * @param backupFile 备份文件 - */ - private fun someRestoreMethod(backupFile: BackupFile) { - println("处理备份文件: ${backupFile.fileName}") - } - - /** - * 读取状态的方法 - * - * @return 读取状态 - */ - private fun readState(): Any { - return Any() // 临时返回 - } - - /** - * 消息状态字段 - */ - private val messageStatus: Any = Any() - - /** - * 读取状态枚举 - */ - private enum class ReadState { - READ, UNREAD - } - - /** - * 消息状态枚举 - */ - private enum class MessageStatus { - RECEIVED, SENT - } - - /** - * 获取读取状态 - * - * @param value 值 - * @return 读取状态 - */ - private fun getReadState(value: Int): ReadState { - return if (value == 1) ReadState.READ else ReadState.UNREAD - } - - /** - * 获取消息状态 - * - * @param value 值 - * @return 消息状态 - */ - private fun getMessageStatus(value: Int): MessageStatus { - return if (value == 1) MessageStatus.RECEIVED else MessageStatus.SENT - } - - /** - * 记录错误日志 - * - * @param message 消息 - */ - private fun logError(message: String) { - Log.e(TAG, message) - } - - /** - * 将消息模型转换为实体 - * - * @param message 消息 - * @return 消息实体 - */ - private fun Message.toMessageEntity(): MessageEntity { - return MessageEntity( - id = this.id, - address = this.address, - body = this.body ?: "", - date = this.date, - type = this.type, - read = this.readState ?: 0, - status = this.messageStatus ?: 0, - threadId = this.threadId ?: 0 - ) - } - - /** - * 将通话记录模型转换为实体 - * - * @param callLog 通话记录 - * @return 通话记录实体 - */ - private fun ModelCallLog.toCallLogEntity(): CallLogsEntity { - return CallLogsEntity( - // 使用固定值0代替id,让Room自动生成主键 - id = 0L, - number = this.number, - name = this.contact ?: "", - date = this.date.toLong(), - duration = this.duration.toLong(), - type = this.type - ) - } - - /** - * 将消息数据模型转换为实体 - * - * @param messageData 消息数据 - * @return 消息实体 - */ - private fun MessageData.toMessageEntity(): MessageEntity { - return MessageEntity( - id = this.id, - address = this.address, - body = this.body ?: "", - date = this.date, - type = this.type, - read = this.readState, - status = this.messageStatus, - threadId = this.threadId?.toLong() ?: 0L - ) - } - - /** - * 修复 line 242 和 243 的 ContentValues.put 歧义 - */ - private fun createMessageContentValues(message: Message): ContentValues { - val values = ContentValues() - values.put("column_name", message.address) // 不再使用as String显式指定类型 - values.put("another_column", message.body) // 不再使用as String显式指定类型 - return values - } - - /** - * 获取协议类型 - */ - private fun getProtocolFromType(type: Int): String { - return when(type) { - 1 -> "sms" - 2 -> "mms" - else -> "unknown" - } - } - - /** - * 修复缺少参数的方法调用 - */ - private fun someMethod() { - // 删除无效的方法调用代码 - } - - /** - * 定义TAG常量 - */ - companion object { - private const val BACKUP_FORMAT_VERSION = SUPPORTED_VERSION - const val DEFAULT_SMS_REQUEST_CODE = 1001 - const val PERMISSIONS_REQUEST_CODE = 1002 - } - - /** - * 恢复结果数据类 - */ - data class RestoreResult( - val success: Boolean, - val message: String - ) - - /** - * 检查当前应用是否为默认短信应用 - */ - private fun isDefaultSmsApp(): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - try { - // 优先使用RoleManager(Android 10+) - var roleManagerResult = false - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - try { - val roleManager = context.getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager - if (roleManager != null) { - roleManagerResult = roleManager.isRoleHeld(android.app.role.RoleManager.ROLE_SMS) - Timber.d("[Mobile] DEBUG [Restore] RoleManager检查结果: $roleManagerResult") - if (roleManagerResult) { - return true - } - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 检查RoleManager时出错") - } - } - - // 如果RoleManager检查未成功或不可用,使用传统方法 - val defaultSmsPackage = Telephony.Sms.getDefaultSmsPackage(context) - val isTelephonyDefault = defaultSmsPackage == context.packageName - - // 添加详细日志 - Timber.d("[Mobile] DEBUG [Restore] 默认短信应用检查 - 当前应用: ${context.packageName}, 系统默认: $defaultSmsPackage, 是默认: $isTelephonyDefault") - - return isTelephonyDefault - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 检查默认短信应用状态时发生错误") - return false - } - } - return true // 在较旧版本中不需要是默认短信应用 - } - - /** - * 请求设置为默认短信应用 - * - * 此方法用于向系统请求将当前应用设置为默认短信应用。它应该启动来自调用Activity的 - * ActivityResultLauncher而不是直接调用startActivityForResult。 - * - * 在Android 4.4 (KitKat)及以上版本中,只有被设置为默认短信应用的应用才能写入短信数据库。 - * 这是Android系统的安全限制,目的是防止恶意应用滥用短信功能。 - * - * @param activity 发起请求的Activity,用于获取RoleManager和创建Intent - * @param launcher ActivityResultLauncher用于处理结果回调 - */ - fun requestDefaultSmsApp(activity: Activity, launcher: ActivityResultLauncher) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - try { - Timber.d("[Mobile] DEBUG [Restore] 开始请求默认短信应用权限,Android版本: ${Build.VERSION.SDK_INT}") - var requestSent = false - - // 尝试使用RoleManager API (Android 10+) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - try { - val roleManager = activity.getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager - if (roleManager != null) { - // 检查角色是否可用 - if (roleManager.isRoleAvailable(android.app.role.RoleManager.ROLE_SMS)) { - // 检查应用是否已持有角色 - val hasRole = roleManager.isRoleHeld(android.app.role.RoleManager.ROLE_SMS) - Timber.d("[Mobile] DEBUG [Restore] RoleManager检查结果: $hasRole") - - if (!hasRole) { - // 使用ActivityResultLauncher请求SMS角色 - val roleRequestIntent = roleManager.createRequestRoleIntent(android.app.role.RoleManager.ROLE_SMS) - launcher.launch(roleRequestIntent) - Timber.d("[Mobile] DEBUG [Restore] 已使用角色管理器发送SMS角色请求") - requestSent = true - } else { - Timber.i("[Mobile] INFO [Restore] 应用已持有SMS角色,无需再次请求") - return - } - } else { - Timber.w("[Mobile] WARN [Restore] 此设备的RoleManager不支持SMS角色") - } - } else { - Timber.w("[Mobile] WARN [Restore] 无法获取RoleManager服务") - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 使用RoleManager请求SMS角色失败: ${e.message}") - } - } - - // 如果RoleManager方法未成功,使用传统方法 - if (!requestSent) { - // 传统方法(适用于Android 4.4+) - val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.packageName) - - if (intent.resolveActivity(activity.packageManager) != null) { - launcher.launch(intent) - Timber.d("[Mobile] DEBUG [Restore] 已发送默认短信应用请求(传统方法)") - requestSent = true - } else { - Timber.w("[Mobile] WARN [Restore] 无法找到处理默认短信应用请求的系统组件") - } - } - - // 如果上面的方法都失败,尝试使用备选方法 - if (!requestSent) { - // 尝试打开系统默认应用设置页面 - try { - // 先尝试使用默认应用设置页面 - val defaultAppsIntent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) - if (defaultAppsIntent.resolveActivity(activity.packageManager) != null) { - activity.startActivity(defaultAppsIntent) - Timber.d("[Mobile] DEBUG [Restore] 已打开默认应用设置页面") - - // 提示用户手动设置 - Toast.makeText( - activity, - "请在默认应用设置中将本应用设为默认短信应用", - Toast.LENGTH_LONG - ).show() - requestSent = true - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 无法打开默认应用设置: ${e.message}") - } - - // 如果默认应用设置页面也失败,尝试应用详情页 - if (!requestSent) { - try { - val settingsIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - settingsIntent.data = Uri.parse("package:" + activity.packageName) - activity.startActivity(settingsIntent) - Timber.w("[Mobile] WARN [Restore] 无法直接请求默认短信权限,已打开应用设置页面") - - // 提示用户在设置中手动授予权限 - Toast.makeText( - activity, - "请在应用设置中授予短信相关权限,然后设置为默认短信应用", - Toast.LENGTH_LONG - ).show() - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 无法打开应用设置: ${e.message}") - - // 最后的尝试:打开系统设置主页 - try { - val mainSettingsIntent = Intent(Settings.ACTION_SETTINGS) - activity.startActivity(mainSettingsIntent) - Toast.makeText( - activity, - "请在系统设置中找到应用管理,将本应用设为默认短信应用", - Toast.LENGTH_LONG - ).show() - } catch (finalException: Exception) { - Timber.e(finalException, "[Mobile] ERROR [Restore] 无法打开系统设置: ${finalException.message}") - Toast.makeText( - activity, - "无法自动打开设置,请手动将本应用设为默认短信应用", - Toast.LENGTH_LONG - ).show() - } - } - } - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 请求默认短信应用权限失败: ${e.message}") - Toast.makeText( - activity, - "无法请求默认短信应用权限: ${e.message}", - Toast.LENGTH_LONG - ).show() - } - } - } - - /** - * 检测是否在模拟器环境中运行 - */ - private fun isEmulator(): Boolean { - return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) - || Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.HARDWARE.contains("goldfish") - || Build.HARDWARE.contains("ranchu") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.PRODUCT.contains("sdk_google") - || Build.PRODUCT.contains("google_sdk") - || Build.PRODUCT.contains("sdk") - || Build.PRODUCT.contains("sdk_x86") - || Build.PRODUCT.contains("vbox86p") - || Build.PRODUCT.contains("emulator") - || Build.PRODUCT.contains("simulator") - } - - /** - * 检查并请求所需权限 - * - * 此方法检查恢复所需的权限,并根据需要请求缺失的权限。 - * 适用于Android 6.0+的动态权限请求。 - * - * @param activity 发起请求的Activity - * @param requestCode 权限请求代码 - * @return 如果所有权限都已授予则返回true,否则返回false - */ - fun checkAndRequestPermissions(activity: Activity, requestCode: Int): Boolean { - // 所需权限列表 - val requiredPermissions = mutableListOf() - - // 检查SMS权限 - if (!hasSmsPermissions()) { - requiredPermissions.add(android.Manifest.permission.READ_SMS) - requiredPermissions.add(android.Manifest.permission.SEND_SMS) - requiredPermissions.add(android.Manifest.permission.RECEIVE_SMS) - } - - // 检查通话记录权限 - if (!hasCallLogPermissions()) { - requiredPermissions.add(android.Manifest.permission.READ_CALL_LOG) - requiredPermissions.add(android.Manifest.permission.WRITE_CALL_LOG) - } - - // 检查联系人权限 - if (!hasContactsPermissions()) { - requiredPermissions.add(android.Manifest.permission.READ_CONTACTS) - requiredPermissions.add(android.Manifest.permission.WRITE_CONTACTS) - } - - // 如果有缺失权限,请求它们 - if (requiredPermissions.isNotEmpty()) { - // 在Android 11+,媒体权限可能需要特殊处理 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - // 在Android 11+,某些权限可能需要通过Intent请求 - val specialPermissions = mutableListOf() - val normalPermissions = mutableListOf() - - for (permission in requiredPermissions) { - if (permission == android.Manifest.permission.READ_SMS || - permission == android.Manifest.permission.READ_CALL_LOG || - permission == android.Manifest.permission.WRITE_CALL_LOG) { - specialPermissions.add(permission) - } else { - normalPermissions.add(permission) - } - } - - // 先请求普通权限 - if (normalPermissions.isNotEmpty()) { - activity.requestPermissions(normalPermissions.toTypedArray(), requestCode) - } - - // 对于特殊权限,可能需要引导用户到设置页面 - if (specialPermissions.isNotEmpty()) { - try { - val intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intent.data = Uri.parse("package:" + activity.packageName) - activity.startActivity(intent) - Timber.i("[Mobile] INFO [Restore] 在Android 11+上打开应用设置页面请求特殊权限") - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] 无法打开应用设置: ${e.message}") - } - } - } else { - // Android 10及以下的正常权限请求 - activity.requestPermissions(requiredPermissions.toTypedArray(), requestCode) - Timber.d("[Mobile] DEBUG [Restore] 请求权限: ${requiredPermissions.joinToString()}") - } - return false - } - - return true // 所有权限都已授予 - } -} - diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt new file mode 100644 index 0000000..eac99e5 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt @@ -0,0 +1,103 @@ +package imken.messagevault.mobile.data.backup + +import android.content.Context +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import imken.messagevault.mobile.model.BackupData +import imken.messagevault.sdk.backup.model.BackupReadData +import imken.messagevault.sdk.backup.model.CallLogData +import imken.messagevault.sdk.backup.model.ContactData +import imken.messagevault.sdk.backup.model.SmsData +import imken.messagevault.sdk.backup.reader.BackupFileReader +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import timber.log.Timber +import java.io.File +import java.io.FileReader + +class AndroidBackupFileReader( + private val context: Context +) : BackupFileReader { + + private val gson = Gson() + + override suspend fun read(filePath: String): BackupReadData? = withContext(Dispatchers.IO) { + try { + val file = File(filePath) + if (!file.exists() || !file.isFile || !file.canRead()) { + Timber.e("[Mobile] ERROR [Restore] Backup file does not exist or is not readable: $filePath") + return@withContext null + } + + FileReader(file).use { reader -> + val fileContent = file.readText() + val containsCallLogs = fileContent.contains("\"callLogs\"") || fileContent.contains("\"call_logs\"") + val containsMessages = fileContent.contains("\"messages\"") || fileContent.contains("\"sms\"") + val containsContacts = fileContent.contains("\"contacts\"") + + Timber.d("[Mobile] DEBUG [Restore] Backup file content analysis: hasCallLogs=$containsCallLogs, hasMessages=$containsMessages, hasContacts=$containsContacts") + + val typeToken = object : TypeToken() {}.type + val backupData = gson.fromJson(reader, typeToken) + if (backupData == null) { + Timber.e("[Mobile] ERROR [Restore] Parsed backup file returned null: $filePath") + return@withContext null + } + + val messagesCount = backupData.messages?.size ?: 0 + val callLogsCount = backupData.callLogs?.size ?: 0 + val contactsCount = backupData.contacts?.size ?: 0 + + Timber.i("[Mobile] INFO [Restore] Successfully parsed backup file: SMS=$messagesCount, callLogs=$callLogsCount, contacts=$contactsCount") + + if (containsCallLogs && callLogsCount == 0) { + Timber.w("[Mobile] WARN [Restore] File contains call log fields but parsed as empty, possible field name mismatch") + } + + val smsDataList = backupData.messages?.map { msg -> + SmsData( + id = msg.id, + address = msg.address, + body = msg.body, + date = msg.date, + type = msg.type, + readState = msg.readState, + messageStatus = msg.messageStatus, + threadId = msg.threadId + ) + } ?: emptyList() + + val callLogDataList = backupData.callLogs?.map { callLog -> + CallLogData( + id = callLog.id, + number = callLog.number, + type = callLog.type, + date = callLog.date, + duration = callLog.duration, + contact = callLog.contact + ) + } ?: emptyList() + + val contactDataList = backupData.contacts?.map { contact -> + ContactData( + id = contact.id, + name = contact.name, + phoneNumbers = contact.phoneNumbers.toList(), + emails = contact.emails + ) + } ?: emptyList() + + BackupReadData( + messages = smsDataList, + callLogs = callLogDataList, + contacts = contactDataList, + timestamp = backupData.timestamp, + deviceInfo = backupData.deviceInfo + ) + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to parse backup file: $filePath, ${e.message}") + null + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt new file mode 100644 index 0000000..f55e0f5 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt @@ -0,0 +1,99 @@ +package imken.messagevault.mobile.data.backup + +import android.content.Context +import android.os.Build +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.BackupResult +import imken.messagevault.sdk.backup.serializer.BackupSerializer +import imken.messagevault.sdk.backup.writer.BackupFileWriter +import timber.log.Timber +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { + + private val serializer = BackupSerializer() + + override suspend fun writeBackup(data: BackupData, filePath: String): BackupResult { + try { + val backupDir = File(context.getExternalFilesDir(null), "backups") + if (!backupDir.exists()) { + backupDir.mkdirs() + } + + val fileName = generateUserFriendlyFileName() + val backupFile = File(backupDir, fileName) + + Timber.d("[Mobile] DEBUG [Backup] 数据准备情况: 短信=${data.messages?.size ?: 0}, 通话记录=${data.callLogs?.size ?: 0}, 联系人=${data.contacts?.size ?: 0}, 设备信息=${data.deviceInfo}") + + val jsonString = serializer.serializeWithSizeLimit(data) + ?: return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + smsCount = data.messages?.size ?: 0, + callLogCount = data.callLogs?.size ?: 0, + errorMessage = "创建备份文件失败" + ) + + try { + backupFile.writeText(jsonString) + Timber.d("[Mobile] DEBUG [Backup] 成功将数据写入文件") + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 写入文件失败: ${e.message}") + return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + errorMessage = "写入文件失败: ${e.message}" + ) + } + + if (!backupFile.exists() || backupFile.length() <= 10) { + Timber.e("[Mobile] ERROR [Backup] 创建的备份文件为空或过小: ${backupFile.length()} 字节") + backupFile.delete() + return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + errorMessage = "创建的备份文件为空或过小" + ) + } + + Timber.i("[Mobile] INFO [Backup] 成功创建备份文件: ${backupFile.absolutePath}, 大小: ${backupFile.length()} 字节") + + return BackupResult( + success = true, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + smsCount = data.messages?.size ?: 0, + callLogCount = data.callLogs?.size ?: 0, + fileName = backupFile.name, + filePath = backupFile.absolutePath + ) + + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 创建本地备份文件失败; Context: ${e.message}") + return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + errorMessage = "创建本地备份文件失败: ${e.message}" + ) + } + } + + private fun generateUserFriendlyFileName(deviceName: String? = null): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault()) + val timestamp = dateFormat.format(Date()) + val device = deviceName ?: Build.MODEL.replace(" ", "_") + return "MessageVault_${device}_${timestamp}.json" + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt new file mode 100644 index 0000000..e600ebf --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt @@ -0,0 +1,149 @@ +package imken.messagevault.mobile.data.backup + +import android.content.Context +import android.provider.CallLog.Calls +import imken.messagevault.mobile.utils.PhoneNumberUtils +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.reader.CallLogReader +import timber.log.Timber + +class AndroidCallLogReader(private val context: Context) : CallLogReader { + + override suspend fun readCallLogs(): List? { + val callLogs = mutableListOf() + + try { + val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) + if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { + Timber.e("[Mobile] ERROR [Backup] 备份通话记录失败: 没有 READ_CALL_LOG 权限") + return null + } + + Timber.d("[Mobile] DEBUG [Backup] 开始读取通话记录...") + + val uri = Calls.CONTENT_URI + val projection = arrayOf( + Calls._ID, + Calls.NUMBER, + Calls.CACHED_NAME, + Calls.DATE, + Calls.DURATION, + Calls.TYPE + ) + val sortOrder = "${Calls.DATE} DESC" + + val timeRanges = generateTimeRanges() + var totalCallLogs = 0 + + for (range in timeRanges) { + val selection = "${Calls.DATE} >= ? AND ${Calls.DATE} <= ?" + val selectionArgs = arrayOf(range.first.toString(), range.second.toString()) + + Timber.d("[Mobile] DEBUG [Backup] 查询时间范围: ${range.first} 到 ${range.second}") + + try { + context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)?.use { cursor -> + totalCallLogs += cursor.count + + val idColumn = cursor.getColumnIndex(Calls._ID) + val numberColumn = cursor.getColumnIndex(Calls.NUMBER) + val nameColumn = cursor.getColumnIndex(Calls.CACHED_NAME) + val dateColumn = cursor.getColumnIndex(Calls.DATE) + val durationColumn = cursor.getColumnIndex(Calls.DURATION) + val typeColumn = cursor.getColumnIndex(Calls.TYPE) + + Timber.d("[Mobile] DEBUG [Backup] 批次查询到 ${cursor.count} 条通话记录") + + while (cursor.moveToNext()) { + try { + val id = if (idColumn != -1 && !cursor.isNull(idColumn)) cursor.getLong(idColumn) else 0L + + val originalNumber = if (numberColumn != -1 && !cursor.isNull(numberColumn)) { + cursor.getString(numberColumn) + } else { + "unknown" + } + + val normalizedNumber = if (originalNumber != "unknown") { + val normalized = PhoneNumberUtils.normalizePhoneNumber(originalNumber) + if (normalized != originalNumber) { + Timber.d("[Mobile] DEBUG [Backup] 通话记录号码已规范化: $originalNumber -> $normalized") + } + normalized + } else { + originalNumber + } + + val name = if (nameColumn != -1 && !cursor.isNull(nameColumn)) { + cursor.getString(nameColumn) + } else { + null + } + + val date = if (dateColumn != -1 && !cursor.isNull(dateColumn)) { + cursor.getLong(dateColumn) + } else { + System.currentTimeMillis() + } + + val duration = if (durationColumn != -1 && !cursor.isNull(durationColumn)) { + cursor.getInt(durationColumn) + } else { + 0 + } + + val type = if (typeColumn != -1 && !cursor.isNull(typeColumn)) { + cursor.getInt(typeColumn) + } else { + Calls.INCOMING_TYPE + } + + val callLog = CallLog( + id = id, + number = normalizedNumber, + contact = name, + date = date, + duration = duration, + type = type + ) + + callLogs.add(callLog) + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 处理单条通话记录失败: ${e.message}") + } + } + } ?: run { + Timber.e("[Mobile] ERROR [Backup] 查询时间范围 ${range.first} 到 ${range.second} 失败: 返回null") + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 查询时间范围 ${range.first} 到 ${range.second} 失败: ${e.message}") + } + } + + Timber.d("[Mobile] DEBUG [Backup] 找到 ${callLogs.size} 条通话记录,总查询数 $totalCallLogs") + Timber.i("[Mobile] INFO [Backup] 成功读取 ${callLogs.size} 条通话记录") + + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 备份通话记录异常: ${e.message}") + return callLogs.takeIf { it.isNotEmpty() } + } + + return callLogs + } + + private fun generateTimeRanges(ranges: Int = 4): List> { + val result = mutableListOf>() + val endTime = System.currentTimeMillis() + val startTime = endTime - (365L * 24 * 60 * 60 * 1000) + + val rangeSize = (endTime - startTime) / ranges + + for (i in 0 until ranges) { + val rangeStart = startTime + (i * rangeSize) + val rangeEnd = if (i == ranges - 1) endTime else startTime + ((i + 1) * rangeSize - 1) + result.add(Pair(rangeStart, rangeEnd)) + } + + return result + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogWriter.kt new file mode 100644 index 0000000..d67c0b0 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogWriter.kt @@ -0,0 +1,159 @@ +package imken.messagevault.mobile.data.backup + +import android.content.ContentResolver +import android.content.ContentValues +import android.content.Context +import android.net.Uri +import android.provider.CallLog +import android.provider.ContactsContract +import imken.messagevault.mobile.utils.PhoneNumberUtils +import imken.messagevault.sdk.backup.model.CallLogData +import imken.messagevault.sdk.backup.writer.CallLogWriter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.withContext +import timber.log.Timber + +class AndroidCallLogWriter( + private val context: Context +) : CallLogWriter { + + private val contentResolver: ContentResolver = context.contentResolver + + override suspend fun write(callLogs: List): Int = withContext(Dispatchers.IO) { + var restoredCount = 0 + val totalCount = callLogs.size + Timber.i("[Mobile] INFO [Restore] Starting call log restore, total: $totalCount") + + if (!hasCallLogPermissions()) { + Timber.e("[Mobile] ERROR [Restore] Missing call log permissions") + return@withContext 0 + } + + val fixedCallLogs = callLogs.map { callLog -> + if (callLog.number.isBlank()) { + callLog + } else { + val normalizedNumber = PhoneNumberUtils.normalizePhoneNumber(callLog.number) + if (normalizedNumber != callLog.number) { + Timber.d("[Mobile] DEBUG [Restore] Call log number normalized: ${callLog.number} -> $normalizedNumber") + callLog.copy(number = normalizedNumber) + } else { + callLog + } + } + } + + val callLogsByNumber = mutableMapOf>() + + fixedCallLogs.forEach { callLog -> + if (callLog.number.isNotBlank()) { + val normalized = PhoneNumberUtils.normalizePhoneNumber(callLog.number) + if (!callLogsByNumber.containsKey(normalized)) { + callLogsByNumber[normalized] = mutableListOf() + } + callLogsByNumber[normalized]!!.add(callLog) + } else { + val unknownKey = "unknown_${callLog.id}" + if (!callLogsByNumber.containsKey(unknownKey)) { + callLogsByNumber[unknownKey] = mutableListOf() + } + callLogsByNumber[unknownKey]!!.add(callLog) + } + } + + Timber.d("[Mobile] DEBUG [Restore] Grouped by normalized number, ${callLogsByNumber.size} unique contacts") + + var processedCount = 0 + + for ((_, numberCallLogs) in callLogsByNumber) { + for (callLog in numberCallLogs) { + try { + val values = ContentValues().apply { + put(CallLog.Calls.NUMBER, callLog.number) + put(CallLog.Calls.TYPE, callLog.type) + put(CallLog.Calls.DATE, callLog.date) + put(CallLog.Calls.DURATION, callLog.duration.toLong()) + put(CallLog.Calls.NEW, 0) + + if (callLog.number.isNotBlank()) { + val contactName = getContactNameFromNumber(callLog.number) + if (contactName != null) { + put(CallLog.Calls.CACHED_NAME, contactName) + Timber.d("[Mobile] DEBUG [Restore] Call log matched contact: ${callLog.number} -> $contactName") + } + } + } + + val uri = contentResolver.insert(CallLog.Calls.CONTENT_URI, values) + if (uri != null) { + restoredCount++ + } + + processedCount++ + if (processedCount % 10 == 0) { + delay(50) + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to restore call log: number=${callLog.number}, ${e.message}") + } + } + + delay(100) + } + + Timber.i("[Mobile] INFO [Restore] Call log restore complete: success=$restoredCount, total=$totalCount") + restoredCount + } + + private fun getContactNameFromNumber(phoneNumber: String): String? { + if (phoneNumber.isBlank()) return null + + val name = getContactNameByExactNumber(phoneNumber) + if (name != null) return name + + val variants = PhoneNumberUtils.getPossibleNumberVariants(phoneNumber) + for (variant in variants) { + val variantName = getContactNameByExactNumber(variant) + if (variantName != null) { + Timber.d("[Mobile] DEBUG [Restore] Matched contact via number variant: $phoneNumber -> $variant -> $variantName") + return variantName + } + } + + return null + } + + private fun getContactNameByExactNumber(phoneNumber: String): String? { + val uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)) + val projection = arrayOf(ContactsContract.PhoneLookup.DISPLAY_NAME) + + try { + val cursor = contentResolver.query(uri, projection, null, null, null) + cursor?.use { + if (it.moveToFirst()) { + return it.getString(it.getColumnIndexOrThrow(ContactsContract.PhoneLookup.DISPLAY_NAME)) + } + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to query contact name: number=$phoneNumber, ${e.message}") + } + + return null + } + + private fun hasCallLogPermissions(): Boolean { + val readPermission = android.Manifest.permission.READ_CALL_LOG + val writePermission = android.Manifest.permission.WRITE_CALL_LOG + + val readGranted = context.checkSelfPermission(readPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED + val writeGranted = context.checkSelfPermission(writePermission) == android.content.pm.PackageManager.PERMISSION_GRANTED + + if (!readGranted || !writeGranted) { + Timber.e("[Mobile] ERROR [Restore] Missing call log permissions: READ_CALL_LOG=$readGranted, WRITE_CALL_LOG=$writeGranted") + return false + } + + return true + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactReader.kt new file mode 100644 index 0000000..cec3c60 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactReader.kt @@ -0,0 +1,344 @@ +package imken.messagevault.mobile.data.backup + +import android.content.Context +import android.os.Build +import android.provider.ContactsContract +import imken.messagevault.sdk.backup.model.Contact +import imken.messagevault.sdk.backup.reader.ContactReader +import timber.log.Timber + +class AndroidContactReader(private val context: Context) : ContactReader { + + override suspend fun readContacts(): List? { + val contacts = mutableListOf() + + try { + val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_CONTACTS) + if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { + Timber.e("[Mobile] ERROR [Backup] 备份联系人失败: 没有 READ_CONTACTS 权限") + return null + } + + Timber.d("[Mobile] DEBUG [Backup] 开始读取联系人...") + + val uri = ContactsContract.Contacts.CONTENT_URI + val projection = arrayOf( + ContactsContract.Contacts._ID, + ContactsContract.Contacts.DISPLAY_NAME, + ContactsContract.Contacts.HAS_PHONE_NUMBER, + ContactsContract.Contacts.PHOTO_URI + ) + val sortOrder = "${ContactsContract.Contacts.DISPLAY_NAME} ASC" + + context.contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> + Timber.d("[Mobile] DEBUG [Backup] 找到 ${cursor.count} 个联系人") + + val idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID) + val nameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME) + val hasPhoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER) + val photoUriColumn = cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI) + + val batchSize = 50 + var contactsProcessed = 0 + + while (cursor.moveToNext()) { + try { + val id = if (idColumn != -1) cursor.getLong(idColumn) else 0 + val name = if (nameColumn != -1) cursor.getString(nameColumn) else "" + val hasPhone = if (hasPhoneColumn != -1) cursor.getInt(hasPhoneColumn) > 0 else false + + val phoneNumbers = mutableListOf() + val emails = mutableListOf() + val addresses = mutableListOf() + val websites = mutableListOf() + val socialProfiles = mutableListOf() + val relationships = mutableListOf() + var note: String? = null + val groups = mutableListOf() + val events = mutableListOf() + + if (hasPhone) { + val phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI + val phoneProjection = arrayOf( + ContactsContract.CommonDataKinds.Phone.NUMBER, + ContactsContract.CommonDataKinds.Phone.TYPE + ) + val phoneSelection = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} = ?" + val phoneSelectionArgs = arrayOf(id.toString()) + + context.contentResolver.query(phoneUri, phoneProjection, phoneSelection, phoneSelectionArgs, null)?.use { phoneCursor -> + val phoneNumberColumn = phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER) + + while (phoneCursor.moveToNext()) { + val phoneNumber = if (phoneNumberColumn != -1) phoneCursor.getString(phoneNumberColumn) else "" + if (phoneNumber.isNotBlank()) { + phoneNumbers.add(phoneNumber) + } + } + } + } + + val emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI + val emailProjection = arrayOf( + ContactsContract.CommonDataKinds.Email.ADDRESS, + ContactsContract.CommonDataKinds.Email.TYPE + ) + val emailSelection = "${ContactsContract.CommonDataKinds.Email.CONTACT_ID} = ?" + val emailSelectionArgs = arrayOf(id.toString()) + + context.contentResolver.query(emailUri, emailProjection, emailSelection, emailSelectionArgs, null)?.use { emailCursor -> + val emailAddressColumn = emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS) + + while (emailCursor.moveToNext()) { + val emailAddress = if (emailAddressColumn != -1) emailCursor.getString(emailAddressColumn) else "" + if (emailAddress.isNotBlank()) { + emails.add(emailAddress) + } + } + } + + val addressUri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI + val addressProjection = arrayOf( + ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, + ContactsContract.CommonDataKinds.StructuredPostal.TYPE + ) + val addressSelection = "${ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID} = ?" + val addressSelectionArgs = arrayOf(id.toString()) + + context.contentResolver.query(addressUri, addressProjection, addressSelection, addressSelectionArgs, null)?.use { addressCursor -> + val addressColumn = addressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS) + val addressTypeColumn = addressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE) + + while (addressCursor.moveToNext()) { + val address = if (addressColumn != -1) addressCursor.getString(addressColumn) else "" + val addressType = if (addressTypeColumn != -1) { + when (addressCursor.getInt(addressTypeColumn)) { + ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME -> "家庭" + ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK -> "工作" + else -> "其他" + } + } else "其他" + + if (address.isNotBlank()) { + addresses.add(Contact.Address(addressType, address)) + } + } + } + + val noteUri = ContactsContract.Data.CONTENT_URI + val noteProjection = arrayOf( + ContactsContract.CommonDataKinds.Note.NOTE + ) + val noteSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" + val noteSelectionArgs = arrayOf( + id.toString(), + ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE + ) + + context.contentResolver.query(noteUri, noteProjection, noteSelection, noteSelectionArgs, null)?.use { noteCursor -> + val noteColumn = noteCursor.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE) + + if (noteCursor.moveToFirst()) { + note = if (noteColumn != -1) noteCursor.getString(noteColumn) else null + } + } + + val websiteUri = ContactsContract.Data.CONTENT_URI + val websiteProjection = arrayOf( + ContactsContract.CommonDataKinds.Website.URL + ) + val websiteSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" + val websiteSelectionArgs = arrayOf( + id.toString(), + ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE + ) + + context.contentResolver.query(websiteUri, websiteProjection, websiteSelection, websiteSelectionArgs, null)?.use { websiteCursor -> + val urlColumn = websiteCursor.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL) + + while (websiteCursor.moveToNext()) { + val url = if (urlColumn != -1) websiteCursor.getString(urlColumn) else "" + if (url.isNotBlank()) { + websites.add(url) + } + } + } + + val eventUri = ContactsContract.Data.CONTENT_URI + val eventProjection = arrayOf( + ContactsContract.CommonDataKinds.Event.START_DATE, + ContactsContract.CommonDataKinds.Event.TYPE + ) + val eventSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" + val eventSelectionArgs = arrayOf( + id.toString(), + ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE + ) + + context.contentResolver.query(eventUri, eventProjection, eventSelection, eventSelectionArgs, null)?.use { eventCursor -> + val dateColumn = eventCursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE) + val typeColumn = eventCursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.TYPE) + + while (eventCursor.moveToNext()) { + val date = if (dateColumn != -1) eventCursor.getString(dateColumn) else "" + val type = if (typeColumn != -1) { + when (eventCursor.getInt(typeColumn)) { + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY -> "生日" + ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY -> "纪念日" + else -> "其他" + } + } else "其他" + + if (date.isNotBlank()) { + events.add(Contact.Event(type, date)) + } + } + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val groupUri = ContactsContract.Data.CONTENT_URI + val groupProjection = arrayOf( + ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + ) + val groupSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" + val groupSelectionArgs = arrayOf( + id.toString(), + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + ) + + context.contentResolver.query(groupUri, groupProjection, groupSelection, groupSelectionArgs, null)?.use { groupCursor -> + val groupIdColumn = groupCursor.getColumnIndex(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID) + + while (groupCursor.moveToNext()) { + val groupId = if (groupIdColumn != -1) groupCursor.getLong(groupIdColumn) else -1 + + if (groupId != -1L) { + val groupNameUri = ContactsContract.Groups.CONTENT_URI + val groupNameProjection = arrayOf( + ContactsContract.Groups.TITLE + ) + val groupNameSelection = "${ContactsContract.Groups._ID} = ?" + val groupNameSelectionArgs = arrayOf(groupId.toString()) + + context.contentResolver.query(groupNameUri, groupNameProjection, groupNameSelection, groupNameSelectionArgs, null)?.use { groupNameCursor -> + val groupNameColumn = groupNameCursor.getColumnIndex(ContactsContract.Groups.TITLE) + + if (groupNameCursor.moveToFirst()) { + val groupName = if (groupNameColumn != -1) groupNameCursor.getString(groupNameColumn) else "" + if (groupName.isNotBlank()) { + groups.add(groupName) + } + } + } + } + } + } + } + + val relationUri = ContactsContract.Data.CONTENT_URI + val relationProjection = arrayOf( + ContactsContract.CommonDataKinds.Relation.NAME, + ContactsContract.CommonDataKinds.Relation.TYPE + ) + val relationSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" + val relationSelectionArgs = arrayOf( + id.toString(), + ContactsContract.CommonDataKinds.Relation.CONTENT_ITEM_TYPE + ) + + context.contentResolver.query(relationUri, relationProjection, relationSelection, relationSelectionArgs, null)?.use { relationCursor -> + val nameColumn = relationCursor.getColumnIndex(ContactsContract.CommonDataKinds.Relation.NAME) + val typeColumn = relationCursor.getColumnIndex(ContactsContract.CommonDataKinds.Relation.TYPE) + + while (relationCursor.moveToNext()) { + val relName = if (nameColumn != -1) relationCursor.getString(nameColumn) else "" + val relType = if (typeColumn != -1) { + when (relationCursor.getInt(typeColumn)) { + ContactsContract.CommonDataKinds.Relation.TYPE_SPOUSE -> "配偶" + ContactsContract.CommonDataKinds.Relation.TYPE_CHILD -> "子女" + ContactsContract.CommonDataKinds.Relation.TYPE_PARENT -> "父母" + else -> "其他" + } + } else "其他" + + if (relName.isNotBlank()) { + relationships.add(Contact.Relationship(relType, relName)) + } + } + } + + val socialUri = ContactsContract.Data.CONTENT_URI + val socialProjection = arrayOf( + ContactsContract.Data.MIMETYPE, + ContactsContract.Data.DATA1 + ) + val socialSelection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} IN (?, ?, ?)" + val socialSelectionArgs = arrayOf( + id.toString(), + "vnd.android.cursor.item/com.whatsapp.profile", + "vnd.android.cursor.item/com.facebook.profile", + "vnd.android.cursor.item/com.twitter.android.profile" + ) + + context.contentResolver.query(socialUri, socialProjection, socialSelection, socialSelectionArgs, null)?.use { socialCursor -> + val mimeTypeColumn = socialCursor.getColumnIndex(ContactsContract.Data.MIMETYPE) + val data1Column = socialCursor.getColumnIndex(ContactsContract.Data.DATA1) + + while (socialCursor.moveToNext()) { + val mimeType = if (mimeTypeColumn != -1) socialCursor.getString(mimeTypeColumn) else "" + val data = if (data1Column != -1) socialCursor.getString(data1Column) else "" + + if (data.isNotBlank()) { + val socialType = when { + mimeType.contains("whatsapp") -> "WhatsApp" + mimeType.contains("facebook") -> "Facebook" + mimeType.contains("twitter") -> "Twitter" + else -> "其他" + } + + socialProfiles.add(Contact.SocialProfile(socialType, data)) + } + } + } + + if (name.isNotBlank() || phoneNumbers.isNotEmpty() || emails.isNotEmpty()) { + val contact = Contact( + id = id, + name = name, + phoneNumbers = phoneNumbers, + emails = if (emails.isNotEmpty()) emails else null, + addresses = if (addresses.isNotEmpty()) addresses else null, + note = note, + groups = if (groups.isNotEmpty()) groups else null, + websites = if (websites.isNotEmpty()) websites else null, + events = if (events.isNotEmpty()) events else null, + relationships = if (relationships.isNotEmpty()) relationships else null, + socialProfiles = if (socialProfiles.isNotEmpty()) socialProfiles else null + ) + contacts.add(contact) + } + + contactsProcessed++ + if (contactsProcessed % batchSize == 0) { + Timber.d("[Mobile] DEBUG [Backup] 已处理 $contactsProcessed/${cursor.count} 个联系人") + } + + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 处理单个联系人时出错: ${e.message}") + } + } + } ?: run { + Timber.e("[Mobile] ERROR [Backup] 备份联系人失败: 无法查询联系人内容提供者") + return null + } + + Timber.i("[Mobile] INFO [Backup] 成功读取 ${contacts.size} 个联系人") + + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 备份联系人异常: ${e.message}") + return null + } + + return contacts + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactWriter.kt new file mode 100644 index 0000000..4828fd1 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidContactWriter.kt @@ -0,0 +1,85 @@ +package imken.messagevault.mobile.data.backup + +import android.content.ContentProviderOperation +import android.content.ContentResolver +import android.content.Context +import android.provider.ContactsContract +import imken.messagevault.sdk.backup.model.ContactData +import imken.messagevault.sdk.backup.writer.ContactWriter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import timber.log.Timber + +class AndroidContactWriter( + private val context: Context +) : ContactWriter { + + private val contentResolver: ContentResolver = context.contentResolver + + override suspend fun write(contacts: List): Int = withContext(Dispatchers.IO) { + var restoredCount = 0 + val totalCount = contacts.size + Timber.i("[Mobile] INFO [Restore] Starting contact restore, total: $totalCount") + + if (!hasContactsPermissions()) { + Timber.e("[Mobile] ERROR [Restore] Missing contacts permissions") + return@withContext 0 + } + + contacts.forEachIndexed { index, contact -> + try { + val operations = ArrayList() + + val rawContactInsertIndex = operations.size + operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) + .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) + .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) + .build()) + + operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) + .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) + .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) + .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.name) + .build()) + + contact.phoneNumbers.forEach { phoneNumber -> + operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) + .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) + .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) + .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber) + .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) + .build()) + } + + try { + val results = contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + if (results.isNotEmpty()) { + restoredCount++ + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to restore contact: batch operation exception: ${e.message}") + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to restore contact: ID=${contact.id}, name=${contact.name}, ${e.message}") + } + } + + Timber.i("[Mobile] INFO [Restore] Contact restore complete: success=$restoredCount, total=$totalCount") + restoredCount + } + + private fun hasContactsPermissions(): Boolean { + val readPermission = android.Manifest.permission.READ_CONTACTS + val writePermission = android.Manifest.permission.WRITE_CONTACTS + + val readGranted = context.checkSelfPermission(readPermission) == android.content.pm.PackageManager.PERMISSION_GRANTED + val writeGranted = context.checkSelfPermission(writePermission) == android.content.pm.PackageManager.PERMISSION_GRANTED + + if (!readGranted || !writeGranted) { + Timber.e("[Mobile] ERROR [Restore] Missing contacts permissions: READ_CONTACTS=$readGranted, WRITE_CONTACTS=$writeGranted") + return false + } + + return true + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt new file mode 100644 index 0000000..12c3313 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt @@ -0,0 +1,94 @@ +package imken.messagevault.mobile.data.backup + +import android.content.Context +import android.provider.Telephony +import imken.messagevault.mobile.utils.PhoneNumberUtils +import imken.messagevault.sdk.backup.model.Message +import imken.messagevault.sdk.backup.reader.SmsReader +import timber.log.Timber + +class AndroidSmsReader(private val context: Context) : SmsReader { + + override suspend fun readSms(): List? { + val messages = mutableListOf() + + try { + val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_SMS) + if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { + Timber.e("[Mobile] ERROR [Backup] 备份短信失败: 没有 READ_SMS 权限") + return null + } + + Timber.d("[Mobile] DEBUG [Backup] 开始读取短信...") + + val uri = Telephony.Sms.CONTENT_URI + val projection = arrayOf( + Telephony.Sms._ID, + Telephony.Sms.ADDRESS, + Telephony.Sms.BODY, + Telephony.Sms.DATE, + Telephony.Sms.TYPE, + Telephony.Sms.READ, + Telephony.Sms.STATUS + ) + val sortOrder = "${Telephony.Sms.DATE} DESC" + + context.contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> + Timber.d("[Mobile] DEBUG [Backup] 找到 ${cursor.count} 条短信") + + val idColumn = cursor.getColumnIndex(Telephony.Sms._ID) + val addressColumn = cursor.getColumnIndex(Telephony.Sms.ADDRESS) + val bodyColumn = cursor.getColumnIndex(Telephony.Sms.BODY) + val dateColumn = cursor.getColumnIndex(Telephony.Sms.DATE) + val typeColumn = cursor.getColumnIndex(Telephony.Sms.TYPE) + val readColumn = cursor.getColumnIndex(Telephony.Sms.READ) + val statusColumn = cursor.getColumnIndex(Telephony.Sms.STATUS) + + while (cursor.moveToNext()) { + val id = if (idColumn != -1) cursor.getLong(idColumn) else 0 + + val originalAddress = if (addressColumn != -1) cursor.getString(addressColumn) else "" + + val normalizedAddress = if (originalAddress.isNotBlank()) { + val normalized = PhoneNumberUtils.normalizePhoneNumber(originalAddress) + if (normalized != originalAddress) { + Timber.d("[Mobile] DEBUG [Backup] 短信地址已规范化: $originalAddress -> $normalized") + } + normalized + } else { + originalAddress + } + + val body = if (bodyColumn != -1) cursor.getString(bodyColumn) else "" + val date = if (dateColumn != -1) cursor.getLong(dateColumn) else 0 + val type = if (typeColumn != -1) cursor.getInt(typeColumn) else 0 + val read = if (readColumn != -1) cursor.getInt(readColumn) else 0 + val status = if (statusColumn != -1) cursor.getInt(statusColumn) else 0 + + val message = Message( + id = id, + address = normalizedAddress, + body = body, + date = date, + type = type, + readState = read, + messageStatus = status + ) + + messages.add(message) + } + } ?: run { + Timber.e("[Mobile] ERROR [Backup] 备份短信失败: 无法查询短信内容提供者") + return null + } + + Timber.i("[Mobile] INFO [Backup] 成功读取 ${messages.size} 条短信") + + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Backup] 备份短信异常: ${e.message}") + return null + } + + return messages + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsWriter.kt new file mode 100644 index 0000000..c15f664 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsWriter.kt @@ -0,0 +1,107 @@ +package imken.messagevault.mobile.data.backup + +import android.content.ContentValues +import android.content.Context +import android.provider.Telephony +import imken.messagevault.sdk.backup.model.SmsData +import imken.messagevault.sdk.backup.writer.SmsWriter +import kotlinx.coroutines.delay +import timber.log.Timber + +class AndroidSmsWriter(private val context: Context) : SmsWriter { + + override suspend fun write(messages: List): Int { + var restoredCount = 0 + val totalCount = messages.size + Timber.i("[Mobile] INFO [Restore] 开始恢复短信,总数: $totalCount") + + val fixedMessages = validateAndFixMessageAddresses(messages) + val messagesByContact = fixedMessages.groupBy { it.address } + + var processedCount = 0 + + for ((address, contactMessages) in messagesByContact) { + Timber.d("[Mobile] DEBUG [Restore] 处理联系人消息: 联系人=$address, 消息数量=${contactMessages.size}") + + val sortedMessages = contactMessages.sortedBy { it.date } + + for (smsMessage in sortedMessages) { + try { + val values = ContentValues().apply { + put(Telephony.Sms.ADDRESS, smsMessage.address) + put(Telephony.Sms.BODY, smsMessage.body) + put(Telephony.Sms.DATE, smsMessage.date) + put(Telephony.Sms.TYPE, smsMessage.type) + put(Telephony.Sms.READ, smsMessage.readState ?: 0) + put(Telephony.Sms.STATUS, smsMessage.messageStatus ?: 0) + + if (smsMessage.threadId > 0) { + put(Telephony.Sms.THREAD_ID, smsMessage.threadId) + } + } + + val uri = context.contentResolver.insert(Telephony.Sms.CONTENT_URI, values) + if (uri != null) { + restoredCount++ + } + + processedCount++ + + if (processedCount % 10 == 0) { + delay(50) + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] 恢复短信失败: 地址=${smsMessage.address}, ${e.message}") + } + } + + delay(100) + } + + Timber.i("[Mobile] INFO [Restore] 短信恢复完成: 成功=$restoredCount, 总数=$totalCount") + return restoredCount + } + + private fun validateAndFixMessageAddresses(messages: List): List { + Timber.d("[Mobile] DEBUG [Restore] 开始验证和修复短信地址,数量: ${messages.size}") + + val emptyAddressCount = messages.count { it.address.isNullOrBlank() } + if (emptyAddressCount > 0) { + Timber.w("[Mobile] WARN [Restore] 发现 $emptyAddressCount 条短信缺少有效地址,将进行修复") + } + + return messages.map { originalMessage -> + if (originalMessage.address.isNullOrBlank()) { + SmsData( + id = originalMessage.id, + address = "unknown_${originalMessage.id}", + body = originalMessage.body, + date = originalMessage.date, + type = originalMessage.type, + readState = originalMessage.readState, + messageStatus = originalMessage.messageStatus, + threadId = originalMessage.threadId + ) + } else { + val normalizedAddress = imken.messagevault.mobile.utils.PhoneNumberUtils.normalizePhoneNumber(originalMessage.address) + + if (normalizedAddress != originalMessage.address) { + Timber.d("[Mobile] DEBUG [Restore] 标准化地址: ${originalMessage.address} -> $normalizedAddress") + + SmsData( + id = originalMessage.id, + address = normalizedAddress, + body = originalMessage.body, + date = originalMessage.date, + type = originalMessage.type, + readState = originalMessage.readState, + messageStatus = originalMessage.messageStatus, + threadId = originalMessage.threadId + ) + } else { + originalMessage + } + } + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/RestorePermissionHelper.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/RestorePermissionHelper.kt new file mode 100644 index 0000000..4b267e0 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/RestorePermissionHelper.kt @@ -0,0 +1,174 @@ +package imken.messagevault.mobile.data.backup + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.provider.Settings +import android.provider.Telephony +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import timber.log.Timber + +object RestorePermissionHelper { + + fun isDefaultSmsApp(context: Context): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + try { + val roleManager = context.getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager + if (roleManager != null && roleManager.isRoleHeld(android.app.role.RoleManager.ROLE_SMS)) { + return true + } + } catch (_: Exception) { + } + } + val defaultSmsPackage = Telephony.Sms.getDefaultSmsPackage(context) + return defaultSmsPackage == context.packageName + } catch (_: Exception) { + return false + } + } + return true + } + + fun requestDefaultSmsApp(activity: Activity, launcher: ActivityResultLauncher) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + var requestSent = false + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + try { + val roleManager = activity.getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager + if (roleManager != null && roleManager.isRoleAvailable(android.app.role.RoleManager.ROLE_SMS)) { + if (!roleManager.isRoleHeld(android.app.role.RoleManager.ROLE_SMS)) { + val roleRequestIntent = roleManager.createRequestRoleIntent(android.app.role.RoleManager.ROLE_SMS) + launcher.launch(roleRequestIntent) + requestSent = true + } else { + return + } + } + } catch (_: Exception) { + } + } + + if (!requestSent) { + val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.packageName) + if (intent.resolveActivity(activity.packageManager) != null) { + launcher.launch(intent) + requestSent = true + } + } + + if (!requestSent) { + try { + val defaultAppsIntent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) + if (defaultAppsIntent.resolveActivity(activity.packageManager) != null) { + activity.startActivity(defaultAppsIntent) + Toast.makeText(activity, "请在默认应用设置中将本应用设为默认短信应用", Toast.LENGTH_LONG).show() + requestSent = true + } + } catch (_: Exception) { + } + + if (!requestSent) { + try { + val settingsIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + settingsIntent.data = Uri.parse("package:" + activity.packageName) + activity.startActivity(settingsIntent) + Toast.makeText(activity, "请在应用设置中授予短信相关权限,然后设置为默认短信应用", Toast.LENGTH_LONG).show() + } catch (_: Exception) { + try { + val mainSettingsIntent = Intent(Settings.ACTION_SETTINGS) + activity.startActivity(mainSettingsIntent) + Toast.makeText(activity, "请在系统设置中找到应用管理,将本应用设为默认短信应用", Toast.LENGTH_LONG).show() + } catch (_: Exception) { + Toast.makeText(activity, "无法自动打开设置,请手动将本应用设为默认短信应用", Toast.LENGTH_LONG).show() + } + } + } + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to request default SMS app: ${e.message}") + Toast.makeText(activity, "无法请求默认短信应用权限: ${e.message}", Toast.LENGTH_LONG).show() + } + } + } + + fun checkAndRequestPermissions(activity: Activity, requestCode: Int): Boolean { + val requiredPermissions = mutableListOf() + + if (!hasSmsPermissions(activity)) { + requiredPermissions.add(android.Manifest.permission.READ_SMS) + requiredPermissions.add(android.Manifest.permission.SEND_SMS) + requiredPermissions.add(android.Manifest.permission.RECEIVE_SMS) + } + + if (!hasCallLogPermissions(activity)) { + requiredPermissions.add(android.Manifest.permission.READ_CALL_LOG) + requiredPermissions.add(android.Manifest.permission.WRITE_CALL_LOG) + } + + if (!hasContactsPermissions(activity)) { + requiredPermissions.add(android.Manifest.permission.READ_CONTACTS) + requiredPermissions.add(android.Manifest.permission.WRITE_CONTACTS) + } + + if (requiredPermissions.isNotEmpty()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val specialPermissions = mutableListOf() + val normalPermissions = mutableListOf() + + for (permission in requiredPermissions) { + if (permission == android.Manifest.permission.READ_SMS || + permission == android.Manifest.permission.READ_CALL_LOG || + permission == android.Manifest.permission.WRITE_CALL_LOG) { + specialPermissions.add(permission) + } else { + normalPermissions.add(permission) + } + } + + if (normalPermissions.isNotEmpty()) { + activity.requestPermissions(normalPermissions.toTypedArray(), requestCode) + } + + if (specialPermissions.isNotEmpty()) { + try { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intent.data = Uri.parse("package:" + activity.packageName) + activity.startActivity(intent) + } catch (_: Exception) { + } + } + } else { + activity.requestPermissions(requiredPermissions.toTypedArray(), requestCode) + } + return false + } + + return true + } + + fun hasSmsPermissions(context: Context): Boolean { + val readGranted = context.checkSelfPermission(android.Manifest.permission.READ_SMS) == android.content.pm.PackageManager.PERMISSION_GRANTED + val sendGranted = context.checkSelfPermission(android.Manifest.permission.SEND_SMS) == android.content.pm.PackageManager.PERMISSION_GRANTED + return readGranted && sendGranted + } + + fun hasCallLogPermissions(context: Context): Boolean { + val readGranted = context.checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) == android.content.pm.PackageManager.PERMISSION_GRANTED + val writeGranted = context.checkSelfPermission(android.Manifest.permission.WRITE_CALL_LOG) == android.content.pm.PackageManager.PERMISSION_GRANTED + return readGranted && writeGranted + } + + fun hasContactsPermissions(context: Context): Boolean { + val readGranted = context.checkSelfPermission(android.Manifest.permission.READ_CONTACTS) == android.content.pm.PackageManager.PERMISSION_GRANTED + val writeGranted = context.checkSelfPermission(android.Manifest.permission.WRITE_CONTACTS) == android.content.pm.PackageManager.PERMISSION_GRANTED + return readGranted && writeGranted + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/entity/CallLogsEntity.kt b/android/app/src/main/java/imken/messagevault/mobile/data/entity/CallLogsEntity.kt deleted file mode 100644 index 0f0b0d7..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/entity/CallLogsEntity.kt +++ /dev/null @@ -1,49 +0,0 @@ -package imken.messagevault.mobile.data.entity - -import androidx.room.Entity -import androidx.room.PrimaryKey - -/** - * 通话记录实体类 - * - * 用于将通话记录数据存储在本地数据库中 - */ -@Entity(tableName = "call_logs") -data class CallLogsEntity( - /** - * 主键ID - */ - @PrimaryKey(autoGenerate = true) - val id: Long = 0, - - /** - * 电话号码 - */ - val number: String, - - /** - * 联系人名称 - */ - val name: String, - - /** - * 通话时间戳 - */ - val date: Long, - - /** - * 通话持续时间(秒) - */ - val duration: Int, - - /** - * 通话类型 - * 1: 来电未接 - * 2: 去电 - * 3: 来电已接 - * 4: 语音信箱 - * 5: 拒接 - * 6: 屏蔽的来电 - */ - val type: Int -) diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/model/Entity.kt b/android/app/src/main/java/imken/messagevault/mobile/data/model/Entity.kt deleted file mode 100644 index 5938156..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/model/Entity.kt +++ /dev/null @@ -1,39 +0,0 @@ -package imken.messagevault.mobile.data.model - -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import java.io.File - -/** - * 备份信息实体类 - */ -data class BackupInfo( - val id: Long = 0, - val timestamp: Long, // 备份时间戳,确保此字段存在 - val fileName: String, - val smsCount: Int = 0, // 短信数量,确保此字段存在 - val callLogsCount: Int = 0, // 通话记录数量,确保此字段存在 - val backupPath: String -) - -/** - * 备份文件实体类 - */ -/* -data class BackupFile( - val file: File, - val name: String = file.name, - val timestamp: Long = file.lastModified(), - val deviceName: String = "Android设备", - val smsCount: Int? = null, - val callLogsCount: Int? = null, - val fileSize: Long = file.length(), - val lastModified: Long = file.lastModified() -) -*/ - -/** - * 应用备份状态 - */ -data class EmptyEntity(val id: String = "") // 添加至少一个参数 - diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/model/UiState.kt b/android/app/src/main/java/imken/messagevault/mobile/data/model/UiState.kt deleted file mode 100644 index c77a8ac..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/model/UiState.kt +++ /dev/null @@ -1,8 +0,0 @@ -package imken.messagevault.mobile.data.model - -import androidx.compose.runtime.MutableState - -/** - * 表示UI状态的接口,用于BackupViewModel等 - */ -interface UiState : MutableState diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFile.kt b/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFile.kt deleted file mode 100644 index b90a733..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFile.kt +++ /dev/null @@ -1,17 +0,0 @@ -package imken.messagevault.mobile.data.models - -import java.io.File - -/** - * 表示一个备份文件 - */ -data class BackupFile( - val id: String, - val deviceId: String, - val fileName: String, - val timestamp: Long, - val appVersion: String, - val size: Long, - val localFile: File? = null - // 其他必要属性 -) diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFileInfo.kt b/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFileInfo.kt deleted file mode 100644 index 2c36407..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupFileInfo.kt +++ /dev/null @@ -1,37 +0,0 @@ -package imken.messagevault.mobile.data.models - -import imken.messagevault.mobile.data.BackupFile -import java.io.File -import java.util.Date - -/** - * 备份文件信息模型 - */ -data class BackupFileInfo( - val id: String, - val name: String, - val path: String, - val deviceName: String, - val date: Date, - val smsCount: Int, - val callLogsCount: Int, - val fileSize: Long, - val file: File? = null -) { - companion object { - // 转换方法,用于将 BackupFile 转换为 BackupFileInfo - fun fromBackupFile(backupFile: BackupFile): BackupFileInfo { - return BackupFileInfo( - id = backupFile.id, - name = backupFile.fileName, - path = backupFile.localFile?.absolutePath ?: "", - deviceName = backupFile.deviceId, - date = Date(backupFile.timestamp), - smsCount = 0, // 这些信息在BackupFile中不存在,设置默认值 - callLogsCount = 0, - fileSize = backupFile.size, - file = backupFile.localFile - ) - } - } -} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupModels.kt b/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupModels.kt deleted file mode 100644 index 54b07ce..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/data/models/BackupModels.kt +++ /dev/null @@ -1,61 +0,0 @@ -package imken.messagevault.mobile.data.models - -import java.io.File - -// 备份数据模型 -data class BackupData( - val formatVersion: Int = SUPPORTED_VERSION, - val messages: List = emptyList(), - val callLogs: List = emptyList(), - val contacts: List = emptyList() -) - -// 消息数据模型 -data class MessageData( - val id: Long, - val address: String, - val body: String, - val date: Long, - val type: Int, - val read: Boolean? = false, - val status: Int = 0 -) - -// 通话记录数据模型 -data class CallLogData( - val id: Long, - val number: String, - val name: String?, - val date: Long, - val duration: Int, - val type: Int -) - -// 联系人数据模型 -data class ContactData( - val id: Long, - val name: String, - val phoneNumbers: List, - val emails: List? = null -) - -// 备份状态枚举 -sealed class BackupState { - object Idle : BackupState() - object Preparing : BackupState() - data class InProgress(val progress: Int) : BackupState() - object Completed : BackupState() - data class Error(val message: String) : BackupState() -} - -// 恢复状态枚举 -sealed class RestoreState { - object Idle : RestoreState() - object Preparing : RestoreState() - data class InProgress(val progress: Int) : RestoreState() - object Completed : RestoreState() - data class Error(val message: String) : RestoreState() -} - -// 支持的备份格式版本 -const val SUPPORTED_VERSION = 1 diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/BackupData.kt b/android/app/src/main/java/imken/messagevault/mobile/model/BackupData.kt index b787302..fc1114a 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/BackupData.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/BackupData.kt @@ -1,30 +1,3 @@ package imken.messagevault.mobile.model -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName -import imken.messagevault.mobile.model.Contact - -/** - * 备份数据模型 - */ -data class BackupData( - @Expose - @SerializedName("messages") - val messages: List? = emptyList(), - - @Expose - @SerializedName("call_logs") - val callLogs: List? = emptyList(), - - @Expose - @SerializedName("contacts") - val contacts: List? = emptyList(), - - @Expose - @SerializedName("timestamp") - val timestamp: Long = System.currentTimeMillis(), - - @Expose - @SerializedName("device_info") - val deviceInfo: String = "" -) +typealias BackupData = imken.messagevault.sdk.backup.model.BackupData diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/BackupResult.kt b/android/app/src/main/java/imken/messagevault/mobile/model/BackupResult.kt index c81133f..57a8b0f 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/BackupResult.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/BackupResult.kt @@ -1,16 +1,3 @@ package imken.messagevault.mobile.model -/** - * 表示备份操作的结果 - */ -data class BackupResult( - val success: Boolean, - val timestamp: Long, - val appVersion: String, - val deviceId: String, - val smsCount: Int = 0, - val callLogCount: Int = 0, - val fileName: String? = null, - val filePath: String? = null, - val errorMessage: String? = null -) +typealias BackupResult = imken.messagevault.sdk.backup.model.BackupResult diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/CallLog.kt b/android/app/src/main/java/imken/messagevault/mobile/model/CallLog.kt index 54e8f8e..e1d7974 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/CallLog.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/CallLog.kt @@ -1,81 +1,3 @@ package imken.messagevault.mobile.model -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName -import android.content.ContentValues -import android.provider.CallLog.Calls - -/** - * 通话记录模型 - * - * 表示一条通话记录,包含ID、电话号码、类型、时间、持续时间和联系人名称等信息 - * 优化的JSON序列化,使用@Expose和简短的@SerializedName值减小文件大小 - */ -data class CallLog( - /** - * 通话记录ID - */ - @Expose - @SerializedName("id") - val id: Long, - - /** - * 电话号码 - */ - @Expose - @SerializedName("num") - val number: String, - - /** - * 通话类型 - * 1: 来电未接 - * 2: 去电 - * 3: 来电已接 - * 4: 语音信箱 - * 5: 拒接 - * 6: 屏蔽的来电 - */ - @Expose - @SerializedName("type") - val type: Int, - - /** - * 通话时间戳(Unix毫秒) - */ - @Expose - @SerializedName("date") - val date: Long, - - /** - * 通话持续时间(秒) - */ - @Expose - @SerializedName("dur") - val duration: Int, - - /** - * 联系人名称(可选) - * 与电话号码关联的联系人姓名 - */ - @Expose - @SerializedName("name") - val contact: String? = null -) { - /** - * 转换为ContentValues以便写入系统通话记录数据库 - */ - fun toContentValues(): ContentValues { - return ContentValues().apply { - // 注意:不设置ID,让系统自动生成ID - put(Calls.NUMBER, number) - put(Calls.TYPE, type) - put(Calls.DATE, date) - put(Calls.DURATION, duration) - contact?.let { put(Calls.CACHED_NAME, it) } - // 设置新通话记录为已读 - put(Calls.NEW, 0) - // 标记为非语音邮件 - put(Calls.IS_READ, 1) - } - } -} +typealias CallLog = imken.messagevault.sdk.backup.model.CallLog diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/Contact.kt b/android/app/src/main/java/imken/messagevault/mobile/model/Contact.kt index 2c6af3e..5ffbaaf 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/Contact.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/Contact.kt @@ -1,170 +1,3 @@ package imken.messagevault.mobile.model -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -/** - * 联系人数据模型 - * - * 表示一个联系人,包含ID、姓名、电话号码列表和电子邮件列表 - */ -data class Contact( - /** - * 联系人ID - */ - @Expose - @SerializedName("id") - val id: Long, - - /** - * 联系人姓名 - */ - @Expose - @SerializedName("name") - val name: String, - - /** - * 联系人电话号码列表 - */ - @Expose - @SerializedName("phones") - val phoneNumbers: MutableList, - - /** - * 联系人电子邮件列表 - */ - @Expose - @SerializedName("emails") - val emails: List? = null, - - /** - * 联系人地址信息 - */ - @Expose - @SerializedName("addresses") - val addresses: List
? = null, - - /** - * 联系人头像数据(Base64编码) - * 不使用@Expose注解,这样不会序列化到JSON中,减小文件大小 - */ - val photoData: String? = null, - - /** - * 联系人备注 - */ - @Expose - @SerializedName("note") - val note: String? = null, - - /** - * 联系人所属组 - */ - @Expose - @SerializedName("groups") - val groups: List? = null, - - /** - * 联系人网站 - */ - @Expose - @SerializedName("websites") - val websites: List? = null, - - /** - * 联系人事件(如生日、纪念日) - */ - @Expose - @SerializedName("events") - val events: List? = null, - - /** - * 联系人关系(如配偶、子女) - */ - @Expose - @SerializedName("relationships") - val relationships: List? = null, - - /** - * 联系人社交资料 - */ - @Expose - @SerializedName("social_profiles") - val socialProfiles: List? = null -) { - /** - * 联系人地址数据类 - */ - data class Address( - /** - * 地址类型(家庭、工作等) - */ - @Expose - @SerializedName("type") - val type: String, - - /** - * 地址内容 - */ - @Expose - @SerializedName("value") - val value: String - ) - - /** - * 联系人事件数据类 - */ - data class Event( - /** - * 事件类型(生日、纪念日等) - */ - @Expose - @SerializedName("type") - val type: String, - - /** - * 事件日期 - */ - @Expose - @SerializedName("date") - val date: String - ) - - /** - * 联系人关系数据类 - */ - data class Relationship( - /** - * 关系类型(配偶、子女等) - */ - @Expose - @SerializedName("type") - val type: String, - - /** - * 关系人名称 - */ - @Expose - @SerializedName("name") - val name: String - ) - - /** - * 联系人社交资料数据类 - */ - data class SocialProfile( - /** - * 社交媒体类型(如Facebook、Twitter等) - */ - @Expose - @SerializedName("type") - val type: String, - - /** - * 社交媒体账号或链接 - */ - @Expose - @SerializedName("value") - val value: String - ) -} \ No newline at end of file +typealias Contact = imken.messagevault.sdk.backup.model.Contact diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/Message.kt b/android/app/src/main/java/imken/messagevault/mobile/model/Message.kt index 785d61b..e035a6c 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/Message.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/Message.kt @@ -1,88 +1,3 @@ package imken.messagevault.mobile.model -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName -import android.content.ContentValues -import android.provider.Telephony - -/** - * 短信消息模型类 - * - * 优化的JSON序列化,使用@Expose和简短的@SerializedName值减小文件大小 - */ -data class Message( - /** - * 短信ID - */ - @Expose - @SerializedName("id") - val id: Long = 0, - - /** - * 短信地址(发送人/接收人号码) - */ - @Expose - @SerializedName("addr") - val address: String, - - /** - * 短信内容 - */ - @Expose - @SerializedName("body") - val body: String? = "", - - /** - * 短信时间戳(毫秒) - */ - @Expose - @SerializedName("date") - val date: Long, - - /** - * 短信类型 - * 1: 收件箱, 2: 发送, 3: 草稿, 4: 发件箱, 5: 失败, 6: 排队 - */ - @Expose - @SerializedName("type") - val type: Int, - - /** - * 已读状态 (0: 未读, 1: 已读) - * 不需要在JSON中,因此没有@Expose注解 - */ - @SerializedName("read") - val readState: Int? = 0, - - /** - * 短信状态 - * 不需要在JSON中,因此没有@Expose注解 - */ - @SerializedName("status") - val messageStatus: Int? = 0, - - /** - * 对话ID - * 不需要在JSON中,因此没有@Expose注解 - */ - @SerializedName("thread_id") - val threadId: Long = 0 -) { - /** - * 转换为ContentValues以便写入系统短信数据库 - */ - fun toContentValues(): ContentValues { - return ContentValues().apply { - // 不设置ID,让系统自动生成 - put(Telephony.Sms.ADDRESS, address) - put(Telephony.Sms.BODY, body ?: "") - put(Telephony.Sms.DATE, date) - put(Telephony.Sms.TYPE, type) - readState?.let { put(Telephony.Sms.READ, it) } - messageStatus?.let { put(Telephony.Sms.STATUS, it) } - if (threadId > 0) { - put(Telephony.Sms.THREAD_ID, threadId) - } - } - } -} +typealias Message = imken.messagevault.sdk.backup.model.Message diff --git a/android/app/src/main/java/imken/messagevault/mobile/model/UploadResult.kt b/android/app/src/main/java/imken/messagevault/mobile/model/UploadResult.kt index 9d8e554..94300ac 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/model/UploadResult.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/model/UploadResult.kt @@ -1,10 +1,3 @@ package imken.messagevault.mobile.model -/** - * 表示文件上传操作的结果 - */ -data class UploadResult( - val success: Boolean, - val fileId: String? = null, - val errorMessage: String? = null -) +typealias UploadResult = imken.messagevault.sdk.backup.model.UploadResult diff --git a/android/app/src/main/java/imken/messagevault/mobile/models/DataModels.kt b/android/app/src/main/java/imken/messagevault/mobile/models/DataModels.kt deleted file mode 100644 index cc0925f..0000000 --- a/android/app/src/main/java/imken/messagevault/mobile/models/DataModels.kt +++ /dev/null @@ -1,43 +0,0 @@ -package imken.messagevault.mobile.models - -import java.io.File -import java.util.Date - -data class MessageDataOld( - val id: Long, - val address: String, - val body: String, - val date: Long, - val type: Int // 1: received, 2: sent -) - -data class CallLogDataOld( - val id: Long, - val number: String, - val name: String?, - val date: Long, - val duration: Int, - val type: Int // 1: incoming, 2: outgoing, 3: missed -) - -data class ContactDataOld( - val id: Long, - val name: String, - val phoneNumbers: List -) - -data class BackupFileInfoOld( - val file: File, - val name: String, - val date: Date, - val formatVersion: Int = 1 -) - -sealed class BackupStateOld { - object Idle : BackupStateOld() - object Preparing : BackupStateOld() - object InProgress : BackupStateOld() - data class Progress(val progress: Int, val message: String) : BackupStateOld() - object Completed : BackupStateOld() - data class Error(val message: String) : BackupStateOld() -} diff --git a/android/app/src/main/java/imken/messagevault/mobile/models/UiState.kt b/android/app/src/main/java/imken/messagevault/mobile/models/UiState.kt new file mode 100644 index 0000000..6484b2c --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/models/UiState.kt @@ -0,0 +1,5 @@ +package imken.messagevault.mobile.models + +import androidx.compose.runtime.MutableState + +interface UiState : MutableState diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt new file mode 100644 index 0000000..f7c8160 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt @@ -0,0 +1,144 @@ +package imken.messagevault.mobile.ui.navigation + +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Backup +import androidx.compose.material.icons.filled.MoreHoriz +import androidx.compose.material.icons.filled.Preview +import androidx.compose.material.icons.filled.Restore +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.navigation.NavDestination.Companion.hierarchy +import androidx.navigation.NavGraph.Companion.findStartDestination +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import imken.messagevault.mobile.R +import imken.messagevault.mobile.ui.screens.BackupScreen +import imken.messagevault.mobile.ui.screens.MoreScreen +import imken.messagevault.mobile.ui.screens.PreviewScreen +import imken.messagevault.mobile.ui.screens.RestoreScreen +import imken.messagevault.mobile.ui.viewmodels.BackupViewModel +import imken.messagevault.mobile.ui.viewmodels.RestoreViewModel + +sealed class NavigationItem(val route: String, val iconData: ImageVector, val labelResId: Int) { + object Backup : NavigationItem("backup", Icons.Filled.Backup, R.string.backup_tab) + object Restore : NavigationItem("restore", Icons.Filled.Restore, R.string.restore_tab) + object Preview : NavigationItem("preview", Icons.Filled.Preview, R.string.preview_tab) + object More : NavigationItem("more", Icons.Filled.MoreHoriz, R.string.more_tab) +} + +val navigationItems = listOf( + NavigationItem.Backup, + NavigationItem.Restore, + NavigationItem.Preview, + NavigationItem.More +) + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun MessageVaultAppWithNavigation( + backupViewModel: BackupViewModel, + restoreViewModel: RestoreViewModel, + navigationItems: List +) { + val navController = rememberNavController() + + Scaffold( + topBar = { + CenterAlignedTopAppBar( + title = { + Text( + text = stringResource(id = R.string.app_title), + style = MaterialTheme.typography.titleLarge + ) + } + ) + }, + bottomBar = { + NavigationBar { + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentDestination = navBackStackEntry?.destination + + navigationItems.forEach { item -> + NavigationBarItem( + icon = { Icon(item.iconData, contentDescription = null) }, + label = { Text(stringResource(item.labelResId)) }, + selected = currentDestination?.hierarchy?.any { it.route == item.route } == true, + onClick = { + navController.navigate(item.route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + } + } + } + ) { innerPadding -> + NavHost( + navController = navController, + startDestination = NavigationItem.Backup.route, + modifier = Modifier.padding(innerPadding) + ) { + composable(NavigationItem.Backup.route) { + BackupScreen( + permissionsGranted = backupViewModel.getPermissionsGranted(), + isOperating = backupViewModel.isOperating(), + backupStatus = backupViewModel.getBackupStatus(), + onBackupClick = { backupViewModel.startBackup() } + ) + } + composable(NavigationItem.Restore.route) { + val backupFiles by restoreViewModel.backupFiles.collectAsState(initial = emptyList()) + val selectedBackupFile by restoreViewModel.selectedBackupFile.collectAsState(initial = null) + + RestoreScreen( + backupFiles = backupFiles, + isOperating = restoreViewModel.isOperating.value, + restoreStatus = restoreViewModel.restoreStatus.value, + onRestoreClick = { backupFile -> + restoreViewModel.restoreBackupFile(backupFile) + }, + onBackupItemClick = { backupFile -> + restoreViewModel.selectBackupFile(backupFile) + }, + selectedBackupFile = selectedBackupFile, + viewModel = restoreViewModel + ) + } + composable(NavigationItem.Preview.route) { + PreviewScreen(permissionsGranted = backupViewModel.getPermissionsGranted()) + } + composable(NavigationItem.More.route) { + MoreScreen( + onNavigateToRestore = { + navController.navigate(NavigationItem.Restore.route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + } + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt new file mode 100644 index 0000000..5c3c391 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt @@ -0,0 +1,78 @@ +package imken.messagevault.mobile.ui.permission + +import android.Manifest +import android.content.pm.PackageManager +import android.os.Build +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat +import imken.messagevault.mobile.utils.PermissionUtils +import timber.log.Timber + +class PermissionHandler(private val activity: ComponentActivity) { + + companion object { + val REQUIRED_PERMISSIONS = arrayOf( + Manifest.permission.READ_SMS, + Manifest.permission.READ_CALL_LOG, + Manifest.permission.READ_CONTACTS, + Manifest.permission.SEND_SMS, + Manifest.permission.WRITE_CALL_LOG, + Manifest.permission.WRITE_CONTACTS, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + } + + private val requestPermissionLauncher = activity.registerForActivityResult( + ActivityResultContracts.RequestMultiplePermissions() + ) { permissions -> + val allGranted = permissions.entries.all { it.value } + if (allGranted) { + Timber.i("[Mobile] INFO [Permissions] 所有请求的权限已授予") + Toast.makeText(activity, "所有权限已授予,可以继续操作", Toast.LENGTH_SHORT).show() + } else { + val deniedPermissions = permissions.filterValues { !it }.keys + Timber.w("[Mobile] WARN [Permissions] 部分权限被拒绝: $deniedPermissions") + + if (deniedPermissions.any { activity.shouldShowRequestPermissionRationale(it) }) { + showPermissionRationaleDialog() + } else { + PermissionUtils.openAppSettings(activity) + Toast.makeText(activity, "请在设置中手动授予权限", Toast.LENGTH_LONG).show() + } + } + } + + fun checkPermissions(): Boolean { + val permissionsToCheck = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + arrayOf( + Manifest.permission.READ_SMS, + Manifest.permission.READ_CALL_LOG, + Manifest.permission.READ_CONTACTS, + Manifest.permission.SEND_SMS, + Manifest.permission.WRITE_CALL_LOG, + Manifest.permission.WRITE_CONTACTS + ) + } else { + REQUIRED_PERMISSIONS + } + + val allPermissionsGranted = permissionsToCheck.all { + ContextCompat.checkSelfPermission(activity, it) == PackageManager.PERMISSION_GRANTED + } + + if (allPermissionsGranted) { + Timber.i("[Mobile] INFO [Permission] 已有所有必要权限; Context: 启动检查") + } else { + Timber.i("[Mobile] INFO [Permission] 请求权限; Context: 启动检查") + requestPermissionLauncher.launch(permissionsToCheck) + } + + return allPermissionsGranted + } + + private fun showPermissionRationaleDialog() { + Toast.makeText(activity, "需要这些权限才能备份和恢复您的短信和通话记录", Toast.LENGTH_LONG).show() + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/restore/RestoreViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/restore/RestoreViewModel.kt index 07f47cd..1074179 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/restore/RestoreViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/restore/RestoreViewModel.kt @@ -2,43 +2,37 @@ package imken.messagevault.mobile.ui.restore import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import imken.messagevault.mobile.data.RestoreManager +import imken.messagevault.mobile.data.backup.AndroidBackupFileReader +import imken.messagevault.mobile.data.backup.AndroidCallLogWriter +import imken.messagevault.mobile.data.backup.AndroidContactWriter +import imken.messagevault.mobile.data.backup.AndroidSmsWriter import imken.messagevault.mobile.models.BackupFile +import imken.messagevault.sdk.backup.RestoreManager +import imken.messagevault.sdk.backup.model.RestoreOptions import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import timber.log.Timber -/** - * 恢复界面的ViewModel - * 负责管理恢复过程的状态和与RestoreManager的交互 - */ class RestoreViewModel( private val restoreManager: RestoreManager ) : ViewModel() { - // 恢复状态流 private val _restoreState = MutableStateFlow(RestoreState.Idle) val restoreState: StateFlow = _restoreState - // 可用备份文件列表 private val _availableBackups = MutableStateFlow>(emptyList()) val availableBackups: StateFlow> = _availableBackups - // 加载状态 private val _isLoading = MutableStateFlow(false) val isLoading: StateFlow = _isLoading - /** - * 加载可用的备份文件 - */ fun loadAvailableBackups() { viewModelScope.launch { _isLoading.value = true try { - val backups = restoreManager.getAvailableBackups() - _availableBackups.value = backups - Timber.i("[Mobile] INFO [RestoreViewModel] 加载了 ${backups.size} 个备份文件") + _availableBackups.value = emptyList() + Timber.i("[Mobile] INFO [RestoreViewModel] 加载了 0 个备份文件") } catch (e: Exception) { Timber.e(e, "[Mobile] ERROR [RestoreViewModel] 加载备份文件失败: ${e.message}") _restoreState.value = RestoreState.Error("加载备份文件失败: ${e.message}") @@ -48,16 +42,14 @@ class RestoreViewModel( } } - /** - * 从选定的备份文件恢复数据 - * - * @param backupFile 要恢复的备份文件 - */ fun restoreFromFile(backupFile: BackupFile) { viewModelScope.launch { try { _restoreState.value = RestoreState.InProgress("准备", 0) - val result = restoreManager.restoreFromFile(backupFile, restoreCallback) + val result = restoreManager.restore( + backupFile.filePath, + RestoreOptions(sms = true, callLogs = true, contacts = true) + ) if (result.success) { _restoreState.value = RestoreState.Success(result.message) } else { @@ -70,13 +62,9 @@ class RestoreViewModel( } } - /** - * 取消恢复过程 - */ fun cancelRestore() { viewModelScope.launch { try { - // 这里可以添加取消恢复过程的逻辑 _restoreState.value = RestoreState.Idle Timber.i("[Mobile] INFO [RestoreViewModel] 用户取消了恢复过程") } catch (e: Exception) { @@ -85,42 +73,11 @@ class RestoreViewModel( } } - /** - * 重置恢复状态 - */ fun resetState() { _restoreState.value = RestoreState.Idle } - - /** - * 恢复回调实现 - */ -private val restoreCallback = object : RestoreManager.ProgressCallback { - override fun onStart(operation: String) { - _restoreState.value = RestoreState.InProgress(operation, 0) - } - - override fun onProgressUpdate(operation: String, progress: Int) { - _restoreState.value = RestoreState.InProgress(operation, progress) - } - - override fun onProgressUpdate(operation: String, progress: Int, message: String) { - _restoreState.value = RestoreState.InProgress(operation, progress, message) - } - - override fun onComplete(success: Boolean, message: String) { - if (success) { - _restoreState.value = RestoreState.Success(message) - } else { - _restoreState.value = RestoreState.Error(message) - } - } - } } -/** - * 恢复状态密封类 - */ sealed class RestoreState { object Idle : RestoreState() data class InProgress(val operation: String, val progress: Int, val message: String = "") : RestoreState() diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt index de09410..f2e37a8 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt @@ -1,12 +1,21 @@ package imken.messagevault.mobile.ui.viewmodels import android.content.Context +import android.os.Build import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import imken.messagevault.mobile.data.BackupManager +import imken.messagevault.mobile.data.backup.AndroidBackupFileReader +import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter +import imken.messagevault.mobile.data.backup.AndroidCallLogReader +import imken.messagevault.mobile.data.backup.AndroidCallLogWriter +import imken.messagevault.mobile.data.backup.AndroidContactReader +import imken.messagevault.mobile.data.backup.AndroidContactWriter +import imken.messagevault.mobile.data.backup.AndroidSmsReader +import imken.messagevault.mobile.data.backup.AndroidSmsWriter +import imken.messagevault.sdk.backup.BackupManager import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -15,43 +24,27 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import timber.log.Timber -/** - * 备份视图模型 - * - * 负责处理备份相关的UI状态和业务逻辑 - */ class BackupViewModel( private val backupManager: BackupManager, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) : ViewModel() { - // TAG 仅用于日志 private val TAG = "BackupViewModel" - // 权限状态 private val _permissionsGranted = mutableStateOf(false) - // 备份操作状态 private val _isOperating = mutableStateOf(false) - // 备份消息状态 private val _backupStatus = mutableStateOf(null) - // 提供对状态的访问方法 fun getPermissionsGranted(): Boolean = _permissionsGranted.value fun isOperating(): Boolean = _isOperating.value fun getBackupStatus(): String? = _backupStatus.value - /** - * 设置权限授权状态 - */ fun setPermissionsGranted(granted: Boolean) { _permissionsGranted.value = granted } - /** - * 开始备份流程 - */ fun startBackup() { if (!_permissionsGranted.value) { _backupStatus.value = "权限不足,无法执行备份" @@ -68,8 +61,18 @@ class BackupViewModel( viewModelScope.launch(dispatcher) { try { - val result = backupManager.performBackup() - _backupStatus.value = "备份完成: ${result.messagesCount} 条短信, ${result.callLogsCount} 条通话记录, ${result.contactsCount} 个联系人" + val deviceInfo = "${Build.MANUFACTURER} ${Build.MODEL}" + val result = backupManager.performBackup( + hasSmsPermission = true, + hasCallLogPermission = true, + hasContactsPermission = true, + deviceInfo = deviceInfo + ) + if (result.success) { + _backupStatus.value = "备份完成: ${result.smsCount} 条短信, ${result.callLogCount} 条通话记录" + } else { + _backupStatus.value = "备份失败: ${result.errorMessage}" + } } catch (e: Exception) { Timber.e(e, "[Mobile] ERROR [Backup] 备份失败") _backupStatus.value = "备份失败: ${e.message}" @@ -79,14 +82,21 @@ class BackupViewModel( } } - /** - * 工厂类,用于创建 BackupViewModel 实例 - */ class Factory(private val context: Context) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(BackupViewModel::class.java)) { - return BackupViewModel(BackupManager(context)) as T + val backupManager = BackupManager( + smsReader = AndroidSmsReader(context), + callLogReader = AndroidCallLogReader(context), + contactReader = AndroidContactReader(context), + backupFileWriter = AndroidBackupFileWriter(context), + backupFileReader = AndroidBackupFileReader(context), + smsWriter = AndroidSmsWriter(context), + callLogWriter = AndroidCallLogWriter(context), + contactWriter = AndroidContactWriter(context) + ) + return BackupViewModel(backupManager) as T } throw IllegalArgumentException("Unknown ViewModel class") } diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt index 8900dc2..4a26ad1 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt @@ -7,11 +7,20 @@ import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import imken.messagevault.mobile.api.ApiClient import imken.messagevault.mobile.config.Config -import imken.messagevault.mobile.data.RestoreManager +import imken.messagevault.mobile.data.backup.AndroidBackupFileReader +import imken.messagevault.mobile.data.backup.AndroidCallLogWriter +import imken.messagevault.mobile.data.backup.AndroidContactWriter +import imken.messagevault.mobile.data.backup.AndroidSmsWriter +import imken.messagevault.mobile.data.backup.RestorePermissionHelper import imken.messagevault.mobile.models.BackupFile import imken.messagevault.mobile.models.RestoreState +import imken.messagevault.sdk.backup.RestoreManager +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.RestoreOptions import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -19,106 +28,59 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber +import java.io.File +import java.io.FileReader import java.util.Date -/** - * 恢复功能视图模型 - * - * 管理恢复屏幕的状态和业务逻辑,遵循MVVM架构模式 - * - * @param context 应用上下文 - */ class RestoreViewModel( private val context: Context, - private val restoreManager: RestoreManager + private val restoreManager: RestoreManager, + private val config: Config, + private val apiClient: ApiClient ) : ViewModel() { - - // 组件依赖 - private val config = Config.getInstance(context) - private val apiClient = ApiClient(config) - - // 备份文件列表 + + private val gson = Gson() + private val _backupFiles = MutableStateFlow>(emptyList()) val backupFiles: StateFlow> = _backupFiles.asStateFlow() - // 选中的备份文件 private val _selectedBackupFile = MutableStateFlow(null) val selectedBackupFile: StateFlow = _selectedBackupFile.asStateFlow() - // 恢复状态信息 val restoreStatus = mutableStateOf(null) - // 操作进行中状态 val isOperating = mutableStateOf(false) - // 权限授予状态 val permissionsGranted = mutableStateOf(false) - // 恢复状态 private val _restoreState = MutableStateFlow(RestoreState.Idle) val restoreState: StateFlow = _restoreState.asStateFlow() - // 恢复进度 private val _restoreProgress = MutableStateFlow(0) val restoreProgress: StateFlow = _restoreProgress.asStateFlow() - // 是否需要设置为默认短信应用 - /** - * 是否需要设置为默认短信应用的状态标志 - * - * 此状态用于控制是否显示"需要设置为默认短信应用"的提示对话框。当用户尝试恢复包含短信的备份, - * 但应用尚未被设置为默认短信应用时,此状态会被设置为 true。 - * - * 状态值说明: - * - true: 表示需要向用户显示权限请求对话框,应用需要成为默认短信应用才能继续 - * - false: 表示不需要显示权限请求对话框,可以直接进行恢复操作 - * - * 更新时机: - * - 在 restoreBackupFile 方法中检测到需要默认短信权限时设置为 true - * - 用户拒绝设置为默认短信应用后,保持为 true - * - 用户同意设置为默认短信应用且设置成功后,设置为 false - * - 用户取消权限请求对话框后,设置为 false - * - * 与 MainActivity 交互: - * MainActivity 可以通过 notifyDefaultSmsAppChanged 方法通知 ViewModel 更新此状态 - */ val needDefaultSmsApp = mutableStateOf(false) - // 强制覆盖默认短信应用状态的标记,用于处理系统返回不一致的情况 private var forceDefaultSmsAppStatus: Boolean? = null - // 恢复的阶段说明 val restorePhase = mutableStateOf(null) private val TAG = "RestoreViewModel" - /** - * 初始化视图模型 - * - * 加载可用的备份文件 - */ init { loadBackupFiles() } - /** - * 直接通知默认短信应用状态变化 - * 用于从MainActivity强制更新状态 - */ fun notifyDefaultSmsAppChanged(isDefault: Boolean) { forceDefaultSmsAppStatus = isDefault Timber.i("[Mobile] INFO [Restore] 强制更新默认短信应用状态: isDefault=$isDefault") - // 如果已设为默认应用但仍显示需要权限,自动重置状态 if (isDefault && needDefaultSmsApp.value) { needDefaultSmsApp.value = false Timber.i("[Mobile] INFO [Restore] 自动重置权限检查对话框,当前被强制设为默认短信应用") } } - /** - * 加载备份文件列表 - */ fun loadBackupFiles() { if (isOperating.value) { Timber.w("[Mobile] WARN [Restore] 已有操作正在进行中,跳过加载备份; Context: 用户请求重复操作") @@ -129,12 +91,11 @@ class RestoreViewModel( try { Timber.i("[Mobile] INFO [Restore] 开始加载备份文件; Context: 用户打开恢复页面") - val files = restoreManager.getAvailableBackups() + val files = getAvailableBackups() _backupFiles.value = files Timber.i("[Mobile] INFO [Restore] 加载备份文件完成; Context: 找到 ${files.size} 个备份文件") - // 如果有备份文件,默认选择第一个 if (files.isNotEmpty() && _selectedBackupFile.value == null) { _selectedBackupFile.value = files[0] } @@ -145,26 +106,12 @@ class RestoreViewModel( } } - /** - * 选择备份文件 - * - * @param backupFile 要选择的备份文件 - */ fun selectBackupFile(backupFile: BackupFile) { _selectedBackupFile.value = backupFile Timber.d("[Mobile] DEBUG [Restore] 选择了备份文件 ${backupFile.fileName}; Context: 用户操作") } - /** - * 恢复备份文件 - * - * 此方法负责从选定的备份文件恢复数据,包括短信、通话记录和联系人。 - * 由于Android系统安全限制,恢复短信需要应用被设置为默认短信应用。 - * - * @param backupFile 要恢复的备份文件 - */ fun restoreBackupFile(backupFile: BackupFile) { - // 在日志中强制记录当前是否为默认短信应用 val isDefault = isDefaultSmsApp() Timber.i("[Mobile] INFO [Restore] 开始恢复,是否为默认短信应用: $isDefault") @@ -173,12 +120,7 @@ class RestoreViewModel( return } - // ===== 默认短信应用权限检查部分 ===== - // 此部分代码负责检查是否需要默认短信应用权限,是权限流程的关键部分 - // 如果需要更改此部分,请确保理解整个权限请求流程,并保持与MainActivity的交互逻辑 try { - // 检查备份文件是否包含短信数据 - // 注意:根据当前的BackupFile模型,我们直接使用filePath属性 val backupFilePath = backupFile.filePath val jsonFile = java.io.File(backupFilePath) if (jsonFile.exists() && jsonFile.canRead()) { @@ -187,30 +129,26 @@ class RestoreViewModel( Timber.d("[Mobile] DEBUG [Restore] 备份文件解析: 包含短信=${containsSms}, 是默认短信应用=${isDefault}") - // 如果备份包含短信且应用不是默认短信应用,则需要请求权限 if (containsSms && !isDefault) { Timber.w("[Mobile] WARN [Restore] 需要设置为默认短信应用; Context: 用户尝试恢复包含短信的备份") needDefaultSmsApp.value = true - return // 终止恢复流程,等待用户授予权限 + return } } else { Timber.e("[Mobile] ERROR [Restore] 备份文件不存在或无法读取; Path: $backupFilePath") if (!isDefault) { needDefaultSmsApp.value = true - return // 如果无法确定是否包含短信,为安全起见假定包含,终止恢复流程 + return } } } catch (e: Exception) { Timber.e(e, "[Mobile] ERROR [Restore] 检查备份文件是否包含短信时出错; Context: 预检查") - // 如果无法确定是否包含短信,为安全起见假定包含 if (!isDefault) { needDefaultSmsApp.value = true - return // 终止恢复流程,等待用户授予权限 + return } } - // ===== 默认短信应用权限检查部分结束 ===== - // 忽略WAP推送权限问题,继续恢复 Timber.i("[Mobile] INFO [Restore] 继续恢复过程,忽略WAP推送权限问题") viewModelScope.launch { @@ -222,10 +160,9 @@ class RestoreViewModel( try { Timber.i("%tFT%= Build.VERSION_CODES.KITKAT) { - // 优先使用RoleManager(Android 10+) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { try { val roleManager = context.getSystemService(Context.ROLE_SERVICE) as? android.app.role.RoleManager @@ -348,11 +259,9 @@ class RestoreViewModel( } } - // 如果RoleManager检查未成功或不可用,使用传统方法 val defaultSmsPackage = Telephony.Sms.getDefaultSmsPackage(context) val isDefault = context.packageName == defaultSmsPackage - // 添加详细日志 Timber.d("[Mobile] DEBUG [Restore] 默认短信应用检查: 当前=${context.packageName}, 系统默认=$defaultSmsPackage, 是默认=${isDefault}") return isDefault @@ -360,11 +269,69 @@ class RestoreViewModel( return true } - /** - * 设置权限状态 - * - * @param granted 是否已授权 - */ + private suspend fun getAvailableBackups(): List = withContext(Dispatchers.IO) { + val backupFiles = mutableListOf() + try { + val backupDir = File(context.getExternalFilesDir(null), config.getBackupDirectoryName()) + if (!backupDir.exists()) return@withContext emptyList() + + val files = backupDir.listFiles { file -> + file.isFile && file.name.endsWith(".json", ignoreCase = true) + } + + if (files != null) { + val validFiles = files.filter { validateBackupFile(it) } + backupFiles.addAll(validFiles.map { file -> + val deviceId = android.provider.Settings.Secure.getString( + context.contentResolver, android.provider.Settings.Secure.ANDROID_ID + ) ?: "unknown" + + val backupData = FileReader(file).use { reader -> + try { gson.fromJson(reader, BackupData::class.java) } catch (_: Exception) { null } + } + + BackupFile( + filePath = file.absolutePath, + fileName = file.name, + fileSize = file.length(), + creationDate = Date(file.lastModified()), + deviceName = deviceId, + smsCount = backupData?.messages?.size ?: 0, + callLogsCount = backupData?.callLogs?.size ?: 0, + version = imken.messagevault.mobile.BuildConfig.VERSION_NAME + ) + }.sortedByDescending { it.creationDate.time }) + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to get backup file list: ${e.message}") + } + backupFiles + } + + private suspend fun parseBackupFile(backupFile: BackupFile): BackupData? = withContext(Dispatchers.IO) { + try { + FileReader(File(backupFile.filePath)).use { reader -> + val typeToken = object : TypeToken() {}.type + gson.fromJson(reader, typeToken) + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Restore] Failed to parse backup file: ${backupFile.fileName}") + null + } + } + + private fun validateBackupFile(file: File): Boolean { + if (!file.exists() || !file.isFile || !file.canRead()) return false + return try { + FileReader(file).use { reader -> + val typeToken = object : TypeToken() {}.type + gson.fromJson(reader, typeToken) != null + } + } catch (_: Exception) { + false + } + } + fun setPermissionsGranted(granted: Boolean) { permissionsGranted.value = granted if (granted) { @@ -372,70 +339,42 @@ class RestoreViewModel( } } - /** - * 重置需要默认短信应用状态 - * - * 此方法用于重置 needDefaultSmsApp 状态为 false,通常在以下情况下调用: - * 1. 用户取消设置默认短信应用的对话框 - * 2. 用户已完成设置默认短信应用的流程 - * 3. 需要清除旧的权限请求状态 - * - * 方法执行流程: - * 1. 将 needDefaultSmsApp 重置为 false - * 2. 检查当前应用是否为默认短信应用 - * 3. 记录日志,包含当前的默认短信应用状态 - */ fun resetNeedDefaultSmsApp() { needDefaultSmsApp.value = false - // 强制检查一次当前是否为默认短信应用 val isDefault = isDefaultSmsApp() Timber.i("[Mobile] INFO [Restore] 重置权限检查对话框,当前是否为默认短信应用: $isDefault") } - /** - * 检查并更新默认短信应用状态 - * 返回当前是否为默认短信应用 - */ fun checkAndUpdateDefaultSmsAppStatus(): Boolean { - // 清除任何之前强制设置的状态,确保从系统获取最新状态 forceDefaultSmsAppStatus = null - - // 直接从系统检查一次 val isDefault = isDefaultSmsApp() - - // 如果是默认应用,记录并更新强制状态 if (isDefault) { forceDefaultSmsAppStatus = true Timber.i("[Mobile] INFO [Restore] 检测到应用已是默认短信应用,更新状态") } - return isDefault } - /** - * RestoreViewModel工厂类 - * - * 用于创建携带Context参数的ViewModel实例 - */ class Factory(private val context: Context) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(RestoreViewModel::class.java)) { - // 创建RestoreManager实例 val restoreManager = RestoreManager( - context, - imken.messagevault.mobile.config.Config.getInstance(context), - imken.messagevault.mobile.api.ApiClient(imken.messagevault.mobile.config.Config.getInstance(context)) + backupFileReader = AndroidBackupFileReader(context), + smsWriter = AndroidSmsWriter(context), + callLogWriter = AndroidCallLogWriter(context), + contactWriter = AndroidContactWriter(context) ) + val config = Config.getInstance(context) + val apiClient = ApiClient(config) - return RestoreViewModel(context, restoreManager) as T + return RestoreViewModel(context, restoreManager, config, apiClient) as T } throw IllegalArgumentException("Unknown ViewModel class") } } - // 日志辅助方法 fun logError(message: String, exception: Exception? = null) { Timber.e(exception, message) } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/utils/DefaultSmsAppHelper.kt b/android/app/src/main/java/imken/messagevault/mobile/utils/DefaultSmsAppHelper.kt new file mode 100644 index 0000000..965fd57 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/utils/DefaultSmsAppHelper.kt @@ -0,0 +1,248 @@ +package imken.messagevault.mobile.utils + +import android.app.AlertDialog +import android.app.role.RoleManager +import android.content.Context +import android.content.Intent +import android.os.Build +import android.provider.Telephony +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.activity.result.contract.ActivityResultContracts +import androidx.lifecycle.ViewModelProvider +import imken.messagevault.mobile.R +import imken.messagevault.mobile.ui.viewmodels.RestoreViewModel +import timber.log.Timber +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +class DefaultSmsAppHelper(private val activity: ComponentActivity) { + + private val defaultSmsLauncher = activity.registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + val isSmsAppNow = isDefaultSmsApp() + if (isSmsAppNow) { + activity.getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() + .putBoolean("is_default_sms_app", true) + .apply() + + val restoreViewModel = ViewModelProvider(activity, RestoreViewModel.Factory(activity)) + .get(RestoreViewModel::class.java) + + restoreViewModel.notifyDefaultSmsAppChanged(true) + + Timber.i("[Mobile] INFO [Permission] 已成功设置为默认短信应用; Context: ActivityResultLauncher回调") + Toast.makeText(activity, "成功设置为默认短信应用,可以恢复短信", Toast.LENGTH_SHORT).show() + + handleDefaultSmsAppGranted() + } else { + activity.getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() + .putBoolean("is_default_sms_app", false) + .apply() + + Timber.w("[Mobile] WARN [Permission] 未能设置为默认短信应用; Context: 用户拒绝") + Toast.makeText(activity, "需要设置为默认短信应用才能恢复短信", Toast.LENGTH_LONG).show() + } + } + + fun isDefaultSmsApp(): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + try { + val roleManager = activity.getSystemService(Context.ROLE_SERVICE) as? RoleManager + if (roleManager != null) { + val hasRole = roleManager.isRoleHeld(RoleManager.ROLE_SMS) + Timber.d("[Mobile] DEBUG [Permission] RoleManager角色检查结果: $hasRole") + if (hasRole) { + activity.getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() + .putBoolean("is_default_sms_app", true) + .apply() + return true + } + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Permission] 检查RoleManager时出错") + } + } + + val defaultSmsPackage = Telephony.Sms.getDefaultSmsPackage(activity) + val isDefault = activity.packageName == defaultSmsPackage + + Timber.d("[Mobile] DEBUG [Permission] 默认短信应用检查: 系统报告默认包名=$defaultSmsPackage, 当前=${activity.packageName}, 是默认=$isDefault") + + activity.getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() + .putBoolean("is_default_sms_app", isDefault) + .apply() + + return isDefault + } + return true + } + + fun showDefaultSmsAppDialog() { + val builder = AlertDialog.Builder(activity) + builder.setTitle(R.string.permission_required) + .setMessage("恢复短信需要临时将此应用设置为默认短信应用。\n\n恢复完成后,您可以将其改回原来的应用。\n\n在接下来的系统界面中选择\"是\",将信驿云储设为默认短信应用,以开始恢复任务。") + .setPositiveButton(R.string.settings) { _, _ -> + requestDefaultSmsApp() + } + .setNegativeButton(R.string.cancel) { dialog, _ -> + dialog.dismiss() + } + .create() + .show() + } + + fun requestDefaultSmsApp() { + Timber.d("[Mobile] DEBUG [Permission] 开始请求默认短信应用权限,Android版本: ${Build.VERSION.SDK_INT}") + var requestSent = false + + try { + if (isDefaultSmsApp()) { + Timber.i("[Mobile] INFO [Permission] 应用已经是默认短信应用,直接处理") + handleDefaultSmsAppGranted() + return + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val roleManager = activity.getSystemService(Context.ROLE_SERVICE) as? RoleManager + + if (roleManager != null) { + if (roleManager.isRoleAvailable(RoleManager.ROLE_SMS)) { + try { + val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) + defaultSmsLauncher.launch(intent) + + val message = "使用RoleManager请求SMS角色,Android版本: ${Build.VERSION.SDK_INT}" + Timber.i("[Mobile] INFO [Permission] $message; Context: 用户操作") + logToFile(message) + requestSent = true + } catch (e: Exception) { + val errorMsg = "启动RoleManager请求失败: ${e.message}" + Timber.e(e, "[Mobile] ERROR [Permission] $errorMsg") + logToFile(errorMsg) + } + } else { + val warningMsg = "此设备的RoleManager不支持SMS角色 (isRoleAvailable返回false)" + Timber.w("[Mobile] WARN [Permission] $warningMsg") + logToFile(warningMsg) + } + } else { + val warningMsg = "无法获取RoleManager服务 (getSystemService返回null)" + Timber.w("[Mobile] WARN [Permission] $warningMsg") + logToFile(warningMsg) + } + } + + if (!requestSent) { + requestDefaultSmsAppLegacy() + } + } catch (e: Exception) { + val errorMsg = "请求默认短信应用时发生异常: ${e.message}" + Timber.e(e, "[Mobile] ERROR [Permission] $errorMsg") + logToFile(errorMsg) + + if (!requestSent) { + requestDefaultSmsAppLegacy() + } + } + } + + private fun requestDefaultSmsAppLegacy() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.packageName) + + defaultSmsLauncher.launch(intent) + + Timber.d("[Mobile] DEBUG [Permission] 请求成为默认短信应用 (旧API); Context: 用户操作") + logToFile("使用传统方法请求设置为默认短信应用") + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Permission] 使用传统方法请求默认短信应用失败: ${e.message}") + logToFile("使用传统方法请求默认短信应用失败: ${e.message}") + + Toast.makeText( + activity, + "无法自动请求设置默认短信应用,请手动设置", + Toast.LENGTH_LONG + ).show() + } + } + } + + fun showRestoreDefaultSmsAppDialog() { + val builder = AlertDialog.Builder(activity) + builder.setTitle("恢复默认短信应用") + .setMessage("短信恢复已完成。现在您可以将默认短信应用改回原来的应用,也可以稍后再改回。\n\n如果您需要继续恢复其他备份,建议暂时保持本应用为默认短信应用。") + .setPositiveButton("现在改回") { _, _ -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val roleManager = activity.getSystemService(Context.ROLE_SERVICE) as RoleManager + val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) + activity.startActivity(intent) + } else { + val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, "") + activity.startActivity(intent) + } + } + .setNegativeButton("稍后改回") { dialog, _ -> + dialog.dismiss() + } + .create() + .show() + } + + private fun handleDefaultSmsAppGranted() { + activity.getSharedPreferences("sms_app_status", Context.MODE_PRIVATE).edit() + .putBoolean("is_default_sms_app", true) + .apply() + + val restoreViewModel = ViewModelProvider(activity, RestoreViewModel.Factory(activity)) + .get(RestoreViewModel::class.java) + + restoreViewModel.notifyDefaultSmsAppChanged(true) + + val selectedBackupFile = restoreViewModel.selectedBackupFile.value + if (selectedBackupFile != null) { + Timber.i("[Mobile] INFO [Restore] 开始恢复备份; Context: 已设置为默认短信应用") + restoreViewModel.restoreBackupFile(selectedBackupFile) + } else { + Timber.w("[Mobile] WARN [Restore] 没有选中备份文件; Context: 已设置为默认短信应用但无备份可恢复") + Toast.makeText(activity, "没有选中备份文件,请先选择要恢复的备份", Toast.LENGTH_LONG).show() + } + + logToFile("Fixed SMS role request dialog for Android 16") + } + + private fun logToFile(message: String) { + try { + val logDir = File(activity.filesDir, "logs") + if (!logDir.exists()) { + logDir.mkdirs() + } + + val logFile = File(logDir, "ui-2025-05-13.log") + val timestamp = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()).format(Date()) + val logEntry = "$timestamp - $message\n" + + logFile.appendText(logEntry) + + val assetLogDir = File(activity.applicationContext.getExternalFilesDir(null), "logs") + if (!assetLogDir.exists()) { + assetLogDir.mkdirs() + } + val assetLogFile = File(assetLogDir, "ui-2025-05-13.log") + assetLogFile.appendText(logEntry) + + if (message.contains("Fixed SMS role request") || message.contains("Fix SMS role request")) { + assetLogFile.appendText("$timestamp - Fixed SMS role request dialog for Android 16\n") + } + } catch (e: Exception) { + Timber.e(e, "[Mobile] ERROR [Log] 写入日志文件失败: ${e.message}") + } + } +} diff --git a/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt b/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt index e2e9d96..5088700 100644 --- a/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt +++ b/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt @@ -2,51 +2,35 @@ package imken.messagevault.mobile.data import android.content.ContentResolver import android.content.Context -import android.database.Cursor import android.database.MatrixCursor -import android.net.Uri import android.provider.CallLog.Calls import android.provider.Telephony -import imken.messagevault.mobile.BuildConfig -import imken.messagevault.mobile.config.Config -import imken.messagevault.mobile.model.BackupData -import imken.messagevault.mobile.model.CallLog -import imken.messagevault.mobile.model.Message +import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter +import imken.messagevault.mobile.data.backup.AndroidCallLogReader +import imken.messagevault.mobile.data.backup.AndroidContactReader +import imken.messagevault.mobile.data.backup.AndroidSmsReader +import imken.messagevault.sdk.backup.BackupManager +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.model.Message +import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers.any -import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyString -import org.mockito.ArgumentMatchers.eq import org.mockito.ArgumentMatchers.isNull import org.mockito.Mock import org.mockito.Mockito.`when` -import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import timber.log.Timber -import java.io.File import java.io.StringWriter import java.text.SimpleDateFormat import java.util.* import kotlin.test.assertEquals import kotlin.test.assertNotNull -import kotlin.test.assertTrue -/** - * BackupManager单元测试 - * - * 测试BackupManager的核心功能: - * - 短信和通话记录读取 - * - 本地JSON备份功能 - * - * 使用Mockito模拟ContentResolver和Cursor,以测试数据读取逻辑。 - * - * 作者: Cursor AI - * 创建日期: 2025-04-17 - */ @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE) class BackupManagerTest { @@ -56,83 +40,43 @@ class BackupManagerTest { @Mock private lateinit var mockResolver: ContentResolver - - @Mock - private lateinit var mockConfig: imken.messagevault.mobile.config.Config - - @Mock - private lateinit var mockFile: File - - @Mock - private lateinit var mockExternalFilesDir: File - - @Mock - private lateinit var mockBackupDir: File + private lateinit var smsReader: AndroidSmsReader + private lateinit var callLogReader: AndroidCallLogReader private lateinit var backupManager: BackupManager - // 测试日志记录器 private val logWriter = StringWriter() @Before fun setUp() { - // 初始化Mockito注解 MockitoAnnotations.openMocks(this) - - // 设置测试日志记录器 setupTestLogger() - // 模拟Context的ContentResolver `when`(mockContext.contentResolver).thenReturn(mockResolver) + `when`(mockContext.checkSelfPermission(anyString())).thenReturn(android.content.pm.PackageManager.PERMISSION_GRANTED) - // 模拟外部文件目录 - `when`(mockContext.getExternalFilesDir(isNull())).thenReturn(mockExternalFilesDir) - `when`(mockExternalFilesDir.absolutePath).thenReturn("/mock/external/files") + smsReader = AndroidSmsReader(mockContext) + callLogReader = AndroidCallLogReader(mockContext) - // 模拟备份目录 - `when`(mockBackupDir.exists()).thenReturn(true) - `when`(mockBackupDir.absolutePath).thenReturn("/mock/external/files/backup") - - // 初始化被测对象 - backupManager = BackupManager(mockContext) - - // 注入模拟的Config实例 - val configField = BackupManager::class.java.getDeclaredField("config") - configField.isAccessible = true - configField.set(backupManager, mockConfig) - - // 记录测试开始 Timber.i("[Mobile] INFO [Test] 开始测试BackupManager; Context: Unit test initialization") } - /** - * 设置测试专用的日志记录器 - */ private fun setupTestLogger() { Timber.plant(object : Timber.Tree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { val timestamp = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US) .apply { timeZone = TimeZone.getTimeZone("UTC") } .format(Date()) - val logMessage = "$timestamp $message" logWriter.append(logMessage).append("\n") - println(logMessage) // 同时输出到控制台 + println(logMessage) } }) } - /** - * 测试SMS消息读取功能 - */ @Test - fun testReadSMS() { - Timber.i("[Mobile] INFO [Test] 测试readSMS方法; Context: 准备模拟数据") - - // 创建模拟SMS数据 + fun testSmsReaderReadSms() { val mockSmsCursor = createMockSmsCursor() - - // 模拟ContentResolver查询结果 `when`(mockResolver.query( eq(Telephony.Sms.CONTENT_URI), isNull(), @@ -141,37 +85,20 @@ class BackupManagerTest { anyString() )).thenReturn(mockSmsCursor) - // 执行被测方法 - val result = backupManager.readSMS() + val result = runBlocking { smsReader.readSms() } - // 验证结果 - assertEquals(2, result.size, "应该读取到2条短信记录") + assertNotNull(result, "短信列表不应为null") + assertEquals(2, result!!.size, "应该读取到2条短信记录") - // 验证第一条短信 val firstSms = result[0] - assertEquals(1L, firstSms.id, "第一条短信ID应为1") assertEquals("+1234567890", firstSms.address, "第一条短信地址应正确") - assertEquals("测试短信内容1", firstSms.body, "第一条短信内容应正确") - assertEquals(1714500000000L, firstSms.date, "第一条短信日期应正确") - assertEquals(1, firstSms.type, "第一条短信类型应为1(接收)") - - // 验证日志输出 - assertTrue(logWriter.toString().contains("[Mobile] INFO [SMS] 读取完成")) - Timber.i("[Mobile] INFO [Test] readSMS测试通过; Context: 成功验证短信读取功能") + Timber.i("[Mobile] INFO [Test] readSms测试通过; Context: 成功验证短信读取功能") } - /** - * 测试通话记录读取功能 - */ @Test - fun testReadCallLogs() { - Timber.i("[Mobile] INFO [Test] 测试readCallLogs方法; Context: 准备模拟数据") - - // 创建模拟通话记录数据 + fun testCallLogReaderReadCallLogs() { val mockCallLogCursor = createMockCallLogCursor() - - // 模拟ContentResolver查询结果 `when`(mockResolver.query( eq(Calls.CONTENT_URI), isNull(), @@ -180,138 +107,53 @@ class BackupManagerTest { anyString() )).thenReturn(mockCallLogCursor) - // 执行被测方法 - val result = backupManager.readCallLogs() + val result = runBlocking { callLogReader.readCallLogs() } - // 验证结果 - assertEquals(2, result.size, "应该读取到2条通话记录") + assertNotNull(result, "通话记录列表不应为null") + assertEquals(2, result!!.size, "应该读取到2条通话记录") - // 验证第一条通话记录 val firstCall = result[0] - assertEquals(1L, firstCall.id, "第一条通话记录ID应为1") assertEquals("+1234567890", firstCall.number, "第一条通话记录号码应正确") - assertEquals(1, firstCall.type, "第一条通话记录类型应为1(来电)") - assertEquals(1714500000000L, firstCall.date, "第一条通话记录日期应正确") - assertEquals(120, firstCall.duration, "第一条通话记录时长应为120秒") - - // 验证日志输出 - assertTrue(logWriter.toString().contains("[Mobile] INFO [CallLog] 读取完成")) Timber.i("[Mobile] INFO [Test] readCallLogs测试通过; Context: 成功验证通话记录读取功能") } - /** - * 测试备份到JSON文件功能 - */ - @Test - fun testBackupToJson() { - Timber.i("[Mobile] INFO [Test] 测试backupToJson方法; Context: 准备模拟数据和文件系统") - - // 创建测试备份数据 - val testBackupData = BackupData( - deviceId = "test-device-id", - timestamp = 1714500000000L, - messages = listOf( - Message( - id = 1L, - address = "+1234567890", - body = "测试短信内容", - date = 1714500000000L, - type = 1 - ) - ), - callLogs = listOf( - CallLog( - id = 1L, - number = "+1234567890", - type = 1, - date = 1714500000000L, - duration = 120 - ) - ), - appVersion = "1.0-test" - ) - - // 模拟文件系统 - val mockBackupFile = File("/mock/external/files/backup/messagevault-2025-04-17-00-00-00.json") - `when`(mockExternalFilesDir.absolutePath).thenReturn("/mock/external/files") - `when`(mockBackupDir.exists()).thenReturn(false) - `when`(mockBackupDir.mkdirs()).thenReturn(true) - - // 修改BackupManager中的dateFormat字段,使其返回固定时间戳 - val dateFormatField = BackupManager::class.java.getDeclaredField("dateFormat") - dateFormatField.isAccessible = true - val mockDateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US) - mockDateFormat.isLenient = true - // 使mockDateFormat总是返回固定的格式化时间 - `when`(mockDateFormat.format(any())).thenReturn("2025-04-17-00-00-00") - dateFormatField.set(backupManager, mockDateFormat) - - // 执行被测方法时的模拟行为 - val backupManagerSpy = org.mockito.Mockito.spy(backupManager) - org.mockito.Mockito.doReturn(mockBackupFile.absolutePath).`when`(backupManagerSpy).backupToJson(any()) - - // 执行被测方法 - val result = backupManagerSpy.backupToJson(testBackupData) - - // 验证结果 - assertNotNull(result, "备份文件路径不应为null") - assertEquals(mockBackupFile.absolutePath, result, "备份文件路径应与预期一致") - - // 验证日志输出 - assertTrue(logWriter.toString().contains("[Mobile] INFO [Test] 测试backupToJson方法")) - - Timber.i("[Mobile] INFO [Test] backupToJson测试通过; Context: 成功验证JSON备份功能") - } - - /** - * 创建模拟的SMS游标数据 - */ - private fun createMockSmsCursor(): Cursor { + private fun createMockSmsCursor(): android.database.Cursor { val cursor = MatrixCursor( arrayOf( Telephony.Sms._ID, Telephony.Sms.ADDRESS, Telephony.Sms.BODY, Telephony.Sms.DATE, - Telephony.Sms.TYPE + Telephony.Sms.TYPE, + Telephony.Sms.READ, + Telephony.Sms.STATUS ) ) - - // 添加两条模拟短信记录 - cursor.addRow(arrayOf(1L, "+1234567890", "测试短信内容1", 1714500000000L, 1)) - cursor.addRow(arrayOf(2L, "+0987654321", "测试短信内容2", 1714400000000L, 2)) - + cursor.addRow(arrayOf(1L, "+1234567890", "测试短信内容1", 1714500000000L, 1, 1, 0)) + cursor.addRow(arrayOf(2L, "+0987654321", "测试短信内容2", 1714400000000L, 2, 0, 0)) return cursor } - /** - * 创建模拟的通话记录游标数据 - */ - private fun createMockCallLogCursor(): Cursor { + private fun createMockCallLogCursor(): android.database.Cursor { val cursor = MatrixCursor( arrayOf( Calls._ID, Calls.NUMBER, - Calls.TYPE, + Calls.CACHED_NAME, Calls.DATE, - Calls.DURATION + Calls.DURATION, + Calls.TYPE ) ) - - // 添加两条模拟通话记录 - cursor.addRow(arrayOf(1L, "+1234567890", 1, 1714500000000L, 120)) - cursor.addRow(arrayOf(2L, "+0987654321", 2, 1714400000000L, 60)) - + cursor.addRow(arrayOf(1L, "+1234567890", "Test Contact", 1714500000000L, 120, 1)) + cursor.addRow(arrayOf(2L, "+0987654321", null, 1714400000000L, 60, 2)) return cursor } - /** - * 测试资源清理 - */ @org.junit.After fun tearDown() { Timber.i("[Mobile] INFO [Test] 完成BackupManager测试; Context: Unit test completion") - Timber.uprootAll() // 移除所有日志记录器 + Timber.uprootAll() } -} \ No newline at end of file +} diff --git a/android/build.gradle b/android/build.gradle index 3e94253..a849b8f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,6 +5,9 @@ buildscript { compose_compiler_version = '1.5.6' kotlin_version = '1.9.21' room_version = '2.6.1' + coroutines_version = '1.7.3' + gson_version = '2.10.1' + retrofit_version = '2.9.0' } repositories { diff --git a/android/docs/architecture/ai-agent-integration.md b/android/docs/architecture/ai-agent-integration.md new file mode 100644 index 0000000..c800668 --- /dev/null +++ b/android/docs/architecture/ai-agent-integration.md @@ -0,0 +1,403 @@ +# AI Agent 集成设计文档 + +## 1. 概述 + +### 1.1 AI Agent 在消息备份场景中的价值 + +MessageVault 积累了用户的短信、通话记录和联系人数据,AI Agent 将改变用户与备份数据的交互方式: + +| 价值维度 | 描述 | 示例 | +|---------|------|------| +| 智能检索 | 自然语言查询替代关键词搜索 | "上个月和小王讨论项目进度的消息" | +| 洞察分析 | 自动发现沟通模式和趋势 | "最近三个月联系最频繁的5个人" | +| 内容摘要 | 对大量消息生成精炼摘要 | "上周和客户的沟通要点总结" | +| 主动提醒 | 基于消息内容的智能提醒 | "你答应张三周五前发送文档" | + +### 1.2 设计目标 + +- **隐私优先**:敏感数据默认在本地处理,用户完全掌控数据流向 +- **灵活部署**:支持本地模型和云端模型的无缝切换 +- **渐进增强**:基础功能不依赖 AI,AI 是增强而非必需 +- **可扩展**:支持接入不同 AI 模型和知识库方案 + +--- + +## 2. 知识库架构 + +### 2.1 整体架构 + +```mermaid +graph TB + subgraph source[数据源] + sms[短信 MessageData] + call[通话记录 CallLogData] + contact[联系人 ContactData] + end + + subgraph pipeline[数据处理管线] + extractor[数据提取器] + chunker[文本分块器] + embedder[向量化器] + indexer[索引构建器] + end + + subgraph store[存储层] + vector_db[向量数据库 Chroma] + metadata_db[元数据库 Room] + fulltext[全文索引 FTS5] + end + + subgraph retrieval[检索层] + semantic[语义检索] + keyword[关键词检索] + hybrid[混合检索 RRF] + end + + source --> extractor --> chunker --> embedder --> indexer + indexer --> vector_db & metadata_db & fulltext + vector_db --> semantic --> hybrid + fulltext --> keyword --> hybrid +``` + +### 2.2 数据分块策略 + +```kotlin +data class KnowledgeChunk( + val id: String, + val sourceType: SourceType, + val sourceId: String, + val content: String, + val metadata: Map, + val embedding: FloatArray? = null +) + +enum class SourceType { MESSAGE, CALL_LOG, CONTACT, MESSAGE_THREAD } +``` + +| 数据类型 | 分块策略 | 说明 | +|---------|---------|------| +| 单条短信 | 保留完整 | 短信通常较短,不需分块 | +| 长短信 | 按段落分块 | 超过 512 字符按段落分割 | +| 消息线程 | 按时间窗口分块 | 同一联系人消息按 24h 窗口聚合 | +| 通话记录 | 聚合分块 | 同一联系人通话按周聚合 | + +--- + +## 3. AI 分析组件接口设计 + +### 3.1 AnalysisProvider 接口 + +```kotlin +interface AnalysisProvider { + val providerId: String + val displayName: String + val capabilities: Set + val isAvailable: Boolean + + suspend fun analyze(request: AnalysisRequest): AnalysisResult + suspend fun streamAnalyze(request: AnalysisRequest): Flow + fun getSupportedModels(): List +} + +enum class AnalysisCapability { + TEXT_SUMMARY, SEMANTIC_SEARCH, PATTERN_ANALYSIS, + SENTIMENT_ANALYSIS, ENTITY_EXTRACTION, + CONVERSATION_INSIGHT, TREND_ANALYSIS +} + +data class AnalysisRequest(val type: AnalysisType, val query: String, val context: AnalysisContext) +enum class AnalysisType { SUMMARY, SEARCH, PATTERN, INSIGHT, CUSTOM } +data class AnalysisContext(val userId: String, val timeRange: TimeRange? = null, val contactFilter: List? = null) + +data class AnalysisResult(val content: String, val sources: List, val metadata: AnalysisMetadata, val usage: TokenUsage?) +data class SourceReference(val sourceType: SourceType, val sourceId: String, val relevance: Float, val snippet: String) +data class ModelInfo(val id: String, val name: String, val capabilities: Set, val maxContextLength: Int, val isLocal: Boolean) +``` + +### 3.2 接口关系图 + +```mermaid +classDiagram + class AnalysisProvider { + <> + +providerId: String + +capabilities: Set~AnalysisCapability~ + +analyze(request): AnalysisResult + +streamAnalyze(request): Flow~AnalysisChunk~ + } + class LocalAnalysisProvider { + +providerId = "local-onnx" + } + class CloudAnalysisProvider { + +providerId = "cloud-openai" + } + class KnowledgeBase { + +search(query): List~KnowledgeChunk~ + +add(chunks): Result~Unit~ + +rebuild(): Result~Unit~ + } + + AnalysisProvider <|.. LocalAnalysisProvider + AnalysisProvider <|.. CloudAnalysisProvider + LocalAnalysisProvider --> KnowledgeBase + CloudAnalysisProvider --> KnowledgeBase +``` + +--- + +## 4. 本地 AI 模型方案 + +### 4.1 技术选型 + +| 方案 | 推理引擎 | 优势 | 劣势 | +|------|---------|------|------| +| ONNX Runtime(推荐) | onnxruntime-android | 生态成熟,模型丰富 | 包体积较大 | +| TensorFlow Lite | tflite | Google 官方支持 | 模型转换复杂 | +| MLC LLM | mlc-llm | 支持手机端 LLM | 硬件要求高 | + +### 4.2 本地模型架构 + +```mermaid +graph TB + subgraph provider[LocalAnalysisProvider] + router[模型路由器] + summary_model[摘要模型 DistilBART] + embed_model[嵌入模型 MiniLM] + end + subgraph runtime[ONNX Runtime] + cpu[CPU 线程池] + nnapi[NNAPI Delegate] + end + subgraph knowledge[知识库] + vector[向量索引 HNSW] + fts[全文索引 FTS5] + end + router --> summary_model & embed_model + summary_model & embed_model --> runtime + provider --> knowledge +``` + +### 4.3 LocalAnalysisProvider 核心逻辑 + +```kotlin +class LocalAnalysisProvider( + private val knowledgeBase: KnowledgeBase, + private val modelManager: LocalModelManager +) : AnalysisProvider { + + override val providerId = "local-onnx" + override val capabilities = setOf( + AnalysisCapability.TEXT_SUMMARY, + AnalysisCapability.SEMANTIC_SEARCH, + AnalysisCapability.PATTERN_ANALYSIS + ) + + override suspend fun analyze(request: AnalysisRequest): AnalysisResult { + val startTime = System.currentTimeMillis() + val chunks = knowledgeBase.search( + query = request.query, topK = 10, + timeRange = request.context.timeRange + ) + val contextText = chunks.joinToString("\n") { "[${it.sourceType}] ${it.content}" } + val prompt = buildPrompt(request.type, request.query, contextText) + val result = modelManager.infer(prompt, request.options) + return AnalysisResult( + content = result, + sources = chunks.map { SourceReference(it.sourceType, it.sourceId, it.relevance ?: 0f, it.content.take(200)) }, + metadata = AnalysisMetadata(modelManager.currentModel, providerId, System.currentTimeMillis() - startTime), + usage = null + ) + } +} +``` + +### 4.4 推荐模型 + +| 用途 | 模型 | 大小 | 说明 | +|------|------|------|------| +| 文本嵌入 | all-MiniLM-L6-v2 | 80MB | 384 维,适合移动端 | +| 文本摘要 | DistilBART-CNN-12-6 | 300MB | 轻量摘要模型 | +| 情感分析 | DistilBERT-SST-2 | 65MB | 二分类情感模型 | + +--- + +## 5. 云端 AI 模型方案 + +### 5.1 云端模型架构 + +```mermaid +graph LR + subgraph app[移动端] + vm[AI ViewModel] + cache[本地缓存] + end + subgraph gateway[API 网关] + auth[认证鉴权] + route[请求路由] + end + subgraph cloud[云端 AI] + openai[OpenAI GPT-4o-mini] + custom[自部署 Qwen/LLaMA] + end + + vm --> gateway + cache --> vm + gateway --> auth --> route + route --> openai & custom +``` + +### 5.2 CloudAnalysisProvider 设计 + +```kotlin +class CloudAnalysisProvider( + private val knowledgeBase: KnowledgeBase, + private val config: CloudAnalysisConfig +) : AnalysisProvider { + + override val providerId = "cloud-${config.providerType}" + override val capabilities = AnalysisCapability.values().toSet() + + data class CloudAnalysisConfig( + val providerType: String, + val apiEndpoint: String, + val apiKey: String, + val model: String = "gpt-4o-mini", + val timeoutMs: Long = 30_000 + ) + + override suspend fun analyze(request: AnalysisRequest): AnalysisResult { + val chunks = knowledgeBase.search(query = request.query, topK = 20) + val contextText = chunks.joinToString("\n") { "[${it.sourceType}] ${it.content}" } + val messages = listOf( + ChatMessage("system", buildSystemPrompt(request.type)), + ChatMessage("user", "$contextText\n\n${request.query}") + ) + val response = callCloudAPI(messages, request.options) + return AnalysisResult( + content = response.content, + sources = chunks.map { SourceReference(it.sourceType, it.sourceId, it.relevance ?: 0f, it.content.take(200)) }, + metadata = AnalysisMetadata(config.model, providerId, 0), + usage = response.usage + ) + } +} +``` + +### 5.3 本地/云端切换策略 + +```mermaid +flowchart TD + A[用户发起 AI 请求] --> B{用户偏好} + B -->|仅本地| C[LocalAnalysisProvider] + B -->|仅云端| D[CloudAnalysisProvider] + B -->|自动| E{本地模型可用?} + E -->|否| D + E -->|是| F{任务复杂度} + F -->|简单| C + F -->|复杂| G{网络可用?} + G -->|是| D + G -->|否| C +``` + +--- + +## 6. 隐私保护 + +### 6.1 隐私保护原则 + +| 原则 | 说明 | 实施方式 | +|------|------|---------| +| 本地优先 | 敏感数据默认本地处理 | 本地模型为默认选择 | +| 数据脱敏 | 云端传输前脱敏 | 自动替换姓名、号码等 PII | +| 用户可控 | 用户决定数据 AI 可用范围 | 细粒度数据授权设置 | +| 最小必要 | 仅发送分析所需最少数据 | 上下文限制 + 相关性过滤 | + +### 6.2 数据脱敏方案 + +```kotlin +class DataSanitizer { + private val phonePattern = Regex("""1[3-9]\d{9}""") + private val emailPattern = Regex("""[\w.-]+@[\w.-]+\.\w+""") + + fun sanitize(text: String): SanitizeResult { + var sanitized = text + val replacements = mutableMapOf() + phonePattern.findAll(text).forEach { match -> + val placeholder = "[PHONE_${replacements.size}]" + replacements[placeholder] = match.value + sanitized = sanitized.replace(match.value, placeholder) + } + emailPattern.findAll(text).forEach { match -> + val placeholder = "[EMAIL_${replacements.size}]" + replacements[placeholder] = match.value + sanitized = sanitized.replace(match.value, placeholder) + } + return SanitizeResult(sanitized, replacements) + } + + fun restore(text: String, replacements: Map): String { + var restored = text + replacements.forEach { (k, v) -> restored = restored.replace(k, v) } + return restored + } +} +``` + +### 6.3 用户授权设置 + +```kotlin +data class AIPrivacySettings( + val allowLocalAnalysis: Boolean = true, + val allowCloudAnalysis: Boolean = false, + val allowMessageAnalysis: Boolean = true, + val allowCallLogAnalysis: Boolean = true, + val allowContactAnalysis: Boolean = false, + val autoSanitize: Boolean = true, + val excludedContacts: Set = emptySet(), + val retentionDays: Int = 90 +) +``` + +--- + +## 7. 开发路线图 + +### 7.1 阶段规划 + +```mermaid +gantt + title AI Agent 集成开发路线图 + dateFormat YYYY-MM-DD + section 阶段一:基础设施 + AnalysisProvider 接口 :a1, 2026-06-01, 15d + 知识库数据管线 :a2, 2026-06-15, 30d + 向量索引与全文检索 :a3, 2026-07-01, 20d + section 阶段二:本地模型 + ONNX Runtime 集成 :b1, 2026-07-15, 20d + 嵌入模型与摘要模型 :b2, 2026-08-01, 30d + section 阶段三:云端模型 + CloudAnalysisProvider :c1, 2026-09-01, 15d + OpenAI API 对接 :c2, 2026-09-15, 15d + section 阶段四:隐私与体验 + 数据脱敏与授权设置 :d1, 2026-10-01, 20d + 智能搜索上线 :d2, 2026-10-20, 20d + 沟通洞察与主动提醒 :d3, 2026-11-10, 30d +``` + +### 7.2 里程碑 + +| 里程碑 | 时间 | 交付物 | +|--------|------|--------| +| M1 - 知识库就绪 | 2026-07 | 数据管线 + 向量索引 + 全文检索 | +| M2 - 本地 AI 可用 | 2026-09 | ONNX 推理 + 嵌入 + 摘要模型 | +| M3 - 云端 AI 可用 | 2026-10 | 云端 API 对接 + 流式输出 | +| M4 - 功能完整 | 2026-12 | 脱敏 + 授权 + 智能搜索 + 洞察 | + +### 7.3 风险与应对 + +| 风险 | 影响 | 应对策略 | +|------|------|---------| +| 本地模型精度不足 | 分析质量不理想 | 云端模型作为降级方案 | +| ONNX 包体积大 | APK 膨胀 | 模型按需下载,不内置 | +| 云端 API 成本 | 运营费用增加 | 本地优先 + 请求缓存 + 限流 | +| 隐私合规风险 | 法律问题 | 严格脱敏 + 用户授权 + 审计 | \ No newline at end of file diff --git a/android/docs/architecture/backend-microservices.md b/android/docs/architecture/backend-microservices.md new file mode 100644 index 0000000..b0ded68 --- /dev/null +++ b/android/docs/architecture/backend-microservices.md @@ -0,0 +1,401 @@ +# 后端微服务架构设计文档 + +## 1. 概述 + +### 1.1 为什么需要后端微服务架构 +MessageVault 目前以本地备份为核心,所有数据存储在设备端。以下需求驱动了后端微服务架构的引入: + +| 需求 | 说明 | +|------|------| +| 云端同步 | 用户期望多设备间同步备份数据 | +| 跨设备恢复 | 换机时从云端恢复历史备份 | +| AI 云端分析 | 本地模型能力有限,需云端大模型支持 | +| 协作备份 | 家庭成员共享备份空间 | +| 数据安全 | 云端加密存储,防止设备丢失导致数据丢失 | + +### 1.2 设计目标 + +- **轻量可自部署**:支持家庭 NAS 的 Docker Compose 一键部署 +- **渐进式架构**:从单体开始,按需拆分为微服务 +- **安全优先**:端到端加密、零知识架构、最小权限 +- **成本可控**:资源占用低,适合个人/家庭使用场景 + +--- + +## 2. 服务拆分方案 + +### 2.1 服务全景图 + +```mermaid +graph TB + subgraph client[客户端] + android[Android] + harmony[鸿蒙] + web[Web 管理面板] + end + + subgraph gateway[API 网关] + gw[API Gateway
Nginx / Kong] + end + + subgraph services[微服务] + auth[认证服务
auth-service] + backup[备份存储服务
backup-service] + ai[AI 分析服务
ai-service] + push[推送服务
push-service] + end + + subgraph storage[存储层] + pg[(PostgreSQL)] + minio[(MinIO)] + redis[(Redis)] + chroma[(ChromaDB)] + end + + client --> gateway + gateway --> auth & backup & ai & push + auth --> pg & redis + backup --> pg & minio + ai --> pg & chroma + push --> redis +``` + +### 2.2 服务职责 + +| 服务 | 职责 | 技术栈 | 数据存储 | +|------|------|--------|---------| +| auth-service | 用户认证、Token 管理、OAuth2.0 | Go / Kotlin | PostgreSQL + Redis | +| backup-service | 备份上传/下载/管理、版本控制 | Go / Kotlin | PostgreSQL + MinIO | +| ai-service | AI 分析、知识库管理、模型调度 | Python | PostgreSQL + ChromaDB | +| push-service | 消息推送、事件通知 | Go | Redis | +| API Gateway | 路由、限流、鉴权、日志 | Nginx / Kong | - | + +### 2.3 服务间通信 + +```mermaid +graph LR + gw[API Gateway] -->|HTTP/REST| auth & backup & ai & push + auth -->|gRPC| backup + backup -->|异步消息| push + ai -->|HTTP/REST| backup + subgraph mq[消息队列 - Redis Streams] + stream1[backup.events] + stream2[auth.events] + end + backup --> stream1 + auth --> stream2 + push --> stream1 +``` + +### 2.4 服务 API 设计 + +#### auth-service + +| 方法 | 端点 | 说明 | +|------|------|------| +| POST | `/api/v1/auth/register` | 用户注册 | +| POST | `/api/v1/auth/login` | 用户登录 | +| POST | `/api/v1/auth/logout` | 用户登出 | +| POST | `/api/v1/auth/refresh` | 刷新 Token | +| POST | `/api/v1/auth/oauth2/{provider}` | OAuth2.0 登录 | +| GET | `/api/v1/auth/me` | 获取当前用户 | + +#### backup-service + +| 方法 | 端点 | 说明 | +|------|------|------| +| POST | `/api/v1/backups` | 上传备份 | +| GET | `/api/v1/backups` | 列出备份 | +| GET | `/api/v1/backups/{id}` | 获取备份详情 | +| GET | `/api/v1/backups/{id}/download` | 下载备份 | +| DELETE | `/api/v1/backups/{id}` | 删除备份 | + +#### ai-service + +| 方法 | 端点 | 说明 | +|------|------|------| +| POST | `/api/v1/ai/analyze` | 执行分析 | +| POST | `/api/v1/ai/analyze/stream` | 流式分析 | +| POST | `/api/v1/ai/knowledge-base/rebuild` | 重建知识库 | +| GET | `/api/v1/ai/models` | 获取可用模型 | + +--- + +## 3. API 网关设计 + +### 3.1 网关架构 + +```mermaid +graph TB + client[客户端请求] --> gateway[API Gateway - Kong] + subgraph plugins[插件链] + plugin_auth[JWT 认证] + plugin_rate[限流控制] + plugin_cors[CORS] + plugin_log[请求日志] + end + gateway --> plugins --> router[路由引擎] + router --> auth_svc[auth-service :8081] & backup_svc[backup-service :8082] & ai_svc[ai-service :8083] & push_svc[push-service :8084] +``` + +### 3.2 路由规则 + +| 路径 | 目标服务 | 认证要求 | 限流 | +|------|---------|---------|------| +| `/api/v1/auth/login` | auth-service | 无 | 10次/分钟 | +| `/api/v1/auth/register` | auth-service | 无 | 5次/分钟 | +| `/api/v1/auth/*` | auth-service | JWT | 60次/分钟 | +| `/api/v1/backups` | backup-service | JWT | 30次/分钟 | +| `/api/v1/backups/*/download` | backup-service | JWT | 10次/分钟 | +| `/api/v1/ai/*` | ai-service | JWT | 20次/分钟 | + +### 3.3 鉴权流程 + +```mermaid +sequenceDiagram + participant Client as 客户端 + participant GW as API Gateway + participant Auth as auth-service + participant Service as 目标服务 + + Client->>GW: 请求 (携带 JWT) + GW->>GW: 验证 JWT 签名和有效期 + alt JWT 有效 + GW->>Service: 转发请求 (X-User-Id Header) + Service-->>Client: 200 OK + else JWT 过期 + GW-->>Client: 401 Token Expired + Client->>GW: POST /auth/refresh + GW->>Auth: 验证 Refresh Token + Auth-->>Client: 新 JWT + else JWT 无效 + GW-->>Client: 401 Unauthorized + end +``` + +--- + +## 4. 数据流架构 + +### 4.1 备份上传数据流 + +```mermaid +sequenceDiagram + participant App as 移动端 + participant GW as API Gateway + participant Backup as backup-service + participant MinIO as MinIO + participant PG as PostgreSQL + + App->>GW: POST /backups (JWT + 加密数据) + GW->>Backup: 转发请求 + Backup->>Backup: 验证 checksum + Backup->>MinIO: 上传加密文件 + MinIO-->>Backup: object_key + Backup->>PG: 保存元数据 + Backup-->>App: 201 Created { backup_id } +``` + +### 4.2 AI 分析数据流 + +```mermaid +sequenceDiagram + participant App as 移动端 + participant AI as ai-service + participant Chroma as ChromaDB + participant LLM as 云端 LLM + + App->>AI: POST /ai/analyze (JWT + 查询) + AI->>Chroma: 语义检索 + Chroma-->>AI: 相关文档片段 + AI->>AI: 数据脱敏 + AI->>LLM: 调用大模型 + LLM-->>AI: 分析结果 + AI->>AI: 脱敏还原 + AI-->>App: 200 OK { analysis } +``` + +### 4.3 端到端加密 + +```mermaid +graph LR + subgraph mobile[移动端] + encrypt[AES-256-GCM 加密] + end + subgraph transport[传输层] + https[HTTPS / TLS 1.3] + end + subgraph server[服务端] + backup_svc[backup-service] + minio[MinIO 加密存储] + end + encrypt --> https --> backup_svc --> minio +``` + +服务端无法解密用户数据,实现零知识架构。 + +--- + +## 5. 部署架构 + +### 5.1 Kubernetes 部署 + +```mermaid +graph TB + subgraph k8s[Kubernetes 集群] + ingress[Nginx Ingress] + subgraph svc[服务层] + auth_d[auth-service 2 replicas] + backup_d[backup-service 2 replicas] + ai_d[ai-service 1 replica] + push_d[push-service 1 replica] + end + subgraph mw[中间件] + pg_s[PostgreSQL] + redis_s[Redis] + minio_s[MinIO] + chroma_s[ChromaDB] + end + end + ingress --> auth_d & backup_d & ai_d & push_d + auth_d --> pg_s & redis_s + backup_d --> pg_s & minio_s + ai_d --> pg_s & chroma_s +``` +资源配置:auth-service (2副本, 100-500m CPU, 128-256Mi)、backup-service (2副本, 200-1000m, 256-512Mi)、ai-service (1副本, 500-2000m, 512Mi-2Gi)、push-service (1副本, 50-200m, 64-128Mi)。 + +--- + +## 6. NAS 自部署方案 + +### 6.1 Docker Compose 配置 + +```yaml +version: '3.8' +services: + nginx: + image: nginx:alpine + ports: ["8443:443", "8080:80"] + volumes: [./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro, ./config/nginx/ssl:/etc/nginx/ssl:ro] + depends_on: [auth-service, backup-service, ai-service] + restart: unless-stopped + auth-service: + image: messagevault/auth-service:latest + environment: [DATABASE_URL=postgresql://mvault:mvault@postgres:5432/mvault_auth, REDIS_URL=redis://redis:6379/0, JWT_SECRET=${JWT_SECRET}] + depends_on: [postgres, redis] + restart: unless-stopped + backup-service: + image: messagevault/backup-service:latest + environment: [DATABASE_URL=postgresql://mvault:mvault@postgres:5432/mvault_backup, MINIO_ENDPOINT=minio:9000, MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}, MINIO_SECRET_KEY=${MINIO_SECRET_KEY}] + depends_on: [postgres, minio] + restart: unless-stopped + ai-service: + image: messagevault/ai-service:latest + environment: [DATABASE_URL=postgresql://mvault:mvault@postgres:5432/mvault_ai, CHROMA_HOST=chromadb, CHROMA_PORT=8000, OPENAI_API_KEY=${OPENAI_API_KEY:-}] + depends_on: [postgres, chromadb] + restart: unless-stopped + push-service: + image: messagevault/push-service:latest + environment: [REDIS_URL=redis://redis:6379/1] + depends_on: [redis] + restart: unless-stopped + postgres: + image: postgres:16-alpine + environment: [POSTGRES_USER=mvault, POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-mvault}] + volumes: [./data/postgres:/var/lib/postgresql/data] + restart: unless-stopped + redis: + image: redis:7-alpine + command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru + volumes: [./data/redis:/data] + restart: unless-stopped + minio: + image: minio/minio:latest + command: server /data --console-address ":9001" + environment: [MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-minioadmin}, MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-minioadmin}] + volumes: [./data/minio:/data] + ports: ["9001:9001"] + restart: unless-stopped + chromadb: + image: chromadb/chroma:latest + environment: [ANONYMIZED_TELEMETRY=FALSE] + volumes: [./data/chroma:/chroma/chroma] + restart: unless-stopped +``` + +### 6.2 轻量部署模式 + +对于资源受限的 NAS(< 4GB RAM),提供轻量模式:合并 auth + backup + push 为单服务,使用 SQLite 替代 PostgreSQL,省略 ChromaDB(AI 仅支持云端模型)。 + +| 部署模式 | 内存占用 | 适用场景 | +|---------|---------|---------| +| 完整模式 | ~3GB | 高性能 NAS / 服务器 | +| 轻量模式 | ~1GB | 入门 NAS / 树莓派 | +| All-in-One | ~512MB | 极低资源环境 | + +--- + +## 7. 开发路线图 + +### 7.1 阶段规划 + +```mermaid +gantt + title 后端微服务开发路线图 + dateFormat YYYY-MM-DD + section 阶段一:基础服务 + auth-service 开发 :a1, 2026-06-01, 30d + backup-service 开发 :a2, 2026-06-15, 30d + API Gateway 搭建 :a3, 2026-07-01, 15d + section 阶段二:存储与同步 + MinIO 对象存储集成 :b1, 2026-07-15, 15d + 端到端加密实现 :b2, 2026-08-01, 20d + section 阶段三:AI 服务 + ai-service 基础框架 :c1, 2026-08-15, 20d + 知识库与云端模型 :c2, 2026-09-01, 25d + section 阶段四:部署运维 + Docker Compose 配置 :d1, 2026-10-01, 10d + NAS 部署方案验证 :d2, 2026-10-10, 15d + K8s Helm Chart :d3, 2026-10-25, 15d +``` + +### 7.2 里程碑 + +| 里程碑 | 时间 | 交付物 | +|--------|------|--------| +| M1 - 认证就绪 | 2026-07 | auth-service + JWT + OAuth2.0 | +| M2 - 备份可用 | 2026-08 | backup-service + MinIO + 加密 | +| M3 - AI 上线 | 2026-10 | ai-service + 知识库 + 云端模型 | +| M4 - 自部署就绪 | 2026-11 | Docker Compose + NAS 部署 | + +### 7.3 风险与应对 + +| 风险 | 影响 | 应对策略 | +|------|------|---------| +| NAS 环境多样性 | 兼容性问题 | 提供 ARM/AMD64 多架构镜像 | +| 存储空间不足 | 上传失败 | 配额管理 + 清理策略 | +| 网络不稳定 | 远程访问中断 | 离线模式 + 断点续传 | +| 数据迁移困难 | 升级丢数据 | 迁移脚本 + 自动备份 | +| 安全漏洞 | 数据泄露 | 安全审计 + 依赖更新 | + +## 附录:环境变量与端口 + +| 变量名 | 必需 | 默认值 | 说明 | +|--------|------|--------|------| +| `JWT_SECRET` | 是 | - | JWT 签名密钥 | +| `POSTGRES_PASSWORD` | 否 | `mvault` | PostgreSQL 密码 | +| `MINIO_ACCESS_KEY` | 否 | `minioadmin` | MinIO 访问密钥 | +| `MINIO_SECRET_KEY` | 否 | `minioadmin` | MinIO 密钥 | +| `OPENAI_API_KEY` | 否 | - | OpenAI API 密钥 | + +| 服务 | 内部端口 | 外部端口 | +|------|---------|---------| +| Nginx | 80/443 | 8080/8443 | +| auth-service | 8081 | - | +| backup-service | 8082 | - | +| ai-service | 8083 | - | +| push-service | 8084 | - | +| PostgreSQL | 5432 | - | +| Redis | 6379 | - | +| MinIO | 9000/9001 | 9001 | +| ChromaDB | 8000 | - | \ No newline at end of file diff --git a/android/docs/architecture/harmonyos-adaptation.md b/android/docs/architecture/harmonyos-adaptation.md new file mode 100644 index 0000000..8493588 --- /dev/null +++ b/android/docs/architecture/harmonyos-adaptation.md @@ -0,0 +1,401 @@ +# 鸿蒙适配设计文档 + +## 1. 概述 + +### 1.1 背景 + +随着华为 HarmonyOS 的快速发展和市场份额持续增长,越来越多的用户在鸿蒙系统上使用 MessageVault。鸿蒙系统从 NEXT 版本开始不再兼容 Android APK,这意味着 MessageVault 需要开发原生鸿蒙版本以覆盖这部分用户群体。 + +### 1.2 目标 + +- 实现与 Android 版本功能对等的鸿蒙原生应用 +- 最大化复用现有 Kotlin 核心逻辑,降低开发和维护成本 +- 确保鸿蒙端与 Android 端备份数据格式完全兼容 +- 为鸿蒙端预留 AI Agent 能力集成接口 + +### 1.3 范围 + +本文档覆盖鸿蒙端应用的整体架构设计、权限适配、核心逻辑复用、原生开发方案及 AI Agent 集成规划,不涉及具体代码实现细节。 +--- + +## 2. 鸿蒙权限差异分析 + +### 2.1 权限模型对比 + +Android 与 HarmonyOS 在消息类应用的权限模型上存在显著差异: + +| 权限功能 | Android | HarmonyOS | 差异说明 | +|---------|---------|-----------|---------| +| 短信读取 | `READ_SMS`(危险权限) | `ohos.permission.READ_MESSAGES`(user_grant) | 鸿蒙需在 module.json5 声明,且用户可随时撤销 | +| 通话记录读取 | `READ_CALL_LOG`(危险权限) | `ohos.permission.READ_CALL_LOG`(user_grant) | 权限名称相似,但授权流程不同 | +| 联系人读取 | `READ_CONTACTS`(危险权限) | `ohos.permission.READ_CONTACTS`(user_grant) | 鸿蒙联系人通过 DataShareHelper 访问 | +| 短信发送 | `SEND_SMS`(危险权限) | `ohos.permission.SEND_MESSAGES`(user_grant) | 鸿蒙需额外申请短信发送能力 | +| 后台运行 | `FOREGROUND_SERVICE` | `ohos.permission.KEEP_BACKGROUND_RUNNING` | 鸿蒙长时任务需明确声明类型 | +| 网络访问 | `INTERNET`(普通权限) | `ohos.permission.INTERNET`(normal) | 基本一致 | + +### 2.2 权限申请流程差异 + +```mermaid +flowchart TD + subgraph Android + A1[声明权限] --> A2[运行时请求] + A2 --> A3{用户选择} + A3 -->|允许| A4[获取权限] + A3 -->|拒绝| A5[引导设置页] + end + + subgraph HarmonyOS + B1[module.json5 声明] --> B2[abilityContext.requestPermissionsFromUser] + B2 --> B3{用户选择} + B3 -->|允许| B4[获取权限] + B3 -->|拒绝| B5[显示理由后再次请求] + B5 --> B6{用户选择} + B6 -->|永久拒绝| B7[引导应用设置页] + end +``` + +### 2.3 数据访问 API 差异 + +Android 通过 `ContentResolver` 访问系统数据,而鸿蒙使用 `DataShareHelper`: + +| 数据类型 | Android API | HarmonyOS API | +|---------|------------|---------------| +| 短信 | `ContentResolver.query(Telephony.Sms.CONTENT_URI)` | `DataShareHelper.query(SMS_URI)` | +| 通话记录 | `ContentResolver.query(CallLog.Calls.CONTENT_URI)` | `DataShareHelper.query(CALL_LOG_URI)` | +| 联系人 | `ContentResolver.query(ContactsContract.Contacts.CONTENT_URI)` | `DataShareHelper.query(CONTACT_URI)` | + +--- + +## 3. 核心逻辑复用策略 + +### 3.1 可复用模块识别 + +当前 Android 项目中,以下模块为纯 Kotlin 逻辑,与 Android 框架无耦合,可直接复用到鸿蒙端: + +| 模块 | 路径 | 复用方式 | 说明 | +|------|------|---------|------| +| 数据模型 | `data/models/BackupModels.kt` | Kotlin Multiplatform | `BackupData`、`MessageData`、`CallLogData`、`ContactData` 等纯数据类 | +| 备份状态 | `data/models/BackupModels.kt` | Kotlin Multiplatform | `BackupState`、`RestoreState` 密封类 | +| JSON 序列化配置 | `data/BackupManager.kt` (Gson 配置) | 提取为独立模块 | Gson 实例配置逻辑可跨平台使用 | +| 工具类 | `utils/PhoneNumberUtils.kt` | Kotlin Multiplatform | 号码格式化等纯逻辑 | + +### 3.2 Kotlin Multiplatform 复用架构 + +```mermaid +graph TB + subgraph shared[共享模块 - Kotlin Multiplatform] + models[数据模型层
BackupData / MessageData / CallLogData / ContactData] + serialization[序列化层
Gson 配置 / JSON Schema] + utils[工具层
PhoneNumberUtils / Constants] + state[状态层
BackupState / RestoreState] + end + + subgraph android[Android 端] + a_backup[BackupManager
ContentResolver 读取] + a_restore[RestoreManager
ContentResolver 写入] + a_ui[Jetpack Compose UI] + end + + subgraph harmony[鸿蒙端] + h_backup[HarmonyBackupManager
DataShareHelper 读取] + h_restore[HarmonyRestoreManager
DataShareHelper 写入] + h_ui[ArkUI 界面] + end + + models --> a_backup + models --> h_backup + serialization --> a_backup + serialization --> h_backup + state --> a_ui + state --> h_ui + utils --> a_backup + utils --> h_backup +``` + +### 3.3 复用策略实施 + +**阶段一:提取共享模块** + +将纯 Kotlin 数据模型和工具类提取到独立的 Kotlin Multiplatform 模块 `sdk/backup-shared`: + +``` +sdk/backup-shared/ +├── build.gradle.kts # KMP 构建配置 +├── src/ +│ ├── commonMain/kotlin/ # 共享代码 +│ │ └── imken/messagevault/shared/ +│ │ ├── model/ # 数据模型 +│ │ ├── state/ # 状态定义 +│ │ └── util/ # 工具类 +│ ├── androidMain/kotlin/ # Android 特定实现 +│ └── harmonynosMain/kotlin/ # 鸿蒙特定实现 +``` + +**阶段二:定义平台接口** + +通过 `expect/actual` 机制处理平台差异: + +```kotlin +// commonMain +expect class PlatformDataReader { + fun readMessages(): List + fun readCallLogs(): List + fun readContacts(): List +} + +// androidMain +actual class PlatformDataReader actual constructor() { + actual fun readMessages(): List { + // ContentResolver 实现 + } +} + +// harmonynosMain +actual class PlatformDataReader actual constructor() { + actual fun readMessages(): List { + // DataShareHelper 实现 + } +} +``` + +--- + +## 4. 鸿蒙原生开发方案 + +### 4.1 技术栈选择 + +| 层次 | 技术方案 | 说明 | +|------|---------|------| +| 开发语言 | ArkTS | 鸿蒙官方推荐语言,TypeScript 超集 | +| UI 框架 | ArkUI (声明式) | 鸿蒙原生 UI 框架 | +| 状态管理 | @State / @Link / AppStorage | ArkUI 内置状态管理 | +| 数据持久化 | 关系型数据库 (RDB) | 鸿蒙本地数据库 | +| 网络请求 | @ohos.net.http | 鸿蒙网络模块 | +| 文件管理 | @ohos.file.fs | 鸿蒙文件系统 | + +### 4.2 应用架构 + +```mermaid +graph TB + subgraph ui[UI 层 - ArkUI] + pages[Pages
备份页/恢复页/设置页/更多页] + components[自定义组件
BackupCard/PermissionDialog] + end + + subgraph viewmodel[ViewModel 层] + backup_vm[BackupViewModel] + restore_vm[RestoreViewModel] + settings_vm[SettingsViewModel] + end + + subgraph service[Service 层] + backup_svc[BackupService
DataShareHelper 数据读取] + restore_svc[RestoreService
DataShareHelper 数据写入] + permission_svc[PermissionService
权限管理] + end + + subgraph data[Data 层] + model[数据模型
与 Android 端共享 JSON Schema] + repository[Repository
本地文件 + 云端 API] + knowledge[KnowledgeRepository
AI 知识库] + end + + pages --> viewmodel + viewmodel --> service + service --> data +``` + +### 4.3 项目结构 + +``` +messagevault-harmony/ +├── entry/ +│ └── src/main/ +│ ├── ets/ +│ │ ├── entryability/ +│ │ │ └── EntryAbility.ets +│ │ ├── pages/ +│ │ │ ├── BackupPage.ets +│ │ │ ├── RestorePage.ets +│ │ │ ├── PreviewPage.ets +│ │ │ └── SettingsPage.ets +│ │ ├── viewmodel/ +│ │ │ ├── BackupViewModel.ets +│ │ │ └── RestoreViewModel.ets +│ │ ├── service/ +│ │ │ ├── BackupService.ets +│ │ │ ├── RestoreService.ets +│ │ │ └── PermissionService.ets +│ │ ├── model/ +│ │ │ ├── BackupData.ets +│ │ │ ├── MessageData.ets +│ │ │ └── CallLogData.ets +│ │ └── common/ +│ │ ├── Constants.ets +│ │ └── Logger.ets +│ └── resources/ +│ ├── base/ +│ │ ├── element/ +│ │ ├── media/ +│ │ └── profile/ +│ ├── zh_CN/ +│ └── en_US/ +├── build-profile.json5 +└── hvigorfile.ts +``` + +### 4.4 数据读取实现要点 + +鸿蒙端通过 `DataShareHelper` 读取系统数据的核心流程: + +```typescript +// 短信读取伪代码 +import dataShare from '@ohos.data.dataShare'; + +async function readMessages(context: Context): Promise { + const helper = dataShare.createDataShareHelper(context, SMS_URI); + const resultColumns = ['_id', 'address', 'body', 'date', 'type', 'read', 'status']; + const predicate = new dataShare.DataSharePredicates(); + const resultSet = await helper.query(SMS_URI, resultColumns, predicate); + + const messages: MessageData[] = []; + while (resultSet.goToNextRow()) { + messages.push({ + id: resultSet.getLong(resultSet.getColumnIndex('_id')), + address: resultSet.getString(resultSet.getColumnIndex('address')), + body: resultSet.getString(resultSet.getColumnIndex('body')), + date: resultSet.getLong(resultSet.getColumnIndex('date')), + type: resultSet.getLong(resultSet.getColumnIndex('type')), + read: resultSet.getLong(resultSet.getColumnIndex('read')) === 1, + status: resultSet.getLong(resultSet.getColumnIndex('status')) + }); + } + resultSet.close(); + return messages; +} +``` + +--- + +## 5. AI Agent 集成规划 + +### 5.1 鸿蒙端 AI 能力架构 + +```mermaid +graph LR + subgraph app[鸿蒙应用] + ai_ui[AI 交互界面
ArkUI] + ai_vm[AI ViewModel] + end + + subgraph local[本地 AI] + mindspore[MindSpore Lite
鸿蒙端推理引擎] + knowledge[本地知识库
RDB + 向量索引] + end + + subgraph cloud[云端 AI] + api[AI API 网关] + llm[大语言模型] + end + + ai_ui --> ai_vm + ai_vm --> mindspore + ai_vm --> knowledge + ai_vm --> api + api --> llm +``` + +### 5.2 MindSpore Lite 集成 + +鸿蒙系统原生支持 MindSpore Lite 作为端侧 AI 推理引擎,相比 Android 端使用 ONNX Runtime / TFLite 更加自然: + +| 能力 | Android 方案 | 鸿蒙方案 | +|------|-------------|---------| +| 端侧推理 | ONNX Runtime / TFLite | MindSpore Lite | +| 模型格式 | .onnx / .tflite | .ms (MindSpore) | +| NPU 加速 | NNAPI Delegate | HiAI Delegate | +| API 语言 | Kotlin / Java | ArkTS / C++ | + +### 5.3 知识库构建 + +鸿蒙端知识库基于用户备份数据构建,与 Android 端共享数据格式: + +1. **数据索引**:解析备份 JSON 文件,提取消息/通话/联系人数据 +2. **向量化存储**:使用 MindSpore Lite 的文本嵌入模型将消息内容向量化 +3. **本地检索**:基于向量相似度的语义搜索 +4. **隐私保护**:所有向量化计算在本地完成,不上传原始数据 + +### 5.4 AI 分析场景 + +| 场景 | 描述 | 实现方式 | +|------|------|---------| +| 消息摘要 | 对大量消息生成摘要 | 本地小模型 / 云端大模型 | +| 联系人洞察 | 分析与某联系人的沟通频率和模式 | 本地统计分析 + AI 解读 | +| 通话分析 | 通话时长/频率趋势分析 | 本地统计 + 可视化 | +| 智能搜索 | 自然语言搜索消息内容 | 向量检索 + 语义匹配 | + +--- + +## 6. 开发路线图 + +### 6.1 阶段规划 + +```mermaid +gantt + title 鸿蒙适配开发路线图 + dateFormat YYYY-MM-DD + section 阶段一:基础架构 + 提取 KMP 共享模块 :a1, 2026-06-01, 30d + 鸿蒙项目脚手架搭建 :a2, 2026-06-15, 20d + 权限系统适配 :a3, 2026-07-01, 15d + section 阶段二:核心功能 + 短信备份/恢复 :b1, 2026-07-15, 30d + 通话记录备份/恢复 :b2, 2026-08-01, 20d + 联系人备份/恢复 :b3, 2026-08-15, 15d + section 阶段三:体验优化 + UI 适配与优化 :c1, 2026-09-01, 20d + 云端同步功能 :c2, 2026-09-15, 25d + section 阶段四:AI 能力 + 本地知识库构建 :d1, 2026-10-01, 30d + MindSpore Lite 集成 :d2, 2026-10-15, 30d + AI 分析功能上线 :d3, 2026-11-15, 20d +``` + +### 6.2 里程碑 + +| 里程碑 | 时间 | 交付物 | +|--------|------|--------| +| M1 - 架构就绪 | 2026-07 | KMP 共享模块 + 鸿蒙项目骨架 + 权限适配 | +| M2 - 功能对齐 | 2026-09 | 短信/通话/联系人备份恢复完整功能 | +| M3 - 体验完善 | 2026-10 | UI 优化 + 云端同步 + 应用商店上架 | +| M4 - AI 增强 | 2026-12 | 本地知识库 + AI 分析 + 智能搜索 | + +### 6.3 风险与应对 + +| 风险 | 影响 | 应对策略 | +|------|------|---------| +| 鸿蒙 API 变更 | 数据读取接口不稳定 | 封装适配层,隔离 API 变化 | +| KMP 鸿蒙目标支持 | Kotlin 官方对 HarmonyOS 目标支持不完善 | 优先使用 ArkTS 原生实现,KMP 仅共享数据模型 | +| MindSpore 模型生态 | 可用模型较少 | 预留 ONNX 模型转换方案 | +| 鸿蒙应用商店审核 | 审核流程和政策不确定 | 提前了解审核要求,预留调整时间 | + +--- + +## 附录 + +### A. 术语表 + +| 术语 | 说明 | +|------|------| +| ArkTS | 鸿蒙应用开发语言,TypeScript 超集 | +| ArkUI | 鸿蒙声明式 UI 框架 | +| DataShareHelper | 鸿蒙数据共享访问助手 | +| MindSpore Lite | 华为端侧 AI 推理框架 | +| KMP | Kotlin Multiplatform | +| module.json5 | 鸿蒙模块配置文件 | + +### B. 参考资料 + +- [HarmonyOS 应用开发文档](https://developer.harmonyos.com/) +- [Kotlin Multiplatform 官方文档](https://kotlinlang.org/docs/multiplatform.html) +- [MindSpore Lite 文档](https://www.mindspore.cn/lite) \ No newline at end of file diff --git a/android/docs/architecture/third-party-auth.md b/android/docs/architecture/third-party-auth.md new file mode 100644 index 0000000..00637f1 --- /dev/null +++ b/android/docs/architecture/third-party-auth.md @@ -0,0 +1,379 @@ +# 第三方登录设计文档 + +## 1. 概述 + +### 1.1 背景 + +MessageVault 当前仅支持本地模式,无需登录即可使用。随着云端同步、AI 分析等功能引入,需要建立统一用户身份体系,支持多种登录方式。 + +### 1.2 设计目标 + +- **本地优先**:保持无服务器即可使用的核心能力 +- **渐进增强**:登录后解锁云端同步等高级功能 +- **可扩展**:灵活接入新的第三方登录提供商 +- **安全可靠**:Token 安全存储、自动刷新、HTTPS 强制传输 + +--- + +## 2. AuthProvider 接口设计 + +### 2.1 核心接口 + +```kotlin +interface AuthProvider { + val providerId: String + val displayName: String + val isAvailable: Boolean + + suspend fun login(context: AuthContext): AuthResult + suspend fun logout(): Result + fun isAuthenticated(): Boolean + fun getCurrentUser(): UserInfo? + suspend fun getToken(): String? + suspend fun refreshToken(): Result + fun observeAuthState(): Flow +} +``` + +### 2.2 数据模型 + +```kotlin +sealed class AuthState { + object Unauthenticated : AuthState() + object Authenticating : AuthState() + data class Authenticated(val user: UserInfo) : AuthState() + data class Error(val message: String, val code: String?) : AuthState() +} + +data class UserInfo( + val uid: String, + val displayName: String, + val email: String?, + val avatarUrl: String?, + val providerId: String, + val metadata: Map = emptyMap() +) + +data class AuthToken( + val accessToken: String, + val refreshToken: String?, + val expiresIn: Long, + val tokenType: String = "Bearer", + val createdAt: Long = System.currentTimeMillis() +) { + val isExpired: Boolean + get() = System.currentTimeMillis() > createdAt + expiresIn * 1000 +} + +sealed class AuthResult { + data class Success(val user: UserInfo, val token: AuthToken) : AuthResult() + data class Failure(val error: AuthError) : AuthResult() + object Cancelled : AuthResult() +} + +sealed class AuthError { + object NetworkError : AuthError() + object InvalidCredentials : AuthError() + object UserCancelled : AuthError() + data class ProviderError(val code: String, val message: String) : AuthError() +} +``` + +### 2.3 接口关系图 + +```mermaid +classDiagram + class AuthProvider { + <> + +providerId: String + +login(context): AuthResult + +logout(): Result~Unit~ + +isAuthenticated(): Boolean + +getCurrentUser(): UserInfo? + +getToken(): String? + +refreshToken(): Result~String~ + +observeAuthState(): Flow~AuthState~ + } + + class LocalAuthProvider { + +providerId = "local" + } + + class FeiniuAuthProvider { + +providerId = "feiniu" + } + + class OAuth2AuthProvider { + +providerId: String + } + + class AuthProviderRegistry { + -providers: Map~String, AuthProvider~ + +register(provider) + +get(providerId): AuthProvider? + } + + AuthProvider <|.. LocalAuthProvider + AuthProvider <|.. FeiniuAuthProvider + AuthProvider <|.. OAuth2AuthProvider + AuthProviderRegistry o-- AuthProvider +``` + +--- + +## 3. 本地模式实现 + +### 3.1 LocalAuthProvider 设计 + +`LocalAuthProvider` 是默认认证实现,生成本地唯一标识符作为用户 ID,所有数据存储在设备本地。 + +```kotlin +class LocalAuthProvider( + private val tokenStore: TokenStore +) : AuthProvider { + + override val providerId = "local" + override val displayName = "本地模式" + override val isAvailable = true + + private val _authState = MutableStateFlow(AuthState.Unauthenticated) + private var localUser: UserInfo? = null + + override suspend fun login(context: AuthContext): AuthResult { + val user = tokenStore.getLocalUser() ?: createLocalUser() + localUser = user + tokenStore.saveLocalUser(user) + _authState.value = AuthState.Authenticated(user) + return AuthResult.Success(user, generateLocalToken(user)) + } + + override suspend fun logout(): Result { + localUser = null + tokenStore.clearLocalUser() + _authState.value = AuthState.Unauthenticated + return Result.success(Unit) + } + + override fun isAuthenticated(): Boolean = localUser != null + override fun getCurrentUser(): UserInfo? = localUser + override suspend fun getToken(): String? = tokenStore.getLocalToken() + override fun observeAuthState(): Flow = _authState + + private fun createLocalUser(): UserInfo = UserInfo( + uid = "local_${UUID.randomUUID()}", + displayName = "本地用户", + email = null, avatarUrl = null, providerId = providerId + ) +} +``` + +### 3.2 本地模式数据流 + +```mermaid +sequenceDiagram + participant User as 用户 + participant App as MessageVault + participant Local as LocalAuthProvider + participant Store as TokenStore + + User->>App: 首次启动 + App->>Local: login() + Local->>Store: getLocalUser() + Store-->>Local: null (首次) + Local->>Local: createLocalUser() + Local->>Store: saveLocalUser(user) + Local-->>App: AuthResult.Success + App->>App: 进入主界面(本地模式) +``` + +### 3.3 本地模式限制 + +| 功能 | 本地模式 | 在线模式 | +|------|---------|---------| +| 本地备份/恢复 | ✅ | ✅ | +| 云端同步 | ❌ | ✅ | +| 跨设备恢复 | ❌ | ✅ | +| AI 云端分析 | ❌ | ✅ | +| 本地 AI 分析 | ✅ | ✅ | + +--- + +## 4. 非牛登录接入方案 + +### 4.1 FeiniuAuthProvider 设计 + +非牛登录采用 OAuth 2.0 授权码模式,用户通过非牛账号认证后获取 Token。 + +```kotlin +class FeiniuAuthProvider( + private val config: FeiniuAuthConfig, + private val tokenStore: TokenStore, + private val httpClient: HttpClient +) : AuthProvider { + + override val providerId = "feiniu" + override val displayName = "非牛登录" + override val isAvailable: Boolean + get() = config.clientId.isNotEmpty() + + data class FeiniuAuthConfig( + val clientId: String, + val clientSecret: String, + val redirectUri: String, + val authEndpoint: String = "https://auth.feiniu.com/oauth2/authorize", + val tokenEndpoint: String = "https://auth.feiniu.com/oauth2/token", + val userInfoEndpoint: String = "https://api.feiniu.com/userinfo", + val scopes: List = listOf("openid", "profile", "email") + ) + + override suspend fun login(context: AuthContext): AuthResult { + _authState.value = AuthState.Authenticating + return try { + val authCode = requestAuthCode(context) + val token = exchangeToken(authCode) + val user = fetchUserInfo(token.accessToken) + tokenStore.saveToken(providerId, token) + tokenStore.saveUser(providerId, user) + _authState.value = AuthState.Authenticated(user) + AuthResult.Success(user, token) + } catch (e: CancellationException) { + AuthResult.Cancelled + } catch (e: Exception) { + AuthResult.Failure(AuthError.ProviderError("FEINIU_ERROR", e.message ?: "")) + } + } +} +``` + +### 4.2 非牛登录流程 + +```mermaid +sequenceDiagram + participant User as 用户 + participant App as MessageVault + participant Browser as 系统浏览器 + participant Server as 非牛认证服务器 + + User->>App: 点击"非牛登录" + App->>Browser: 打开授权页面 + Browser->>Server: GET /oauth2/authorize + User->>Browser: 输入账号并授权 + Server-->>Browser: 302 redirect_uri?code=AUTH_CODE + Browser-->>App: 拦截回调,获取 code + App->>Server: POST /oauth2/token + Server-->>App: { access_token, refresh_token } + App->>Server: GET /userinfo + Server-->>App: { uid, name, email } + App->>App: 切换到在线模式 +``` + +--- + +## 5. OAuth2.0 扩展规划 + +### 5.1 通用 OAuth2AuthProvider + +```kotlin +class OAuth2AuthProvider( + private val config: OAuth2Config, + private val tokenStore: TokenStore, + private val httpClient: HttpClient +) : AuthProvider { + + data class OAuth2Config( + val providerId: String, + val displayName: String, + val clientId: String, + val clientSecret: String, + val redirectUri: String, + val authEndpoint: String, + val tokenEndpoint: String, + val userInfoEndpoint: String, + val scopes: List, + val userInfoMapper: (Map) -> UserInfo + ) +} +``` + +### 5.2 扩展点设计 + +```mermaid +graph TB + subgraph core[认证核心] + registry[AuthProviderRegistry] + manager[AuthManager] + store[TokenStore] + end + + subgraph providers[认证提供商] + local[LocalAuthProvider] + feiniu[FeiniuAuthProvider] + google[OAuth2AuthProvider - Google] + github[OAuth2AuthProvider - GitHub] + custom[自定义 Provider] + end + + providers --> registry + registry --> manager + manager --> store +``` + +接入新 OAuth2 提供商只需:1) 配置 `OAuth2Config`;2) 实现 `userInfoMapper`;3) 在 Registry 注册。 + +--- + +## 6. 安全考量 + +### 6.1 Token 存储安全 + +| 存储方式 | 安全等级 | 说明 | +|---------|---------|------| +| EncryptedSharedPreferences | 高 | 基于 Android Keystore 加密(推荐) | +| Android Keystore | 最高 | 硬件级安全,API 复杂 | +| SharedPreferences | 低 | 明文存储,不推荐 | + +```kotlin +interface TokenStore { + fun saveToken(providerId: String, token: AuthToken) + fun getToken(providerId: String): AuthToken? + fun clearToken(providerId: String) + fun saveUser(providerId: String, user: UserInfo) + fun getUser(providerId: String): UserInfo? + fun clearUser(providerId: String) + fun saveLocalUser(user: UserInfo) + fun getLocalUser(): UserInfo? + fun clearLocalUser() + fun saveLocalToken(token: AuthToken) + fun getLocalToken(): String? +} +``` + +### 6.2 Token 刷新机制 + +```mermaid +flowchart TD + A[API 请求] --> B{检查 Token} + B -->|有效| C[发送请求] + B -->|即将过期| D[后台刷新] + D -->|成功| C + D -->|失败| E{有 refresh_token?} + E -->|是| F[使用 refresh_token 刷新] + F -->|成功| C + F -->|失败| G[跳转登录页] + E -->|否| G + B -->|已过期| E + C --> I{响应} + I -->|200| J[返回数据] + I -->|401| F +``` + +### 6.3 其他安全措施 + +| 措施 | 说明 | +|------|------| +| 强制 HTTPS | 所有网络请求必须 HTTPS | +| 证书固定 | 关键 API 启用 Certificate Pinning | +| Token 绑定设备 | Token 与设备指纹绑定 | +| 敏感操作二次验证 | 删除云端数据需重新认证 | +| 本地数据加密 | 备份文件 AES-256 加密 | +| 日志脱敏 | 不记录 Token、密码等敏感信息 | diff --git a/android/features.md b/android/features.md index ffff310..825cf33 100644 --- a/android/features.md +++ b/android/features.md @@ -151,27 +151,69 @@ - 内存使用监控 - 电池消耗优化 +## 项目架构 + +### 模块化架构 + +项目已从单模块架构重构为多模块架构,核心逻辑提取为独立的SDK模块,实现关注点分离和跨平台复用: + +``` +MessageVault-Mobile/ +├── sdk/backup/ # 纯Kotlin备份/恢复SDK +├── sdk/auth/ # 纯Kotlin认证组件 +├── sdk/storage/ # Android Library存储组件 +├── app/ # Android应用壳 +└── docs/architecture/ # 架构设计文档 +``` + +#### SDK模块职责 + +| 模块 | 类型 | 职责 | 关键组件 | +|------|------|------|---------| +| `sdk/backup` | 纯Kotlin (java-library) | 备份/恢复核心逻辑 | `BackupManager`、`RestoreManager`、`BackupSerializer`、数据模型(`BackupData`、`Message`、`CallLog`、`Contact`)、读写接口(`SmsReader`/`SmsWriter`、`CallLogReader`/`CallLogWriter`、`ContactReader`/`ContactWriter`、`BackupFileReader`/`BackupFileWriter`) | +| `sdk/auth` | 纯Kotlin (java-library) | 认证与身份管理 | `AuthProvider`接口、`LocalAuthProvider`(本地模式)、`ThirdPartyAuthProvider`接口(第三方登录扩展)、`AuthManager`(认证管理器)、`UserInfo`、`AuthResult`、`AuthCredentials` | +| `sdk/storage` | Android Library | 存储抽象与实现 | `StorageProvider`接口、`LocalStorageProvider`(本地文件存储)、`RemoteStorageProvider`接口(远程存储)、Room数据库、Retrofit网络请求 | +| `app` | Android Application | 应用壳 | UI(Jetpack Compose)、导航、权限管理、Android平台实现(`AndroidSmsReader`/`AndroidSmsWriter`等)、ViewModel | + +#### 模块依赖规则 + +- `app` → `sdk/backup`、`sdk/auth`、`sdk/storage` +- SDK模块之间**互不依赖**(`sdk/backup` 不依赖 `sdk/auth` 或 `sdk/storage`) +- SDK模块**不依赖** `app` +- `sdk/backup` 和 `sdk/auth` 为纯Kotlin模块,不包含任何Android依赖 +- `sdk/storage` 为Android Library,依赖Room、Retrofit等Android库 + +#### 架构设计文档 + +详细的架构设计文档位于 `docs/architecture/` 目录: + +- [鸿蒙适配设计文档](docs/architecture/harmonyos-adaptation.md) — 鸿蒙原生开发方案、KMP复用策略、权限差异分析 +- [第三方登录设计文档](docs/architecture/third-party-auth.md) — AuthProvider接口设计、OAuth2.0扩展、Token安全 +- [AI Agent集成设计文档](docs/architecture/ai-agent-integration.md) — 知识库架构、本地/云端AI模型、隐私保护 +- [后端微服务架构设计文档](docs/architecture/backend-microservices.md) — 服务拆分、API网关、NAS自部署方案 + ## 技术实现原则 ### 1. 架构设计 - **模块化**: - - 清晰的关注点分离 - - 松耦合组件设计 - - 依赖注入模式 + - 清晰的关注点分离,核心逻辑与平台实现解耦 + - SDK模块采用接口驱动设计,平台实现通过依赖注入 + - 松耦合组件设计,SDK模块间零依赖 + - 纯Kotlin SDK模块可跨平台复用(Android、鸿蒙、JVM) - **数据模型**: - - 三层数据模型架构 - - 业务模型:处理应用内部逻辑(`model/`) - - UI模型:专用于UI展示(`models/`) - - 数据库实体:本地存储(`data/entity/`) + - SDK层数据模型:平台无关的纯数据类(`sdk/backup/model/`) + - 应用层UI模型:专用于UI展示(`app/model/`、`app/models/`) + - 存储层实体:本地数据库(`sdk/storage` Room实体) - 使用Kotlin数据类和扩展函数 - 类型安全的转换逻辑 - - JSON序列化(使用Gson) + - JSON序列化(使用Gson,封装在`BackupSerializer`中) - 版本化模型设计 - 清晰的模型间映射关系 - **API设计**: + - SDK接口定义平台无关契约(`SmsReader`、`StorageProvider`、`AuthProvider`) - RESTful接口 - 使用Retrofit进行API调用 - 可重试和缓存策略 @@ -209,8 +251,14 @@ ### 4. 测试策略 -- **单元测试**: +- **SDK模块测试**: + - `sdk/backup`:纯Kotlin单元测试,无需Android模拟器,覆盖`BackupManager`、`RestoreManager`、`BackupSerializer`及数据模型 + - `sdk/auth`:纯Kotlin单元测试,覆盖`AuthProvider`接口契约、`LocalAuthProvider`逻辑、`AuthManager`委托模式 + - `sdk/storage`:Android Instrumented测试,验证`LocalStorageProvider`文件操作、Room数据库交互 + +- **应用层测试**: - 使用JUnit和Mockito + - 模拟SDK接口进行ViewModel测试 - 模拟ContentProvider访问 - 业务逻辑全覆盖 @@ -218,6 +266,7 @@ - 使用AndroidX Test框架 - Espresso UI测试 - 端到端备份/恢复流程测试 + - SDK与App集成验证 - **CI/CD就绪**: - 测试可自动化 @@ -225,6 +274,12 @@ ### 5. 可扩展性 +- **SDK接口扩展**: + - `SmsReader`/`SmsWriter`等接口可适配不同平台实现(Android、鸿蒙) + - `AuthProvider`接口支持新增第三方登录提供商 + - `StorageProvider`接口支持新增存储后端(本地、云端、NAS) + - `ThirdPartyAuthProvider`接口为OAuth2.0扩展预留 + - **插件架构**: - 为未来功能预留扩展点 - 可替换的服务实现 @@ -234,12 +289,14 @@ - 适配器用于不同数据源 - 策略模式用于可切换行为 - 观察者用于事件通知 + - 委托模式用于`AuthManager` - **未来扩展考虑**: - MMS消息支持 - 联系人备份 - 本地AI分析 - 第三方服务连接选项 + - 鸿蒙原生适配(复用纯Kotlin SDK模块) ## 从类似应用的见解 @@ -270,6 +327,13 @@ ## 优先级列表 +### ✅ 阶段0(SDK提取 — 已完成): +1. ✅ 提取 `sdk/backup` — 纯Kotlin备份/恢复SDK(BackupManager、RestoreManager、BackupSerializer、数据模型、读写接口) +2. ✅ 提取 `sdk/auth` — 纯Kotlin认证组件(AuthProvider接口、LocalAuthProvider、ThirdPartyAuthProvider、AuthManager) +3. ✅ 提取 `sdk/storage` — Android Library存储组件(StorageProvider接口、LocalStorageProvider、RemoteStorageProvider、Room) +4. ✅ App模块适配 — Android平台实现注入SDK接口 +5. ✅ 架构设计文档 — 鸿蒙适配、第三方登录、AI Agent、后端微服务 + ### 阶段1(核心功能): 1. SMS和通话记录读取 2. 本地JSON备份 diff --git a/android/gradlew b/android/gradlew old mode 100755 new mode 100644 diff --git a/android/sdk/.gitignore b/android/sdk/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/android/sdk/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/android/sdk/auth/build.gradle b/android/sdk/auth/build.gradle new file mode 100644 index 0000000..b70a828 --- /dev/null +++ b/android/sdk/auth/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +kotlin { + jvmTarget = '17' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" + + testImplementation 'junit:junit:4.13.2' +} diff --git a/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthManager.kt b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthManager.kt new file mode 100644 index 0000000..c0d32b1 --- /dev/null +++ b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthManager.kt @@ -0,0 +1,16 @@ +package imken.messagevault.sdk.auth + +class AuthManager private constructor( + private val provider: AuthProvider +) : AuthProvider by provider { + + companion object { + fun createLocal(deviceId: String): AuthManager { + return AuthManager(LocalAuthProvider(deviceId)) + } + + fun createWithProvider(provider: AuthProvider): AuthManager { + return AuthManager(provider) + } + } +} diff --git a/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthProvider.kt b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthProvider.kt new file mode 100644 index 0000000..9fb4c8e --- /dev/null +++ b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/AuthProvider.kt @@ -0,0 +1,32 @@ +package imken.messagevault.sdk.auth + +import kotlinx.coroutines.flow.StateFlow + +interface AuthProvider { + val isAuthenticated: StateFlow + val currentUser: StateFlow + + suspend fun login(credentials: AuthCredentials): AuthResult + suspend fun logout() + suspend fun refreshToken(): AuthResult + fun getToken(): String? +} + +data class UserInfo( + val userId: String, + val displayName: String, + val email: String? = null, + val avatarUrl: String? = null +) + +sealed class AuthResult { + data class Success(val token: String, val user: UserInfo) : AuthResult() + data class Error(val code: String, val message: String) : AuthResult() + data object Cancelled : AuthResult() +} + +sealed class AuthCredentials { + data class Local(val deviceId: String) : AuthCredentials() + data class OAuth2(val provider: String, val accessToken: String) : AuthCredentials() + data class Password(val username: String, val password: String) : AuthCredentials() +} diff --git a/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/LocalAuthProvider.kt b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/LocalAuthProvider.kt new file mode 100644 index 0000000..b32733c --- /dev/null +++ b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/LocalAuthProvider.kt @@ -0,0 +1,43 @@ +package imken.messagevault.sdk.auth + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +class LocalAuthProvider(private val deviceId: String) : AuthProvider { + + private val _isAuthenticated = MutableStateFlow(true) + override val isAuthenticated: StateFlow = _isAuthenticated.asStateFlow() + + private val localUser = UserInfo( + userId = "local_$deviceId", + displayName = "Local User" + ) + + private val _currentUser = MutableStateFlow(localUser) + override val currentUser: StateFlow = _currentUser.asStateFlow() + + private var token: String = "local_token_$deviceId" + + override suspend fun login(credentials: AuthCredentials): AuthResult { + return when (credentials) { + is AuthCredentials.Local -> { + _isAuthenticated.value = true + _currentUser.value = localUser + AuthResult.Success(token, localUser) + } + else -> AuthResult.Error("UNSUPPORTED", "LocalAuthProvider only supports local credentials") + } + } + + override suspend fun logout() { + _isAuthenticated.value = true + _currentUser.value = localUser + } + + override suspend fun refreshToken(): AuthResult { + return AuthResult.Success(token, localUser) + } + + override fun getToken(): String = token +} diff --git a/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/ThirdPartyAuthProvider.kt b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/ThirdPartyAuthProvider.kt new file mode 100644 index 0000000..1be0f1e --- /dev/null +++ b/android/sdk/auth/src/main/kotlin/imken/messagevault/sdk/auth/ThirdPartyAuthProvider.kt @@ -0,0 +1,10 @@ +package imken.messagevault.sdk.auth + +interface ThirdPartyAuthProvider : AuthProvider { + val providerId: String + val providerName: String + + suspend fun initialize(config: Map): Boolean + suspend fun handleCallback(callbackData: Map): AuthResult + fun getAuthUrl(): String +} diff --git a/android/sdk/backup/build.gradle b/android/sdk/backup/build.gradle new file mode 100644 index 0000000..4395cf1 --- /dev/null +++ b/android/sdk/backup/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +kotlin { + jvmTarget = '17' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" + implementation "com.google.code.gson:gson:2.10.1" + + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.mockito:mockito-core:5.8.0' + testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3' +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt new file mode 100644 index 0000000..81a8b23 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt @@ -0,0 +1,103 @@ +package imken.messagevault.sdk.backup + +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.BackupResult +import imken.messagevault.sdk.backup.reader.BackupFileReader +import imken.messagevault.sdk.backup.reader.CallLogReader +import imken.messagevault.sdk.backup.reader.ContactReader +import imken.messagevault.sdk.backup.reader.SmsReader +import imken.messagevault.sdk.backup.serializer.BackupSerializer +import imken.messagevault.sdk.backup.writer.BackupFileWriter +import imken.messagevault.sdk.backup.writer.CallLogWriter +import imken.messagevault.sdk.backup.writer.ContactWriter +import imken.messagevault.sdk.backup.writer.SmsWriter + +class BackupManager( + private val smsReader: SmsReader, + private val callLogReader: CallLogReader, + private val contactReader: ContactReader, + private val backupFileWriter: BackupFileWriter, + private val backupFileReader: BackupFileReader, + private val smsWriter: SmsWriter, + private val callLogWriter: CallLogWriter, + private val contactWriter: ContactWriter, + private val serializer: BackupSerializer = BackupSerializer() +) { + + suspend fun performBackup( + hasSmsPermission: Boolean, + hasCallLogPermission: Boolean, + hasContactsPermission: Boolean, + deviceInfo: String = "" + ): BackupResult { + if (!hasSmsPermission && !hasCallLogPermission && !hasContactsPermission) { + return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + errorMessage = "备份失败: 没有任何所需权限" + ) + } + + val messages = if (hasSmsPermission) smsReader.readSms() else null + val messagesCount = messages?.size ?: 0 + + val callLogs = if (hasCallLogPermission) callLogReader.readCallLogs() else null + val callLogsCount = callLogs?.size ?: 0 + + val contacts = if (hasContactsPermission) contactReader.readContacts() else null + val contactsCount = contacts?.size ?: 0 + + if (messagesCount == 0 && callLogsCount == 0 && contactsCount == 0) { + return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + smsCount = 0, + callLogCount = 0, + errorMessage = "没有找到任何数据可以备份" + ) + } + + val backupData = BackupData( + messages = messages, + callLogs = callLogs, + contacts = contacts, + timestamp = System.currentTimeMillis(), + deviceInfo = deviceInfo + ) + + val json = serializer.serializeWithSizeLimit(backupData) + ?: return BackupResult( + success = false, + timestamp = System.currentTimeMillis(), + appVersion = "", + deviceId = "", + smsCount = messagesCount, + callLogCount = callLogsCount, + errorMessage = "创建备份文件失败" + ) + + return backupFileWriter.writeBackup(backupData, "") + } + + suspend fun restoreFromFile(filePath: String): BackupData? { + return backupFileReader.readBackup(filePath) + } + + suspend fun restoreSms(messages: List): Int { + return smsWriter.writeSms(messages) + } + + suspend fun restoreCallLogs(callLogs: List): Int { + return callLogWriter.writeCallLogs(callLogs) + } + + suspend fun restoreContacts(contacts: List): Int { + return contactWriter.writeContacts(contacts) + } + + fun getSerializer(): BackupSerializer = serializer +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/RestoreManager.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/RestoreManager.kt new file mode 100644 index 0000000..bc7c004 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/RestoreManager.kt @@ -0,0 +1,67 @@ +package imken.messagevault.sdk.backup + +import imken.messagevault.sdk.backup.model.RestoreOptions +import imken.messagevault.sdk.backup.model.RestoreResult +import imken.messagevault.sdk.backup.reader.BackupFileReader +import imken.messagevault.sdk.backup.writer.CallLogWriter +import imken.messagevault.sdk.backup.writer.ContactWriter +import imken.messagevault.sdk.backup.writer.SmsWriter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class RestoreManager( + private val backupFileReader: BackupFileReader, + private val smsWriter: SmsWriter, + private val callLogWriter: CallLogWriter, + private val contactWriter: ContactWriter +) { + suspend fun restore(filePath: String, options: RestoreOptions): RestoreResult = + withContext(Dispatchers.IO) { + val backupData = backupFileReader.read(filePath) + ?: return@withContext RestoreResult( + success = false, + message = "Unable to parse backup file" + ) + + var restoredSmsCount = 0 + var restoredCallLogsCount = 0 + var restoredContactsCount = 0 + + if (options.sms && backupData.messages.isNotEmpty()) { + try { + restoredSmsCount = smsWriter.write(backupData.messages) + } catch (_: Exception) { + } + } + + if (options.callLogs && backupData.callLogs.isNotEmpty()) { + try { + restoredCallLogsCount = callLogWriter.write(backupData.callLogs) + } catch (_: Exception) { + } + } + + if (options.contacts && backupData.contacts.isNotEmpty()) { + try { + restoredContactsCount = contactWriter.write(backupData.contacts) + } catch (_: Exception) { + } + } + + val totalSuccess = + restoredSmsCount > 0 || restoredCallLogsCount > 0 || restoredContactsCount > 0 + val resultMessage = if (totalSuccess) { + "Restored $restoredSmsCount SMS, $restoredCallLogsCount call logs, $restoredContactsCount contacts" + } else { + "Restore failed: no data was restored" + } + + RestoreResult( + success = totalSuccess, + message = resultMessage, + restoredSmsCount = restoredSmsCount, + restoredCallLogsCount = restoredCallLogsCount, + restoredContactsCount = restoredContactsCount + ) + } +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupData.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupData.kt new file mode 100644 index 0000000..2ef8056 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupData.kt @@ -0,0 +1,26 @@ +package imken.messagevault.sdk.backup.model + +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName + +data class BackupData( + @Expose + @SerializedName("messages") + val messages: List? = emptyList(), + + @Expose + @SerializedName("call_logs") + val callLogs: List? = emptyList(), + + @Expose + @SerializedName("contacts") + val contacts: List? = emptyList(), + + @Expose + @SerializedName("timestamp") + val timestamp: Long = System.currentTimeMillis(), + + @Expose + @SerializedName("device_info") + val deviceInfo: String = "" +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupReadData.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupReadData.kt new file mode 100644 index 0000000..47827a8 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupReadData.kt @@ -0,0 +1,9 @@ +package imken.messagevault.sdk.backup.model + +data class BackupReadData( + val messages: List = emptyList(), + val callLogs: List = emptyList(), + val contacts: List = emptyList(), + val timestamp: Long = System.currentTimeMillis(), + val deviceInfo: String = "" +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupResult.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupResult.kt new file mode 100644 index 0000000..9f959e1 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupResult.kt @@ -0,0 +1,13 @@ +package imken.messagevault.sdk.backup.model + +data class BackupResult( + val success: Boolean, + val timestamp: Long, + val appVersion: String, + val deviceId: String, + val smsCount: Int = 0, + val callLogCount: Int = 0, + val fileName: String? = null, + val filePath: String? = null, + val errorMessage: String? = null +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLog.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLog.kt new file mode 100644 index 0000000..a04adfa --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLog.kt @@ -0,0 +1,30 @@ +package imken.messagevault.sdk.backup.model + +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName + +data class CallLog( + @Expose + @SerializedName("id") + val id: Long, + + @Expose + @SerializedName("num") + val number: String, + + @Expose + @SerializedName("type") + val type: Int, + + @Expose + @SerializedName("date") + val date: Long, + + @Expose + @SerializedName("dur") + val duration: Int, + + @Expose + @SerializedName("name") + val contact: String? = null +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLogData.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLogData.kt new file mode 100644 index 0000000..ae02d8b --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/CallLogData.kt @@ -0,0 +1,10 @@ +package imken.messagevault.sdk.backup.model + +data class CallLogData( + val id: Long, + val number: String, + val type: Int, + val date: Long, + val duration: Int, + val contact: String? = null +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Contact.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Contact.kt new file mode 100644 index 0000000..a4259ac --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Contact.kt @@ -0,0 +1,92 @@ +package imken.messagevault.sdk.backup.model + +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName + +data class Contact( + @Expose + @SerializedName("id") + val id: Long, + + @Expose + @SerializedName("name") + val name: String, + + @Expose + @SerializedName("phones") + val phoneNumbers: MutableList, + + @Expose + @SerializedName("emails") + val emails: List? = null, + + @Expose + @SerializedName("addresses") + val addresses: List
? = null, + + val photoData: String? = null, + + @Expose + @SerializedName("note") + val note: String? = null, + + @Expose + @SerializedName("groups") + val groups: List? = null, + + @Expose + @SerializedName("websites") + val websites: List? = null, + + @Expose + @SerializedName("events") + val events: List? = null, + + @Expose + @SerializedName("relationships") + val relationships: List? = null, + + @Expose + @SerializedName("social_profiles") + val socialProfiles: List? = null +) { + data class Address( + @Expose + @SerializedName("type") + val type: String, + + @Expose + @SerializedName("value") + val value: String + ) + + data class Event( + @Expose + @SerializedName("type") + val type: String, + + @Expose + @SerializedName("date") + val date: String + ) + + data class Relationship( + @Expose + @SerializedName("type") + val type: String, + + @Expose + @SerializedName("name") + val name: String + ) + + data class SocialProfile( + @Expose + @SerializedName("type") + val type: String, + + @Expose + @SerializedName("value") + val value: String + ) +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/ContactData.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/ContactData.kt new file mode 100644 index 0000000..8e1b534 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/ContactData.kt @@ -0,0 +1,8 @@ +package imken.messagevault.sdk.backup.model + +data class ContactData( + val id: Long, + val name: String, + val phoneNumbers: List, + val emails: List? = null +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Message.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Message.kt new file mode 100644 index 0000000..0e3124c --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/Message.kt @@ -0,0 +1,35 @@ +package imken.messagevault.sdk.backup.model + +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName + +data class Message( + @Expose + @SerializedName("id") + val id: Long = 0, + + @Expose + @SerializedName("addr") + val address: String, + + @Expose + @SerializedName("body") + val body: String? = "", + + @Expose + @SerializedName("date") + val date: Long, + + @Expose + @SerializedName("type") + val type: Int, + + @SerializedName("read") + val readState: Int? = 0, + + @SerializedName("status") + val messageStatus: Int? = 0, + + @SerializedName("thread_id") + val threadId: Long = 0 +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreOptions.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreOptions.kt new file mode 100644 index 0000000..b6b22ae --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreOptions.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.model + +data class RestoreOptions( + val sms: Boolean = true, + val callLogs: Boolean = true, + val contacts: Boolean = true +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreResult.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreResult.kt new file mode 100644 index 0000000..89bcdaa --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/RestoreResult.kt @@ -0,0 +1,9 @@ +package imken.messagevault.sdk.backup.model + +data class RestoreResult( + val success: Boolean, + val message: String, + val restoredSmsCount: Int = 0, + val restoredCallLogsCount: Int = 0, + val restoredContactsCount: Int = 0 +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/SmsData.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/SmsData.kt new file mode 100644 index 0000000..70abcb3 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/SmsData.kt @@ -0,0 +1,12 @@ +package imken.messagevault.sdk.backup.model + +data class SmsData( + val id: Long = 0, + val address: String, + val body: String? = "", + val date: Long, + val type: Int, + val readState: Int? = 0, + val messageStatus: Int? = 0, + val threadId: Long = 0 +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/UploadResult.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/UploadResult.kt new file mode 100644 index 0000000..4be9f9d --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/UploadResult.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.model + +data class UploadResult( + val success: Boolean, + val fileId: String? = null, + val errorMessage: String? = null +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/BackupFileReader.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/BackupFileReader.kt new file mode 100644 index 0000000..881069b --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/BackupFileReader.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.reader + +import imken.messagevault.sdk.backup.model.BackupReadData + +interface BackupFileReader { + suspend fun read(filePath: String): BackupReadData? +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/CallLogReader.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/CallLogReader.kt new file mode 100644 index 0000000..4808eca --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/CallLogReader.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.reader + +import imken.messagevault.sdk.backup.model.CallLog + +interface CallLogReader { + suspend fun readCallLogs(): List? +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/ContactReader.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/ContactReader.kt new file mode 100644 index 0000000..91253c4 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/ContactReader.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.reader + +import imken.messagevault.sdk.backup.model.Contact + +interface ContactReader { + suspend fun readContacts(): List? +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/SmsReader.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/SmsReader.kt new file mode 100644 index 0000000..c3c72ed --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/reader/SmsReader.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.reader + +import imken.messagevault.sdk.backup.model.Message + +interface SmsReader { + suspend fun readSms(): List? +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/serializer/BackupSerializer.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/serializer/BackupSerializer.kt new file mode 100644 index 0000000..c73cda5 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/serializer/BackupSerializer.kt @@ -0,0 +1,185 @@ +package imken.messagevault.sdk.backup.serializer + +import com.google.gson.FieldNamingPolicy +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.model.Contact +import imken.messagevault.sdk.backup.model.Message + +class BackupSerializer { + + private val gson = GsonBuilder() + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) + .serializeNulls() + .disableHtmlEscaping() + .setLenient() + .setPrettyPrinting() + .create() + + fun toJson(backupData: BackupData): String { + return gson.toJson(backupData) + } + + fun fromJson(json: String): BackupData? { + return try { + val typeToken = object : TypeToken() {}.type + gson.fromJson(json, typeToken) + } catch (e: Exception) { + null + } + } + + fun getGson() = gson + + fun cleanMessage(message: Message): Message { + return Message( + id = message.id, + address = message.address.replace(Regex("[^\\p{Print}]"), ""), + body = message.body?.replace(Regex("[^\\p{Print}]"), ""), + date = message.date, + type = message.type, + readState = message.readState, + messageStatus = message.messageStatus, + threadId = message.threadId + ) + } + + fun cleanCallLog(callLog: CallLog): CallLog { + return CallLog( + id = callLog.id, + number = callLog.number.replace(Regex("[^\\p{Print}]"), ""), + type = callLog.type, + date = callLog.date, + duration = callLog.duration, + contact = callLog.contact?.replace(Regex("[^\\p{Print}]"), "") + ) + } + + fun cleanContact(contact: Contact): Contact { + return Contact( + id = contact.id, + name = contact.name.replace(Regex("[^\\p{Print}]"), ""), + phoneNumbers = contact.phoneNumbers.map { it.replace(Regex("[^\\p{Print}]"), "") }.toMutableList(), + emails = contact.emails?.map { it.replace(Regex("[^\\p{Print}]"), "") }, + addresses = contact.addresses?.map { + Contact.Address( + type = it.type.replace(Regex("[^\\p{Print}]"), ""), + value = it.value.replace(Regex("[^\\p{Print}]"), "") + ) + }, + groups = contact.groups?.map { it.replace(Regex("[^\\p{Print}]"), "") }, + note = contact.note?.replace(Regex("[^\\p{Print}]"), ""), + websites = contact.websites?.map { it.replace(Regex("[^\\p{Print}]"), "") }, + events = contact.events?.map { + Contact.Event( + type = it.type.replace(Regex("[^\\p{Print}]"), ""), + date = it.date.replace(Regex("[^\\p{Print}]"), "") + ) + }, + relationships = contact.relationships?.map { + Contact.Relationship( + type = it.type.replace(Regex("[^\\p{Print}]"), ""), + name = it.name.replace(Regex("[^\\p{Print}]"), "") + ) + }, + socialProfiles = contact.socialProfiles?.map { + Contact.SocialProfile( + type = it.type.replace(Regex("[^\\p{Print}]"), ""), + value = it.value.replace(Regex("[^\\p{Print}]"), "") + ) + } + ) + } + + fun cleanBackupData(backupData: BackupData): BackupData { + val cleanedMessages = backupData.messages?.map { cleanMessage(it) } + val cleanedCallLogs = backupData.callLogs?.map { cleanCallLog(it) } + val cleanedContacts = backupData.contacts?.map { cleanContact(it) } + + return BackupData( + messages = cleanedMessages, + callLogs = cleanedCallLogs, + contacts = cleanedContacts, + timestamp = backupData.timestamp, + deviceInfo = backupData.deviceInfo + ) + } + + fun serializeWithSizeLimit(backupData: BackupData, maxBytes: Int = 10 * 1024 * 1024): String? { + val cleanedData = cleanBackupData(backupData) + + val testJson = toJson(BackupData( + messages = emptyList(), + callLogs = emptyList(), + contacts = emptyList(), + timestamp = cleanedData.timestamp, + deviceInfo = cleanedData.deviceInfo + )) + if (testJson.isBlank() || testJson == "{}" || testJson == "null") { + return null + } + + var finalMessages = cleanedData.messages + var finalCallLogs = cleanedData.callLogs + var finalContacts = cleanedData.contacts + + if (!cleanedData.messages.isNullOrEmpty()) { + try { + gson.toJson(cleanedData.messages) + } catch (e: Exception) { + finalMessages = emptyList() + } + } + + if (!cleanedData.callLogs.isNullOrEmpty()) { + try { + gson.toJson(cleanedData.callLogs) + } catch (e: Exception) { + finalCallLogs = emptyList() + } + } + + if (!cleanedData.contacts.isNullOrEmpty()) { + try { + gson.toJson(cleanedData.contacts) + } catch (e: Exception) { + finalContacts = emptyList() + } + } + + val finalData = BackupData( + messages = finalMessages, + callLogs = finalCallLogs, + contacts = finalContacts, + timestamp = cleanedData.timestamp, + deviceInfo = cleanedData.deviceInfo + ) + + val jsonString: String + try { + jsonString = toJson(finalData) + if (jsonString.isBlank() || jsonString == "{}" || jsonString == "null") { + return null + } + fromJson(jsonString) ?: return null + } catch (e: Exception) { + return null + } + + val jsonBytes = jsonString.toByteArray(Charsets.UTF_8) + if (jsonBytes.size > maxBytes) { + val limitedData = BackupData( + messages = finalMessages?.take(500), + callLogs = finalCallLogs?.take(500), + contacts = finalContacts?.take(500), + timestamp = cleanedData.timestamp, + deviceInfo = "${cleanedData.deviceInfo} (数据已精简,原始数据: ${finalMessages?.size ?: 0}条短信, ${finalCallLogs?.size ?: 0}条通话记录, ${finalContacts?.size ?: 0}个联系人)" + ) + return toJson(limitedData) + } + + return jsonString + } +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt new file mode 100644 index 0000000..a9a9e11 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt @@ -0,0 +1,8 @@ +package imken.messagevault.sdk.backup.writer + +import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.BackupResult + +interface BackupFileWriter { + suspend fun writeBackup(data: BackupData, filePath: String): BackupResult +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/CallLogWriter.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/CallLogWriter.kt new file mode 100644 index 0000000..63f87d0 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/CallLogWriter.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.writer + +import imken.messagevault.sdk.backup.model.CallLogData + +interface CallLogWriter { + suspend fun write(callLogs: List): Int +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/ContactWriter.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/ContactWriter.kt new file mode 100644 index 0000000..9cdd0df --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/ContactWriter.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.writer + +import imken.messagevault.sdk.backup.model.ContactData + +interface ContactWriter { + suspend fun write(contacts: List): Int +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/SmsWriter.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/SmsWriter.kt new file mode 100644 index 0000000..ad55dd5 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/SmsWriter.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.writer + +import imken.messagevault.sdk.backup.model.SmsData + +interface SmsWriter { + suspend fun write(messages: List): Int +} diff --git a/android/sdk/storage/build.gradle b/android/sdk/storage/build.gradle new file mode 100644 index 0000000..cd8d853 --- /dev/null +++ b/android/sdk/storage/build.gradle @@ -0,0 +1,41 @@ +plugins { + id 'com.android.library' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'imken.messagevault.sdk.storage' + compileSdkVersion 34 + + defaultConfig { + minSdkVersion 24 + targetSdkVersion 34 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = '17' + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3" + implementation 'androidx.core:core-ktx:1.12.0' + implementation 'androidx.room:room-runtime:2.6.1' + implementation 'androidx.room:room-ktx:2.6.1' + annotationProcessor 'androidx.room:room-compiler:2.6.1' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation 'com.google.code.gson:gson:2.10.1' + + testImplementation 'junit:junit:4.13.2' +} diff --git a/android/sdk/storage/src/main/AndroidManifest.xml b/android/sdk/storage/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9b65eb0 --- /dev/null +++ b/android/sdk/storage/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/LocalStorageProvider.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/LocalStorageProvider.kt new file mode 100644 index 0000000..47688ea --- /dev/null +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/LocalStorageProvider.kt @@ -0,0 +1,120 @@ +package imken.messagevault.sdk.storage + +import android.content.Context +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.withContext +import java.io.File +import java.net.URLConnection + +class LocalStorageProvider( + private val context: Context +) : StorageProvider { + + private val _isAvailable = MutableStateFlow(false) + override val isAvailable: StateFlow = _isAvailable + + private val baseDir: File = context.getExternalFilesDir(null) + ?: context.filesDir + + init { + refreshAvailability() + } + + private fun refreshAvailability() { + _isAvailable.value = baseDir.exists() && baseDir.canWrite() + } + + override suspend fun save(data: ByteArray, path: String): StorageResult = + withContext(Dispatchers.IO) { + try { + val file = File(baseDir, path) + file.parentFile?.mkdirs() + file.writeBytes(data) + refreshAvailability() + StorageResult.Success(path = file.absolutePath) + } catch (e: Exception) { + StorageResult.Error(code = "SAVE_FAILED", message = e.message ?: "Unknown error") + } + } + + override suspend fun load(path: String): StorageResult = + withContext(Dispatchers.IO) { + try { + val file = File(baseDir, path) + if (!file.exists()) { + return@withContext StorageResult.Error(code = "FILE_NOT_FOUND", message = "File not found: $path") + } + val data = file.readBytes() + StorageResult.Success(path = file.absolutePath, data = data) + } catch (e: Exception) { + StorageResult.Error(code = "LOAD_FAILED", message = e.message ?: "Unknown error") + } + } + + override suspend fun list(prefix: String): List = + withContext(Dispatchers.IO) { + val searchDir = if (prefix.isNotEmpty()) { + File(baseDir, prefix) + } else { + baseDir + } + if (!searchDir.exists() || !searchDir.isDirectory) { + return@withContext emptyList() + } + searchDir.walkTopDown() + .filter { it.isFile } + .map { file -> + val relativePath = file.relativeTo(baseDir).path + StorageFileInfo( + path = relativePath, + size = file.length(), + lastModified = file.lastModified(), + mimeType = guessMimeType(file) + ) + } + .toList() + } + + override suspend fun delete(path: String): StorageResult = + withContext(Dispatchers.IO) { + try { + val file = File(baseDir, path) + if (!file.exists()) { + return@withContext StorageResult.Error(code = "FILE_NOT_FOUND", message = "File not found: $path") + } + val deleted = file.delete() + if (deleted) { + refreshAvailability() + StorageResult.Success(path = path) + } else { + StorageResult.Error(code = "DELETE_FAILED", message = "Failed to delete: $path") + } + } catch (e: Exception) { + StorageResult.Error(code = "DELETE_FAILED", message = e.message ?: "Unknown error") + } + } + + override suspend fun getStorageInfo(): StorageInfo = + withContext(Dispatchers.IO) { + refreshAvailability() + val totalSpace = baseDir.totalSpace + val availableSpace = baseDir.usableSpace + val usedSpace = totalSpace - availableSpace + StorageInfo( + totalSpace = totalSpace, + usedSpace = usedSpace, + availableSpace = availableSpace + ) + } + + private fun guessMimeType(file: File): String? { + val name = file.name + return try { + URLConnection.guessContentTypeFromName(name) + } catch (e: Exception) { + null + } + } +} diff --git a/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/RemoteStorageProvider.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/RemoteStorageProvider.kt new file mode 100644 index 0000000..6d3768f --- /dev/null +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/RemoteStorageProvider.kt @@ -0,0 +1,19 @@ +package imken.messagevault.sdk.storage + +interface RemoteStorageProvider { + val isConnected: Boolean + + suspend fun upload(data: ByteArray, remotePath: String): StorageResult + suspend fun download(remotePath: String): StorageResult + suspend fun listRemote(prefix: String = ""): List + suspend fun deleteRemote(remotePath: String): StorageResult + suspend fun connect(config: RemoteStorageConfig): Boolean + suspend fun disconnect() +} + +data class RemoteStorageConfig( + val serverUrl: String, + val authToken: String? = null, + val maxRetryCount: Int = 3, + val timeoutMs: Long = 30000 +) diff --git a/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/StorageProvider.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/StorageProvider.kt new file mode 100644 index 0000000..47a7869 --- /dev/null +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/StorageProvider.kt @@ -0,0 +1,31 @@ +package imken.messagevault.sdk.storage + +import kotlinx.coroutines.flow.StateFlow + +interface StorageProvider { + val isAvailable: StateFlow + + suspend fun save(data: ByteArray, path: String): StorageResult + suspend fun load(path: String): StorageResult + suspend fun list(prefix: String = ""): List + suspend fun delete(path: String): StorageResult + suspend fun getStorageInfo(): StorageInfo +} + +data class StorageFileInfo( + val path: String, + val size: Long, + val lastModified: Long, + val mimeType: String? = null +) + +data class StorageInfo( + val totalSpace: Long, + val usedSpace: Long, + val availableSpace: Long +) + +sealed class StorageResult { + data class Success(val path: String, val data: ByteArray? = null) : StorageResult() + data class Error(val code: String, val message: String) : StorageResult() +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/dao/CallLogDao.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/CallLogDao.kt similarity index 59% rename from android/app/src/main/java/imken/messagevault/mobile/data/dao/CallLogDao.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/CallLogDao.kt index 9636cdc..c1dbe1e 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/dao/CallLogDao.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/CallLogDao.kt @@ -1,38 +1,23 @@ -package imken.messagevault.mobile.data.dao +package imken.messagevault.sdk.storage.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import imken.messagevault.mobile.data.entity.CallLogsEntity +import imken.messagevault.sdk.storage.entity.CallLogsEntity -/** - * 通话记录DAO接口 - */ @Dao interface CallLogDao { - - /** - * 插入通话记录 - */ + @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertCallLogs(callLogs: List) - - /** - * 获取所有通话记录,按日期倒序排列 - */ + @Query("SELECT * FROM call_logs ORDER BY date DESC") suspend fun getAllCallLogs(): List - - /** - * 删除所有通话记录 - */ + @Query("DELETE FROM call_logs") suspend fun deleteAllCallLogs() - - /** - * 获取通话记录数量 - */ + @Query("SELECT COUNT(id) FROM call_logs") suspend fun getCallLogsCount(): Int -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/dao/ContactDao.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/ContactDao.kt similarity index 60% rename from android/app/src/main/java/imken/messagevault/mobile/data/dao/ContactDao.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/ContactDao.kt index b7af6dd..db86744 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/dao/ContactDao.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/ContactDao.kt @@ -1,38 +1,23 @@ -package imken.messagevault.mobile.data.dao +package imken.messagevault.sdk.storage.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import imken.messagevault.mobile.data.entity.ContactsEntity +import imken.messagevault.sdk.storage.entity.ContactsEntity -/** - * 联系人DAO接口 - */ @Dao interface ContactDao { - - /** - * 插入联系人 - */ + @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertContacts(contacts: List) - - /** - * 获取所有联系人,按姓名排序 - */ + @Query("SELECT * FROM contacts ORDER BY name ASC") suspend fun getAllContacts(): List - - /** - * 删除所有联系人 - */ + @Query("DELETE FROM contacts") suspend fun deleteAllContacts() - - /** - * 获取联系人数量 - */ + @Query("SELECT COUNT(id) FROM contacts") suspend fun getContactsCount(): Int -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/dao/MessageDao.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/MessageDao.kt similarity index 59% rename from android/app/src/main/java/imken/messagevault/mobile/data/dao/MessageDao.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/MessageDao.kt index a0dab33..76c6efb 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/dao/MessageDao.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/dao/MessageDao.kt @@ -1,38 +1,23 @@ -package imken.messagevault.mobile.data.dao +package imken.messagevault.sdk.storage.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import imken.messagevault.mobile.data.entity.MessageEntity +import imken.messagevault.sdk.storage.entity.MessageEntity -/** - * 短信消息DAO接口 - */ @Dao interface MessageDao { - - /** - * 插入短信消息 - */ + @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertMessages(messages: List) - - /** - * 获取所有短信消息,按日期倒序排列 - */ + @Query("SELECT * FROM messages ORDER BY date DESC") suspend fun getAllMessages(): List - - /** - * 删除所有短信消息 - */ + @Query("DELETE FROM messages") suspend fun deleteAllMessages() - - /** - * 获取短信消息数量 - */ + @Query("SELECT COUNT(id) FROM messages") suspend fun getMessagesCount(): Int -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/database/AppDatabase.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/database/AppDatabase.kt similarity index 61% rename from android/app/src/main/java/imken/messagevault/mobile/data/database/AppDatabase.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/database/AppDatabase.kt index 429edc0..15812e0 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/database/AppDatabase.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/database/AppDatabase.kt @@ -1,19 +1,16 @@ -package imken.messagevault.mobile.data.database +package imken.messagevault.sdk.storage.database import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -import imken.messagevault.mobile.data.dao.CallLogDao -import imken.messagevault.mobile.data.dao.ContactDao -import imken.messagevault.mobile.data.dao.MessageDao -import imken.messagevault.mobile.data.entity.CallLogsEntity -import imken.messagevault.mobile.data.entity.ContactsEntity -import imken.messagevault.mobile.data.entity.MessageEntity +import imken.messagevault.sdk.storage.dao.CallLogDao +import imken.messagevault.sdk.storage.dao.ContactDao +import imken.messagevault.sdk.storage.dao.MessageDao +import imken.messagevault.sdk.storage.entity.CallLogsEntity +import imken.messagevault.sdk.storage.entity.ContactsEntity +import imken.messagevault.sdk.storage.entity.MessageEntity -/** - * 应用数据库类 - */ @Database( entities = [ CallLogsEntity::class, @@ -24,30 +21,15 @@ import imken.messagevault.mobile.data.entity.MessageEntity exportSchema = false ) abstract class AppDatabase : RoomDatabase() { - - /** - * 获取通话记录DAO - */ + abstract fun callLogDao(): CallLogDao - - /** - * 获取短信消息DAO - */ abstract fun messageDao(): MessageDao - - /** - * 获取联系人DAO - */ abstract fun contactDao(): ContactDao - + companion object { - // 单例实例 @Volatile private var INSTANCE: AppDatabase? = null - - /** - * 获取数据库实例 - */ + fun getInstance(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( @@ -62,4 +44,4 @@ abstract class AppDatabase : RoomDatabase() { } } } -} \ No newline at end of file +} diff --git a/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/CallLogsEntity.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/CallLogsEntity.kt new file mode 100644 index 0000000..7336b95 --- /dev/null +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/CallLogsEntity.kt @@ -0,0 +1,15 @@ +package imken.messagevault.sdk.storage.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "call_logs") +data class CallLogsEntity( + @PrimaryKey(autoGenerate = true) + val id: Long = 0, + val number: String, + val name: String, + val date: Long, + val duration: Int, + val type: Int +) diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/entity/ContactsEntity.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/ContactsEntity.kt similarity index 76% rename from android/app/src/main/java/imken/messagevault/mobile/data/entity/ContactsEntity.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/ContactsEntity.kt index 5d4ca7e..d5ab300 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/entity/ContactsEntity.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/ContactsEntity.kt @@ -1,4 +1,4 @@ -package imken.messagevault.mobile.data.entity +package imken.messagevault.sdk.storage.entity import android.os.Parcel import android.os.Parcelable @@ -6,47 +6,19 @@ import androidx.room.Entity import androidx.room.PrimaryKey import com.google.gson.annotations.SerializedName -/** - * 联系人实体类 - * - * 用于在Room数据库中存储联系人数据 - */ @Entity(tableName = "contacts") data class ContactsEntity( - /** - * 联系人ID,主键 - */ @PrimaryKey @SerializedName("id") val id: Long, - - /** - * 联系人姓名 - */ @SerializedName("name") val name: String, - - /** - * 联系人电话号码列表 - */ @SerializedName("phone_numbers") val phoneNumbers: List, - - /** - * 联系人电子邮件列表 - */ @SerializedName("emails") val emails: List, - - /** - * 联系人头像URI - */ @SerializedName("photo_uri") val photoUri: String? = null, - - /** - * 最后更新时间 - */ @SerializedName("last_updated") val lastUpdated: Long = System.currentTimeMillis() ) : Parcelable { @@ -56,23 +28,23 @@ data class ContactsEntity( parcel.createStringArrayList() ?: emptyList(), parcel.createStringArrayList() ?: emptyList() ) - + override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeLong(id) parcel.writeString(name) parcel.writeStringList(phoneNumbers) parcel.writeStringList(emails) } - + override fun describeContents(): Int { return 0 } - + companion object CREATOR : Parcelable.Creator { override fun createFromParcel(parcel: Parcel): ContactsEntity { return ContactsEntity(parcel) } - + override fun newArray(size: Int): Array { return arrayOfNulls(size) } diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/entity/MessageEntity.kt b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/MessageEntity.kt similarity index 87% rename from android/app/src/main/java/imken/messagevault/mobile/data/entity/MessageEntity.kt rename to android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/MessageEntity.kt index c1740c7..034a61e 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/entity/MessageEntity.kt +++ b/android/sdk/storage/src/main/kotlin/imken/messagevault/sdk/storage/entity/MessageEntity.kt @@ -1,4 +1,4 @@ -package imken.messagevault.mobile.data.entity +package imken.messagevault.sdk.storage.entity import androidx.room.Entity import androidx.room.PrimaryKey @@ -14,4 +14,4 @@ data class MessageEntity( val read: Int? = 0, val status: Int? = 0, val threadId: Long = 0 -) \ No newline at end of file +) diff --git a/android/settings.gradle b/android/settings.gradle index cd01de8..c88491d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -16,3 +16,6 @@ dependencyResolutionManagement { rootProject.name = "MessageVault-Mobile" include ':app' +include ':sdk:backup' +include ':sdk:auth' +include ':sdk:storage' From 8feceea6e6cc19a8e98154afca1344b744cc622c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Thu, 14 May 2026 21:16:08 +0800 Subject: [PATCH 02/20] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96Commor?= =?UTF-8?q?y=E9=A1=B9=E7=9B=AE=EF=BC=8C=E5=AE=8C=E6=88=90=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=9E=B6=E6=9E=84=E5=92=8CMsgLayer=E6=A0=87=E5=87=86?= =?UTF-8?q?=E8=90=BD=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 搭建Go后端服务,支持SQLite/PostgreSQL存储 - 定义MsgLayer v0.1标准数据格式与校验逻辑 - 实现Android备份SDK到MsgLayer的映射转换 - 添加CLI命令行工具与RESTful API接口 - 完善项目文档与示例文件 --- .gitmodules | 4 + NOTICE.md | 16 +- README.en.md | 69 ++++ README.md | 314 +++++++----------- .../mobile/BackupManagerInstrumentedTest.kt | 9 +- .../data/backup/AndroidBackupFileReader.kt | 105 +++++- .../data/backup/AndroidBackupFileWriter.kt | 34 +- .../mobile/ui/viewmodels/BackupViewModel.kt | 10 +- .../mobile/ui/viewmodels/RestoreViewModel.kt | 72 ++-- .../messagevault/sdk/backup/BackupManager.kt | 108 ++++-- .../sdk/backup/model/BackupWriteStats.kt | 7 + .../sdk/backup/msglayer/MsgLayerMapper.kt | 215 ++++++++++++ .../sdk/backup/msglayer/MsgLayerSerializer.kt | 19 ++ .../backup/msglayer/model/MsgLayerModels.kt | 43 +++ .../sdk/backup/writer/BackupFileWriter.kt | 5 +- backend/cmd/commory/main.go | 21 ++ backend/commory | Bin 0 -> 8368674 bytes backend/data/commory-store.json | 181 ++++++++++ backend/go.mod | 3 + backend/internal/api/server.go | 182 ++++++++++ backend/internal/cli/root.go | 241 ++++++++++++++ backend/internal/config/config.go | 31 ++ backend/internal/importers/importer.go | 27 ++ backend/internal/index/index.go | 5 + backend/internal/msglayer/types.go | 64 ++++ backend/internal/msglayer/validator.go | 84 +++++ backend/internal/msglayer/validator_test.go | 47 +++ backend/internal/query/service.go | 44 +++ backend/internal/storage/postgres.go | 5 + backend/internal/storage/sqlite.go | 5 + backend/internal/storage/sqlite_test.go | 84 +++++ backend/internal/storage/sqlstore.go | 313 +++++++++++++++++ backend/internal/storage/storage.go | 23 ++ backend/migrations/001_init.sql | 7 + msglayer/docs/indexing.md | 25 ++ msglayer/docs/mapping-android.md | 77 +++++ msglayer/docs/versioning.md | 20 ++ msglayer/examples/export.minimal.json | 27 ++ msglayer/examples/export.sms-call.json | 134 ++++++++ msglayer/examples/export.voice.json | 67 ++++ msglayer/schema/v0.1/common.schema.json | 23 ++ msglayer/schema/v0.1/content.call.schema.json | 34 ++ .../v0.1/content.contact_snapshot.schema.json | 20 ++ msglayer/schema/v0.1/content.sms.schema.json | 22 ++ .../schema/v0.1/content.voice.schema.json | 23 ++ msglayer/schema/v0.1/event.schema.json | 150 +++++++++ msglayer/schema/v0.1/identity.schema.json | 50 +++ msglayer/schema/v0.1/relation.schema.json | 26 ++ msglayer/schema/v0.1/root.schema.json | 59 ++++ 49 files changed, 2872 insertions(+), 282 deletions(-) create mode 100644 .gitmodules create mode 100644 README.en.md create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupWriteStats.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerSerializer.kt create mode 100644 android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt create mode 100644 backend/cmd/commory/main.go create mode 100755 backend/commory create mode 100644 backend/data/commory-store.json create mode 100644 backend/go.mod create mode 100644 backend/internal/api/server.go create mode 100644 backend/internal/cli/root.go create mode 100644 backend/internal/config/config.go create mode 100644 backend/internal/importers/importer.go create mode 100644 backend/internal/index/index.go create mode 100644 backend/internal/msglayer/types.go create mode 100644 backend/internal/msglayer/validator.go create mode 100644 backend/internal/msglayer/validator_test.go create mode 100644 backend/internal/query/service.go create mode 100644 backend/internal/storage/postgres.go create mode 100644 backend/internal/storage/sqlite.go create mode 100644 backend/internal/storage/sqlite_test.go create mode 100644 backend/internal/storage/sqlstore.go create mode 100644 backend/internal/storage/storage.go create mode 100644 backend/migrations/001_init.sql create mode 100644 msglayer/docs/indexing.md create mode 100644 msglayer/docs/mapping-android.md create mode 100644 msglayer/docs/versioning.md create mode 100644 msglayer/examples/export.minimal.json create mode 100644 msglayer/examples/export.sms-call.json create mode 100644 msglayer/examples/export.voice.json create mode 100644 msglayer/schema/v0.1/common.schema.json create mode 100644 msglayer/schema/v0.1/content.call.schema.json create mode 100644 msglayer/schema/v0.1/content.contact_snapshot.schema.json create mode 100644 msglayer/schema/v0.1/content.sms.schema.json create mode 100644 msglayer/schema/v0.1/content.voice.schema.json create mode 100644 msglayer/schema/v0.1/event.schema.json create mode 100644 msglayer/schema/v0.1/identity.schema.json create mode 100644 msglayer/schema/v0.1/relation.schema.json create mode 100644 msglayer/schema/v0.1/root.schema.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6de389f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "references/art-design-pro"] + path = references/art-design-pro + url = https://github.com/Daymychen/art-design-pro.git + branch = main diff --git a/NOTICE.md b/NOTICE.md index f41095f..302428f 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -1,4 +1,4 @@ -# MessageVault 项目规范 +# Commory 项目规范 ## 🏗️ 编码标准 @@ -103,11 +103,18 @@ sdk/storage ✗→ sdk/backup, sdk/auth, app - API 变更必须更新文档 - 用户可见的变更需更新用户手册 +## 📎 外部参考源码 + +- `references/` 目录用于存放外部参考源码或设计参考子模块 +- `references/` 下的内容默认视为只读,不作为当前项目功能实现目录 +- 外部参考源码不参与当前项目构建、发布和主许可证主体 +- 如需吸收参考实现,请在本项目自己的模块中重写,不直接在参考镜像目录上开发 + ## 📦 Monorepo 结构 ``` -MessageVault/ -├── android/ # MessageVault-Mobile (Kotlin/Android) +Commory/ +├── android/ # Android ingestion layer (Kotlin/Android) │ ├── sdk/ │ │ ├── backup/ # 纯Kotlin备份/恢复SDK │ │ ├── auth/ # 纯Kotlin认证组件 @@ -118,7 +125,8 @@ MessageVault/ │ ├── third-party-auth.md │ ├── ai-agent-integration.md │ └── backend-microservices.md -├── previewer/ # SMS-Previewer (Vue 3/Vite) +├── previewer/ # Viewer layer (Vue 3/Vite) +├── references/ # 外部只读参考源码 ├── .trae/ # 开发工具配置 ├── LICENSE # GPL v3.0 ├── NOTICE.md # 项目规范 diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..91f4033 --- /dev/null +++ b/README.en.md @@ -0,0 +1,69 @@ +# Commory + +> Turn communication into memory. + +Commory is a communication memory system that transforms SMS, call logs, contacts, and future communication sources into structured, queryable, AI-ready data. + +This repository is in the first phase of a public-facing rename and positioning cleanup. The product brand is now `Commory`, and `MsgLayer` is the name of the underlying communication data layer. + +## Positioning + +Commory is not a backup-first tool. + +- Traditional tools produce backup files +- Commory aims to produce structured data assets that can be searched, analyzed, and reused + +In this repository today: + +- `android/` is the ingestion layer +- `previewer/` is the viewer layer +- existing SDK modules are the foundation for the future `MsgLayer` + +## Architecture + +```text +Commory +├── Ingestion Layer +│ └── Android app +├── MsgLayer +│ ├── schema +│ ├── export models +│ └── future SDK / CLI interfaces +├── Viewer Layer +│ └── previewer +└── Future Extensions + ├── CLI + ├── plugins + ├── local analysis + └── agent integrations +``` + +## References + +`references/` contains read-only external source references. + +Current entry: + +- `references/art-design-pro/` + - source: `https://github.com/Daymychen/art-design-pro.git` + - purpose: UI, interaction, and project-structure reference + - status: read-only in this repository + +## Naming Status + +- Public brand: `Commory` +- Data layer name: `MsgLayer` +- Historical names such as `MessageVault` and `SMS Previewer` still exist in repository history and some component-level docs +- This phase does not rename package names, Gradle modules, or runtime code identifiers + +## GitHub Description + +```text +🧠 Commory · 通信记忆系统|SMS/Call → Structured Data & AI|Self-hosted · Privacy-first · Powered by MsgLayer +``` + +## License + +The root repository remains under the [GNU General Public License v3.0](LICENSE). + +External submodules under `references/` keep their own upstream licenses and ownership. diff --git a/README.md b/README.md index 9adb408..62fd7d4 100644 --- a/README.md +++ b/README.md @@ -1,256 +1,174 @@ -
+[English](README.en.md) | 简体中文 -# 📱 MessageVault 信驿云储 +# Commory -🔒 **安全、私密、自主可控的短信与通话记录备份解决方案** +> Turn communication into memory. -[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) -[![Made with ❤️](https://img.shields.io/badge/Made%20with-❤️-red.svg)](https://github.com/MessageVault) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/MessageVault) +Commory 是一个通信记忆系统,用来把短信、通话记录、联系人以及后续可扩展的通信数据,转成结构化、可查询、AI-ready 的数据资产。 -
+它不是一个“把文件备份出来就结束”的工具集合。对 Commory 来说,备份只是入口,目标是让个人通信数据变成可以持续使用、分析和构建的基础设施。 -MessageVault是一个开源项目,为Android用户提供安全、私密的短信和通话记录备份与分析解决方案。作为一个完整的全栈式开源项目,所有数据都存储在用户自己控制的服务器上,无需依赖第三方云服务。 +## What Is Commory -## 🚀 项目愿景 +Commory 面向三个层次的问题: -- 🔒 **完全自主**: 数据完全在用户控制下,无第三方依赖 -- 🛡️ **隐私优先**: 所有数据本地存储或自托管服务器 -- 🔄 **跨设备同步**: 支持多设备备份和数据管理 -- 📊 **智能分析**: 本地AI分析,保护隐私的数据洞察 -- 🔧 **模块化设计**: 可扩展的架构,便于添加新功能 -- 🎯 **全栈理念**: 从移动端到服务端,从数据存储到用户界面的完整解决方案 +- 数据采集:从 Android 端把 SMS、Call Log、Contacts 等数据稳定导入 +- 数据建模:通过 `MsgLayer` 抽象统一 schema、导出格式和后续 SDK 能力 +- 数据使用:提供预览、检索、分析,以及未来的 CLI、插件和 Agent 集成能力 -## 📦 项目组件 +你可以把它理解成: -### 📱 android/ — MessageVault-Mobile `v0.1.4` ⭐ **主力项目** +- `Commory` = 产品层 / 体验层 +- `MsgLayer` = 通信数据层 / SDK / schema 能力 -现代化Android应用,采用Material Design 3设计,多模块SDK架构 -- ✅ **短信备份**: 完整支持SMS备份,包含所有元数据 -- ✅ **通话记录备份**: 完整支持通话历史记录备份 -- ✅ **联系人备份**: 完整支持联系人信息备份 -- ✅ **智能恢复**: 支持选择性恢复,带进度显示 -- ✅ **Material You**: 支持动态取色和深色主题 -- ✅ **多语言**: 中文/英文界面支持 -- ✅ **模块化SDK**: 核心逻辑提取为独立SDK模块,支持跨平台复用 +## Why It’s Different -**技术栈**: Kotlin · Jetpack Compose · Material Design 3 · MVVM · Room · Kotlin Coroutines +传统备份工具的重点是: -#### SDK模块 +- 导出文件 +- 保存文件 +- 恢复文件 -| 模块 | 类型 | 职责 | -|------|------|------| -| `sdk/backup` | 纯Kotlin | 备份/恢复核心逻辑(BackupManager、RestoreManager、BackupSerializer、数据模型、读写接口) | -| `sdk/auth` | 纯Kotlin | 认证与身份管理(AuthProvider接口、LocalAuthProvider、ThirdPartyAuthProvider、AuthManager) | -| `sdk/storage` | Android Library | 存储抽象与实现(StorageProvider接口、LocalStorageProvider、RemoteStorageProvider、Room) | -| `app` | Android Application | 应用壳(UI、导航、权限、Android平台SDK接口实现) | +Commory 的重点是: -#### 架构设计文档 +- 生成结构化数据 +- 建立长期可维护的数据层 +- 让通信历史可以被检索、分析、组合和复用 -- [鸿蒙适配设计文档](android/docs/architecture/harmonyos-adaptation.md) — 鸿蒙原生开发方案、KMP复用策略 -- [第三方登录设计文档](android/docs/architecture/third-party-auth.md) — AuthProvider接口设计、OAuth2.0扩展 -- [AI Agent集成设计文档](android/docs/architecture/ai-agent-integration.md) — 知识库架构、本地/云端AI模型 -- [后端微服务架构设计文档](android/docs/architecture/backend-microservices.md) — 服务拆分、NAS自部署 +换句话说: -### 🔍 previewer/ — SMS-Previewer `v0.0.1` ⭐ **工具项目** +- 传统工具产出的是 backup files +- Commory 产出的是 structured, queryable, AI-ready data -优雅的短信备份预览工具,基于Web技术 -- ✅ **文件预览**: 支持SMS Backup & Restore导出的XML文件 -- ✅ **智能分析**: 消息统计和联系人互动分析 -- ✅ **美观界面**: 对话气泡式界面,支持深色模式 -- ✅ **隐私保护**: 完全本地运行,无需上传服务器 +## Architecture -**技术栈**: Vue 3 · Vite · Tailwind CSS - -## 🎯 开发进度状态 - -### 📊 总体进度 -- **MessageVault-Mobile** (`android/`): 🟢 **高度可用** (核心功能完备,生产环境可用,持续优化中) -- **SMS-Previewer** (`previewer/`): 🟢 **功能完备** (独立工具,稳定运行) - -### 🏃‍♂️ 当前重点 -1. **MessageVault-Mobile**: 🚀 持续优化用户体验和功能增强 -2. **SMS-Previewer**: 🔧 功能完善和性能优化 -3. **项目生态**: 📚 文档完善和开发者工具改进 - -> 💡 **开发理念**: 作为我的第一个全栈式开源项目,MessageVault致力于打造一个完整、可靠的数据备份解决方案,所有组件均在积极开发和不断完善中。 - -## 🛠️ 技术栈 - -### Mobile (Android) -- **框架**: Jetpack Compose + Material Design 3 -- **语言**: Kotlin -- **架构**: MVVM + 多模块SDK架构 -- **SDK模块**: sdk/backup (纯Kotlin) · sdk/auth (纯Kotlin) · sdk/storage (Android Library) -- **并发**: Kotlin Coroutines + StateFlow -- **测试**: JUnit + Mockito + Espresso - -### Previewer (工具) -- **框架**: Vue 3 + Vite -- **样式**: Tailwind CSS -- **特性**: 纯前端,无服务器依赖 - -## 🏗️ 系统架构 - -``` -┌─────────────────────────────────────────────┐ -│ Android App (app/) │ -│ UI · ViewModel · 权限 · 导航 · SDK接口实现 │ -└──────┬──────────────┬──────────────┬────────┘ - │ │ │ - ▼ ▼ ▼ -┌────────────┐ ┌────────────┐ ┌────────────┐ -│ sdk/backup │ │ sdk/auth │ │ sdk/storage │ -│ (纯Kotlin) │ │ (纯Kotlin) │ │ (Android │ -│ │ │ │ │ Library) │ -└────────────┘ └────────────┘ └────────────┘ - │ │ │ - └──────┬───────┘ │ - │ JSON Export │ - ▼ ▼ -┌─────────────────┐ ┌─────────────────┐ -│ SMS-Previewer │ │ 后端微服务 │ -│ (previewer/) │ │ (规划中) │ -│ Web Tool │ │ │ -└─────────────────┘ └─────────────────┘ +```text +Commory +├── Ingestion Layer +│ └── Android app +├── MsgLayer +│ ├── schema +│ ├── export models +│ └── future SDK / CLI interfaces +├── Viewer Layer +│ └── previewer +└── Future Extensions + ├── CLI + ├── plugins + ├── local analysis + └── agent integrations ``` -## 🚀 快速开始 +当前仓库的第一阶段重点,是先把现有 Android 采集能力和 Web 预览能力,收束到 `Commory / MsgLayer` 这套统一叙事之下。 -### 👤 普通用户 -1. **下载MessageVault-Mobile APK**: [Releases页面](https://github.com/MessageVault/MessageVault-Mobile/releases) -2. **使用SMS-Previewer**: [在线版本](https://messagevault.github.io/SMS-Previewer/) 或本地部署 +## Components -### 👨‍💻 开发者 -```bash -# 克隆 Monorepo -git clone git@github.com:IsKenKenYa/MessageVault.git -cd MessageVault +### `android/` -# Android 应用开发 -cd android -./gradlew build +现有的 Android 入口层,负责设备侧的数据采集、导出、恢复和平台集成。 -# 预览工具开发 -cd previewer -pnpm install -pnpm dev -``` +- 角色:ingestion layer +- 现状:已具备 SMS / 通话记录 / 联系人相关能力 +- 技术栈:Kotlin、Jetpack Compose、Material 3、MVVM、多模块 SDK -## 📋 项目规范 +其中现有 `sdk/backup`、`sdk/auth`、`sdk/storage` 是后续收束到 `MsgLayer` 方向的重要基础。 -开发本项目前,请务必阅读[项目规范文档](NOTICE.md),其中包含: +### `previewer/` -- 🏗️ **编码标准**: 命名规范、代码风格、架构原则 -- 💬 **注释要求**: 文档化标准、API注释规范 -- 🔧 **可扩展性**: 模块化设计、接口设计原则 -- 🧪 **测试要求**: 单元测试、集成测试、E2E测试 -- 📝 **变更记录**: CHANGELOG和AI编辑日志规范 -- 📚 **文档要求**: README、API文档、用户手册标准 +现有的查看层,用于浏览和分析导出的通信数据。 -## 🤝 参与贡献 +- 角色:viewer layer +- 现状:支持基于 XML 导出内容的本地预览与基础分析 +- 技术栈:Vue 3、Vite、Tailwind CSS -我们欢迎所有形式的贡献!无论是代码、文档、测试、反馈还是建议。 +`SMS Previewer` 在当前阶段仍然保留为已有组件名称,但不再作为项目主品牌。 -### 🐛 报告问题 -- [MessageVault-Mobile Issues](https://github.com/MessageVault/MessageVault-Mobile/issues) -- [SMS-Previewer Issues](https://github.com/MessageVault/SMS-Previewer/issues) +## Use Cases -### 💡 功能建议 -- [MessageVault Discussions](https://github.com/MessageVault/MessageVault/discussions) +- 搜索自己的通信历史 +- 查看联系人互动脉络和时间线 +- 对短信和通话记录做本地分析 +- 为个人知识库或 Agent 提供结构化通信数据 +- 在自托管环境中保留长期可用的数据资产 -### 📝 贡献代码 -1. Fork 相应的仓库 -2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) -3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) -4. 推送到分支 (`git push origin feature/AmazingFeature`) -5. 开启 Pull Request +## Roadmap -### 📋 开发规范 -- 遵循项目编码标准 -- 编写单元测试 -- 更新相关文档 -- 遵循Git提交规范 +第一阶段是对外表达与仓库组织收束;后续路线包括: -## 🏆 致谢 +- `MsgLayer` 命名与接口继续清晰化 +- CLI 能力 +- 插件化扩展 +- 更多数据源接入 +- 本地分析与 AI/Agent 集成 +- 统一 viewer 与 mobile 的数据模型 -### 🙏 特别感谢 -- **[SMS Backup & Restore](https://play.google.com/store/apps/details?id=com.riteshsahu.SMSBackupRestore)**: 启发了SMS-Previewer项目的创建 -- **Android开源社区**: 提供了优秀的Jetpack Compose和Material Design 3组件 -- **Vue.js社区**: 提供了现代化的前端开发框架 -- **开源精神**: 无数开源项目和开发者的贡献,让我学会了如何构建和维护一个全栈项目 +## References -### 💻 核心技术支持 -- [Jetpack Compose](https://developer.android.com/jetpack/compose) - 现代化Android UI框架 -- [Material Design 3](https://m3.material.io/) - Google设计系统 -- [Vue.js](https://vuejs.org/) - 渐进式JavaScript框架 -- [Tailwind CSS](https://tailwindcss.com/) - 实用优先的CSS框架 +`references/` 用来存放只读参考源码,不参与当前项目构建、发布和许可证主体。 -## 📊 项目统计 +当前包含: -
+- `references/art-design-pro/` + - 来源:`https://github.com/Daymychen/art-design-pro.git` + - 用途:UI、交互和工程组织参考 + - 规则:默认只读,不在本仓直接修改其镜像内容 -![Project Status](https://img.shields.io/badge/Project%20Status-Active%20Development-brightgreen) -![Mobile App](https://img.shields.io/badge/Mobile%20App-v0.1.4%20Highly%20Usable-success) -![SMS Previewer](https://img.shields.io/badge/SMS%20Previewer-v0.0.1%20Stable-success) -![License](https://img.shields.io/badge/License-GPL%20v3-blue) +如果你是贡献者,请不要把 `references/` 下的外部参考代码视为当前项目功能开发目录。 -**主要语言**: Kotlin, Vue.js, JavaScript | **首个全栈开源项目** 🎯 +## Current Naming Status -
+这个仓库正处在品牌与文档收束的第一阶段。 ---- +- 首页主品牌现在统一使用 `Commory` +- `MsgLayer` 是正式的数据层架构名 +- 仓库历史、源码命名和远程地址中仍可见 `MessageVault` +- `SMS Previewer` 仍作为现有 viewer 组件名称存在 -
+这意味着本次改造只更新对外可见文案,不修改源码包名、Gradle module 名或运行时代码行为。 -### 📱 开始您的数据备份之旅 +## Quick Start -**[下载Android应用](https://github.com/MessageVault/MessageVault-Mobile/releases)** -• -**[在线预览工具](https://messagevault.github.io/SMS-Previewer/)** +### Android ---- +```bash +cd android +./gradlew build +``` -*MessageVault - 您的数据,您的控制权* 🔒 +### Previewer -
+```bash +cd previewer +pnpm install +pnpm dev +``` -## 📄 许可证 +### Clone With Submodules -本项目采用 [GNU General Public License v3.0](LICENSE) - 查看许可证文件了解详情。 +```bash +git clone +cd Commory +git submodule update --init --recursive +``` + +## GitHub Description -### 🛡️ GPL 3.0 核心原则 -- ✅ **自由使用**: 可以自由运行程序 -- ✅ **自由研究**: 可以研究程序工作原理并修改 -- ✅ **自由分发**: 可以重新分发原始版本 -- ✅ **自由改进**: 可以分发修改后的版本 -- 🔒 **Copyleft保护**: 衍生作品必须以相同许可证分发 -- 📝 **源码开放**: 分发二进制文件时必须提供源代码 +推荐仓库描述: -## 🛡️ 项目独立性声明 +```text +🧠 Commory · 通信记忆系统|SMS/Call → Structured Data & AI|Self-hosted · Privacy-first · Powered by MsgLayer +``` -### 📜 核心承诺 -面对当前开源生态中部分项目被商业收购的现状,我们郑重声明: +## Contributing -- 🔒 **数据自主权**: 本项目的所有子项目、功能**绝对不会**与任何第三方共享用户数据 -- 🏠 **本地优先**: 坚持数据本地可控的设计理念,用户完全掌控自己的数据 -- 👤 **用户选择权**: 保留用户高度自定义权利,由用户自行选择是否接入第三方服务 -- 🔧 **可选集成**: 支持用户自主选择第三方API(云盘备份、AI分析等)服务提供商 +开始开发前请先阅读 [NOTICE.md](NOTICE.md)。 -### 🛡️ 独立性保障 -- 📅 **长期维护**: 即使项目不盈利,也会持续投入时间进行维护和更新 -- 🚫 **抗收购承诺**: 如遇不可抗力强制收购,将**立即封存归档**整个组织账户 -- 🌱 **社区传承**: 确保开源社区能够Fork项目并继续发扬光大 -- 💎 **价值坚持**: 即使存在众多替代品,仍坚持数据自主的核心价值观 +- Android 与 Previewer 保持现有构建方式 +- 新的命名收束优先落在文档和架构表达层 +- `references/` 为只读参考区,不作为功能实现目录 -> 🔥 **我们的信念**: 用户数据属于用户本人,任何人和组织都无权在未经明确授权的情况下访问、使用或共享用户数据。 +## License -### 💼 项目可持续发展计划 -MessageVault采用**开源优先**的发展模式: -- 🆓 **当前阶段**: 所有功能完全开源免费 -- 🚀 **未来Pro版本**: 当项目高度成熟后,将推出Pro版本用于体验最新功能 -- 📦 **版本策略**: Pro版本领先开源版本两个版本,旧Pro版本将自动开源发布 -- 🤝 **收益分配**: Pro版本收入将与贡献者按贡献量公平分配 -- 🎯 **核心承诺**: 基础功能永远保持开源,确保用户数据自主权 +本仓库根目录代码采用 [GNU General Public License v3.0](LICENSE)。 -> 💡 **重要说明**: 目前专注于开源版本的完善,Pro版本计划仅在整个项目生态高度可用后才会考虑推出。 +`references/` 下的外部子模块保持其各自上游仓库的许可证和版权归属,不自动并入本仓主许可证主体。 diff --git a/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt b/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt index 28b701b..fdce5c1 100644 --- a/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt +++ b/android/app/src/androidTest/java/imken/messagevault/mobile/BackupManagerInstrumentedTest.kt @@ -2,9 +2,11 @@ package imken.messagevault.mobile import android.Manifest import android.content.Context +import android.provider.Settings import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.rule.GrantPermissionRule +import imken.messagevault.mobile.BuildConfig import imken.messagevault.mobile.data.backup.AndroidBackupFileReader import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter import imken.messagevault.mobile.data.backup.AndroidCallLogReader @@ -82,7 +84,12 @@ class BackupManagerInstrumentedTest { hasSmsPermission = true, hasCallLogPermission = true, hasContactsPermission = true, - deviceInfo = "Test Device" + deviceInfo = "Test Device", + deviceId = Settings.Secure.getString( + context.contentResolver, + Settings.Secure.ANDROID_ID + ) ?: "instrumented-device", + appVersion = BuildConfig.VERSION_NAME ) Timber.i("[Mobile] INFO [Test] 备份结果; Context: success=${result.success}, smsCount=${result.smsCount}, callLogCount=${result.callLogCount}") diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt index eac99e5..75f025a 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt @@ -4,6 +4,9 @@ import android.content.Context import com.google.gson.Gson import com.google.gson.reflect.TypeToken import imken.messagevault.mobile.model.BackupData +import imken.messagevault.sdk.backup.msglayer.MsgLayerSerializer +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerIdentity +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport import imken.messagevault.sdk.backup.model.BackupReadData import imken.messagevault.sdk.backup.model.CallLogData import imken.messagevault.sdk.backup.model.ContactData @@ -14,12 +17,14 @@ import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import java.io.FileReader +import kotlin.math.absoluteValue class AndroidBackupFileReader( private val context: Context ) : BackupFileReader { private val gson = Gson() + private val msgLayerGson = MsgLayerSerializer().gson() override suspend fun read(filePath: String): BackupReadData? = withContext(Dispatchers.IO) { try { @@ -29,20 +34,23 @@ class AndroidBackupFileReader( return@withContext null } - FileReader(file).use { reader -> - val fileContent = file.readText() - val containsCallLogs = fileContent.contains("\"callLogs\"") || fileContent.contains("\"call_logs\"") - val containsMessages = fileContent.contains("\"messages\"") || fileContent.contains("\"sms\"") - val containsContacts = fileContent.contains("\"contacts\"") + val fileContent = file.readText() + val containsCallLogs = fileContent.contains("\"callLogs\"") || fileContent.contains("\"call_logs\"") + val containsMessages = fileContent.contains("\"messages\"") || fileContent.contains("\"sms\"") + val containsContacts = fileContent.contains("\"contacts\"") + + Timber.d("[Mobile] DEBUG [Restore] Backup file content analysis: hasCallLogs=$containsCallLogs, hasMessages=$containsMessages, hasContacts=$containsContacts") - Timber.d("[Mobile] DEBUG [Restore] Backup file content analysis: hasCallLogs=$containsCallLogs, hasMessages=$containsMessages, hasContacts=$containsContacts") + if (fileContent.contains("\"version\"") && fileContent.contains("msglayer/v0.1")) { + val msgLayer = msgLayerGson.fromJson(fileContent, MsgLayerRootExport::class.java) + ?: return@withContext null + return@withContext msgLayer.toBackupReadData() + } + FileReader(file).use { reader -> val typeToken = object : TypeToken() {}.type val backupData = gson.fromJson(reader, typeToken) - if (backupData == null) { - Timber.e("[Mobile] ERROR [Restore] Parsed backup file returned null: $filePath") - return@withContext null - } + ?: return@withContext null val messagesCount = backupData.messages?.size ?: 0 val callLogsCount = backupData.callLogs?.size ?: 0 @@ -100,4 +108,81 @@ class AndroidBackupFileReader( null } } + + private fun MsgLayerRootExport.toBackupReadData(): BackupReadData { + val identitiesById = identities.associateBy { it.id } + val messages = events.filter { it.type == "sms" }.mapNotNull { event -> + val address = event.counterpartyAddress(identitiesById) + val threadId = event.relations.firstOrNull { it.type == "same_thread" } + ?.target + ?.removePrefix("thread_") + ?.toLongOrNull() + ?: 0L + SmsData( + id = event.id.removePrefix("sms_").toLongOrNull() ?: event.id.hashCode().toLong().absoluteValue, + address = address, + body = event.content["text"] as? String ?: "", + date = event.timestamp.toEpochMillis(), + type = if (event.direction == "outbound") 2 else 1, + readState = if ((event.meta["read"] as? Boolean) == true) 1 else 0, + messageStatus = (event.meta["status"] as? Number)?.toInt() ?: 0, + threadId = threadId + ) + } + val calls = events.filter { it.type == "call" }.mapNotNull { event -> + val address = event.counterpartyAddress(identitiesById) + CallLogData( + id = event.id.removePrefix("call_").toLongOrNull() ?: event.id.hashCode().toLong().absoluteValue, + number = address, + type = when (event.content["call_type"] as? String ?: "unknown") { + "outgoing" -> 2 + "incoming" -> 3 + "rejected" -> 5 + "voicemail" -> 4 + else -> 1 + }, + date = event.timestamp.toEpochMillis(), + duration = (event.content["duration_sec"] as? Number)?.toInt() ?: 0, + contact = event.counterpartyName(identitiesById) + ) + } + val contacts = identities + .filter { it.type == "person" } + .map { identity -> + ContactData( + id = identity.id.hashCode().toLong().absoluteValue, + name = identity.displayName, + phoneNumbers = identity.phones, + emails = identity.emails + ) + } + return BackupReadData( + messages = messages, + callLogs = calls, + contacts = contacts, + timestamp = exportedAt.toEpochMillis(), + deviceInfo = source.deviceId + ) + } + + private fun imken.messagevault.sdk.backup.msglayer.model.MsgLayerEvent.counterpartyAddress( + identitiesById: Map + ): String { + val identityId = participants.firstOrNull { !it.startsWith("self/") } ?: return "" + val identity = identitiesById[identityId] + return identity?.phones?.firstOrNull() ?: identity?.displayName ?: identityId + } + + private fun imken.messagevault.sdk.backup.msglayer.model.MsgLayerEvent.counterpartyName( + identitiesById: Map + ): String? { + val identityId = participants.firstOrNull { !it.startsWith("self/") } ?: return null + return identitiesById[identityId]?.displayName + } + + private fun String.toEpochMillis(): Long = try { + java.time.OffsetDateTime.parse(this).toInstant().toEpochMilli() + } catch (_: Exception) { + System.currentTimeMillis() + } } diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt index f55e0f5..45b786b 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt @@ -2,9 +2,10 @@ package imken.messagevault.mobile.data.backup import android.content.Context import android.os.Build -import imken.messagevault.sdk.backup.model.BackupData import imken.messagevault.sdk.backup.model.BackupResult -import imken.messagevault.sdk.backup.serializer.BackupSerializer +import imken.messagevault.sdk.backup.model.BackupWriteStats +import imken.messagevault.sdk.backup.msglayer.MsgLayerSerializer +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport import imken.messagevault.sdk.backup.writer.BackupFileWriter import timber.log.Timber import java.io.File @@ -14,9 +15,9 @@ import java.util.Locale class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { - private val serializer = BackupSerializer() + private val serializer = MsgLayerSerializer() - override suspend fun writeBackup(data: BackupData, filePath: String): BackupResult { + override suspend fun writeBackup(export: MsgLayerRootExport, stats: BackupWriteStats): BackupResult { try { val backupDir = File(context.getExternalFilesDir(null), "backups") if (!backupDir.exists()) { @@ -26,18 +27,11 @@ class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { val fileName = generateUserFriendlyFileName() val backupFile = File(backupDir, fileName) - Timber.d("[Mobile] DEBUG [Backup] 数据准备情况: 短信=${data.messages?.size ?: 0}, 通话记录=${data.callLogs?.size ?: 0}, 联系人=${data.contacts?.size ?: 0}, 设备信息=${data.deviceInfo}") + Timber.d( + "[Mobile] DEBUG [Backup] MsgLayer数据准备情况: 短信=${stats.smsCount}, 通话记录=${stats.callLogCount}, 联系人=${stats.contactCount}, 版本=${export.version}" + ) - val jsonString = serializer.serializeWithSizeLimit(data) - ?: return BackupResult( - success = false, - timestamp = System.currentTimeMillis(), - appVersion = "", - deviceId = "", - smsCount = data.messages?.size ?: 0, - callLogCount = data.callLogs?.size ?: 0, - errorMessage = "创建备份文件失败" - ) + val jsonString = serializer.toJson(export) try { backupFile.writeText(jsonString) @@ -70,10 +64,10 @@ class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { return BackupResult( success = true, timestamp = System.currentTimeMillis(), - appVersion = "", - deviceId = "", - smsCount = data.messages?.size ?: 0, - callLogCount = data.callLogs?.size ?: 0, + appVersion = export.source.appVersion, + deviceId = export.source.deviceId, + smsCount = stats.smsCount, + callLogCount = stats.callLogCount, fileName = backupFile.name, filePath = backupFile.absolutePath ) @@ -94,6 +88,6 @@ class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { val dateFormat = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault()) val timestamp = dateFormat.format(Date()) val device = deviceName ?: Build.MODEL.replace(" ", "_") - return "MessageVault_${device}_${timestamp}.json" + return "msglayer-v0.1_${device}_${timestamp}.json" } } diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt index f2e37a8..55cef6a 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt @@ -2,6 +2,7 @@ package imken.messagevault.mobile.ui.viewmodels import android.content.Context import android.os.Build +import android.provider.Settings import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel @@ -15,6 +16,7 @@ import imken.messagevault.mobile.data.backup.AndroidContactReader import imken.messagevault.mobile.data.backup.AndroidContactWriter import imken.messagevault.mobile.data.backup.AndroidSmsReader import imken.messagevault.mobile.data.backup.AndroidSmsWriter +import imken.messagevault.mobile.BuildConfig import imken.messagevault.sdk.backup.BackupManager import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers @@ -62,11 +64,17 @@ class BackupViewModel( viewModelScope.launch(dispatcher) { try { val deviceInfo = "${Build.MANUFACTURER} ${Build.MODEL}" + val deviceId = Settings.Secure.getString( + context.contentResolver, + Settings.Secure.ANDROID_ID + ) ?: "unknown-device" val result = backupManager.performBackup( hasSmsPermission = true, hasCallLogPermission = true, hasContactsPermission = true, - deviceInfo = deviceInfo + deviceInfo = deviceInfo, + deviceId = deviceId, + appVersion = BuildConfig.VERSION_NAME ) if (result.success) { _backupStatus.value = "备份完成: ${result.smsCount} 条短信, ${result.callLogCount} 条通话记录" diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt index 4a26ad1..71eea45 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt @@ -7,8 +7,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken import imken.messagevault.mobile.api.ApiClient import imken.messagevault.mobile.config.Config import imken.messagevault.mobile.data.backup.AndroidBackupFileReader @@ -20,6 +18,10 @@ import imken.messagevault.mobile.models.BackupFile import imken.messagevault.mobile.models.RestoreState import imken.messagevault.sdk.backup.RestoreManager import imken.messagevault.sdk.backup.model.BackupData +import imken.messagevault.sdk.backup.model.BackupReadData +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.model.Contact +import imken.messagevault.sdk.backup.model.Message import imken.messagevault.sdk.backup.model.RestoreOptions import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -29,7 +31,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import java.io.FileReader import java.util.Date class RestoreViewModel( @@ -39,7 +40,7 @@ class RestoreViewModel( private val apiClient: ApiClient ) : ViewModel() { - private val gson = Gson() + private val backupFileReader = AndroidBackupFileReader(context) private val _backupFiles = MutableStateFlow>(emptyList()) val backupFiles: StateFlow> = _backupFiles.asStateFlow() @@ -286,16 +287,14 @@ class RestoreViewModel( context.contentResolver, android.provider.Settings.Secure.ANDROID_ID ) ?: "unknown" - val backupData = FileReader(file).use { reader -> - try { gson.fromJson(reader, BackupData::class.java) } catch (_: Exception) { null } - } + val backupData = backupFileReader.read(file.absolutePath) BackupFile( filePath = file.absolutePath, fileName = file.name, fileSize = file.length(), creationDate = Date(file.lastModified()), - deviceName = deviceId, + deviceName = backupData?.deviceInfo ?: deviceId, smsCount = backupData?.messages?.size ?: 0, callLogsCount = backupData?.callLogs?.size ?: 0, version = imken.messagevault.mobile.BuildConfig.VERSION_NAME @@ -309,27 +308,50 @@ class RestoreViewModel( } private suspend fun parseBackupFile(backupFile: BackupFile): BackupData? = withContext(Dispatchers.IO) { - try { - FileReader(File(backupFile.filePath)).use { reader -> - val typeToken = object : TypeToken() {}.type - gson.fromJson(reader, typeToken) - } - } catch (e: Exception) { - Timber.e(e, "[Mobile] ERROR [Restore] Failed to parse backup file: ${backupFile.fileName}") - null - } + backupFileReader.read(backupFile.filePath)?.toLegacyBackupData() } private fun validateBackupFile(file: File): Boolean { if (!file.exists() || !file.isFile || !file.canRead()) return false - return try { - FileReader(file).use { reader -> - val typeToken = object : TypeToken() {}.type - gson.fromJson(reader, typeToken) != null - } - } catch (_: Exception) { - false - } + return runCatching { kotlinx.coroutines.runBlocking { backupFileReader.read(file.absolutePath) != null } } + .getOrDefault(false) + } + + private fun BackupReadData.toLegacyBackupData(): BackupData { + return BackupData( + messages = messages.map { message -> + Message( + id = message.id, + address = message.address, + body = message.body, + date = message.date, + type = message.type, + readState = message.readState, + messageStatus = message.messageStatus, + threadId = message.threadId + ) + }, + callLogs = callLogs.map { callLog -> + CallLog( + id = callLog.id, + number = callLog.number, + type = callLog.type, + date = callLog.date, + duration = callLog.duration, + contact = callLog.contact + ) + }, + contacts = contacts.map { contact -> + Contact( + id = contact.id, + name = contact.name, + phoneNumbers = contact.phoneNumbers.toMutableList(), + emails = contact.emails + ) + }, + timestamp = timestamp, + deviceInfo = deviceInfo + ) } fun setPermissionsGranted(granted: Boolean) { diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt index 81a8b23..d598f0c 100644 --- a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/BackupManager.kt @@ -2,6 +2,11 @@ package imken.messagevault.sdk.backup import imken.messagevault.sdk.backup.model.BackupData import imken.messagevault.sdk.backup.model.BackupResult +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.model.Contact +import imken.messagevault.sdk.backup.model.Message +import imken.messagevault.sdk.backup.model.BackupWriteStats +import imken.messagevault.sdk.backup.msglayer.MsgLayerMapper import imken.messagevault.sdk.backup.reader.BackupFileReader import imken.messagevault.sdk.backup.reader.CallLogReader import imken.messagevault.sdk.backup.reader.ContactReader @@ -21,14 +26,17 @@ class BackupManager( private val smsWriter: SmsWriter, private val callLogWriter: CallLogWriter, private val contactWriter: ContactWriter, - private val serializer: BackupSerializer = BackupSerializer() + private val serializer: BackupSerializer = BackupSerializer(), + private val msgLayerMapper: MsgLayerMapper = MsgLayerMapper() ) { suspend fun performBackup( hasSmsPermission: Boolean, hasCallLogPermission: Boolean, hasContactsPermission: Boolean, - deviceInfo: String = "" + deviceInfo: String = "", + deviceId: String = "", + appVersion: String = "" ): BackupResult { if (!hasSmsPermission && !hasCallLogPermission && !hasContactsPermission) { return BackupResult( @@ -61,42 +69,100 @@ class BackupManager( ) } - val backupData = BackupData( - messages = messages, - callLogs = callLogs, - contacts = contacts, - timestamp = System.currentTimeMillis(), - deviceInfo = deviceInfo + val export = msgLayerMapper.toRootExport( + messages = messages.orEmpty(), + callLogs = callLogs.orEmpty(), + contacts = contacts.orEmpty(), + deviceInfo = deviceInfo, + deviceId = deviceId.ifBlank { "unknown-device" }, + appVersion = appVersion.ifBlank { "unknown" } ) - val json = serializer.serializeWithSizeLimit(backupData) - ?: return BackupResult( - success = false, - timestamp = System.currentTimeMillis(), - appVersion = "", - deviceId = "", + return backupFileWriter.writeBackup( + export = export, + stats = BackupWriteStats( smsCount = messagesCount, callLogCount = callLogsCount, - errorMessage = "创建备份文件失败" + contactCount = contactsCount ) - - return backupFileWriter.writeBackup(backupData, "") + ) } suspend fun restoreFromFile(filePath: String): BackupData? { - return backupFileReader.readBackup(filePath) + val backupReadData = backupFileReader.read(filePath) ?: return null + return BackupData( + messages = backupReadData.messages.map { message -> + Message( + id = message.id, + address = message.address, + body = message.body, + date = message.date, + type = message.type, + readState = message.readState, + messageStatus = message.messageStatus, + threadId = message.threadId + ) + }, + callLogs = backupReadData.callLogs.map { callLog -> + CallLog( + id = callLog.id, + number = callLog.number, + type = callLog.type, + date = callLog.date, + duration = callLog.duration, + contact = callLog.contact + ) + }, + contacts = backupReadData.contacts.map { contact -> + Contact( + id = contact.id, + name = contact.name, + phoneNumbers = contact.phoneNumbers.toMutableList(), + emails = contact.emails + ) + }, + timestamp = backupReadData.timestamp, + deviceInfo = backupReadData.deviceInfo + ) } suspend fun restoreSms(messages: List): Int { - return smsWriter.writeSms(messages) + return smsWriter.write(messages.map { message -> + imken.messagevault.sdk.backup.model.SmsData( + id = message.id, + address = message.address, + body = message.body, + date = message.date, + type = message.type, + readState = message.readState, + messageStatus = message.messageStatus, + threadId = message.threadId + ) + }) } suspend fun restoreCallLogs(callLogs: List): Int { - return callLogWriter.writeCallLogs(callLogs) + return callLogWriter.write(callLogs.map { callLog -> + imken.messagevault.sdk.backup.model.CallLogData( + id = callLog.id, + number = callLog.number, + type = callLog.type, + date = callLog.date, + duration = callLog.duration, + contact = callLog.contact + ) + }) } suspend fun restoreContacts(contacts: List): Int { - return contactWriter.writeContacts(contacts) + return contactWriter.write(contacts.map { contact -> + imken.messagevault.sdk.backup.model.ContactData( + id = contact.id, + name = contact.name, + phoneNumbers = contact.phoneNumbers, + emails = contact.emails + ) + }) } fun getSerializer(): BackupSerializer = serializer diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupWriteStats.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupWriteStats.kt new file mode 100644 index 0000000..a81e573 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/model/BackupWriteStats.kt @@ -0,0 +1,7 @@ +package imken.messagevault.sdk.backup.model + +data class BackupWriteStats( + val smsCount: Int = 0, + val callLogCount: Int = 0, + val contactCount: Int = 0 +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt new file mode 100644 index 0000000..f3b3cd2 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt @@ -0,0 +1,215 @@ +package imken.messagevault.sdk.backup.msglayer + +import imken.messagevault.sdk.backup.model.CallLog +import imken.messagevault.sdk.backup.model.Contact +import imken.messagevault.sdk.backup.model.Message +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerEvent +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerIdentity +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRelation +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerSource +import java.security.MessageDigest +import java.time.Instant +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter +import kotlin.math.absoluteValue + +class MsgLayerMapper { + + fun toRootExport( + messages: List, + callLogs: List, + contacts: List, + deviceInfo: String, + deviceId: String, + appVersion: String, + exportedAtMillis: Long = System.currentTimeMillis() + ): MsgLayerRootExport { + val exportedAt = exportedAtMillis.toRfc3339() + val selfIdentity = MsgLayerIdentity( + id = selfIdentityId(deviceId), + type = "device", + displayName = deviceInfo.ifBlank { deviceId }, + phones = emptyList(), + emails = emptyList(), + avatar = null, + labels = listOf("self"), + meta = mapOf("source" to "system") + ) + + val identitiesById = linkedMapOf(selfIdentity.id to selfIdentity) + contacts.forEach { contact -> + val identity = contact.toIdentity() + identitiesById[identity.id] = identity + } + + val events = mutableListOf() + identitiesById.values + .filter { it.id != selfIdentity.id && it.type == "person" } + .forEach { identity -> + events += MsgLayerEvent( + id = "contact_snapshot_${identity.id}", + type = "contact_snapshot", + timestamp = exportedAt, + direction = "system", + participants = listOf(identity.id), + content = mapOf( + "identity_id" to identity.id, + "snapshot" to identity + ), + meta = mapOf("source" to "contacts"), + relations = listOf(MsgLayerRelation("references_identity", identity.id)) + ) + } + + messages.forEach { message -> + val participantId = resolveParticipantIdentity(message.address, identitiesById) + events += MsgLayerEvent( + id = "sms_${message.id}", + type = "sms", + timestamp = message.date.toRfc3339(), + direction = message.toSmsDirection(), + participants = listOf(selfIdentity.id, participantId).distinct(), + content = mapOf( + "text" to (message.body ?: ""), + "attachments" to emptyList() + ), + meta = mapOf( + "read" to (message.readState == 1), + "status" to (message.messageStatus ?: 0), + "raw_type" to message.type + ), + relations = listOf( + MsgLayerRelation("same_thread", "thread_${message.threadId}"), + MsgLayerRelation("references_identity", participantId) + ) + ) + } + + callLogs.forEach { callLog -> + val participantId = resolveParticipantIdentity(callLog.number, identitiesById, callLog.contact) + events += MsgLayerEvent( + id = "call_${callLog.id}", + type = "call", + timestamp = callLog.date.toRfc3339(), + direction = callLog.toCallDirection(), + participants = listOf(selfIdentity.id, participantId).distinct(), + content = mapOf( + "duration_sec" to callLog.duration, + "call_type" to callLog.toCallType(), + "recording" to null + ), + meta = mapOf( + "contact_name" to callLog.contact, + "raw_type" to callLog.type + ), + relations = listOf(MsgLayerRelation("references_identity", participantId)) + ) + } + + return MsgLayerRootExport( + exportedAt = exportedAt, + source = MsgLayerSource( + platform = "android", + deviceId = deviceId, + appVersion = appVersion + ), + identities = identitiesById.values.toList(), + events = events.sortedByDescending { it.timestamp }, + indexes = mapOf( + "timeline" to events.map { it.id } + ) + ) + } + + private fun Contact.toIdentity(): MsgLayerIdentity { + val normalizedPhones = phoneNumbers.map { normalizePhone(it) }.filter { it.isNotBlank() } + val normalizedEmails = emails.orEmpty().map { it.trim() }.filter { it.isNotBlank() } + val stableKey = buildString { + append(id) + append("|") + append(name) + append("|") + append(normalizedPhones.joinToString(",")) + } + return MsgLayerIdentity( + id = "person_${stableHash(stableKey)}", + type = "person", + displayName = name, + phones = normalizedPhones, + emails = normalizedEmails, + avatar = photoData, + labels = listOf("contact"), + meta = mapOf( + "source" to "contacts", + "legacy_contact_id" to id, + "groups" to groups.orEmpty(), + "websites" to websites.orEmpty(), + "note" to note + ) + ) + } + + private fun resolveParticipantIdentity( + rawPhone: String, + identitiesById: MutableMap, + fallbackName: String? = null + ): String { + val normalized = normalizePhone(rawPhone) + identitiesById.values.firstOrNull { identity -> + identity.type == "person" && identity.phones.any { it == normalized } + }?.let { return it.id } + + val displayName = fallbackName?.takeIf { it.isNotBlank() } ?: rawPhone.ifBlank { "Unknown" } + val generated = MsgLayerIdentity( + id = "person_${stableHash("$displayName|$normalized")}", + type = "person", + displayName = displayName, + phones = listOf(normalized).filter { it.isNotBlank() }, + emails = emptyList(), + avatar = null, + labels = listOf("derived"), + meta = mapOf("source" to "derived") + ) + identitiesById.putIfAbsent(generated.id, generated) + return generated.id + } + + private fun Message.toSmsDirection(): String = when (type) { + 2 -> "outbound" + else -> "inbound" + } + + private fun CallLog.toCallDirection(): String = when (type) { + 2 -> "outbound" + 3 -> "inbound" + else -> "missed" + } + + private fun CallLog.toCallType(): String = when (type) { + 1 -> "missed" + 2 -> "outgoing" + 3 -> "incoming" + 4 -> "voicemail" + 5 -> "rejected" + else -> "unknown" + } + + private fun normalizePhone(raw: String?): String { + if (raw.isNullOrBlank()) return "" + val cleaned = raw.filter { it.isDigit() || it == '+' } + return cleaned.ifBlank { raw.trim() } + } + + private fun stableHash(input: String): String { + val digest = MessageDigest.getInstance("SHA-256") + .digest(input.toByteArray(Charsets.UTF_8)) + return digest.take(8).joinToString("") { "%02x".format(it) } + } + + private fun Long.toRfc3339(): String { + return Instant.ofEpochMilli(this) + .atOffset(ZoneOffset.UTC) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME) + } +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerSerializer.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerSerializer.kt new file mode 100644 index 0000000..23d816b --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerSerializer.kt @@ -0,0 +1,19 @@ +package imken.messagevault.sdk.backup.msglayer + +import com.google.gson.FieldNamingPolicy +import com.google.gson.GsonBuilder +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport + +class MsgLayerSerializer { + + private val gson = GsonBuilder() + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) + .serializeNulls() + .disableHtmlEscaping() + .setPrettyPrinting() + .create() + + fun toJson(export: MsgLayerRootExport): String = gson.toJson(export) + + fun gson() = gson +} diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt new file mode 100644 index 0000000..63c4326 --- /dev/null +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt @@ -0,0 +1,43 @@ +package imken.messagevault.sdk.backup.msglayer.model + +data class MsgLayerRootExport( + val version: String = "msglayer/v0.1", + val exportedAt: String, + val source: MsgLayerSource, + val identities: List, + val events: List, + val indexes: Map? = null +) + +data class MsgLayerSource( + val platform: String, + val deviceId: String, + val appVersion: String +) + +data class MsgLayerIdentity( + val id: String, + val type: String, + val displayName: String, + val phones: List, + val emails: List, + val avatar: String? = null, + val labels: List = emptyList(), + val meta: Map = emptyMap() +) + +data class MsgLayerEvent( + val id: String, + val type: String, + val timestamp: String, + val direction: String, + val participants: List, + val content: Map, + val meta: Map = emptyMap(), + val relations: List = emptyList() +) + +data class MsgLayerRelation( + val type: String, + val target: String +) diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt index a9a9e11..73cd07b 100644 --- a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/writer/BackupFileWriter.kt @@ -1,8 +1,9 @@ package imken.messagevault.sdk.backup.writer -import imken.messagevault.sdk.backup.model.BackupData import imken.messagevault.sdk.backup.model.BackupResult +import imken.messagevault.sdk.backup.model.BackupWriteStats +import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport interface BackupFileWriter { - suspend fun writeBackup(data: BackupData, filePath: String): BackupResult + suspend fun writeBackup(export: MsgLayerRootExport, stats: BackupWriteStats): BackupResult } diff --git a/backend/cmd/commory/main.go b/backend/cmd/commory/main.go new file mode 100644 index 0000000..48e3666 --- /dev/null +++ b/backend/cmd/commory/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/IsKenKenYa/Commory/backend/internal/cli" +) + +func main() { + ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) + defer cancel() + + if err := cli.Execute(ctx, os.Args[1:], os.Stdout, os.Stderr); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/backend/commory b/backend/commory new file mode 100755 index 0000000000000000000000000000000000000000..6882156200ffc14e5c39cd28e3e4a5ee3bc3e4bb GIT binary patch literal 8368674 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 sUYvdQs6W zX2B84WjfH{)oJxRZ;Ul|uLU-@h4P8#PbRj)gHA(BcMPSaI^>CHss9m^oQ+O(2%TyI zI@OL5ofoU68+AGR` z5ueE|OD50IS?Lckj(&2?G)B#Wx3-w%>s1fU*xTkjEWNs%*u{O3z90B~KY&i`_j%Yr zpRc3O*EgPRNV9!@lm02^>6QBY6n$2I{65?MZXwrapuZYNu)p7GTwHz7`yN@!4lju6wrm!n$XF#b5Hm@yCvA z(YdEr4;x+ov$U&Qs~<4u!{o=9Mti!>W&VZFFFN7Y%#WJ*zxbzeo@pMSud`258u z*IyO7s(u4~42Qz4drf9<2>qaAIl2G;jlBQ$(4);8lxgwS$JtTB+2zc4J$l~1!8bgf zDLn0Y8vWrJe0&|~c;t0$BZsSG)sxU~5Pm`Y5v+Tjh7UhOT^)loKwJZ`3O7kleV<~` zyz5b1TR4Fue-4~RKlZaf2`AC~5I9lypMuld=oTH-!0L_5!|BkIz^NKIA#Z>C#(Uu; z7ztKEIL-PC;It$Frz47C@!)jGUduO_(R9FjuIs(_`Y~cXOw*6;by|~jqh_w9pIg7V z);brv>zyUaZ|<#kb}S}lIteX4?73Kcas#g{)? z-d7sV{@3>Fl=q2TJ?I)`*P8|Sjq(+b+3^GPVq!3t5gTau`!V=T*$qYHW>Q(_I$JiG zKqvd9%Fc`>|DO2W|KR$c2FkJ?ARUIh?oswI)1PIptL)sGWlJghCf7R$%6{0EEkp*$ zca=Z~JfO1Z29qg!nrrkruMabAS!B0ccDhNvqO#~=AE)duxZdEFWo%(vb|q(1zY;?sof!kI4299dEPhK?gImsrJ7- z&?d3?jJu6JO_co!_P|e`a?Ae2?909BZrXi``^5uw=iBmS#M}d?X4a9KYgK+aF=N!d zjq6Vj)UAANz#sn*eY}-@P(NWzKY2vuC$T4+`q|(0lN^43L_2Ywe`MfW;=K7b2Rnvu zKZmdI5^HRis`PDk>{44^?9zAnrjGmAK;Q1N-$;(pxBSF%lmBUzUtW{{d&(~3`mTYp z)7<)z4~#oM@rcR)sLDPP%YTKkpXYk&K-s^xW%nZsDcj6^H_uVoJ7Ue>p=<@$(vw}B zE3jqD;ENXaH=E>4mAx68g0i3BTC&nDJHwWB;MJ5}h917`c9kuTE&B##Kf<-vya}H;bWP^!&DL^epc2FX!W%IZ^UybG`?i2fEx)VeS~9%LMwq5e%QgmR29J2jnYy zKmD`)ed0#;rp0#Op!=s{`4+!4jvDv*H9UVG-{m{#5N=(TR^OIS+^cI?N?qx?hmPxj zlWoJROZeT-cM}Kd0uSmAt=u|6%{RSJ&IzzeQcw4A!*_n{L_R zK)*WuZ@jt^y1&0>+28uly}EwQ{jd1W4Ay07XHTH66aF_|U9amNy1LhY?$vde`xd@? z8=M$`7kp)VpsxSvf8*69`V!BX;Xn84+Qa=n^WCq5b-~Y`4Ak|K|BYAI3%ZBbz3t

oA` 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
mMR7uDXNZFj`4OT#9I59MqdV{-wN8M7yce7ch1 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¥Hr(w{{diK5}J9|7QgHKaVo0?{DWl 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 z�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%0A`*`6uOC(UcL) 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

+u9q&MoPdq^ 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"EU&oe!1c``q)w?zVw-&0jM9aCzby!8`y@?5A#! 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�zc#pQz_3xK&1Z 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 bLk@N!D_1)ujXdRzmKb_Q2x&Hsd1uH_2z+ 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

Y5-z2WE4`idYkUkY^gdJX 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 n^mvOIZ+#>cK`)99tB7w&w|sR5`xDSQF**bH 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

rJNx=dr8wC9I>2v3TYHvkw(^ z=hmWo0;1oyx?7}Z=x}%VgXEP%|9^Ljjjg^zhdDIb5wP5c?1Xef{#}J@J%efd{m>wB z#=SuUT%k66E0_LG&fOH%f(J=69BTTr*;_Yxb?pjgOv85VB%Y%|;bvgT3_4J)mZ}Eq zLUxcJC|{#|%@K3Ytw{(q`^GkQWh((wxZA8pzb zFAaX8jBed6yr` zYkL*9@PKn-p=Rf!I+Bi#4hgu=4wv^Z-uPyzNhBR+m}AYV>A=yGx^ZE?!F4RuNr^r< zd3u;|lg-O-mwc+YxSq4?dIX*BynMgpd&JXiY_cIrcf&B@JBP{74u!W%2d?Afdb-Hd zu5pzp9R0ltTP~MI;m;}@d*j-p{Fwf{9?IJx*?c(ZrXhTJq$duK^JC$8`%o`Vw{*qz zV)CRB+j*Ph(P4ThM_9*I?wWMf#Fk2_^4-d)iq$Xi^YW}yK2x|xpP$wz3yOL>L0>Fy zdX_8Qs(7p9wng?7bhgaf)5?{%8}fwZ!=Dc2%Il$ChLWdV+C$oLJ@zSlmBM@Fc0~EC z>42B3FDq{xZejWSY?l5m>6j;%MEb41NT)B-j~HQjJ!YTb!ike_S3~JByOG~G|GmoR z28H#>wJvIM>D&6fq}$+1d6L%e&3@}rGTVYZ+vV?(yw&@>-Fx=*2~_2>*VMzUys6~d zBRh~E%9JnHc7=B+JYO#CV789)Z~YPd-I0C^C!hV%_(T5ZDGXPR@@eU&@S=LzBKaMHt#Cvd2e)@(9kMkMZGq!V_e=Bdh z^mjz|F+GHDjO=6O!aiFfJ8V{dx)s(%c%-MIaOw&dk7GRwM@K3b=cixc)Gz4{RWI;1 zNBJ@Pqbsg2tKU@Nu^p_ugvaTcJn8mD`ppist&XU?WnpvixPhKjJRIXKGX8$9sD)^; zuwP-kzT`JGtWwk;Bwv-xD!F((jP=C%+$i}T$u5!G5anm5!dn%Fi~Boz;_!NY=!yOu zG48Ag_xr`;vk6%_Q&85JHD$WBs_g~K3lWqkvLp1j%ZKX=MI|Poik+R z+E4NI!o972opQ|DSFW8`OxAW>sYq5XIFt$7F%H-BnUt&AwWyY7>aQ*z*GrsF>lgE+ zXJ<4HY>DzeApP8j@D0dPi#CfV>-ig-SXv@len{Wyk$wdB`7g>>NY>~xY3DB46Y1vV zy`7uN4dn*iqc@$IugzdJlbf9R{1i~6ky7hS%NVZ)r9%syM-3s5K`pUIKZXKT24pRk^Mx0OTWr@OYoAY{71qL#^C6ccy zY?WLZ<^O5sFNNV+qws#o_b3egeW70HM`tWPV{y0p)4Zdr>E9{&viP`o+}N&g?9eJl zd($my{#LVGPEWhl}kzAp4N_e7UIiRN=UI9BUmWoOabN*}VR$!mA3$C8yQf z)v95_t-Ptk<8*0PU4+SPQG2j*^(uUW!usTrsDAr)Y5lJ*v0QFPcRZf+tgWrkq78;p zVQg(Yr+%@6!`6bD;NXT@1owXd79B+EMB)>&6xaB!L=A-vR(MK1b zaKeHGsu1sj%y#K-mme3eE2ytjVZ^7uFsOuQv-k_^rk4xX$yq*^Kc{x0JLW#QC)FM- zoN*>o+*UdIuZ5Fthr&|1O;PxkAfG9GTbPgN*V7Br6}7F3)o|HVgEuR){`KRo( z6Rz}MzN^LGn$jAfx*pQ)5}qeV`_~5K^LNX_IOFwHOYTqd5c>1`wdBe2^Q^`JChunz z_N?kFx9KrnU+SF1)`!W*_8ExQUFfv(#^Vg_e5i2b$r~=VgQkhn;>J;>i}ce5$kJ_< z2R$Zl;X9Y$*#wJip&u(7th@cwX_+;$`v?j@@iu-1ff-_xIOb zl|_|P^>>=SJJD6Uzs3$jm5X@oa`57IW$l6RjnO#PAwAm_hMPBNygE)#7&3*HR3=Wi z_k=wuBQCacH5X35c!}J?8}1y`?@SMNLx;=nFztN1@@bUcPmdn0Ig!7I&psY?rn8Qj zL+ixgr^k7Ivsat=QKG~lcjsiHgnt2Dv*9!HysdfLq(c|>;;du#{J1!J-X5ksB@YwI(=xt`w^9$T_KP3;%^t^3@Dwtoh|lW;4(e@x0=cW$pyLH;{m zgLnJ2AdSrBonl#<}-R#iqjkZZ3ppdv0@EUs;)} zJ-1S&tukF5i87#RyuKO&(T4b%NTXK1#KR>?HMv=D`}?WhYI$`s;LOd!IDEfF(d7$+ z6w>v0Wd-XAlR`Loe6)O&;bjOp8eDV4qi;i#^$W?dRlWsQayG8(}`l3GXo|iG*rt?-gFPwL;F2joL_9y&-B{x9O811)v0ND!c(416 z+8;4x~9fIW_chzILXGR#M)>rGD)iS6r zKG=g4%Dk&f&uij=+z%F(m~` zxptzq^Y)8z(gazh>OgSr9H2Nh;Cbvy@rhR%FW1UwlO)BkII=D2x zr2F*JXnkwObkd;*cbVtvR?KmfVV9mCKL#4~$`|*guCF%?X#9A(foGg{Ka`}tU-_X- z3}41U%|k|THel>IRBk9DEyg8Acg<>gKXx~u(9KmkYpWT)S~s(>dseAKL*TB+E*p|+ zGLYLlPZilZZ+J{z7^mG4Zg4H0PcKoti!g9<~5zPDTsM3jA=l(0>Nhb{*Q_~OlMTPA&#>Iu^iPbU3GOE z9)E|gmKA(ce{N4)M;62Kg01~rTC7acw?7;C(|2Hs`p!1-4)O`fFsZ&IB*#@m8SsR~ zv-g4Ie6NeE-NuZlooP;U!=QDcA?L8Vtx1pk98#wy8BU2Ea)|W}^{(#nlJc$|+Z&Tk z*6iW^38l2qm@a5c3;&Q7KI}?i9b(WJYpYwo-VbXfHHFsstq09--8{dQTPjEB4(q`g zN#&(UWwib$?04XV{rJAOk01DI4&{UWFH)1y2ajz&m~{y8nM>6gKGc=yU*tXBPuyT* ztcs}-aVEwWrO&RcR)CX=8 zy$#)z3mx_){XsX*wK|F053@>{X~5+xRKU?sOgQ?#C-_e#FWOz7cXsLfkh(E)U!GC> z(CF|txH4h_745%04Qv z*F5M;IIaMUFS}RiaX_EU>pN-uMg)>}b|gXHd)%i3@~N(U+J5})NqUOQ^-kK}$6*1x7aL6RcKc5`SRoDf@F$v%-WLO zgEbmOA?7ID;!)54GroUDp-75atyGibNWCs_pQ>x3w69X<4 z>{;H!$4rs7LUMS+VGa0(8QFLFIok5BeVXJJ%|?2p6aHL6_JuYZIo!Iaa7^J9GG2Wy zExYztTg`gSQMcU$I?t z+8GKxUC&6)ba8z@V;+*5)Ht!R)12VC zriR69+*f1W@5wBF>X)Tu2KIx3gB%MfbWO8KTXjyi+G0WCM zq#yszhDBOIE@>Z-%Od^XIV356{gC4i$tr1O!2$Z2j(Y=(?>ee}-~J2r+SkfnV|_h; zT3k-rr!sM$4^1jm_MLRur1K`7SDE5||3v%0rO4j_#RIf@ZdN_}KVQD^9HiKn^)2W- zp>RTJL8G>28yE6w1@b@CJ}djKw)c9fWG2hG3f1*EHKSR&?$8zD`{-S|_UQ_NZ_?H9 z57ZhvgiAplyfMNLsw1oy9uxTgDLh&JXB7tZXz)yRwR4E7!rj6*%0VYezE9U_A^v3H zdxT#FQ#45(^h{kBI;8i#32%~rZor*dl&aY#dfmLE*9w>AyD;EU!nAkGe~WON@Kh(Q zb;k(&ht&XAN%rkDebG;Z^(xooy>bxzR9EBw&lHdU6w<$Snos{=ghjU~J?u%Ipnn#B zrLKBgg`-D>)c|Veyc3`D#PR0{Tl{xS_x9c=#0Sq&e8bxV*6|&Vz?}JHn8tCFIH_m5 z#_~vnPd>~)ud4?BCl2@ZH&^up-K<8gfA^jaFz2+c({&j@^t0Js_Yx12XN1ZB)=@s- zlq39^IIj!&yG|W)iSl=r90Z^I#r$W5jsLj#*kY?3)U5hAQ`biwQa3)**WZGGuMYZ7 z3HZ>XG%(5EMQ0KnFHHMTG)LqomCw?reEkE#8q(OYzuknx8!b>V$o6{u$)4yqh5SaF1c>dA8J#|KW z@)Pq{3cnD4MZ~AStI5^+JDB`i|KIm@{`uv`klwAz?0oUp%0cf|{Se>1h(y=srOJ!0 zCzkag`rY}7dyjNA#DCvue!RQIvlDQS{4u^M!e^@0Fqb zFBN7#{PKYR^j6<~r#3k8r2IDDU+mnEeEV8>k#B!zhy3o}>%X0D@IS2b{M!%~F`g=mweghvZ4$Qp zVIS%vw$Ex|vk&}^9DiNJe_ZvO3EwOSJuTd+tELf0jQ{A5=LhmT)w7dR*7)|V<1-xf z2%jn6zXg2f2|oP|CC{Iz#L>4bjBmZd-NOGE@I}Y^`o7+ayZT38T)sPnt$Z)nc!4ds z$ARddj4xXq5k(buDJ(|2_0 z>&xEbf0Y&>ZQ}o44qAMTpU?m3q02A%xBN0bGoIM^{Oy~3{#OS1pM2P-M;$|yw^LV( zzf1iM*$YDX)~Y?yeqJpHeK_C)LjAxeedB}sBRpLlm-b`l1ij;fDv$cw+j)`ghY%Fb98NWNOs%{ewSq9`17LpFa3<~U;BmffxDD0#|ZW7)KQ#ADfKi;kI@OksayTzBuoQ)CrP{6Mb@_!2PKOXSD zU-ad_HQ?*s;_E}N6L$n|SN;vp`I5K4nyn+o-$n9O0`7c|@9#4LX1?f?-{uSY19`Xp z0DdIGN2{RJ$Ki6&=>aeIF!_V(4gRsp6GZ!`?yUX)dZx#p2z=%*+K-K2ztasQ?S<#Y z&~Lux=fiJ$nB@5nh~FvRD*_*R@;{tBeDY^};)CP(XXf}|{}JS zJmBSzc>8=|Uj>TDe_2<{KmCoh3weORPe!=$Wqy5T^AYtiR&rKftnV}7ZF10eG+wOJ zb&*4=E9oPx;qJc}ud$bn*I@de;pYGHy5jM*TYPI@?;3%B4VqwiXW)VJq) zd;B5P|K-9<#rt!>Up(5!zp=qb0MD1#@P7sTPk|5KF23QzwJ~#(u%;_zZ@qw>%`E(-JaMamC&bI^x=aIAlxu%&;n z+CTM6o*>SNqx}0gq_IW%Qu!N$y~uwiZ1G3xAM`)ckNY3x+uQ#4$&>wi<0mQ(^j+ah z*V6%_yR{j!QhC!b>}Wsb?>_lH81O!)`1*fuz*B@NtF140zsA>3CGf#j`3>)*1FERM zB$WTBihrB@ClMwZf10;ntB1+EmA^&uPYd`i@oBGi&eem$1Hw~_UI6~89RIsXlv;_S}>OioY#QQMO2*NIseZlG9pWE-uJ3Pl|MJ1b{@ljJfe&t%-|!mwJLSF<^o_*N z>woK6UjL7R{yaaQ{!siSQGW9Lz0seKPyey<6Mw02oWB?1Ge4p)o*y&et#Z)&RX@bv z2@vJ=gW+3xZ+xBaABQwK@#HN_eSfy`;qt%w^}=^NJIU7v^XF}Hmi|!ul{r4`$Lf># z>mvSpmA_2*Y&obe#z%iDw^a_x$N$@#yghUr zilYZ*zsd5kXA7YpZ2I%<<>PPg{q5jJC!WwhQhDS4L4BzkI9jdtoyvDWus8as4{Pt# z2Yjm!_>3pUzdyvkxLJXsJb#T2nCnq^Fh>HOAK}IeeR|&w<>OrEUh%IC_=byh&aAMF z=ioCV{3m@cuT5CXQb&K$K##p&8SqHs``0h=@8#dD!JYim=Ag~O zj6E|Q(mL~9K0Ry-T_ik5S6e@A5~e(MKTrHs!WN(Tj`Ev*IEQMZ@P2a8Nb9RRbgm8d zywXYQJSA-uKO;YBK#z)_>iRT5^ef>WU9k}aAHVUpUQuxOYgQlm_?(+g`RQX&p3gbz z@UL;)=kqxy9sc!!|MmB2epOr1ve?mcy4guJcWerHV-FOY*c z#}U4|oujX=*L*0St$%(ZOxpK)cG7vB?@#n8=uF|Ix*qM2o(~GImj9A~S4#gJ>Ao=F zKVI+GZx4j@z?;Q0ymo`1U*8<~=L;_q|BV5oA8h);tTha0A1b*0U@PBSg(r(on}NWT zFUI8G@W1HBDHDEB4*Ie1YF+Pl$j6^AzsaMo8sU-p|495JZuaAm?MKg6`&zF2-zf+E zVxwQ*r4A*@UrzV^PhyT(pOQEFG(>-;y;=KPd#mqnWwlv|{TglS*f1K#!z{#@yI2mBM^n|ntxUbpAhCd<{!#y`CTMTem)%Lr+?n;@zRhU^V>4<geO!9HL1?KcVOfh&|fVC<6#ntf)df3FrE2=`;7zvA^zP#AQeF!mkqknHxgLb5~t zR|k9k@at+%Dxb~w^xq!w9}M#J-^b*){=4i)gX4ckSVt`nioY}$e;|r~#!lb=J{Qt| ztMEqgKNZRcpSEUvaDNWZ&*9Y(KKEySKKo|qZ{XX+H;jE+g=71q!e*ZV$!`}n`#dH5 zgz^^KClmicISBi#($(zqy`TE=<5iBEB=mpk+xq_%Klk#J1OE=;hvm2NdSkg zhsm*j_Uoy65uPQ#;d>>Y=pP$H$is{Iy*YlCgZpy)$q}FQ z(wzPne=VFd_&LcyoI9B6`i}t7@=DRQ_lrGDE*I{WzZ~$Ez}K|s=sSTwF5t3WtGP;k z9CVN{@ooLQB=Bu~uS=NrJ2~*do8^zOhS(Y&Y5ht3`MLOvZ>H~5`BS;Aau67K!~33Gbo=FxC{3ts zk*_};AMEJFQ+;`C{F~gZbArV&e4g-}2ya?abo*1b{+aORqMLtZ7DuND_sjS3kRJTo zgk%0=5&yBb_;cdjL4OM0XSr|B7lr+Tb;2DApAjasJb%n3zW!`Hez`E?RalNCuMPaE z3WIKv2fiNDIC`rN+@^ighM*gS;nRnqD?)to03H66AK%aSFkycHd21i+51?yr_Xn=f z7c;QWcT$ArHf ze8yL7(-QDV_I>61eS0?hT))=a@AwcO{wDcj{(RxR<&Tv9NcWHX zy{njHO7BrQXo@iH@7oS(oize~<+Z+jS^Kz6_barI@lkxdvHn)!SU-Iu=40QOPkv&4 zKK|GoKh4F@^YihSJO_fBDJzf1H*fO(StUa(KT{TDX)`TomfM)bCge!PCQhskE)RDQ-d=o`Y+ z*IOM@{&W1XxA^$BzM=hM@8Q}H`F~LSIR9q~TmDCiKT`g`beqrr;~~HK{9|A0Gp^s* zzC-cbC2#g;yxbsc<0V*A%plCz74vsQ{K6;v{2Qjn1kCtjcz?D3RCuf6K_2RhK3iY&e3JHH z^WjK*_P;X8my7xkvH#VktF@P&FZ%pXc3gcwBkXrf4fr)$FCxDx;F~|<_oCky@Xwy~ z`-^rzIpG&RJ)7S~;{VeYpZ>lc$}zZ+gVfWARdMb6 zvw8g49ezFA8uVlTF2$dUGSP9t9$)h?=@F(qd?ny-e9PPGvVeakO#56JF#1#ZWBuL2 zroT^o^zD{|NPo4i#{c+F{QX}FQ}j*kuP}a^eQ00AAFloV%YXXx4A;zQ4zDJwJ{3xBklWUmxuERpF)LYunEe?Sa0NdFb|M9*giHzw`6KDS>~K zFy%inVEE{Z`PGPj-JiVu&Mo=~^oMqNt$n{)`6oVM5c!#-YX%Tq`d9zn(RX^7+$mg^ zzbD|{zYXSpPB`WhpY|Kar~O%c(px55WD0}me-GrXiBJ9NmU>YAfd60V zA1VF6mrwm=vQupT4Z?d{f3F|i;MQMS206kW)PLroYoC+lxB7w4_-FjrO=?KaRNU_e zc`)tW@Q-x@+%w|c+2{p`KVN){zo69M?nmERs`IPz8~>{ZH6*E6XDbf$tT6ep{&)Fo zKYnOhcLdJlGd${>e*Dz3!O<_i;rVY4IN$%s-<&9a)DQhH3-WVi@8$B_dKvqt!m<6^ zgw6hpKah`|L5k{%k#oeX&m_2aObeB>q32=G((Zycv@T-3@N;yFK7Nr#2)H$zBHs z`+-^S7#>Og_)q)$1Knmink$^jcSFD*eO-gQe>m2&lLv(v|IP~OU4B-B+t1LpizE1B zS{iX8-Fx`E5N=enW%1Keqaxd2WMSAKLT8b#L_T zqZ;CWLzwn^Q^4?-$zKf^KKVEPBj+_Fnea)0|E(V1pSJ{j`!X-TIl|08hMO+%_1_)J zceL<>;$IN(x=TI(+z_Ag%#q*9^WbfMJ@@XwpTDpFK6`7xW8d!cbAG@-mcD1?KReV9 z_YYmd@%;n+xf0}8tZEqaeUwiNZxe4*;J@xNpC7`Y*2^25ZGP=xLi`^2t^X7MAz_RE zjN+%lHXbZ{kFU?86b4`OfebwO7ijuQfWl{dRvpe_oJ3{uHVxw?N;OF<>sn4b2S^d5C2IXJ6e-!rPE);GNemdZl`XX_MLSz=(hSEX?!6*@^O6H|K7&m8~uMz z`9{)z>nGHI)E@fVm1z-pAi_TpUZn7%!l2&?Z_xFF0Uz-x-(H`pICiq{U4DG{L%{Fc z)ZpwpI>>K7#gAXMAHDCVz5a{C1HCJxPeVrX+JKK#e9HeLCRNdSk{{6ZmjKb7!l|xp zA-(Skvpxw&u)FrrA%0vx^Mv=de&}DB2`NT3|+kfWy#C+lVv!T$7LMb$30r*fp9;tQpSH8N`KNu*9^&?Ko3OPH_P@wqy#JL7+x{2%qdal`Xpfe^ zk?cPb|CIms?W;#Rp8`q_;KQRuP^`nWZaX!{@&@?NhaJce^0<8 z%|Aoc&nm^;+xlUCX_tIFztFyIei>R z!b{{oI$*|E(zo$-+ppFCH8%GIKINl*$L+6AcyG&h#&7(1a!!=LPQ|zU?Tvlu4{`b{ zUqt$UZ~q^veqT)bL)9Plw)t(S@8``EKQ!0m(BJ#|Jy~JUD}`wvXE`LfKQ|2ee&Y(^ z7xVqZm)-2=x0j6e3a{6CwnN@$!u&lHpZYNVd5RBB4e{3tGqx-X@rUA~Xw9`hA+_SL|>1Ya@*>#Ha1Y@oB$%8-H)~lh;^(?~Bk+{ubrp zuX~a4^Y&TwBH~})R&wi$DT)JqN_Y$XU(PW44WB)|doumahnC!WZ$`wA_5XwT;F%FW)<3)5>)$WppDDlT|FZbtse%8-*(LXG zlerOoQe%~2^7DvzmY+3;mE8LLYeD`Eb9{O>AI@y|&j;QR_{T5y>nm#?tPgJzFWXB# z`dcL%>!-Y?|C0G7H$I;f^xY=BUVh8(g5#85VH^a0SXaX@?JOm!@G){w{`n5_s}yeX z+)r!}J}y0qlRvP-=>XP?#bX94d`{0_-l{6C*la_dpTpkG~B8uWdsmKCah)yG#u{ru$( zgUi=(t}ox&jXpm7RI*k+_-ew5@kh$vuX}v^viwp1jIWtj@4mm%D*v2-S%0<5Z}mld zcozQwVeDh&+j9Qk{Qp*%`uW9JeTd-e7NeGb_;(5$f2921^X5`Qd$9D$|3=|V4%(ae zndB_~JEf2QZTUw(Z8`qRh);RCgflsa z=k@pKYR~KGzsrPMV2Y5xPuC0}`u{ur&JXzdxA}VPdW{#dmEBKXcfD^9wm#f+UCHeq z+IX=@nD%l{(G@2_AM=gr8#vDE@AmBELSfp&YXYYHtK`oD?(0|kl7C#ldH(0_cwv5a z>kIR*zw7z@4N5DE(xbi&kJLU#;%~m+&!>xn{2fLm-lTC))DU8D~VF5$cbVdcGysOi*Oh3Sq|r0 z*jr$ApvRzB+3Pj1?zV&u{N}~S6!=Ko2RW<}Y0y@n zvHqgZ5+Pzjc5>R$IOv6NW?V<1b z?aM+krErAmXqvvCe3W~)ZG+2!@86>(ryL{$S^@l{pCEV z88@IQIsAa+Wv$7}UcztxhBHd7678&@u#V7|Y^Elq(b=dONohtlsxc|;$A6>g;oz}d zI*yDJ$T*c&uRr#tR@=3=a7QmYk6*)GYf|CFisx04dlNZj3S+?9boA7uJT)1sZ~FNE zM*L%4n``xj&erOU;`|DzJSi#YUTRXBOlpILo{3&2sV3!WQmiJU_%9Ty`qiW3uryuZ zeE!1^1W|yzv^n4I(&V@#P5bBfzjDj`j`?@ZzkOc+-0Ik>nDBiYPl{PFOU_eI$Qq7o z7+oCQa7M$)4c}`>3QdynTisP9Qx!5NZy@ye`EW`_ukY58Oj9b;TBo#5s}%OviJT3* zU%alzt(x;&Q zui0pDlH@8q6xF&f6|2hLaB;sjk(*ALNlVYh`6N z&@w?mi%P|@?pfV|`H%?RO(JZjM+{>v|s|uGD-ovRH z?lcRZH^w%`u6s+@mHJ9$QY1~t`vXSK=BG@4P6rUFGgp)OqvnsBMW$2$E{DMpWwN6_ z`55#GrmSJSYt*~ZE15oLg#Ys!6a8n6<;=HzWDhOY|8#_yLdZjd3&)R)Yv=$~pbi?S zG^ds3BPs_>tTa!oTr*KeYH3KNE)I1v;lo+aRgZ=z6^J}5jPf!9>-=QZIiK}E71{or z9QG4&xSx(YII?k0V@G34F%q87>t1%DXp|H>wHrmpAD%p77}9t_`S#dVLf< z(pJ~v>d|TTwJz_r-1(uLSBkxGoHI%RAv-tJ!iSUV%f;U)+@ttQlRLhahwlp`Z$M|GFZCgW2o}3Qh1N#$T#PO?+}jl zn?BB8jpfiklpN)V)3JP*JxyP}d=@7!M}CY)J()i**PF`^^)podR7__(c-Yxw3}Y|* zUQ~zt^W+Mfn;MRg8+f3p!J3wpBVWGZ?7Uq0>5{HgZj;KfIfqRja;qfME4M@WLqBnF zt$N|Q$yvU!L$CCaS67CBO>SEhzend8KPgNc9QLHVwl-*<)L)35ST!1#7y$)huF2l;%9?QCrEOkZq=4&|G2<4i76+nm!! zypAE#&8HLhH`|Oi{`M%{e0=I_D7n~v#D7xy zXe;@4x<%);^IcY4qVu_jlZ*35J(0h5MZxt%{fKst4RD)YpuEG`#oC|Qd2=q`|B*xw`98HwkTc7(IG#1*{JqoqOd_xpv7RA7j%;`Qq@WbJ*mb&4pWDiHm-dL!YHZcs`!VVTV|b`iS#ka)ifnvYtUU_;L zeUx`^)Fbq3Uho?>ebg`UE#JiJ5KiTWYNyCD|62PoZ2GoD=~BPjgFbY!?lC#)Db5f1 zh_T6G=Qw}Q3diJRf`fpe~z5b6%N8};s^&5rCP$e6se=$_4)T{P( z-S#fBVLw>KRms$Ov|pj04r@nUn}FJX*KV69Y_P__2v?GtSC={1d!-ig2=h9crcZQp zkhr5kcVN0dQ`Zy0a(n%?y=1rH?P`YY{W5!&wM|-inP2=~1Potblu=%yQg6hjfMCCm znI)a2&c@EBtg))IP06I51eT^XPHVcdv7tC7(QoAx7WP^*_41|$De7~_f69K^*SWo^ z;jX5JI|y;-Wzt?mQl-?VCDm!kz}71ZQ(fW%S5A58$^tp@c|bQg>eR2*Pb@1Z<&v_e zc-r8tN<~MKx;YQIP;c_3?jdTL6xyqN3+{0JpUyUPyGs>2*qA6UM6vnNc~MCh3zekd zH503@tsraToxIvbp4dE9F7>XQRtj=SITep~?(@4&yYTDBt{=Z{Y-wDn)aERDQgTxH zq_HQBZyMKB+TYb1^4R#6(ltZ;^=bc|9eC}*C;0q6HG}I>dRoK-BX*5x2)fE3_|!HU z#L_MrUY<7vTNg{o8SZ~lDLJx~yh0p)aBAHH0QhkeC zUu55hv%%Vq*HiW=KQ8a(DM@(&g=n6bG+$F_UbCjTu%NjxuemU}xiGrf?b)X;k1o~f zXJ;nWJ8*X=)i3CZQ-%iQNVQ5Uo)YBAre@iy|EMzGx(`3|3eFtmTD@9mofe}3TI^a- z(!F@GOBpMRc*bFSshRv)RUcJ-RQ1S8E?FyggPf>Y7;V!W(nm?Iag?&9kA|di9KKRj zVg3Uy`fa@E9i=p#s}>68Z&IB%rK)Q+HaS$DB3GyBHSe2izQLY#Dhd7TQtTtTT{zX% zzNpS~9U%vS=jdvfvv1pl7s3?XtN~(~uG<_^-&Y0V zZw>e^Vaj@o?+giN%h7#QEKe#t{4~Hn3a^m=zZ3@jMRN(d-WD)tg(}I~S)rVLm5TQ$ z!lJ7*tv#gc?;TQkQ~y0B`|UOSoe`h2DlvimHX6JrU zIG7^%Pv~lVFy%LlJau96%i7i4C9hZ3IO-Q(DWBONd|QM$`-(AWk(2gk+frXk0_JSn zrSfkb_A065+XB|RY{Uv$)Xn${`g^VNkq;33Bs$c5M z+Bat#PZpl)q;0^3$d6Q(P1wQub7dCrwwjug%mV-DuGu1V$ zhmu2;zfAaFLwwHmB0m=dJiXiZg^LshEzErTeox@PPlZuX@~wbx5SGbn?ThlN2(|K_ zbDqynBaKJ|?$_1uO5sO@pJ>pBh_hKUU2g%1;P>fjd@!p=!w+5H#F7aLgRlqoHhbhT z_M<*y`z?v&G2U|FR1P}*c>f-{_^d(N&sN9PcOs>4z5FWz{=nOO`p7`H_xSc{<$3y4 zk8gBby&Ft|*uO2{X>lD7Qs1MNx*8283u&>9IkGin(_+sDhjcyhn=BR?+ShlQyx6~htlmZLpY0%m@MUk;e| ziT*TT=10nJ^W)Y1{@jwgg8e=$yi6Fqmf!x{y}fn> z`A%WT_;-BVmq*>!(Zjd-{$%-Ib%$?X*NpP~4Z=Or_1T~gKEK^JKI?}biEi`aZvC)R zeryJDmSU^qm2F3jclq&1)#QlzYNvcQU%}rYZ2S{7zhSSZ8}uP!eX>GV)6ZG5v!ws+ zs%L1Y;zQ@F&LMDzt}*V7@cK`yz7+rVpr7>vzfCwx4tjK&bjYt}?x;xvODbP)kUv&< zrSSPdp0i=Wb~fz7K0hA(Fvv4sk{=r{!Sf=_cuLuf|5uG?;Md7P;AOfRrhmZS3RCo^ z&AvS2MtM9eQgxB`s!Wh#}hlt`cq%`SksWB2fpUp~AJ31my{6yl^8SMMBzaE0qXMoTE065+oq$NmT6{puBsjyRi@_H{?V$j_29`Rjwc-S2T$EAl#m z!%<#-sNXuTlB9+ONBs8c9{KhOc)Kw6AkPqZlddsl{b?Bev>ulb4YrHpOoL~ll-p~ zCeIM$uw8d8L21>V8EZ0DegP7%x-a4d47K*uit(NPY&{&wMzZ2 zRTxA&qHezc5arK4MjrjK{5IiO9;{c|JK}6q^i@1ezynGv#`7g>n6p^hCHui3&u@3Z zQv>F=Y2Ym27c1X)vc6laxHi9()xLU!HBC5zzg+n<{?&`Ty!Ds7Jp2`sH~t5;vGtV7 zb8)aIXTNH{uJ&86mExzu?+*OqwRmN`Izn+EaJQ~8J~P6c&ALPQ2XYW+v-U{W|9I%| z`Uo?gqJL}PbN1A7`R(kf{m=5_6Kx#&u5haB=R$rsi<7=^wj6{$u<0u=@$!0Qw4;&a zM>^X(JKN{yqfK7lCBkj;+PgNc63&EA4(Y9tzf%silo0K2E*=uT$|3T>BBgxN|e5UwIBK@<3EkF6QQD3b5 z|8@QsD*x2S=8`@{lsBJ$_-3EI$?@aIGS$+tK9OShc$ zmv097ukNM%d*9~U_rlQMz)Phs#_J-?d^%Z}F$2oKtLWU7{*{zKK)NdB# zFL|e5-+e3KYlX4r+<-Z|b+!C+ykquO@2nga|(!;Q{f-D(>hI|D{*@vlidc=p)PvxI4t3q4m$5@}CyQr@OE4 z=IgvYZNG@KSD#hfOFTQ7rL#17c3|y+vz}=`2Sojg@>>6;f5W%_%~`7Rgy}O7 znERC&Gv6DYsT-#ilGC!&5qMJ$vtBSh>qFAF`pBQnbj^*rf03?fPMgZFcdb1mKleZo z`+2mNiigRx+hiZ%a{|u4`#FC$={G;_+xKNb{-c}xyZhThd-{rSr+8lpe9qnm+u7Tk zMcO6&)4&HWiE#7X{{HI|B`<*eDQ|3l+K<_v@pzrEjo--YQS>1BS;8hyeRT_4eVzR= z-#*9_#Jde2)YbMoc()~8nYZU%Ku=h~!>Pp48@#C1U`1XkosP|z%{@J^6!S^XV z#!p80KfdqB0}Z2&z>}5V7<0d4_|bnKtREcf2gmw9{vUokvH0Ms(u#3=l-@fvI4@F8 zIzxUqOLva&={|eUdzWRu_^Ehri{$CAv3!ScuN-vg^?p1)B-oesd#1vz{bK)Z!e;;P zKR&p;;JCctxV+PJ^Ep}Zt$g6ea(G@;e$K)mZwJUhoW(+a8RwApUW8Z5KQUnD*FO2P z2tSm=n&N7F-d%+K-WTM-^CFD?n}kh2?`oN)`0o$)A-zu3PZr{XS4SB6P2$D!XGZBG zzdpim_`RQRdV)SM<7151NBFaU^y7u?r+{~eALEkr8|Lg(>~H%moSn*eV)lKra4P(i z;y|2j+M_FN1j=L1CZ)Z;G{|4B$t0DWwuK#mGx-dUZSZGGo7sXxQS ze^}V!W3O$(nH&UWY|k9hvj;6smI~7*AjU(+qImr55w`JU*8x61<3oPVnWFCjif`iq z_`V!|GQyu1KW@)p<~wWOVCvWKM`ro6Rb~Wxk$>`+$wA-&T{AgoDES_RXL1noar^$? z$Ui4NaekHwXL1nwx9ge#MCk9-HI|RlM_x;;nmlK9QkQK-V(YodE`R^BD3qVGVmB+i zG4PSc9oGdJRdTkT0B_1+`j7Enb*w*o zW>U!S+k}^k|AZX$L1FZ@IHY|fEo|H6*D}Tt`wgVM)kC-cfV|;HF4k)@Bs(?m!T01a zUkP}j__WsviUaMu zrkJFe$>__YZaep;m z*EtUP`>Rxb+ppv-w>DuLzuv90;gHub?dZvsetusUa9(~xkiRwX%kT8^*9;?nZ;=03 z;Li&3*9UxqHhNR}8$)?Gt8=xmJ?9x-t5oWd!53^%Rx_mz?Zix z=pVS+_lKuEI|0jNZV#Ry&f3F1w*@}-!IrUoXpd%}-`uKiI14`-^phWS$N53l^7CTl z|F6r-*?pAvaXDzD@_zhIKR(#~J$R|&#hCIMeo|+XrNYO`LFEU0|3A{h$7d~} z2H_>*8UOyn{8^dyeMjOy8S(S_e)|K>#|>KV$wAbdA@4^m_G1rIlLpn4bNyk z68>4(Kba+57JjE3^bX;%y7mA>Q~p+TZLP(_WXfN47O?z07KYd_yGd6Y&woA2zk9XY zarM2IM*psB+y6s;WhB4-FTTIn{PR2EHu293^#{H$!sm|h?+&;5hqJ|LUkA!Tv2VfSkNh@1gV#m)P_3^X6sC+2`QMw9Lq0>_{3iwVa|%e-jn4ZFymE>v5(=qPVi^# z*m?_0USmxAG(6J&597(hlDF}MvvRPFos|Q|o`(B`9}-?82j%&kt&=MJJeVTnpVigm zIcw@R;g6_IL7YvoP1oB4hTkc_@zK{KzUkX2`DMaq7xWQ)CjA&!#4~*4Yy5uC=YstB^L&4MW60mB!jH*+MZjNrt8Z_5?Ca6+_(LCnINPa9 zSL=_Q{lxx;J$34bCwD9L75=pGag!e&YoH- zya}cVeUIpx0YqT(lR4z$cgt__FO@#*K^Y+Q@6grwlrI&w@`2Y$-*EVmbzc5t#erzg z*f(y^*u&a0@{@&Q`7|fr5y{hkDX;Z!-i^IV*yan$%l%ZQFo^z0dCqgl+hb{D59Dvl zVQi5_@{i?kygs}A{XYM13i4p;E5^th{&}BoZ`(^g!fxSA-W>t6{wMvXJUi*U*0;Bd zqyyq?FUlXE?KL3WA_sA{R=cit*4Eu0_GdM13H$rs6W%HQ0|8V1MZ%dJM11N#j!%EE z_?*2(eZ^;QQMa-DL&7G{*n?B3&@Z4zjxiPvy~+O-msuWp7t2aW3O2LNnw-cEG6<| zXDRLYY(r8N9(%YxMBrt*8b%&{CO`Xgemv+Ik93kSUoigKeDSe+{d#HVSkI@wbjlm| z7wX&kOI|-`U-3N0&c3?v^O}z}g#B@p*N1#6ujPlcqLv8TSyABoBAl21Yoj!y}zFb;noK zKV;8^;fCXkuln)WzK~RY(C7cIV1L@r6Vji_LF8wau9p9QQ~U>oXCDMtXCA3MDf&Zs z7>}P;IBf!Ayqu>ieFi%5U;KLL&xd);SxfiG`&JL#SxuxDnoshN;tvSh{w(r4g=6_g zgiZeP?=~b)D?f)S4BGl{e!XYycaQL$3jc-UCJC7SW%wzb<+NJ7EzMp4{D}B5rac*^ zzqCp;?k~%QExnU}iQ|^fcSo3o30r^#PvIhx}29fAo+2 zS%jLF9C6munethEa+cLH;n3XN{S|_iAI?^S;S7ORG_H*GbxcP4E1=ByFy`87Fc z?aTfC#D_g}_IpTvvmfKhSf!T*{-v)hx$@BFAw+W5osvp!)PKX`uDD;%az_ipzWBac4nKh{TkG=1+n$)B|lhL2<< z`FC`Ad5d2-t>kQVl5|3c3uEs!4r%Evyk7p8Px{73zCVYz$v!dvv53!ECriXXRbdck zopcKy<)KS|sr(k7{jN6gD}m2`7x9k^_<$w;EQ6y1M!sAASiVcx#G5yf4gud2R(5~DXHrEjv~lo*4u_xzOCfeV;!EIoY<@Op|Rw`AP;^bhc|0& zVEjX6pKisq@?u}|8<%%ZRNk8}9b8^;TwZWo-k-nOm(TQ5AM11a54SZ?BX7 z`1$t#rT!P2pBr>G$t>mf6xj^=x^PL?`;=$s&%*S-hXUqoi&WUgmpwYmJOZNBT?tKAU_kE71#80_RAB(uL=5I z|5bnX)As{@vGPNmJ+fN5C=a8Vj%z6=En|~8W9cP8J@TW+WM{gv-(+!Wb;=W( z(S#;r%B9hLrP1q?(bZ&pnMR?$=l^}a$ln!LT+!Rx)01W6$Llbevfw3-PCMm8kvmQq%H+l<+@4n;r_4Lb^w}eq%2nmo$SLP8>m^-J zmy2kR?eXd^^@_<6!@RVcDF#%?q)@E-k19TWC>=h;@E>~VjXcDgA?L__vCFMyb*h}! zM~%t+)?@h4H-_f7HWBuIFX_I69PXn=^R}8MK8uYrCpFGY8m~AFDJKgnDi(QZ4cM3eDEH=7(biC@H*r?x$3CW zZvMbdY>~`nxkT@$-yz&rPyyvK;Z=Iy zV9d98TcnRRfunu!p1&Al@Bfdy^MTW>vT1C9!G3-h| z=Ces0H`9;w9!|c zPu+TWH1YbdYms+1>v=icN7!vUte+-fH|xzCp16iHK6bE8;GV35d!>%!5_cRoV^S5q z6uu;F2Sz^U;Lr9kZ`RjBxS#MGHm@UFYx;;cvu3vjF3V^AcI%VP^++S$_S(AZyK8J4 z=%<6t>qo?!U-LfzH?ytzUJ3WZk?)9SeU|y^ukmp9F;;r|a&uj4`&~2JnqIVnzRP}Q zxhHWf{6+l*@2=@1pVpuL-Rz&6Yizu-91*XF&sgzBsQ11i-c;+O5I$+ian){|j3%ey_tlkL}$p5^nH zWmw4Z!6Ke^!*D-3+o`y8jBU(pW zEB&U2-}SVgPguWg&FZ^Cqb(Ba( zc;P?d1xLK4#IsJKK8N9cxQ}gw^Ft~15pP{B-e$N5Tl<3Rn=50*)6P6ZKI|VQ@2>fc z^wx0PJVrjFd`*toUo4;Lxy^?o-h7UCbF9fWLcUhQ=21J(2mQ1NYqJ&hS;08BQud`% zQ-ssI)Z#f8E|4?Rt_*cH+!~=pqKjwLHqTjge~`E&hM8G4qR!)^{8IUu^V!vC&KT{f)M38>e5}X!~emJb{l^ z_Wm8=h$>WluWa%?)NLx;w3~SB!q?>H?Nl-09*%XhHP25rO}`gDHOC#c(i-ck&s4A! z{%xPyl<~70;!l|}W!#zVevXUJwl>2yN;~HopIBqbW9$asq)U0}tAjd!SI}P6S$*$5 zD(ssE9{x&bAE`Q9b*SpDrd_2=@d>n7@t@)`rFxz~?c}LK#}4<6YaF}Ak190$;&I93 zSV9wz9rpKIe(yih7^709Ky&t*VD-_elCE-+a#uVF@hm%eG;Yos9M8fVZBKmqFW+{~ zsN!XXZ3IUMOlLcd{3uvgDQ>K&(fDWf%h-ON`5^385^m4-H}R!z5MGq^{S;~j;ghny zzMktK`VHvcpY3Px{6k;Se`WtZRI+9>Gx}ISZ{f%sj>u+|kkLSPp@i3BxVZ?d6?>gO|Yl&?m=X(Qz&=sBsYzcI_MZ)yE+Xp_*x<|qEX_5k+whXZr@CVTTv z_*#t-^Xn-c`TZz*`Q+@+{8-k=k8FJhoBtLZ`8Peok)HO$aM#!n z$@TFrco2Rqn__upu#fUgr2hNiMY%lofAjMxHpTwmWPgo-s2^ls>WARao8An3mFew8 zU#2%1eWYi7Jp@O6dHznqzC3@;&!atmUBAuv8`%`sdmCUsu_ETppx;3_^!8`-6aCrs zLT8{~l-tYoKIg+%W>&wark_Rp(7WED^?x>-auhI^eP2cFPfPxuNgUBO|tV7yIyc2{(jG z;Zsy1?}V4Je_lnj8*Kf!DaJRy5#RjGf+Ih!|2=Ws!}H56zx7l0U*nhcHyz5dPrMmELut?kb*s3@&(?fFvHpZSmav%KcNEN>Hz@>>7)hcfI4p!LFaO4enHl{5N6h2^D+;~&AB4;N55Z;rH^627 zN8rf6>rdYg|Ab9Bp_$I_BdBA=`(>}sG5_UXuA@ES6O+1O|CvZQ`pEAjej`^ESt z57yZ9OTFm_|M;EUpBHTZwf>|3KAQeB8~d{U=fF|_=Q2>wfXnrGyWx#&iv4dp`!fCx zIO0G5%=9(&&&ii!ds?1oPxY!o|0;MUd}p>d|JLt~Y>MB1R6V|;l>YC^|8rKR_%VON z>xuE>dNPE523+c=6?)gBHb1Xw;{%bm(>H=&a~ACj&)6^Ny`S9#$NlVB>sz-ljri*A zFC~+uQND*S@ap6I{P0uL_;e*{DDnXNVAtEdAD*NVF~03p#_xl}-uQIMQ8xaAaKwK! z{ig@}vi+^kXn!kPZn7yyeL9ur*9oifd?DeoeHX#ezOIjLe#-T+y1epYo2MrYYX=L-UXNE_f~jgw(osg z>i=}3O1wX?yy5?ntB4D4$>W*V6UXDuWIpEom;EK$_tDh?}2eD`{>0gmg1_mex}@_y3(6ZW=$6aDW>-}K7#t?x+R_+7R5_5NpnE8|<9-zUEP zrHo(p-<$7D-v>C&D;eQaefd1i{6%|D0(Qe^QU^-?`@B4z<1xO;tr{;ac&z#}y|Vr5 z?bnAs%J2QJ_Hq9^*7eBzME<@1T>;1a@9tC5`4#gS>i1*nTiBO+&)@Lp_-T7~vMG+2 zz3j{Jb8*4GKcSzx^PE;ZUt8=K3CP7fIGfF$+k#4b|G+jvOf#*-^Jx{KIG-M(a%RA$ zQ3;MW5ojiAtX!AYqrZYQm4z>)FSGweTZN4$|3`{{XV#w#oBra=>aFim@A)12Fa9dk z{}+?HMxD>$xb3qs>+9_Lk z@gLwplj)zF{mI$}f0_rzLomZ&C9a3QlF)N9k2N2PCK%Pb{^n}t%dDBzbpL(*oWTvR$l*F*`M>FI^jDqJHOEKPtWXpC+q95 z%tt*X%|DF#_$WLF-7r3sryrB@%h#AnPKD`mjhAG8Iebfz-|g@ae0tVff2PM{z)I@# zHD5k8<(JDwCGuS22fH4->Afx2kL$5-hA++Mi|es3AiN~=k6@+%HeQ$S$6Qa{vPb`u z?Qg-Z$8LE|L#gxsj`(GMOiwP;FWK_6%vUatzsJ5G_LyS+`q}SO9_lar4Y1IH{gK;< zN|wR12t|9V_jzBb*MI1bdM@+FsQcSe^oBf0{RZE50_)8lOn=VxKLdRS%ru!wZ2#GW z%JyFcm;HAW++tJgzqW7m-?8Ekqc7v{f?I5g@prS2_^vPC1$)jZ`diMv%#ZQIpZ1f< zd)Qw=<@8eiXBioBefJjn_a(%98+Ac-RC!N$?W>>%Q*h}%&zaQ|L19peCpiP{-=|M^7rso_CL+` z{|({F~U-t6U zf4*sAi0j3B{>1fBd(YR6Y>KQt`1*^}___5EwOpH7sAwAdjhWS3zEZ!S&_98NL+r0U zQ&L9Q^k3e;O@$-9nbeopuj6z1_3!v!`mgMZ^d0|7z3m(MyZ6m${Mo@V#r3OA|JaIH zp9a0@&CL92I;QvX3r~Y*Wc^Rz zKEe-VuCI^%`6a3RmlggOV;lbOMsIz-A?sW3O7qP>mU$7}LjPJeMV^VSD>?kbv^Vw-=JD)1t5W-I%KS9+3~7!3$owGs9mL$4`B%f- zAEIw>PyRapGR6Nw)*l5o(I1-iC&GI%y*uk&kJ`GqH$`vAlM1e{PyH?Qjy3vFzWuT^ zKlon{O8i6E{(V!zYP{&IHJ*#7p|tap9kS)>(w@DJ1aXH}lC(O(Pu(%&+eTc%3%Z+{Nn`XkyG z%@Il6824kYw*?;$JAOVb>%BkR47W1>!%x!q<$0&Pi3_vm*EtpOz1Ish|If&*eGeS= z-Y?l-%KIhzQ`|54{bMoQVpF{T8e|{$UymmKQtVr7it(4RkN5}tBK6<NKi{#-BF`?c=u-}JX*U#34B zj`WRheFqzVUM;@&T4ns@wfOeGGX6I7W%?^?=})Z1Zx->V|0?yzpXKr41@JEP18j=< z>n{AezOVH?i(`uIv6}sT6{YomcM>l3^RW&6JMh*>|YXZl<4SLSb9k^YWD()xsd#xX_iXJ7KF8gH+$ z-sZW)QCwfy_THa96YTv~@b%JWSTku9U#qr<%9^?P{Pf6=@9*a-K{BK|%`IQ|HgU!GFKl1PT)Sd8Ca(u@( z$IF(^5c#1RFQsp{DlN}(Pe|)K$9Ol^derl|@k6P#*nb-vWewcUclo$~*aUAve@s$0cEDb%V!Zv}*|Z<}mu3CUu>JLt%$~oi zNpGNFmN**a$2~u_w_}E~4jy9v8f=uWz?<3oonE;Yeu({?%oiM-uD4Mh>v4o_Bb%ar zF1|zm-j^}ImHdA$sT*>WaPShs_Mh8{qx}7OseF%1Sbe`2BYtB#WfyVX7{7qupnEjp07sKgZyg^x(vPRQ91ta zpVRkwOAj2+Thx2KD)oyC{rApH{qyqN{?+4DFKByLu7l3vF>F zK9#LYSs%1LeaDsWgLlJU5D@hb7WyUc;{3x`)ZgRbRoHFJ{+Hd5)>}O_^HVrcClmgY z%3FF~(nUD>qtEZA!cpH||Mk~mQ@nl;v%fHCw|CM?<^ea9@ z`QW%elZVM)$*w*0+t~Z9e&Uz+TQlLfzw-Q92;1h0_xFxJaen@<#9vXwzxCL(Uhg1z zR2*NtUbQMpJXGTbwxJ&@zSpPF>(A?b$+HU{YduEKhr`$u-zPPTebl$lub0CYszmg^ zo_$L|?7yq~$(7zJi0k6&W zQ@5q}IlO^Bt$br3ov%w1HeP!>c_KV9^C{S`BOKqaUC(|F9P8n~3jO`~U!MJKf**vR zo%y@4-v_5>zWkoFp8wagf7iRPz9T*Lbg@RM=MpxmKV@gi?-O(UMQ|_SLo)w0tiO^c zjenRscBS>1AB&A5cd`#Y6*ez#Q;Ep^?1P{4%k(T}MUH)UWBQi2On(v_>AN1b`bgjPu&s}NHpTee?92E~ zIO6a3>$HCOA^G}Y`K{{~HcAV<*Mk_p-w7{-U#k-N8oY~rOF+I44-)_A?9cTFr*nKp zrRBL_+xY7GzbW&3;n~=q&!)JZtmS`c!s>Z<7vZx07Qs<}yML43m*E($$lh-RpZ4^0 z|Mt41uHF~&5aFlf^epc@xRv#??G^mTi0}AOraytS%k(Wzq-Xj&3pV}9a2dZ*i$A}x zH@^L=#isnB@$X_VnTem5RNgr6;9kOI{+Gk8tT%o07i{{rUzvYSp?%`ppTgewI|}|o z^Z$p&xBQm3EWddz%fGD1ulcusX`}q1>Hpu3|Ho+mdjI`>`u`uA{{QXxW3^vX!3O4?7xQyRZi|_ZJGQQt`f{*G<>(#UDYbCFH zQsNangH;yrJZ}d3&sCIuPv!X%&og}AO)u;R8mpqm9O13<~N3j^D_y7GIQ%-@s z-;eKKm%+m@KYOWU5MC`OY^kW&cly zHxPbf=9j}hFML(z=ka`Ki10y~SDu&N*D^8l&9LJ~lvn!qj5e`()U*njH$w4Qip z_~ZU#FX6*8|5<;k|KK}epGU0Edfz9rn{fO+(D%vgfv?W`RhOjl#`mXxfES~imh}hm zL&6n=Z^-QXWi}IjPiFm3AidK6L^%9Ebw2rn|0di2!-b^R_VC{?zI}OGkDtffl}vbJ z;;7#f;dy-5KL{Vn0(c@E&w~!RKIQ-Rq;8xD_Y>Zj`9<&=!sYXr>G*18{otF^^9deP zRpRdxb`rWYVfDPz^2GB_pMU!NH`wQC3$QJpr%l3FJWuoQ>#O08?BBny4-t;`biDBS zV2l?(eqZXZpX3>#axgy}9Krsqj>L{1#&0ET_sf_7T7SzKqBHb$Z{;>+>H7eBZ|q<&F1!$jhm#VB?!!yl>;=o74LczIw2! zrT2w2Yw^3N+cJI=yNLhR&!qPy%sJH9jmDdAN$3AXnbkYihJM#q##iOpl*}7zufraF zoWEa!?}x2JMcz}e@8?*^@yjYL<1jp*@Y6D@Z((2R{eBwy4>QrP2U{*1mF)l8RKH)v zM)7?T_UH0_5}V-A|MuQ%oS*9~`O{fGGb+)l#lGkg6T zCR|?s?7!vp&+#v=fBt=-1)ssD`1b+pD*is;`-vWc52no&pT|3X#Q8AR?>`(*%KoQ) z%gBiR&;Aho@0=f`@j1rp*TMGhlPhb+ZP@Ye_{{3p7JA?RFcm%~>wVvb?eVzG=l(E_ z_aA9b2YmlU7wKQirab@OQh)z)@LlPBYcW1AfZHkilahJkKQaAj4!T!|9^O&#H}4o< z)nByd58(!BosjLVfBRcm|HE+9|I#DctG~xg&H0n(ke}eK$EWq}bN6dJ;aTbZ6wyED z!rO>j>Q}&__wQfxNU!|+*(^ApzSZxU>iT7ceuVd9*giAaloh9@^}l-)R`1u?ML7D4 zqjf|yNTaH`01I~ygT_js?fJ;di!7K9e)?WG2Y6KKP7v=T(b8f!M=aP_KN;2?=0B& zamXLb_2K(CcEc}ZQ~qC%@B2U$Zu=|oeISzvjnAxpMWL5F(S`ka>u7H{>QCksp!@J( zjhEHf{#C|bQ{#0t_Ixhw%kjwcH`nsBwZ=PYyr9P1vhU-6Lyb2V?E6UU+f&#S`?uT@ zkm`LW_%HR{aI4a$_kntSzbNx*^xqNKb5_ycinfRCy`R`c`V*77;rmIfzc~Nw|MutT z-*P|xN?u;@9~!^0F^#WYlPiG@m%OmXp0A`ruY& z&G<<9W)m*Ux3$I{MR_axI@jzUZG6YL_#N6{H3Fw|iNmk*7sjnuHCp$1wHh953@>jC zuWSr=HkxRe5*v54el2`5n=+j=aoJ9Qj^(s!R| zZ&K$!`C!2Lcw-#@uWuZAJ)h$m{O5V?^^Lacz5RXc^^Fb!XEg@T;&YtYCKeS^$Zvj= zVKngTIPzQ{!=lg}RZ=5-JGv_4GL z&2lLvM>zD6vg;Fv&Ulu;WZR+SdOG1}>#rVupT%zKaV7QIO&+2iH^YuIdpXvT*ZVH@ z;m38Do7lM7e>T_Bx4)G6v0s!Ner)Hd_=xm}VZ&~&-@G0!#8z zx4y!!{pGjiM?VqIay^=QFYO~g)=!yF`$5TL)z?^lw%6*zb=EgiruA%dtRMV#6Si!> zt6VE<>6^bQ4)N?yW0kXs&dqv=axKmAjBERhRqyH|KbBJ;ZlxdFQ5(-F$Bltn{!FK= zFZ17z?Ho4Ofsg#Gsr85Ot8eq?`!bq@-AsQHe%26n+jCCghvV9qruAXI%k;O`csFbs zZq|F`$9y(9=4QWJUyC=E->KQYte<}Jy^!N>eXPGeR(*7%bMw6^`qhuy@*+RBk9q7+ zN4d;T$#GtUKFSpwGbOXK>t;jC&bd-!)6d z^jT;TzHNX0RY~dqsb(eZ zb0i&4pZk;9$ZmPuV#N1z+OxgAvz>>C?X3y>w+ghBqB zioAe*$s;wMh>ub~ui$Pv#~}7E<(P6F+)wy|%-6z};k-h>yQZH&V~74DG)O;w9-r;+ zIVkZpI!CVH7G)88pVcZqrQ!zJpCTY?${b__Fee=5zj{N?o{PBR;=g#q5L%q)#BmPDjV+HZ!@6fKpXa3Ez z@?&@z_GB{&_JeRUih*T*tSY{cAG2E~LJGs1k7<>2>Vmdw`vx1vl9g*NO8k z@}7j%I&Q|lF>`$##w)r~d>(ICvLE>!A{712b?L3|DM{U!H#POY*JXRT7hUioD%bMA zB-^`g+c4pmXZs=ayWse4_W&J}BJ8uSxb3qix1Z~jZ7SGx&ey=#vMH`R?)~L^5{|iU zT^G7|j%fYNgrj~e?_9VnZ$BL6^*sQy;B(vfKzt8?=j%Iic`V;UaFp+Q9zf1T7yZR` z#fRYob9~oT>%qQkj~Q^}&-|>#zRb@$IP&ueB9Fk)U-f7CN`ExTKK{&q>CgO!Ki9F| z2K%f^v3_Q=kNR<)^DiPOVxBjlFh;tdXy-WS7La+aJIQ)-)Zn|U)<@BC?dg|}- zJDDTV&%pljteSYwB6aMFk0P;d!q$o6dj*WYA*bg${2egU zDJyYZOR8ja9WmFnwEsl;?a%7V{%m>5_Lv4oe_n*rwCA%aw#Op&WqS<3Q&b{vjKj%WStfy?@P5RUqD-Rv%0 zUBWTNb&^eQO6D8SOZ_+UclLEVh_MaiR?2k*~=#SRl8aVRn^=&O2^=JNU&$7Ie;Ih24 zi};pzAzYSs9sK*0cV^Asyqdq&g+H&C=I6j%zjkiVwp1_3d!kC@D=X6Z;W?>%57wV`sHiu+(EC7I{kv5v@N9O$e{6q`G#)IWVXZGtt4eI& z<%G)ir3j<#JK=fhJMDM!`RMp(dCKu`7CfBm*YVHtUCE~G|FP76;(Qz{f5wmgroDYL z?9JawxXhpDNAy4a&46!YQ@md@e(7%zF8$fxN`JS&;m`D@*YrJw-t_w6GQB~#Om7&D z^vsX-9r_bLp8Cr4e81+p*xJ7;*RSb!QC=VxN#Fh!{*B*)%lOuB#P|N$ z_KEvv`?u%QiEPTnRL*Ah!LgWrLDll*;Pze?TM(w^SaLN+SVeixyz zm+vpw`=3hU>axjoDuSsu-w>*`K}H)eaUN2XU^kMtGSqwUX1_v4?UUKFoa-phnu zo?Y;{XQc6?T&LRhi}cj%ztnFl^grhZdK2(BCHF7$J5=bsU)v1-6`SJuI>P=+0kJ%j zh#%$gdMl;Kr1S0M%vPpt+syoF^a}|;fjG)n;8pCq3N{@40}9iP{$Dgk%->@6 zW&Q@>$loKq$Ebe2ZGJBGmm_m~e&U0vJ-?gtqkabdOMMFtz2DcGaC~1gf9AK$pYbDq z-rv|>aew3WZZ;g(yZK+He#pylIemEn;b7NM_ICw~h@-q4-i!Y8xjjD)_j5efCGY-9 zs_%^&Bj>Q$AA?G#$|Am zaNG~ME_ENgIM_{|_bg-kIh*41u$Am1 zzu!DG{Vp%gUwH(5$@kaT{u27-e36!Ewn|*L*!Fl^ZjUdWl=$k*+u_yd?;?)!AMhsj z-_H8Zlhg08{xZR6iTd?-^PR+RWxc-}o(SKO`IervuGi(6U;O;E4jIFGB^P9#l6gKnmvB$! zx4?shkIL-2zC(oh8dAxV`ci)SNmKdQi&%GyeLPRx0B=V(CD*UKm$9nkPRbtaI^G*AWY)ajqdhJ6mPb+v4>CJ+dqw zdki1Qvst%nHTyZa|GgKz_Agb5Tt#`+^EI{-c~`;u>xIMLEAcl7|LFmIAo^R#KKxyd zel2``&j0O~rge>u));XeUCXzlBF@W2sef}Bti*M6&Ckrtr@w{qgtBv4tHgD6eLn6v zq5Qt<+J0*w{q8yZ{~T`ce<;`QsaLa(JATchQeXG>dFa*IZptIAd;7R|rFjV}bA3#M zTf~dM`#9ro(=7y3`XKjkOd z=Pua(7U%aacoE#KGsJb2?BCNX;_o2vGQx*tekb-ss=j_u@b7AIaa8?C&4*`8bxp*@ZvXiFN!tGhaWn?Hzj&+$9C_J@DNHRms= zFZgH^L%v4;S_6~KQSQcf$%FU{9&29AWMW4D_zoA#1@MoOyN1`ht%O^dz20pj9M`)m zxY*8xUzO8$T~h1!71`c(Fz3V8sq$yo_mUr`(^YcZx%6McrzC7>Z~cY6>tv1)|Exkk zllY<6o~4sU*>yHo(3WxjeDqgb@6k7N{F`CN9?xk-oCQ0V`E^Y_5GwC+*#hbw8!Vd~?ysa|xj)!so<2s~E;aG?CHtZJ@|4G??H~nc6{6F&fvi}DepW&D53|aK&X&viVCT#p* zWxAd=3-){regpcQ@H4Xhv<+#zi~D8g^*LU651{zGVKL#(gw?#iwKe^kLhrh-o*y@7 zd)Iv(B>eHrC&NwB|8eG*!ZYFT6?*F?^sjw(T1V76Qv99pX7()sS&4os_HArR{ddIv zPWu*gQui=&a44w|3k^5sG{^U1hd*d%|-#0!}OGe{sKL<}?@AYUNT;8vkpST`PKZJSQ z@Q2tGuSZKst5s2&x48_yBeV7I^&`r2)|=D1wIglGzq$M{h{2fZb= zzsHmw23qaUsEGS`^ya5G^LltHb#rn~Pi}92m@TjUr7Z6ZILh1gPS#1q-}>y&bynBF zU&!n_tGB?bGOyyo-XeTR!Sf!0x773{+kRc>%l2=<(f-!w09@ARd^qaQ`dnD>U%fY- z|DI=x_p@HhrdO2iXPboMe)ca|XLAtV#HM@>_WW2|5%ZPrNb3lnnECavb=53*q{faH zO*TdQt?Ziu;yR~I_Jg^-+7sGKs zxAouYpYXG?{R8kc!WVH&kv*S+UB`1RIv(R!;`g^zaP;@P#*MGWn{VX!vTa-PRO%x5 zO7stLKl;<`&vhusC9i6^*u0L$b>NeJy;QsfU39EV1 zO~PgWSqZn;lw%${zItB%%Y=>d;9>k9oYTMA{)6wsv;Iofm9)MXCMt2Aq~(NOlG$}C zml1wSk^kLrE9)(f_rJk&v7d}C#uwu^;WGYwxW%Rz-}ApEAm+#Nl=;zLnV%+H`da|E z*cAQQe_8^fKgZ_qXZ{=y%KWw9(%%s5F=Z3+t&h0gH4YxX&-2~?>i%rcF7jX2-&D9P z?*QClQ>?$8>|1P#_2>BXzq9`SnEmCydV4&Y^W%5*XZxf5Ir`%tyS%Ow*N1=mjN&?Q z_LsQdc-OPjx;kf6TE=O(pYTnY|LMfEj?=A~|JeC^H2rxIX}5Cv_U9c1+n-m%(Vy3! zlhy@!Ngm&p!n4sY$?@e|YTS=)soz$x{)`{~dd^Mbzhjy*8}=RHwy`2_W?!=R3&BS$ zN%ebOWu5NVY>(-gy?#w1d{}1JeK!5LUdq$)7yKR`25SFczMg*;UI94uEhrh>=zUkf4!3W~HPyOs;-KV2h zj<4>wKEpLv(cb&Buy@@j?+;?#r&W~S^cGguJlFkFTDRv(hol33A9cK+lJ%~$-AjDS zpqz#MLiiU?O?>g6vu+$bA;-S~<}3W@x?o>hMSr5ckK>qf5PH|SxFuoZ#LS<}e94zn ze|bV~k9WeJ-$!OvZ{3vo2L4L@L^$*p-bw$${)VTe1h#)Ftt&Gjv-&Rb7W%8<2jMA& zeiHsd|4i1kv43{v^2mD%em>ldE>}mj?#%-DNh$gN#8-Yb^}l1Xek`6y{8B%W`;b>3oIi*MKtMR&E z%WHd--_IArQQq5jU`+aF_J`SZ#G3fIT4#vshM8aMT#>EM;LZP*&cA+@h`fvZ^;bl_{3NY& z`25Vzf!7m`=Zi0axkNknypoIIKH|r^SK6rG0O~C-kIs zqmIh{e7?{m{@XLpJ3FllV;@koU%`Op$`mN!XZwR(my` zKP$8Au-uP6&KK8NF~6s0{hk-6bxrtLN+qW6`Cq0#2afdB&#LMB3;mR9+8a&yXwp)w(Z}2>(-N*X?K$-ap&B&WGpY_{>kdmd=CBDtMsAT9kVGd&yoJgJ-dhOAB60 z9Vk2B)m~jcFHG3D5`7upbzkO?cGQRcVGwR*`$zKUx-|ORl=EL_{n>uu@4EM~t{C<# zPg#lUxS0O)5;o5KGuAzUJx3JtzYLE2Zzujt%Jx7m-<5yeUY%e0a$L1XH}Rr9zOg5L zpZsj)jqla)9>T%4->Smi{I*~>eJ5Wa=5=aeF=D|u6mw-kKY zA?fz(6?A;P2(_{>^+GW6U`EakaI5js4whj%#df)<-X! z;SB ztP?luWjB6Hw*KOrA&BHJ1XQh|Ce?DlK_CCb+GDwsB9xD1t@g=|#=JJ$?Wf%%`6b@N z-g2n%iLX3-Ec{j}ROxd8IpCnE2kWyehwB@Z{QIsC5q?{>`f>hx>DPW&a?EFMlFzBM zN6crJUB@8&4iL|FvtI1K%WJHkQt$lwl5Mw=AFW^WTgG!9f63-ocC%lG-_Dxd)Ecj> zarlYy?Llun1&7~Q$0Ls0PGx>Nh_{(|>)AXHtcPyG+SuQf(mwnyujS{_mU}cGIlt!F z^CbK(tQ{Y$vFSF6<7RuWgUzp73*MRa=6Px1cYxz%IsVZ6d!0RkElZP%?`G@aN7+4m zY3|`hz6S%tQ~8qAGmh|*e`bm~8~dJ(Z0t{FJ7paE!`R0Cb5{@B$&bb9(c$^w@u51> zUVS=PcUA+3Ei}$hHGa1lO5=#37F%OUWmm;(PhZ~;;^?WWvQ$y2(%7HT3 zpO^RP_?^wPKRfRq(>yKdyYqgkZk?}heV>xkm`p~!E=Ib}-yeXF%8APM!(ivn`~AUZ zGKxIEVCTnlas0+go8~`xKlS*`8z-mvNAdSE=i4tpXP%V(;MMH8q*vnnzBPoVBy1em zOnvMv`G)FGVf)w%GhfHef(4D=-=2WJ2Rk4gT{&h{UMhtNm)kE8=w zKi_3jK8=1a`=90;7uO5$c|u2}<%9AL!_Cajzva;A{M&aQm-v}E{zqZ!;^fTQTb=_m zYcH4fGYb3ro}S{*;h184%NOw<%=(S_#J2u-p*KxMzJ-0sGsu6i^M~#yFEM|}`8i$O z!@aS+ieAkpYKO1N_jTIOL|57m!livb9QIdqrS{@yLY3?~J>C1a5;i`}4bvjRyuP#& z^|og#VWl4?9Qysv;Ecrf@5r;F|96C)cm+`BU=h8gH)g{WYFI{v*Egi)NvJ9mkZn<9`o(rYTh-d+wLqU$F7F!4ZEV z&pCI)i`bMA;@g*Qt|-mFX%de5>ES_)^>bdEl>G{rX&{wYzWIcre6s#a_WN|O>jP|sZ^-@c zk@%737dk%9CB1Td?1!hYDJOA$tY^O{r|10bCh1>U@GkVhre}SZCJ!WU2j2tzs5+N z`!7lT?ej_9aK4r0-55-LJxI7Lk9jZ4V_z%F(*sY*@%7&#T>7_uO8<-D(*H8J^nVLn z`nSEq|0eveh7To8rGCAtv-W$jEA6+y-!(F#eaU~>zi<85+4{8o%KEkbeisiE`lAL@ z{~o=*U68)B?ak#`jb8hBKJIwE5RUP>{fczGzL#T)yoPvslR*6$qS<@CJ& zm)OoTf2`wp+@EN_9S(c-UD$_S zwm$`X^I(3OY>L0h+D6L7f1BF(hJ@ApUfUz) z_g->Uvfq-+TdzOa=b=$QkLLO{AOB_k>iuW1rXPYM|MpM*@6$i+>({U;>g^w8|6K`( z-tofpW4v(w^&tG+T)+KaN%j4NqQ2Fa^=*Elz6Y>h4>z;D{eJ^omTv@({OjNLDgE0% zrT=Yk>Hi_P^xq(@(!b%-zinIk_xvmUFRuBwKb8LNPo@90aQNR$=a>fbXQ)cNpP5Xk zyuT^g`!DU|{!7NiZ{_P2ru(TzTjjo*Pu(Q=o`lu)*!JF-S^E*gg}vn|?JZB(TmR;- zte+-a)=w8)*1z9>%KB-+W&QNRQ9tJpcQ#w3=X>AR!ckx9Hx&9S(cAuau_>P$m;Qe8 zvV@Iqqn}Fn#hKsA^Yebf*N~<%{nzRH&)akPeeb;KJEke7Z@5f<0lYD(tM|?i!IA!% zk5BWNj?Vs^Uv2)MlkL@ezK4G8#Bq(Cg|FIn3`QM(u-_Gp( z?_1!Q|J?=KUSG_5{d<0e|8vkg9^9Gr&M#jIM|%2S443{rAH)B}#2&w}@F z=L3;*I6?i6LpLHpphVAV6#Ll4`=9KX)Tz9PlHJ;$%J z={JcR>A!1snm;xEpyW`tzDoA*cO^T2qvZ7kJ3q7wS1(QOs=u$b2uFTh$}W5A2^AeK+|Hee1lW|Ih(hkNp7p(tcCT zehVD-&QCS{a(-$z9OY5Jqo!X~)BF5qpZIXZpT+q;75n`;rno+Y{o&S%crJimb_`OS zPww-SI}?_nNb>H5j&rse!!_Gg^`u*Vej^VygB1#qcfThm+C&|h^f;|1(*=#&ks z(s=xqgpC=GOW)TfWma$bOMM4<3;ipwr%R8H7q*}ESGG?d{L<{t`Nx|Gk5FdC`P9Zg zJz+J!eJfnfZDUUS&`YWVA0o%i~{aEv_^%wKGum5zikL%%kev*Dq`udby;{tdt z;r`6(9ZyRA!kT_%O+Q@d$ND{+Z4=k)FFcse*B@|9aX$1U^82HNk2oKC#ebyn`)#@W z2mB)Sm-}*j=LbJT_!XI*zifGW3ikRC?0jIKH+N_KAH#ol&HswRzw=)`f2Za2w)5rB z@rzlhS;XIR9tzW0xknIKS1egG>GTn!X3$rQZ98i2tn_X?{}NUq0s9Kh@8~KJ>ru{pWqBrui9hzSZwPPke5gpLsHQR=odod<*_sE6vY{`_Ipvmgdui z{;(IO@%gGMHqX!C7U8JxvGgM~{RrhN<2znN{9|6yR^1;xg=5Mfyp(;^kNU~zLVxUw znJ-!B<()NlY>W6`xHz?EN4~zw{n(dm`S@=B55KA^Vqy@K^GV8c!#F zskgtEysO|tU)@$+Ur(gZDlddR7x-CvB@e;72*r99rtkR{{+@A3`u*+Gi~L!h(4WhV zOAq!>D(a^NM|~_o-w!{v&@V3ZpFzJ0KC#emFZAYbIb7zi7moDJ-)^|f-6&R=*4m{jc~#KsS7J)_>$pZPoX)3-F;>zRm2T zeCGc_xXi!fY2?@POepxv_>=!dXNdl1z@>l3pVI##xb(jiF8$kIgAZr^@KpTXQ+a26 zfLnxlEK!N?4cGP_%BYNAna1x+6ISmH_k4bP!5a$x(c9Aaz-7CVcT-=3gsw^0P`{FJ zsUNB7XVvs;@fGpkNBkA&;IJP??~fMm*+1Do(){j&-`ZBq_mAtv4MS;svW^w?y@W&m*lXLW z@4s>W*nhgQEBlY*L-Zf@3v2qJntokPzp2nq z_LpGuBS(JpZ~K=1x1ulo?}5Yr#^GdtB*&Dh{fJ-Md%qI)pSU^Ax1Ua#6?wMynY~|f zJZn{2#*I~ce}Uug{jP`M?*!V^h9k*$fn4af*q&Mq_Y5l@O zle&73@NUALne|5#jr#NV>wD0hp7qZE^jwSc*ZJVn;J6<&{zACLrpVjbw*+MQ@#7mC z@V_OGcg}zHe&9n%-SGRz9Kvya`~9OEeqz>t@Srq*^VrPl=M{SAv+jb=$a?3qTE3ey z|0};opGo+6ncu=<3!aM~$-ES{zw>9SNuuPgM9AKI4V$0Rt$kF6Jvug)))QK{t6d5N#ee9lGV ztMTmWq;8ywej>WNGylUSX+EZHsvLCb`09Qo&hI|h{`8)tZmhz71^l|qPvvCT1piIu zf4GqOlx+`xzt#VP=t}<-X>|P1f2-!-{#g3oQu9At_}~9^te1fQV`Y*zZRFnruIGd76KAVdgu~ zuV#FBQ|9XyF`p9qPiFoTcn$h^o_!Z=UN&a^NpK7Omco8L=T>RI9S-}CzdiN$P1%0l z+n8@g_*t2^qaP;xxyFq*6_l^k_rs7sCrE-`S5#{8sGkFLUw$`(e06c}_Sa>Gj`5F#P}Y7S2!XpK@T*FT0Wc z0?*6WhbQ04`A7U?v;KMTWccSfKbOOu?fjl?^27e8)%?$e!~YpKrTNc4&(G`M2zQg7 zb*NnMS;i;)|FFqT`66c%xdFVnf_v63h`86)DkKg1${0!pv zu_-@oPk_tudMX^_wewy3so!$G>l`@rpTyrzn6E{Z z*uU+cW&gHq%KqP5(_3Gqez2yuK0<%ted+xAGJQ&EcBlDYUm(xQ$#8@4>nXD`8}|Mr zem|t%`>j$xSm?iSVSBZ9)ALgFhU{7ZB@fkjS&diJcvX$PUOcbxKa+E*?ZqVt-f zcz-Y%U8|x-!}-NCINz?P&nmJLTY{ZWJOs!6liY`|lD84JB7Y^*vltKDpX8(!q|j+mjBuI5;NF_LjS^r-S#T-PR{J zDe;7F=IDQlMf5v@gN;G|cMJ|r7#uuga4G+*e!Fy>-&POo;9bTO4{Wp_*uMXPjW++c zckrd)!1i$m+Ddd75Rc~KW3Z})219ct&OaR>w2*B(^GW+^^EVgP*m;?D zAvfoR4%c{HjUyfXmht*)Y&xahd8Ly`!_9fPF~3%J-mB?!6K=9O&ot86&HV2Uj=4Fn zcxIkY8-B|7r|*0r^J&rR$Ibbv4g59{h~MdyLfd`YqdsVpL^`dXIE0Pc!SB&%C_mXH8AN zx#o9!jZMe4>1SL2qKE6PmHkA!_Sbl@#=|upsqxMlGbD{ZD<+66NjpBT9Sv<94c$2! z`ub?--qFyPMngX%WS#LBr0UZT$5QKlR7M5~j*Mbk%iuUaltDj+{aEM6`lg?iR6|*H z6%q#G*-wbNuvdAbobU zj8zq->F3nW>N6Lvy52OaPky7p#nm<(sPflnd>Iex;nQ=GK0;-;6MlSV->oiRgN@=` z>WQ%T+lq6wn}knESiM`l2RQ=MorhqLDb8({H&&N;)=-9b!J+qEfG&N zj>p_>^XHvGnZFru1j@F09juAjG) zS+ja)=J&yxMtPh&IuYK;rqt&m%QHDXJ;!&hm+4=U+4QXcNYDD51ef(``ca>sBl0fz zmFaf6@hw>YCuH_~w|>j|qe@2WPy3~X{Uf!X{ubB#4Ho{?udeCW6#C`oP`B_^Y|81> zcZ>aifE-QcEZ^%Y;@LO$=J)6MTfh~t_0ym0OMioK_;W65C%X4@OwqsRUihE&sx*Gm ztt-*q^uqpP^iBBPm6m7SuSw%kjDNDeg7xR$Lc*W%{Vo{sT?>FF9sOIjZ2ver`U`(XR`dN}&GbGJ5Y*ycxicji|1@2QCVlAmpaBR`+Tem1^+eylv2{`tG| z`w%CC>Dh-B=h6Kw!%?=Cq0|~ zOQ9sV*??SgI*N^WG?}iU7%HIc zviCU?1t}e;OSA z<)MPlJtLj(ad4_wxt=U>#HgwMAmQG`;DhU#92% zZlw3grJR$*AK{qt71;WYwR*fCwS0F}+H`+o`^5c?_cNt`?`QhZm-jQv;iw<|S-#Sr z{Wbjg?&W^$|0<{F{o-8XXTJJ6u5a+cY>M_B)L&`e4u`$(l;F*5@2J>hrai0;Io)o#MNlA0n^i-0x-ReO{@2|48PV!arwI zeE0KWzN7q2dt&|hx4P1wf7=UxpZS}Vx4+8v@&HkTE&pz~EWde=@>`yTa9N(k@RXE% z!*|IK!QWw1^k;u8{aL@^?`-;yU5F)zEAjd}pU~L}t9L^$EZFqdz-9Vt;Yfe)bJOpF zf1Klg@V0dRekPaK``P=^#r>?@O!J%KoiJQ01c z?^btw(5E5~)%X^Um-+^EUvjHp$InjeV?6WvX!~7~{d@jSgX8>F-(S<)7env(XZywZ zt^JL*IL-&-uY}uk{rdfC6+DGa zQ9l)3sh2+MY~-sKoE9a|sP+d&ke&@RdnjtzD)*zW-jr z_w~InOa4|e2wR^Y%k1-yCLHDY(!J^YKR&1DcxiieuvJ3lEN?SWX^|}AwosfQedUTF| z0T-63gso%c8h91^yDH-Q^JCIn^e<+95j;ZPqW^vfd&iUYS$`XB`yE%<>pSeX5#Rp! z`K*7{A?df-Cl>bW3VZbk6H|F^B93wn z+a|V+0&)}j2iZq_*DA1o9G%<$n91qgNpbyl?zexNj`W=y?stp#>I`u%c|YUPvl2Gc zJ3fZ~dh~yZ%zI(4PanpoqWuig4}0};=xvWC+eS8J37g|f zq&H)BntOXRJ{9%0U#Wix4!!o%u?^OKFC6yux#+$deHJ#}6Da0qI@?A8k<|xlZ+|K6 zcNBW<)rb9J{+{M|@q`2TKumuH`@2qngXJJ4fzYb z?DvCU?R{R{tgKV~wFUbw+w!+6x4$d>miM%rfBoG;xb(Lk4u2Q?IsF-b)`{Y~T&8la zzcOK!-)V3&v+4QUoo8g$|6anS{|SYE{cVCve_n6GpYa#e%IkOO~Xmca^mB%fcVw;Mj4O))*kpE5nUOwap= zGCloAdiw8$!~d=NgJ1s`J`nS>n0@5OciDS>#=Go&7yTMI-bMes+qhn0ALrwEcnA7( zsRLyP?DZt>57ZCRKBeB@@|OB0We>gf4;5_w=HoZ==Xh;-qkPu)FkF^@O`$iw`ZE5u zLT~+8pHV*tGZ$wF{X&i@_c1v25`IF$#-Tq*=jXu%o;8$e5Yb`i7#`&&2S=`6|A-J^n`(4=k?(W&d z_ntv{%&!w4p0MG&>^(nE$?Ut{wS987_g(Z`2sg9d{Oy6u^g4_5TsvYRw)bWGI$NIQ z=puinHwS-_o@+-m;qDxN6MC;dG51FOEc#RE7ao!3(!Y{8irhoE5 z{gryh=g?R7JYNdF2xndRKRG4WSi=wXO+U_e_45k7ysTjDhYNexR#*i`{c10Vf7co? zy%Wi^;#vdVtNcYS|6edye<^%YhuTKtYp~~QSH6Gz4ea@GSmtM5n%)h3e4!sG^!n3( z>2Dic`dbf|{u;zD{p~9B%eeS>j)&g4$Cl@w z$~w($p9_B_^H};$>Mr#5zZuv@|MOkjb703j#ks5Y&$m~UxUXR6`fGnl);qV~{0|g7 zzu>kdsek`__W#MjGX5leLCC;t3{ikLgg4e?KIi=3dwN@YY)^{&IZO=Kyx!g_maX)+-U!H9*{_I|f zb89^xc#Knth;MrL!)1Eg;WE8;e1-kr-NIaC`19B(ve%>F zr{9{^x`^xb8LvyfosaXwx%D%NH=R5x*W8ruZ#yW1;=3HJzp(e+iMu%-YeW0|dJ_7H zl{L>I{=TizB;1qv51m_Ye8;~xWPi@JxBuOc*>}-zBfKlK@1i#x`SJUQ=V!^*Pq6V9 zQPwj45FC2r+n&L%+6EAxDIAr^Jq1tA{D!Rm#y}eHmnQS-U6Zy~_&Wvr3Al{wuiRbm z7ydPkx2B;S0uQo}`#E`8jqT5&KjwS1H*LF!V~YLHxgf2I5)T!u{d9C;FMIx#JXB-H z>r%h9#t+um{u1_6$ECS~kHbbe8=i~)xe2TL^~rE~zi!`*{^Tk{b?W@!Cv+Hts zCciYj+c=)bJss9Q#$)@p{UiGO8R+|ndq(!>^Rd}*JRf^GdWOixtFnFp?;hQPaNq8=3^F<4Qt zqCq`DR2qq*at$i#iDKpDqGF3m4cddHm8UNdm3rQN-J%tQj6w&-CG-;cHP_}fIES5{mysrfzs zm4eN)RR_?A{SWS2)(Y-O_Le8xJGO`Yaen+ChvQkC@5jICf1i)?yRgU8+Y2`7Ii5!R z@69Ri&W-Ww+=sIE3){8TUcDT8c^~mJTVKJ(Kh}ybhyJyXEAK8HsQ!JI?oq-QR`&Oi z_HV7MegEV;$6M`J!P%ZufC>9C?8oSz3v2vqujp&)<7tTy3|L?K-+RzCPqwxt{m3YVW&>9Sa{-`IGQ| z!W%2^t?WLe$g9X-@CUwBe&6*PE%!DaE!XR(SN8mB8TP^N`*Hcb^3+SEMzm&Dq3*hkg zT6i&hAKF-Pt+n}iMMHeQq}a#!^vCcxy0=ul<#GS-CGI8umlu__myzBeYpsW|y{i8H zb?tRd?+|Ol?Q4?6G=8Xtc-J;$@~Z+bftpZDrgf8XIdHF~Z5(f0D?JB(ib}+_-PTv^k2mr|!0|KYi+>+p4-fNE z)LWmScP;fYzF*g9e|>uTbAJkduOYtWe|zp(7bz%FQ@_bl-*EUqRoA`Ioo8P#f!gpI+e_yQj z^41oce(3*bPhZoQqJKHQTE0kMcB~3^?eGBcFRK3Kxrtp%ybO-{gl27V;xD7Oy`z6` zgqOfEo@(#;K*ZPobU4ye@A+EjU8`(*-I^cuBT0YxpnlH?#J3aOnsvQkxA~6Po$iphSQGzDZ9Zw=rUg<91`Ek9g>k4NOHt(({b=_p<9k9C4yUsB4ffl>&FvpK{ zyL{hGetIn)Zt+NqM_WAB;_((ox;?(n`5l6%k`F(wA70YZFNe*4=-0zbU_axm*Nk+! z@Yq#nHuaeOMY>($X%qEkJ~9v2bV9$nrMDfj{jL@tYH_4%`Evf-C^NHVD1dZF*`0jIP==JH|`^B2S{X>0(S9pB^;qSIw zx%u1e`OT!}uOY-6+=$%#C2$pqtYRB;3U7xu`+X@uvnKWgd_`r~#5#svP}w!H@>*;Z z*Tg#J&a8UZ#10a^tf-qcu?yh~tA5#Ra*U2k$&IXn$Ek_s1)DXNqlDug)Em)zOpMob#T`mSN}9CS}j-+ORp627Uj_pA;Qj$_OZ z>64q_mE>8O1n*=!tNQbv)N#14viIm7QO`$ljfv-kcdz;{KDk`qk8A9%LD+}>(;6e* zb8GLouA%Zi+oSM`#HYwhu<=(=A36RuIO0!xN-57@*8E#PM46~B*R*=PzI*6Ne;0hP zruTH}Yb)tLuj;iw0*Af4F2x@py*1c=y~cNq??S@I$&>N|^!AnpILwt;F+(WFt z!*KW?K`+NW#cPRw627dSv^>bh!r!ASo8BqDiu8ORn&r8n=3kzX*!QQ&ALOH`U&1!q zXa2RWwl^?KijVx3ug>ll{P(%6Zh^ z*7klhyd3?1uI+JG@5?-d-aIMVA7z{E9gjlqnv9ijtjW;d-lRWkX-WUdQyX{98kCg; z^ZvdHj{0za-UR3JTi$5TN8s-W{NpqEgV?n zzWehU_|tq8$Ai^uuWN|09DgH(KU>)~2|rN2D5 z#<%<@2?ynka#&zsX|J&8xHC_ARTdUqR z@cRhI{`fcV0PuH7)w^bF865d@&B+M-Nj{2eO2!DsniA{N^mBa>Hjz!<@NYt`$T)F zxBjz!1{`|*yRT&b6k)=@^)nyN^)nB?j*nu0>#@!KZ2?R(He&iq2<7xGU!-sQ&Vg@j ztjiie+auc7_S^|aeB0Cd$n7~TwWs!@sl3|nhO_;tWdA=>e#@K7zYxylAA)oF7sI*y z%i+ks?Xv=o^1G(&2>g$H6!YWpFSkb*j`rTeWQFHbe}SFy=kQ$k4{S8VHEj#vpB8NT z-+DNwzX6W)UqM2)f6T%AzSS-qK z&1{3s-zc2(w-vsCk79az+2-{2!I8hq-d@g6;+mb~kL8c?XWA#r9N1&|PFZks;Yj}z zA20S)Ya{!&lyk5C%Dd1nqU>RB{9}oYe;m&7JG52A_k48@zT$jU-q>Q#*F*35@d9{H zP2V+lhvA9O_Tc|AOAl6j9{ujgH&-&}4%k?(^&#Ly;e~)mk|0QtLzk1s{>qnAa z|2yF9-|-~;yXJ2Q&TIbMU!#0Ky}IryzzS9wcf>;Etu`EmRkhok=e{WA}a-#;D?M&MidC?424IeJ-Hlk|4JQ>@SbmHM}Sx8f()?cmbb1d=%e5Y<+*TA?gWUNqD5j*WUUH`)!lUJz@h@ z?;1t>13x1g@%_El|D~08-mBcB6VKc99zXjZKWiHC9>IQm#rWy_)+}qpch0#BNBgPY zmh`^=*YPRrfBJxu{?H{DCQVvUBc(_>b#A*7qnJ^}YOw z<$W(R`A%_;-)qvnhRPg2m(eHcTYKv-+wW@G@6PsAyuPMYf4>deKcan?!}jm2cmK+I z`|iJ|-=6gU@+|HlJLAs&YFiE9KgKinm)UUMpX`73F-7}4{%LRivi&F=_UbK9)*ngw zhtZklz>Xn``;T?EM?ievuljFOXG)u0lc;`8ia!EJ{JYYde&}7}V*KawQQW^5vW@+_ zy+41Pj=mfHZ`@65jy7*h{SHFb ziQ<~VV{FH3dpzW^WlhQ#8!gu<(Qm*%hv`OM0UvX-6aKt((v{ zYYegP7Im}cZ)aldHe7}|){b?Tel+1+Bt$O3@FUQ~1iZAE*_V0-Q zyniX<`v5k|z2Gg>&jSl~9t?YJ`TWYu;X(E{#|%ZD!~T`oHA|VfjpsDxHlPW1jnzi{ z#2Tx2{h}P-pWJxoI_l5MJ>2dSifh0|$mRvgnK$ep8Sl{*I0e$S*(HKd(0Y{IaJo1#QBu__X#wye>Zw;LvQ?T zaKyi>_u1N?Cs; znkeVb;vT2jt2w`hqyHM;wv70)@1F?PpUdrC1p}vqcY4ku3x!EWdxqi zNAaHLWo+|3&qv{Ym5A}x=lCb!i0_&alRCmjam|Twv%Uvs{i2qBT}!{QrMG@^{DVn9 za^{py55Bqf566dP)Suremrv#%e|T@fhPNj6_sbDD|9%<7SM1-$-vCGaQPS)1|4ViM z^?i!=_pOz`&&`gG|MP2l%^GXM=T!C{9m^N>>peP~;VY`%{BKD4{|Wwf!)vR4-hIpa zzt&g&=A1JAJg2hnUz|tyV&W)`Kejyqk^7SW56vv^Z+l-+cdmOV@25r|zu(o*r2JXG z8{5$T&%FQ9_UqO3jK7@po>AHSuYhy@x2OD?|9? znVmn*-0eG^H?_Er@gUo;qOF53T+AAep!q_BUyq_XF~#|d{UtDjGK zvVN5OhTijCk2i5X`!M|5|7O?tv))wR*Jqn3&x75++-H<`!KU~AhKhb2{zLx<=-0#M zSvdile)NC+?<*?{lolm_s^V_gDT5-b?>^==}=2X2bsZ;)0!J zySYaY{_1_o7p~cuhQFbzcg=?VJAQ98@4sv5S0ue_MBU$?SmV3K)B2C}E;?A=*T`k` zMr6w$?D*fsUmpJtqwlZw>N(_`rnf(a-h0*uv5oQmpZ;s<{}sOWoyvwmqyzYzaf z@A-9(zo@0RJwxv^Hw@S2Y@WHX488{+W!aS_e;W%nyo>mmPqg?j<;(h2)K%tb^snIi zUtQi0G_(5m9{l-)gS`iT0eqiY-(RZsalHHa3(Fdo!5Uv)M>zAA#LYdW z9w8j*c~5>XvG?RV9>qQRuY7H>kMzGde0qBFDE5)QJeJt>=cV)q-cat5jr6@o-}HjL zM}HWOd-T6r?IZm+yrSGQ9O=np*k?YT*!1m>QU1Q`%RTJzd-s{Qay-L6&ZpI{g0tTK zlJz4kz4f2<8(R8}N&mGE@%}29X@f@YKgb$r`p+vW{}}x|IF3i^S0{b%!`vedM}KXv z@olsFAEyMJUiI($#kzzaPMs*ee{2ccNKd_Wnf1dh{lb>s`pWT#T6&KsS>J8xwa@x? z`Z<3iTr?vC923_{Q7|!LheY1XZOTVS1-_g?VZ0Yy4^!r=- z(U$&TOTVq9cYn?KYo~v*rQh3%KaIM|@kd+w1FiVuEqy!v?Ja#f{jrulr*HdN|GE8^ z!_j`~m$dY&TKeIZ-u*Afw>`4|T}gl6^UC!F+eF#Q#UZa(#P47Ao==7T0`$w+-^_!e zz2kk@%l_64)_ywsTiEaX95>OzKQ7TbuEDT;alYUhjE(Rks@^pQ#*O1sdyU0&Sd*}U z{Kfg6_MRVxz5e#X+28i6w~iLqbn2#_WkJ5AvC6b}MyNBj1aF~)Q{VaAN0zap`SzCA zb+yvqme^EzYEU#KH^Qr z_Sed}zeXnY|F0TMnMNjJ-umC>Cug$zZ`J(dq@R!N{D~@qRpQ1N(BK7Scc|ZLR{h=? zquF2Xjpjjol!rDZ^>6tm{SB+;tLD$_JA*Y;Z2o8edhY$mf8&!3uO6ht3>8STSv=MfJyaRBamvt=c zs~)sp-Lm(*A=`T%5cd3xYK{?Ezc=Z}2oLeOy!!WgiKFBmK1%ytA~VRGzZ0KS?H>j& zBK(@l>OD?n{Tl4E-n@l=0rs2Wm)83D7$>w#NSE6Y8hHRe_=XAnuwdus7neCahVw?w z$Nm_hm^b`k<@?q6>U)GkZ+w3zM||zohrK+LyafB~cCt9}?DnU^BiN5Lsq;IGPP>fo ztNBimZJ*5R5;ynR!dwn-^0Ol4=VSOA#?N&% zKeFiu58;0&%ydK}SHrsqy{p=rp8>)-KXc)npH;smKXb4jDegO_Z+qtSSHd~{Rd7!K zFr3r3eIxzv;O`Lr_oVvS-pY^t*E}lk<^*PxEstbqs`vWNX2OiG zjd)*}d5QdZU)WT5R@FE6rNKG=OgP71--^E>#rNG1Gw^j~^(QY#d?EdJKJ1vFJdORq z@QQ{Qx3C`}9P!m}NP7F{Avo&a`s1hJME}+PF!>38|Jp0{W1msHZ_@lVhauz`#}NmzUvXT(Vp%50IeU>kNw;FwLPPLeYe_l^zMU-?^2u3_Oisi z#IDQP21oj?%h?OxKpQA+*547n&;Cxfcp7Pi{!gD%+UE&6Lw<(?>=w39X^8#-j}gAC z@=@&f5q@H2+(SGiahGT!U{cNvjKga(8qQv;`yCB_vJmx4D0UOx9 zx}n0RAMCr^+}}S?^}ZW!0X$seZ-wm(>#N>(#Vv*3QrUN1I?wyU%3r2o24R0wDQn?= zIIjbn0q1pK)8XS&iv4RJRgO<%^b_R-@lEfKD_g%?;Hcko7MA0AJd4tGJ)`JjUC;fl z>vX#KvCfpWG!9WZykemdj~8XES|9?1>FA>XkkZqLD@@#{nJoYE+EB7bsGy0S3Hs{03b%xlVhT+_w zmch}Vo=rm%rSqG7r??JmAKO?5=DUgJpw;FYjdelSkU!J^kxInz+Pd1)5dG+PivClSQBjYJ z3BBX5@vl^gT!3@?%PrO3`}8~HXBHpj^Y1IiuRo(6l;iI$sE`8;0zb3^2x`dUhOd&(&)| zyx)j@9B=h6XaAd$|E>5}zp?svoucV6Of_=h=S%Zx7ZjwQ0?Ur!kLdGe*JF7U-A~`V?UxYEiYd;Vt?)u+EcJ|1_AZ9iQ@V7Mz(Q& z?YqD>!(UK|_%5(fw%@DeZ=ZiZ27d?8b6V5LvntyM6w7;rZ7#p(8^M-u37pF}+G2li zW&NBMFK@BOtFX5{y^lEB)BVTx&i!`*9R1h)u59IZOJei84-Wsbzg2=igmMG?6h4ak zm*a6?<>~M-!n2CHsh?GZbA61#;ZOfv?1QgIw-Wv`A4R?6Yv^Uu%be@W{7t1kB7fG; z3F<5A$KNjl_{B{lj%Qs$F`n7K=EJ)iZ5c1Ezde=h4;u*Q{vbzx@b}Lc+(#Z2fBzg} z`^m~4-)9hx}}s{eO=h^IP{iR|G9qb?@?a$)_>M}Zl3k~TKfG-zvA{%AHT$>@;2D^_*p~TUk)E49M@lN zftMwJ4&bRgF{-6Erf+PQ~8(U1gO~g@LH#UcD^k;r9 zHT`RkO2l;__NQ+)#CkZ`_GGzGBe%la35`^~p70o-*dO&b&L{l+H|#C{v-v2l>srS4 z(uVl{-sQgW%WC=5FT{7~H(pSl4fwcfuYOI^8{g}bIsOQowb{UzGp zcO%Mxlv;k=G#JN(>g-;cljg!8+O21q~Nb@Z~0Wu80MaZKhRkM_sksPX^w z52;`3{|U9e)gSA-Q-9Sq?jxpc`>VaYE%A?uzv%7^al}#NvBXo^`G+X``Bi@j@pqm> z|EcMDpRIKr_uaToa6KIT%XNY4$ZwDD6xU&{hi@&|tlMyZd0}POb zh&W2~E+RPF?x$Dp@=+=q`c=?>}#|3}D^;yMqn zC*NMMSyyrZj`*(I=#u_m)yw0FeKxxN#eGV#JagDadDL%%vwmyRdtc5mxW`A4-G6%x z6<*%rEiHEc5BuvDm1oEHkw@iqPn+BsX8R#*ly}0**xt7xt}RvjpHnA_?*F5`2X}^^Q-W*T4A<|K8^~pLkDfVl&@Q`PLDBab@3iv5WBQlKxcE8-FSO za{N&^$3Fy9Dyc|#0*8EtX<|pdY`WuF${V&ARd{uSfN-)|`W;g)JIFThvkoh_b^zpUThVxL`~^&493I+xI& z{huZ`zpuVi)4vbgCHxnOmnGJIFC6xAhq?+j{()pK+kV;KoEE$9hTi>i3GsV;l+W@2 zvvq9UCzQi*Kj9Y?Y}oxHbGOB_Tdc2aZ+{Cm{k;Eget3D8&o66wu4{2To?F>s%O77GYpRrw+C ze!_oQk1q@1o$%kKH6JvxD;8%tvwE$Z?LZv2J7o_H+9=On%g{el*+Xz|7tTmRX==Lf-S z@i(6MwI83n_}k+<#q-HQ zIL;@1Hw7l0dlz*_9#8z-mzQ?|Jf-So?K3+*XSV$^JKkiT-D2~T_48WXYq9+|+Yh#Q zQHz(icwLJ}TWtT${tvbIL}KqdpACE2L-D?Hj~A~f*zobh-iO|y|DBcej`v~jedzK% zs^0s~SHjc(JM8!~j=op*FX!NI|8XBs-Va+JoYpk*M{t+WPV%Ju9JW90t*pKMC)>{< zZni&|?B{IhYmRpxsqrs8THfXHF2+dZ|B3t@z)#MP=Vv)T`_M=J&CfCNlJj#M{r|}i zm4N)Z`nm4^I=w%C9(I5KN{QaA18{$Mcx`XjIoMyKKfBIhe@lNX>Hh)!JopEElv!)b zv+ggd{?soe9D4KP{vG>Q@Au1nfp#F9d%Mdyn^Tu6o() z@4^2F?|@^xmglj{24DR(?gJ;T`;6j!;bUyW|6SdO?syn_?mNS#58szi{Vg+zbSC6MBOI@1clw&+&SNLO{x^Y1dQnUoY5eo+sBT9lmGAo} zJ@x$qSH6GXK6QImr|^|^dsgRZjsC0-M*NT7H{rK<=kLNs|Dd`pXX!(j&qnvvYIRNJ z4^@62ypZtCm3P5Q2|uB-&&J+NcxKJ@U!mUwM;rIuz1))%_29F!x1oHE@n^c_P049don( zVA4CsFaWQrjp#k5tKbnniq{aWuYC=bds4;-$2}>|5iB6@*VXt79?TpA%&Ai&`X7VC zzy9{a;m`E6A1UU|vtYeOG2xH=&qL>au6Rv;4%=%hzn;vGz+75t>RB1 zab2S=`BxwL_gQy`PK7lnYEY0{tKKOZ-e{!DBp$mvVAaiiuYvgVw>;D z8iV7WtVPe`_)K|!Sna(h$zw>=pZ92a4meiz@|G5J8Zn{QpXWf~ZzKI>2I+l_kK&x* ze73hXRPJfC{XbaQIla|{qdz;Rw+a3vX(;wb`*-vo_n#$j-hZZHoA;jqIQ+T)S)N%s zL)!a?_oN)<`+QG|`TIwW5ufF3df%@3G5&fu`oH((TT~*)hl@V00Ze;onS**_ zqb>1I5zg_C!4vWEH-zsGRD179nN2v~lQI+DQ}y3pUh3-}XOu6TLtL8l*53#m^>@ZK zWjs5-+Ivrd<@pI8-^NF=em#aq{W>Q)pYN~cJH__tvd!%?7moJ1 zvR8i3zq#5wz7C_${bv~*{YQT*;q1@02!F=6|K|9cQ~bZ?;>9RwJ(GP#kO& zdFRJgDq{bz|3!aMzY5O!HA!#zx582Wo31LyuZ^{Q>ix}`^=shJ|HeB@d+p@7r}!*i z%YUzixYwTcxBR*NO@B|-dykg==ckpAqm+4MKqJO?f6ehvp^5nFM_T%oaOkc78QACg zp9x3(uVP?vd^3;AI(R$Vy$w-!l|yfP&BuRkuO1xj?KNcU=dCsV^(3?$|Bp`oa(dqL zvQ1*|=pZ7q`gx6O8=6@jR+vDB4c9i*< zxChGo47Tz!H|6KTon?QC{LAdp6Xn@DQtpYkN6nx2fUHL!cMwDL2`SF`vi-cxUX z_-sSWJ;KKcM|r$Q)$t|nQI%IFzH(Q&2f$;t@=|z=@JB0OHH-2Q=2B84Kf5>OhZ%+% zc@y@>(S5nv%kx^ism06ayJ2s6ZQm&GUDfA&^wGW^&z8V(JhOhr;Al_V>j+G?8*w}u zB>fnVZuw9de}Bk#it(2c&hdxgi2ozniz+?s9-9GpkCBlx2&i|TP#kZ!v5oQ8d${;N zF^BCvT)W|X57&P9Ha^N@@OP5!LmFaysBE86{{CyFe!pI@xo4?IIPO{c{H>*b1$z(D z2K4r6#e3xX313>U$-KI5W#cb^bNrQX#Mj?}7TZ6v-o6y<_-OlHO&rDcox?WozdbnG zSNj!k*vp#|+n$@@XiwR(DD!w?+xGT$-dxc(qONg8O_2BGJ4*N$_ z{vPp{)bpM8vumII)bcEsht>36RC!iqpUr7ruBd#?=ga$$<9)to-B_N@cuCUxdnojO zkNpT7fd`T9E)C9*?T7JKjvA{ zej9nq_PgM0zaI|!b5551;mIX>M;;>onGd)4XyUutKL+uY`*#oCQ~kStSf1$LuVwPv z{QhR`AKsI*9(}$i$M%o*u)WkrdtFM{{q6VoC}+HY`eggryEoW5_*;{k^MhFh8#eu5 zpM`1vzq;yumeCmD)rt2e*52_q+n<25JykftKC5%J{jK_wnRc4sxADVaKKkpbe(arP z&i`2DZ^J9-FCS0rJwm~*VL49U?5}$7IhZ;1&hroTtKh6()6%;JAnOk$z1RGA;Ja7- z`z-FmkHHb&^mBP-$J-t@ivE|u;a~mHq?bKD_8M!})?8ikH>dL1ubk4HKiyDy2p%W= zp2}aorpzIpTg%hL$KPr3;nU*7IsORsAMro?YMxC7Ut9hE9qc`2Yb*cjhj~^R@i$cd z))wZ>3CEnk+04N)@#0mt*hw@w9sU^jUnz;W%F~{evm} z8?fI+{$hOfS#|c+?@cQSI)}W9;AwNnaLh4Z`}rx&^_zdL8f&z*eE0v(*txo&bmZKPW%Isf^S(lE z`X(KDU;kN}NK+^1UNv5fFkI^-sxroNSh{Tc`S?EH@fLS@UQE_^>+@s6eqKwzq{XXS zyt&1@T70O*WUF~b#b&ne6p(-6#L4UFud40y)BABf39j9_Iq}~NcN=T&WqKgzrr5^$ z=fmOM^rw$t)5uJIPs81cuBn$-RMvhI;cP#j@jlzjVc)*K>U_XT(jTe*T$8(u@O6Br z$m`h#`%H;laDJx4Zuni*{?|QI;+zMQUu^f+^7+gW$EO+iP`qBa16^D%G`~yvepR*i z_n!I5zxOu4@q2IC?DG4NTL&A_-$KIS@9}fWwg2;KgZO)H1btt%_xGIbF{?yxp7F7m zw8NkF8{lle5f1yMPbl+CFQLwrH^a->zNYfW;5G0oDqEf%a4yeIILhO@&i2CjU1$5? z{I0V@@K5g0_^j< zTj#@Q;b$5r2~*@q*& zX3ai)+M0bh=J%Y>8iZp$%Qe#T;4Aqk>U(Un-u!00^_}(RC-lxYt%7gmqqqibCEMs9 z&NuCZqdvVpcL0v-bMDX9ckIvh2kS4lm+3`&IX|=-{x)$G?YFYc_S@jF_n9E3_g||0 z`{7;iZG05xOKkr=4VC$)al+x>{xFrek$=Y%&*!2)T=~c{er>Ap^*4ub`15*S5B^Ej zJHL9A@F+eM=U2zsUMC>dPY+$x&xaOc4~IYfJKhF2*AwCJzZ?5`lUW1JcZ%~j{(g({ zI{sRpG5*@0hT-T>)~Ed=*XIZv_31Mgj>Au$${)mc!_FtIAD>xRe=Fed=X|r}iT-GP zZiRDwZiAyf?GIyc^au015Z5`sBst;V{LY1Qe(irbziZ&gug{2Zf6mW{SODkz&VX}% z*TFfz>*1VV+cNTNer*4opTU$L%RdBXe>B;IKg)X(j`CU`UTewzH^ABdMmWmrGb?t& z%kiO@-XS=rcNmWRAA3a^fB&SIH~Yg(!h0&)zw{OT%kpi3bNZujq_2KcOTRzq&Cg*t z=Vu&_{HQDhmC{dM6;@6SnZHGCl-MSJ^ewzvO;eV4{O4qtL^vET6Va(+%W8u8tnGYR!q z{s;6k2*>Zw--g})2CH6s!(smt^wZ&oC;ft?KYO$s-yfg!OOn2aei=MJ>FtlRGg#aoR#mL1`A=4Wmr zFNbFmzM;nVnHBvUL*G*M^4!G6Uvhkya6$Lx`^Ia_w zUp|%C>%EJy&GQ)p@P})B%V&R$@_4=1@_n=Fz24g+FZp`!8g%)3?`k;O%j>=B<9hGC zf0yfT@Mb>BrF@3?mw{?yot&i{PB!VR#R56!W_Zj{M$L{Ozsy_U|13V2bbc z_yOwrCB=QSM$+?#7gqNA{SZ8_@;oj~Sf3B0Pb<%=JOvxYHDk-z#+tDTgr!i;B8)OJ&Cp<;#`34RLN)nV$iT=+E{Gf0yqrYZA_={^k8x2A_K` z-hBi=y+rTGj<1j{TCio(tmBO&u9MWzSH7dX zd+8i}D(d}l(`$%x;UAWF%e5K}Ykve?wx6H$#qQae`m>qsg5SzF(*k`5b(dZS1d?zz498@$e{Y{yEKWANiNvpEIv(vB%%gUpCGf3F`K~)!!<3C4A4yuEBFW`DJC-$T|KvhAFObSEj0gn2$z7Aj?JcW~&Vfgl1|8w9~@EdCU z*TWuvhb!yf>-W9N#@`F)_{ZQJ-)j@6#ZTjl{+!zmfAUs*2V35Ka4zr3q}Sf#LDiZS8Pbe!cp?{+PO2LlLj5rQ|q4FB+S5lr`q@kSg zIOaFlzCb`Of*nh)Y^d`Hp*DI^v1ZTZ<5qj@eISfCv z+WU-#arkkSJs%t)9Or}j8>Bw7Kj$yQ-+8NeHxltDpq@B;t=EEPZ`SE;m5uZJkJwF>J z9Oq}=KjC;1_fP2WAe{Yq{*nD1hqJ#9^^^V0hQpu!cTiu!1OJurjrd=}M)6%@qikOy zAiisCE8DJs_-Yr_lTEGRK#PRsX)L z$oiaF*>@E!OzgXghTwQtk@jnnUVHm@#MgdfviIFad*SH6zRPGQJjh3p53tRAG_m84 z{k6w;iri!CNBPpL%e#`^g^e=z+VXA<#|XuDQJLR3UU~n(+DrKR88 z(%Zjs{B23^yO`#~Q9r(m$^IJbyO@^1@h&Fqt-sJ~Kbly3(+hjw-E<6&`t{vRhv2AB z`BaN%Qdgn3K9{HZ_1#VLv5)k9chlm;zPo8T9Pe(@el+Q|-<4SV{mI^UJZJV09)BW#^0LI{cMR^~Q)%~yYu}1J-(S#ZS(AS6a{VmENA;^)`ZaLYZ)oXlkE|bU z>D`~R-u|7_w?5Q!+TO@$Yu@#LW?r_7r+z-p1nY4K=_$67qzV)Jbs{W_W4 zHZX%(f=BX~r-fUZkt2GZ#n%goYS8N=k({pk-qa4 z=696u6z41Evc0aMGGDQhaLiYD{eLeU*VCP!8iVuv)IK<_uWP@EvV{Hl&*S(BbC_tv z`_(-kSX;33E-p-Lg}3#UFTCD81~0FA{dqnc{w)6>x?FzqpUdy~lFPpYp2bJGvPaq3 zzPaYd>(Aq`=U|H0m#xo<>&v7!1n2Y?!;zl(T@6QmZT~HBPT#tY^q=(Na((owy7O9| z-K3lSkHO(z`vY*;%d7C0+3P#OroR);>HGU5(pT^Ka@L<{>1R;iS?~4Hi0^u;`Q+!- zd=z;e+hEsIjl#p^QE@%h3bt=)h;nhF;rYkSm9-zh_B4Ca3w!m}Z`ND?S?~4Qte**o z-euY**-(2z==Z8PLhW5wbEYeiG{=5dhxL{{07X~(v-=Ed~sr`WURqd_MQ8?F^ z{drc6@Adwse(|Z;-Y3!L_V)gzXm9n?@SXMiB%09Qy<5i4H=f_P>-;9{@#X22UGKCG z{>P&3JO=$H!tu;+#}khqeBH=*-dg7WzC%1ko=JX!o!?jo?&*x#(bJq@wnzpvEa4DzA;Hf(;*t?V=Om*D>%d=%G{EhBtM!OmYlp5rro zQ`LJv&Thiix#Ime^18|ofDaIUZDsGr*iSg_w|L0SW&VJljg36(iKYMV#7;5)J+^xU zWC8YT*hYRn@$oXAKDyE3drSFkQM-5NMb-YYs&_um{xcX{^_Nz5e8R=Ve5Cgm9ENYJ zdh5gXiuB!o=fbyEz5R10;ph+T{rTK=r9GCNQ6jkiZX_7(?fntk;W*#$_-lG`{B{4G zG3oUE*Zno`zwV!T{~dty{yQIz{r9f=|7_BW{_lFyL+~>v^9O0KPjWq|70x$Bt1^+ z8u{lBPHx5%envI&y7lxg+S)QI>)?%W>>q9ZaMfq~b&OTneg)SL|9fnF^%4I)Yq>r< z_0DI8s@GrW?SJ-{o|!}5&h_G*Y+u<>;q{3ha;#hrep%AH|AxK#O>ow4Yw5Qpz4ogU zZ*gHR_4{(ZQ@oyKf7C`XzaHy)4KYqIf3}El%%?g3wpY8Vcm8WJ_V=yq{Fm)}&&tlv zjlq^daXxMaS$Jf@j`MMg;8#_4{>}T{UY~eLi zcOGvTf+xlk=j$xbFKc|~)8@c)D?5K>`Qmz=^L6XsJYTn|WxplaJ6~u2&hvFATK1=s zz0bs)N!t0DnC2xv6LSgt(3(H5@7o_@{5Zn=*a-d}SoOEUhX_Y|Ek9#QQ+9^6M${k0 zKJ-3gP>%Y1<1OX>konbL6Q8&dU;6{8{+*wjf$j8aKX`BEYY1Og`3vxB!q--||7|DS zOMI-wwnx^lNc;yEu-*v%A|J*1s&T?MlP5+0a|rhuDm>ESgNz@ce;~&8_ZSc6&Ys-# z<*1*ZpIz23eW3b#F}#iRV*JuR?;qOlMj!U_Jkk&D@ndi)yrKI0JU^z^k)QuuS%3b% ziuBdHo*?TFC;d|LZ~uw@|3SD5UrZhp>*Fxno`8H4{Tg)7DcI58{*&!(uU^#~-~BtY z`&O|2_QBcTemMK{_ixzik13xCei0|?qn&cj$)=Qp^!5md?|9&lH}Q@K-)Ug`=XV-- zzP1}1#rs(o!Eyac|0iMVNIA**m*dBys=epus|fEY>dp_*Z-ZARz5PA(A7k;9zu&)7 z?ccN#z(2QzG~#^UG{RFWyB^PQf3@FM?JuwT@4@!R3lkqneCBIezXm_F>P=65q&E-! zLXJmF!#ART_2FN8{fE7JIrOeS8zN?`KU@5}DDm}+bBn*XeHuOGd(L@<*P`!7|J(FQ z^&iC?R) zqu&0O^|nvwe}Vs#@Yb`6fA1$cPW#0DL_6-w{X4YfJ!*Yi`(=Lrz)>ISH@Ea#lm5lG zbN>jgzs`3`cd*Rwe2qLRm%^vm{uXH}i{UT9mYeXXYdkY|?pzw0Y+es-B3dqL$Jng2UL_?)mmR>sqpRbD=? z==qu5$P_X=PUw{dJNh3WKiU5hIQzG}+5b{F`&Xa+55wW#@pJ)c^=f*~ciO-6eCHZ? zSJgY8xsLF?Dtmr7LfANp`b})Jej}XqTU+|kmVReTza!~ydsUg=yPWTorSI+Q46}WT zfXFA<27ec}y(wlRH@>IL_r>|pwi}sWMt5ORH}O3_M|}Nph?-#idHp;5S$`hCdNscO zkHFdgRP4jQ_TzBaJ6|}Lxbgej`NYLAhm}UuyRT>cQaI~vzpP)@(l2W1SG4r=lHT-s zEq4D5|LTV-53=p@X=Db6xEX^C-h21eKkR>VbSNYFSU67>PT>sQScyZJOg{*Y6tPDFih% zGCWcLE2F?o+#U*K(nzymilu4E>9)!APR~DG|1{nktu4m)%{wLonUJ%3bume(-b&kBfh zqbu01ZHU_9+|qG$R#SK7TH0PXuDyL6|L#IBsQ&an4bJ{&z}dgYmh68Hoc%9{!@uuW zUk5**kMiov%6aj73U)@|VZz_6{J=+*^OS{L4^f^7Z)f|+hD!Xygd_gb=hHXweMPN2 z{Vj&WpC{of;ckup0rcZ=tWD5<8D$T9*Y<3NKV9ve+uj6US6Tam$zK0M=(<(!wf-f9 z^R@mp@LbYVyw)#UCyLklH?qyw`ZvIFt$)da5_e~{ckW;w;qYgD?SgZC?SrGf%-?kK z+r_8i+?aE7F*oMg+!5G5qj;^Cq2;t|y||bd%Y9a-{VzYOb0r+-KF)R7-!iXH>{`>E z@RfWN?GLjJd#?o_f%_hCYnFM_{Y^}C)?+T(S_ytDdQW$xjNRsT`g{Et_5Ze|A@?dAKvcf%j3@t=qP1BCyg zvgJQWILfcRMhNHn zSqDe`7=H}T@%O?x{t-CG&+Xy86@%1w+*@%W7b!NwPb7}=SlDx^DDRm|n45t&@=;t% zX#M}BA?oq%WiE+fs1dLIZzL4siO;fhyvfh9v@P@8*Gza%jqlvpwwB)fg?N{ny`O`c$0j@>)-xs~&{c#_h`{RB%`r~cX|6w@R=F45m7HofC2Iu~| z9G*oS#kF`nwy`$PXIpNE<5`#c(Ra__xZB5<$a^^uINm;l?-bYKH|f>(HNN#5@n!pV zu<;#lbNoKo-@}T}#@GPQDA+N5+cMIZ4`7>ln7jr1Y*L1ViSl~o%@~5_aAJuW$tty;j6Jxoa>#>_LG&JTU`x@-e*IDdpj)VkKZCdt z-)FhlKVDV+IUe;Bj`8S`e^}<;<64E!9vw#?#~G6IP&YY_Cqj-iAJ0oa6G$LhFCC*Lu-2%r&BZHf72BUD$_S z|3}e>f8(!)v)*U5WxenB%KA;58)y9h9C}VCI$b_{n%r={^nx;1_@-K43*ljOkF4#t zV4$4Oy|nTudiS4qRQq?qj>k-SHS$u}{`i*UZyMq3Pks3N&Qkh2{P-IGZ(z?CF0H%@ zf9`+R^HEH11>s1~wa{d7Vy@_V!b|vkx!MoBs60C{j^D0b?xDYmk79lF`0U}M7=JUL zh_C%NINQr%e+>WHzwqw-K}^s3$>}-vMSSg#qR;lHlD*{_grCbt`3Ag{?Y;4#`2N-r zwjZy@n^~~_;{B~Yo0KY?csA*k@FqCUZ?DJp5FF)`2dL{{pABk%j%S0aA5D7M^O>-3 z)-uz7V=c35OQzFbV{M7$nN6H1k88~>&ujQ7`dh#!{JGX#-p5DLek*E`rFeG_rr7W-cI=UYW-gfAB4v$ zyH>|zcV4SA27kE5*WV#H{JHk$82rtuH~yl&)8h}oIsRNY$6p9XeAlA$IJk+m=pF}F z!M|7i`z%p8){?tcYbLsfR=vlUF5wu@eYUXm)#IahJQ-&j$CJ;0pzNO)sYEWOvNlgD z=NxkLY-0LLPe7Vy6T=bT^tZw}{cUih|9JcjQ9tqfNPnBif3NXY{5cm8{_KB?(MA9J z0=x?Tt+Pr5`{OYFqd%%2Yw6v8L+`V1J>FeWqIY~&FGKXivv_5HKf8WW(S8RU_VNhd z2b-Rp^D{vCB0Zm_I|{oGE56@%E?dV0MRxxQ-g~OF$HS`qZ~iNK>f^B~zOVNQd*kmV zf5FB-4o7_Tt4Tlf@*4bQ9;U3B`#HX3UU=r|?E5A|f8gA5Z%v#Ze*H(~cz=FVx-vIB zNZxyuk372E%M`IJBO@@n#$d3MT=b9p=A>DVaR`+Ka{5Nk@$W34gzzaR}o{lcV|wJlpWYOIb z^81JQP|oCDi>2i6&nq|OhkK2-i_LrJf3%2u6-e(zHNE5T z3Bs|z`o8!%R%51<-5!AG@b>q@1y0}EpMcZ$`9b9ZsbSbn$paj zKcVW6lRwV|zgzj<|Bd$_lYfTgMofP??K52U|GUqnFCQ#(sefJb|4@Eh`FoYiV2wDp z-lIOgR@u4a`Gn*5vUAOgV8?Jp{X(``KLm&V?awW1HJ_w0a#y^9??eB&YX9uUnrAV< z>P=I540H9I;&d)7*u4LI3;fo~>g^9%zdh+)%eo!gnbqF4tjiL+mest++E>@I_7OkM zw~R06`0j7P#&F85e*lj7t~EZ2edJf(mCDnsO-`(T_s8siMPmJ1-th0* z^Ytk|u03Cz*tO@DFV?EN_Iw?0w(rM)u#2 z)cC$1x1VslkJfuBEZ32Av z&-Sxn?LDWyg3q1OAHgO-F+5K6;!6T0OouLk%WGir#5cY38r4)geXj{lsOSQ{4p}QI zww>NuzL}c8@mrD%a*Ru|N3D$o4pIM#< zo_QYYz-ObI!Dl(^%!gqM@5goLD_cC$;*BjHZSjs4kG1$fi^p4hyv6q*U&@SsE$iXC zgom#>vojC2CjHEIy*#{-%Jy91_@XmA>rdTr#~?b(+5gltJG)@RQSJk9j(-T=hkh5I zCHNct<>~Pcz*)bUdd~j$!Ly0m<+F|WgOp>K@De_w@WvK%8Gd3t0zoFxN?9mSj~OYy znWnRQ8oH;=bB>{N(2p464?C(M{!H$S8{!Wqw}y_NGr}~1p_AwIm~b<6>YOgq5{7^pFG z6OQwC`BY-Bo6W_SZK(K;++p~_>fd+dt|0vQqV9YG|6Ad>&NT#kT)3g?yA-!e_=gS} z$P;19_mj$Br{U}mR}e=zK>Q)LdmAGE{KoOPu)nh9T~9cdcO9I|y8+JS-3&*0Ef1|f zQ6B4mH5~PC{#U_~f6MD}F_(8G9OdPuYx0f^UhXytj715-J>vvqeh%JA14&^<~|d_V^n@7!Vx&`DIXyI zz~nohndE%|Gtk>6ioAktX7iJIO^eNc*4sXrH???6V&|c^!}dwV^fwWX_|97&fOl5C z_6G@v{SO{T-N4-1-H7@VN&i3c&f1m4?5qBr7u*QPyqot89Dw7#0sY&*B7J#wi`{>+ zen(>Sa|pf_H;VI=2jLGE?6@Y?{OA1i(_T40LvZA0-V5l@#Pz;;#b;dD9-Hx@IFD-m zuWg9)DR!i7grA2G<(r)F*gqCERN{MHbXt5k;&)%jb$9sYxcoTo-iBtMd@C#^;RtmGVaYIZy2PFpH0({y5vL zKLLl{HLqRra|=Ed?|ZX-5gx0`Upx4cIaTllHO?^b(xG2vk6 z+2^5;d3Nqo;4RDUXE$Q_)p4j_x96#f} zoCjP~j;%ke{vLQk;jQ;CUo5D+qw-5CZ?EiqgA2*ur)zxgt5^VESNYA@FM_{N?LP#M zz;~x#E9d=A=__|9pUQLLF8TfEg3U7={2lt!%KGznPxdE=Kg*}9D4+Xd7rv>+_dYTA z&)6UBpSE}IpFKGD&qHwTpYDITe>!$X|1|L>a2FfJ@o_7hqPWbZ5=Y67#e;?(ysp5TQt4RBjf{p*ZaQ1Khv;U)T_HX-KUgIygx$J-8 z&-^VU|2h65IO0Ey{5TdatNXY2$=ToHJ~{7$TMs{v z>~Ckw{zS{({+aDPenC5{PuX=ZR=jgRne--o6bjgV|*1mJ`AUr~v%KdL- zUV|`);YOUt-U`Pv)i32+_oqCMEyp~z>1iM7>Cf>n{K;eVtzhSgkD!lvV&ls>zSq&i zUi~8ChyFhAE%VB^lBS~m0Nc=;p8YGw_jr}{Ie*Q41Eint8<8&)w{ojz4JyL^2=eW5$#Wqzp!`B;88TOW>Ediq}N{$?w07yGfGb; z)_ya(@Ta}~Gwg5pt1=J&N%Ej*zmzOx`(e1-Xgi(XA->~V+}EXjt{?s9^AYvdNA`E3 zRXou)sK>gUD$l1_!jB)Qy)vPQJiSF=itNgM9l=C1WvrPebfjSCz3>R(>6Lv3|1rW`>}tgRwj2Ms zzwL*+Mcwq@mDooAwLcw&qdyscE@?-6`}slI=IP>_IsT?W_f@IjJQ%+GG} zoBj7Qenft}4`~?gHP)QhVDCJ@t(AQS!92pxsq8Zi<`cfS`ZxU%xW`A4Pq6I?$cJW< zA8g-Ouz5zp0XX|R1ZRKU$#=%r-}=NplVJ#cM)hZYW>emXf89gNGh*U=-uNq1{m2Is zU-9VjjF31!y&JYKKe75(zl?C`eddJY%Ll67XI9wWaX#oXCWhhrR=xK7;IRJ?JfHmY zGocafPb7QOUyMGd@9*)P{&qP0eFuNucNOhvdX6ul_r8izQp)#LnE#uxQJjZA#C9q^ z73bmivh8n(--g6@f6MW=!4cngAe+BQe5d%18)SHn5|WpGa4 z`@nL1?-Pvp=YMKSXN0u=sYZAL?0EFldzK8m1UA3FsQP!p*8hQNMgJ+7sl3kNx`TWR z-VZ;NV~}zTJ^}w3`-E~97xLy3etW^r|3&7#kHRrldCvRGGe^F6X5njLpRw+Hz!jeX zaR`oQK={mu{qS#-hNAu9WWVuCkS@&Bk+eP<> z1v|eF&w&4^viBX>A1F2fdy_SAqOFxwK&g*U`t@!=vyzYGT z6r&O6b^8d%`0TuH&X4g|qtEdfGA80%ABWKQio1^fZ13!EI`&b1{q^AR*UUS&_yp}2 zdj0q4o8iAnFY&ck;E(j4R@0Z4w0L8SceHpZ>F4-fAIR+SE_1KN>s##cFWV21-^|W~ zXZ9H{nRg}r|9kuWpYr{Gd;c5x2Y#=y?{T|jBVU0R6FR$KrypKV_~BLmOn3`?R@J|J zEzjg2{9BbrVaFp+Tb0jT&wV0{Iti$JU{L43&(uL`DxGZB7e?LkHC-R zqc}fn{lxW5=Yt);_o_sk58lCce?wdc!rtRg_;>!+@%@IXH@$v1r#A!6=~=&#-v24@ z|9#z+dH@K5FG7$+aUdezHv8>LCWp$I=1(!d;+%r{VT^XMf(G6 z!(JZ5U*?e(kG6O$vFRO#BfZ8y`&;(s`CR4|E#BPX(H0*_?ELcr@;{d}73b5Iu-(%T z%nzlRgm0?se8oJ%F<;>`<95UTrdNzFM||fS+!tfMq5TYR^|nvwosaPPgkzlIe2eFA zvkG>6X81BVKQnv<9P74?zXQ(kcc%E3X8>QhJhR~_kMWnoIsOVb(l@^TbNmgh_+zd3 z_KzIj^T!;24xH1sJURW9aKwKw9d{<}w}`iY8oYUI` zM|$eFwe+^fg#LkLe)oR0yry>ueNOKfJdqyu$KkMdzLX)Ob1NUk`FzX&!G_9wr|E@1 z=kxc&pRDOQe{Wy8ZgPp>a~l@H`MC`}_@Zk6m@da}!uh!kOW-M0?{gQ13CI3u{`SH- ze~x!KfByc-`5T0D{v2B(e|J^iOUZiF=l@81+5R_`;x^9^xBo_b=kIpIpRRi6&vy~N zuCmWL8YBGK%HAKdm+;!k&cC|9f4kO)`L%v?di`*uXMVeIl;81g0G?I-`OfP(gyZ<- zeCs^8zv_MGHCdjxzT`9VhhY1JqWvPaVedPy)jeD#qJEfd=#6jx$??}D{n?|;pTm#m zqZpt66Y(z^E#u7-_)bx8{e}PDXsO@%DiQVe$IyGfiuqkdn=9TAG|V>c|FJ$Tf38pW zF{mX`CyCr{-|M0?NYvi;0f{m*aJe=pVlBk;Eg{xRo~iutiWM}BSj3ZKe9bf z!MQ#AC`+`b``b)7`m@hvuzeXe8}Yde)_+_d^tlO+PhYF`;d2m9zzm~}$o8*buMb23#VD2xeo7Le%0mDhMM$4F+6ri2;`?RNQ!318y-yO9Yi$ zZ!zHAn&N;jYd|gT;x;ar)-5i$WuNDqd8Jq9m(tz4cki!%-1+(VoJa3F@65b2XU?2C z=gbGwO;*%{9zUd!I`pUD&n$OFaPYC%8@lU`pJ~aJ(=tuh6A7y?l^cTLC@{^x-o&A>j za_ArZP+i_$Y#JUx$7cP0rXsE{FR3}6FTV=8{s{dscvC}P4*icIxBm(KzlZlW^ySdM zZlZ24p+5$nY3R$Le+2mv$`kq*ewgRmaL&IR`hF+s`Ma3Su=c6-^WC^#bw2VKf6veN z9Zz*sCOq=b7F6%2?4`~OK9AZ&ecnPH7<^tefG_j&sl`|QHk zbus@6$8Y{Vm51&24{?2b)pvM40>8iLzxl80-^}eR>~G>O!8iFgaeLv&kH4wA4DK)b z=4S@(BwmdFGCTj9`7q@TzUmjxZM9o-?fvm@uFH2jaSV^4Gd;=v7qDqi-}%9IMLd5% z|0JCCXW*>wcc5AS@WT1}2jI~6{fz?`%)P(i`7{GZdwldZoz*}FTJ1dG&%kid|>z?e31RNis&ak!1Dl(f3my&gZjrg4E+J*N8w+u#jVc| z*WU%dsj&5N^qe{We(<->t)A!qp!oA%7Krls(E~-_HRx$Fv)}RWg1h0tB0v1x`n%G* zuxXG-sPD{eY-jd)NARAv)W0$O#yWcI2$eO)@ed07d}BGb*A@2p#tN8WPZgB!Zpil} z`G3a#0Gd0BzU=d zU-ag73!P7I7mh<>+}O3yzmBlgf9-G-x{GEHDeLTCJtVBCcjf=0&}moifw#IkU2&+f zWklxfw)Sii=gb{ecKa!e0fnXY(SmX~QvLOuHoFnFPH(F^(1pZz6ge~rR-vl%Rp{)qCt3j6ZM6%yVJkF&p5An4yo_SwJPq@ByR z5YFZEULwlpw>s)xTUo39yAh7^`mKuodwP-IzYu+nf0Mr%z7G$ve_r7gu-7(TVXK1v zGXL3MyW#Aw2{`*}EpfBIp?+{3q}f$7c%vcX%JiKPr4KFKHa% zcz`?_eE0S!`xh1V-f0ELcW@3Hu0-E^n`hQot?@Yw-&oi+^3K3M^>>v$;bGOFbUs1g#s^yKb zhjTfeZ}%0sb4|9#_ZGH%rr*V8uza46Q9j?jKc3{yMYX7p-z)moZwHS0)&Ko)_P_V0 z;eXRx!L>f8=U8BAm3n>e@4ae{zaEbGw*L;g(f+-+-w4OOz3DH9bNo$k#CNV?2#&di z54^CR%l;nytU-ILC|lTbuE730&lT8ybN+3=k$?T6zq3E4;GCanIP&A~_v&BsXwW}i zZ?k>xmBYT@-t?g7{jI_J$HZ*?SKscyS>B)I>hEpvYSQ1&->R^ro*QWw^kQ?6^fRwR z7VNhW?8|70llt$2otS;7DKj@rL|JlAHh4SPFf)llbjh>-wF( ztV*u(=SdE;KTp9+YjNxB+vp$9p?{{{4Swq|3SU!W%irfb0$lasn7Ql_{iY-w}pM2f3Df9tyr_y^0ndpm3F>3#63`Z&gC zk9suaL;kH|&-9t@m`&gGyw{8LT$6V-9Bc4a`RkfXuS!3$_M9t;@>pM-Vzc#W{d+#- z`tQI||E|gF`TEan2K8+pS${no`nLb=@HK1((>u*R+K+4YF2O%hKhC8uhPPJQ_4(18 zht|8rM`XkWq){MC9R)@*&hb$ ztPOCx$Suzh$59^ZX9V6~>G+DB>9Ww!feKL4k1pW9sqOq8eKtr2R~A zd`Hojk0(~&`pEiYaMpJ`5d31(CqFMM_Kd$4&hfXwp>KMJ601K+-DUkzIO`us>>AfA zh;JPmoO|zMPc>G-x%Xa<-c#5$k+*UDw8BrgqFy8PnbjPeG575kgvurK#_ z&GFmUBYz0b?s#X$An#!x{Aq3!PQmAw^e!UrXW?jH-$Cy6DAx2^L_+#E#@Bzy4~Kbv ze5TaznZh3=Plh+KZ9(?wBEN_9XE=UMC1vc6zWxb))87b3`pWH3LvDPpZxR1zxP2FVAxy`+#A9I^c_FFL9 zXZ{v!E&P5HBbc9lwy^KFVAkgs*$l&!$M{!pO*L4)?d+p`uGyctZ{+iT5P8J+{2xM|&ws~5 zA#Y#Dw;bd@&VSSEgCo7yBJYRu`M)=%@A-cUdF1Ca=zBjD_GSCS;OpMW?;Vr=oJ?SHjlFg~wy&&F5ZXA7Y}@~iy5C;iR+ z*fgBG^PK8g&8uo`z3w@+oKJkJ;Je`4(SJjc%R3YM`^wroUgZ9M^FjD2h2M(3Wwgzo zEc|Zr=d+tP6#KvX2lemeM*C~>N0HmtTwmhLWckPPYRaGWGY|2thI~`8=eJ5n;dWu= z!}u%9N8l{?*+`am!&%--`LcXhlKZXIYUB))tKj*+nWKFE_rdS4#nt)0p5y(6J^$?= zzgXD*#{MkU@b>&a1jqTW{c+ky*jL~4J@g;LOMi^`Iep)C%IRZb z)}HAfMjq*#ULXF==`DsMJ%9gpAL;g1sWWf0tp1iS+RFpI^|OuVB>4f3vwV{Dvz$xJ zto)tCKLE%0x5MDw@z1tm&u@e5&*Oac+aUXc=zmQA1m{ZFSKfw0?zc_TaI|;xzZs7F zsedHtSKl%vx#hRMa{0$o`ONPLIP$B#B`JTVKLzLXH^Djm!%5%x-rq+4YWi+h5te*eqsj>B7@{Pzs{xh%V z_e^20iG~*yj`>~XoB4al$KWHd*93#iC1aM2uYSbe2k$`sTa`BR91S+Ub(8JwPOSbE z{>bsV`fn`ueKywSct_%a#Q*ir`ArY_=|%3h(GwiUx6$wYI_bgBEb@EcLmWT4 zu=sPe~YeT*>$=`Et{q8`A zzZu@aLIC=QW?6;3@F|Y0GlThAi9F}$B!AEOJq~BN=X1y}`V4DA693=f6NBHHENB1h ziWs;3R=sBEXyKW+*Zz4~;d8gw@t=qdgKKW;+q~vx8`-`h_gVKkjyoz7cF(&Gw9vZtTiwSYgRxh*}h*rQE&Y9Ddm^^xcz870!8b{r7X8{N!5y6J`JA z;M?=xJ69C>6@ORDulTz<{uQ4n`zJqXTKiYrUh`AS9&T5Ee{%iz7sub9JeSV-#5?B` zxA(Ze;uE*G%Kjns-#>A_@fWcfMp$>Uhy6k}*THmM%FKHk>^hZMKGWbc4PL~$m05pT zgF6l0(BQ!ak2QF_!IKR>+~5-p)(5UN08dwGnw2o5A_HevX&c*xHZ&arn-{&d;2H^^?K)>u88M{(3m#D<5viN0R)d z*mwNtGXaCoD^GI#u^Owj?M}g43%l0X2J-(v;m2Wr8^?E*_vm}blD{kh}M z{p=0@jrjI|pD+5(&y2!(e#Y@u%+Fke-UJ-}9au(vQ`Xm%`0_F2!M@wAKVp8w`Rs9c z2pz-KZR($Wyc@3kB%I}ElHB=v(~kLiFKo+U%v8bOFx>**#b)sNs_kiI;dAN0gmbk5B7aGgTL{*kn%sN#%liG{x{~!EuU>E%J=g( z)V6+yd>dSA5|_6Z7#B5yt)f3R;&jwXHOKaRCGiGJi)Zd0HC5^GO+w?TsgUA0qxn>Obzs z^oQ5u?2kb>{PAcicQyHo`AB(H;_IK^YIWc(YzCPsndRF#!S#KA@%MIk5dIA|gYs@< zS-uDk`3r8M{>lFzl=!cM4{#jgg(^Ps9RGBRKY@LDtWK`=F5<66-*e9JG1&h3>Kd#3 z3^eR*f+Iht=;(XU9XYR#pnpAIqP{#IEpI*_JwM`n^!yot^Z7Fh$NA&?4|~a5FMl&w zKlZ=5evZOR6%v%6WuN6O;)nc7ZX5^TXI9$0Hv?~iqx~3v3eNGTQ+(z6FU!v)xzDG~ zYkq#MfA*L3s&Cym&hLW^!ErwOE!{Mne-rft{Grl6c>bSG`m%Y6`2Hqp8_xRnzadwD zbz=R$9?t%^KMDWePkHoD{06GLC$auG1!sTgpYV6JRwenpgUujYzrj9#+yVcyLW23( z$v)?27aaNV`Qj8D>G^zdAH0>#V15p=54ru>Avp45dMDwW-YGbzr+*_opLedHJlF6y zgX!-}lB<6VdBiup4dgHE%VcSm9}O>}zC+*m{m3(KPHg&XD1W3cpG<80$)qoj zFqRE_M{nqAwaM=j*$nSszNnx5Lj{6s$BnRmg+Nd~z&^|MN0x7D$j2ITuirVo{ZYi< z#Qa#F?VZ0FeEzcrepQVv<@O(0zP=%M{FUYX4Y}jN ze%Iv`yhs_FzuRK?3&sI!*}uD@dS1kFgJrJ5lG=W|pyLqJ%;SQiaEuF_7db&c5%VI> zGk6_}c?QQJT?^)}%Z@`9!b^*N=P{O1Z`Q5Bc?{dd$7-zRF>DuG3p=l}p=dq1l;8KxEKl4=`<|rdLA)pV zt*h#LjGw|MhJS5bcEK3;An4srJ`L)36F28~5ghq7e{0~JzqN4A-zGTnr@dWpw&%DY z>{*_vr0;v3ljP%K{$}t!#|ifLR8)^+r#Zf(@PoCNL&zdO%8$W0zcWdG+uQ5BeE>a! z`YTC0>#u^tp8Af{L*IFW&2XMK*aqiuzwI;gL}LAO0M7n#91;FeKGTpNPx1%5@1e=g zj=NlgU=Yr05DdVN#)jeQHf@i6%)@*h{bBgrBKN*!6psA+-n!@feQXBbTi?O{y%jOX z0DHbhd3-PZH2izTp7pJNqkSCW0y7N9dzZeKd<4$#C0qV{Uw0JVU(&Pu>p35?yblif zxA)c0c&3WJ?*;a99P;xx&|iCs-2TM!K2Z2x;-BRBlZAhh1IzPO(lGempk=+k#@5x? zTMj?2@be3ADr|lRk>~sj!KhWi{3y@)aa@%1vy!xPepbUdKh9I+{A?k9&W{}VnI={1 zEADd~w;yNQ&t{lrTaSL0JB|x^56-kdzJbjkpH1vMtnbalJgoOk9XQ&@gURze&_lmi zzqbHtenbB~=%0bVRP22ewmpBkuyW_+L$3WZaKu-C4gL&$_Lb%K z7g@fyA@}-`<&KAP{3URfd!Lo%gAMtfhWtQ7-ol?beh(b>|CaJOetL2#@7E~*2z+PZ z2Yb#xhU^VR?zr9h&-WqI@T-#iU_*YmA-8|a@n;(H6Ak&PhWt!J-on2*ed{mVU(}HI zH00KAj=!QIUzOzgZ;14>|HhDq|CAqqv;0^?-a~z5`3gA4-`tRoHssR{`O$`aG4-A8 zFNd>z$J$vw(vVLzKUcCDd{1N-`)EJPkHA@etRX+%kbAw) z@lQA8XB+Y^{GIK0!#V!qhI~mwPM10_zT<}+ztfPfX~@?#Jg*Oq=k>w3p&A6PVAuAT;PVr&Tk-tl=#BM#+4f3Wf6ua>WBy!) z?W^l+Mm#U|`R62(Cl$HR$55Ho_xZ|B>Z!NLeLk`ler92xk65o^zxDInS99Jy=GzApTsM3M-pl?+ zMgN+{FGjDq=i+b6vjI75UBZ4rGgq zTzmZ-hrPuN@VCK^4Gij!vk!gKvtP^Uoq{7h%ikt$l;8CAM^4|m348k6ekS~F`f^Uc zll0$+y-n~IHp7Qtb)Q~iYd^dl)+Ywr>q_>yy{>?xz50A;Gkgu3!S;KIeQv*A*K_+_ zhW%*2Uw>>VjKMK);C=i! z9QkveXaZhZ;(vwm9D@HHo8bqfe}?1lU0Acd%-}Ac_)&0{R zjzg~gzQpfRpSb?bpuC5=3H>kZsQa6tTHKP4avc1Zu=O#T?+g`Fo1|>+l%z z;li$8u$=VzO8$LcXOu18*O3PkSN$y<`IC1i)}C`JVbA`pm$ah)^Lx*JIDhZiNpkhq zB))Q4txvaA1=+j@dp=FWcT`fwL%(0o+x>H4>vM+VT%X6`s89O?{eKNRgU^dsr}pLZ z;#Kh0THLbzu1Rvw$9{Nek>9)*8}P-n0fYG+fg`{2w#0r9>Nq*R2Q|N_%**deIP&Ys zItI7d3^yNRUYGoT85_Y<4elVz@`=R$7V0GR6~BdQ`SST<`Fvisv^HOrzXQklr`+dB zA-{Z(_5y!|Gz|7XTa=S0gXuZX5b1fnKY%>0_x|?kBINez2IbD1XZg+~fAx#%-=6zw ztzLZ(sIO-V|G?+P{3F>a_&pz4oR#~%$^iVrTHJaQd->BPefdOU-yf6@vKh3u1l^g6 z=zp;{1V?(tx4#d2#+M_$`fYrb^;>Y(mqXw5Y@a#36OHtCG~&w<-?af(lc&WczgJSZ zr-^?XJ~hZ&&=3AOcrEqwR{j?9RdC2%OHR&f$&JIYHr&Yhe2)O%UE<5TI5&b{g8gL= zp^r-T{hln_m$UtCaM-`IC)}@87hCRRO z7OL!y5ioRc%mL$uL%Tjld&<{=hw?B?_1MGbB@ctx7G@Oku_ zhI~VVH^H_Sw`uG<&ymyHU6^cF&+jMUWgfF_$G-C%Ill86ZDelCkgrH=d7Q_{_BX-n z&~@9*yi1;^F#ma;LeBFPa`^2qesiqqwutBM`XTdl$!8n6`8WmVe6&hF{hNMnH}YvY zvcB^(nb$SAzrlkI9%=CQ29Gy*Z-b{Be7M0g4L;RiuL;j%d(bfQV1MnDKc3Txqf1+J zNBtpf%^ihwR?Ulj3H1{afp5Zhf28^=E6vUxb(bSXY_or}KI_nl1KZ7GYv8B~3r9M$ zN9CZ^H8OWpPS#e}-r2vk<7oCE{y-z{l-{Prl9-*jzjNgJem(4CeZyO65Ub!Aul+W> z2L2|S!Sy6N>>X1XTn}*@`@A0FZrEX+p-sOx!Twt%2hW7x*NB&)pa}F(NGy{GEjJ`P;Q%{`u=AEuX&&;W&R?FSiH2wob0)`nVh5rx$MafBJ72S@xg( zf4&~&`uAOM_Me>nw;Rs> zn})Ohx+#C||MXY(pU-o$|Jrc&Uq2lFJHNl4uXuOKpY!=6q}R`8@cDtqF`w`EM)FuK zZaH6Xeq+A=%6{g4u>YOX9nnCF88ZU_$2oA-A|VIzx~Skx%W3pdI!kA=hKaaeNSySd_SAv zN5~Jbx6K=zA3n%F=8JFa)W5y+>qXvtPu1^DSE3)^n>ydQ8orCo;P=ey*k4{z{a)!f zwmgRo&F3FJFYx@huNGI&3v7SyE$saNUO3|WyxHAw%Yw$tbV_BXZa4wJYmAO2J;IMCb4#P`Je$CHGIP&vbAFk{B-Xb4ZR@Zm5N7Flj zET?x8j`Y5^p}t;RO`A42zq_j8&((0G?|QkTaIBZR9e+3;`(PctdcHORXMbBi+24oZ zD4+g531|N;$Ny12^FIOS{2zcL|K|579QO3rNqA|=&qMIfV(Q~LiS2KKo!=ivc1@A{ zJgP;078h2&5e~WY|C>_&o&WELw-$Z#f{){vf#j8s0l3|L2`o%lqK9@VmLL8`M`G`m*gKv+W`CSmM3t`+VU&Y+-LP z=SSA}d_0jC@7}A=sotB-`RPvnQvX0={Wn4Rv;Ukwjq>R~ zfBQN6V+zjxIM&c#*zjLZ!+*Xv8urcaaPpt)3GSqBxNKFy^$I6wKUWv7)+?lKgxvK7 zPZ0mLMZR@={a))UiDOXT^`}B#`9V13+IN07+us3)ewCjK=Gfn|*?S?+53mvT{Vki& ze;R*0gg&QX6s_nN(= zoWIvx1;4P)PW8Q}^7x)n{h@|_i?l-D^(2+YdXklWT>x-yFvN z%lMl?`_^~1etloQ2gz@aKLSU5?d>GJVC|8GdG@@22z%=L z9Z=R^4(Igy;LyLr^f@2yt+P|*|0w0p@n?|d_-EjVZ+^OI|5@&Qe#l>h{UfwzZ5k@( zIQY#^sMmKqRf}7XTv+>WWnrJU^>7^Hrw=lib3FTNMZS~xdpQ25!p7gmagM(O&hgcc z_#Y+yN%#VMXfXaE_Bs9$ILB8%;{OrxmlOB06u+C}9DgyKze;@j?>n(+_yK$n zetnItN6>h^pL=ED4!i+=LE+!svY;9tA1M48xXrO;G<*eabgcVXfBk~iY1+#d{{_~5e~PdE1f2Doe46}ZdFD@HZ=U;U$S z=(~QO9QWt0$LDxA*5lLOaX8!aekANYnB4JO$gA}L;cRa?ob3(KUP9mUABQ_t?rVQ6 z!B@flHlOGE@gjd0yoTfOhw_nzd|Q&ArLdk)rfHBpKZ1Q9p+EUod$!k{-hqaEG5*PN z$3KxD?dktu?M*cF9WQ6O{eQNnKeJr_XZhxad|}sox$m#!__n_se;J(R8yfO~B)9+E z4WD8&*ne$dzp^6Mk%h-Nj{e8;9))vy9!Glir_1nX?oZDk&-O4m&)$YceGH`fuz%eR z=l*pIob8Rlkw5#>HvZ53>8XZ(3wh`dJ(}mofC6D2K z3;L^ITTF`|!^vDYL=%3)&p-DeU_N z&W(P!@V&=s|2&H{47RT=$f7=cU%>ggyGwoe+qAv-@8Pw2>&v7!2LD{)Z~tlS-)AKG zcKjRiyGU;wzCNYr{ad7Ge&n1V$7&(Jc82v$;gu!+^f!3Fg8KR@o8cwM*Hb^Y(FP1_ z9>Q-c;?KV!j$sS(0r>m)(C|TcH^;8gY2|sc>;On0}a+6S)qJ`D9o^VfU9ZD` zcags{$isi;r3RPf>FKZSaL2+Em7T~ioZ}Us4!F)R`s|xKn zkQUc}oBjUFqPb4VLf#MR;W*g$tTL}^@VW;3UR68AA8W|R8|-^k+5X`Ye-So(AIbNX zvV0-$^JH!}cvXYfHQ4vAa{Q47?`*K|A7y>tH?kf3H{ZhwKl)u=*8AUGZzaCVi+cEf zqh50U{-4xKj{m>w_oMi689sFDUt2e0p9A;N#^X8g=eYiFg5$ZZznj_*GyPKq-xJ!% zaXc6HcVxXM`fM$(-aB&MWl7Or#~AG-^0;sJIq?v(cuwqlL&kq!iSO_9E`jeZe3Ps>mlkc+Npx9!{Hu&L46d`?jX&rn>fitaZWnYtmp$+Ug|**BezJZ2 zm+kk$*}neC_C24oeFg%v_I-}G7WQ7v;B!vLjZ156{XO{^fWKMfze9dD!pF@w!F5Qt z!?6yj_NL)%?*JV3d@sRkQ@ocT>)&9%6Ws*AhRxu2nrqqH2O4}1J;44oh1b4` zO3Hl2^Xli$?`!sp6BN`zmZ>gVPf;YsL}p>P9OPK?tMZo-{vI$(3|RU)9R`;eD@2}>-!@T+usH2|J`u*{~kE}?+wlr+^($APf}R>Kg(#?`JDQh z%Cl;0{nA$Qj=#DK>(5TZpMA-nzK63G-63omd=F^{{Mj`%3hIyDYzFIhh<$fO^?N%b z9B2JeIP_ib&h~u|o5Am5_p-mEBK%5z>>qM|r{Kts_3QbN>-QK;HmczD?=(mG`seu) z*FVc+|DE&Kh9iH<*EHm7licg^7VIyqlfzj3o@cx82d}Ej6XOTl%MRjytH`~+TmNzW zmF-`GUB9uHw&&jr^4`R@#~E&Vqdn@6?Qr(T4mkXA)dy%#WcKz2wY`cjm}AEe2QQkt zzVC;ZP?>ku>Mh^v>xFGY2K6^wJYT>2lKJ|J;LyK;^oO`7c~nVX-i4iD-`iRPe^BED z&yNl4@2jXjKh|>`=ZEcoI~?_A``-iS_J0zN^SS%k+>gNDEb03@9L~eXdTSqhJn6yX zYzEt7KgV~}*z&!$5%}K1wok7|xqTjmqkY}-|x_e;eSs0Lk;~AIP~p5 z7gOGAioV~$Z-j3w?0aZi;H`zfiv3a8cUcTSGClHp4`ncz-?bb^etoaa`^PA+_BO#= zYxU~Az%5Cxf4zP!EpmUy+5Yzu(ll5fdmH-tGxW{>GV&Aocij`8BfPkd-tv01jN`Z- z`JP%o{HY?>zXKd+|LX7X*Ms?Yq@i#B82b9>5FGxo|LCDC-{Nlu*CnvMeuX?5%>ODl z@-KH1>(5Cz`_uZ^T1RjB9-!^{(}nF{4#CmC=)dU{Uw-eJ!=HjdG`4#%w zJJFCk{tLPKod!Gp3wf1)IPz!yeP$f#8-F+ban>K=TnK&TzV{dMNFM9FC+|wEzUO1;o8Q&=E9Z9{j`+$CC%N1vt}CrzlGfN7vit5C;Og2u<=*J zIsP^{;`<)g0OiW>arMJ5WHb1lmhyOS%XRt3;k@qtjwJu5E9&WX`Tbaw~{A= z@i&wAh_C($IP_Qbu-+qi`AE^XeeT76r;3f=UsFGKd|Q#PytS*kK1~+6ze~7|<9ddl zdf|5z*TP$pyuTse*pPdD&+#`m*n`6ho2IsFf(mw92vE}^i1jkP-+=YA($1y+VcTm>dwMG7V_ON@3^6 zY~L~d^}e+YKfTEP?r1f9c}d^-KlwnBJOA8)4;41QgK*^6{CWSD^XK&;=Whg#{FxuR zfO+}pqP#gj8{o)~^UE91&-3-8@bzp4=j(?#=Cr7S^Yy0xE$YZ%e)qtUU;XQQH+RN_}2q1pL)>vIL^=lYa$efGh3m-zZ`eaf%?le7OUPxw!NId;kZ+5(5aoIf3bw-)=h z7yIwrUJk=i9_=}P%Jz=JVNZYCpGW=6U6eoA@zOHVx~rt;{HX2s^1{nI^<2WS!j4DQ za~$IlzvCHz<2xR?YLEETaAT+b&L`%_9G@KJ?_EXi_(j`G*$l7iF#p8<`2xZGIX{^5 z=k+r3r@duxwznJ(d&al@HQsl0iG|sW-fI)w)CcW&h4jlg0zU?#YTi-Kq)W7v{5{~>> zzo+1(wfX9Pav}N8@V!^F7?A-ENuKmq!;l&`m);I@0avkM{5`QFD&|R zVm}3cn$6(vJPmN1(>nw2uf;9X>&AXg&;B&hGyXO>#~+7teEpZ>4^aMy|2gujz0aon zo`!RNy+6tM)&Ds?pU>p<`r$~=b#c~EmRJ|(MPFr|8#wMaFQD^t{Lo=DJmviQJ@z<% z)Su$-S$`Vtuo=`p%RcL`#eZ3U9o$iwP}zsG{$xYn`sq~KwZ8R{_3hiTef^j9?H{wg z{YBQdzsUN_@mJO#gtPt-ob?YC{U?#fxGr*71-dK4Lt5my4kT7W$G_QGR$&qU_tl3Z z3^J;)wCsxx>69?S9z*U39X7}vq0I)lBWMb$EmpZ%&?=eY&&sM@(dTB%Kawr~JhK*zts*R4+n$^z3*&L4`w@_urktsnX!Ai(q&{mCkv%J%IuV)Z$lb)OFCT)lH zx0~-Jjl=yMZ(tjT_4BW>J!t5R%>LQ*w_EeLN~p7SHoeR=z&do^UF{2xwTk{M_to)d^&?(s!?P`a_U|LJ zM;>?|v7CL}NBCZa?c#whrTktZbLy+u$9;(R4MT9gZ;;=|X7D|qG4^*?#B<3D8HaHk z_c^YYA%DEcT`y>Y<9iExA7DS9?*rNtZb>Pi_W>S9f9HK-FC6y)-Y2eruPyfEk;JYq zX+Lj!HF%$J0*?Cx?;B6U`95tKCx6brob$gDj{JMywFbVkHecQ6ZcglT#5OYT^$m`z zdfD%@Pl@kyghL$PQP^?zagJl$seL)yKLJPj z6WCY2z1TklAHg5L&fg5i_d1y4pMoR)Ul#pu)#|Mu!5h!zJ$ZBtz0ab3z|SdsBkXg> z@k-ii{d;%k1y z+eUxMpX+~k-v5R|g6n_CV-?Ys;4>V*uCVcYh#T?G`zg8%IFCymmn<#%UqIh+pLsHP zAG8UM`=DdUZLg7E%VT@W<#F5*a^EW%f!|Y`tIBf#j{IEk3zQGO1)B!*+eO(!Zhjr- z<@~ncrL}rX`MQSO`VG13FSpUPPcZx?Z2vJ@5&!*m{q0M<7oyzu9&*R!6L5^n)jt4- zzV;{Kuv&9yCMK>RDCr zy2R#x41bPR+Wd$9C>;4!?zlYUt~YIcMg5rm8T^;?(;~mYt{2@6_mQUI+3%(NwC^o7 zww})*(DT=^x8W9eF}iQ8vE}-cw#Ng7ophGgoUwHLp^dHE3lHC3*%kA$% zuDyQJ4tw%cgUx@)O>Y#=_WT|u>?uFhkULKq^4C*7Uo*c99~gcU_WR7}pZp%t^Id}Mfld1dqVg~E$BcUArQXA6%q zk86MYhbj}C*R{X?mK3w4M}eM&hq08x$Qa2PdDUe8*uy6is zFFAjmh80kG_fD>EZa?!p0xtILF@uM|#ht|Fb>+ z;({uAHIJo#@2jy|KWH7tG}9_Lk2T1VZOY(0)^_%J9_uh1^H|HcS+#v!r!wJ2cpqu$ zbA$7Q_OCfT+e1!o3!Ky20q68AZ=`2`z5)CDYxC86BwjxsD0~a)d%e51@NdH7@UsiQ zmH4OO=N2}9ov!)$TMg&@^}{)TBXG{&G#vT+52Uvq{$a8Ig01!Ut2Y$B2|mj4lESyb ziz%PiB*Q!5og6>2#@0VD58`<0XAA!$4Z-p_oomqk2psmEcUeyQol08IbF6^F|LX6B zL*M)?qVJ9TDBs4IIm>--DC9qQW4+!;T+fX^gnr1){|p@YSAQ}6bLcDI0EgW4nAMn< zp6efnJglT>JfSwm$%8`;Jetea9o&{@#Y%^D*Sw zKLTg_N8zxq{A5G!yjGU4r@iI)8{m+CkNCF7uNQv}{Z74}&rOB@ipIU0<96YPo~hUW zcvj)n@8dlJ(z6dTsJ{$uS42}mZvXwF!pfbu%<@g7pXEE@keeUR_nekI!Tjyz z{K@I>gWHvq@iG4Jp8N5IkMY8q_d_p9Z2zCx{AM0#@a6^&C3gHZ4R_cKa*KbRiuhfx zKd;~07)gAP`pP`r;2jO#+2CCb9&hkO;wjQU0QZ;l<(USbXt3=)>z`?Gi}sY|K8MKc zbBN%VUBr6!EzVaq!%7;n{{G2|Soa6{UXHVTD#_o6d=38OGF1iRuZMH|aX81{ljL6} z{$lbU{pI)J79960vi(o+Rdi061&XHSz`1!=qd-D zIOr<}oj72TEOqE6s)Ld?r(*o&oJV$Aea=gq^RjYq-t1qVUjB0K>|d6I@)DyMiv!#c z8GDd}u99bxE(J^nReqeyXmb>G={GkU;n!4Berp@vkl5c^>xZ`#xjc~AxsGwTzxdv{ z9ox-suo;{i8E1b>k*mL)E*1s(!{FV_l!|S|3YGdd^jiaC}!`-?d#Q0{C%jD=hbhiZGXGcuIH9J9Pck&{q_{c)%Wl0{q3n?_K|<A51Bbu;CZ`|1kj?N$ z$~(&O#f7~I(7)|UN<8F8;Cs)j|KPn_3t!z=^IPTqi zM`Lf|Z9iAPL-@2}U)G<&TVU(^h9sYcL$3ZH_A>8j@Di@AS-!c!M;g40PB`mtX|Q9} zkWZ1mbLp=r`7^>x)ZFcfp~57`bbUZAj(m=GvR(`>>bgo09xE@twrnqwjAm4d63_`CER;eEmK+^q+@Ln{7XvLGG{xPjkG5?Yd&`mLJv6QohUI3>WeD zW9*|nT=kOro$p^O`fK1}j-Nyw8D0*L!@rT_w#SeUA)kWZROD}iyNG*ri9cTCZ%K07 zW61k@$v^z^qHlV`)OSvA1djB~?`k;bcTJL;AIEArKZoH+&-^IQ`8k>7=4TP@C+Ekx zkenayl_EdhtJoIeUgc5ncG&NZ3^&8W>_1Zx-%waSj$<=A@#AK)%ukp|2TXYd4JOHqCW}!k@LCN zfbS-b;lHsqRTuri1b;L5TYTFuoc~*R^6f?bnAObn!0}snD=6Oq`j5CCeG)zdbD6F} zbuW7HT>95s&f01)-Aon!`V#yDKfA`(bv!t8ZP{1j1H-Gn!(0sg&--g^z4@;fRNPls z`^#}=C-LUQUeCFN&R);GzHEZ?_2zWq*IZkVSKe9d$zESFA5HA_uLob|>mN;a-u2Jx zUG#Te|JK9#`nLm){EU#^5%`NG{puY->VJP>pKaNHtStWX`n(rz7x{aLe;ocGo5Ar& zFTRZN$Y+rIT$gUS3Ws5z4c%7y3;ng6<00};1?+d=c0ujSVc+~tz>#15dk~KDoX|e} z=8|9aooftzfBUxt%ucYUA!n%&}MEACO-e!NX=Un+tj#>BnkZ!_)hKH?Z;=SG6x#NT>okDtb_;miy8#t4q~t=zfA zkXM}awKoojJ=wXG%)1xP@e1S%FKD&CUDCS&c6=87zwtX4&gu8Vo8iAN`nSWw@MTqQ zx%7>)RvgC>zxyq$Z3Ztda(O1P`p4nWmu-r{PlQjwbTd^@?)j7DXW=ZjF0#CxG#;z)FOo>#%{GH$^@~eC|oaOeOefd!0>u`+zeST@bzWcQUz8)QezfHH3{Z}jEeiR<(_?v}& z*K04w`CTdb<3;YfUQ-<3TUh({H(}pzO8VdfMea8_1Ms23pCvu(@0U~j!;Sc!?>WBx zLByY=?JlHjbmLVpzuj=;*LTYtkH@ng-z{4V$Gc^|+qDS3v&65~=z;aILHo|ngnjLe z!P%bI&#>paX}jTT>*&?Hc=k{ET|7Czi?^1(A^hbxgSLhI&EN|7g~guo%?w_( z{qyjWfA!Zk^!FtF2a{XBk)Ge|89%<+YuazhpTaxqJ1EZv`YgjDxJ7w?_g~^OOn^Lcz%WL)O*~bjrDeT(Jn*4PHZCWcl_6&osD)b13V3PGufz@N|REGhCewG>pP0 zVXxVS55xNZmcoAuPvbvc5vam#*dOXZipGo?b?=1Scd_xbLE1%^(li2*O{E4~z zn!ht79{H1ddgfStIm+k#z-G!7_X9t52mLD?{qrq9ThB*-vh)Y8iLniNtcfv#T>fy8 zJ6>J~=kf9`IL6CQ!~PNYveJLP7(NEK3*Ubw-;BYJWixC+?)BR-hGFZo=?gf%mNsel z89HzC`jo=YdOW^|PtnEW`(TEUv-cxkg*U)|U*z9~cf$`9R=y|6wP*hm z_AVZ-*TnjEihrsR|8$CP`WqL_Pro0I^d0|uz4MxFSPVP9URqW8B}dH*#C=licAINyKmfWw~mU%MJ?{f1osAA+O2 z`u{K-{y#;1JKl-$zy5W6ll|*>X@Bvr^3jIeb1mdgcvoFti%G-q-``S?C$Fioy5Ae* zIM?rHIPUkJLwwJ#D^mP%IO2OhcovTGSbvUpbN$)=bN!9Nx&F4mx&FL=&Gok(&h@tw z4u9GojKjJ9Cg7;Q+h~9K`vc|v+2HOXZyt2sst;^K3_crFD+cHu?WZWV4trl&(Bx8(e;{PxPEhetW|!C>5r|oxXPdT&-vR9NB*=oK>KeOee=5)&iVEH$@%qNsmQPKm%$NVUYFSZZ4?fB z_HSeG(vqIfgB`EO^WZ8!jAg@~{qeF{q-97j>7tD1DyTk{9X78!a6|t@Lw}~Bf4rf8wxRF&mh*F_p>KQ3`CkZUeb4Wlf6v#fZ(o`9+eu&l z?QEoPdk%Y3$VcJVqGNE4AkW{QsIgijXawF;*!r7EGO*^iQ;> z4d|bQ_hG|ee`v|g?w`zy*eLH!S@xmzo5y?o{ye?jvwND zvA^*A%;(<(9Os|UNBTH_-i!@{{m}@V?fX1B&Ufuk!P&m^nk1 z0cU&DaJJXt{L1#c*Uk3U!P(w+INRF;XL~2%u;+ZvAmxtv9OuKP@kO40n}TCLtXlKx zlDYY#^I79+BmDg0KjkMbo|9jNTz+pF=qG=2yz8x8S;*yOjA4RZ^UH6y zZY}Bk)gPYIaz1JSX&TJ0zik)!bq$T3aQN5!ufJ$6{|l)M=g%%H@$bg|HspU)>?>c> zJtzMhYov9k53k9F3p-ua_56=&tl0iD*#2NIocn`)aP$YpKh)4a(9l2F(4T4OA8qI# zYv|j5=KR=yLk~H z0}Xpy8uo^hzWuL#V+WfC`9y=g-|1A+R_ks5rGCG|F_qzyk6lpx7WoJ|!KZ0E!Twg9 zzxZ;z7PtIuKcBZPE^K=JjKMpJcQkkr?K#W+mL>CegO4=W=Wkix-;&Hc*kJEjvb=ra zd|sc}^6!C17PP8hd1v5U-cxXtSGo64S-uDkx&Al<=k%9zzGd!j@EOj(ET3F7pHDW} z`Nz;V{{!&If>sqwf8E38FApt_%VK`m~*7hcKnV@mz2Z~xdSa@n#4-|@5cZ>z@j zLVJ6No9*p|v%NEL#MfRwc?;IwGC13FJe%z;hqFEJ_aeUbjwLofTe{}QABJ=MDLBXX z-J@XRJ3pP%KLqFaw*SyKeSbSH*z$DXT%Hc?Kilhr!=CB6CUlnD{zI<)osIM7Y=dVS z=SP12p#2rC`S$-;>f87ujrtvJ)bD{t{Ssx?AIA57KbP+aoXfW))t}|{ekJ^A{C1;0 zdmHsR(5TNtiH-030y+JmMtx4fk)G-IHtN&yPOeX%Ph@+i;9Q)8F0DKa}L^A4#nK>4v`Z zWnoYKc4GBAaL%vy16hA_V)eH*^u3?Y`jd&(KiSYf-Hx`@5Xo4zlHd0 zd~T3O*=L??u;ZgFZ{v^5>l>`UvwW(-ryAT#{byX*MhD{^@g=Wnq78-gRfAH9?I4u81l zKLPn3__?+D)+e@e{&4>F;{(Gx&>x0>w#L>wko&y&X9}x-sG%>1{%-Q``oV&D1HeejZ^?|iD~54W{d za4n!A(z>$9wQqaO_I>{%?E5~9{M8cQ_hHt<@jlEQ-lpEJO8{7eqv$g z%O~NOe>T6)SLOVA{~Y;stak*C`DyJ9(>}7j5jgCre;5vZ%R2=}d5yo2_LJjx!x3Nq zZib`$`d7~W_4ZGSkMx|s_I@ztua&P$a_?U^;hVUh{n|Y>+vggTZ=kM1 zUcK)E=lk*PaNI8%e;xH3@vosXb-eX+9$b;cVtUr0=)Di?KCQS>rtjxVOP86W@&7{uL8dkWV!DOoJCvzgfS# zA@};2Pcy*Yom6VCH@N8vm0 zQ578Aq1&#hdLP>BN1m@AhGRbeyq~I{H-vqkC)i&sE%EQalK019lC6T@r`bQm_i5&T zC466zJO8=@j{N(6g7cgC{e&HGq-S~d!MQxA;V6&xchWy(`#a#UuYdNz+1_C|+w=Y| z?D_m+7o7bu4rhOK(cgqU{jm@Ze_Sxe^B4Gb{%%)62G>%^-K!GVg7$*P<-n(cl9O?xL-P{ty0% zvck3r!(*9vl|Rj9F#VZ^{`#b^+~?0>PgWkRedCAy2ea3dchTN{T>MQ1`@UjIa4 z?R$S4@nzTE2sS-A?5*Vcp(V8EKQ8fK4X=TngED*^_Wt)BHCEpforGgN;rB#xUy=Jg z)#3~1e^2H6mHkET_e$I0XBReqUjHM1ey=pl^*`H}!@mA(H|FaG8oZ;yelOK2=^6iU zgBM@YkT)YE3|95zd<6D!w z&2h-p&-eT4=lgx-XBzrmPa?khZ8+QSOLF6{O|1UrhQ8y~u&4gc#OgcV%=V8Zx%$Tw zt8agm_4EC|a{H$&?}HJ8^jE<-f1QTBKgq5C zaX9M#Z~D8c_f4WaSG}D3Vd^jJDIZMrseGg%Zzs9>dlIW}+syW68uG4GU&if4HHa+lT3Qr}{Pi;#B|2*EHno8uHPGd|Q(D?PF~m>MO=WFNbXp{}G=UTzhGX zy?-;fcGNWcHk-kQ;n6pA8r>m{$|RT;~#FwSCXGBpGH5&?`z1{!XY>PQ*ciI zbdsC?Ca!1M{t%qwui^TdF<&h#|=S?bJiHP4ehe^=GmdLG>3-+wNAEA0K( z33LozzigkKidf4O`6(@k$T*Y`-z`}b8`U-SL@ zN;vM{O>Yfj@kr17O(DJZ!{|eaa z$>$4K-xDW&d1qqdkHZn)`)$v+xZk$Cdy(hz(xuNUuj7$iUguA8dAMP=_pLu}voo`)^j-km9%sQ@BLu% z(IoeK@L@RWQ=Uw`=xLl!@Q;f91Ekl*_3+%1|L>6AFnnoY^#|b}r{ACSP0#tdoWAot z!M@+InQ|VlO3U|Q@EFI@pD5qgkWVMM-=iH#?DcICX?FOV!S5eOVcV!dxpmX2sOC)# zo@nq)gFQbZzWLh#=ll=Ak$=@Op}^09_|ydn2` z8u7L7^)uT)mgL$$mEy}?oR5*7&-Z)a6?OHrOYHq$ZclO_aicxS1Btyq9EBsl zy|1g+Yl!rfPc`JWpDcI2C*t4qGS;6+^`pJqe&n^OzSQq;=sW(&_Q&9`Z+>HS{}bsepJ~V!rTS9do9gS4H>8ZagvHELL`%v!nEbH4p1*^Zip>KQ3^1}`J z@rL|#L%xvu%JJ=wqCU*e>Li!@5}TiahW=QRt8e?t_V+gQk0iPJ#}aFQQEDH`y*_1o zYa4R=mnlgVC{ z-^A+Y_NLtNQ_kO#)E<=EpM_jrlURH9U)evS4f#YvZvPebjBo!H@#WlqJ&p0xS>#Lb zq2V^ToBF?k&EWXzH1g=bjBkGx_P%{f&9AT3>-Sw7@&P#Hj<1fu(Vi@C7ws$Z>-t%v z_-j$IC+|$``dD6n9-icT8gl!GkgLBhvG%4L`d+WH{=o(xN^JZijrd;Qa{OZro@ucC zQ|Pya2M*Oo0-+ZO`$L~k2 zpBsyP>%;3~)Q9;!4o7~~mqXwA;DyBRB98{=gYCbT*4R>iU9zvf&p)#MaMD*k(U9*> zay!ZsaJ$%7zo%=yy(Ms@?{8BaLO1;BZ(&TpxUmZUHiY#Yta6B{FUu{zC?U~+hPxLntc^ae*g}7_1hHidx~6p z`zU|5*AHj?gK+4ZzqR-y=Wjh6`P2Rs9QyL{#Fl5_d2{-vKLh9Vx51HqRbI}8EO-7Z z%Xc*7KJUwNf6F7scm6Bn{x(Sua+*~Y%x^Co`B(1zSeCC#a{aLj&i;HeR=X&33Hq2S)x7ONguf6u?z0ZB_!}Z4OvAn%8 zIs3E8IesJbKO66(%L0ZQk~rURz4)YJ&c~;KZ&S?gvva;010EAG_gjYdBN#7$Z}a_Y zm_OP7KY%}`IR5p!alblb_d9!>ugo6jhh4zMk{jpdlfrzqPW8_PJ_fnX&woN3j{;w= za(=$n7vsl1U!y(FUuKWrujhPKtM*%lWBv!8qnN+ldJ6akwYLuPQj~GF$~VIPL5zoo z6!Y`HqrhKO%=PaGu*HM-Z}NV5Yd`u|0&M>A^S>(K+fWCllK;Yd1p17Y&(FX21Kag1 zKW{$(T#P>^etuqpyo~|M{R=I~TdbJ&CP41(vHiTgGGNn}&*M>lZ|{VY)7~-2y}jeW z-rfmdZ*MN*;q7fhJWVd2??dkMF90?<{n;DKf5^${55M2y{n-iZ?d<~g_WEKz@cvX` z{xCW14T0R-2q4`t)yq%-#VfXZ_Y;e)0MF`M=LUJg=)iBZ0kqUrfH=$$5Xn zUSJGcNi454ziWAAz-CW=D-785i3rp|+6gOFQb*QGiIChG{}i zQt428bOPY%c$%SDsStD+reb;R`V!-nQrgKYA}r<0l8$mad2OfRji<6CIH&$C?9elr zqkHjw$oazI;I*HYSApK$HE;XqPF}m(0}pp)2E9(+ zwhZBC!Dv?eF>xK-3~KW%_p$4N2UCc|b#^DHUuSm#dwU0gy}bg|-rG9`x!Iduiggk4 zTk*$4`&_rZ{XxLqKBMXFbDsA0tANcu?X3g$_SOS?dpm%=y~DuX9RgiqqP7ueg|2kh-}o%i+zVV&{z z{B;ZCR}8tghpk~3d((iuz1o<)Mqu-gzspbpUq7t=@;bB(@9nzu%%^ef2#m*>N}~Q2 zyfgjFFfR53x2T-@$AL|s{fXH66ZZwDplkaA?lZ=ty}k$?Chjx1XY%`uHeibf_ZgVl zyX-R#0(Y?o`(5k-dwXnOZ*LW_-?y+m&0ag|%l3FaxF_v72H3}cJg~JV_2)Z%j^87| zRvyPMuM-EWy_Yapag-{b^^wKjso;H)&#C-6yy55k)}D;_i@+A|XON%wDI)BW7=L1m zKXIwUyl&?{?FXvQ_E-mO^=12VUt#S_9AO_}_!>-J#lTnO1OrlEV2cm+8=XG=JpgR} zQhy-wnm)^40&L~C+!8*=9I5{OK=EY7Dg356uM;@OF^vJP1>PN?JQs`ePanlszZQNM zsm;mP#pLb4UcMG<$=UzC z{8&tW)X5jZKU_L?Tt~(+@0;L!SE})1{L9c^Co5+CHUazkZ3g!B+Y0RCzXjO)w=*W+ z5tHwY$@j$MFT~^roSgMZV*EVm{67Y4{r125+}h{wBPnD_N~Iq%!@nD=FQJQw5F<2^CVa|ti!Z}fW1@5On{ z`;tB07sLEbYcJmv!>3}n3j2Dme;|g(CiQx^{*Zce@Vt4^|i(bC5M_0_}`gr-m zo?S7YGw$Uhi@M^?F&y>kDqj-AFU0T|+&Ap)ABbT-XWYxT#4ry%O+E{Kl5^#A?3_r% zCHOPU`zrSVk4GP7;(dt3tKI}t{|Mx!PkTAg_4eZOW6&`992jt|cv$gEknh3!&noVF z5zhVao@+Q$)sWC%>l9}#3fCj8K^##ZA?>0+2-x%=I16V*!-t|<-p$GjSkbFO~B?4F|U6N)4xN&<{$B4hi5K= z4C4vgc1ir*WM0qQqqq|CBH#}xrv5SHH+{;7$K+g3y}adL$k#hL&qbMkj+V!BQSM)E zK#ZAqF8U(y*#SoMCrWlL@1(OQ*T+!t*8_uq?RtRw|1z3T``rIm0T0F>6Xk87UcL(0 zdM^pk?Hj~)@O*KbqI&&4Rm5+RBH%}3eZzXibNAMLFI_V(IvJ5~*XIPV)rbD@b3gA7=Xdjm_RE01{b|5!)xJEZ7#K^U zB$n3#?8{^S9ISGdw;kA*$Nid>$N2JkuUPf@xx!K4>5BQg#Ycc&GJCi_I|=-p;_)-E z-l9L;sCYmlu9tzIfDTh)9Oeh$!H5A9ukT9GpDaJ)&vSSme_jt-{OLch2fhEbz~(>W zwF=nBs~vc4C@yM1N9KLxzl9zXzqi73>OTf3{ckU@kKaDv!7Ar{JltPcyuXP1=%)e0 zElC$;;5Y2?ZcBg>aaB<#=KgvJ>R+nz$&eH8Q%rd&V&&z;CSU(?Jhuh<^IZP+^E>4$ zo@!T1^K(LzvwX_UKK1!ML9ag(*y~g7_4&O7ug~?`>r?Lax!!tx z?zg=@<)(iZ{Na7;H)(%i{rS5>R)1nXH`Xxg!{_8!equh?(qsNEkH;rtxV*5dd}|CJ zjNy_Vo%-}=39$LI4dovP{!s{jM1P8~pZ4X?kKyexd?JRqzxMgZ$8ci|Z;#=_F}!1N zr#;@cgekw{z9r(BG2G%X?-SnwY@d4&?{S#<55@F3ADce!o8nkYgU7`D1A$FWJknv> zSu@qEGCJM83gUl*|1qkay?lIc@E1lZ)X&;5wm zC+2>_F!ifq`rMzGoc1>Wn|`FGPB}UKD{}pX`X#`oPdVpmU)}=OpIBa_ z!_;3F)8Fjmw9oy9*=PQJPELH#VcI(eY~>S2uD?*fuj>!QTu&`t#1mq;++o_Q0yg{f zuMODzBi<0hJkK*Z?e7A%@~FSx$!Y%(u(yBQ$*G@2mApOPCuR0{U-59)e~D+tF!w{& z-+5oX@885rT>m8A>M-x4e-YTqBaU4E5PPowP+scfyl;Olu+@)p_Fr$W-C^3}^_}O-{_~H^a173T*a>=Q>RNB~G7sRSa*8;cX7n-fm#CPyY@8n}5WI zWB7!_EH4LDGJmN*2-xz|KA)53?Uy+@_2)ZGd$qu3kKfB^2e$r8%;!>he8}PWa~=5H zgj49h{<#V4zqbF1>+^RLIREy?9}|D4V7$|(e2A0tcNKO4+wUsGG4pf&wDM-4^HU$k z0+RTcQ^2JiuoLi1HjKKemnLS;QGVc8xQR5%>*`k{9O=!erLb? z5yy;Q4&)ZUpQ3)$xA?KX?GDTDexUyLI~vbk9>&7!>Ob$xC_r&yHaQgiG z_Ym~$^WW=H-a_=ZtIJ#Qfcex55XVobAo;bz6HA^LHT(Z-71ij_&+W zT=WR=cHpZOGhVxaeY|*mZ1MU$^v4w7ci_;5OtgOla?VkcR z`#*#InYdp51lo{^pLZ_-em+3K?GE$v?`^==-(G$se6|Xfq=HBBc{<3oy#L1^xp6Mdi%T{e|WKOAXcr;KBG~;`bi7A1w(`em9isztui5T@D99xkK)UL_u>6`#nkuLSHwFLUGwh)_W2J1TYlOAU?A29iC z7|i=IH$S8CAU+ktV=(`Ed9A~&AMg9M`Vk*l zLJaeM0k2<-`QNbg2Vn2dZind)e+S6>!~2FUKjT{k?Bm-8?Bll)*vGH2plkm9z&`&W zV4t7&Bl!GBFu7X!5`Ty3Z!ykGy}xb1UVo>SAl~gT^RGIiYyKA@xBQeZ#2W1Dw;TE2GoRjQ>ciiDsYqYk__K9l$>S zMqn$C{xo7veAd~Y4{UPUAAU|(`}-jG_LGo%`$t@U`m-~pzbB@@71+vS{ELda#;+9E z>PLSzI86ObgS+ato!eFag%~~xeY3~>LrS{lUkGe+mbb@Y_TNDlboS3@AzLQJ5fGu9MPkUA#{V50b{Dq!=6 zm~z8xuXVuYAMtvJ>CXmW^M`n&!?d>@*xQRTI_;fK&ht4dkM>G{%|7c(dsbiOpMW@f z`#ewa`G?2yQ{U$=jpZK{%g^&cUq1DHeqTQQiQ6l1_87l`4zs;@yFV4weFEI-eaOwR8?aep}?3W@RO_f#$Z#Jpe2 zF#S0mvo}1a(;oeqiT#E5hu;&k@|eFIa$lb%z$Rz@1=x@H{3o4!GyLKGpI}L%JzlSP zds`v*_DT!7+A9P0@+~p>o|v4!E93nc18n(O{$5~TK0gmPIpcSvXJ`DRKLK0&Q$Dw- zQ%-xlKf>Ev0&MmepMqXp{V4)AIrH=LZl8aZljmbHV_SX}F=M&_cnRoU#XLWb@ZX;w zpMrcIm62LL7|x5A1}L}~?;c<~|K<5DKcAYfs9W=?~@RAM3L&zq3A+bG(?Gi`SmVf-+sK_F@4(ObDOa_eEKuZVfw@UoVU;Y zlh@zsF!g1@1oSgbR@AvuxfxZ2iPEP%W4%2_0FM0iq zPEP$T4pVQ4jq_SZQ%_5JvvKF5#gFUA8}iqZdUyz%}TexJkoKk=RzKIE|E$Nt6gv%j}t ze`E1t`Rg5K`I~^PeCqT2V_u)14;rREe@EN&>Cbpz@83w2?=i18441Uxeh+7F_o6U9 z&HgLE>rnsSV$Z{LI{g#id;NhJPj98q^9HZa@#yuBJ30N~^|aULdgt|deQI**?{Jv@ zzYxsQ0nKN-_6b>o5dxxRS)4Zz;MA3xMT71J+9fA{*l zzB7B&-{>&?;paT`T}{f$me`}};w@>8Gdh1V}Ze>XYxdH;i9>ht@} zUVoR9Q=j9->qqF1UcW5XKY6|2^*1{GFQGpVM}M^O#`}f#x&BUkB8E$FJz(R3`T6}x z%g_GK=d4(H^!KpCtltS>@9z-g_xk)i#W3~f0-HYl;qSUx`NaG@-s7VVe{MQHKSTYh z@yEpPYnOty5g^^y9OMJh=1fll&jhvKg;{bOIjEE#NIyVOUqCD+)tZ*+9US% zP5_&~Y=7=QEdO)RFUI^b7JZP3nCB55^LHIRF2;Of_*>9#1fCMIN5p$#I0y5I$)^s( z=j|BJ7_yQ^+>YyM;O4A=FPMPqec)?#e73(Dz8^FeeU#~0V2)SIPx*XcFJBOo*T&?H zPF{rk?ZB6){cC~O0mEfUlyAm6FW&-ea+bdn*q6Tx*!*MueX;!eWBEB>`TU1me%e17 zlb>>O+8+epy?@2P-alS{d;7c|F#l-3JSOMoF(#+|7GQ6m^NqK^HI|>(6PBO$xqtEH z?{IS3KLG6QzX0s*pN!?_^}n~z>k)6C^P9aee?D`rv6c<&-3wibap!* zkK<*KAA8NTcSVYi z0Jq@1eP5VzuHPpAJMd26zN%084ks`A7{31x+|S96I{5{V4?*nlF}oz@F9A0D6Ckew z#*uu7e4&%ihMeo)Kqu#XWBHdrehAn;Z>If&PW~T|55#!JEk_;p`vP13O_0w8#>eCx za;{eE9r%uiihd&*mTFJJ(_Qw*}bp6Yq7H{*A%<>-{?hx%tQP z${_dUO#`;__#AcKPyD2--(JWqKl=yo|Ml(3^D{4hv7oDb6R^n{j~uM0UE%?`)ra;^ zK<@2FSiF7yQ@}p|QDDped-%VqXXpJTY@Y&P%g=aC!(cRh#$zL}kH;!tiwFJLfX~;x zKbwKg9@}RF7JIMX(x6=Dkon6Z1S}ahUY)#sQm-Y_9Z04^j|+8+n+1gz|`|1sE~^cFYHspLnOk%wG;{`N#bf&q2q0 z@UYsW{sdsl&-&G3yj%IXz$Y<2OSQbQ+2Q__FDm{Ea53bzUi>W!_xk`_|M@-q<#^u* zADHM5=Wp|;*UxZ29`MiAAIdp@n|$Llh%d&Mtp}_>Kfkg1AD@Zel>nX#pP6{SF+b1o z_b2oFUB3)sx!?LE@Y9NiqkKLm{5;M7qc38<#&|4O`R{@GeSmR_>EBW4n}5u|2jkP{ zUk~i_^LZ(jpZW(d9=-l%V6V^n#Y~^=wF~3b+DrUJU-S7-LhkdQ0=E3r--z+)^%nqp zeLjEC>u)RSs^19g^;>|w{%(v{Z+{)I*Iy58`mE0?)X(a}{>N)U>wlEb$KW&h_3(cn zI^!+cKUkk_z`i`r2fn;EU|(Jt;&1jQp#Kbl9K&1^?H$8-_xAW*Aa8FUu-T*j*8W}f zYk|FfBe3c7ykiqe8ms>EJaRKIT#`ijHoWul?Z95XJ0{=bEpT95WTg%ViQ8@;AQtk8m=mmK1zmLxSihVzr&nw&s{To!j|2$j| z<2^saWm*9_$44Ie1k)F$Vn5~j%Ua+F_;L;K(2+P#VE<8k75q&CA4d$BmR*W#Rp7md z5z`oyHv#yFmUkU6&pUo^eH`wR(+(P7GqW%G=PkS4%A2WMw zA6`#c`!N3rV9U??_l?z`-@ml_Gaeq#WPa>7euX?t>`%O(!1_}hv-~BHTlwq{JRi0G zz~?(`0`}vL*K79$^U)HNw+r~2XhS9$U%*|)7yPmK^ZWNRfo*)z-`&n%`qP5_ocY84 zz6#j-JICKnU>kqLFFGvobon`cc)jPx&p=?a$MfHrP_gshpL{alldKF9#QoY>2` zewh4nyf5$M(BlhJHTX{Vm z$N4k*;)k_Aj|CnNe79oy$IlN;pZ3R~zk2(`-afI{FF}7bedaI4WNw)L5&QhamY>gC z$w7bi&s*W|7CjiMAD*ub{G4JwZ)FVd^NLyCDqt&*cqaOvVQEibE06IWg8t^?&GUC3 z?_Iz?Ke5lh3H{6G-wf>YZvgiBi7h|<JsBixxko)#O1^k?}7Up4$ry}TE`#+D($27?1sQfJ)UoQdt6Vvy*6NPZ?D6&w+`6b<9g!ll>>Wwn}NN( zLk`p4HeheB3hRltw*=VR+X?LLaX)96_V|5DZ;$&UZ?7HL+uILp`5C_gtS^RXkNYQY zZxiI+-ezEL@36~HdnH(ZyuD+Pdwcvonzy$T*xTdthb=$tjmP?9nEvr%#M|2o?CtFX z_V$ukPb@#}O>>yzVH>c|&*vBW{70QW^AE>)yxEHialQy_=e-MH?>O+RC?w98CxN}a zvOb;p_n|)ge(6V5pY~2bPJ8F!k7q@1J3TU^sPt_pA7A*$jFE3wap2okEL!+BijE@q z*!Z>-AD!_wEj~Kq?j>*6V%h)Sif=29xZHVL0dLQM;=gJ_OqNVcFBmG8 z-n{n|n@XUkS1j$SMD#|*_BSe>M)A%2JS<*udJ{3OD;g8VTck&36qmk*xKjkhPViRm z9+@FhEc*WTk_2j!v%+zWHf`qNChcy#l{I z#x;K|cc-{RKPFQ9Zy1Fg{3|+b@ZDSS5x1h~H2UC2Q7LnGrVcx$ojiLd`UbkvjOgJ` zMrZsJZ^DoAPOl&36`j@&_-jsQKguXt)7ikC<&uATeK{I{$ikhoQS>_ed;|X@!A=L? zp!yl-XPkyF{Z{>n>1VblfF12}ED$@8K_F|2l`U>{*TO}$v(#2fg>7m{x$vSukK5`Na{%PoCVe$HwAjI!Q@ zpOJH#d4vAEiT+h@!vDaV^{e8Ctww=be2PExCj9rGmJcSc4Q7JQQ3dYh%kkdt<=JUV zRnBVzfA+y^75`Zj?eVO`+gk*23`c0lg!@$AFfJL&S%zfyO$ zL3`+zUF;nO_V#!-?d|d2I`fD2crU48+T*>a-oK*QSp`3P^Y#`1TYlQx<}l;MdpEs5 zytmWmp9}2sZ*f@i$Id4D0{i?6fPMaL4oiM?pDyJC`}{n+@cDV~oMFk2vxqMFfqni3 zz@{(tcUbb{?4e73V4t7QX7>5FI4t>b*3czCu+P5$*yrcjgkiQPKMV5h$!9%zdu71h z-g;om&-%RJFzsyu_Vza7tijvkS-Q7(2-w@>Zyy<^y!d{1I zuMODycMwaN_wNv}w^tH78)$Qw_C^AGd+U35wa0t=yuBBJt$vK(kUpK5_6|et?TyD- zwfAoVu(!7k*xTc?cMQ`WpEc_39mQF;x5s;fyuC5~JM+`O^$ycsDX_P<8E4tv-WFhQ z?+CE@LwnJ~m+uH**xNgavu&s`CdV7O_ z&7Pbs0rPB$iDy-F&*^$rwE)=L-ws?V+PH@i{_$C?{;aCKxYHhgORo&NpHzL`t5J&g zw<&%VcsSnYVGU#AXZ5Q<&A+902K=Z0R9+!V&b#oi(&iz z0Oh%~CBW!HlKu%}rNA#ik7*I|^Shki)ckyQ{d!>A8Sz>F8-ND~^{Dsz@i{!!!#pc* z6z(N}{5h2mhP-bEjy)9fS^q`AzgK)I~F^)_whUqZ1LoHD8hci_um5G+cZDpT@38wT>@!h!GtBjLIPmXP&iL})ck_?&<-PAdz8irpzUPg_y?L0wr)d7m zfO)UI*=PUV2W;_U|Kxtz$LB?0AD`lWo#k`9OaS)rSq04aXqS(4DB##FBxI5FSrwE_ zzgzI#CBduDUJ&G1RwQA0l*DreCTy1_rIgOoH*ixDPF5u427w%G@{ONaxRTf=B z(i2Yv`jgMsNrt+geqI1(3jjSI{h4W= z1_WJ5(rqIHO=~@Wt^9FHFPzpc?{a$=3!N{o*i$OSv?}R`H!XeYX}rVh4{ri}Z(w)) z{xBiyK35(3o5~xL8ATiMtl>J$e<6j)ypBYCSEyDr=A0nis(vQN2Yj50ovG&<>u{wh zZh1Qnq3;apQ5H9PNTu?M=gBC&TRA62Kd$t#vS0_7b&?+59_R&q`(4Q@ zrvpTJp@o}uz^pC}g1U9VgZI4tVB*fL_$Gr6h+7IC#Y`SW%Y#}p^yCzY_>7^CZJG@p zUS|vi{ZRjZpUAQD{ttxs&C_<^=Tc1X(F(N-3i}1Vt@>W5(EFADpwg?9E_ruw)V^oc z_sZ+=AJ;^W48eaqUwZiS_>brG-IvCH@HO8`rP@6@zQ^{uP8@frU(;3Z0;Mu2@LoC> zsLkO|3=0bXp?bF}tyenaaHz-Avje?J`SV5xJWm^7-eo~B@BF~$cMO>3rGtd+!yzc0 z2=v^$d6yUP;Ezlz!G+g_17|BKY% zzLH?*Dvj>~(Zc>ysqH~?wgtxZ${(XNw=6iEC<%-ikIjC3?y!5KKxRZk4u=V9jnykB z=zT%+->v@KR~#7PJl>Ad{(f(8JNmX!%|BV~``bfrF#NyC&}NK6yZ_(&YVnS@!~ZdCao&g$bgUTbjkGxK zMqDMM^W*5a=zkZtONMxX|2JSd{(pm?{|9{Rxw^yXmp^gK6Z38ww)zK8d~X=$fG3|A zHt*@#PY;{3I!v=VEj)hxu+>k_oHysGC!Ux|rEkrBa>nY{p1k*_2OfvsE!2Aa`qkf? z{q&0uJn$elf1Jp2R`=?4>7{-8^qL34Gf(JTPMj#|Ooh{O)@H($%)Ao3WF~IUSUqiBS(pE-bKW1F{X(Mi|LU!o z@AChPugz{L&F)>C=v_Q{O)iQ`+F##IWy!T!K>W)_F*%^Qpt*^}ntphnkN5ehes?63 zIcthjIctl+E6OgqBj>WikDa%=J@Z4++B3mAGb?9ZAym)7--uMs?dN13|@_SS}&P|oG~qP%j((f`M*I}N^uLsRQwIQIBXKuoZoNq1vzW(MK@S8I3w|i zL^4Uby#pgaiHwXjiL5?r-jzz+F=+_qkJ2e?p3Xvsm$Q4~3mbn=Br|SLLhtoSv)3m^ zVzJ99y}LBJBazCuBY}PC*7qe=-&t_R=&Jo2&z*udi?G|u;~PK_QD^{U-X)7z`wjie_mQJMcM6&zY2W#_19mS8k+ePU9pOy zO)Q)J?w|L5^(&J;{`IyOav%Kar2o!*{=TZKzA@?3Z67}SYs(Hyy78XDn@XmCZ&LE_ z_hV@Pc+x#G5B+))%>MI=5x<%A?aNnJKeY8Xlm5B(qV&{$e+6GsX&@ujpX1u!UU@z6 zk1O5z?o*Gy`n_uwl~1~@@295z;?{MO!u<68Nny(Q!z7u*9(Yyxe^UAnE$7Bi&ib!v zdB;od{ow^i^G75Q4>aPs5tG&4mtVQ;@AUV}=TU(4p_iZD`q!`Te0TXPzx?5mGp{cD zGdd{K;)YQpMvom~M|y$z=C7KI3gNoH*m1}$wv846(xiU|YOnv?YwrR*)fGmS6}7d+ z)lC(3>Ef1#hT__arp0#2+(py&l_&o59e<$UFR!25MQ)%|E}WRRrqxN)ZH*Q6RmGQ% zzIf5fmUQvbPD$rG8eugv&dQMxT%Y5H$Q{dn{`q5u9M^w(RaO{R?F)%v~Ymflq=)Vy1jOH?rOqr~Ped{m&~^sSA31^gr*=|BMG6_x5qDGFiJ@f9nz09qXDbis0Eg zW!KYsOwsXKuB~Ub&J9pIdc4u`yvQ?^f0k1HXsY9Rj&`1Sj>?Ob+H7X)qs`+bDz|e2 zJ1@IX`P>^Y4GpB@xm&hg4_Cgeuhu_o9UrOkQA$TEy;P~4583!1r+iyL#w*t2wT|Bf zzg+nfl-fDE!VWTW#itAIZpq1*{EO$ZfAhnEziF&!S(3ZBre#U%q7ju1b(c(UzB*lx z|2I}#GNqxeuAyn=C5tL5m!|8hE~%`;U*P4{HB`O5T)9K4(#zAeLv!;Mwbs;D8*6IQO%oSaDr?HrYj3`C*5oT@URgGAl;cggYUbprb0&IDdHEZ8^XI>T zH?yn@YwER=XHS_nv7)JN+!(bs_1bIaOsuMCT2WKq!I?b!nsH+$E+0Q)q_UP*Hcv#n zI?;%x^zxeKnuhv`mE*>yE5}xjSv2~xMU^8jt*jh5eq8lCM~|u;cUfh6Wcsr4=|!W* zq%Rxm^0w5}r6-OaIeOg1BgbAmYV_PuW8O9DvUiQS>?Ws!VAWLDq^l;jG_|Jl{x*8b zs5=K1H$`i&D4N{=;2*VRZQ-@;fsIF7$8B8Nd~V|t8&yfRuF8=bIQhzt?;E?va|q1; z^my)W@6Znaug~9h-KQ5QQK^ng+4$l86^f@QEmL}>(yNqCRXR=SbftFAf3@P7O0Q8m zOX;;r%avZIbhgqtO6Mw_r_?_8xIyuJr8g?I&yU`t*gi+G&rSbL`8O+FsI)@qBBhl| zZC{pFT&;Am(j`i3l-{D$E<|b-*D0-6+Mu*i=`y8FN}H9oC~Z}`TZA$Gj;#S4C zDP5(MX9P_D5lFOJX}i)jO4lmAUFkZdcPPD6>HCzfSNeXXA5i*1r5lufNa=@_-lcS- z(vK*;Tj@PYHz~bW>3vG?SGrm0143*f(RQfHY&nrEk^xI1ROX+u%zM%BG zO24P{`$}I_`U9muRQe;O2bKO<=}(mYROun5KU4bON`J2Ou+m>B{iV`hDLta}*Ghk* z^d+T7mHt-g@09*t=`p1*EB%AgSCk%C`l`}DD*cnv6H5QA^e;;Ps`RANzbXB@(tjvD zrSvtW|5W_s?2XF~4$!Z03D4;n``a#3#? zL#jkin7+ikjDb`ag(5)GrxSE8g@EPdBWt1bKNv%n9B{xZEYv=NSkXz=Br8kXpSc4Y z4uv*G=4@6guSd^bz58S*q+qJiVX*V^<=z#^CxK#^bI%ezx|k`kLzuJA3wb4WtR3>_ z4i_G5Q9+a3c%!iq0*~<6U#TzNO0eiuDS51$=F3I(_$E`#>mz zy%bSG@Cpig;5H~$1Uz<86afF^9y{hkWT1y;>(S%09eG)Tbc3wjp$r<(dZ$ufB9FC@ zdZ7#U=vnj~;fcG_<}Cfkoq0pM!^fWqPeQ;V=uFNzD5bDVfm_(KsOT%?h0vp8$XLodAUrZd1EYC+ z{6y^`3SoGl{9gpU5Cpads`qlR7y6m{{a48=Wp})E@}zKfh!mgYDsvNS!bZ!^&dbh} zEDRNSoNV*^kOvMSXN?|3MMdX{o^+MWOoS%CXRlsk0+02e&yp^ayzJrZ%^YpHc~eA> zy;2jxI74_HBT$;|`k-fuC_gJ}f$(HvW3UkE!XCGf2bPRhmWm$JDm>|Ts7XjG)n23_ zrAuo9k6AS(Q|}WV;)Do@(};oHbEJiUpO^m-^-$Ze#GqdxJ*j0#YfAUX&i<_OsLioY zqhBx{6xq$$RliOiF$ce-?Ck#%J?#as$149s^^)vW1-<&8`HsOCB$LRC-kqC^fD{$= z>WwszJVr*s8rt|B$H z4E&-#{a1>;6o)O`01I=(ha|5Alw%TM&dt3qIpgeeFPuys zT0`nO=z@zc88zmzee1tT^3=T$?TqA5;Yn{q@0K1|^e)Ydfs_wNu+Qn!=UUO@q!EIOWuez1 z@??TQC&iSAn)KrLlhE(cA=z_-!8?VQ>|1i-(4oWlxf;^vg~u5JiSg z&_jiFWFqf#r^$Od-d8LyiU7uFqw01FSQ{0q@z37m&Gr1J}24tW`Owu$in z9C#gZWvl*`yfDgT{PE=B*GdtA#AumJC9U3xM!5GjoK;NinoHOXl~sxUa*i z)4SgQ^s2K44H_XlX<)AMbUS-2d9t0va)Q<@?9r>w4D#5Ud-dr*@XSH)IH&mBb8E>9 zlcE&DnW9B_>@h4l#Cj!pp$J_Xa&p!LJz;BWX1z~%&Se<9OL)u-EruT^H)&qR3mg`c zvD%uHr_~Jw zf1P@=3FGR-Ay`oGeeyWmLZZvbA9vVe*YvKPx6E z3|3^~uDCaP!}WpZe9p+YQSyp?i65)|-VS^0v$@<(_H9;PP-4}xvi_aC4D60HVU;TQ zVBqCqf$q~6eHU}_J01@_?h9o8=OX-h@?`D|Ybv@y{#VJvxX^7QyGGu(MGwVsGUm<< zbM!Ank2T}S#bk=*=a0feeM9IZet!?V%nBm9XL53Hmoj9eNfBgj5FWjdO93v_y*?)P!ptOt5^MP5 zqK8cls>OsR%HO5D(CI^`d^Yen*ytR?lC@9mbqsQ_zo~j1BL*$-%zOq5uQWzU&+&Ldyk&n7544lqk#5M02?h#J%wkH7dkjjv#_ziZf``;Lqs?P zIcD#(7*?n<_FIG}aS1b4QSW}A6MN{&I20|y70EyxjDAOW+SrmaFYhP9 z(@wzRk^WokNqHSFp2r5I-Y+dL7CcOSJjy8gW8kqr$*jX^=QXpZO-J%i$wTc?1@wJvvXS_`Yi4FYc?D%3VYL}TM(>R)Ju4Y>CV8^dQ7fd`K~EZ&`!}Zd20cdDQg&6)qZi^FV}Fb2g$^M79=)bD@L-Q) z5D7cJwd8e-p-|rs274i1(uuONJ|cNhL}+e_0-txSBQTuiU=8>Ld5ke;m_7psVpDkT zdEW|pxSw1rhN8bu9vVqBrFjbqeoh{1D-#`idS2ddMNeGOFlT1IEcOs#p75YAV~Q#K zhvY?!*|IpP;>BrRPbng(aplJO$RP4i3kHv8JUo*aO`eRZf>1EFZE}U z7ovh1a^KtYjAi8E3bEgrXP-Ox{2{nK>9Wh8A}`FiJk61L=u085c0tw}dp+_xyN~qD z=T#39Bo3xj)^|mZZ7D}T&fFwCvlZxjf<3m6rJQQ=;4V8YVkn)w zUi9d6N6D#Xu_x7}F&Wg$$zwBwBo=PdydgKurc&*aS0)|mNLm-{u?`(cdD;Ux40H1C zGJEt|R+*ySkC2BZmt{vTrwa=|ZT8eVl$?56c--i6zt0gHptoL>B)EhYZp-!G;q~W_f zPYrG)&j$r{xu-*qg5cr3K~I3i>%k5^8Vl)-yhP%omY2f~F=ik71bJc25)Qg~k6nRB z^C8Zd*`AX!Ld)vVN`6gvRw7$4BjX!gc_Q5ZmOQDn43h)YV;gdK$f{CM@Z-R)sIZgrku{hLPlTTtsmA78JZY1<3idQu{EQ_pub#XNUbXOu3kUy5w~HRjwv>@^N63q*Bu93! zSf-2a3q1BRF8(sbd|Y|bLgHmA6}}12*#s#J#N4N}4DF&K`n2*;D%fn5%*@XQo~Q`} z;d#dN*i3rGwU0cGDkK(xi_xBZ_N0W58)q!~MZNm<|DEKOW)n}i>o_5LGWJ97MYvuI zdD)#&FWI~2=k~F9bkIbe@U#{z8&-<~kKO=rlxJlPP@cFbR&(>t?X=esh7$6Kq#~g& z@R^xlYDgi1)e)jcIqmZx1lQQXUO0FOaml|@^u!g>WoMWbcqm02=Hiui6M4b3xXi|^ z6nn_4ImufpJa~v=c^b(L+seSBlc6tx`M!`>0?l$5$GeON#820_fILE82uhg7QJe5c ziVy_GllA+I=}Cp*Fq&kK*bCWVKLnph|otlmsACw%z$iSe5lv^R`Re9l?e!E#`q|(?}x=+@Ry~qU)?V}*L%T# zNO)bslKmKY!4-)CB9`@}+N1xLo(lFbjiJAwy?LzvY~ZnSU`yx7`YL&h91Mvg@RYv^ zk1|3CIQb#|Ke4>%0IVwy0bUAv>=hxQ(l3iWb%doLy&CeuXlF7WgHBI)U2;n8X`F?; zu6YsEpoX&Z`_WFQsqWje`v@=8Buu9{IfKZPrlc0fc|qaOpeNUBs4#nK(PiYZy3j%0 zB$b(75Yd<9G_fZJ=`ouvXSVP{-rRijQltvWEA7i(j=OG(dbg6t<&8@l6XLg4^ys5> zJw`n9&cI_+qDamz`91CCtg$vn7k!M|vEsS#c{9Z}Y7dY~>b7x3iIxLd` z1C~2S^up={$n`Ssy+Kbp5!(aI{2KBk1`=eMIaUZy!pp(WO;YX}%gfwsZ`>|)H+f7b zm~F{&9ul6!nRhQpdMxP4;>}8MCfa3rVUCJ)@mbBAkd_SN{F|mHoko_1obL)x+JZ`) zu6q2OJZm#{1o-$n@Z8QB9> z54SjQQ&PxV0fq?=_GnDg$dFeIpiM zR917)lZz5Wf%oDRt`WV?QmB7Nr#())(gp7ddeV|Coat`S(*hWNqz3~JaSIr+%6Wu5 zsQL6*;K^o<{TZd??IbT~a$K{Y7CtLH34nAOy7P7NLO{`}c*&Vx@cocCC_)q6FzYAE zV*~&>YVwX~-mptVxd;QFgAIcr#8Qvk+`oss6olX)FsC|sEJu1w#y~2_#1amEaPD&k zc_H#L1X;Ut$zvHBE@r+!c;rYwlYm_;_C!nUgPAif@FaXPX(P_^2s1S%3pb)QL-R^? zrGX23%oiTZl`>>Ts31=V7bC-Q*dRP>-cZVN;i0PBQHSQt{&(Ynttqozd7&ccYzY3H z!Jaj`^!yK#hfHwAW{KR*E-xl`Ne=}cd=3eoCm#*=Bs&K?XRIB8$E%z$BcdPdCNB|g zNaS-9SX15x%JZaUVF8sGU2LIcwf3REjnC~C>V?L(W z@WNkEjde;Zu^P?Z!_}@SL*{8>^I&1O+pBweuBO`D6uOI)% zgQK&)c5LiLA1<2sZ2mX@_UyoSzH7lB{VJ0hSETy z_B?%~`P;3$cGWXKa)RA<3!vN%7s*eVtxOzCQ+w<~?W(hn-VSLyvq zKc@6irJq##l+w>BeOl?4l|HBRYf8VN^!rMGuJl(*f35VlN?%d>s#5zNh<&j>e7^w0 z9u3Kar_o62r}PY^_Wc5V++t+k8IbP@Ajf5@H&N-;O0QG;9;NS9TA_5Y(gvliN^euj z2k|i7q4YyaKcY0;%isBo+{cvvX{Dc0`i#;qDt%7rH*KY1YOQl*zEy5WQnR%*|atx>#G zX}HfmiqoGo`;$`jXODl>S-i z-;^dYLp)MSlkJ6i!)+t@4v{~s2r5{v! zm(u%{KCJX{rB5mSoYMbP`VFPeEB&t0A1VF0(qAimRq3CV{zK_&O0$z8PPs~ZDm_E# zSxV1WdZE&A-#MP+qj-waaGyDzRjv41rSp`&S81iv8l|h1u2K3yrS~ZPn9@g;KCbjL zN}pBwoYHS7{kGEYDE)!bUnu>(($|#AW&k0{Ole${<}2-`w4c%eO3zYyq0*sBFHw4( z(i@b%S7}=53Z-k5-lg;&rS~d*Key92y{oFI|AJi=#D^l1iB;89f9r$bVr~&0^JeljzD(= zx+BmXf$j+WzY~GP%~4``l&Fjn)rrJaQKB`Gm>ngSM2Wg6(HJFGM2Y4ou_#KkB@#0e zi78Q{DoQjZ60@R2eUxa45*1NmWt3Q)L;ad4u`H38lSq^&67v&@8xx7LMB<7>;>twg zx5oiHvI-6B$=kMH$ujYi^7(8Y}U> z94ql~78M8;J7mErH&rYNJOEy}2Eh%%PcL>V=pEu-)^ zI?AX3t$_XVDUjoREqJxiuSOY*@K=NKT41{gvL?tDkHjDNb@*#q9A&J)UsDVIptk~a z1?W=9T2M|4a2k1=@z<~vzK+4)SolsI`dNlDRv-_`Yo-mnUqXGGU`$9@2rV3mXE>TIQW6G zniip)tD}r6*sr<{xCwECo!XK3yA*$8qRgtArbOnIO-)he()7wGb9qH=l$nNN=G>Ky ziOe}I5LDN-M45|PtE0@i=EYHFV?|YzxdQRZtUzEg8>!N~vKh*Jxwf_{kvS{90s=H) zX3NS(>QN=#lE|Eyu8%UCDpo)_y^JrFiOlKs4T;Ptttj%Einc^%S$cUQb6yRsOqG{( zeIoOEdey`nSEpB^j8-_*Qn8o@V03bAEtL7LoPx$0 zm!pj`E2_Y2Ze4_ODXu}HyjSZ-IE$ds~fM_(e;$3rk8O$%b1rAj*LKpyU7 zn8hNOE(a`2BRF$s&Pim>X4vP=o{2IrNYIR|)(XU+34Isu@Y3A0Jj!fsLa>{gAXrj` za$D+PZ}zBhc)4^mV*o*exUm!gtE)ihu90rhgs9D75G$9q<)ST7{i+6(QP0@V;>+BI zG2qehYv#^l3qoZ%TcLRz1kEe!5b>$gSxdChm2EVTh6h#bC6k-Spee%3IE0-|QBU)2 z=;@iY_3*y78ZY&%)}lpdk3}_jSBde9K8|YDHZOs@t1$dM#93*?c~%4Tu4_e)ot=iev#Bz_0kJP{fR!mzrl815 zMu`1y7JX@Mh2FLG=|pm71A0wz&I)v@WLZOfI!dN%({)j@vIP-ORtcxM1>GjuP+tlC zYbu(TCX#5>C5hy$iaKyGChMX~5lp7_RYi`9W zf6N?S$?F_&kPE+M4m(o%oR*3fycY{i;$buRQL-tGW=S?RAaKcR8!;Z>Pjy2gIUTRL z$*W)ieu|wND(L45yfRjm$h#zsE|RRRsSoc_>lGCkjmbKR%q)zqL~^pc&XL!$ik6B* zvK&A4j@O1J*ugx|lt|trwXPEBtP0FG$$9lPZHOx7fJAbN)M$3Pa(N<&e$b59ie|ADKkOX|p9Mu%oa3tm?&VSH{yPe2a=2d&?Li7|O&8pAtzlk||fhI+JM zJ!daO15;mej`W#DD`}wxZHIcvD`p4iEJ9tN$vHiFMMDGhr%0};O${s9c9QdE;A(pIIgoz5#kjST-(5r`u zH7pjR$gdg=pQ|xSk+)(IdM~HZWTU*tGQ#(jSnly!iwLkcqCZQom|4S-f@zjz)l^r* zw+5EAxB*)Ov<{;U3&@LU4gS|wV2Mp)@PkuZ!}l#U^(#?}$_mt_u@&P!S(|3*brqPW z(P~R!p@|cUwp~4E=p>d5c#c`bHI^w4$aKwOi8A49nBx^{NK8Ce-0AUePPC62Z^vTK14d$d!u`RF8UL z9YKjLn2|7k5n*^$gM}Nd#@EIg&Rtl);ag4f_2baKO%1S&IG_j4!z;aIlxouz@NK5N z(lSOOS_iWqMhg2XtyRd#TGm>FKCnE^`Yw?cT#>F|yQDexr#DZT49l~p!xPv?|DW4{ zbu2l(supus7}s-Uu4|ULqCCuFX?jwPSBWR;l@3vr`LMEv{jd@G@HWl)XHLyxyk0q_ zY+53DT}?guSanS!N}K{8P}AkujN%pB(PV?ne$C>4y0Qw9pWIA;CL?hiNh@QQ1Irc5 z(SNXP-GIC;4VWwHq%UCx2B%(H1Zx-Uw?YaZGz&^S?wGgMO|g-s$Bx)f*rn-i(I zTx}95&WJ!)E^Do*O{A{C9Mqghp&K&8+=itHQ0j)7s+J{DYDE*~z9>~&!ycTfY-q(~ zld5RB^4hDS6ecH{z9Fb!1-k;Jle7uBu2RSxAZ)F$jHQ~FR5Ue$VETnkE^XIGDa^vH zsKfN;vYIB8P}_h>JT+wrceo&k9ZACqxHN?_sE~>5vRtJ&*wVSFYg#dfGCSv7RHZ82 zmPoO(s2EohkeTV_*i|8B73gNESzMoBGt>x9VB4CST+42e!lrV1eU#$d%(yhqs;OnM zX)GEkbgQP7Aa#u`E9sJyhn~KeQEI?6oJh^)GMGql5kU6YC;{#^H`X$OHO*yn=7P{c zqUILJYMNVHDp7j1Gytl}>aRO;>p-fpQV3Kqvm-+rNt!Df2p8`twYZY&MheRhJtGgj z;ASp#IjNgz6J3#EO{C`4<2oQpwFZ)A|3r<_Ewl-DF?LebHBDF^q;X)S8l4E;6sunY zRBGxmV^9;r0uEN7%}{JZ3$3&?Nv~T{i7AIRC6HVs(GFZOl`KPcFiBRV8&MF7#ZsB7 zYT~++;tV`0kkOD~)KU|D5EWZ|6}NRzxdK;R?AN$zP1S{t$=w;OuxS~Bl{NK?=`L5F zR5RRUhpuR5~=DcE{|1@c8rfRBl2E1GwKS{p-&*AA!j9n*f=hgbIYwr|Ek!`d6a=9XO@==*Ex7C&r= zEjB~CA)rxb@5=mUuuj_34pbloC`J!qH96`ZOk3|t{~!_`zJ_!4T9Y?o1{wP)rb;00-GOX;rm?-RLa76;PL5w;X1@D}4<2nj;Ltn4 zbMWq~?tu>d!2p8+4&T|`V3dMk!M|HbzW(c{7>@9fyLr@uhUvRr%b39=bb7lz5dVSP zo}GFKKt1pN{In+#bR29r)`8}BP*n6iT6SXl^xXka4${ya93b8PFy{8Q54WLYnPQ(6 z@1m0>Sh_tFTI*eKy(VCD*u!!|(jrot@9v9udEm%{m2P=CI1w|yzI%G}u1Po~bQ_z| zRdX2Fih39P`}{d$_IC8~#}r~HK#`x>{$+S@BIr(8!|x8P0N*{ifnHXpUx3PV(2Svo z@C+d5O{T(ETroT`$hU6Y2?yVopDuY1!>|6Mt3Ed7@QH}$<{;$`YGBTy{X;=HCe|*-M6YSXPHs+qt4(NXlnuFRJa{wlRt~rLz$NLsZ zjk%}DGHi*tpZlo(Py5io+>3()BqhK128Yw5tA8B*`#K%h{?otUcHH=Xe#^(v&*S%E z&c?xn@gAOleHwF{>4#WI|7Z03 zYC7Ia$IsJ|ac`f=Z!;$|5m+$?ZeTvt?6?2Cj z+dy-@uzu#o!?->i%J8AR{6$gBjXHX;IfwltjWLHAFc7^T4tsA^Paod_<`46AGDIsv z-_pt)M`&E$H-H~bI08TLd+GkCg3)vRiLH{k<3vXY9~pmhouktMrpVmsi1tvQEvV?^ge-}xe>o(rq5xk`#zgr zH;cJ10z=I0pYBWd^1jY1(KG7x1pr>-hWXT-J3g>WX6_`cIL61;+}tQky}8aAa*TE& z#Bk!#p0+f5WA2xqea6sv90U{QM&lvqkKenK;qG=EvCHN@Lu{a0=RU(yQ9rHHsmIOZ z*dHJ{>2Gf^ImMWqW3-Rk+=sO^!7zi)j(eInoL$g4@4f< zrDO4LMftsS{4O1@{@dxfbo@FU*Zw%lzfQ-se2(La%|&G8-08_pdGHS-F*Zf$GcL5o{0HA-kEp)B<*wYXzqnic$6=4$OULi?^?wrOqjW6(MzULy{ql7>-uus@ z{F`*V`k%-3*XelUzev~VxczNhf1i%q|7Bc%n~qoitGNCq9k2e)xc(s>zxl7@`t$!L zj>UhQuK(4Grkm}JuwRS6lI_^76S=Y0w&MEhbo~4e^6$nu%r6eNF_G7~y(5kHH*ezi zdr5zPmyY-LL!UE0LT8NoxMx=;dSr}8QgU>Rp1tue7H-d1>G=6S7}w^XzUcqqKv?SA zzdy=9{|DmuO}g*9^8OdrlUM(x{Jh+uckgIkrI&QXLD#+a$MHLKf!z);wf)|ie$59% zrOzdQ!I-oUH_$;J`y6-fp!eq9UrE3J%lSU68btx;(2^Sj{pNskI0hx>(bUKdT$LR8 zy*I(jS$em&fHAUz=0rjDKCe%Mn< zp1`l|6XxT=@Rac}KXVOzw>!K?cH0CvclF;7`}y;9{PMqx>+k-DIBx%sas2XcrE5NF zpmBh|1r)&}Mv6LmJaj~0aBaCc{`~)r=NLzv4JWhaBcp_uEWZZ9fn;XhuYls@c8%<<3LO{>B~ue-gL=0 z;+2uz0ovZ%L@&$TytUn$lk>SZUYn2he4UTYxc(s>zi-9$Xd$(m53*=H)|TSm8iyKm6ly-AZ(~_E+Qj>K~Q&nUB_zy$wB$&qh=1`fbRk z-}(0MUWoVnUvd2WZ?E~<^NqcMT(?~&eWbt^?Hej!^4(m}%f0zHexHtCtz|kQ`2TqG z+1fYJKg|zLoXHP=Ij*n%J#pWc|8tC=?82@9Ik-W%lKJg@p;-Lf{!lm@T;g)k_noZ) z_VZEu__gdcg6=%`&0h}r_T68NwU)KK2r8G~w_`s#l9}L4@?hX~$`+*OUiGIKSOMlKs#&^&qYAriyd-&!S<0eBH zT)*LRj>bdCuagnE64Zy?FT05-w_@DFQ=z{n|4?s&J=)h1zQjmBBrcxt8S{*9M}CU- zq|@)Cf9+6x#Qe$m{Y%wzY&*x!aIOjPE9^2yMuz7fKMY6(Iz1UZ?tO9N?*=`7_hr!M zw||o8^xuo)H|hBO-wZlJKMfBLk9*tyY@)k=F4JFkqBq`4*WyRa4c-g5nTk(|>mxsC z2R>ri=M3s;r}qON$V~cyFxB?0Vjej!Uvz68L2sw@{Ivrh*H1ra%*!)~+0>Zdes$>R z^L#iZCVq+xfL_7PC)4%OsF){r1lHOw=DWl2A1RbNpTNJK;E^sfydE!n#XX9 zktf{4IrDz)lbd!|%wLl|g&%a@{tX-(ae`+fPDIbl&MA#&RHtLb4WV#22HM~R%%*S; zZ1tK17;45^bVS~hD_`(DamzDR-P{XV*5UJ;y4vY_VWoNzCo@PSY0yYc$Gz0?5l`7Y6;9v+$b z-XNVQUJU8PYfD5e6N9}5VHVJ9SdrDk+A8kBU}BofZUf3kJVU#dYQ z+EYMKFJ*j(CXz3VcX>MluEw9>rrQ_q90oVi<^G{kVl*1mLg-;$kMz3C&T)TVd@Ab2 z?a}@y|8$bZkO+}SLpfpd1d$jO-rgCGhxoE$8ddKxj-Sl+HWMvLXIhwOoNbkXRxWLs<`_; zqX`pj!JWAE8uLcuqA`&cfq1=?oGySY10?{B1dt;O6s?m<&nKb{oMDJ2#H`Tq{2l}5 z6Y&ct3=3jH2Co<`M7N}+YX@(Egq~0;_kclokb01dQKC#96D^bh0;gsq`lfsaV*DUu zCO=w8!rhx8xhV7GJ7Ov(8}(GS@NoNK@> zNa)T^Z*;8CDpNT^4nqkDIw=?0qd1aC%Mw732kkStOey{bkum*(FBtIhW@yik9|4l+ z05@}!$9ac@w9O4DQ(+VgW0Ossh!dZ+sZilt&pU$|bD>F*^K_n2gVCTgh$I_RaB4pe zlqno_j2<+Q@`(tFye8&!dR^(28oIC(NXpcS2OPyn&A=wfMoxxkAVPQZ*LZB59AS6R z48r5m4y}0rj~dp5g%hSmy9<3xFn!Hn2a^SeiYRlw=|gXg;s@S~_-z(7eq(Sz)J zCiiXV0s{SUqI8!SXDp)OTiV0C@ADM(;&BpBt$d?|{Gu=h zju?2GJ(4F%d=b3N_;2h!zuA~q zn2#TM`y}!v#NAHSON4!g$4%j=NTQk8^qLEp%ajS!a-@4+nN(K3WOww&F}#s}FhA(_ z50yVAviTSulsw#$6VGO$l7B1#7#Z#%j1>lq;-X4OMJa3%2w>iAd1Inuc}65%6~;6{ z*iW8qaI<6GN40x zQ`wIyYc`$Zg6L{AF(M@SCXMC}zwRhMscFj?)3<2y$8x=BIxhuIZAO{$5}G|_2}vw8 zlQm0OvY`+BtZOcsmfxtKM)UD-H;j~KvP3>=G_MUO>(W5Hmou|klVH5HeY8q>X^rL{ z7C}eWVpDP@%E$>B+X`<^(63T%)bhzkGKi>|roXXi-gF54Gpy03I9@VUJ+fq`%`$-; z%52KIu?^M)@kS0#GZ}M?(93k6-l11uW2G~UtaOG3YzA<`+;7UzvCZ35Fu_J|6EFGL z4%8-oF0ywJ>dn{fuyL(5U7JUU38v*|0c zbjgowA^>`$L-EG|f$DthrXy~$kDHTGuY)Y6K4x%aj&5SddQ54b@?Rduvu~%5lqA%| zq`?tMu1r%#ZH$3tmA>n31lt}E{(xt&$rA0N)|lB>Mf0S6wr^*q+cIGg;3(AB7nA<4 z83W8G%}&wm6ZthBrI!BGCacfv7*Z`^^EMNLr1db*7ox#9i~A<0-Qgh$npVkhl)3C$ zqE#5h^850HGI*oxwL@`8tR{9p@*ZQgDa$ry>%_Le0ezbuk*;jXKtfvB@y!E9=VMyS zIAhk@29DOd=lV7JkqqR+X0uBs&~|V9OtU(UV5zvaL#DT74stnK-#?TxyP?tb*-a#2 zNxNf43Sy)ms5cqJjK;|>F+wcgqB)%61NNEb_wf+@-c&xS`pbvbN2ff36!+}!V%hMH zvq>teeue5}eK0fdKB8T36U=b(68tMvarjuAObSFFbkvlb6BSe6(do2niWt9%5G*or zgs*k|(F5AT%aC`-KP(fw5#ZnSM5E~fSs+aor=V9^dSU4p)TBzB2IX;$u3C(b;7rLQwKhh&Nxyf(3MGM6zX&*4{ku0%Gpd83Kx zAiJ8kJ?I^v_(=k7%DxxBQg(_SvkbG!l&#-%s@VppsEJ)L>EV8&eXv$ljBM*pwO=I=E_eN7Gj_)0w*yKQ>Po_%pk;DWF65c|V za2;BRNlOwF=@{8-l9)QX#SALAZu(=Lkm!IJ#1>9x@>)dMk%MWX0|cYX8ck2o(;<3r zS1xuI0ZHcM_DQQLFPtaJUiJr%Be>R-`Hh=^afa5!7?QC(@`_3+QwoyLa4Krtx~-rM zWr{Y3gC~9G^)``4n@aLxtk5ajZ9GxX%b^_ooMEY;jr44|{sC4^X;^uA7-vY^fTP)W zph~}Pb!ie~kG5ivA#&~mcsWu*z-7+#7svlx34u`OxNYJM z?Wg+EoIhX{kM+J}Nuwz_>~%Ixcnca+FPZbPI8Rm@5))~`eaU8sUyVB1V>){kSimJ^N)o(|yde z>+{$T2_-;R@TJcrMcc=+b@Xey8xm6#Ap<7$NJvHV0heKTBQdupJv5v9_RyBHCGbP# zxx>Hs46&s=_69f15gx~oO-3o^X)uG!M0F&1Ztw0gzkw(j7r_`I8)lm5;`-*^4rhm* zlXU_u=^X$d&JZqBK_Sgdvbi{uYXkd~vm_m%9190zgq`r>Mobc5hb(SH>~Mhj#+i~^ z;T|M^e|lt4qj5P7n-yXqmH;{z6-Q96x!=#S9W%xC$;y}>UEe1}+Puc!bw~wn)S1@m zG2*ZB(vd);v!_z?JaKwVW6AE+S){~EuDM6>`RP7$d0D7Gtx;h~vT#Kx*y5 z3d1p=ywS1{Frl=tA@_!RNBv3By7tK(J5@g_T4pd)W}HfZHCixChg53jrG<+n0if2n z2XK^@R4LvWE0q?*4f5D${#%44z)Xs~wGybpW6=VUMGei?U}znO<=?XL`+WHE{YHxr z5eP%Nv_(Msuy-KVZw)8c!#|_;-n?aiq|;l`bQ;<2eui20*$tK6&ZSHjU_~wE9sX#v%uWw6ll5X)T^!PAJs$3-93GuwqR2(p zl2m!t?~qxUPBGHd$Z>zBmd8Bi*jiVri4MV`XD36_dRv=V zd*Ksp!Pa@Y_XW7D0_o7t3wG!V4_E7ijSL9F9NZ@TXQ^~T1vO%<=`<9xMCD)B`o5FCh<1GvOv9z128a{ zK`f8is8QD`nh#~ynlPDN#Yxkt7iP9VMdUoAIX!&i0F8`UuLrbd6;6w(7i0gQTNejQ@25^!LO!`)y8bLjg`N0j!OUCWR4S*%UyC{{WAGe_rZUFmY z{3zFvd+EW*^QP62k>SYbVBZB1*hl6C9WAedu$@k2*i$hMO!wXJW3)(oOgX5Gz%w2+_l)6E%;hk_PIzecRUN>j=iGl{j{KG-J>pQh97L`>o##=AI+(=9YX z>qH>U8K%@Q1Xug9gvtPXt#k@@ZZRwE5n_hUtA@!FGIV)Ggd%lAI@M$8l)W89C7oAK z-7?`dT{R(hq)>hm zE7T0hTB_YQAmSOOhYr0#Mr14n2gsFc(}K=J>mOtNGY+S$?TFw^3llUn4q`B$hR_Y$ zL_!Q$sEkF_jHI&=Tk9pXb@z@>DFvWD=pla}zU|-<2_BkYR6D-Gp#CfmsyIKfw5+&v z+8d8kQcFt~d{248qNqa;BvXh6Kj}|!_{Na+ExS_M-zH+OCQN(1q)Xoh(kX{i@Z)@?O%nqhdFOJfFa#AoC z*)s}@bn%EB#*jRyPPgQp5cn++@v=aaFN%15Q=XC;>*$DCgorK}Qg53El*bss8J-9c zGH=ToL_jN3FYqKH2;a0ut7thU8#>FQ9xNiqEB{z~-FmH9KpRf?=pYNGnpi|oMvN+vDRi4Ic!<9Y`H~UDiW}w2jt-eiv*){)p!o6N1jt3&T=HuUf85 z8G{YfEwUk+LyBQM#z@*ZVoD90z|%587h)l9F@*|XDU*oGfXdMvXvaxn;Lk?u3Gx;% zKdJc4(4fnH3&ax8g(QL~v?p5cQ|Yq@AL<4OX6(}_6)Z`m!X+&)5{gD5tU8S8l@W#*9U*Ic&$rN$(>2dqlX9C2sf6X|XI6qn&$A@a}5hQ0nO`(CM+DvBG>}oM|XN^aVN1Ng_hkQOeBsjsOg-Jd{)>xCq$` ziy(s1Y*GU=WcC+k5uQ$(weBd@LBCGlH2r z^4Bs$%DcPycKc?rpj;!?R$To@{}Sh)+|DR+;iZ=V81^nWifGMOEZFOJ;ML3vDW{Iq zwnFFFoIP=?&XK2*>(psQiiz<-vB1t&$P6UiRPVZ*?X!i$;V=W_1)^foK3evpdNzr1 zlbYr86uv7KFd&o_1Eww(Y#N)mRp-sS$vjyIVv$pjHcMx4Prut-kRL3?92XR&v~)Z6 zvl+5#99#|fOLg8zXqofy4@7x1Kh8hRDO=ogE1O7uHn%5mrx)xmXr~<sqwIJwCVX%^b-#7d|W&LRQ-H zT?ntw9zvn9pok`sc-JrNe&4Ce8qXL**qrmb+2O)@kX|a!0D0kBf4FXmPJeZ-*~71x z=u@;Wn&eessV{6zlHZMfVYMgvN#~K>w*Z%y<(zL}lt~?{Jm>pSzm^PIQ&A_@alhRa zO#)Gw2T1*Sv4Hh+n#W-xAQY^)0RLs!zi_Pt3F_~sjy5NnIfW|#?38zc%A@a}Izp>+ zLHp!XSU4GWPmg;73B^Kyd+e?@_Z*+%11HjPR4l|YM#J}oYvaf(U57`M^CiC&vY{$J zshy9Cg%C^kg%B5vK@GrECxYdbf%k#}fLQd(g-G`(e}VDWA+Yy?kp3>4F@Q}LNLW$` z89^E6zJ+H!Rw1aPp72f5PRIAStyqX9kHB@>b^`drQawgfEg;yyi;qAY)M=D1VcT3# zMhym;_EighcVYzZI-9Vx+5UzFM@iFrPwYhyA*+vg-9|y%v~7&9NU_C*SiXolP`8qqRz;K zzKnS-o1#4ec-l6BJ}Uki`;sgO`a^u!Up(uqo5$L(X@T910MO1hSI_Am-#?Ok@7B?Airm?@&7nM37F80WB=iV+^$m3F|(2*MU4k6suo$PKq-=(s){R zNyP^5xV*7|af;v)BIO);K(3>8iezBQC|*e9FURjfu%H4u$WM}5_j_ITP>5&6*`ndF zA&kuydJO*vRQT*^+!Ja($>B8b;zaD7hio*dxtK@}NEQjDD+Lg*HgeLL#<(dpw(QuG z%6*>h&*z<2YMW!LZYOyf?ZfqGvlBZE(KV+?9bqos^+s_XgG1gW9!&KUyVS5S@o8)m zFHc0;%!a+)`?@&RtCX?QR#W4(rh#cy!ti6u)5cm(B(8j(dg;3(=9FbJ$P57?#9AdlCOt z^m9QjL!)HIA@UgP>BM##;LmMqY3%~K2$NbElQBd@O^=@T4pc6m0v;smBXa7%46@^) zfA$2KBGRZcBFA!dimz`aJFu}3uKg~CYhxjN`#R@-FR!`|xEH+{Gg@E2*xcQQF3~m8 z-GawqhaiQ8sfgHNhaiMaubc}!(FX{Yq$l5wi#{@t;l2iMH@TVU0|FA283n(p|d(}qZ2F_cA28~SaCCW zw*4jrLp=`i`*{34wr)4_Q!#M!DKc=#3PZw^MA3q;ZJbJ0e@r%la_=R_z||w68=ei1 z!gIDKk$v@i$eti9(1>z=BQu8kVc16qnmgz9r z#xd7fH(iroVSR@`@Xp&&QW>H>!mg1Oyx{GlOnaHvgdgdzcI!&>xK9qrAju`U7bn@eTy&)nLLn*!d+cBa`VYMV1$K+s6r- zmpne6VAD>@a`8LF9P1-wYo&AMSJA6=#rqkDl7^)RiPIy9t<%qN&7K7I$uT$C)k&TZ z?=R2E9Z@^)l(NX#05(4;S7w0S9_9Vx4)x?ZWzPq~cSepdsr*`&d+A*#-4E%PZOA(; zwQMXv3HCt|VPC*3ixr6)&tGPL2C{3nI^UIx!70vq@6F#;=t%F?FkJ79JH`}pZ=mF5 zmx33{@s|ONy=9&S5trpML$M#24)F{Ajdi%2bEcV<2vh3J|t~ew5UKwEY@z#ey=TQU&|JK zfcYl7T{6U3?C=jVO}i>&yo}94*k9ZGrST8EOa@Xar=51QNI;bH+nuyq3)@;2PM}b9 zer@!s|8_liGmXQ8=aef0t$iGJ5j8T@r4Aamb*g8zMq=Gb;PflHB09wT>{O0^$1wPjEyyt#^@462ZMM z#=NMph@{VH>s$ohu`RU-edJ$w4;8??@ry2|;m=hIZr-?+{4Vs=!5BsD^-GXNYTJ#{ z^+HcE$C9nJ7&gyXps2AJPLSAsa#0$x$KoDA*YpcU4Ze@Xrz9f0AOTQ7WN{owLY7Zs zvGQgxh=@EU==cwIUpy}_?DSZyoFpE^Bl8ZJSA{7 z@7ujmzqqL}h!OD2B@k?24v|X~9Xl0ZG39AvNWLl-v4aSNkOPfgUOYjV6UPQkGCwDv zTf)lr5G=MkI8bQ;5nqLdtE_fo`C>HpwSL%^%ld= z5uj;N@(BHlJDX<|XzL$_h+T}hQo0a+4_o=5SY)d_Qj^}=8z*j*F>ctqh-z|vkn$!O zkUJk`g~`RuTeXYi9Ystm8kVCYgq0T~Fdo2sQA-G=0^zX6;^WP2ZM$f3$i-e6D_=Z3 z9lGB9o~r$PO+O zY>D1OJSAwZ0g?AY7F}ae*6F7FvjFnN9n%njp(!%Ns9it>x6k6WU*Q>HNr|!&7DbW( zZvpgzIeqvRFep)5EZQT->UzR`jYa2+MysjKcp4`#QNG2TxU8V}BH|FVOCq5r7^j5V zl2iwrtIBmy{#4BjwBy_1AZslKV(h%Jc#i|ChJpsHa&1k_bV z58S+HEEmlvAY~~5iA0NZR01hpQH(h&Y|o1hc9>>jiqKJ27wHAa@Y%!hLcOS*&}mK==^( zkuD};yt5Xdk5;!>&XhC=~w1%4tjcE2YEQ0^j zl=6#2bn2>Zi)?Vn6N*QKrQvM^!SYf!2a1pP;{{mU1<%9}5XH6jsK2i9m4N}d(z%G8 zFJc%WxcjIsW{zloavnej5$})KKK!FJt6c;A#aJLU9G?+~UzEpSZ zgmkg1Jz~+$SV!3%4*!f!*CT5*^!7$*012TK#3DP@bWJ{_^Sc&F!`vh|ElV0YFdp{) zvGg?M4JgfHQNd606tqB%i~4O3H=hK=lyo6%+ub0056~tyBkw2z|A_%H{#hRoeQBi@nZKt^f)_6R`f9dKi$S(W}f0zHP_uC(*&g6R@kOIvO1drF>6krlInYSl~hj z@l1FJ7?4kM61zs{(;W4M4&KVq5oz#?TiXJs^Z_I!Rd74IJ9L3q58vzJHF9~@=^24O z#!ZfaEJKjUcunPvf&rmwm@$c(oDmO4Ap+WO@-I{n-T|j7EGFMlTwu@3o8`RFe4835 z@gxa=?O{>F2R`sE$or3goKz{k7BzAh$a@fWZ@3k*q)5M{7O2V)Pr6GUgm?z;gHqNP zQQ#eCma#>;22t&f=C}f|nN|izLm5Q5$l@YxdCANvr{J--SH{rP#pd&kXAecax}X!d z4;Hg4VS8_W=?yOC2kCleX=_3KHwungx)2UrE!zAR6>3dw^sbRmga_(t6wY=$zB+awVYyc z*TDd^sL0ho#FkZBD)J^qlfN{(J#KHB$WLLqMo@KLjwag(&=^ z+3t@L@x4KBqa+nzWl9Ll!D1qM#vmn_0OCC$$=QHde*tZ!lnF+3Z>PH0eNiS;Fh4uL zsD6Ry@&(PYs~|SpUJNXp&<92h^La3Q{%8|Eb)rMK?omcU2foe3H*x4%a#XX6vjS)h z9Z(yIA4*d2)Ze;MTEtR%Nfr#MOeW~WZxBokT(=|))6*6w;LFBRU@d7iR&MF- zWhA(<6oAzJ{4u{dMjx9a^IM?(b;W}C?EpUdDNJ(r&IgSpXSqjMeWEK8-P4udFvU!Y zc>U6beKok0wca6J$-BcSFU6eYD_T~?6*8YIb}SPG=KG0-ymg6GIbA`^h6N{@>rQRSe#ZsAFj$y%7NA#0c>(U40Xm4!uOZ`hGj*v7|H&U`7|Vc8yY*P2R3#LOGh2 z3<8sFE?V;7*(hU_@Rk9PjcW>M@U45}44$QsGZO>XG!m%@e)opZVb`lIfdp*iEJcJd z?0Q=5cw;=+SbC{_5g0hEKza)~kQj)IUfC8)`UN9Y_8q-VyYr|++zE$+=K3AS)^w%2 zQr}s1rv%oZ(FbJtI zF0si`z(M-wbnmc0D^3OQL1$ta7P4v^fUMObYMifP${I^i%1j94<~k#vZYkhi+R11M zx0=v>tQAHojs~VIt*3{Q5lc8%H7n431qSJnBBc2_eyhM3zXkd;1xrHLp3}Gt`f@zt zLxLhT*2agXWa!gV7Br}q@oG$>=z}B2T8qFNb}Z+EL_|GRJDFR-+0ppG2Jli1CNj7F z4U1P=G-&BjYL99m!?e6Qfs%Wy*2B$d9j;hpNH@kM*3Z&SK3`!8E$7J7KF)Suk^JpE zhw@54xz%z8<*^neSI-&7ywFyP_{5fc1$M)b%U5Jp$5j}4NEk{idrJ0CoI_-us0i9E?KxO6FM`P&;?s77Loja3$8%%_Au?u{s3>bOCm?QaPl2;Rc(8kLiGTIVI zGJt$;XTF-$?iBy=;Ul73*sHQJ0r+Z;MwjQ9cg&ht?|=mXfv#(&WYfmgZsc1_qNJdP z^t46*ND09b6PKiwkWG@k3$=DJQN)eRn4w<)M&71f{cT6c8(zgbGTV4~rWYT{z-d55jmhlW9v5Q5daR}L= z$Ld#Mm-8uCZN^J)KMeVdmB$u~wE@{dV7ZFFDD^q~*@ zmTTb+_{68Z^&`!VN1iA$+2$Y?e$zm+Y`o8gjMDv1oyBY=Ssm(mjrifiXce_Rv@}D1HwPt%n~|Nfi$JFf{jq5-1AlF_v$K;WXga*BftYBm@7Zm+@G+r z+Bt$C9ZZ?$rKw(Tm09+Ek<)7ltlVUlPZosHX zBYusc!kk>bmiGf&=joZMaP2G$q9S3ng9xMG%W6sa^8NmJdL#kj)!oaWO-I|jP%6Kd zR3dSBvCK@%y^W=>o%@$-uKdlT#xevR@XrSDvcCri?>Z@+_p<6++2-NfUZ$mCWUH`P zmhTe86yF4DEGyVry9^Ax^RWYG^eBPgn33|5_akcRmxQO%zy@AmoSn`hmk8_px{c-J zeo0Vxxm*S1_-%E$2LY-JH$T--8AWqRq?VP`k!;6%lT{y!KC4SD2j%Act3pk+v63=x zEN4h;sN3MZqTifuzKrlhtWW#lEm%f+jV1u}+%0Jn- zUdD_gnD7s$ZDE(;w)(RO23B?{k_tL5mNUBE2vSMmT$x?^6}yKZ11ZZ+`xeuESmh@y z+x{k~6A9m{>N(lWLfB@UPd-dZd;-hMP(Ixw2N^X?&GO3R0U2oq(@4s0*ROX!{E*cj zqO6aK<=0LXMtn*I7s~*;T5|SsmE;ZC70be#M*R*qEKjtE?syw@AzKb+pKKluU&yco zv@e6W93nnKQs@%Y%xx^(W0Z>J!H~M;TT(`yMuP)C^DN&yWV%NaW=S1FjZ+}$wC@rK3p;Iv3ik3r%2TFQ?**l~UB(J=FP3)}As2Cg_)(^UwVSPy; z+E8Fwn@hQ@QbVwqGwZ%=ex5QZ)|s7xVQf0LiIWaQXG=>^%M4gVfN=X7(>597=h z*cebb?OS3~{F~4}#IGBl2F|CEt|%Z0&pPMZto_h(10s~jh-`19Sw3eV8q4PSCm3PJ z%z0zk4)Zi85U@2({E=laL~G~{aQaS3AZ3l-ax(65 z-zyhwIq&f0;Zg^k=rK`h;!P1hT$N&>j7C7K)C?FWdkF;FQ9w4pS<|N=OyZ+3$|WeO z1a!1+vE1&yewHJn)SMjvd*}w=3~A?Jujtu(c!WoQv1(7Wq{|^ho(%^<-VY0Aw-+Gg z2uK1S3$7;)HS#Fo{qk@iUeQ}+{imTjnx2pk3O&cbDuC`w)+W~gKi%(jg&~+ww%CTA zZ{Paea?xF~Hv+6v&u zAs->^wq@8&G0{CIbi+rnJ8fKA@m0TCGSn|mPW9m?@Pp7lvwu30GMhxCX4x2;46p+R zmtPUc2gHj58PFr4?^kK*H_rw%&+o1K7oZI`E~_%{(J5(1vos5_2rA`;%aUQEP&V&M zwplaiFx2T;fhcWo##rgeHpp4kp>R_!xMQl-0{Uk0_eAYi+K8?)MLE6{Jf^5n1(&seVPWY3Ctb3fWODH#eoq)hF1KhBqZe ztINi+P&7i)PguS8E>bxFbWJat*@DI-~X0k9}#`H_}SRk zF97uH6Xxu?iW|#&!yULttbh(>tZ;3|4(W(BCe#>?om~-_8Y{=M@eFuFc~FdyZvYW) zo{;IprUz-SIh(}2?heap-;y4;BAEk>#WU=1-^yl$8#dVGwonafr( zvW^$#-~Vj-Jzw8AcYU??JWxFCe2o#E>Psr?gJOkXwKuG$_jIVi@7y2pQ>H!F-#Sg3mUMFczdHB)(Yfo7&RzfcbJw4ryZ*E1+W*eE-&f9Ee|7Hq;<@W5 z=dS$+t+eWwo*|K7O!TTDtmizm?KT^a)E7=>7LiFXeL>2ysnQKH>NspQ_ z{4*<&7oM|D^EH7kn=1Kz#ac8lU*AjZ&DUR_yWTi=9UoPKH&*gO`Q*1Kui1PEb=p{Q zx$L{pjw_|-BCPD{dOVd3tgdkf_NTc$MKcj;{gAGx;Q{-#^nY zsz2dw%n(eO>iTeqN~~Rb)pq?_Y1YjZDJ+&gy@EgS-ZH;@Y>8E)h$<`PmA<#HQ!v`W z{1x>oxn4+XuGM!K_gC#9q<>iZ{YZX`+O=Fok{7xCLj7M9D^4xn#clwjvsfP4=G6>| zf$R70W9t+vJYHgU@&s4BRUKb?#EnZXXcPH^uZKI6lWt{Ss-m|mj|=jsSZU9q{uL~K zXXAEamBUK8-CDYyC?!+FfCj4FDl6Q|DE*y0(v7zaDX^5qcPuhj_A(=90QDB>EV!}55GwG zJN#k`Te?sw30skN!1MMW^!>G4(VNnnYu<+yZ`h4l6u#MF<+YMGYS-aXKp18Iwu?cj zPmkmmS*azuLuGE?PLH(&X5UF;#Xgsv-97kA`;D#W`>?f?f|bCbSX2>2T~WI7)ueZRxnO#tb`>m z@om=}{4->WIqHb6K+EqI_L%9ERT&;_zz69Z; z&g#0n|1`4a6M|^0+^4!%rMwk?)4tmEaNu`mn7^V_1e%_FD0w_41NL?h&`;yj)4B() zp&yTzJOAwTZT_9F^FCC1RHo13%S7-i2r&ky%-T-ZdOc1i{7_zUZU%@+WP1 zp?M$X;P`A^FVqK&R-PgzCe!dGkVfwLs9^0o@8D!w5DEX@`>ghQpY};!tt$yD#-Heh zNpRhSTdaV$68N#_W~EFQFxcV!*emNSFo-=+xlYed*28vuXk(THbK7fW|FeOyq78?3 zi4pT@I3A7nxV^bp*ffo3C{0-FYTut;63o5uz*L^7DQ4ZBZFA54**YP`W z!`l(2{*inRO_4oNyLRj|wf{^DlBK1gZ<j44i|5aep*cwud;w&RD;O#yXtj`OudL{NJC1J%8R_{3rA8D<@Fqb;lWT zjZYgZk`m9ho;?f(w7km9tJRPz#^hxLtXMg==TC7MR<&UN_;k0cM;+`o>dScLxsGYkZmCh{f9%gS`bWvs;N-8k8LOL&GU)d!^ht z&Qr$kDIg!g`#fH&X*_7ZgYwauyLa;M%}a4ZzW&o}Ad6mWIo>=Uj)Y(n#tUme2or*OrUISF$t0lcM?fgjDS^$e*9TRrM$Q6W)xg!c+Il z`A_bPUY9k&H-Cn{@^_kZl6bD~hpIk#KguvW{c-dk;*7Np=~^u5#o_5X?|jF6X+fGC z55%9?>~JOfOS1mEMh^Ts|27l<)KdyJO8fXv&)Fk?n(PnB%j83mVFx|fUQlup@fJMQ zEBFn-$vOE(zl(HmIJdekhf8Q)U6bTUL--`r5%j=R} zkjx*Wv2t{BCFE$hd?cU559FZBp2Z)-`;W!#Ws144tNe55M;?~)hIGv{>62Y6$O-#m zf}hbh*#%=2#Q0+y@P(L3*EUjP1^o<*;W~6m2J#SJfn?2f`)W*Y;k9vUgRi|rJ|#CG zFP$YX3!PXe`dJPzI5}-@xuOjzw3U7ITm4m1!vTM!U-Gr0J4t^zL1jHVKHz_6?+?e3 zOtB*W@W6@2&zMK#D<1KXsgg8#{J;N;v-5TDw`Q+@mgqa*U;NJO@9p!yC%~WY|I>5! zb`lrh#k3rd!C>Qoy+6svFK3{OIW z?3ZHICZ;`$%Dz2otY&XVHo{kvkWrA2+~#t`sP4CwqVj?IA~Q`1>T*@MbGg8lP_Y`h zaI$2BQqm(@_#9z~)$BSUymUCg7g83yc-4!x2dxJW@`!=I$d3yq39I*RV=)B%_2Pq8&Ki1s}2ySS_6(F(8dqhx5_`2MmR> zKw$v!ePcDp%H^xnE|se>B}nlkIjTy*bNbrHDo{^}AMD8J7OAD0!9Z?7$=R9k8NOzu z6Llo-NF-43NG^~Az=WF%KJ(&=+8t0MG+Qe;iT&@YIu2u3{neA?9YMCr&?{E;@rl^? zUyc*zB_-5zLwu90szY;yowRxqYx2o0wK+_IR!wLlxMbOifkeaQiU>wbS08(^tCmPq zl^%AyN}?(_KJW^))x#T9(RoEMP~V@TrSx8YkWDE=ye7peFyav2==whLuvhH>K}!vj zM`YC=kgA}u%3dNpCsFhqZ7o(k_;ME|r`4)=vP+hng5Fib5=>qVn4a>DbVs@WJE&5I zX}UvD$d+fZ+U~|?aoIFn9eQKFtxOR-VyrH*PAq2Qm%w~NpN&;pSu$?5fJsB>fU_Ir zh(KdikK}N*;>fE37+>|yTqh%@&o1{A1Ih)Er9ov1(>GRa6U+QoW$Fv^gVe7oz`R-- z=y3-F>yl)JRNi);&RP(x+4P>+Chv(LASl(@Too#P^_K~m};e6ro4nzN44F# zSX#y-=Q>x$>ykOK8nQUQn5IWmJ&%YB@(Uz!q9CRGrvfyP)^q3V39BR(xpe-grF#ZxZ9o1zuEnXoI9M6G(y5 z=C$fRDZ+czrf#bkWYPnWP~`DT1mCEo2|zGH(qE7V!OW2tL;b97PwC%e?hbGH3>H)8z zP}n2l?#X>)p%j20hS`)| z(GT_%n`b7%<>r^8t|gt;$8E-4-ulhN|D%Ff8}MShxw$Kj!Ud!Oj#63*6K){DfT;F1 zP$2I??X`FcysjNO(P9Hj{`$OV2+Oqy_L!r@@pyEmM_LHa-chD8=${+|_-U6kkkyRg zj*sapJL#^ZT@X$;Wlsu&mZnIVu8#c_lyGfXc7C zW-xmo8UExA^|<51b9YR8FGPKLSnxp49LKsmTl+XZW1~{#@{6R&cn-UeQOsLeGyBd{&~q_Sa@0Lx#kpJ$+NxfBt8@)D+li|1KFwLL zYan|Y#$+5u-v6q-y7Clcvb@&s4%+LI2%acpj`fatEtef31L@KNp~kU_LAsNdZb6*0%DE)t~2G z<+C}8BOOz9ILV0vZaUab8`; zHTNU{2|%aW1MX4cJz|W6Tu1DSHE%J0^F}E`iZ!evw^v831P)~wU3O+ff zeJvv8TAYhBObny90}9iU=jWuBt%;-{^^G#Oe@*04FUe00yjze25xo#-Ageu#NcSSk z4QDY?BA6@Fmwn=e*^4#Lo)+#VkAJO%oD4}WY6jT_UAe;=v7DK&glbSWHRlrHGLr3Q zOBAK6l>k$n3&c|iiD{gWg1RS_3=a+@WNRg9AG2cZfIzDQ7Z9P)CT*UOBR<|B*@L~W z*oLoI(@L8zDRgp)IDdYvhR6JHu||_w@E@SX8<%U|(>e*EX%>}K?Ri7~`#!PdszhxD z7!_-LPzyj83G!YBxCZH9iv(PXx0n4&p9oW%WiM~>t!2875-HYVrz*G)9n82+YVSHp zP-OP)gyBUk_Jw1BJkoZ_U7o5rGh&t{`qQ}DT;?8ACY}5sZJH$>%vs{w&wvf)%2a|v z(}yV5(n9O4%<|OZNGdPPzVB4R6jvoiT)azLZWBo5DFYeX>A5|%5<;kx=34b@f*osG zNEhc&qvED(4syvzhz)cO8f&IdeWM8sq`jC^Nk$bLomY)D-11>q;CHZpKAw`0lXV54 zYpmIf1Y)`qmK%INIK_W<-}FHQjkTA9UQ&czrB91m+zV!8pciPw+WWGtBWq7(jkQ>& zC%Y>?Q&C9PosL|?XSE;n{WW1kqJMNFWm&Jik$)^EBa$BJ#h@Fh zdC7`dBX^i#geLQ1s5Cx`W+z)29*ns6i~J$xQf4Ydlq5isqADrna}0IPffwg`>~oA3 zT7_CH3|@@Q;(2!5^07DAt>#Or3Rv*YPZWk*jL<4|AH83!!HHFDm)&39`H5s#x<`pG z@4xdCpkX_eoN)R+60$^qVdTB@lP%&~=^lpegqm}dbsYi_D&wgfw@p)6tRZ7!Gr#Rv z)6G5PHYkjwy@?NddS7V&~>${r)N2N{ceJ2#6H)`(T*~(L`}& zfU+u1yQWRIYk}4Y^%x8Qc5p~}N3S(7a)fmp&;~KCZJ&FpthtKdt~tWXzTJpP17}Ga zFS*_;qr7W2{zTn91UtR~Q}65EObJdC8sCpVk8)zyI!xGMFM$|rD)Sd~SW78~>Pp1w z<)^ez{i>43&&oC{%Il~U^<<2i;<&0=ABteZ_x!Q%wI>;D(zUREL_da~Wl03ahiowt zT~2Q&q~Ue!q+rvFYKTQ{(gkW^SlfZkDs9fLJodn^`6Gkq`mJpf2XnDCI3jIzx-mG5 zn6diBiae^y*jx0Y?Z}PV0&c8963WKj$wMz)8AwbVDR_lMO6lUcgnGoFU?ABeLIKtw z?408L#5a|q!P|8YNelTNwa2;QRWx`_IG5;AcT;b`Ka!s^Ci?_E@+l>n=ButOpjxtI zBA3?C49&=L?2bG}2BI26FP*4mePi1QY4J_T-f`-?z(+kgQ>=}~w(^OXJ?$N~JJ3e? zkx0JqwTI|%FB}ssW1jGG#~;1MNFnrpQ(QS)a=Wp{*hRv2w%f5Pj~&)7W0UBMyunrE zW>Zh#r3%_5nF))>m#0499-`+gP@S|7fj1D4-<1N2A-0(vMGqaolEW$FW5Ej`C8{A8mF?gi;%MZaQcfT-cR_PFLABsN~yb$pL3;~?q%!nNQ39n)_) zV-$5lU_{D}a8gx-HK~1e#dMf_0k-rYT=o0E zbG3@UT?j+5r-jfd&c}lZ8|~uoYRgEkiat}>F&~_$iu5+w?%Y+us)*IOC^R`DIg-;Z zn1!kxPoJGq7fL{^Ec?^s%!8>zs&BMjR0JA@^>yh5@irB?YrH)P)6iz*n);! zmxrnfqtSYTsL2l#cuE~ARW?un)3%)2a-cO5(=oIAdY#pbA!KNMfU9+k4%@`s1lEgJap zNL6$wl&ElGRW$l>(MefEi{f+Ah`WGS7nn09^@uP5xSLiw^(&k*Kz zL^kqFkv}oTgZ9@xt8G!uUANDHwF|6(1O2kD*;_MfmCFTeSpzEJ#7M@iI)vPE7I3YP zU3TMS^~JMV5&d#5ba6ph#Ihx;UA`{x5y!C5kyKhI&Kt|#u%eGwBMvX{a;NuJTS#AE zMQ|HD^aNG;f&uH-r=!NTd1P{`YjJ@X2!6ZG?U$%ETTU9nTeI*EVv@(9 z^d^8`DiYOXEO?=Y1-VtQu3lt7Br2@oLw!Vm*84qMsQ5$qYujB08l)5SE(0LA!w}KP zDPzP7zLGUoD%mKSK`)}5^L0(8?K7{c?GGXV*|-2ob9Mgu5y2`oH9-*!EccprMe7am zc&}0hQ&C6W3Rl2`j!pSu11LqLrg1_2idIO9LTbeYHoBMNsPsfpeHc?b@d`bk*5P~%?k$S(XffjiwlF^8_Y(_ z@Z2Fe-FE9?zj7p^?nGan+Tf$Z=TKB09E1g%d7Zw!dFy6bWY?t0Hy61n4!4S;WihU! zV{nQtM@xCs2^sN}sn-X$i`ZCg)%X1faP} z7(*dI0Qu}zc-d^L{Ezg0zc3RHdRJHE&}k1*3+6_7l{Mp;j?+7ri#967%>PFkiyOz z`BPreh>WD3Xh*QJsT+qV93=%-O$}y*oKn%-;n*32-n=NO-w&>0m!>b{T&TO&oM#f8 zcCKCeX5G0Wgn~bKQVtHh-F~xof44RrjSE`%*XQG76@a@Cuq^;4Szc_yMTgLyBRQki zHD;n59g{@su@@jYJr|6$LNY`*QxPuxw^3|iB?u*31=*6df{LDCk(V22MP1rJD-an= zxY2x(k*g$UXGQ#Eb}8rFUm#mks)@DgwOm<*DO|nZIbg zuIcvMGkJk3AsR&;7jakE-&Ht?qJ-#5z(kS3+RWHT5%Ysd7HO>)oVLp6nk(FJA(AxM zmD?HEP%U+}NnYh4>6<)+fz#LR8k0+yyOiR3?k+t@d=0=6;j~oOOvnv;g1wXL4;B}& zxg&_Rjg6&`Lo?7P$FF)P>x1c39`7J>!^F2v@r^i|=aD>9+3XMSQxR-H1^DADk@#hA zC{3-f<0fu2kzB24XVWq|Pt0|u%9d137G@C1gZXs*S)ftT#7Cc&r66FK?}X(8d`pmrB~nVr9jqVspL zq09NZDDqvk>LKh@;lSu?h1go_mY%K-C2gy43n^}yWaPaCC4k)G#` z2kgMGzD+~Z)RslG>UbNk_m?{?F3v7O^|yS|d!wcVp{i%`i~Ry1!~*52jI13bA?&92ewtwC zdJby2E$1+%@2erODPb(?OC=*NA8OH1t&I1w3OL@Yk1x$8FjmisP3^}kE^0HC*S*JB zbyyn@l}1#n&!3i+NUxP0;`$%F5`e4f(*_~t=i*`s#OxtA61ylASmh@guw9gY+fK$Yir(KRUF6A&p>Se7hQaNLNZ>UyAG&2?;H7}+Go0gwp zX4dZWE>Y2z@&zZd7S4@CyW5F{MI`-N(g6 zw2c;^VDGbU@3D5Wt+nqnk6ODwZd`-~%b?opyAG>eG&bAHA+*$wz*vH1=r%i!F9ygm zP)rhoclbVd6{5Eeos?zr;h($D%NVON!?6TB1CPz{TS$P$#X7FCC9ijw@Ac;vD$WX^ zUPd=%Y{G*XG{Kh?prsnf5_d?+Y#LF4nEb4*mtEY+9_J)mNET5B%Ta&SxVSB2q0E%T z8a!!SWOE=1eL^@HTTq|fX$Y1o_@3XPHuFvap5{gOAmf za}SMeJP4GX3vdx=xmXJUK2M2Ai~-TXFn57u3Ml3NO6xHy;UBpOw$Org;u-m?vH8B3 ziG-rWM?wH~V}*Ik35IOm8;e+KWjP!{eHqrsIkAh#fq&VP4B3^oX(<%%aqX#>MApGa-zp6i97ceC$EPmSbuIi8d~7 z;o`-=+>?7c!bH%J1DVODj$PC*meC}o1ZDjeV^t62z^k#Cr34|+vqLZ`#Ux=4WGs+5 z1F2M>U8GvG#CK=)b*dw1!+mSB0|;X$yW6y@{=Q*}k7g;gFZ8N(&&|78_as^iuZF)T zgN(=lwDKL${VBT#bx=dKvXtUfw@@$UfDb0bgP}iX)F{jNRCFps-j5gsNH1h5^`b-h zsw^skKy3RMOyCd0NM4nW1^AYUu?#EA04V)omoX4VKwkSJvo?BDS#niJ5_T#Zf{-IJZX`yt;2qpzgVYV&hP?V()vvObZ`x>c)kq_P5)9hd+vf2VT z(}9(73%j*SJ{UE!V6$ZCont zb_{w#L3W&7${`Sa&E&Ve2J3^OEKHyJ5ctf6p;l7DPcD>v!c0s8>e5UGT|^VP^OKu* z%7nNSxw({97HF$Ihb^AqAiH#}Clh9}?nAIzei82}m9yF@3v1nKDdXnil5(BdGMy1_ zPvP;~w{QO}7pk&ORmen~52552B@3tQQ8wbkw3ofbc;-UOr4V2gW~2RBxJ5mo&Rhsa z#lK71c$>m1pQ;R}oWE0EquS%ucBaK8S=!qFKz0<1;mB{8)b1p@rX8iogD5T$lvg5| zjB!RK42SyL%P>v#_LQi01gY!Jvi*vefwF2ZdZTSz_RRpb$FZZ4(5$Gb-H9WVnCl4b zP%9+Ug(-1bWA(V1GCaanVce8nir;*3~4mg>;pB z<6uI`T((r>F*m+u21X{>B}R;mxro)(w&A!mIhW`qPyHnHj76dJlC#l_F!Pd!)nahvc z&+qjTil3x9mBEyd0}jqh*ZSHV013jD6zPn@(h6pJwc93Y>QY(|7+PlCyC%~2b2jfb z!1zanh!{U!vw7_YqDf+&pXU9`ENY8OB%9)&Nj9m&2os1Qob!{qwT`Tl{caOhiR*@Z z4D#Fao_r)jMGJDl*p(02$Q<6O@5V`!R3{)GSD)=jx!^Ai_YY1H890z5jcS7xUlIbk zcg8axkEemx$`?QGI^p2K#0zMiSb`m4U1{^i+Fqaq^x5y2!ZvO1B-VD5s>G$LPIM(( zNYPZ!d*f0Wa#SY?60@(k+i9BPZLV0*x0<} zhSRv31g zA#rE7_5*JhBfy~8q1YqO{B`A0+9aD&(*b>!)?{U3UJBoJ-ftugaukLo`7E{y5q)|+ z9@lC#xTqBVo{SMo^vXp8v@_Y1WHRNgH)&EdP;8&m3mcahZdr?4GJy>J*%t|h zwU?SW#&I{fDJlHq)AP=2>V%dsEN50pF`GGUFSc++3i5c(jD%Ap?0I~~#*1A;xKn#e zrj2k!8Im?Q^y`a0#K+WWBX8Uzute%YtTnyFmYeLYI3Pqh0OeX1>CWVU#vNSmQ7+DY zX?HUhW;gUqVfH$^@Vv{H!dg;y5=2%#dC4>lvkXRhqcvg$3o8`Shztmi+aSfzJY=iU zi0T!8{nYdHcu&=E*CKdsz;pT0^Z@HGpuepqBtbDhal{UAym#|8CYjW7? zZTV>#?BTLiy?oicyg8C|&X=aQm3NIWFght+|?Pd+6XjYRg^+YV>mW?f&lgy8b< zgWA1e%jS9Wz0g(c@DPTg}v;y1B{ zWNLLUWS*d@dQr;0>;`^kZqEr~%c7v)dmlYTw%Ggc%xxcGN=kT)2QKfW!N8^c;hPS;Tx(+WK+hvfSG?(d%$P^gELsA~086CZ_|j zq)o#V+(^!}%e{e(E3jZ?>catNCn1MYO3tY@neqb9zpc3Jyey^21YS*=L3Fx_X+N`4 zLR={FL>$&uO9ZW#7&Y>37)g!Jk+4HTm{`=Qlx4>BsmiyBdolD$R;co8qLf{?*(j5fs!#Eel($i}gL>{M;4Qo2J!D}669oX1W zOoZ1m)RvxK&IvYK+umM1)$2CYKAx^+=aRpcW=e~fg_^a0l#Yl*$~l~LmR;CE3wDf? zeuji`B4U)5o2<}Y$(?{Doql&5xJ13E%IzzVj6!&m6{DXm+?v}b7l|e&V~TH5E45JT^_)}UVu@MG$$Lspz zEG7Hqe$4awozdwj1ucUP!u9NGVeM}{Do{x_!^uc`^GY3c{Pxw5`yWs&B`~wcmeNtu z-C9vD2XtNnd!+;(8FeUEj=QnR*5${W*&^(U686h)nb|}c^I`HUm4&ZwVFQW?dg+yw zAswD%`-izZS^o0tO9MKlRTUpP0?EdCxDtyi4jFro>DXB>B8^vOvf~-**et55#Jiqh zMq0I2#q}f$HSjL^J-IouT5$&ySL%zKX$7PvOTDV(M7kNbo(58t)G&l*Ub}49?w2aA3aRo78pItlRu*rP7 zq6`KM6`UmIyR=^X%EX@!^#;{yL-F~;)EG3VHKCw@&=s<`ZBk#c4QrTD zw}|V#)Q(KamvSZ2vEg8=D!kNADY=5Gk&D{WE3X=!jknwSbGg`aC7O#{UCiFxz_?rJVdLrc^Xx;1zCZj82nxXg=PG+VY}hbcYs3~& zjH9spD;i96ejWLuUg{8XX0nr4UN)}CMGECGMoPuY-)g>+_W^ua|L!4`WRo|JA(nnr z{0Lp`5zKeXcUR`2Ux}=XbIW*^G5mPyysSyBwG9Injzw9eVo@_d_*E~bkfyp*Tg(ccc{nmrugtEDzcN)l z+^MS z*s{sKbjSx0dmespH#7f<20&oH+-oR`eK&4T)NO3pkt76PEvbJ;h)O;Q^LEDUZCqjR z!9JVxm3aYJf&Fgdijoar=^8G1x$_ia+j)uQ)xJG>ffYsMf8u^g6!~O>v%=u ziWd$ix3QehW@d^V!cj@>Tbr5W%upTk#h{(k{=NSuVmKGwiMe{l7uR?fd2JE(k+%S+&V*;yjL1(+xjv$dl$thr+Ug?vCvros`1H&oimm# zqwfR!-s_Xx)a$(9I|f6+bDB?Wgv$UFOy+rJVT*| zq>gb*C6RgXNS_CJuV#wW7Xa4F-4&Zt?ea@7}zAt|JOgS9J{b}Bl`Bqwi$waT$ABG>!c+8J_ z`8f6|Rbyw$Jq~HpnRNd-Enn7?s>oZNj^CM=%)t$@624HL)7AU$%%}Z3Qu%8{0J`pd z_^5Pd?y}Oiqff$UPt01mumy?ry)7cev~$Mn+Z|xP9Sx`N%!mCqN%aF}af(jf=l;Cf zA(7nf6e~>a|AfzZ{zwhDTvkD8U?j)ndoxBDA3gAb&~D>B@9iRI%gic2+OJx|Zx^JK z<||+VTsKo;@gA<~?e>|zFE05FX0Ze+-b?c<{pNJUFsF+5WJzhROKZvk9{Q|u0rG}@ zY@k!T2drX;^4jeYVU2cb)e@^)EB9e)KjvGQWz3b^-+1q(z7ZTB3aQ>i{b5WFx-Sk& z11{)%R_^6(Q{Ky2w04IJ(qZJXkZ0o`P~?z?z;`Oy`3J^RAqvAEguoUobgj4|Iph0uD!Ass~FE^;T^s z&v<&TNYosX9>^V0NYS~C&D}E`&?h^%^HUgcrv1svWaAU&_nfOXtQP9Y=1ZBPAp3># zctBty5(UycGUUn?c*?;Oxk>YOD4V?=X~xQ!WO=>>X}kgb4?7p-*CVY}K~i zDzpU2>e#tJZJO5MrW?{4xPj3Lv1pwnL%FIG*LLDtFw;%T9*hnfag`9Hu!acti?jNW zU0}hvCl?KCOFgB><*Vt`KnBDyN|lX=A%NM3RdK6!p=W>4csi^KXb?iUJz^=RZ_zYZ zr>j_728DzngYikN45`7!K>&@k?6I&{NzKrm8x&8%;jgwZn_Rd_+#vFv5R&_bC*J1J znCX3Un{xv!7KG0rlYrP2eOh==pg~}~#WF4mQLf#h6h*^>tiTxtk+`gYiXcfp6mB?? zAUWL0VGCxz?i;GkV0DGzz!pph$|22l*rprdPDQe6L#}?N7+gsOMIRACl-iPF`*!Wf z&LJTWaSDHViA(RdV+Y&)brYARiWN-}GQu0;RV@9)xh}Lw3relVMv>JwWbDWhYTV3( zkz0l;2lub0MsB%QI5jH+hHgj+5l`Zc{Ioe!#Uo9D2AnO!1Yv*%#Qo)}NYXe6DL4yF zC`5G96Dib|00=Q$sQ;z~sd99N#z4qXPmZB5NDk~z(;-kFxw-{i6Wk>kgH?+k zpgw5qlB63gOp07vxBG`ZzTyF~vL1}96{w9vkZ#-M4KW6_@8TVV>>C|A#kkS2gZBo= z$~B_HV!Vhi$sBWcL!m{Hb_Irs0%#G?Z*i=*oH;975~vNz<~d*sHy&GcXlkk-Fcqj{ zPaa)aRdRi!4s;#c@%1>kSeleFP99OWY&z~yN!maA4yDW5_Mwhz+KJAPs4WC!5JMx6 zD95HlhTN6cBxA*OARuQ?^<<9mxZHthV*O0ihfoEc311z1RDy)m0x|4E;tj<2(**|1 zI5(KMFk(TZNJZWUKp&R%p#j=0BapQm1MDnUQ6bgTwshnJ(lX&OJB)OckbsUeK6tk- z+NEJ@+mVDo9q<#!=Lrv91++npKy}2{#yY|bgCi*x14oH_8nb z>ac|aZMocYB@bvU2-E@3Q7%}!vo~bWT$OeezW%`3Ehbt)SaR3Q32eMLKd_@!N30ma zWDG;(&Wr~!km%u=$BDtA4o%r)SRF{iR0rHZNDHSsifzvwB~d$!CCGwL4ZB%HE64zv z&rH_AObk!(S!81fO#2R;!G~Vr1cap~!g-BSL*R~>C85_bBC}9zX`wr+IWg!gH^h)u zNfiK}NKQ(e&?%IrrZv7WJ>9VfK_`GO^-aR^H$Tm<%iC<1E!3w+90+=2w>>HfW zTE}hq`@kQ$zOogZO=iO(^)?f>{6kKRRmYvi3#l{0ZIDAinTjG89X91~#@UN~tp3q{s zSSJyO4g{QAuAxSSDr4U2LbPDEDtu{}O4w(Y(Jfgidg(U~5Xd3O*_q6!I2fU5RFQKg z8wKWs#t3ilvaWdJ1>N!vA9Zbrdr=(L+cSX{LDVEg&Xd$GDku=%+d{WJ^AQI%L%u1s zz=<{1m9qt?7ECX+Jy7bF_eVSr1!$$pkp(O5nts%EjUp379;2Lt$rHi>B$`G(&zB(;282 z%n1vUigJXF6?v?Vr%)HN`7mq%#(AuK!8qg@jfFi*b-hy>+s%N*s=9RYbHCjD{GzS*Kh=})2!*mVr=o<5|g2#0@p2l&~a|5 z(cLxb$XoR85M^RrcP)?x495_Z_77LKf{E z&fWP;Vop%c9tR-5Na&2qq&xTMWKhT4JNM*S?1M>@#6Csmo;=I4A7mtnw?e^=fr3Ci znrS#*wmsL7_0y%Pq-51o*?A)T;M==e&ovCdltJx(9iws+-S?yggx{6*FR<##wH=sG zfsKNhM!`tf-<$&n4vBNWu^sGS3p7OnX6eB_IUfK`hOjDyp>QUT_h!h~Md7QBD0JoK zMNm?!w#plH-vfVFgt}xS!U#e11knyNa{J6lD;@|bULKsxS`}r=UvUsp`XYH1x1>eD zyo566ig|NEA!H+>kr%#-{NA+8x%P@O4FI&l4EHE+zX0#$<8dyKhhG-_n6wMkm;oto zX^C)xhuEN4Slkrqpc)cVM&y=xxd5T~4Ak= zAY&ayLSGdrzOS;7}_}y4E*^u@f7;)4)`~J@K_LU8Dx&;7}*409lku)~b%F zuDB`aO_{P{F2b3=c1@u_s7zh(SzurlS%EN3gMp-Lmu_&+Hgb0V!n&8K#=-T41k<85ot@c>MNsVTS1T2!keo4ay0?>7eVy_ zNoJ`4R!Zb~UXU6q)v>^J)1BO@dMMl!C+}e-U$GP-0afHeG>#vl@#t29PcHj%Cu-$UmZZu9}JsV z$c6bZyxRmLae$QGGvw4!(85`1p_@4Mw7o86IO>zXZtre%dA9NTu zoh~BmvJarWt*^49oPddY-QJCa>3~QDwU6z!>f_EQXhE@{51F58ix(7r35+D%hZ6mN>b4sX?mH=&7Ram9N*;CL0-^pGu5#8{c$;6|o0aNs7a~zN2TC!Q+}`u#Kp*=_3ubv-ZuN@6;|Cj!jZc zCJsQ78{agCTUEtg8Wg?VwhkZ!;UUAj7C0Zdek_`>a1TfsgUeFe^?i0oYP{`e*#is^ z2X2)U4d=Cr1W!5JgsHK#ae?}{hR{D3&K|>eh(hwHJblkP(Zz(4U0vU0l;KMpMKU*?$ z9*fNi>4rTjxI2A<;>tTG6BZ5=g7_As5N?B5MnN2FL3EX((+()=p;iOPUC7AIhqpXt zL-ao>H-AR*++?7fEM9*E(vbF#4qmh;+0;hNtXu*h2`JD&1#5&($V7Tj6DKAPZ6sH? z`MXxk8i^b*sF5v1d!aX(rt3sJ9 z4;={32eeDog5z`MK#ZUj_I`QWX+^T6t`r|HS~w-JI|Jat&Pucs^I)bO4Iw0Am|Mt- zq1FpeUrU*B-zGyX{cx2ZV@pjl$;yrd8iGO9gUw({$f7EtB2~A=R?DG+bEjON7u`_$ zxcUaG!RQKjTTB&>+mU2?e?#?Ck@lWQGMtJvhdOjOx0dR+(d!-DUnXUhsRU<3LNHdO zuGUn>5kdh|A+JOxvzDoZE=fk8Lc9$D7IA`B#?&;(fvtqOHqLEK#lhQZ2fxTHMzqS+ znwkf{G=+Mrb}C3x-U|$#E-x2u3+u|PN2-NPyFr}|7w(-E_HD=@5XMnuMcSrJi3Rn< z)nU{xfrcO^v8F#q?4t3d`G^q(kk$kt{@+mopI))<;t-JybRcj{s!XnFI4#N zyN9sUKqKrp_Lis1vcT1F!Y+-Jn*cTo;sWw_ucOdNISR4vWBa=XbUf+{hjgHC_Ziu6 zVw7|*NGSbA{qb(QhnZ_Oln)thhVIoUmfcXRs-te1qwTi3i64*0W-l5BDLp z+iEQPZ#w$^5D%0u3>4DA)z!w>f$5zwYN4b{CtHJ^2UPGR)&rik6zLzJlM!gF2Rx~t zs>7sGkx6U>Z?>k|o8FlBVJ4+YR|otMWYV71`jX5V!!~xu3NfxqW7`lZ>jANUdJ$Xh z44CN=3DHx;YLVLH1)t=s6kcDUYJsK-9`Y~H%eEkQ$8&xuF4JQzRIm{ei@{le;sr(6 zas~eq527~;S0*tijg$B&t&x`pWx1f~-HYjs^}r#_ZaphGjWIKbyb5(rk}C}8t_3!k zt6oj$I{E{mBn+EZhjGpTU8$`XJ^W!HMnEhPvSVGL>P% z3;9=ayTtj*$$`Bi;+Ls8K&Gi`3(CRsz8P8Nh&Gn4h->{C4K6HBC}#xQLKsAQvZwah zpyl-Hfvw*8#g1>Rswvt^I|at6rf^f3!&v0ze#n1RB`6E3r6`$VZDnb;Awdl-Qw5g4AXy;`HeD1JU`K<1sr?fq-pf?G%z`=? zhk?AAxtRs-B}uHU=t!b`70^=VO7&;pBSvgeVA8;XSV2?ZML6ZEE^^-m?B0^a=^NoS z9RnRe1ye?hbPVNzmd!Pf5cb#R)HfZVu`a0Y#EyZNsWdh%8(tET1MeB&7Are64FpA; zPpVgvIy(wxI@xdrm3;ShKCD_=O`QJ1=z9AuP#N)v)LP8b4+*rvqQZJH=GaUuYTLFcm?AMp_`0%HB$jFD z5vSwO9wd1V>|mk_>`I^4dCu>aH&NZsHG>}^-&m3}I0uFgq32MFP#z&M@C01FRfa;< z7AEx%!uTKQj}wtqIXDDQ|L=EpOM-oX~8qn zb{SMJ0iJQ1A;yY;n-G2B`vKjKqR_}ZYnE`Gf{h{>5d19wvaq4R-A~paKr|WLM3b}x;XsTp&ck` zar=(#I>S~W?+;K8oB;(3J8+m+M&=~Z=oMZTnP! z-;uLisvJya%FZKnPiI{^M!mRW2NWWRQ<#0wXF1T!Rh#4k^yLu$rNHnC_As?qMi!N1FMEoavfeY?TkuR4dkQ9G5V)wj;j~W_9Pu z`BfSQuQ9`|0CMhTrP=Z8Kr=4jWgh?_$F*XRlhgux+S7`nUat5TuXOsD=PL?3OVEXzyR4Y|0dJhUxz8YSCaSr6=z;kzEvP}d6ddYK3%1Q2 zj~NaT7q9*k@A?x5CCX{hAb4>k?7;R@R663dQf}^1m1yeeih|3hCb{f_3S|pF)wa9y z1I?+S)k1!ZmTvACbXQjfw?Wu9aqMhnzLY9(;|t-yQ)ziw@G5i2FIG=!cHdJ)at!>E zP|Bi9f~Tl7MQ&7+e9`#e3P;dRCA&id#rE#>QnvR%3sG5^nbL|g4(=9mxd`4kwMPrF z9hqn}@MX7GP;?4$%)tngxinR@w=_n$uE(5FHKRx^Ze)(~<+->8;sBfxR+ZU= zwEGIk&EzUlC&tp8Az79oY=-b(U8T84?nHU|wRpfs)bYDT88ITP9`VY<0z8LaQ=HZP z7~9oVwDlrxaK>JwE+Vs2swG)c!_>h|6sq8zSU|Jj`ixmEl_3;r$?+zfP;rp0*r%5) zj&c^fX^q8NkQT09j~e3brx;dCvJUOGV+P-Wl_o)d>HD+j{e0kt08!nUY(7iAp@ ze9pVqQLU6f7f+xygFp*C1R!aHMM}o^c0z`CQC=$Wr;A0^8V##$N|3HIegjR;)MKukC?117wShXa&%|9{&~lq6|K{QZ+>T0!b&xBjd{8r}%ty?KxSH z%5C=g8t(R0U67ACV|_soY^=g17n?s<`=U=pfnU*XTrUUXA;VGfA6UJcTMYHZ&;_g^ z=EA98c`G?n^h)pTUM2k^ zrD51;j?V+_0TY9yJlHWg9Gn^THZ1kdGkF9Ay{U_ygKeRudJgu8nw|@^jA@7HIHe*19yEDV z@*d=J$r7EhS6Pr4;q8_#>mlPJ{^O)%WZhkBky(c8f5E2Gf0^7=ZiX?c2u%pPPx4{va`hxUt}dAia*HOEwov}VIumM) z5CV7PsM-(Ddeo=#rph?S?m2Dk_*f!HKGQk!!nQZi)=qymb<~#B=~ds4X-Pml{yZBt zLJ6cb55%LpPG4;$Y>9Lm;>`nE@tsCyv3h%r_N3BY+e+BM3lOF2NtZ>25m%}UY2keD zlfDUo%H)vgs`5##hcVq76xds)i~1O~-UV8NeK_8e;0w8*j3ao}4ji8`$4k*hBnxSG zV~&`uRIl)Bv~=z{pXG;z)u4TSPJZM_gWo zYPlUCRXQrZyNb~IP^#8Ji3Oiq>SMrDu4fp+YDsqz92!?1CJaRQtK3AB01U|QN~o&D zL=jxVH8&YBgO_bW+CDrAok8u!Q-QP@G96)PX0bSXQ5FM(2iWZ#cvMuY~kOT@BNZyo@Y#vNV{rP^}!bW}wf{NWt2flbD`Vm?YP0M7c^CWzSs{jC+V3z}QY zGb-{D;Kn<%Ux7XJ56f2p<9AWE4y+*DAg3)ci-sYUb`vc}qz zJ2BsC%{~flHioIx1r9iZHsGIyV!?!YrhM{QyL-nq1+A4HddrA0jci?-u82Jxp5=`J zGYq=wCd>xN$zCM%@}=tLE!Qw;YUO&%a;%LEQu_Gy=#6*abd~GrWitIEEk8f4*cs-G z&rTOfouzzM9=PFtRyT`YhV3*HDKn|KN>c9WwQoaV0_d6J1uCl{OjHLhK=0N`(Qb~B zLD^DA5N?S}4&qr4v(gAszNYtCk9^(y$OXuF&&t_n5|};MOBnN6(KRIp9`lI(0v!bV z*i{_sJW*SB-CX=axl-&2LHlGn$%C=oJZ8_|-#lXT7&GM8&aMy>Eah$cT^cCYakt}G zzSi6n-xp*|7F&HSnuy2|Ttu~K3$i` zJK!J+-IL;`GUWPDoMRr!zSF^^TIu!f6oTwLoBgxGP=`)Y9c5^!i4!HMb>!Fh59 z2?Sz0Bk;5~H=zckRB?OVfGgYRkhu633gxb-(*@L`j4WGM*1FdZK$W z>Kcty5@_;~lQ;~NY$-ks$Zc((z(sLc_*vH`Ilml>>v$6Z4$%(3m@ob#e%kW7+Kfz1jJ z&wJa+-IpC+Y^_OhR9GmP$IDatBds4u4Du@_Kk!ka{p(2Tc?>j(02Ir=S#dOeX zK4o_CFWNWO!|Hd{UhY6_+>yk`f1I&I;|H`8DA-jQYEO zk^uk6CLa-ws`3H7VRemyhb6D&7dz}F1!fSk9Wh6v?M|7jcj9=qKiM@Om5LcJ+6xr4 zanaFdw%@oa?dk{KS&gS7B&%^9hBY~PhLJ*CT{%*=sYma~S80!6nL)!}2M@yEcaS9& z(ik(aUze^OI;r!xd_O5?11c??D%*{T+Z#k36h=)eO9SvMe3S;DHC&ty=M!tZ@yrBZ zM>Lme2ovKfA9FYz4Occ>19)1^pVSE*sGZjckWSHVeW!f82epf#edOu;_ZPJD^@w<# z4iMgm- zCYK1^-grUMf%CY8*n%$CPQJZK^jF*ClW|mg5mT#&XlgC((NPqoh(1|)m~xG!v1-oj zO-C9+7i6Y|#uc0KfEaW+fGe^IrL-a%4XC+ixyY%utAFV2;p(=mn+sfNhR20q?SfCb zAQEIH#$exG^;&3O@3hOABTp5n=nyus8@;{W2|Z27dI;^k*2D|&rg6%2YfxVk#EVdg zpAw>32e;dSVsQWDr$WAjofyfqqq+K2g0s`XOT{~qOUE@qLnMu^Ma zIfZieyoNq*yFdXr`;|+!@Re;BkB~V7=2I9~FOD%>`-KeD<8@?B`8|BGV|)j_BbQ>7 z2aHk4e7h|{W_}FRMt8>DKPe0s|B_F|nkD$@cx1qK%?@766swcTTtT@*9(jY3ohiA~ zY4jeT7!a5lkSSa=4HhD2B@Zqbnh7Vp=Ukqa+)unYD8D#aytN&Uy>!lOhdoI`ZeDN4 zQyr1E;2-sUm{N?%K1?abSRbYoqpT)tZ*90t4%ivoK~Gb~2&i1$fV%k;HBtfNTX=}; z8?bO33gHm__fYJI-d~4vxctz(qmRZELLEk$1=#-*!1IVOs-eH#pYBR`-v4?5^ zvGHwV|L&-K6?>~g0i2C)AKwp49o`Nu)2R}KAiQ;=r%YpfM<}yPkN;pR{fMpVTAmkQdl8BD83mAbc|tAl;_Xe6w$aeLnwW0!p~kQEJUX` z?d0uI)C=RFydb+9c2Ye`x<{mf!f69lq72Kia-j1hdHQLUrcVLN+Yw7O)^_ra&mNTp zi_K*~g7xckmZL4CdFB^e{(6;0+kN%&@W|?;;Luzzel!#ursBQ=dh2@p@eok%p%)f|(brz=km$VTTpnvFCUXg8s=)c7u#;ZB54x52 zO_+&r)G-`0npG&@iq$;syAK>u6KacoHX8h5CrP!OqH7gCa-^e? z|Ergt*~a0cOR)a`GuQvZdtM&R;U9Sb>mLW-<;{-$Ieb6lKXk@SzsINLzUA+#(LY2JzOD=Kiy~>+6j;d`W#_4J<3V*Q|d%8h`#ChwooT;e$yXjPkpo z<@mK6e$%-MZ#6R0Pk6fAQV#zn;-k4{{HCY6FXHeGA5`t15=VX){Fd}RhfhL$be)<0 z4Of+C?N@KaTlbpvug<=O4|DX7qx~yMHp_p@vWAU0{3xU!SI%T#o?_NRr^IBG1q@;_Z!P|_$E0DAC6;x+RdKbiNimR z_9uLwx&5|PeSI&7f1TR@elx!16A%2%;TxP${D)SX@flaPy`96?+^F!8#%BHf@Rh@C z`&E7j<^QGGe%=3XnRXog*GC}#9nJ06_5JCaIDA{AABvdqfBdwlA%}k-^(XR>S$-vX z+pBT-p(C;WWz72f`8{WfIQ#^}hsv7qH#hv~J`NwgP0_cenDK{ZZe{5&M|`N98DBi` zmoGT_*P;GIY0n{-wE! z|KP)B`7Qiw`!^gu9r4!BX8pZ##Hdd>e5f|czk(URb8)ynhwt4=;jN8k|L@wb?oZ(G zmseHzlsNe4$sz3cKNI;6$H7rL4C>s+Lt z5(ghySoAhWe>Bn$$HBL0v*djaAEx@p!Oz|I9XtQKg6hA?T>lwsA05EapIQ;yKMuZG zty@_86+-<9$HDI_mzBrSzoUbqABlq>o^^mI3ehJn;4!%d33T*pL zy-wkSv(5hBwn0au9Q{j>e((|V_?dolw3x$Nwx7)7pRuA*|zh%Sp zH#z(v@}J|39}Om?-^k(nA^p(B=JD^j@P+cQgHu z2A?{?;V&ckJz}PB&Asj*hyNJ;hu|e<`omJ+_>sf^h4F`Q9Q{4od+0qJ{zdYCR+#m- zMeeWdIs9tW|CDBC{p+x1Gi$%vq5ei6HOsH+*j;5g`YD7jG}C`+UHM%c{uh*g$u6_} z`+WbvTO58N_TNYx`JaBLJ!`+dB>BH;rr&x`@DYxFi2DCyX8HAA_H{Q7AIAA}st|5iKj9KikS z7tIbT`Gq%{`LEOI{;N6s@HGk_jZuGU|9W#Cm;iWR`?p5^qjB1Q@1h^ZaP*fxh5W~< z|Nr`j4siH#Zz_CB9Qj{Zaramb|NH{1;lpP6Z_Ljx$KmTD{m4^h`R9D_*s~mdE$UA= z4*w0V-oTE(-yT)`hnkx0--&0+b?4}x!Tw*e$J~Eg)xCc&hi^;ukHden8WXZO{4Q+& z=o~Zu6I)Ln%;ATV{(r;UFLdv%f+}NPih z96t1tq92XJ|FUYw*!cV6JcSRwZl-^1SI-+b`X6Eat<`%Z@#ocX{D_+IB{%G6=il40{wZH=DaiP_33^3`esi4bsDJp zM+chQuS%b)?EGOp*5BG{=6~|=uRt{nZ_ z$0~eEoc0g@dKc?|ZMs_F!*THKKK!{iNB?ESN8;cwsouU4hkpz4(QRh=-}1)nSseaM zKa}6w=Jv1NJpUpNzj&d-TU*Wjr`LU&-OGM7;H#*?&1+@F}Z*kD~lSFPPh};FgZ#Ir_(_|Gj9&&%Ln! zat=QRJjU&I``hCW(KR)@7l7C4Y{tIj6*5vp<_bqI{p=SLp z{-O!ne=B{6_&Du%-IY5&=IGx=@|$YbpO=?(Vf}{^l%KW9jKAsL*6jLyzj2EH;68Kx zpBnoI8$TF~^-p=u+`jDkM$qN;rJ7dQ~%Ky&OFJ{{|4g^ z;gDH=548P^UH>|Q`e&Um<0pJF>`RXRdpQ1Dap?CP)ALad->HL=UnGwFCd_-4?Z2O2 zkNR87%>VrJliB%i$uWfwKW)ap*7RZ4e_69u;iKEl?SJp%=kDd||33C#D-QilclTSu z;Tzq6^oN=Czf;vt?EL2|q#ur>|LHfp5#i`ZUQzT*YMJflee;Ioa`=RQk^eR3@uN*i z3TuCJYGD5xX|Dg2oBmwH(f3LmO%#y3Ac>llZxbzI>~ zc9`Y&bhE2ZbNDdQk4DV+KCMqT;P4HTmHfl$X8uPcPx*|)Uyz9PZ(_y=UU`Mh|M=-6 zg^$L;*DL?^5RQJ&2-0tAra$PCzAtn53a62N9DMED-~EfjUseb8x0#v#wPinI?bo;E z6h0Ei{`7pec?*tyW8yy!{YJMQXVq~rG~++J_VF(``qLtc|411#e*abHCUN+CN&n)=Z`&11 zr*ilbw0~AdGyRIIj(*PJKSlXR;^@z?^S?aA;S*8+OD;FJ|0{dyvGecX-AaDp@6F@) zzR>OmIr=-X|3u^9*XQqK*RMWA{f!*?8Vi;5#mcGoAF=n z*fWyDUxoS;N;Tt`)qVbT4nJ)M%I{+{zUQ!uTXA^GUk?4q%b(Uy){H8+m&50w{G;>D z{qNWHYkuMIJu&M(+QQs^s|Qz4QA^qJ=V=`OQsU6B*5~=h zIr^Ka|FtvEUycPfv;KDu?YhV`%m4Vr&tA*XAAs#2j>G?`@)I_5_%V%?{sc43{b$Iq z3%hW5>mJqq(Kz^|28RxF_&t{@d@$FnKi~X$yd8%>gZdMF(~Q6KWX|6le%cn)|F_Ke zAvv2~g3YR%!7BYmrk zS%0UF7_^?lfBv(gpYnsb|5aYnaS?}~aaiG_ZOr<=?B3hi_47ZGemGA5>A5j_4o82% zY(?LiZl*t_#&|aVe910_5C3Au&)au|&A)j1gu<7+V{ZRDkG#OHpMCfh(vQRcmLsVz za`j(L_1|UYzxm>B=W_VN1C;)U#KbrODmcs)VbM)&CR(NZMng5p# zJ=BoJ-=grL{bu=B+E@Gohi`}UBQ4DRzsvd?+4b9-zgG04pPKPg=l1xPqksMeg)gaQ z#y8yX_fH&t4c6a!!z{lZuQk7o!{2bZq91^__;A`{OHFl ztbdLfzh}y)|8n$KBmdS5X8&W>ob@|7eDAr6ekj*Wzxn0|+4xcPUaWr?v;4lzE?&UV zA5QeUn(+yXTb|+Y<*!uqgCCmpKhiw04u^jk_0QU8roVB*&uJX~F!FC@neiw8y^oE5 zg;py5!|#~!t6x}kD@T9r#|m$4H~ar@zF7WG4!;TISMr6q{YSm<1{=TZ@{OV&`p7K* zYIVnL;pktE{U_AjT>sX0q_FWj>pn$48VCPb;QkdH{kFx3FEH2tw^{wz_*a|VDF2_$ z^1onE5xf3=H`$LK=K9}Uw(s{G|Lw5;)|F)53~jH{`}SHCsqB! zap*6)qX8R#ulbn5mmD(d&yf!A-@wtoev!h5ip=d-uVru5~-RnrG&J^`$MN9DX^rUpS8a{;BVj+8jOu^)C_!e{lF$?{WCfpD6yrADj7qf8(Rq zbNJ23e{i;0{y!xZ)#LC5)cJ*o%HcPo{)e;8_?cZ6SLX1Y-$(n=%Zx9&wDxx# zelX&raqu0Rp2zC{Dzty0-e&q&l$qR;qyNZNXup0i>(7=&1K;QHt-eM3^`V)5x!hiV zaQN5%M*DHdjQ_Xnf{q-1FY0efoc`Bo`k5*mzUdxpzujj0ansN3S^e#W^-noswjcSw zjqcCU4+{Nm{Udrz*|&EW@8{g0XXKeOslcKxNnr$|4J{I3c> z!}|X<_A9(~(k%bn%9peGYag{!^Y2g`{5|b{KEc(0{Nsv#@E5cG-}d)qbvb-mHAUb0 z%-nvHR85mf6JNU|G#$J z%KE>D(SC(~HQT?1%Wf{q@xLh*>Bo^@rJS#y;qd*QQ25Y7GyRie8?gC*@1gvH-<$P! zLgyA6Ir@X}{JcmU{K1=AyvX6ZbjA32oc90nrXlS5OBve#@`IWG^tMm2`Zo^c7rfpq zzc14&jN|zK{xv0kE63b_#=Uf(#o^zi@#i-){q5I1U5>+tP=BqL%>8HCrh{z$$7$^U zDRJH>wg4tVL;LA9!g*IJ8y903b>cv_Bger=~E z*#DQ9@nt*SbDG27JqroMIsY%~!)mPkdSaNuhx5$z2TlHD6-WQcJgon3X8rl6+`t8Z z?}*&m=lAx#h<@>2Np5s)+`rvRoc!U~U-=hI_x2xM{)b0>y^iDm;_nr{;72(4UYbI$bZRkGyOYTf6UsST6q3u=w~y&%icNHa`amvKC;t{Uvc>RuQ~jc2eAEr zL;dgKoF*=g1y7%umeaFsFt;FSY}O2Tp9{U)ra*p6g1Z@TU^X1Nt^Mixw`bw*4V?Zx z-25Dc{N3AsbbOaN!&h_ozMZiDoi^jEo$7lBhkyMAMLyp7v5U)oQ;Cz`rI#!IqpQs0 z-;WD^Wc|N9Y`>C;-uBb$Uw>NdiX8s}A37AUO0@H5b$snHb06dIA7lNk(O&;i$G`OF z1xGpj&%>4cLY2(?e_hn(K@MNsIs6nnKSX zg#R?_Pp8!{{mkKCE=2raX8gF`Ti@aECkg+z8Gm`v`BORk`8i5{;eqD%JNJfYSq}dP z+V6Ph-JSiS%|mH2g?8+0}5{}gZib@?q`a`$cyKk^Em ze;vQ`j+^Fi_#(7FA?^HU9sk3c`JZw4{1=t}>gPY}_(h46FXr%FHX>fjAJFmj2kp3% z!>>g8(PXpy25lI)oWuXy8{047?Y}zx_XgkfD~I2R@=LM2{a43tKKIKr9R3ZAKUn8@ z>66~kb@Ds)+4Y4EQ9R1pekH(q*_4uXkeh$BE{RQ_@;ks zU&!H~Xpj1%ogb{@d-SiD$>BSvD7>YezpLXP>m7WZ!^5#F@=rfMSjRuxAkvbrV_de$6_aMA>{;rPS`b(fThY$2t{9AGK@1J1H z6&$_=jvp!7`I$QX*-fUOPzAI9(EERrCvx})(0)d= z^KW(fU4|@Z$KjWw{nyXG)$u#}pUCI%3vw0z(Z=TSH`IT}C=UNS&L8#jb9MUPUjI@} z4*x2~zx4BSb^MH%2EM}KtKj*C(duUYcbuHCi^Ct7qQ;MKIq&$P({Hhqvo&RPxR$%?dt#6?IS2N46@ql&b zaP+GlRQPa)*?*ZjzYgm^T!ZarHS_xKI{%N9y=gy3|2WDobb*=wKNnti5r?1o6!QO? zx&5!&*0BtSzrG3jAM3pBPkskoOAhDH<@}H8%N6}-RkQp`@*a7fqu&kXAFO4r|EyID zr*Zhl79joey!`9(U)p`}NDluGwqLNHx&1PS&S2;7wf<4`Bh}6IKl)g;UL5_~X#Gw* zKU3#F5E!$a!>_^i3)e8y-&&mb7Kcwp{`K=Gb^5tE zw?}*4vK;$O(5f2tzdHSqHF~h~k3q*2BzUiR{O|wjhi$p~w{ME=SJzzsi$ecC#o;%; zqUh`Azv=v+>GjE04nKS_%CDZ8{=ehin#|!}U5oU!^WSv(@7F$7fx~Y;iuJE=rhmmv z3m)h2&tv>L+`x=KC*!9k9R4x1|KWya{DX}aCUN-409F6cIJ5p&D}3NMho6##@^56O ze_NArKXCX-O%+~0zfG6_#@B}T=J2CFSNxas^!9(UJ9Itv+B!CW>O<_m!Jp0i4_>-# z14qC9<%<7!_>#BRvFoSHNq&vZ^gsIg&IdU9)t|xo4>$MUeQ!TKjKeR)_;EOBrhjxv zWCn--i1e?C89)B*VeI_7De|wMKc}~Urw+}kar9qpq2wRE)!Y6$e#z$6n>l>FV$|QJ zUj9jM==yZv0GofD5K;0^ndkMN2}jqfUz%_?H-6n+sPN&IW_(G*J?!}xci*V+(Kz_Y ze_WQv(O-x3Q(AfH>+*Z%jwP)AorC9pSX<5bt-00M^_w$qBmdW#+ppHV-`M^$G=%Nf z%-eoC|0gQe`-f})UDW@YoAIAbeX%Kr|6&@_zsQUqwEtf={yp;n96wr^@!k48UWuds z8}Z-Lj9)WsK|K!tC9Z#lTbc3Kp7}M8!%zGb>!0Aolit&H(5&a!{PE>@{$WZRul^8@ zu9bd2_5r8AUrbW+3!O02FCLn|i^JcE>$lb~X8cDfx3=c+dk3rfM@M_--@5)Cn=+pD zKWgFmbNcy(I(}sI2{!&bGNSsAeSTt>8Ciuhi>4)|=gvwVTre~<2mZS}ExBLrtXaAF z#mUps(yz+Q$wo3qMg5{ z8iM$gPtEr8#hPnb|Lf>!ML)E_?EgKt;IloP z{HH&Q{A=fr>HH^kKYksD{{!iVuQb>H$gmCt9Dd_;Y`;$C_FL1a!cGn!y<71gj6?s< zf%X2!;lDutLq9)Eum9#>Z`#P=BPc)p{4gDVvR91(9RB_Fihuq5FCAa!-5o!1_=I;9 zKCGSprQ=7OI_G*0U$_P3r=7p0<7>=&mz{rJa#-Q@^SgBX@>X5G;^Xq0aCbBQ_ia5MGK4kT8 z*DlmQZU2sr-*feY@I!rl-4}T2$faSD^KaK4$!&RW;cBi=@%We_t=2Dq-UjK`5bbadc%h~+H#TO|19s1p?zl5Xf;*W~h{dXr({t>PH2}jo!dm`-lgCC>* zhE93wueX2Swr@Sp$v=3NlAqPzizm8to$%+f2RQk?@G9zGU$6Xh`VSln-pCZb_$i{ECp#E9|y!F@d|19{pn4^Cio!_RNpQhsz=Doni zAFJPo^^bFY+QlDz#qJ-zrJ0)lrwsRwKh$n?Ewia1d;Vqw@xc*h{DOJkviYZfBHkKl z#_t$Af;~T^1MVM)YIt3KMW6h}`kw>-!UHsP>I6G5ZI3OY1$%jjziQU$WGU-@HF^Ifvhi_|P)M zgMDe=B{i)ucUBh2PslDae^OCS*40IsNjYFjCgo%nCd2<(c}Zy*8TtJ)3)8Z)Q-yqa zOjb@tR(@uBVGNvVUH`wje$>jC&c@fD{8nL0E;aY>@)IUr$@PzW`eOgS%&gxtYM)^J z<0*K)LGU)O{B`~h_CEX`NB@pX75#9~jKA#N<>NT~Ch~8;^YTx6N7t^?ADPXyfABda zzm$V!`85sJY{AjLdWPcPs_q@%_4<$fAmdgJ-!VhsQzm%%*YU$1?a2D4d*8zTbB9@e zOJDqy_3xf9K>mL))9+ld8#_LvBmdSAvwclizv_Ih{y!4^pHM+99NrqQb0d`dE03SAPjd*GqnRi#^|OO9kZr zPcQ$3qw9w)x31ynZ!W9w){kEOBOG08rhoo3hu=9@;e#u@^mY0D)Ux;!PXC6VtMHL~ z&GOq2ICvLFzZ~YrmHh72U!8vCkE*co?Q^G~{#|RPf8EV9lQ{ZokpIwFbNgLWyD@t{ zr_}=OhbBLgJ6#u_{G<~{{~*Q3wf58Nf6Emg9^&M``3lv4Blmghuj5buvttK`A4U6< zc-(0tylStC3k!Ek8pH-;QbD4|2e%(;Zw$W z+fT3mr)M5!*XPFGuJG1sul$HEUB`U9ft}x;BK^6?%>V9BZkfc@f50_r{EUt<+u!B8 zhO+V-i05NQ;*7tipM3ZOuKmA6|HT^SZ9iRplhYRuwCw)Rr;r&5319@tKC7i{lj>^WAH08{qZ~A zzKi33IpX#6MRod>s{XKy!!O>C{^uO?`pm*@U#;fwzw}b_50CNkPyL>*wN|FF=UaVs z2*=M_X8UvU(PqDL^z*+%{!f_kUH-X0ox^YX6!C9+?T0SEi8Y(|=kSY=e)tzN{SCXX z{+z?_M*7x1GyRWhhIe!L2a$f{q?!KjyPsg=1Ba1*Bo6)Me_qMv7aT`?SUX=&mtWI! zCKqx1pNr?)g~xjJN5|iJpgwEAI^g+;_W7V)TNf1Pq^qg&jNGJxnQ3{MNpcoFJuN*m zIB$L;`)jJzRZnbhJ+rVdFG>8S(+Wipvg=tUU(G6*k)2kYnGdY0icQO!kpzW8rR-0WQUwRy5`wLq z-{@09psNTM6{M9qUetl&K4%NG15IZMbRtb>3A95^rD(?(G2w2y%9Z*wwr)zxGjj^_ zizl%P9ZSuDrlxd0t%;%M-INZb=YmqrEfg9pu8F9$bOk+t=oIREW`2Hdeu4$uGWt5P z9V#r82>ohe`=C}dC~UX0RM@OpdAa!zF)Ijk)8k>blx$uws+LtSK!`CoEjKqiI6u|8 z*e9Vdxo8%at zf%$2(GRGC?Wu^)neO+6%HPipEVmy%+O4@kG~X6gC!970TcpFgbnQ;i(!oq z$*$X&0>>__u$WRLAhbdd#NeEa%(*}jZ8Ypfl6Ujc3Pmod#7Zk>vlH_J%kv~XDqCue z>H+=yKX=$33Tel2ZK|L(nfY-BwH~eQ$88+}2?bF(lP*ikF3Ri?lo#)hAg-RRC$;3j-8qLg;~?H(m}z-WI`Ogpm1=`^jtCEXm@P|L$sz&q}Ftmtt^by z;8A@bl6XW3OZ z!%1*(EiOn;%g#<3lQyRxSnmX76fA^iqMl zcWW*6T%>}hP0LCWwlLPvraXD|ugdyxewi|L($Z>W%U0T(sMe9^T8VN!c@3P8843ri zUU*JYb%f~nw6||60(?0g-|#^=A8DZ!a2XF8g#nwqL-=#0%bfuKD>u|GYsOel_qPW$=3Yt=RuaHqfuS zNYnrIqW-t}>+k%cYA`7D+eqkt0lojt0QrX)Jkh7?z=MyJ1NnES_9OdIzXa+J_~oF7 z;*aE})9F+I- z0#^M@jCxkHb^K7{QLTETc95; z1%Bx9eI2;^FNO1cf~)=XsU3-rUJu;glN&#_UkGPYGkD$pescX6$2j|Y2=Jl%{q%MD zcRcgfVov_21bqfid{g_s+54_docwCmg7#H zKV|t%uLJ)+|6vp0f)B;VXO<*C%;8@Ke2Bs8{9jS+%_}(m7cT_*C4TxkeqzCYR0x7zyY>-Z;sd8RwyedFJ-wLrfV_=iT%o5jiR6>&aJQhfTO zmmkjryw87Jekaf`1^&c&!RI*qU}(SSx`40!boqylCA0qLSI~aZM*>!6dvE{I+ernS6%@6>+@gR+ywgnY{0teJTv{7#djU#=syknJ4*mRa)KE@ z`S6Yr9Dcxg!2cFMUgtl3OnwEf|2+!%@zJeiteI$VNbWj*WpV9e9A3O%y<~eJEBHeGL4I}Uc|U!<{oY$xV<=aD@qXaY&VZGVdAh{Ej!&4>A;RIs`+-YJfv;}$dy2!0 z_v1!)`RVK9*X<7#Kgf+=;{BeX*811ktA}@v(l~{1-X!n-G{Qo}v>Q=zN&wmx~Ckwvo$LsXJd~)AR zj=p$5Rp|YI^?1-+|B=P#_2=p@-cMBm_(PZnMsl-yolT6B0#)g0Iq8||eJgSC^ei7a zr~1?NNZznd-~}fgbpQQ5kiYn&_al+s5RR^I2Oqx(*6%v1r!D*aMyx^FYKH%gx?E!@+`Ki@x%OV_IAL!fqZI1qph_@_N|B~sv{OV4ay_v&Du>RBvbj}^o zrR&nC##ZF;6|PnM6F!#wLS=7!oWs{bJn>KGY!h9&o?N$9tl#?Dukvs&eLAO_aMU_q zOs&6`>%ZdtRKbG*3tlfP|ET{Fo~|Di9RHo8-xuP4>JRnrsLF#N99>Ty{d*;cZ*#zl z53f_}*o33&)D6?KIDDEWKRPFzaCH4}Vxc(S&?moLpLyxiIn#ur>;Jy2*ObFQr|BP^ z(@i+K-g4DVV*TGof7DX9^eihD{^ffUnsE4$Q@#9C`|Is^V)63Yoc$H=$13?Se*2ei zvp$RKzu!~+@%?hK`tP+3woc;kGf96CPksZ*jjl)UIe8g}KYs+)AMH*o`lG{7Uc$-m zPR;&CA5nR9M3=5j%0IM~!#@x5Q-4bTqj=6T;pqC{(OjEyYcj%1H#euJpTiH$aZ3;S556aW=+gD_nH5C-pRfPr&iCTOG4OY6 zTD+FSTeo5Jkp%EP0YsOs2X5JLHK)J59#Z%a+Ra${docgrWDfrX>JQ;bjzpKPRjjG^ zbNpY8^lAKwHU9lsWmZj&{_5U}f3iEV`2VZj`@=c5qNRY)t<< zM!JkhUxBwJs)f+te9~LGR&R2=7f1h}CSLv{PpCXT!qIj9jVE_;_^Fk>`0&lV{`8+0 zx{#B9(+t&q9KH#j&q(8TEc}>zw^rrk|KrnM z`O`Toq<3`vxAVdw9R42-A8En+UqdcfC*Du$)1Qm+d_l55DMh^g6b^Ww^*p|blu`!H*vx_g`pwQHK|BM) zj952{$pz`vIx{;vE3XiC!HUhqXS?4R;xGRNZ)b!4N4%31>KZ@N#a`*4vu(OZaAsP; z%phjO41&)+f;nR|)AKV6Wj1g7F8=W&sYYjUK83IS8djy2SJz;3UVpM9!&(3L-DY0A zHG?02o}V}KDUNiavLW{kuN?$7=W#%;P5P@6!73JbwH* zXJ_^Z4u9S+UVJo#x4$DkY}S&)i}RgA<oH3XF zXi1%rcQ!XkB&=mY7MzU!sWdbA*a4Gq{rdCw$_EoT`*{S;C3bdWT z*r4bU4*&bd3U8Nii0?l+p+3hseDjJ#8LvMp`v1{>cA)%!k~>|u&8^19e@|)lgZAMN zj;`H48!ygR_1T}Ue{1#6=Ivk856^7k@a@j=)}P+4}LHGj4{!tv9aCGh8y-6;I z{}|6tp!!=k@%6vHZ8z3_%Ke)S9Qq~ro_nH8*WAuOo#6W42U`D+6~7z#`>bpZ{|xRQ z4Wj*s)qit7xBlSj-)|yOR1yd+<^8ulC!-@d{EZsEBnG}((=FnBJfHsW(eTk2_%`{6 z*#1)<->*&fBe+cQALwn4-zmLx$Ltc_U*JF!UjhCMY>AMEL8)tn5C z1tiEF4gX;ell5NLjZ z*;yHK|4ffyp4iP|?@NGP1Szl&Ks%bo+ivny8#hSP1SrAYyWn+&6hA>*Fgf58tjadJp7juI=M>dM_&2G)r-C{1S&U7h|NJtZZNrmBa`Hh zps28Y1U4nu67B2WXOf)-W@!-28*_1k$)r>(9`}- zA)+0m?8QGF?EP%GM=SQOw&46gf3u!R{a~cyR=d8_m zN9GiWIek>tem^+AuE)*;*NU~j65n)v;)RVOzpIO$pYkcLPm*7$?~}0$)IR9^=WXbl z#qs|+yx%hf`OEZvb3G4TE7tz1mw(5g(JQ#}7gd4$;`_>2;Vd<;((@ec0<{l%`9;%T zt;m&M^L!}(Q79kZZ@oBC6-4XjTCw(5z5Et8r@h9Nzvy|;pLZPj=y_Upf!YVX{DE~o zyOJxvOIOH$e=lIs`HoKlJ@FThfAy5}?^g?I-3$MQE(@PaP!x zDXjf`&u5J<66J>~x0Q2k+CO#+<_}TcLnu>~ACG^!PuHBIcZ>C%8XJ)RQMf;AS+*Nhci*!+i^+A2xV3O>n+u6nujJ%S%l-K+`~vkwdT(EYh6 zpGAcz>EBdbFo^G=BfjW){Yv-gT5rlr*_?ceQ9i`K{hqs5%z7Hs2tGb8dsd}Dphk(N zpU(|b50ZVL^>H1q6=&)D7cN-!@l&FFegETgm+DnMvwk=nFEf^owpDLg70M1rFQ|5NPmMcH?byYgGuZ4E{Y|CG_ zV%&9H`FEpzqw@bN|2J+Of0Qe~>Gy8wz-Qv0uIje$Uy?gr|GZ)fyMFN~wlDE->u0)I z|EXNM{!%IT6^{QWKU1tx`K9H*zgDBQ_h&sJ^xvxDwg1g9f06W(_}B4TaX$ZT<*nWB zwM~QGRtz zK09E13_*UTK0a2~@cLJ3SNc74_1E)6`Q#tc`1>sQpW;t1Ki>FA{)s|cR>wMDHy7oH zHTxNX@=F;0Db7cD{TkGM_@Lf%|C939%HId&N15{D*-!Eth|J?Zyf;|rXGHUV=ETrX z9Z%)ZmE=#?-$FCK;q-G9+6U@i5%RMtC_Sa}^edH1*ZW@_#O9}cq}d1ZAI{eP*RJ1M zoS)_!U#_oDnxcAG@L|;t&bIs&Jw`U;%6}C76U)LLe4mob*_OZi+&3=f%1^=Zi{wxC z?QF|m_0kCO{u`fs#%twMKRes;Yv`!Mtbf=Y=3nBE_)poX?EcyEe_`ZjaXz7s|Cs#rYjs4ZU3YPUX_| zp`{gB`R@%>&G({z5QAl^<{X3S+r+og4mJ z_;2?7Xyz~K{E+T=ey{aA+O-L)e5yAVmQGGM;OR=W+UmdSkV5auN+zm(aMfp)p{%@iD_40MRR-El0((lhS==hl^U-y6D zwHESEFQ4Q}c>QYolX&CSd7u6w%Gb|F$w&Ew(Y}#?tK;?ZsejS$9apv)F7#9PPdn~#PA5Z>p?1ty> z(vSZr5d5cT{682&KXtsPF!-X&KltvLD#Cv1@_!7=r+o(@v=8yxH-ZE=<8}P$VIsfF zwhwdBK3oCuJ^6Q9*@u$5PlUiOG8p6mnZr)?*YKmF28`=NLF=xouxC$#>% z0R5koCzV}`BLDH^uN80AoO?PX{eR6rzX{_5)@YS~6`iQ)==gZwr>`yZ09Sq%j*p>A zs@&k^r7J&z1nJs&^*d|a?Yk1&H%jLx|EbzHisi@Ce=3)*^{4b{&6VGGuF{|IU#k4z z6^j3O;ttAU2ARpbQP5E^Uvqv{x!S*;{L0%onO4O|7~`E$SXL%qw;Bg+}W1@`LN>2 z9RJ%MRPrHtkpE0qb=UuINc(Bv!x<|@`&QT5cR`Hy)$v+!zOU=1ee@$|9~O;K{VP&Q z<&A|VmCios1a@yt75f`~>o1RuQ00e4q5Usq`C%kL*So&oo-Fip?%hg1$^U!^-yagX zMdfcsv3z~})A`lEf4k@VM2`QWDT;sV8?--@ODP|O!NgYnJ@@#QrGkH=`ySfQ3$CUI zG46onQ@^3-<6UoDwR#H2e?MH1jbgbasiov!BiLwE<3?QhEsGTYp((1|61-|~-`6ny zLe~?k){FQ|jfmF1zfM*?t7I{@FP0y#eMx?F%^H8+4P5`-sm15X52CA&ar}YGrR$)w z`RxAAC++>Ysvf2FPjtF(girDQ1MQ#ef&FXhe{0{{C(Ov?+V>#JCz`Cvjh3=}k_%mb z*>a{9Cw~jhKNEkpeZCs=SL4j@A`)d;h7u?spw>+_N~-QKB_A8N1xwyjG>?8uju8{_dfIi zujz%iUn=+yY5ez&!M~2zilcO4`{!miUa(V?pQn{yGo&8T)U1Kin|v2v`0M_4~e=NW1lz%?t%Krn$cap#Dmz*X42ZMds z^H(n3>*e3VaqMjMf82#RojCsMYwb(=V@)|b{U09O_ygFt_7wl5@ntdcpMvrTmNGvo zg8EANKilrS`ylXd`{$JZ6UF(FRYr}E(X`U}4=GCBtZsOnUYLBnyZk{XRs7-E3HU%+ z^iOd8i1ZrS^j-A(-5Rf+E9^hXhsMV)trV2xPWAz*`pTsr^!1bZ*H)h@?DGlDJ~vKL z2;DyGcq*5!Vf;YXt^MYU^NnozFT(lJt7(eUa5*KP(9F`wU$5VZC$9llGf+c6|M=q+ z#fZ+ojz@N5UMjcG7v~H4=D+#4z8N|f{d43$WbT50f=6acR~ejM_(lt1eK za_qku$bYb!DmR4X2mK{_f2rvG`aru;yF~d>t$$7UT|F1ZbD2u8e49USG0r!tAYQkW ze4Z`Jr}gXSG5)z6`43&7_zzyGu3@Jn{u7mtcOM#cd!f60vOkZ+Xy16{>+5e<*KD84 zt#4lNl42nI8rlcsKkoXD<^XTKb;%oo|LQfo`q`#6D!@AIzgT{MUMlvl-&U|c$`75& z_P#=tAJod9vOqnj_b+t2yoI>G1>IjPtJVGcWPVgTt^DfCVgB;HKmRIT{(wHgsCr$O z;evmCezYV8|CH|H<>vsqD9C<{_ zM_WI7jO5c#&3{W!KAL*##alt`mj#&%b42<2`sOq|Unx>u#UG-jEI*=^|M!r>4Wj(8 zCZ9_$R1Fn+4dVmZs(m%{sFh|}VXb}d?_ShUwy#$HI-GxnYhe5Y%a11?eSNT9wPEF? z|D&xBR_&`;OVRRwbi7`HR@x7(KKXuyD4)i6vY*Xkl&|Bp;;a(whYwo6`<;-_C~bUs z8OO(zrAQ^ z+P71T@^!pcoE1FB`^)WX*ZwBtquc*JSiYsj_u|=q(qFp1R$MTNn;%Wa_&Ko?xmW3F zaHYC>xpaL?aeao5+m`I_D&!N@hRi;#V5pTN?B)?T5+dU-GahKcxAG+hWLH z$7{v;%D?uBzt0o$*UNu3hWz7%-+cKqi@!-9D)`suM>qCUoay>W?WXfh-|0SG{~2~` z3$A^iiYf%n-z~Hg_C60PP`iflJ6*5ayHT9K;F}+vGZi~h1=W9}vr1<_BUt|b(RLm1 zQ54^QlF+4u-eKtkA%x!HlwOnwN|AOk1QJRTlAv@JM8SdtML>{uEFU{%>yPd$%_?o4Z8*^ZCrZ+r8WGd-LYao7t(mBprPC)DSCv^#8>B z>GyJcoRyI6=hTAX=Scj^>pYvR_~@Vi8vV~DW&15md_srNf_t@w=O({tJkoC-u{$NXt`J{5UCp=Mgf2rKSGU!qdMgap4D_jNQif zZ}!>GkMjMx73`;s)PI=x$XD<=vg9Q1|16)gM)d#3OZn^U5rPUI)td0~tIm(=GE_XOmS6RGl|eOm1Lb$;k@a5r@jvu0U6TICBiEz2Wd97z5C2!G zq1@P8anF=ek&!{|tD;W%$E_k?U6N0@{tfakEH?gO(tl9@_K#)3vr+oH_{ z>;3R^iWML8mnO>cWk$>LTR?oszxBO?4l6$7ziY6Rzr2)xTH)kh`_=7ZtoV?B%AFFw zs+2z?Jbd`i%Q7EE&%a}@75|_tzvX*N{AvQ<$W-wA(DHiU1{j53>@UUe5!f~8@NN%( zNAd;PcPA+y{D~>ck@IEoKH&pYz5o}r+=}0{^LtiH{i^upHqjrT!1^vr`o4)TL#8)9 z!2MUA(ti3%HY8R5r9Q8~`Pw&-|KrNvxOMvZlu7L|Wy5W6&b@)9S z3;Q7bnBHg6zLEX#z*8x3K_4HsW2_FpVSj;-^$E@lk*|(vqQ6kZ#Wiq2`%T+aRfoS& zcF;pVEKlTXDE|mt(6l)Yt^Dtz{+1mg*k?7=_=+hLG6M;Ex^x$k-{&7ue^+ZHEYqwm z%fDJa@w`GIH|Uwco!jg5@+<8B+MTTvtonidH&2oFQ%lxQ)5EhL75~RKXGiJq z&&&3)SzFp?nE22O=pTIsEYazwacv<#$`|w!%Kt!q(2Hl{7Fgw9BHQ= zem4^V^xD@oU$f%FK4$~JuGIg1Vd`Iq#pLvHR=!2UgI4@(=^u7AllE^2d{+VSXGlI* ze>~IBitm#6wVYBv^`w5n#h3aqCH*kNy~~OZ{db%#@#{5puMt7u!#{+wPhSH?K7D0M@lSaBM;+gKGK(?eZ%zLc z5-y()B4*&7*?U)Jas2E`f#Ww%E~52^I(+5%Ks35C0`CmISlYY(N*!N$p5%Aw@RjES z(P+K8yn*+JmQTIR=YRP8Ki(hizen0n17SbTS>f4_ieK&h%_VjCTTy-+O8YD%{?OsY zE9vlSOpx+7lI1H*d{gQNbXd%@0qa9hzBYd??Y^f3L{?U$d#yf0+1c`>NgU_1^t`AV1ny&)1jwiIMsb z6Tg}SLNWX)dgwLX{!Q7{X#b|GG`=X;Z5MWZ@2_`9-W$o+Up*uGkD&jDeiMQitK|5W zY~O~O-{6+=`{;WU`1_+Te^Gy}xmVg}8>#hpL1%l#Wu)`#3I&mC3YAJyl9c7BlKo_)`^#SQ8sQ$W(2|dBOmm*2O_kMjHQB!O?XmHyc*ocv?9=FZgVe`8C55B=kOj!^PL zFQ9+kS82Ttf4kCuh4CS_Bmeg=b$-mZk4;SUwttlI=>s=IAE z&GC(@f$giKHu&oE3S7|TjP%cL=jGR>%x^d-2S|K&BkeN?K)C_EgT7gPK5zdA`JbM0 z|9#{ylkI2of_P6=V11Xs1$}FD{mwf4)Z&5m<14@NoC+VH@&&k{^FQj($IpV~uN|S_ zPm*?1!1=*{T}sjRUyW`ah;J4Wf8uAG`S@Ir{5wAp30L(W(!WW4p?!7W*ImO2-{+sv zzB(Q+&NtE2b-fS=14`JdvgjfvyW6yMQ1jvu} z+XJ^q`8x=FPnh@y1eLVn^x2Da?b~zRBz{MMZ`>cAeoToAnzLZ|IjjEBK7V_r#P1~a zA11!4pQH7ji6`hBHommU8MfQ z#FxzisU^nFpPD_5`%j1BKi^Fje^J|S>hnGz`33EB+@JT{jGOuRqN$88ye<6?%B>;m z$58$s`0zg^;(p&~)epu;Kaujouc7?|^+GUvm2w|=k;|{{Ke9mjH&y;n_=W_= zIOM@?%?4ZL$Ns8=c8WiGK9u&kK-hn{_|Q+BvlL(d>9bGhr=dJw#XKzSGfaHoLO)%* zJU5rukLvuDUO$L`xZf0VdlrQ!e=z_{T5|g<7rFiorTwtRM*pGa*Q)ZLtk`WU$5-W_ zwMhtI$a=*k?NgLGMM%q~ia%}3wkkUOS8e1Eg|EJ!O<2@w1jkqRUs!7+e^HC9y07Z| zgfnG6E6wrM`3)c0$X{FsYPkpffDSnH>gQyiLG|x$+CQ2HU;T^myCcG0Esz0UfeTux z+{S1f{#hwM@ZHPAxJan>v+DnMcIvUmTE0*}o<{#tcUgWHhgW|=ZqNzOzxb_A{@)tF z69|vxk@%tHcS~)deX{tsYrOsM^ABjBEa@!p%^uP}ED2A375}E`CI8jo7r9U3I|RO` zfcW5Zpz+;&e8(q0-oK6}O8i>{zVT3)@=LYul61|Ag~P1)rmTM(4wLw|%KQxzU#-8! z)ZTGL*MD{FAL_p?NqKuz;D_6PRZiwF$jlDuBYFKEUoG(cXw==}A8P%sJ`WsF)LWqO zxv%|?>nBIPAEEx*HbXu!QM|9X9t_X_H|bV^ z{4toIT!B_gIkbWBgZ$64eSjoe1l`5^OQ`Y%T+nVUGPLKLeJ#gdeC>@RLO-6D3`9f$W|DP9l(F6h*a_4xQgQ2y4l!N)w5AYgd|xS;iZN~o*D?`VUM z`Pz2)mn#JR@@neBw|M)?RLbv?N#cKQjH}7@)#H%ifiV6nrGa5i?7D`pU&8t;yg#0k z=anvrF1-( zrK4KyzN44bK6gp{emH;eJJG-G3=?0i-xoA_>pm+!>i15v{$jnQ{Y!i#-zTr~1%4BB z-7I4@$5;L5U}-NjOT=|-N{P4|$-%6^DLH?25 zg`}QGWcyI+Ka~7U0VHYMXH!n_`bAxz_Js65sBbYo80!5O`3icq>Z^QzqM-Ieef4~o zM4=yZO8))xafagg&@ukM7!KrF7zL& z|A$owOhElb6UK4;90h-p4Zd&wGoN1``uNDuC$9yH6Lb|nuaSq_w>tjR?tkL1uD&AO zjwb{S0tj)VID1sPzhFvVQ4-z5ggu*K;+v8mXv@EQAL0Hb?>RaDK-Pb|DhU5>JSN&_ zZi$a}Q3$bpKet`5=5L*TIt>)^n})z=D+;HdEstLBsl(rl_y3=SejJ6w?@?peH68xz zlcgt&7XH^=Nc{e@i+T5lQ0?cri2~m-T>7gg!_yD)74*fgzN*6WH}3hs{C(iG$Y0NL zp?`~;-Y0Bl7w;A4Vk4pWp0iu22miVX_ z@c$qxvkiXuRd<)#R(!0VD}xE30|h=?DfAx-AHRdfK0EF!-T4L=>qam~l}Kh(7X6yx z_8+O~S>zmhug*TV$^9=)DYs))c=n^>pIevwqz=D-DdEZ864zW^IQ*yGheqr0SB@3- z>6#;PpDG-F(aBe}=NI*r`?I=%yCyt*Qz{7b?e`aX+pnflzPiZy$DS3kd`bL*mao;( zi=Wf!XM48n$$whN?T}Q>KlR!r?H~91|6BC~j_*sprIF7$d+CT6=-X{d{kYnRH;RqAoEgtjb^Y3HtKW>#D{{K#?AM*~W zpLOBs2lfT}bdw(1{p}hyLP3%3Ai2MIsQv}uf*zXlZhb0WLGOo&O(p)9LTWc%JD-+z3Dpy1#Va)WlbGJQMgKj{5xyz+kK?jYAK zh3LQV8UvUSjXi(hao)aH=Z}v5N&LxipTu1+^ki6`)qQm+H%m^P(U{K<#%=VUw(co3 zZ4MFkT(-rw|wvk_bUV&q* zg}fta?YowH_osJC{Aj8FB7chixuyKv>Q0f0AKI~eN+IM+bnLyCz^7of`{$?xk_k{lC{BJ{^f8|?t zh|X9=<;HKti_PcwE=B%PHu&oE3LG=! z4bZ$bMZN30+#AIE*9bX2x<)o&%&8)O-BSOewoy_2*G=VD&~6Ev0>;1Ha(~D7W&MKl zv0bwNS9m2qp8Cz9+~{3z;ZAS)RrY_XIadBr<}dp1LfOwj1%KJ^tN!NtkFFiqf7EBH z_@nB7e9!l7Hmc(d*+8IQvw&>~=prR`VizN6O43wg!t~U{rp=PGveILRCS}~4l+oO1 zmNg|awr5&uYIDPTzh6S?_$f&lF~;18e$Ddja7sxXpOTT3m^CVNr&GUXqgu7UA>CK~ zn@vqfA2mHCHH!d!2~C_%i7}EA$0x`3IcYQpSXY z#3W<(-29-t3QtUlo&6j@)JP~Q1_82dx>`=kOiPWu*T_hkFog^vc38rc>7=v3pC@M; zA}L-livo?FO=FC%EfSLxQjM&XsY$VS(nl9#NK$4}R#WedUehxYvQpAgW4xN{Vhqhn zOQ&bJ8ogk8Eh~>URdn6l@ZCsAO-!27hss6_B~vYi|3UwQn&~AIkj;&$nG>fZ%uLFN z9g>!o)q6&IS_T=1G_x3^DgKs}k&%`Wqc|FQiT7{#sk+YYe0^Fq_58-8M`_HgTohYO z^&M}+;kh`fzun#Fz4-Z(EN6(Xx7o)GxVYg=ZDLUWPb9{N(7wukh5k`Kimh!Fh~JSa z7>=Ja{U(;TPn}H|w0wy@f2Mvb!Y{7kpPNfK`QUr9Zeou2LgP0m-!+x+ORMY^Z=^rXZ#y~oYLXP93uHE{dfFoJxZ0<;m_gnKlb182Nyqe znec=1H}h?>pUS}Z+Yj>BeSdLgRtT<*RsH;y>KUYyKZWEs8x<+A{#A~5H(fTcTtq|( zb${zqJ!yVh^(gl2G`)QqWcnsD)k0PIJM6puu1-IHeMo%*wW8SS1%dXHUej+sd5zTB zuHwHIc5FwzYvXkC*E&Q0GNM>gE4}>YS9MwZTeYlE-tVe@w)AN}TZjKG?T_Wu;2)uG zQH%KpHFwqa-L<*Z*OiNmEUC_4A4~EZ_3Y)(^VDUz^=b#nuj)Vbt>>2M^k4jW%D?>Z ze<1upbwlFcTVv?=Y-=ea78I z_ESu)Uz(Mn{B04%s%#7_zsO%t^D@lUpbTJqRK?%_+s1)9`&?8kf;n48vB9(s(OSR5 zKj*$zgT-gd&I}*Af4(Me{l22cGrID-emd1(`QV%H)?n_}sshGGRsT?-&fm#8eCPL6 zzr@+gA5Hk49l`jje*PNzm>cBX9eS{<#)C@{$HJaj-~ZEj>qWQ0v|O0uVcoTO*;Eo`vckk4ZvS{e)3WseyI`>%+)!H9iep) zR{4>?abs(-oX)}iQ`OIX<~pvQp!S=S#%G<~qgV#b!_ndAU8}@6QrLOm7eIT z!yiHNn>~W@p?~*3RapGl(DqqJ3XR|9a&&*)^RP{5r&aT^Z z`0o?GoA6(@!+(_U?+=Z?_m8vR>hQVzo?D~X+#34)bq%P;SQUy&Q03qLO=h+Z|0?0L zUQz6%jr`fgsF|$M68I5J)OhH>#eN&%;^!`UQ@g)ao#;S(Ci{sCioc^=*GoG2d&LCe zJB!GET+H{k*+&a{0bSj3UmYEOl7jDvDjfbf*Nj0r{2Yv5Gm*m%jN8fc%EQ(F)h=Im z)8T(6$JZjg*3W$BK;t}UyLB$m3+TKDPd}o=|69R_{BGGF4GOyi1up2Z^r?J*s5bZ= z^Iu<+=XXJV;Dd%M|FJJ#;p6*3_@(6jiK_jh9E7X?ZC^}0p~K%G=eIz9_j)nT1B!Bh zbb~@Kpx)$N^r`wQ-qPW3mGiHlALkEpoE+yLhKbL< zoS+@wUoQ8L2R`KYoiAsD4?hmt>4A%RB!8vN%KEx-^TF}q?^KW54j+LT*DX9IIy?H>Q4u7>rNan+r z<<@7HHu{HNK-;x^=8O)1s#3mudVznCemazX{>}LHP91)(Z~s$~$7ZA$*T;C3FC7X4 z$PIex)zMo2{97x53;md}Vjcu&xcE)3U-(%k|MbS9-UYsEx9|_3;o|qLSmC@5zkKUJ z`CSb}`33di-)=YN!bi!xV?O?Ylu=`>V=CTZIvQJQHma?6q=|;3jJeP&=#K-YJ*bm! z^D$9!kbdk>jPo_@_9+G~Xr;?N`2MLu{(bgnk$#jWY5Aw@7QqCg@v;BC> z+hb1a@E?-@Q9FzYyybVK<;n-ao57zxlYt zhy2J_-~Ml5)}Qa6zk7^M{w8w%IPiV?k^8KKo4@@MqqXhp19E>n_+R)JA59bG)mQN4 z7w84F^YCe}>*R0HBvAjZ2ys3%Xt?e7cL%><=sUa;~%t5dI8I{b2SeFyBr^Nnafzm$da!S$P?kG{VKxS)S7tgLMx&XMbzpnvo~cxDPc zg)4u@muv0O>E~s6z5?)J-vz}tJ@>z%!;hBp4^@2ggks+z^uJ_6Pi_0lRzHIahCk2s z!bY9^w)!a`{=Z8`FW2GQ>Bsm?DPOlYo1U67ZF*8{YTEduQP%eH^u#PBV z*p$p+?d60Z|IJxxsY!GjGmXZ;?m#cIE86+rk8}z2uVx=nZ{j^PT>pCX$x2%P{bBpS z^6A96FtT0?*S;@CIZNsEd)>yqopQZGxcD9S6xHtkdUMS{{h<7S`ux{m+xH*u^g{m8 zI@3G%kfy_>3U_Y#B`YB#D}H)r@{lC5fy^wL-c<-dKVBbd`O$vI9xFi4RtBP*DnvpX)oBQ03 z_3oH4YzR%xgnv?=Cy!Go2Su1Nvwibvecb;$W?}*v;cYZy_P=8eZ8j?Ih9`a~5-)Uc zVzzW%r9Rl z>g$Ds#yu+fUB97un9k25g2vH+3tFqluK7Cr2$~nhgC|w2-`3%qd>$qZDD#K_T+pT+ znlIGh&z~co7;Tl`KM(LE&HHrz5y^6gm-a?m{JCof=^#Z< zxk2B3^qm)V_$%c2A5GHm>b<)%&$Aohy9q!2o)X?@hyT&p(iL?06Mq&@xStg7d3N}D z2_+bh2>1p%_kjn$(cu^WOFZF;742a=e8#c!!S6h{=wmwky1;)YfBba9<`DtkKu=%$ zE?bB1mig;iWz~=0emc@dA7+o>ab)0vx{kD2ro(^nsF28fO4#RS!qd)kI9#0NQA7YP z=(0Np7t`TK{VSeutQPY3IjzT!-d&vWhyYyBq0iQ6rNi&ETRdUP@yd$D0{z2Gni>|4 zf7rBn=Z`vkKL48sPl9M~=Qj_W&jm+-+@L*9kJ+ljZ^-9=Q*argeA(gW94WzgM8G%D zp9YV(Lx=yp)Q{68^#3gZSo8PIqBKA1LL_r+rg`8L5r7MN{>RcU=yxx(?N&N=g0Hl3L!tAC(k1S za6#v_JziCZzjM8OVywvD!ph$(^U!e}{%r>ZzUx_$zXIQ1KVGJ(Lzu(Gsh#{||9mS> zhyR+iPxhfzem{O+Qb0K6>%^9wS9SPzd@dyNJZF{P@82+w%lM%b;}HRR2TeFNR9k=T zgMMBR`06@^%`~+q9R0jjJ@!|f{Nr3gBF82@{#ly3&h?YMHp&|zzqc~=UC?@tKUR&R z`AI?RpLdgfT+3+=pd7Ds%Jq|me3qw&2egO8m4AH*^wYETv2i;2`T7bToQb0Rs`{~8 z#{pc>lU>SJ(%~PH_^g4bA65J-1dyNpg>;N{EAhZa!mon%A=b})E%D7~Mg67X_o0rx z{O}?F2QT*Ct&^Xx-{8R*Z`F_AK7I4_XdMS%%Ygt~(57GBoub3PKVCdxmKXifs{FUL z3s3&fGG@AT_zBmfL@h+WjEes|?avvGe&UK;IIP2eNzSh_D(LZJn}z2ezIipSo(`WD z{dyDNI;gjwaPg~tS$mNVKkcH>kI_*0H&s9B)x*=z;yszMI{bwmf$!|Cm;VUaS2+4# zIO?{KbofPo75I)Ht@i2n2V6hqiqP%DiSuhT)#1M{_rGujlwZI7!#^VpLYiRzGvTge zw+{b@XT=kq53Ty~Gp5Ld#&nY71Z!F5M9e#XH8O9?5a6!vEPt4HaKPdHMhLGRfUWW0A09;UK-I67B z_oNyL1lT3$=LwH?)Zt%~{=xaOkYB~GM(;=b{W1I7y54Aq-{97FweRoV^`-QX zOO{_1AMHcF&Xh+4$PN1Yh8=I~hL4aOZ*(+p9Q|Z z{PxcXuYK}!jhWi^Ghe^TgVRQS=!dUk4M^aoF5ON>i4}p+HBM5pRbSQ!I&ugzn%Qv zb+WWp76Ezz?N(=F6i*%PaM?gXUYa4k#W>oeuL%rjIT>=JbV1^+m}C~!*{L_ z`0hPc{}YTKPuM&nKyJ`WnIFBY!=Icbo-h;igU6~;t!sxdiB#SO>cq8Cc{GA=1(Y`-khyUDbwI9Fy zz&D$a{wX4;_^;3YvA9nE|H$^U8IZrh`0j=V;}Jo{Z}Vx@H+1+>Zt;Xi*6*tS!TW`? zn!$KPQ1SovY@e#bf9jZc!VHnWc{A!T9uZXhFKW*JT!+us|MOtl_)o~s_W|G$LB;>L zL1%6Ifv^AP!4m@C9ZCA9h@j%{zxKkNI{Eqfe;ypkR{!kJU&!x_BK=cDQ1N@8NYByX z-!ApT67}{E{PYM~r%w?<#s8~r>s~ti1UbLhXf58qRQo~uEw5p1#v_7?za#2b?fBYp zX+Q2s`IoQg>QsIyBB=O(O<1QL|C%KAcIDQfOzx$QI@j=)>izkVBlmXvBPyG6ww*UX^Z{h*h2g3e8p=+Mw z(Gq7jec}BY2=aE&`j(002j1E+I#Ql@Nbd$u5qIL3VgqQs?&Hjbi=6~{`6UqV|DoNy2TUj zw!%NF_!u8?b)kJ!DEfjdmbmuR=(B|Pf2#ZQjv)CxoBi#7^nZFYnI7i+ctC!OtKj~t zyH6i^MJGSspM?jv%-{U>Y2kadAVBY+GhV4PT!+v1XW;?o$J*iZeOh=#050gGwPyaN z!$0R1PdGBg_=t)>l=?TE^FsH}U)fP?ybk~2R|URjp2%N;@7MQJG-T@B78?Jf%zL!$ zH@?3N4>&(rl^_0%?=!GJg>*Rk_;yb46_46G4ZrmH?D+6};lb;>gPKVF; zui?QX&j+@XKaXVR5dm_8zHs*e?1r&MFv6cK<6IGVE&W73@rm%ys($c(>bP8$@rVFi(0>{}_q|SjzCRHUj>)2aRPmu7 zzE2U42*3p`f7hH@I()uA5f3hjpWi-3e6Jz|;DQcV)3l}zpYKoP4O4{tcKCdsA|4Td z3tF?yD}U+mw@Q3Rj_^P6s{-rC%rNV(@ukLps>6Rr>fg*2`K#jh=}x|h=4Zx_t?7++ z@*7vicGKbW{grrdO8w-w&l2Bj2?2Tmjos1mf)4-gAH);JXF`4zANFZhtjTyp050gz z_jjJq;hUsyZ%7v9SKY@6^GlsEl^Kr+zy-avXDRLcp9|2x4L;_Vrq{2`ctij$XuCts zKXmdh|5QG)UoSt(mm|3ny(3owd{Fyv)t~)t*5OZmUp}%+*uSbD)L&?0fdM=btv=}WfDWJU&&7i=wP5;z+@RxI zM9bzW@CT_6Z*1-@)zM;p<=3`Zwd8c*1j^@DFzTn6WXnm^VrW&^u_^#@%kw z$?>{%k(EIO_THfgWGkriWpy^lRl63epr2fqrLjQL7IfTz60&qd&-A|p= z;ZMz#Pc#+wV}~FAP%XwI0&qe1AB@tyO&@*BH$Zn#?JlP_xC-}|2x9J z#Xl8@KZxGHPUYwH|KT?2|BXC7e(ipG{|321e}80DvQB>J-zoKz-#(n)y*Qy+nN>()Z2#r9*PL%e239`Rww6{-^#vvi<$E$M$Y9@5Cd|-}W|w=*i8pe24Ns zCvx80sMF6H>3=+@Mf>Lf;aTmoXjfrBIkOrv9ubhQpcOV`7uDg{`JZ^g^`_AO={|w> z5C7&^T!Hb309?@e-S5?oPwkiIx3h1B{BQORl;4NHl<+Ac02g%5qEEE;^N8G^!t<=? z-`GU?!95=I{a{O~AHrCFI%{^tc{=?xXe#~lbN>xLrp0NkeKtBGQtX-~^e^Q1x8DqU zr4FZj^{9W($2$2tNqqCPD8GfpPj3^UZJ%tKCFD2Giu_G~I#B;ZSXth zcXf9V>(rd-2Zr7^%;){GvpW09j}($$k+F|q<@INB+kF&_@04L%#kO`kz1ZW zT24M6uKaC&-!w)ie-9}?&eyb)-)K~y@rVGqLCv?`s-=^k=N`Hca*mMV^V(x59Uvz{9d5;oYg+N6$`I^-{QPO zJO0)BPl4}TB=FyUI8c7HuhN&6XFMW6ZqVFA{P5j1?Ay1|cjT7Q=|AaZA&4VJ_~&`FAHUUpkiYS-Rc1UQKyJ`e z)5>bs7oUDnJmLCP=>ItNXIb&>>K6lyB;9#Wvzxu;SMmR?`b99~h`s;+NA6Fi`u{iu zfB8e@j&S^J1%D*rJ2m)Jth~Vvzn_ACA?vQP96w#@Us^!;E)71GBHG~_3jX02?)X!u zpB1wrm`8(;`mtLN(f(5PqrkJvKV6?d_US7iSRb*5?8Tt-C+yZo*x`d8=<$;8RHpse zD&;8qr`PQ&F|G&=QlvEbQ^qUMUtP|K?sl=l)e1H3LSnUMgH9U@M)YJ0p%97WNf!52|uX) ze@go2C@Qr)pdE^R>r`ropLcHVS{;5K*$)rE$NrltF0O$Oy?`ctTAJ_w7-T<*ihlCG z(C6>KMucq9KlB1R`=zSd{r$f62%SbUL9u@`_7V48pAK9%1YFR4xs%K4{PW;$LO-5I zg#V1DDb!Z~S;=Pn0(t=*^Gf@# zKga&$zWvXYeTtzM(D6T<8KtwIxO)YD1X++b$bNdy?7;U@bstCIf_{B<-oHBhOU?B8 z>$B4@1fNj&#ryuHxBn|P_*(_8%Vr;N$PHTRrI<20`5QN}!N+*U=i$je`sp{d=dVPL z$R9sk`AZ%d*;Ob1oCzX-)$#@X!ykpx|I%E&e#YJsh>!DifDgYD3O_Y=#d|vW9k&JQ z2l8URqhYg8I`S3twmy@;)8U&6zKRQeq2zz$V*m9z{LI8a{a`<9I|}~{xj~PWE~=eh z6hY(pJa}aL^9!1<8jgPhF6i`AiNEON|L87(kNO4r0LA{azWr)t0^m16&knu9%U4kS zGPk+FmyfadQ+ofovK##)pZaC(T}QP0J8zNp3I7JUVV7*8cy9`ozYUAOq4jS^75fK1 zaKR@O{)@lO)b8KEOx7>ZKgyMl%6;cT;g@$8b?WlBif?~lnGe#h0pF-2<`pBKkx#H2 z(2O-de67QuFZVZx|A9V0gZ5#U41f!IZD7Z*bodF1f5yJr*#8>&5lTO6=9vj$;mdug zv43>9_;)>AWWBC^a*KSwGMkC_$B^ZBxY(~Y#_;W|dSf=ijTl~_ZEN|dGD#V!2~%1o z+>;V}=gjmZ+s$i72#K3zP05UBOs5d+(Vc{A)+-w97`?ZMZ5oI`;0f>i^zaBGGNywx3HNwm}{` zo%U&_n{5sGU)prl7TULMtJt5_%K}N`+e*_8t|YlQ#l*|Vd+FQym7wpoliGiOg4nM) zri;P1ayBw&rY6P?rf*%0dlROljF-EQr}OQelQQJy!N%Ntv8ShICQL|5roEtP-{+xI zQaIR%R$h(Jfj?fsn;|Q`a*GGBcXJ>%Z8z=HWzv+SseIpau?unH^o)CxjHJZz$+128 z*DgkKLT0j&m@zXwD=oGkeW(4YhbARvBxOkiDL3tnJxXNs7$4Y;+0}Y9ZJum}ys?sx z_UBq3i#Fp7VfDUJ3JK;?rjp+M`&j#a5P2}FRV)7~Ol(ZEQ62vug@-o}rtrJ?Wo`eX zk5K zAG>Jk6Z%kd_LuVM3HVV}e|lSo?>S94i=!Cd*UgHLeoglS#aVnVW7EF_6fPR}i|$9FBFeQiGr#`kMfEfL>B>;s7YwQh$9{}JH(?V|+mK&JL2 zbkh13zkc{VzvYN;(?-tPqO%|KU+UL-!Y_?+PM^PAe>^}h;>!Pdp#P8>I{fbm-?`Lp zpJpNPpBQuMx(@%gF9?6NUw%&^@h?vuTUv+je4F~bp7P^kpFMxd#Wz(yuuITiYtOue z>?f#yjql%QR^$2+Jh1;D#s`=j*R?1$L@B2k3 zf2l92{66Q`zuQKB@P+)A6nlA$+jin2&Ce)xQ2HN~uLZO}m-ERe#`i7YE35H5{C)Px zx-94QTI};g8mFfIQQf zwrhE9UH(u)|4II>sOsPHHk15sMzLFI+|}ye(Ec&%)ne?onrt6A0;_*RK7h_{ zF>)LEhoJL~Z~lPF*WL)0_iS^o2Xe}J&O$2xXI?$=9e673^?|uWhyP+O$#22OJZe9( z_@?5kzqfig!O-O|pPy~q>bD=vqgJ2i^R{__+~Ugrx$4FKKkD%L{A|;LZ_0Vv{wKw^ zQ1~AwUhS#FZ%6Y{-H#Xb!Fg=(+f5OFf&8LZ+V>dSI{w&vntxm}T4{f_euMP?ZWQD5 zYOVg^ySPAmfqy{#sN%0V+3XV?ek#fDeDA;G&q^z^R)@cU@I8gV_iILcbIwYtqtkzR zn*VAX^m|+9AA0|=g5=-<`WILJ&%|}>+v@O-(fSIf1>YSeKI(PQZ&I`7>FW2`U8JAG z{`LdrcQ%D+a$X?%J016l_MAV(;*WpsoW$$Lp!%iXAj;qUQS9?!f%a2(YT*0I*ECNM zw!$6{*xYCGxQb0~`Oc|%tFbkV#jH@zRFKT)3LbSclW$RPPV=kygc zkBF|358yMW+U&igpP={C;a`*dAKBx(mX&9Yc7A+kc6k;@*Q$QTeRLv0r=Jh@ll&js z~wWoqz7|7rj58 zieNo+r2h{SA9@GgJYe90j;(ilH64C}Z~Q}gM2x%2`MfAsYCk-1L2v!?xehw~zP|Bw zk;lLZMS%6gT+p$%&(rFs{mlZuh%7O7`e({G5pY2} zCYQQJC;z|l{OC~m>sc)3XJDKKxS-?i`H|0`2-44VDL?RW{wnn1=_1DGa1DGmPV}#4 z(b?g#y{2a*WTm8~##lSVjh;3YGvo+a=@^{%U_4jR`;;8&Aup6y1yY`pY2fvmk(D*woYv_m@nE#D;nZsG5^5*~lF z2Q{p{w@|J?lbcr5?%$X5h(K^WA^MGYakkd;c#mNdN;4k4^XRCbCYrwUXcxd2^o@pZ zYxi%-d`2L6Lhv_;7mt|77f0WDv37bHU@;42{$JJWU%EMl{9jU$ z@+~?1{699o(-Vzr0qly7adjN4)1pu!W|~|7&{vbGdjx z{;TsD#jpNPm4EM&i+bw#586WdC;p?~5&RwUTzB{#(9zumHu#6qzsmoy$8KGr zAH$4b-CvODx8cvn?|1-zoJ%S027jX5gXUeX+*p_Ye0-1x_jf|?1sNygV}*7Bzkr@` z_t382d5zM~gL9?ue=7e=#mLV){Qc7Z(lu<4Q}J~0r>g%^4M#55>HitBf8&0?{v8pb zJ%fA)RrOz%+wBy4|ATac{{Ht@*L3>l7j$myQC@CChe zZQ^Jhf8M{$1ICT{IIAxG@n6t5CPk#*N#A+23*Za7G)r!eB{AcFYJ$>Pif_U ztqjRFKa%C$RMHy{ahCMnom;A;H+mn|e1I?L+G)f3==i_0TRiM(EA+pjNg#jJ|E}Vt z7?1G3tRzh&x6=PQism|s9`y5fhshuN%Gt0F+8>Gi7Smp*|3h;Hg88q=f1XZj{$HUc4&Q&z`N~b+2)@p( zbWPDNsQQ0r#e>@RZ}wx<{;;OMXn6X^zI5U8&l$CPl}`WjUZMQA@OKmok3aSW4wwIX zGb20b_#YzwXDqhlf0+ES@1GrilsnM#!yneJpX2j0c)+}mg3Qw>Nd41}UHw#-ekTnz z84shDp?X;Mzu*q2kkViO!!O{zN|A2RX&Yj-=kM_OBRsg|yqEmuk?^@B>O2zhbnqwm zf<8T}X(wIzp@CPlvquyh>^z->oJU9dF-=F@1&Vv$Y z!TSSl`KVK-j{gDJpUY~0e*V8wW?0i-Q2itQx8)4f?vIfx%b%;OzWjZrl)o-9ltLQk zfJ{iQO2HTRCv}f2q09eSTg5*NhiHGP`9J>-(cT8Xsq+J`fv-~V2TjjDs`Y<-{umFK zm!|TcLH1_#H;bt~YQ5&q>H_$J9vR+WyMOhjc=5FHi(dchNZpx!pJZt>^ zj+ei}@Q?hYQk0H=t386hr;$iMKhM{y{}t3f1mDN$80v?&UQ6kNh?@QjM}O1yKc6Fh zJh%=E|Eu!)Zjc9+W{P{d>_XNNGKcH)~hyPkW9Yoah z4|-;hc7L=y$=}moq@U08wCW%BpG{{I^N9EV>>_kc(Jr9egSK;Q)V_aQdX{wWieRfF z#J)q0O8WAT`KKuVr+NR^JZ`D_0KT9Pw^;MN&i@Q2`}0`%yTjzab}r@1^ziww*w~Bj zKN2+l6#qE+9-4paOMm6?(vNdh^{EeTe?9QwTMy{UAD^Gg1LpnaH&2(()m7)|il>7= zRr`DU`(sOV{GXKkja9<_1b_cJ5%~GsGj$n{TPQ<$e+Ya)FlTWG`3`!u#a-oe`u}zz z+26(pmb6{=e^=4#pUcGq><{M-io3y|YWhEY^+ZEm`uY529*mzw`4{Q;*Z-mBF$Z%N zcaUz-T9r;{%U}Eo;{Bo}{qh_~Ar)rLGw=Luj*Rr(pgD+69&W2LpdJboxJCUZm7xIseq^|Iq*D zd9M!5bF0J9|K@VnVLaLemH$0Gin?_C-~C7+INaj>PtE_y!vgD@%~d13w(prs@=&x3 zDu34_?Kq_Bpj-AJqR^^xSrB{r~2K zNg#N(b6DYBL_~g3AAayPlt>CA>8I#Re?>|^MZ2K# zZyEcs_I&2wW%|u`_5KI;7hk3h;}QJbrRy*r?Sjg`U)@ekbm_lN{)`7R&szR8_D5-T zQ3U^JvPB;4g35pVlThb>3@w9 z`RBijY@J8&k0x8-(JrX`bH`1orAz-Ovi;$y8zTLb)@+JC{!|vDDcS|J6ClU!dp`V< z>i??vKk9$Z-?^UlUk&B|h_^xZX65fFfc<^!`Z-3I{$2HD{zvM|f8!*w%>i_NX?03J zMYKPR8YB-zyMT0qzT9f|Pdfe?zX=3S2>$Vn48|k)yXiZRb|G5+0J>zt$J+TPm6|hV zyku$r)f09gwZcGoy~qRdH7%1aXdJ>WfG_Bg*JmEqwZG3FqxU!qe@FfB_#ApVy9!c;lH z7xc-c5AgM|LGPc#$p0BHTk`+^iT~wizZiGBuGEAsyof6Ah3n)j34k^B)wy8ynR3(bws>-c{q+uy8|sDJqR!B+lg|GE}X zK2a=e|L3@|Z)o>-#rzwr8|CXbt^6_nD4S{y9`h=Se0R}z9_<3s4f^H-(LHqO@0KbM z%-zE7RQ}VbztcM2QKocw?;o%`(5Oq(U(?xNSMspNjtKVmE;;|NiQfMI?kMDh{rxho zVEtdGdXyTi<6n->cXnF%yTj!Fa)|yf=pA&|zRTVw&uTYo=psui_sDwe?(G z`g5fHo9#vW*N#8CR-N$({&B@>Fdpp!{2plI{(Cp*{LjR%sQvjy1RH!z`oHFS|HtLx z0shbD7sTzLPv{-=xetEPp6|rh=ktJd|7!lD{^RTPc|?CSU#HKbT>xLu7LUzN*Xe&Y z`ClHK6Rh?Zod4_&;zbeqcMPk+c(e=P3tDN-X>I-Mc}*hh$>08*y=b2Tir}Byw+7?U zE`TrSl^OT_txJCwxxb^cL;m)cQ;POQpa}la2Azja(Jp{5Xw8%@S9JV;EhhADOw3>Z z&YLOy6v5xsmhzvXT>xLu*Eg*juH)amy5R5Vn1A|nzp2i61pn+msxuz#0{DVPl`UrK z_#4Fqe=|h>yM|MGDT2Q_q6Xv9E`TrS0N0>lI{q(E`S*r*^0z-nW3qRO;O}l)gYjq= zz!&tJ%a^tN-z#PLGehuqb)ocA1b>gC2IJ8#fG=q06<=uAA8eQW+1~uq@4l7NOA-9D zd(wII6zu}|g6@rd-h z={t{h0enI4N_ks*erd~p1OoPzvE!d}iP}39!9SYXLOj|9@CCiKe&ZIp^v9$~{%uA1 zSM$KSbJJixBh{jSBY{!j1){k+Vy1Rej|W{~|^ z_`Ad8A8P$0@*Q-|k`(Rxcb?S0Fh|o(67F0aaL#lBXdcg??kW*`^Ee-cV~V1PhL{M3??2b4mY}{l^?#_4>#D zV@UtZF2s4L{rC$c1HEb9-Lbm#H+WH`!10wRe{DtumOt=8dFw&H>&|mk^#H!0W4gC` zO~)VS%XtF$`{%z6Qu>>DdxY~hE|>R4l`pQr7j)|nr?m55CSDOwc%nuA^Yg{6?H|;0^g^*pU+eNem+as3egs=yLfU_Kef}?BA~+%cpP5N|c*Q>d z!56ec&1miX&vu^?{}259-C^>dL3ZOh6h8li8fVYz(%+x>8~gnH9X-NJ|3d}j|9N!G zZXN$MgyXdEcZbP;M19g*KK>7O2O2%$_m(>Q-^t4{1A`y;>eE*f+$E^HM(eFIH(QT?S9*s5PnzbU{JlX{C1)a8|>g_uIzexVh z-J<;~`1}2T9P#7nPw!dP8-FDK@22xK9k){YDcS|_1#S3RuVXs?eE&lpu&-i4_dyg- z2Y-Su=+!Yl=IQvS?i0^CE{O4$|1bWldu6BS`1Ab}d2roe{_uOCpFLe>yRQ82CjQ2u z2)3!WZ2!;(aJ=oIwmLTG&5Nr?ve(hu*ua^*z$f%OnqW{E=?ZwmZ8Q)uq4BDYE?! zBUrKZvi|F>Pk*txLQd%a_7~@4^?&O5rM3GN?)`84r*CM--}wHSJQ)8I<-ef&Xo{zU zKauaCgEsuIRj2>2W>7wU9KjY}k?;R~_4&`wHRi#m|C)3`e%LNR@1R}!?$wU}wx#-? z2iI|7|NMMotNzV~f%-12{=3zA2zxT>xLuO?%9;I{s-i--ZY0Q~C3cevj?27RDZ`nNQF1P zf-h+82jAVJEC2Og7S9-K^#1Q6HG4!$PkhcFBi?^-&(AUN8~B38{rJsb9skAfzw+Eb zHT`P;55}MJ9x2awv*x5S^56w zI4|0N{QP=r`{PEn|Dq1JtfJ$8yoYT6{~*dAKi`G7s*o~M8UMM^D$pK+Q!eh{dC=eb z{K(JW4Vr)bq$jWq7k7t{13k;29XKqlL%@D;*ayyzKlBdT_^neBy7bp*C(`eFTG&6w zv+5t?4{_J)G9FJhB7glyB#URX9)Y4=K)S(yX5#KXl>X}K`D6!a{h8;gkbz^x4H4loF<~p@Q&I|tFqn>k(`@VgqC)k}{DbA|w zmo#Ncn)j5-X6o+9)&nc^Io&cTBO@&%2I&Gtxg{i?s_`@RVs;rQ{*rB zoAO*}$YIL)m(Es&xv@%MP-i; z(yyi)`B2#Oe|T49jE?{0(Si1-?qeV7S}{A{CF~Bg{Pj}jb^JHe`35{d|7!U*iwgS# zbxaoaSy27w)>uD9=U>ORmmchAVOP<$Z%qAybc0rKw9)Rba{t|ezbW|_xPF_c*+;** zJbv~@?x)X^Z8xJ&&dN%UP=0`ip@yMoIWLMl=Y8e=*y&nd(PcQQK!#V!*5j>-WA497Z6z3xtlFQtp zj5%n1q=VLLdGheD01*N%YQAzuy6$|P`E#gmwzTl!`~l}^!9U<(x>!h&?;C>jpq-jK zyfjO%PJ`$ng8A>Q2X*`%k5Ze^!rv1nf8YMNgG;mQD#83ACuobau}gLO-*g+Lf4+Zz zdgmCu{(1U&Fub3P9hd9m@V+Q-`v~}gcKbQ@UmgE?v_8&te*~-epy;3W*zm{s%HWT6 zdswgMV=TXbFX(#r^LOd^n~zbRTlNQbj@76CTZs$)*tZ1lFQNGFyt~dnI{q7IK8(|{ zKd>iE{yGZ%C!O!0lCV%Xkf&B_p{>XRGMVp5IP3Nz*#`$X)pV)heo@`fyndzc`44#mu z*ZQ8$?VYC+Hn5!L30bdI{^~VNr^(j&zsXso|Ayd7zC1zbUwxj-!?g^3^7(O|e`w$O zt96-UVqNv`LD$v38KFI2EqM{;qlLfoo`Uf=|D}Dyl0)-vF)Lkr{`)`WX?(P?CH?vG z_t!tZeHt3lI_!7^X#e>q;KRC=*E{; zPtnZbBf>!TmqBK@D_k933bb-O$m-cQCJ zr)$1$80%%_Z65(&&=w2lX!i$9rBoTO`PWA}lSKN#7nHA?;KA^IGRF6fG_OUnqnzg8 zU-CyH;0tOAN=3^drAMq zALrL0ogL*L(O-goIb35r1J}R>MY=&N^gpiMpW@52l>S|Q{d*>ar~jqY-sbyLI@eP< z(CiZlzMxNbYOUR$rAB|kdDFi>z&TORAL|1QnZVOG6JKg~gsOj`|5i8MIf?Wi)c(lh z>jQfgVI1Gu{(ygpu2-2wPprhS9wD2qO}h5252#P;M(8?J7?*x?8(sM~SCRd;x0L^6 zefj6|S<64#|IQeaXG&=P+p`B;)A7HsiOR8szb8!oX#b~E`rVU*`6J&!d(3XVQRjd7 z{19VL1grX?@ITHJeg0SF^Rg)z-cQDEtw4HnM6#+k5$zRR{^j3%!b{)i(jQ0jJzaY(=U-3Kr$4Wr z5X6x3T&8OW%@6NO>1Q+i^2?unazg)iUb;i8{|SGPPTdi#QWG)$;IZLfiR^?2!~4nD z%6|My6wCcePg;0s4YpNxxEs<$Pa-E$u=`q;Ir8SMh7A_i+tA zcJxe}Ij3~?_XM5K%x;^emj0@Q&i-;fAp5h-5BEs^C{du8 zpKizmPN)3m^9D1MiRLp;9r~y``pFk{>0e6a&$!)^emPGB&w=v!Vb=V=Ea!*i&M(KZ zDXIbK25mfc?R&cPzw$7ppXR5%T}s-&!aDhkT%U?|m3dk4uO`p4KPdmEreA2!&llgo7j((< zcUI8xKPU6m*S`B)jMuP#!sA~O3>6B#pnJ1ty`kfOQ071QyWbP@6xfv;%fDRqf^|Cn zzqF7Vl=^3FWcsfL@|VM0%qi0eI|x_*$L^i8T*p7Lkw7r+75xvOCKGxXA@iSC6FeB+ zPk%cgT>F3bj^qY9{y!a%fJpx~Q4Y)q!T(0tU&~#!YU=p+dqwh>eA#x%KT`0&QRS~^ z-@)4QKmRYm-)t+!C4Ky(1pgc5e^#ZZozb;NDLovxeR`}l~k{|3IGdpLZbr#cwSC-5cMzSI7U!SgF{Zf}gMcDIu;$$n+nSDOCM$P{QR6q#N|g`g5j^ ze=POCdIQQI(qB^Wzft9H!=$kXbo^Hqk?EKGeg3CZAb&gmBcGOu@DrpP^hDZne*S!r z{Y5nn3MdV zj(^#kMEYU(C{x{11=iIbwjE?^s7o}ol z`Exap>92NU(|`Jz&!_76k31a6ANjzl2l7|#AN4@E`v3aiR~vNvW4Z|h&;LZdq|1fTB{?~6 z#LN8OEBHC@llEUvTyK6xv_F@Kzp*%(VAKQhc90s7ZqSVV>$LVi75gL0^n2tvEv$ZE z`c?kOhj96?9Wpanr~hYK3k2l9nIibI27=zG{D1oPpSJ7xKS<+`Jh&&wat}LbDEPzw z9h4e|-l11{JBZ+S(9^dzzgfrsn6y8fPv!IfjRMpEU->)Rp1-c+pNai()$}(O{IlEY z`+tzGpoGgC_#L!s%Zo*I{P#~6`gbJ>{hOwE?`KT{`7e>Uush&}%YVD0$3r^)7p4B4 zNWX0Vv!;UoYMK6~k`WEVcmw(cG;=>`=f%t(Ms}f8^~WxKkPtC&sb`+ zQ60zl<{SRM&!t4Zf+n?@y;qmMwsivai+TC1T>;alSQz+%7O6P8iH`p_dE!Cr{|h~{ z_JaS7D&OyRY|rPX2fbfjl>9w=rGG{F>LB>XRTcf-@^6f$k9$M#h?@LC5~Le+W6^eZ z==eYMo_qlH+jwbT9Rv0MU+w#rJ6CG`OO>6HzkI(%{}$^c_}?i168+=IExPpI#K)I- z0RLQ>{?38?mxzD)#=oFfc{_;UchKv{f9b8`|LJMzDJ6eT4cWfy63AcGKX8K>%NzI| zbb({MzJKQ)`Gzd{n>8i>u7UhZNHrM>ez^R(R zznLc67qc7I_5!&|srOtu*?_4JIVD<~-ulir;Azc06w6AMRo&M)vk$OY@`+(%%|HksK zcx{5Vf8!0>?}Z0bj;r|k*9QdV|3N7x>>v3mZwC?l4tnVCX4?9vrySpOo)P@ezh({; z*N*3f{j2p4TSUh{s;RWU-O~Tad@u(K z{x_=q{rR!@I352Vr2qHT|KCXeA20adDF1hEaD&o1{yk;-p?6n*sfQtgKiWTP{uk8# z+Rpjq7ajj%a{mqVFFDW-9xC{wf2p5hS9s44*Z#h&xcns@|ERAeg3Nc{eBC<((;w3R zrZuxJ#!SkXkdT;U%rT?|@Qmz32sri)>{IduBerlY*;Hao@` z@=F)PyPnj4zbUP5#A;AlPM79inHacwuWJkMGEuy1&-E_gYsQ!2QS8%;E?bM$dES-% z-gSG4LCgE(0zMxIF-#A8r-7^~nXzK2Y(Co$G&j7P4v7B^Oq$ty1{Zr`5^YuxV|Ya) zj^O`)#C-|8Rnz`U{Gq z={3V)g9Z;9a{UcsnspvE;^us%rRV&Be#3^vwWYhL*Akoai^G<*C44l|Wz>;=I<_A) zYRr(qLk9F4Gl+>Fx4y#hTGOk%zB&R_jC2xCLR;yqegg-NvgC)0g6-&I>-cARvfY?5 z>cWtG`B7aMJ!*jb!Wk5Y1N)6wX0qdN@g zH!S{cXmjUH&w+G~k~h7WOjb7}Aa`Cxy#V>;HN&Tv-d}Ie^MAq*s{AP5^EA!_|EQG6 zp_rHlPM-@XCgy=}qM2ASasV!l-}~*#Ml}Dl`dpsRhWV%8(SB=o=?pO`q}l=Y!>W8n zy$?BwZ%GGe{t z7=4xz0l1LoFB&<8^gkE+WBy_8b<{Simg(p}CpG=2^ZT0C3p`&2z$}3a*{I$8H75Nf zempR)u7CEa#P23&p09l0GDgQa?aRcYT&G+f>+^tt3wdA7^Nj1`{`t6q5AnRmYcG)Y zcjlMXp;sG2ZJqne_4(b$uhV;Qk-^S&bvGd#PpC6TyT0>n`OM7f1!dHD8`57K|Kv<@ z?MjuNV$1{S4pQ=xAy)~p0`JQfa(&L{Ay9uqRvC8DO4Iz?zLfrAlhVWm&vE*HMEM`{ z8XzwqKga-l_yzueAJn%T`@#NiiaQ@5{NvW=S-6GlS1v;=n8o@tKJU6T<3xRCpw z>=!iQZ+}AlA~Mg7@7OO!crtD0{6zQ^_w#W9eU@`_UrhK< zU#fl)UZuw6bp20nOXVZI_nEgVD;~G=d*AsxvxJOz4>YtROUQ_TbO-tNfkxY;{}*ui z8!T)pq;D^rNa^qMOmWFB_Wz^i^5+sNr)9`hLX>6yqd&=~69RUJ{P2ywx0&>xeL(#r z+*0YkhYsET$9vwfmrDy7@xFKL6*{Jvcn@fCX<<`D04`*HoqsY-_;qdm#eC&|9Ut%c zL>HA7GGbo_`$fW|DBu4JAENye=(CIndHf+4^2n15rTuX|%=VAa`|qJv+2XNhIsZRy zw*O;PFUx@Yb%On?n9F~Rqd{hLJ-4PCKliZm|9dq5)n4wTn^=nY4HqcBp*NM?6g%fX z><*d!cwmoGlE137kP-E7PNcMu5%sU2&++I`@O=7YZe}~v z`xnCrKfI!ZIE~BS*b`>^pC-#43b6lNo)?Sp40YA{54~~b;KD86lKxdu|D*ny@TvNS zeN_2T;<)R-W3ekSMB}6HDgA&L2GfRkyLq#N*l;AoPcPvhZQ!`skO2)eo)SDjg~Po&7Q5uLe>18hwP`wW7F- z(uXV$Baddp<6b_74L}3+7LHe3*uIbSe~{<1L;v-pe{8x-|8Q#hqyCGnOD+9}E(lFB zrT@Yi%y5xgf2aOw+}P{ipGJ6(&(f|#UtQi&{*x+Mq<`K#um5+xPvuV)m;Uop(;xm9 zysx&72fsr$%C7r`N&mCISHBEBrEvB1KbXor>D$;rdQY9=ALMWNTFTkf9+k4-r!=aM z9j^lyy#D$9Y`H&H^;Vkxas2w3PWopaxD%wF|3}VHc8vAq=V<_9spAhVv9zM8|5LUK zz5hKsErD-8otpg{ov+%lB1!)TwEjAHaS0RteJ|5H9S=MBu@v!N;QXJg{{{SV)!)uF z;V-*`%3l}0{Y+~5=bT{wujTT?OHAqS&GVIqV@urm&sm41!*p+Y8_DTSra2k>_KUZm zILqY^R^1}g-&igET^XbDXN^<;*w3b>{|6J5|HE8vXmH2v5BSK)IoFx=AF@LIGBi+? z<9hykm?|TssruiU`d{v2zx~pX{vmUxW(yPkKuZ5I#MY~Pr0^a4?=49e={-weqCF6p zk|ksuN#&tw9TeckZ%+Rnxhv9&(q9F={=Ic8rT-X>c5*%n^ZW>Rz9*Fv^8zOH@an&> zy!RM*z=yo)Shv|G{omvFUqa8D%fHPUUacRzc+Hxa_3s5DEZbJx`?}13Ia>cWj^D^t z{xJ{e52=@b552C+zi=gU`xAOY?z!-$J52h2K=zj*@P^8NTSMmdpOsNY$cXW$FnyLW z(H_jC@d%0tz=aʭ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 z
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ⅈCSy)^AF|I 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

jwJ#los3uEwlTb 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�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

?zc^D!kAPi62M8j6+A~o@bpg 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

Z=;5HEtEHl+^E`po&-7egoRW<;eS)SXb<;l1 zhjJ9c66ojuaK0*ju@BQoq?L+CCkAQ#Xl!Rs3G06&s6Qq3@5_tRGTqSqd2xE9(WdiJ z{~L`_Iu8$TB8toT`Dm!+GQHk7Vium0zdxAe{ilX?yjI|kj<@Qgfw8=QLzmKG#^mpX z1@`y_FhFpS;V_*Rl{iSVZB9XjJ$Z;@>GSE`>7p0He<#*BcKATR_NLk)=qrNn*u-5Z zHrww`@JfIW7*!S2J`XjDI#5}(7=7E3q;`aK5dUqyqVb+aF(*+Lb?3#YF-hZOzXiP= z*6}u=nX#-k6@>^aDfEf4rA|bs{)wJTvd@4Fh_&XbMoh(*^F7*vi%6KAgK{t;SI%hd z#9*y?zE0Mf3nv0IS#1DEkUho=SDQQKZqr=_p4Je`HU%@BCgP%jEI1ARl6H;Md{_zY z@`GrxL-2-^H z0p8|`1GGeMtzjt@>(+|I1Gogfj1j?&HjX6pU1>s3@j~!72jG8qIyP$ba-j$Gto1If z$GGMSjBHu-E-LhBSsgSXaSZ)cg&uuynoX}1dLSQNmd-AkH)MZs0kZ#I#Ih0jFFGCU zk=`lv(7`zUQ%w6#w+}uQxxYX<_=bAFgK_gx(QUXaAsu`dzGL!0ovbXnL*DNWzu#IQ zmIDG?S+q>fi9vhQqLM7G~9?k6b0IXhBK}9Yo|x?P8$L+^pL!7 z4Bv&YbaVK=SqPO46Axv<1w#xkGonzIechwRA$oN|ls0C2=u^5qJ1&H|BHI)7Y7>0! zNxTq`i|COBHp{0Yb*|g8Jt)3!SZEQg3U{9l>fI@$%;lJE%P9c#%#LjNp!wJa z)-uEN&vyI2A6A{3q}LpPn_k9P<91`{(2MgRbKZTVSlm3X@8VrG&cjM1xUn4o^{sjr z|9uGb%1O`^rm#rwC~?I;h-0GPl;akNBqAj{OjpgpEP@h3)S(X3?`5k@&y7K!?ez0G zfW0Exn6lu8C`~B9i|tv;9L^nqZWLuhp-Ch|xh!zH2ox`+GXJ5Y1roB4r=9WR~AB!z* z3j32jx%G#h$xz@mCsFoy3q=6=qXwaIi!r?bq(BOsxu6pOhUO)MAu#PpO< z%j{n1-CxP3zMp^!t(|Q%Jvs@afY#5BN`|G90Z_%sC%r$Xm%5Mg*g*~;b>}#b&Kv_3 z!`j(4JuxZH^bQQ2&t#8R(t8lZZe)+5HoZT`roH(dUC17-nQPOBEr*F^l=sN#-Tb4(?{__I+F92i^J6!5! z{XsVr=Y{C{%rxkQ(C6L$$lqYA|s8GIC*6YmZdMX+H~odIMa)*Hk59J zBi*f9cv-`kF0@VFVk~B1)(X^hJ#3_z9%9to2PKN08`K2()uKj>7}}`s~FkF=`5pLh^qS&d2AD2A`)1J&+0>o(2D==r$D|-^53cRS8$A~ z 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 X~pU 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

ObbcZau3$En{t+iZ> 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 @9 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

  • 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

    W{Fo4;h<=>?~gEi&d$;1?Id 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΄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

    aU;+g$G}X{Q?9}s^dLFvBA$XKa*vQ;c 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 z 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%0DE;;9q-Lvy=J8W`2($L$ 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

    {YrI8$+VwOg1xwpWSZbg*5`xUJrpuE%4 z8eUysfSxUrENn3vK0C@D^|YwdtvcF}}EPf4l!NtFU8ub?5?(65G>#cU-r zh^Uu_iTY-uhv9f!+CrJmGMjg6Vqr4@Wb9D~5@+eDIRe9PIAPioeVC4n-V0(ekqe9@5nX~67lD+D31@UQ!b2>0S_OIv_6gb&~U zkD(3LTaVnDjfgYT47J*}Xk&gE7j`|T8mG4L$Skl?DtyYz#;8uR*SIBxN01ztnVWOe zE$n!Cr5ufKPou>!@hEz*h;vJ$|6q zi}aJNGie1YJG9Mjfi#~}R!EK-cw|1Y@bM{fyJ!~%vux!x%0Z)H7H2?SbwQn>BK$L% zEI-=gB0yt>;tY~8OPQLOonG_pt-B|B_Z`dycvIq1B_7N?EKgSV=keLvcW-um!TKI8 zuVZWHufudzc9vQtC6!L1U5KNfZa8?RX&fpt*&F@EA?;!AL6X~R5*z7dTciOht@-i= z=Y#o+QlMFM{amaySnG@a)wSx4$LijN$9AKFeJkpSS^O?Gwz z%5g@obUC%*c1>j=-re2`T3(VdE}58zyn04w6ic%1FL3MCWSjw7CFsC0CQ#e=4d&|y zV{gWv7IRJO=kT>H>gv6Z^58`{bM`EQ9vM02<#1Sq@v=?B-kXg3!|QkO+hDjU-$PRe zb(R7vz?hCo-0W?dpiYnu3OHD`Y3c(T&RA8ct8{+kL1!k}D2t85QzLUhF{k|O{G$Ed z&qmd9w52s>gD?7q^CM--N7=e5Ao04X57Cn$mN9<53QFEUNqxW9f2|kvI41bBLN@N8 zl5;G=a!N9W6G`hH<;_*n$<;Yq%^GAG-Nf;tC-f@AR!Hs)o(8WQYS=Sp_$iTFcLS!A zwW_Fhm(E^buTVR#3iK=)L2*_@Qx>p&2i2^0LWr*_fYVl)?=H(rj||Ee_D_XVT(Ql9EHL>f6<)z*nz-0AEh~|RL ziDUpYi0Dkc1>1UgN&8bCzDMj}!WW=V7QaFO(t0a@Tx%=GSd*eiU*j+hlAKvXd)?A%pbVS$b*wAg*-+KV0E(EP`- zqILJT^VK=;mH&9-;h69?lx?r#Rf<_M7ed~E)a}=u>z><1ugt4$^fvfM3_<^ z*QrettKag%^r=z|cF_ClDbM*A{miF79{M$T(zvnh0kAs%_8BK`GGs{iVB3B0CYkBe zCMNC@3oPE&=lvvi1ACP8%X#|N@SKK14tn5zQR_mw*k2iloJ4w2I)JQ_*IdWU-5z)~ z0TI*>GJn$M00K<8Z;XbZJ0{aX-&+Yczp|Jzu{0j1a6Khv>9?OtyK&8seUL*H1GhG7 zR0i$A+L!a7TCz@T>hv48MCOMX6Oet!>Mcap_6vyDp)o*pv2FF&Q`SJz7->l9eqQF- z_cEs_BHsN;-Bu>}JIR=*ZYeF62%=3M>N!)!?p4?7T12j2DR4?gPR)i@9-g~KjsS%0 z8GcL^+f+p|#skiX#*LBcZ75`O%%Y&1&N&boP}&_f zGQWiv))_Dqi36g0sVrh1$vX`LI*No-&D@p1wRw8S6^iG@zDo%ng|yOGXS+MbbA{d4 z(SQ;goUngz?Zn~mmS^eNT6@PIp^|LF3b@ZLU#;wLBAMUT6XF{i!TqKh8>i#)r6 z;sE6NQ-_)5M@n&^ZJ0X)pWYbRV&!Nb^6UlM5$r5aw_^GedF`Q!WdCioH#`thzUwfk zL)rk1g5IslF>h4qnsq~CrzW5aGhU0m=ym|qh-SqFBJzEc_mHlT_5!xrcKT&u8Pe>9 z!&A7(0{b`sUCrQYe|dpB5+bl?&zeyUO?%q)D4N>bMirTdkG^Bix^S?5s$6#|ulBI( zOLp`vFcEX@&flCh7haS@qcV3P0Wg-_Uv^u5G3+)Z6xC((+Ip&XG0xg}g$yUQ zVl*1RE03J%c;b%l>0?odq)j2R-=o*<>|e-ES9BPv1n}p#V~$o`H3*RSOI`3Y;%7aW zKikJNjF)Mf_?4x(Xa#3>PWFxo^nlOza%A?b>mNg6VL6QB%uEBiMf`J@GV5GG4|Us- z+kdM=&0lS6)roQA1UJ&hA#%o^C`uBcX&-)F6>4ALTOFQuweZP%C);W3>qS47O*gbq zVG%E*eb$I?=E6(jUQLOR(VhokKIQrglJ4Q_^WO}>4fZ4XOG54mcALs4Jr zzM|C$DC>b7e7WcMT7iOLktoI=%#n+%X5 zNE-&VeJ}N<+B^f7|4HhJ*on2$_87oa-IxTod-0trJ1Ce>OZCU7w9kX`$4S*{y*yg! z8E?U?(~^T-GrKZswbf7FYgo7f92%RJU5qJSoCIIyP_`-gDD1!Lx*5SaMZ#6)nBSX+ zH_;xg`EA&I-LxoxFkW}F%agAwZL<=NO?5t&V>D|MZTT+N5n!fx2w6!kZL;0LqC?CU zA;ifj*Z7-EWyP7)cmPffCZvsx#z&Uf;fL-46g_C7jO~Dh8w)9PeQAd0=Z?-a~xQ)8M@qCT=95dAqcRl`5 z0H9pqs|WM%8EZ;Du~dZ(pkpd~=tC1h#MEkkIx(VbIYbZ!%i%T{-ha$no0wN(b6Fp^ zr~TXWNli-!-2T4zAuoeNh|M2&+X(N)N_HAp1MW@pLCud*A2jsT>wV6#@vjwlNwI`d zORgr~K5c`+gS@uWE2pkHm26G6W3aq5EIKf$?gvBu>u;esBrCxU;k;x5w{wceP zRdn64%)nX=)m^*|{cSYry#%KX5%$6E$4t#6s4^L*==|M3$tP#u>~x3I*wy6RTWLJUH}R(AwW0SFiS_3a#w%v{Uh_g7GE!a%$ftalMT3tm zE+y{gv+;QKd2tGVHQ1}2SdvfKYeSdJF}{2(FiZ)_q%}tkfceHx`{>~GH?BU+Axj}? zz2E5YG{V?D)Ax_78hcYJ;kI>{OAOZ_i{q8oTkW%^;`yCL1{+##nMOx@cV02}40rQG z0LT2Ztm&L@4P~cI!P4p;x!kd&B4Ugsbs|lr_0&s=Jt1ryTm8BJV->$x(QHZnk5%#K%3sFFCaw1h zwFheP+dIyRYC+!l8o2b9RVI;t+|0(2)A6T#Pd9+bBf`FB@FoxnK{c0-=k66<&s&yF>GH9fEojHzfGR~ zo&mGf4@Rk48Cz?96qS#Cj#Gh2MJM2u%85CNe)R-{IcLK{4mJhVbL&7|E;8>q`lO>k z7j5i9=Z;L+Iqpqr%nOAGUtZ)@7QI1--ew@H1obDm;v|ADDUWiLe zm5pyAoJSMnrNG%H+HcGJz^=t^)8UJtNWFS~-I`7q5O~>M#(~$@QufcM^MM&H=G2B@ z0d<6+OT80@w`pwjtdt-v`OEcffYHipV5wPA=ty3J4B$q&CFzQU={EGN2*c^B(J zxUu)4xbj$b{RJNjkF9htj2M?M7BEIhE;0O!7o%O=6DE-E&{lGr0OC>`L|#Z#yFYp7O!c=&_7-1i8{l}B*JF~W2iz!_Yzm}X!lR!#auA|jFbM&2+r@Q;QK~LM zSO;ZPezAZ^TX>`wY|D2Oyp|iTgdlj4=Pf-Rrpe7r^jeH4XuSCi$oy$kYk6!-NB02v zmJ=^3rjy`}{Vl?joRPjxl_;+L&xTVj_9v<(k=u{C(UTWds2$YW&F#KO9>Uqj2-Uoxq?YSlJ!sHWpT%J{ig^^@TE`Y@PdO)&X1`jif zxm{hukC*UaHS0s+6l+{-Z*fFp9Jc3WD-|)vLL3GFg8IaT*vOrPYzP40f`aAaV-HwO zj)r(_uWdBEt>j_KR;qfWOne=Sdry`%adOkhE;lOFm#Ftt1luUo19lyg?RjxBH)er4 zfO3ukPmNKxJ6;Zm?3qL5ko>juotxo)CKDI@DW8@J zIRkoumM!)tB@)3dHX-X{b8Taw{h`h~M4D&9?Fhj?kM6ZX-{7kxds2t3_!HNCXKRLf z@JAP)GeyX?(4>M%2#CDZ7;!%a;We1I}!&sEyVtm9^|7liStN?|9H z9X`lyOp@8B#UQV3OMqR@z*w+Z}T3{jK5GT5+9uc|qWwAsZE_M3MGtLScI zvSkJjxKAFsAS!G7jU)$IpUdIUkHMn^;r856Yh+P+*%j>&AZ>4|VKi$xCy69YOxVC7 zVR_Fr@UpX-3LJI42Px?25+5=vU$gBk3nJnS*QKbVw2kzavns9pRmT>Hg>t<$$8vy9 zJ)7cKFUnf#pQkq&6aN`dPCI>)1Lc)P}Zg5xkyB}!h)lGfLwdaF!h38;thrvMlC zSoC`tV1V~SnDp`Q&C8^@N>oy3T1(ccLZrE(d#L;>zN~Z*P`}Tne_rP|`sXCh^*Y=X~ycHd$hC276s6-=m_j$@j2LS&E~t)S1#ejm_Hu%lrGN zxmD-;m1M{7tDQ{2xPZCmvkNr3Y1r&ff#T$D6|X&;84yBWr7}Zyp7-3=J2Qd~l!r!V+8&;tfVWz9p3ENb{)?qI9!M!Fx1X7pv=&POlyFX8j zSFfcr?Vrq^UM))q_}VLV*H@8q1xzN?Sv1GT>(zdZkH<9T65al>ggq8?$Xr=zXx$qd zzxcP9gp?H5PfJS-Q$ZK5uN7CqK-fH^Zz3 zJ10(WRcHFlU-IMA&f7=vkfU~d9*cx;kWL^rO%Cz82C*o&9)m~}`qU;QoK0Qs`xG*2 z5=T)u4$-pikErLoT+!+mgV^9{GUbMW?xgC{%p|z19zamP)M4{aY5of`o59jGIqO?Q z;A{*pOwuj)<3FaJnKg=NvjUJ(MeUqgU4CBYSdF3;((pG{Q8Y5wv%GB$LDRA3Qa$88 zVXd9)#%P*^pR)3Va6h}$zj|}om>?PB_keke0$DaB)mxIVr;pYBD!bQmR_e0k z3~SGf;rgq!5cvtcrb0YXyYx(}jQer6IrS6Gp4o1s^GnMyuD}ii8O^()1>irS#}YAY zP(C+k8h4S+xeeYVnP5InTEsl-`&!wgw^moY301yD3{+NEBc)t`5IPjTo#O5+L$0?M z$>Fm8y}2bV1}Sy;{GAY2@(u9ldAoFDQL{3d4j#0c3+7giLj{ND(9vQ{IaSC8>LquH)sjypY!xHlnkw-8p~#adz?WgmLSRFXa5?~AE{IM}cpF6XZQUTb zcLJe@%om*Hq2mvC#cfR%vYL`3R76UXqgJQ9nK~Iy8>W8uJ1Y8E6RFiduhje1H4%;0 z?0Y;5CVhTUGP~Eihz4ys9t)dN8#_dtN$^$8wBbr%mW7m(L57;w^;b`tkhJ;@UxcK` z2=+%`(1_x=DDKJE5cT{%?;O9FLAU@7T~CF>q%_o%TO~_0|7J!@&)i!a`-%9QIC+z} z->g&Y)%#c=>v-zW$K<&+i}zd9>vBWdG2?^==C8~n_RN0Q7kY#KTo5(#5Nj?BThvHH zL65<#CFfq^7*F9VYE0(gv*tC-vv1}8_Nn}-VfulvQwn6Kmd-R)krW=93w9MhvS!5d z4XWPgJAClgx_$bwmHuK{v*#)JG)A;zgJrMPP`(76yjtnYLjn2oG)MGIUVHEn&y?mx zKWqY*&w}B;H;O!_k0<^Lv_Ov2=e0^YT}7p!0riEgN$jG#3Cc~b(-%CwXrS{2iRyoQ zoxGEA=ui-C$g8Z(%AxN9DxhJE9)d)Eux^t>G~U%rU$1D`luZ-tmiG~qBD(^&kT>^`RI2-#3-?d`b z*Km$=Z#{w^Wmy$7<0xEFg+5wy(~BPK+zV}HYVrv(Ils0+*Pgc3t#9W<)q8eqd|Vkt zz3K%_s23s}vC@o6I)6>D6+2Y>YIm7fdaNVQ?ItEf2_0LFX2bPiu9dy+MZ&Sbs-V+| z=)e}^ECu)z`!Acu^1TvAmaOuCF%_<{3)Ru!fv%;fV9;gyskrErQ!MP}%EJ#G@^ZkZ z?yX7|P3*gAugN8L`9?-3(f-T#!{@U(2 zB?%HVDL;2q&N*VvAoEnzZZcNKZ~ZW$4*k9bqF@C^_f$aU1F31HtTZ3`4Yw)T5A^Wn ziW)3DuR&OM89ly`dEa22^LO}IV*JiYZZQ4TDzndT7ZzdmxfbicLo(hH1x#~48D4(+ za7O$hND=3O)X}fdfU2yi;3M}6Y3|Fj#0T|n_oYVP&xpnDT}`_WWZtxF(TyMc(lkEC z8e1ja_P7!K#s4Efw(=9<>zS|_6kL4OeX`;L3&-^l)v~MS(04n3@2yYjCR!HM^lnnQ zM$YzoT4hwXkW|a>tDPB|1H?M9+Bv__X6%3!xk z=gvBqIDcOXjlN35IPPlwn`L3Uyf1(K41^Pf&T0N=!>_pdMq1Ldz+{B#qpw@sq!b`4 z%%7-p{H}0}+P8}@N(G*A)8XTJfkbH|pBhb8@bGP(i{du+duk!Bqxx~C(;jDq{cc>{ zll{Nr=^c8tAw7i)yzk`&H=q8}jzMpb1k(`+isAAl6CyS(H_kLso|*x%lGk@LM27Jg1t^mFty&7vhUTvcsB;D)|C;N^sEJoT(5VEt+Jtj z@DYzR3(lH767&i}eTqOZ7(M(9Ak<@1moZ zI3C@_E~ijVLNLMWiNCt$zYX^@Peo}XQUXrN^V;Hq*A}-vYt_(7OX3`)YRC?t1;I<} z;lh*?D30H+Q43GiY4_9XO$Oa$lg9QaL>wmeG{a*Vp6FV)X2xX=PS*>5K9HRQjBmo&P95>8%xtmSVE6a2X5P94z0t%=EL zxYk!vc1ca1H-T7SMX(4iv10hLT%~s}BNF9E{ln=W{|O#Z%Oet~!4c8&8PzF=lkh`R5*&ObCWc!9P9qu0?}8fD*9fSSf3Sz(jiE^+`4 zZ(b}@?w;@X^rw5(@?PIeW*SSpRzIQKZ01WkwLW;^l3{YP4{V$~kcma#ob9g7!&MI_ zSwq#^_-#PM!fVtr%m7>C5jy;mp3yV!RIez1aa4zlr0v|LCAAR)YSIADm(8NF!E8I* z(soCV1@H712b*U6B*1500i@9TP&>j&5WIC~tf|1?pJ;h*ar`x< zpe8FsNWWB<7HE9av8*7j(663T&p4^o{9zPNKV+dg?OQ@znWT1&lHvrt=LAX8NpGx1 z0@}2PRM@n@X5}S?%$Y7anU2+18Qg&|E?uw@JNs8^akh~ZeVxfvZzA9I6Jhkj z;9L^UYH6OOPY;BYf(+DlahD~dguBV5;t@+y`2x%zdmV;8sfl~vOsfbl0;=fLTd&)0 z13yB=B=e+>K-Z4PsEjuLEje_wibhT~f4r)Kt=TyHu&u;nc41(Ss*n`OY>x(!y8~-N?FN3TVSi^{mo~G`@`{~}iF|8f8^nL_jk1O%=%Uy?z8+;^ z?DYk*Y*ZENSaikxn{WBn=cEP|BA{TGL*r*KNA_7Rv5Fw7qIv zo>tq#tt;2=jLkZ5Gt~=*+3vfu=?sxmf;k}@jPIyYkwI5I!|U%`lMw1SYx7qFloVOf z2x{@t-5(X@;stAb`5RGNe2B>OE0?ww4~FcOW;8pR;3ROqxZTXSL{k2h*EIK=;KJ5n z1t$hoDBQi->ie+5TamXj{H8Q^bmB|5D=(GICi2$NMMWvXfdC&=s#Wp}RSBAFLw0V2FkyU?%2wZN!hm9@WzXI)8%{ zN%~V_dK`L*9LaRubT;S7;-0WTbvw}`ojAP7*6;GD_67g&%5;y*^ae*Ttp30$ISu(E zX^Hx4q;IYvKRcnm@ZSe*d9TfYwisiN&93^lpj$QcTy_>6^!USNhwxl>ph<#yZFg!A zS@XTWQa?cB3BR&`zEow8V$+>!m4U=9;n1x}*#6;w4yoD2x)QPJKwgW_tm7P{n0|N1 zUo{Km!+!WqlF_L{tf~x`8&|d?HYSey#N}M_!3v5+uTm$P&-4ku$G|Zc!1X)pr5#NT68o8p|dr;Ro;gBuyi(6 z@UXN6)-5*3@nU$p6ZYs6&$aWpJggcIpP;%<^mSy)EniH@&ipaKNJ4VpAXiXGF<@;V zH2Qenh}r1r=sdkypLrQ$u|Z&3TJ0=8#?y$s*J~qg+|l1V06S-ff2X6iEQjU^==MV> zV?f}!4`(<(UPlH0nEb+%%#-XhT=O~tIVH+1PWzENvkZxWP^ zh!vZhyxKTXMXcJ#U5IFobHjx`yZAXkKE_1TF+Ov)H)3HClbLIkK^(p5{Qibtta9{U z4z3{^_^Nb|$XXciU3rLgXb{N3!Bw5+JeXW;wG?_>l(n!NH-GF=2|VZTacs#|j=HYB z`cEfADjS*&SjgN z{Ws1`83bMpLdwFAsIZZ5^nJRgz%Q)*O7_Z=$;0PhK%j1gB2(*u7l@-I>aO0zQ2d7%&%ou=-E(PEO+}C+;@P@ei}7U-bMzWEtLmwJ`V7 z42d69T|ETw)`9Tfair<0u4I!smA+SsBM zT-x|H>_GqLobl#m5Z|l#UTw@Yt;D>=n+_Ir?~`X&>v{z1J(UQ}HYVGT(Z{6d(${R; z6a`gO@f9sIb{w#I{RWFD&`1;dB%qB-KX-XoHuekl3Ci|-b`dRU>o^@+RBf4tY%m-W zmIS}v!})0O%s1GV%jo3>#&NfRzVi{x$#3tMgdM&ux{@UhC^&~z9BsVS>ZiYgr@jdoGs~&I&`%+l$EVfJ?%jd z&i)gb5jREa*i~28cLR2Y2X2LI5SAjh)#^4m91p~5)4%ptJ4DSCfovGdgr#NIhm_Fp zq2FE0cJxar*?rb_!aBMyGz@KE!2&wih z_!$H3^P-g`EH^g&1A8czunFvoe&{%WY)~_!{aHc-u(G(x;_R!3?ZLNVqrQkNvc{KJ z?}MmcOU2zq8G@zxRcMk9gI2@s+j1e~Dee|WTft2h@KvL@cT&LZazi zJz^~btF`Gw68iPmmvA{EKtvSZGyS;70g8Y6$G`bVL`sOc@#7d59E*xGQ1zQvFU>IGJQV8eO!ajyWtUZbwX8 zBhF_FOJWj@jJBXd(JW?QTQ?CO#uQ)wjcDWa3FR%8R`_v|EuwNBomdbVqk|XI_FfH#Ip8te{9B+S%qE z=iVV*qCLRD0c&Im6TeHqK1TdP7pyLA6f=y8&)Q7!s##zv^M?p4!7L}_80)7&gUn)g zAR_V0mQyn@v%{ig+-)D>+TD#3^2~3U4%KzP76X-Gx%Y5Ct?%+SFG~`f5W;u+S#+1w z&iT=BQ`W+$CLjXqHh$|KZ0>f#0T@s~*HgY){^@eF@(Yosar!)~Mv4AqOL;smOBRE8&7;9xI@de!3Sk6P>S@NoLP*gk^{KWyMhI z459_>FK?K585RS^=Ep}<^aKpma=ckfkf!%(qZ>y;BiPoNwlX&m03epf#`qWlco%g- zXlj&SQ1J<)B!9Ese*qghQ+Sik&IA|ryY6$9R6u06I9DwaCr#~w1kJ7TBZbVv*z)7kaN&e?Zd#Hyv>mdav|zTM z#sU{ty8Pd-U_4h0{j^uD^r1K!^`QDmyVwn>dX zQ<8%%OTT*t;z^Bk_Ay;3^9g;V0>qs__cCL?Z*8EIKmTidZDi-n(mxp2WYGNJvI1%c zhgkKRZ$&H3WP^~XlRB2~QSA8)Q8Nro`!sMJi_ha91LE$ULH&&6zM!_}#z(6P@zE}- z6VtoXgxHh_6R>0+*vrWZU&?w2`x~?&i*_iPXy_uIec3E<_7pl1 z#7Z2n_{RV@iG6iq{Y%`0sB1=FiitL2FjZx5Me$R~;66yiYG*N~tLk@ziRomjTyl*< z7FdDniBiz0;1hm-_%#wqs^4ddLcOfB4Tn4~e=Pr2W8u7KY&_b3Kkb|#;!kY^B znhz^NXgW2clU(`<5GES#MDFq$56RZ($|7)dwzn<-=$YY+?a|!QBjB+ePTuX9bD-uA zhI?Q2Qzu2@zF6aus*ejEEX+)bzH+>-HLW}rBGJ;4OL7!Yqf%$GS!)ha(`(iANe=Eh zROhR}y$6F){0J}V2=ZlZ53I%sU8QhI+hxy5!Rvzb_vQV>M?bz(T|vlk$0se@qoX@_ zaWZ-kLv}T4&;Xmtj)wy?od)|XvxWj+SFgE;6AC*b5bbLe-zP5;BL}OTvC@4r9f-Zi z@+py7wa|G*(fV7bqJwTW9ifQ%iJUM1P1oeuh0t7GeoUOzfgICf^K`dR23wXz;C@(< zSV5tcN&2yJS5a~$EZ7!H@e*GMt0R0D&_kc4i|M3*ZIU$ZUG$haO7WsuHa}lVGB!j) zHl~EG)q-OM^AKIo-)esh$+0f2M6eYNmRFDNEZF zpWC$ES0jJ0Pguo2!GuJ;f+JZt6~-9N7CTr02qEk)mP)>HJj_jSW>%5)2g%XYsh(k; z--WG&%Q0E?MnOwXyN2a--|eq)jX=~OSpn4Mx?=(-eM&aS7znpa3mGO}LZVObv2qV8jkn5C(1p!&2Qzq(zqi(fg~L;lSC?5=0c0ZC_C59%a;+ zO=T4`7CG!UGIuT|#0SN>)YfyW5B9FP>rA(xn`8)Kcxx){8W#NfPc38{W}>>?P%6lA zG@3Jqou&+l+}}VE#>%R|Ig+KS{1lAYe20|7qavP^^=jRQO}@5Zl&k>Dd|8%U=@|%R ziLolgCK>0&aQZ~bpA=fL1v=t+t9({Yi-m}8PK|O|aXQ%~;xIWj<*ku|aHpyP`_UN0Itq!QN@z<0_Zd%wvChI zO^vnP4n!qvVDqDg(@mUWroXL9i@S@JIGp4r{)b~c%{ z>r6#jpHJM4y;`|r-Xi0fD?aq#{Wu|wR8s4dy4<&_o1e~w+O2Xtb0R^$AJk+aHWo8~ zI%eWtMe~LrAJ@p~f7d1r&hXplu6Gt+f9Q3_pz9K-)6bBPm;mIV9SzUlD11)Mh1qv1 z2CZOCR{$YkTdW^-lH56}9o&WR#j^sgyi>1E&(~ZpGYrGy3BOvdmx9k+7=4Kqr2$Y1 zpztY{eE#t|j9Y%q(&!4s(+tnytUk+aj#UJICLfxPYxh1EM+$Uf`9skZhM0GaA5<~t zY<%;cmbRU9^WLg&xXz4Od!hjidyZ)E>lSIhGkU=K*Pst$tu7`V9WZ}|29u0|mtiV! zCGecc&o8FUI&k46V?N%`i265Gpb??5()mOf2o2`c_(s=m#0Nnsmk0US`OO(=k^z1# z+mk(LSNOLLOGxA8oCv{bnd{Y_Sc86P)*MTAOTZ743t_6xeG@4Gt{tID4{P|Ns7?Vx zJn0%3-uh?DBKhqO#@=$nTKf!p(~Fj?1H|DGW;kU(c zXM4v|_^W8WUh$6?`oB`rePC2lru^f`z-qq*$K-#5<%~Tn3MA-kFPIH77G?ox*aaEC zxF3%rH5>%4Fl5Wr`gvIOq@F2hR)OGWck}Jajq3Nw)W@aIUzY6+Ee+{lnT{2wl+PeyjW!sp3{V zssGQS1KHKjA3Ab_O&g&SHS4c-FD^>SQ*yud+aQp1ql@~#r0r^HJE2q*MbEHUSNCwV zyEG~ZUe9g3b`alB8}3nI35=adsKf^a*P*E;f5yI6*S#$?Xhch~ic<9NK3=2b*e=YC zu5j}gtroYF7?QvpnWooYPbXRD^Xq5h&~_@-ek7dHuPEL)iSHDr=~yeXVYy+rH_U@~ zaCPzyDV`+hOzFl1!_cxmw%_1vTOy8%Z z50Ewa48Zrz^pnYSxPVXDGm}f2rBRxHU9q|=P?GkH!&eL;>*%L|v2>fKtnPAJvk7eAQ zmRz3>nHSFkx-kzsUa$A+NmF$;7VB1%O%gaqjjJZ>j~aK@y)5cSnc)pl`DEPdlhpG{ znnh2m6g34h`H~{9NjELqMeJd(8s1J@-HZhQ#kPlUCG0LD-M(u^cNnx;MYCxN=hVheYw^I>e3?$ySYEC~B#9*xGDACR9kD`?Mub<|i? z(-X}Q)LCVAd2S|@{=*kA`%J38rJw@9&%469y<$_dp)efu(b|Ops%thF@6pE-)NF5I zF4+$o6^9$rYa0R7J2nN3OAp)=9@x-5#HGGH&m0($OxSk!MsenD;;M290QvX-7<6DI zbAU6k+nF;DOvRHfSm7AVnYAjPIIcnZ-*bppVjNslPrsPKZ~)P#Yj#Z!>&q=?)fCHA zQH9K|zbopFQRcphRWJ16%>25xv>FE%Svq}))eelfWfnb#{SH+5-PJ+`J($kMC=(aq zGW*kl!7n)W4d*x%Rso|8v6WHbYQ2gAe(iI{LaYQu4nQJVD!h zQyl7jL7|A>+DmIj2S~kk#&-JB;5x^1acYT#S79(u1+GixKgaGP=>-aYu1Hu!;_~ai zIiq$h?&UY_Dn>eI$+d~E2w)}Cu8k?b;^Me3`Tk7#&bWGLz7H<`ZQUVFVLn8&N0UZ$ zJo-Lv=dmOD`|b;*aM=7e0^c7kx=YWecx{>O$-4s-{w(v^{<&Zj6A|jAl`_>xI(>&^ z*Rhkk{Y_z}^=lEep+SPPE|dzobmK$|xL_7E*iu=ePMD2K=Ewv8%D~YdUM9UaH0D`v zKK3|?pH7)n-1!5{ z-G;+HNMu1qgClp!zt5w@cJ@S(pUz#fV-^-64l`v&)$S=b?S3xqWqv+~UL>~y@`3uH}((Yb55Bs|qHqpQ_N zElcq&_oYN{VEDm?CrifPUc9n$|F2!{RN1!LlVzuFa*(JW>sfb^RH#C%-g)$5kYj~F z*!O6WAX@qw23&Egq>Kx%gf0M1Jip9$G=a#rRn*^<<|qKesH$0K2ps16$_Jm}w1L5J-f-j+nwHSE0n8C~s2$q)m;&zS z8q0m=5)b~4j#{UZPq)oAi#uvv8$ zSJ<3QfHXzJgLY$4`*j~{N6xRpGkTX*?EZBgD4PmLt*}B9vO)v+I)U@VolTWL!JpD3 z_Bx~3VYc54t3uQKo>sVOX{f2DPhJ6*BG@mIU7Sj-FR?aB?S?`uL$pTus(G~2fGZrO zvQcA&Ui5z*Xi^R4E$+88x7J;fj6<167n-e+E1`>Q&C-yK!Ed~O(U5mDvTdJQFP+pp zp}?$yO7mK}21ArKCMDoN35pUMQ`G-ia|;l|wwfP!i<{yuI4eEk%Ab`enQehW$C4B!%lluIpT^QP+G^<3mz4VRi5sC-kI!?h|bVsDqE;n+e7En$wt zP}7%Q3_uC>c^zH-qW%&syogK{VFlS(`{EU$k0?3^HR%tPfI0;BOxni5Xc@GlVhxX1 z0#cf*ttDksXKt+qUnm7b7_Ra3zn2ppJ;q`0#ER3{Yy*mWcAZh~dx&ab6L_aE8dp=| z)T`n&qqcZSX9VG8P-wcv(Ym%P14j|k;D}bCTP#`EGi@l8X{QRlCT=7_gCia=4k;@= z2({>QBS3+-&q^>WJ$!$pRPO&VJz~;c1TYXfA?36;^#E^?0$b)R5Y@>2C@?~89w_}&@rxBH0h;g#4Br5E0dA5a908eE!ail;8dH}Wxf zKO?)jDe8Y<{eKac_kprTU#xn#?p7dfv;3n?lI$PY^<{SbSko+t zTeJ9u_TV0KcKQ=z3uZ_I()<-K(+K#D+pOSd)9JQ-PqdM~c}{yVUO$HdxFS=<1VY&6 zjOkNRr;b(K8hu8bzw(KHB?)7=6z~vx`t@*!q_}$)a(`#aXUlZaq-CySjC82%jwkT* zXwx?N=|%%>qjE=|bOt>8;S~+ttuB$IV+gP40PUd_yRVuC_(lEYPKh>qnl8r;N32DB zmf5@4EK@VFqx>d-|4TE3f17AF8X@M_PYJ$)XHz zOqQCo?(-P)>FA>x*H|wVeA}GW(+j6?RyRrY$B;GW4|{V#8$Ut~w)V}Ov9nHr@T_^w zHAHb`LyP6h?20+Rb2nWGZ95fdMo*rb|NdJV=HrEnZLqn{ULPwL+NGP^i&w+KVZMeO zgn*d_PNH)2*Zy9F(eE96~AxiH(>*T+M}5Of(#AxTve!r%do=*-4i0Rr+%O%-yLOjptcLMCG2g+F1|2 z3_@oMVqgwgVoxgk7>{`u6ut#kcUrBlc};9uYd9t*N%QU!h#tY>Va{69=(|;e04K0u zbf_7JU-{Tj9OvptUDb2yqrxcLfd~+|7z<#ILHOF8@gJ%yx%U9;Q<(Aibs(B}B;Y*B zVaX{N&IpU&TaGQ_$2?vxC*y$4(pzOH`{^;%WJvQVJl8A+U{(3B9Vc_WY3k06p+BD9 zSrGv|2mwIRmNhd5!-;CdYcEUC`apYG{^@8T`XCg?*+%6meTlfzW8w6fmNq4+sT@g1 zgsdoVn+0ao;Cj7SQ8Vs8I8Sb zB>b%!<;Kan4kND=(BE18N6-}DmK&SvB6f5Y*sbrjQ`P#ECA%?=LwYO+6QYpb@uQ1=;dCb6wSVM#Wt4PG`qtaT8RR&^#p;w z>24e7_5n`C{;}3n@$uQ${)N&#tI+2@2FlH-(^4rIUl7W(UzgS^SCcOhQMStrcl4$_Q_7r~wR17jR!(O&;mU?+;X|Gh&cb4RDJ1s7I2@SG?ApjMgVvL0Ox=P<*L4hdVyL!f>V&8tqcA?4XJ<&d} zU6l-J+nsU$e97v9;AAgSynC;Dtbn$45^X}O^t{p4`Vw%$s6yH|VG!~Nu=^%V+l2|TMowa$2;!It(b z8bGhQSRYwd;8Fa}8O(Q77B(O!m@6Hi_i! zN%adTGAks<7@hb95GP>q6X4X{u>|h@t=7&%l7dy+F?8~n`qUl$%$~V#c9%~`Hcg<~j+sKHD!r%bqRDZ_2>;-T+kGj8n;97UyjWrA+g~{6Zj9Uadk z+<*gcB*HrQd8f;MAPb4MhdE+HUH%ds>Vu=!XloFOGJbT0gf4`s;vg~LHHefA9Vu?! z*x91!;q#|hb3B0e)O>QV<(BH%%0rw7XP}t_>fet+Qp zq2i;jeLD9-6qNbxysLFvtcVC;bAmJ%2Mk#hU5(WB3dRCXk*g&tJ+3+;c1htM&Z=bN z3znPBY=-KlN%yy3!CPe-jzjt=ZMb3Cm7USRDg-Rsm_oBBu@>scXwAbgswcL1H^80a zAnJ!SJx@n#b%hE#(hRMhK(x9QQLlK7)ED+i!N!W1?aapZ4EsNRKdlP%KQjuJ|Lsfg zAQ29FTSlI$dvlnAhfWAA=F6R}nJ+J8m0riCZ7l<_;eKY4#2d4Asp*T1qEry3Z&4pT zemz)RuDlj+@>WL=Sv|^c-ygNL=kK&25Dcfs2&Y$g|0?{ut>H!L%Bw(6(ST7!@jLQAGp-Nks%26F^4Oo6;xX4@P(qVeh~NJaE;yw!M(;$E-%h-9e6)fyKMk z{hNS~SN@W-RmPlpzxv7tlM1>0$V}U5JWFkx}Iu^5{q7b=y^f3A@yS%zXdsC zMl<*=XjEQdD4+#_?cpt^CC(x}W_dUo<7Jl1?>@+1GP6j8fMAyiA^^jTUClJN?n{8r@44nsh4v!TF|3-i)j4K+Z7WysZ&$o{joqbrD|TAn3o@gE9q??jMr&a6m&<iq#fg{m^BF#tcqE@Q5#&h1Q08vFb&{b|e*$m6LzW?nxNv5Pu3m z65KXPHX2#qX+c~PVUlW?n}P>U;IT?3PvRepeosj(CqEfsEW}LoqiN!$6O+nI~!OPAy-850Y4}pq$sK-7*rU);%V?m)gk^z|SQZj$qt8 z%t#C(Z%P)xccahP@t4kV8{qkp-PUw7%my9*aH5g#5hX}^;9qDt_L8D{XBo!{YKmi$*|s!)jZg%1YZ%Lc@S>sCB|B8U5|Pl9#=jYp(c- z-}aG+y>RoOs*&jVWS&RSi8nzHq|sreUGtX6--~v24JjR{v7qaYVPw-g6!t5g>UTFy zrbAxA3S-V3?{MDX3H9C&oQy!$kIsXVDuyeXt@X!)k`6ZI?iO~9x(%s)0`-LcBxNOFdB=u;3 z(c6>XIz}$dAaXl9v_H<1tV+GeBP2*#yR1M zU4Ic>VyPZx#SCiJnl3~q9+OSm&%fbN630y<>1MnP3tP0>hdhG$+%Wa|^RE8+$9hXo zlneopUB3f8R&}BB{BK%4nf7G-&eP-+);nTItuDO}6)x#9Pnfem(tuAI0~F*UA$uBR;)C zw6u=9O(^Bulb z@TQ8)g|K4b0SlENs07%9d)#`m$}MHp1V#e+ZaodDlF843iy$fMmf<+#xoyOS*I?To za?|!stxEj8_E^jVMuua?sYN{sl4{k(TF37&p2=--rz9_7C)d;-)JG!5>2BN-JzTC_xfx{MlNz+9j%V^+-; z|I0E2FXMO-wH*maQ;%xVE@pjtI|#*Mm$btZMbEJK@C-%#6|aAw7VD+t&C1!cpO$U)}0Wr6sBtBWntWc?RT8X8D)$6{{KV4!5Yy z_1W_C|C$$2Cu8>WkreWX4El1{8TG$(bFk@ zUN6fV{qI3+|2?<`OE2Pq72-oOLGv${ZlxaS9_Ug;YC%gX@F`HqFc^bGkaX`hFI?DP z&q@$Ig9gnDjlGq@5e(17^2R7-DhgW0*nI`@k)6=3#3qGaheYBihBlRkY9QH(psGiS z>J;a`SVSJ4Q;s-7{$Gk#@zN8HkvEc^BGNnLjAa6#dc&yPm`P;FqbIHx?*A$;#`4A~ z&6WZdUUpopASo0Gux!Vqp+*6EUd#Ny0fHhzq9C$TMlXwqrEV;-1xc%FWo9hDU}i+2 zw4eYVxmXvbQ7zGvxDYZt$KxkF%#m&+^(ZI|BKyQPkB_otP3T3$F8K^O7i&hhSl9}V zIxNOHA^hJA>H_l|*8XK_KPzZHsiJ+clNQi|u0LXTv<` zEzdK|@G@M7({HPI2VMkV0>93Q*q2e%qZSQ{66m`-;`@W>I`@?9n6x{S%Z`x#Dv>fx6(yHFHaH$m zGc2Ece>QB3%=%WU)WOxy;#m?>je=fBWIgv8nwB-ij@*k^|xyEjO_B&;>AXVH)FF+keStufx0+PinXsB5z zZm>x!D< zzuNckWVJ&Z#Z6^36jSXUvMk4KHw$>>V9a%rn?I2^@vcE zIl|LW*&VZ}3`}1}djazqz5u+Hgq3~+k_NfY|kkR=S5n1 zovcUL`@{>rv}w;{*pf>Z^I7O^c@g8ZzwDs=cQ)svk)(dYuG!yY+|Y#5Gbuv+{=jaM z0}TI$XT>h0n~H!|$?Z8^>n0NL+;%=-S7gUi7tO|B;PF^nej-2Rzq~=#U6!H@o&ZgJ z4=RGA8DDt#NdX?{cB9fSoxL^3GcceH)=!DOMJiMLnIr%y+s>R{31dTl0^!j`v^%wqwm1O{Gs*|L<2k7h0oW zCKX;?&Cq_+LBc3j@_E5Tb`gkor@m}Dq7Vhtddz5lK{Np%DiQMen_fFc>X*7e0s@MvIoH(OZ}xh|VZs2!aruXro3Q z5QtH>_cyCny#HOHmDM`GEGtyl;Op2y14dQ9JOi~gp4|y1 z_oBdZ9n@Bci9`)yT4x(hJDP&`ImXrPTjF*K`YQ|vHNDotU0eV+nWBJ2Wn|ewL3RwA z{orCz_oAWf9)~l{?G>zXX9WJVlzs;rWBv7FMB^FX(}2B))XRZ$tP-n}F8LASJRf`O(o6gJ%|VX2;ZSDhwAxNZROwa_j`nn1 zku~C@F;7+)*Jyr3{t<0aNcxwr3a(VUzY095c3TTP5xT|`!Iaxp0sBGN%lPnM`h!dS zB0l|hBiOzdH#jC+?XSN>xCfH97bSKije$Yap&XfHb+>QeFwk+)W6HlZ^j3VvBCf^$Dc)dl1=Bo__uJ{!CRmO8T9#@A(tpgKG zSklP^8639KRg=}R@FTZ-@ID=I=u7#ZyaC=19cuU5zO{z*R0aN) zd`A-Ejb2c-L#F%zV*{URoNt`(H^^59J~2&=mxHA5Q9KH~YcAy-)@q#*?8^-n0 zt&%u95y=HLoeENvim$^CIPX!8I8~H~FF&W_|E$cGZD_Eut=PLd$f!QYlttaW zx2n_maF_ff8|!2)qF+6^b8lDhbk6S7RXL1Hzj|T!Cn*SSmJgM_sI> zdiZ@0K|G3`=q=~PkvH~ciU!3q*W^k87=YFaBu^;433aH+MjO(L4;w|_P&>qx&x{>! z8rq3`&$@weg2^m`2-f4nE?kL2jcW*W(6-7wug!HWRQ`l%A4+1g=K$!mkcWq@Hsobu#?8s@^hHakyaJe&an7r?hmx6E-Rj&EPld*vlelhb<1NC9 zZ75shaezhDBi_DsGi0@j((oAjf|ZnR1FU@+l6>%+C}I=?mgZFZ%_~-1sLncw_~>Pd zPc4IcuHCN|G*DK)imF64z(D>L+VTL1IPjS?XOTgi{)ba5x`e5O4wrrE5S25Qga?*E zI+p3t8#)!lBM;UP}1^fuMu`36t1>RTO%%vxzW0$guAL^ zcHpKZQdka*+oIrB{z{xRFf`t0vfcpas+J?yZVnu90`g@62*;VTfVOr3OZDyy?goc` zzBs1NRaJ#aN7!O`8Na1;S~0eHwgc24|}%;r~B0ciC>SJj%eujF^f-+O@pEn47eZ8;OD! z!^p2FxXi#k4x9b4NZPQabd3TP4$p?SU6yNI|2fS1n9b-_FE!)@e!0VtDgy^-&A^=U z(KdMB03s^WQ9Kij=VYgyjJtotXJMb0I8$xgy-u8pyMNF4yoZ9ms`)GNnl#~=5ZmHI zyb@<4M_n{iSO7JT-tot>TNLU3c?ef8BYNN^^N#W4e-H)2EH5oDDsrL6Nc}}wm@*oh zDZl+*r95?*Pq`8Z%&N$i0y5>n@90Be0B8}a`T9NG(T~pVP>LAQtUf9@4huQL`{s9~ zN}&S23N#xxw!R+x{Em(ovz`Xaau)X&ocp7Jj$H96_ z-;0LcpxV|OQ{o;`glpfsbLF%(kEy$e&Cx+5A=Jbr;wuhbo3kURa7dee^-q#2DPdm5 zC)YmO3VkCDtZ<*&BS-PV32Tvl--Vw+Heg84{ZQ|nVVo?Qgdr#f5X+g`U~2S@SL9%; zkM(kzqP1H!qHH!QCYeM5&zEny)WeocG|Zk*e9QRrN|Dp+=O=d@sWWjg=Pm~Z=Mj>M zxyGDzXXk%qG4fmCC){LkTpLV%TwyS z@s?bf#{qeUY{BQyKwLWCDWfkEQ-*AnkM8D+*F~~ag}#6R4w6GQI5bSNn(r~e2iSj~h7&V9^oir7;+NcXRWus6TzFzc7ncHc z-Pe1E7;bFx>nDoKFIV$_hI^npE)2MecWFD&ef`&`Px<$>T80!*m7phj(T24L>+}L%OSe>}g*>&H|xK?d0K?K?Rfd9%KDTqKSGDz{RsaYCj zArz;ZBL?~5DThx$bm$$Tlot-%E^)qxcjKC~@q@Ha#7`ztjH4Sg2c0XEV1j+H^6>GL z!<-8Nxg{p)((kEeDE{>v)3+kg7JE-qgG-L9CM^@XrBq;7bYYf=r#-k(5nCCQT-REZ@p2US&utrB6 z3sw*Fo`o#w4z6kmx6$o#c<2cJbVQJZBh#tdaVI_+bTS%vXO6Jrz8TESlPy}`J|hQ# zvK`~6X;O-(mM^q{{UQ+kSmXYL2GLM-=gdT~B#uNWioSFbdz@~^+Mg5+1~lP!D$j?a z?-h((3Df!+fHyHgzD=#K+q&LRKtG}ylTOzu^)i%5!lO|BrR#{p(W~f0zyMzyBWB~* zY&k%Bs7|Kk%z13jd{}&5!rQpiMB^`bx1X%Z;H(|Ihm*IKB3R_(!76XwCc(8waajocQ9)ajH!$10~m);>G59*U~-GLMBJmYBN=0PMC z_;As7A(5wF!_-uYw|~ftiwsWafABi!=g7q!dZs_VQb4P=nKBhRq0`9uJJ5^^Ft%>S zB1Ouo07k$o?Kc(-ZZ;v3_G2zE^w1-2{My47XLIQWV?w~)kZeVR7H&n=`_6S#IS4|W zY?K{kL-C{oyOcrMFIfal7?LO_md`~aJ=2AYi*HetdV{wrsjx1e(1G@Mgx61T1s1Mt z4*hre`1J(9v}6^g0b)P8x?+tGHO&}+!F&%5)J__QwD9UNh@=@4U_t~lh1;Jj=Yvkn z+FQp!R%sr}H`LX?c{rf&bM!+$e@QAkPZQs$RLJk}*Lk9An7c{@sf;s@$fYKymwgI# zvz4&TfMJMDGD*UHOTN~?KN@MelB zpxgi+=T4I=|CTk>Ob6dmS0YU$!?>v_#-E9u7U#5DV~FR(i>q?&m+V4y_|pF+B|Ht- z`VcBzyB&Dy>kb1w9^_DkrgICE}Uw3p2> zlx@HV{`PYQym!=ufRq4l(<(lV_w7EJ)VqnK-=eGN?CZox$>AXY%Ea(z#aEHXEoBVf zI66#sNgFX?_6A=u0dWjWA=YXg*jb|7^e#Zh1<~t3Yc=E3h~>S{6;9sR#mx18x)0rkIh?JY=$*~69TRfk$`pRZik+tFCloi z6t{&Nd{i2%v=xSYqrErv+addmplEbzL|*2quaF&Z?5&jmb!02LZ5FQ9z)jYOBXP)0 z$5rq2#+n<71%h~~ha<6#&og2YGs5!l#c!U!O)MvR@offwR-W`m|NYh4rxs4}VYn*vS8G(7R9K#H zpdfI!LnXl_zjG&UM*^I}WJPPKjsyovl@?M7u7&xdeVX0g3cAJw>ma-!eT@$d6Udy3 zE6MClGJ2iP3o6C_8XrMA_xf7x>M-Q@uR5sjdPjqwYn;}<{skw!QzaXe(t1ab1t=D5 zh@INfHL_RI`n&%QO@dm&Gq;q&L|8CMyfxr{rcPQ`yTzuA(2bk3$Hsx*UKuf%Pia+u zAIwS}82_?ftTuL%LVCh*i*d=FO{`H=Sac76}(@_UyJVt1%ltYDC8e7&kLt3D{)&IXUr! z4@^reDO1)v1OeA_RqCMLPf;G^pPo`~zlpj6OEAy2yt>?~S&}J) zm3xm35Y$RfntTxrFq$?Z-;f#!q} zC7=R~JVLVamfL%qCjChHM+}!fI-Od^$Obv&u56{nS6pFee+pB3cdE}xTy7+B`ky7C_7>SA8#rx*-$6`a_C!>XC@MN_O!`!h)w(ssQ z?36Zs?gCAR)b#{j`YS#M;Gs0Ketf;|KG2rKB?vEGO2<($T143}%)&Yn(b|LLaE1;8 z0dBPTC{!PR^QCYZwDC*+*63~fe01r3V(wzP=a>rJg=u%nw^jg!-x!V5MP3m^4rX!c zVL1fy{%Y8FB9==@`SzY|I7U(Fvutf!kfLk1Y!*j#wJuxz&`6?XM_{wsNESnwK=6t2 zXn<5Cy7nqQ{J2X$s;>k8QD#MGP&`?_g&l)VQ~l`7x(iY zOR8=`Tx=x^IG#TCOiON>)govkBdsoz#vh^Avc4s>JoCIfi;kDEJk%~i^NZ-eiO}1F zlF|;B+SRk)mq<-%Lf}=$SrAIDRU;nte*-z8_2QVGCtz~}1Z2u&>uD}F>BX9U1)n%xEk;^w zA(-A!Xm4OF)MsI1m;W`bx^U_TWsd6E*>lDf`XPidup$olD(0{9E%8cPN7TjeMwzPI zGOwWr6_0%ENpbbpCrprCmT5ydtOK)H?hCFf)RJ8>c>3=FmoaR?LwS1jfNQp*iv5%r zertjE{y)s2@o*2!r?i=Wa*2@7S{PMUllhFKmo^QkyHIrI+1h}Y<1yvHCuQLCi7)Q7}0@#94JpX3jluf63=ag-v z0FcP3KmwgQ^UW7Jk6i*cx+;XP45f$Jy z-7^jVvRZJ(&Z9+geZXt>oHU8{tEa?cJ-&swR@>O1D?b&0z2-NxD;?4OjQd!ed-iUv zd7Wo*KF?K_LQXwiI2;-M<^zR~-?Q>q7nhM64+KT3m)X zDqzi(fxM2c2e+P_R^MWrk^LLkY0nB^Mo#dTB>o$i#vPOq02Ha@*++LB^V3R zru)f*6LhUPw4r6{N3%lYC%*Yh3js{g^up?z%N8oK-i3oX<=13RTWsUzZl3NYKB6YT zUV=qKDMEXFixZtGu#c}8jt+wea{Aun?xS`Sy%SS^{_`X(BfYPrNh)?q26DXPJg6Yh zF0q4D#M{r6-*Ol0$}kU1r4~>(u?Fj!mVhSLZaAGV`!0L=R9UeFuy8bEDGg@6oXI}t|`D6x~vZuLVFsD*&pd-k*TxFnO4q`DL2td!FwuJ?d&_~18lTY zsv-T{v(5e>7E0%wx$y1y=7aRG{#~9e7R-CR7f?<^u!{V7oxnm628iXunTjN-gcNx5 zByi_lBF|fi`VX8on4o7v6Z#BG+~DG=r}|cCuovGjsEg?h5P@sN8`}~-{@ynloejKw z6&HQYh_6HgDTn<2mk&bK#V(WdaqC9u`}uxV3;7_A-S1aq%DNaZ`Yw?*!0Bs{$O4|Y zizl!gSnI4{I-!ooOX$Lv&zck)exPe}1M9Lv<0OsL@6#N!st-pZ^lH?NjjPa)7Y|EM zK1wgnYAQFz|JEVq)G7K6@yq4%(O8|TUf?kXMenH5st)T@L#8M6yCs&1L3jKI;;#>s zFp~Z|5N|wZPv>x<_5kde*^*#D;#6qtj_qV5qq(y*&q1WZ1A1Seg9=t`R3y)Xy8Y?4 zdaMy#VJET8>sz(jp((CWM6*ilXN`K4X}RnfK0jm&C>#Gv;O$5A$v$|gGn7OUaZ%r0 zU-M~)!p-?+V48ct=pEFwy4w?zCn+Wc@W+r^ITowZn)xS2{GYLdHaCGR>4sFQm3;l| zbx0u=^6Z)N`t0u#jTW+m=OtB;H1|EK@X;{j=V@%?M5q6bB_@6-jLV4EiVNFQnryNo zKF)3D9hlD}wvJ<78exM9L{uM1NZ!n|EiPP796`Fseu~^B4`pgCTSy_4h_LUG8IZ=r z+gC9im`W_5p2;4ViY=gmpa-S9|0&&GN!;t z8g|0%75hgWoZ@IU#J}A#4nLOtPuLg}%&*Pj%bPQXdSZW{H%926ysK^5PRSDfirSf@ z;Q?1UoCL7-+Ak7u%l}AH|3_+FO^*yPQ0+==w(LW5MjwQXdYl-5RoKIot>?Jkuh z(ax%UvE}Y#mH(($S1$zGrZ%ajlIfrWw1<9B;~2X#-g_CdC~Dr=86#03f5})CR<%p{|nH2UzGeXBr298_(Tm(<fp7-NlxQjGvsPOs?nBg>7v5;zxN;W6&Y!I?VD8x_zM|#|0^7^G)G_BELNd90LM5n{np%Qfxdhi=lK`aR*%JQFAhq}vr-NF* zUkMw#6?>Dm!%4i%$BLv6#&#T=td|u7xcBA*Q#@;Upezi~JlkpE;M0@0*&Ax%{caoI zrwdctJsWMLQ>Ekv6Jb|hfFnnCst{_P&KT_7dw)98Ea}?X5Ef{woE$+Dj@+=r2J&p8gxv574A_5kj;vA!8LY-k3m%hEP+I2_ z%dq$7qTaT8)h_{t0&4JNv6!p8kAJylg~D*h+*th}PyO8LuPBP(c3piP3~Hd7HB4q)s6+S=GU)6C#L)^OPhl@ z`vkYZ0U3-IwyHXv#kX;0p%2+{*_!cYA9L|Wn!pacb=;LVV zM#baYb$_v3U#hxXK(Z)S+C_*(pQHouzBq@gSN&I59+)+vqn@5ZVw4O^?G2W(1N@@A zDc}D%`t4CYo@zPYWD~FLQuJ|ctk+DL5%eG2aCuWtGR`#je@>0~Z>^?hO3rKAx0`H= z58nz2+~J~c8-Od#{?_3%)3&^O@{2X8(JsJ0A**V0@A@mN!n~-ESJt~=C)NWejtv-oB3x5k}#yK zqB^a&1nL_tpB46y*|RW@yJq;uMvV3OWO~e07{`17ipQb2on7&-zB3|DWbD%s9kKPJ z)9@u!VNiHaZBfo`eYjs~(WYs!ia6&PTvQBj(YnbjPK4NC_p1l6SBnl(6P`4M4jJq= z8V(8T4G<~4rJQG0b3v5Mu?HUyjzCaT09ZfjIu}%{xB}Qqfw5PWIEJ_v=#O1~-YVb6} zpvO&!v3a8;11R8d=yF;_JPn5d9QMJ6q}ZWZ=k_xk@ZuLIxhgE(Y%v4@JH=YbL9zpH zk$K!XmrMAi-A}@~1@f2|XGgJzLzlhb`RG+x4VDwHjR>_{)3>FP>u1#Shro*;W(tRh z(!Gt6{LRKk0I(9!nX#jktc>oYsF)^B)59C+H>%tJuf#^!EpdhkpmR{G9K^RaDTAaX z(Xjvtp3V&*LM^uQB~SiWQkL?|gR@5m=6(7#Mw=wev@3ZZOaBv{^NlB#=NA@VhVUw& zOe!sB7k9DLu93oJNatLoHJw;m(z0=42!FgOM}mO52dL`P;VjXkfBh6Qkk%@Kgt6Bo zVL(0gc|}N8;pobd)iFUmOQD=%ZqNU88UH#?zSZ9}#m{J;3vy+?d9>EZVg#D8S>5h= zy+!5Bxn_>_ATzBmwd0JE?QJ2Wwsld^N;DYhKbdcI2M5}rLg`7((5346dEP;)O?_BB0Dl(1M0H2V)WWpRR2>Zq{h;)SSO%8TV@H7^6Zk|lP*eGzr{`Px*TXj@2l<|j z1a~sLL>MsiFXpZ{R^P?Gini#Yd)ItZ}gZ7z>}=xb zD~8qQnXsV1FZi^kqmnZTx7PqM{wfTOj4#FMy*^!LH`4omcc+bf7<*)9f z$x*sb<{4wO2?!mg3*eTEdy!m~4r)8;Ni06R7KzAiS%gTJO#UQyq$X~|0QnUT`neT> zph|w{m&)m|_<-k>@Z)h5HZU-+KV@n;7MUV!4ga;WR&hMrXaH)6;i6n)vlj<>3(GC!E`5e7vRwBbvA~SKJVuwN36I0bdE+r{yAkoK9 z1DM352D?2T0dPsQG8xv!n0e5{JJ+Mut;)bw-8@v)O}iYs{m62@>%FDV&xVV+P;Zj% zV6AT2SKpS4P3CkmTXeNhenD4m@)a)gcTY9iu=7P5 zT*_%6cFNEj+^4RLuhkgCLX=UrUMm{c8mPns9tDICPamon!eh;b7)8ND1n zFNZwla9Q#{M)@9kL1NsL%;Y(R=w8|^bJ6H}2|7qc6zbxs_3CKn&vBDd7Z(n55O>M< z2NIFhk&hKSs^&6Sk`($%Mzjd8Pp>E=MIdxyK3f*LYgDV|*pi1m0>v)0C>g8tZJ7qW z<>BY}>e}~SuS-Tr8M^~{2sp*UN)7ajr`$k6-|(0ivB@{$*!qDL6=GhmqcZ{HIq za^!0!h_S%dV`~L4L%H+RTj6T)Mh>EJz4KwH6QA6s%cD}7XJ2IoU7+aKYGdUc1mbF7 zsw{lAV_;?FHXplyud zVaeX^8kAvW`iI-p$6DGaig;RX=q^>m*1hqgf}$GR6rvG2!}0IN1GVHA7=DKA|6vX<8?(Jb2VP~ZER5gP<-#jJ@Vp^=^$Dd)wFV<=Tvo&oD(GnD zw-A&>L|GP|qQ9EM{Uo>ck zGEAuEt##tRMMG)Bn)Q-EG}BL1Cg&qY6gkMPUjA~q6jM^tkB1Mv zKcD^+n^<^-{`2mY05A0xHKZjXE?bbZvhv6CO%1EhGxwUH9yUa3=3i{{M##g=1kqf6 z`1LD*#mO=sqx-9gSti0&C9ld{Ld(E;kSN>-0r$F@Owl+a@LveOXp3D3bj<5(J_NPS+%GjDYS+(P8@7*a0T40x` za!V>(_!_d0&_5h=EG@huXH~?Nq_`x~!G+&D#J|1)dupx)^)^F7gtvIE#(P~vJ|q7S z+3ORsLEn8MYYt1l>3W|Xtj({!OC0&BH}58q?VJ&#vzkVM6M}r{h>hA=6goBU)Zia@ zU`PKWi6{{0J^318&dM0@!5}+4dulnNr}XMc5zZ!+j<0j&l5jeE`Z)z#MvWL&tXfRa z#H@;bF_hPv0%F&_@sM3QWJ5sV8TRT7N=1Y4_^cP7Xp~KIE3NZvQ)yF&(^)esTSWVr zxOVy8=P#jo7d{8eC8)uzD5CZ668G0@cI|DZfhH=RMmq<0^C-RkPOb9PuXv;nMnf%v zu+G9W>%!r;e==;QyVeN)6=>Su#6QeBi+xWZ?#o|L8uMA4UQTYnxExc0aR)Efh+{$9 zM4rAcHPPp`p(^IJjaHFL00emm8g2$$m$~XbL!z}6-uT(;Zzir5Vn6Bykqa}ZM3+q& zB&oa|HTVu#nQ%{JgeNhe;ZzKEjg2_(X^wRs9z@{A^<D50MydlL*>?4`(d{#j$l_DRa4N_c!NT)N<2-~?4T$fqR=PdaM$ z`aciS2MX&O>(6C2YlHd>Qxj@N?z!adi51gYMN$`~u+k5rS9)L={o4QJbjipZxkYYA8w(CxVQuPQc<=xHz&WBhg1?!=e11dHXw2(s7# zY}yDd@n}`LOW&kqCW_oCdCr3;p0cLIovD_DYa4NWzse#2z2OfzC+!+03&h#w;2PPv z)A=m@I`85Y9qI;iWaogVT^6q@3`9F6NMfA;MVeC&uM+k6V?#?ipP5?hV+{N8rl~_@ z{&h~;o=oe?W8@c5h2cItrR2Y`woD@4%bN>yGdJ_h&}NO$(eKPBJKFT`ZPu7>5huN( z)?bT}Ro(9PUxMGvkGfT}e-{V?*;czkRRdxQ7qN6Y_S@zv|7Om1^21()zG`B?oWl+L z6>4w2Q2Ezi{O`e6U{lY~zM^t?PU5gke}`ur|29UeUDHdoqc+{)`KGg%Q-)*)q`^FO zbPyE5L}cm6`#|$wUm+;=Bns0{wvLpj&^*3BvWSA+zLnof^UR3UxMZlB$8U+hp~}~I z!d-Q_2JU2H_gX|~K2RuUlTorLMv;avB+pnKy-W#!RPk_0-6k^gY0e*Ia9t!msko_V z%0BqvftZ(-5#S_I|0Ml&*}8u|WIzLJ3r4P=#pk^HlqAi6CPt9Jv>H0rFtJ!E5tu{m ztv8-+#IZ-E!!($9`2|wERGB=y-LdrC16y=!3fk$^w+;9zUBzLxkB%@L*_z^ zUJ8a^({iG_Od((%aUuq~(8!mL-(4ko-#slSulsf%suw@|^nvnqvjwnwy5jR`B}<`c;p=x3m@L zVmS6?$WooS>uJ2dAe6f9EvStn=4)tvp$j2OGnmMq0P1|uQqK(l7+d#_rAz9iUK>%q z?G6=<5Ev%7#8v+meD~BVj2o_7RMu$Jxd&XPY#1sFX`}76>&C1JW};wmY?C`4W=#4= zARI5WHUaLXoyL|kqzqH`b3NvYQCdl#8njYJ*t?3jWe)5!Cd!o#+-QNqHt?x#3((4 z=MaoUKZ?9w;X1?}OQ2TRdc8moL4~rh6vv~4i(lqNfK)BNmaHgZp4;eQ$ao98*9DrY z&l4b0y}Gq(JT%vCqOAu6=6Lox?=dQKvnxUaixX4eoSB8Po#PZo@Smq2!jhC=Y2#XF zDlQLqo#tpmq-6s9oW?m3m8qE`Wiy($Xr&5BG-f#AH@Ge|ifDOmgb{p;z5QxcSe-kE zTC95f^_WeHF6U7Q6@Li}o2=q4u(v77L~e3IWN3wqtz8LXHJ4sfhrz!GN17kNcVrQ) zhTR77uV+(d$BW}$pQ}&Go14%Vx`R*y)YDHx1EEMwh<};5W5954*&o?>JhMlK* z_h(X-Zzls^)i6`O!Jc7PmU}}%Ir@+&f%EWT1z5p4%q4M%lcM`&t~P}jO($XT)qk|p zG~1x~;(Wa)c1}NlhSxhJLKKN$VJEtzNn;qD$3OI{n0!51(%uI8%SU)M^TT+BZ5VUR zYTn`pj)lT5JWl4QU+mA5CUiPL*t7OutIxs^ zYkI+|^+)lSvGzDyT@3-W?bi>kaCYw0eMwv)*@TlnymHQ&a}gOMDC3E=hyG2w0=`fH@OPP zc4KG^W`$WPSYtBaYMZ<#d~pbKp2?fy{gn5r35Yg60oyhRDF1SY!)$Qd1BQ|s7}n83-7>$1_XQ#hdOaNjBMZ5)BgI&sDnXK~xEJ-F0@iStFDC)&!$ zB>EANCWvwb@#9P!6B;Gy+9}KFuKWL$gA|&6wDMO(JAZqIHU>_01u?e`i3jK_;p7_Q z)7uq|L}q0D=QYkF#;9zvw@QEmTiYGm=xr7=JoO^CE{Kr3%1wUZBc}QLE@3h^+f(aP zoHwq$HxZyo{4q@HQnt|V=u>^^3f;oxvN+nn*&ki&?S#HQS;k~7{x_PUMN`OXSoBpO zUxg|fnl(j?ezqt!{RbYrWc#<4 zpf6A=rziEq(2{@XIL-uT)uCLgq2hG?!r*1!qYGZO6!9LJ@C>?bE%Rm;HG{mWrxPgR z-Lqe`joGE9=P}7MfF*FmsrH9zj#0CihJA!f_t~27(k{d?-1}g#YONW+qx$(5lXiyv zp_@-9K524VOENA#u!1g}K1~Qur-W5~)ic6rr$`I!Oe3Qpnu?#;4Ub)P@B$&lfre z-qA2QX6IN|%*|d9B}9d`W553M&Z2v!MX5n{02DpQmF+`8`Qh&5VMBUu z1L9Rb{Rd9_<$FdH zT@dp7hr>42b+)+PD8lUzp-j>L=;ZCk1Ig7{5G(t5y4I0E7nfk}#j9cKvV?&?X;GQP zi!v$yM~)D+u#B^1K>e<*Dg<1bCY9cBt8RHO3i9gv_w~RAAjQ*mDmn$;E75g;86fMq zo7PIu;6C1J=z9H@%wIlCco3jpTtPElPXKjm$(X3efbJji zJA=?AA(?m=l@9mLUdKN_DVhtj_x{MGZ{{QSNQjr|7x{Wt*5g6+7N1=1Ro}APu^HJO z55f!QCHTmkhQ$;neonO)nG*DVAD3Lxme(5~8eGXb4K|cG0VJ=F*~KGPuo`g zuyv}yW15cxWsiDZ%64v>PxX6*hW78LWEh5@W~FfG0dMX0D=D;s#W;uzW!IfM$Iz~- zRQ3GvAA}q~MOr{)(y(P!0luE{S=Aigk_uR7_l0g=zfB9jlRV0R^78&m2C`-J|2+m& zdx=V%dZ!Q*+8Xi|X|^u-?#o4(?C|c+IFZ1&F=TvGNOOLSxZLBlcE-}hmd36&3oLJH zE|WP)T2lE|ERmti7TP5SyXsU*R&?`;Qkz7&GfFU@A&G1nC7A!_#2FQe=k_9cVb$<2 zMeTWvs#?3k&}X-2z+f4U+)4XBN^ERN2o(ilp{ksLOcBSAf?O@DG0vYrzKn&1sT*VZ z?g1I5>h9_#A34IW&;59z;D<3*U3zx-kf+8sNg^n!N2pRn-(J<#CgS@_qHbPq)P8j6 zx~Y6nJz}P#$&#^qJT?Aly3r=*|o7^cmWP!km$cl3t2rovK>2iJyd z;3JN?SP$^L`WMiBLX0Rw4y8+X=FlafF>LbyMN5%aHF9#y{VSP$`$f3V#EHp04RF~O zR8wu* z6QU&`x-c!^)}2~7{?zYIy`ka%Fn@hH>YpfL`3o9=|82V}94e2p#Rs}uQAKi$t-p3d zFE;`4QB(T99gO{n9&VeZ!_>*CQ=b}FbJ|!c;JWhJ;?@7Y9N(oy6%lP9iZ%Q${wy1+=oo-CU4@h^0-cg|q#<{=`7lG-62xwU7| z>9%XbZ+)X;y)28(Du0YZymkiu-#qo~`u58bk)@LQq0b1-l^PR6Cdnb!5pjX)Su5$= zU6zpNXD^9r9r7wcd3;WuG!~X{q+L(1P?WA(6lUkzPxk7^u!qSwei!qMDtpQK&_a0Y zCIkDSc!NEH{rSBkCRAdFgR4Zfb6zI0+*N;!eKgBV+=q0NR0$XlvZqEWB01upt-H-5 z@pon85f>P{fUtor=a+UJ)x=46`G_fL#3C63@Ix27{L?LHyOQ||1SRkZx|(iZgxhY; zngd*AB!e6c^H}<8m!0>WZd|#%Du#SgW&jYcL@l?NT+A_m z*z^eB&~xoo2UtD+QBo9SltTRvy(QwEIUTm7U0_(LD4@?N6o-%F=yNlIU~kk`1N!W) z9c-4e3ryCN10-X%om|(c&|izd&^GmL^^`i!fGPMjLLSLc;2U0d-saow77y zS$os(9EiT_5K%)Lb2n3qctdgw?8&wZcQ8x%WcJbv6IIieR65ce=rC>9$hR%l>S1h~ zfC+>FA)NH{c4#@h{yTxREV-P;*bzEJ=rYx7e3T78c@hlAr~*v$MDIoD_eWosV4dDU z3jEmLl73#|xL!kas(^821<HbbmE!P54$ruIPY zRq9(W(+0#0@`t5Bocmcu@u7_@`ko;6k5V%-NoYx5%b^OZ$Sl&?$8M<~>wLMA@b^u- z$OJ0)vxTAq40uftBCaN>5H>*fs0^bMRhuwAEsK#CguN1Ii+r3lZjBtcC|OG|Z3=p~ zvdn88*d;_wxf|?jtiwUSED!eFZUkz-5iQfrlI|vMP!@vj9;7kyBP}eME2f{U{SU8i z-uT4{KiWY60+scCzh}`aO9ZIj;bo}+3&$~rznbRcB)FzTXuTn>g++-R=lK3OxQ@fn zX+dFQr_4LQTEz7!b4luwxje5JH3T)dKDD2YY^_W$*j&)tkp0y$TNgidGH|rEZ(?+c z#&)U%(6NgfBf-vRoYlACXSI z#CBQPyL@#Tx3^~yk1Ktl&u!AJT5~JeF1&Edt!y!?YJayM=7Y1su@u{9uOCVpml=QD z*2euX8(og6&)vY8`5WW>p#j^{+Ru@z$7;0_*+%cuI(<@U%6Sr%89N^f@1s<94^=@7UG#j z*>Vjd;9wGz%(sHBr^T-~T0$`re!=gFROKVw0Mn;BY@;vkSC^0BJg$RH;tNf!Q!+`e zA%zxi4Cn%E4N?0G+3PsZ%?IhAq{u`HV`P+u+z_b}l|0?IDRcA2av4mcl=63)0`x3AQ8 zbZE|R>oUxa3wRNN;c@{@=o)@DRK5FUTjZ}o-VG=mIfZ9e+o%`;*)(nPH6G zX-PgwX1K7$?P(v+NOxQ9b7Am0F9Ki~gf$*oYbVF@+5+LA&!hK7V}Fq?3u@4#=aP4G zl#Jr-mmdqTJOmV7Ob6^f`RMG$MQ8n#OzCsj%FbLSbl%Dy*j3u~(Qy#nYv!txA=^(A z{&HJJc(sqC6Y8{U`)v{z88SY0YsPmie8X)|MNGXca%g$-=59+;u18t4!#gtl=Zk|y zZpBG3(ukf>z?Rz6sO}FrS8=2b#l=q4};kN4spzwVC?cQX8aGgfuR+iMAzJKQQ<~bLX%qIvBrD<%3q_e2fWkcS5 zU_ZxfPPz`?H%`D@Sj~kRRP{Yk+?~28`(v^A_jT2BAk~FbRGv+#z}{{?bY4mDk)8Tb zPj5z8qyy94A@3WdU>YDzwW3w?aryOH7r)4zCp0wWjdH0`_Q3HUfw6UTOi_>O^PWQz zL@K^A^ok|+@2id5GKN*xM@ubH<|+h>8PD#G;XIbZ>v%@e?WradO9X$+mcz$ni$Mih zmePkro_5|{(H4g<$Vl7XEr%gIzj-{9Bc7LbBtXiq31`OLML==3yNlepd%f#L{$Qjv z(bv@2C~d2v{inGPXFVD-#~C}f#YKhDI7l56QtOSdOOT|ID7 zGGYLW+v!cX%HL3A88-Zpp7r<+g&_iO!e#bsJ%lamd?+9d}tpkf= zvU@ItdZuRX|KsT^1KRkWXp6hM7YkP0-Cctgha$z@o#I{yF2yMXD-?=D3nfKMpt!YI zp}4!e<@bN@eaVOH=5Frpy)$RdnVpG;Y4(%qoi^3c6|Z04ejHr8N4=!~9ih&p;Ok!0^<9gE`}?z4;V{qT;=L-c@~ToWg-V#S(wLrPDN?%}{HtIr_+_ z1;iQoixJ8^l6bqeAvhkd0Kr|N<|7QULWtKH#$X4Kv)ySjM544j*o@wx9v#y1dIW2V zR+{+svHD>PMUnWy^+apD$xBlrL1R&4nL+6ZRbF`%u?AI)|7h`YQ=^BY_?gCb_?6!h zD5W%445{IRXZYf(P@X-B`KOGBo4GkG3=1QA+W@-$5*`9T6S~bsYb`Odqq}>*qmYWG z;R8G!o{@ooudSFLAHF@>;`r4RNn~uw3PtQXhZ|+qaO3Eq(L=|ka|T_^zfB8PLzEj4 zKFiPkmW?2x=J5o+SG+gi#WnoKwtn)I zCAm;{{9d$gFMKq(*|?PIFFD@8Y%##ed3spa>>N|4iojuwFbbrf0`NYFa`e9Ksnr#s zjW>#u#uozQuVZ(6BkHy}LPht;^y9%zZ!GP334sFNi@#DB=8*tCF()k$PGbMj#3Jn_ zx2!_Xyhn6GFp5*R`}Y_-@=&c=R9YSc3<#QV>*8_6FpC|$8~?l*ykG7v<|ypiH+EC`oo$DO%-XszhR7IbkMv^-C*uk2 ze7)|MQ&VXbS9A8C{};O#7tED>L2=SQ!Oh2&NfCcK=aDG59F^We?MA+sgM2sobJGaD z*{Fe$SCcVHO`Ieem;Fe$Vh2@_J*^_1_=1GcYvlpaUSu2096$-$1vb2C#Dr|oH2S~! z+qnvH{64(h3MG||u!)(d7s0ZUX#pHR7*|my$myzL|JIMwzZ+JV_WeTwy%eloiy!Ep z?7NY3@Wd9Gx(jEhmu4Zb-Y!-%?j=sLQ*Pb!f>$Pa9 zhv|~pG;-+a2@D22=&`SV!w>%SGoXi@SCX<17JwSpvSZs#BpUW&myVZc&Rb&r?Vr}h zieAaV-|K}psNzGF4V%z8Sm465?&)ckEIJM_cA_j};)T>V+Bf&NABog;zX%v$bdZC% zvqH?(O~&6QeAdQDCuFH6WO$X}FA>@MaZ#MqipuCJ?HBQ{o7BLYKV7kShwm}gn(fUn z>elspfk~(ZAZG{K6jLSB?-w84Jb9`9He}gD)Et)n%Ea9VVGI{rk%@iE`-fbPB@oQ< zp^%{En(SY}qwmeSQ-1{4+RS``MrjSwm%5Z9!aP>7vLQi*l($+*4vVPI4EkC9<4G;< zKT#cO0Hr0VV0)Fo)&(iaPlO8?`i8PC7VJR5?RF$ zfHQzp7Jqm%N51K+qnC5;Qbu7TD)LT9F(q8p=IT;zg0cTw%&Uv<@_#6PIyg$dPQ(x{ z-8z~h4pwVjDKTUQ{Mepzz7)0-!5Z)D$Hk1?lVA&8#F0XIfZA!l+Lp(xir4_WzEQ(DPOgc+vE&6gvjit$0Qmye(|%PlRdVBCmK2uZ#KrZ$sSg#gD3`{1gbyiebzuB06|IiR7y`KU~O zsj&$@30VX#D865`!=~rVw4wJxQbkv2c2~iYA&t2%6F+dEQr7h9HfDk)hvA?jo;^g& z!&MZ;$;G%qCkTuWZnOsE4P&q{o?3hhOSXH7e!!B|U+xN{K3ETC;xZls@7k%QT5DY} ziN5%c!TSH`@s-+=MYCfeE!Mm?i*>EzTjcXimg#boqQ7PEI-aj@qwYq5i#)R05P1Gc9P#$RxY? zX<>XpweYj)c_W5A+hYrLMG?$;ow$!oVBi<*AciKW^j>z1KDRA?42^(f6g@v%CZ%=# zh2~1Q=t1jRJcFdHg6OUcz%YOp1{|PKluZf_BX!laRr1lnIJ*@=XeJ~&1O5rL)Za>w zId+Q)f4-D^j>x4QYT_62(88ISay@Put6qJcvhozG9(<0Xi|<9J0m)RNFa`)(f>eF* z*7Hn!P-jJ}!_yMlks|Ntc#!u|1)IYYUa&gVIqq}vZ&c`K_z{?rUVdjS+zP7olRAe* zcT$bJCdp4Fqb+!b)O+R*ep-&&6P$1bXqDweG|D{KG9CsL))4x? zd;2OHNxkNp2k_H55j~#{Hwox%RJB!Ow8_r-^oaJXT%&H?rO*IJASCL^8KAHJ6E|ZT z@8WoN&BDll_gjiccX*FQXq8H_OslqXy!XXJ}$UUq}FFSEwVRb#*DR8n$nv0 zNEI-Z&r|cEQ+4kp?S&ydR>F|+X|iNUDEa}Mh!2(LvLgU%gH$PQz$z01>vL>3IRl-u zC|R(xeh9ci!CgK6oZhHTeq$vnjp6Meg=4a7utMtl_jNy~`8NntMV3T(lOgDD%|K-h z?IN70#T9$Sla7gXR;UzsAK99z6{cYUmnWPA1Pj+s`#s?Sw&n#BU55UB53^@l_F6wh zMV0YVUZVGtAj>lH_aj^TG0&_}5FyJZ^T@)7wlFAVa}`ihUOMp0;#Z9$Tfb9cM5p{O z)e~8^-K=(YyXz|Kvh$aFPvF$Vm|4#4_T9?Wk#A#b_;iE0L5HfBb_mW47QE{gWqNCi zdG6!L!-*1)^1IZ*ZoD#}5$@-tYY<<#d7}QPW=4ixv$F0+zY~$cTiQx`C}lr|d^b4P z!2b>NFOU8hn%UFdp7bK3z?+=Eu647FkhNu|e`y-AUJzT+i?Sf#y&_Jnl6>SID)AVL z2&IkfFyp%Jy&Po$`v6+VlZGwW_(QcV?b#l=O3N#en4*D(EibL5JcT3&}?}~Nc zJ+y6->~}^zKWy4@;esB?UC98a-^Hk$za*0+^$pzKD{D17f8A2e-;q3}Q*}0f@fN;q zbv=hy?G>$+p(NT}n?(9A1BH{Q)L&Zxt8o*dpK+=ji3Ag-@>i05u*Eyrqx zS%?$ck&xvp9nN>w6ZPGHYq~?y5MYghD15-UY+- zp%NGYy8&}hO!CS|`YP1Pe6(O0cmPcwHgn6Uqs;66sr-Iy*;GHS#6L|j`0VTOi5Y@0 z@C@oJBdIXW0+?A^1Uz(4*s`R?yjjj9Bb;ajW=*KTi#(GmxTgxLbh?nvI`MFWLbEdn zH^azm7w=?->Fu!5`lZz8nhXq7!Z148PMlchm67z9{srGb%L38a%NbP7^7GhHt0}@I z{3V|ES-XL585-#swC3&%GYc0WSA~BTiA1X}QhrtG>&+Fk5ZIv{g~C;sX4amMdG?8= zvLf}2D%^#e>l<^(xTP%DbD4PU)dBAk;H+OFgjfD@m}Sz|a@DR3NwIko3-N8P zzYWoDLw730B8J0qD%hMuF|_P1zMqA6on@#y_%^ot&T1690fuZ`3G&y9=YV%LX~mY& z1`C74(%3^BEzEGv++5y8^IP!{S#k|S70Hw8oXQL;`~t2NS_HZ`=L~HbH)~NBm#wC+ zZcd}VSTg(wNm^`^{f_1Weer!}$`>7;>Sr1EVm8um%B1(nh_UXy1DSx~r5IEa-d;Gv zgvn-9fb-X|2ma-6UL!<6c2u z9*p*mN@;a#-v^u0{cw>duivyvi8#;2+R3bJXmdlcgXvq3Wij2pA{{;E+l*a?&eA1f zdf~4g>`|AY2CrTgUJu@-Qz)PME^oRmzkv*sR;|t`(h**#nidfl=`!lhj90&nV@kBw zcufVO@a=g4JXp&{;s*k0xxeP1pm(e-;BIfhPD(qDwV)55xS&jHp|RI&lPR=pQ%bas z8v3hi#aV+Brz*pytvL$STcF{Z9c&0-omk4$Jm%_qZ;vDJceT`Cn~xTeOFoaS{>_h2 zn!+x|QtLh;Uah!isGwvXv8f6vZZy1#ql5 ztk!ZB+_`mAY|h|X=)7iA^s=eye09`0(|G5R6e5Ye+8*PRkN|ixJZ~xc3(76pykze> z(3Y=-f|r@GOe+?pb0C%h0rSnV9Tmi=#M4$lOr{6!2V6 z=778cCb|(R4@H^oSz@K0w&N5qmU-=eHCP2s*Im+@<)hGUn!hzZ< zRfi@D*27xgo+JSVEuNWfh+$yq-xKiJL>>~YVG3w{;u9U#%ox0Rhul@t^tK8#d>fkT zPr$qoXxIGCaX#?-UAU>#>E^AP5GGCUPmsl_`r#xuMET1aYI49ZcLzG;Fh0MZ25)CS z$iiMTgf@>?RHs6a%` zhLzTs-?vqq_Vv1$(!2aELF`97Z0m{@wrC$-PN~DYUeUOCO&Jda(FmwfD^_+Uhwfb3 zdqx{NepTYrT#>2*Z0wJ|p4TBW{K?C>UTvKY!<-!}^lkFXYB_0hb^%E>fO%J^$Vj6h zxncEJw^xOp^((Xxi;BKdxjOd${)PO`G8X#e{})uY9p7L2MQj?ngvRxFxEAo)(D%rr zwrD(GYUsfwvfEi7Y1y;3$Doa7Bn-)9n?fIRdxdDS=8Y}?y7N%7%FMT*Im0ylf@Vtf zz!XZ$2pDp!wO24>Q8|Vpf5uh03CRl8%{zjXYjdzICwYhD_xctqz!{}+k*kv2moM&i zzGk|oCI65SBURBkdzIEQnFJRpuYE%T^m;^EVOgheSk8b9tGZ?E9|u?Ce#>_ja84WW z#?N4VM05Bc0I~OZJQShh{(5|Z;zNe5#~cQ;Tq=&&nPT)%(|=)JR&SA-}R{V27Kvt{=CX(P>szp-Hh7p^0XTC0|{fb z-yy;yP{A{=`d!OqJ+zp?zdQM}?rok~f*9Dhea7T-)mco%LzUswTL*P(W)pdX`^-b% zRyKoc#utUlM=4t-NjuS`)v@oF;x6E0qm(Z-;+zE@e$C!Xxy>@s2)1VYEIIJ1wY;$Y z)%NJ^?z=Hy@9MiXV6SPC^7BiE-&s*p#mc~L`HW##h_xS-I2@(vrD461WA z6F336VwapB5|Zd*1QxR!)rHZ0cd$!4v+|#B-wzVjE-Pn9ahRVgY;CI5FG4)V-LIM5 zzjvw%Bdl(VX)Gn4)V$Q5z%TaDCaXRraVT_zrZ{+eF2gnV>~nqJ5;H;4mzhLA4l95U z&-OFFY*8L2%>Gi%Wjs~aIb2*-NWG&k$a(q3)q>uT*mbTKbZEkP^ZIku!O!OI)jG#6 zEYY>vJu}6=@n0!|12cVJ=rWgo{Nlwc{eS}a3OxK6b%>K;$GFXgxp~WGc6S`)P{Lo` z&p)qwIoY+D3;je2fQhU*xn_}oCCBUuW-vikJ1lPnYq8iRN5H7am??j1QtH7O{Jlcl z7~8tJzLuSxlw z+p|=}_BqV1=n~hQ+q{a_8B!^; z7_LYd52e65ih~5+r)Vb{0k;$HjJz|ZDSf^vK7`L|j3!5FDK&prQcM8-V=XiF->wWDI z)X&e?{A+GQ5rm1#f1;R(&Ud0|3j=y2Isq?i6J`0gQ|m_?#TZv&xD~wl`SloE>Kqf> z-)+!Y0kimHl7F`CdgxGpFhjM|99KU^)l2k= zhu3i^2+81DMeQC?$4}*V!T%5bdAyD#xL+NAyBYB_IRbcYaJl$)TY^kSE@Yh;+;C1(3t?XFzY zpOa(H5v(uNzSe$k0PGlYH5;l*WSfr=Ro*YQM{WbQ*~rc%yrr(WEtA`1OaUmA3DZk$ z=kq)Z%D%Xi%JZW7A4{5Ek%D^=Qdl{vF(I2gQ%Yq*8n;ic&2%PYZQxkX=!bkVR&{%B zP~lfex(W#Ri{|Gq(l6}ak{7x3P!RzuLs+De>i+h1u7BPRPuVf8Y6w9d_zDBXEJ7(N z==cz+$GJ{k_^Y^^uf=^kQ|;kjb}w|Q@)9A9%x?#q<&B`um$J%k8Pq+fI+BPzR0Yvm zk=C!*shEugmv}nCaB@Q`(1^$Vk4Bnojcjj-?Q6b;pU$cci?+c3ymC8@NZ*fyom7w+ zfYnct)AhG=DTzE1p**T4IS&c**KL3SbeJekgnlwgcsrDAi=_~NL7C%{RJ|IpI)nCT zt5Jr$R#X*`{)+96guo(d?ZKLo?dFqwD_ayV_RMwR(3;*{(6yBoB8jDUnyKXv*I6df z@0GK+4uaPzQ?jlxN`xs-{G7!zuL4x72(o-L9FgscY_#I;i8czA5a7%5Bk zx;QpY3hBctKsZ&Yp#)4~+qcUz-RB)_OOp&L1!rxenn8Bh_j8?QfTRhRy~XyU5pc>= zZbhJs`k++lphTQ?mwGsIS0Kmfn#lq2*Z4{w8W`}P(biNkyHMl{M;BhgxIQslVB7M= zAAeoznk*B1GjM?>XDj%9^UtF}EeZ~0P!F)2^Hnu7vVKKgF~Yk} zwxo%?-6CKFhN2(68aoF%Q7J7PMO6pMG-T4ndp4i;L3q{Hr1!8oyBN}1A;p@nO%!>!O6hDsF}MAo6&Or8qHd01$FnX*KzJH7?XB~Rn;^Jh0> zVt27QogLncGkpH79;71MrrYvK6i19AU8B=-baRna68QDDIN|v=C`}O!KZfe^8Ac4; zAVUM;B3~OIE<^&oJd=@Xiq}+g>oEcQ_aOz@~&7q9vvAcSr+?| z)O^D&)TM}4u9LvF=Db7ojQ+JrKs3z}JMB8=5v(K1Md`K?yF_NV(#h&ZEWm|u2iA;Q zOS*w;!n-MQk|m$8=tTS*Ffj2&^UlkTB*PlF*?;Pm?X zAfRl7gE|G;(^XmkdVN@mDS=XD(dt=BBHFY$b};VOw@#Ri`DH3sT^ql!BHknM-Hi`C+fMA2Ma@ z@TLfGa1S($PQKbHd-vou=1vn|Z2cJ>h|pGKY!6oXcmB%S^v%mMpEqzp-z6jMN?Djs zy9n5jLi{(~%DaWisP*K3TP8g4qq0FBmzg@&O%+gz~ZQn>y2u4i4bkJvfx_RjS zW9RT>na1FZV@5D(O%=vNCI-~XH>#jf@L$>eXXGTmW(w5HuqI0*;<+a#Y1wScy7qmX zdF@R`9%gyK(RzYi3J?l<;hc+Y`z=ioJRzUZRuE177UyLhG$xn^p%lO=9saL`k;m~Tll@|_UYdla@I1e~BCnjO% z=6CYN>tQ3F-``+e8t3@nb~93G*}vxI`jaX776kYB0=>G~`N_j3q62qGC%+`Zy(s2l zoX`bu&CjYyWy?1$^odHW%MhfmO`Gc1gkP2FS?#o3WAia)$j=~|JjnWDQeYYYNK=nx&c_?~a`dk5lMnD5s$2?-KfD2wTKrS+7+uDm3F1#D`4WHtSlALxr zmVL^+tus3$^ioub!wTIX5P*$}GeWCqfEC}F{+-lnvLT`*e0^1(l5Pev?@;ZbS_GQQ z97R1Bv2}@cBE|lV5k(tem@v8n5R(aBN7ra`sdCRJPWAH>E(75rk_Hu+%Z)kFsoLB! z3Dq>2l}Pf(XlG%1!`{xKg@NX&JKb6{+U%+2V|AU8aKa#=1N985&al2aP3r^o!^iar zDEH?MM1}^Cq2tw~HFZ&$;Xx_}qj>pOH#vYcvnyMQuiIj81G@kb@-vwhIMp-0!Z%qO zPWa3~xJ*g1 z_*_FNBrpf)>~ekutdwi*VR&v{a-1Yjd{qMIyiUg8%Vqu~7a{ffE^08z!CR9}4^ z0kzftN526h3(Ghh@lE0=7z%Yr_Ji(QSODB=3po`0vev-a@>FagE!1&fv-cmIwS_du zKA$Y9Fgw2~l%RQS#Pq+BF}|$fNDJJ(olDbndkfUX{SOXS6tFx`gqOkD#mn^T|6IZ_ zXr%`tf)9)#`g}oOpv28HPPW~9+U6Ycb+~pzW(oS^c6X6VNbc z7rn+`nIo8DF+HX*)_3mrfx=-ojc;^N@a$&>C6YVjg68lIzJFT%p0txPC=k?)e3!8^ z+*n-mqVxoN?C#*Jlpv|Rx|2SVe?xJlls=19yAhJ4RMIc}RHB*7Mw`!QL09u0>a*WL zf4#8uY_FNmPO$p`;>+dk_xD{3ASy_Jde}HpMQ$>mAJ*)MBOXA$}_f0srFbcLa zp=18eT5eE0F(0DZ`=$<8dShyg+|YM(cSI~Nxyr3P2#GRoyCF$LQ?F#QZhAAJ?(WI^ z{EI!vH`uA28K_5OWuXINzw)RASwLTQ1O=pHPa>A}lxvcwibr=cL2dK;!DH~x<8HETFC%rFB$?EyX^S^MX|7fg1 zO<|JHIpHyOfMOYu620E_CUB*D*|;SQH%IwA)bTEuyMl`=LJs2XN?s71K)e&K;d?e^pqY8*MoZ31ss*6}J+uQ~5{w6in?B z&_LOVujmH5&S#`aP0=bS>6^mwJAZU0Yu$? z*%Jo@0f$(wR;Ps6Ij-w^PaGh;W+&;{rr(J2bc5<)s&sRoj8@^wCmEJgKS=H~h3{`u z0WK|&N!&ULWgg3~2@V63;iUWm>UgtK!A|+hzt{I;W>~m${K*PT75$(S{|jf)08fb{!MP0z48U_*p@<{CGYSH++bZ>3)a9uuA2q?S`sF>47IU z|EG4<;`B>rf^mXCTI{}P+?nY>VfsbbE4Ou5Gt*XH>$KxpM4pC3B_c>{ouJOy$pJndvx zQxZwo^y(AVow)xE-mDqq1aTnP5+6COslJHuufr8%M8sM#2#ze`l${Xa#?2 zvup0ydJiI{q`CYB;WG@Oc^9in1-5O5D61YWs8&Y9#4QyAl{@r`6Zl)OgK`oYLc;Wo zyZV;1|Ho*GN;g_PB4QUa%BOwna=SRqabPTu&ORdbg13l)&hXZ+E|0bieO2#JBmC0#fGd88Y z)RYRvm$xyhr0FXlY7N{ys~Nse{=K;w!8Kl8Lo2|YZrdbW^@Y7Rx4Ndp@xjBsYrUp# zKE8W|>z;2`-K!@O#A>sDHz)!?ex=TE4`PaTPe7lmaU(IUlovE!3ikR7dZi~-@C{B} z*Y}FL2pFLYAkpGLDD<&Pny`L1H}QcE7Os@Aco0DY<)UzFdjHa_6W8( z^zi2?;cnU+PHroW5bO={1P8{fXx-ac8%j2`@#^@VW>&y1;uc$S3YdOe(CFX&8P5;< zsuJ|{d!7;446E)0ifgDb0n&WsFhBhhK=@&_{Y^_J zHtwdh(#o<3dGGtq`co1Trlo7#2sgC^R1ka35NgfeC|i#HWD&bE&_Mp!V7hXzLscH* zu_y1^&4tz4B%{jd?^;I>=+pYlZTnEcT0`sWB~j0rf9CS~P4A2arzto#s0DBnLzB%Y z`o$eRE03Q=CDYT`;B1}d3%56!P1^5ZdYOWhHL#$o*ZQtFU9P?k2ijUQXW)!uN5M5f z&k;=cEfJ>v49!u?j`buHejglsXd`p{^OUyNjSyRFdNM`KV$}Wnn#7j6CtEgbU?5Gf zN1>p4osLxCVfR;6j>{-q)z4~&NnFlIjb)M<>LoV395uh)ti^W~6Wee)^KyY95J#*)SED$;tJctWjNP3#JL#hWK2i)OdiZa?~>fOAT604Cx*Y)da( z!!17t@J+3H_v_Xl>hQv?8gFB74cI3BLc`9XYQ9<{*OLs#zO-in`439q711HBv zjD*zXe^f{6j3Jv6lPXj4!<*IF0eC-f;qCKoHgc)C@3G+5yGs;M4#12??J|@9O={M! zTB|Gs_NcrokwPAF3ahTB&D1S=P!Fj-$MQe(#vwa`N&+{j?6QN78gG2TG z%fhYxHZ>-(N1>A;c)GNH&+W^HkB7d9E|F`qXsP`fD!c<+;K1=e7u4r&8a_nnzPd}G zBVGsUiAE2)>o1-%fVhiB5TloWP0YtQg$T8S^DM~wqGnTaOnUj(ZSV)$6bKGq!n2my zL%l+ClOq6_Y9B9G{(bvB#oH!tr_3(T-**pqZ+Dgk-87RKXk-S0&HO{~GoaK`p22RGV|14V?jH<84sI`$4K#0~?y~)uRB{ z0!tePJ;2t6b{KiNJ7dlelCO5iT1Kp)CR~g0+2mj8Xoh}tR_~63K8wQU+zLx@8~70O z%*+L7<+o_|3A#WTAmt(Y;x=-9S3F;`5^>OXtq||8@_C)Xx|c!{3JOsTZCJRq*A~>k z6Ot=;iV2K$ymn&tIq8C7Tf?B~dTpI+*~_1_S76v}o5N=$?7L-U9`;dEFH-d6HoCsw zvHM~qmS4!1PpzQF$HzG!8u83r=S=j^d!P@bxMg1a!39DASAY z59K<+vRzGS3_sfGz(M`&loFN8QQ?mRR>Yo5Is46lk+q6RuMd_z{o6oARLK)t`z{)m zaQonAn?tEBQ?4Y~!i(QU7?y{-+v`r;n!0gJ=`i*rs>dJSm0m|QBe1h#17`k|8ji=C z641QEzJM68Q@e$#gAbHpf zDf^K)m-!C6OhDfS+UB^4AT^DiO6geZifWYf3MNF*nXnpFbnHzvt(wKb29r%LT1uL` zJ$O74);g=M&;DzE+rqjTiIUSWEgE`Lpw1#Ljt(DyB<-^Vyca>F}1{}pZP9WvXc}L1Yz>-9?x#?wV&6wxfOo1SVzS;?fVeS0X zX!XYm*PiSe^(v*%p6MC1*jnS0$PA4T^gPelTp1vt1vCM!kBA-S*XI+wEWDcgg_ZI9 zj^5uCM_|`fxfKft#%U^6)UU7%WXN!0# zr76x~iiRY`HnPR#1&Iew*6geuHR+{`sG&{_21j@kHjx7 zpJWlSmMwCQL(Wci^hDr!#Or5JV?hQg3of4=T{PIb1pSXG+9+DS^lp1j@iKA_XY29f z?L$r()d%LaMkG+Dp6*`zvUMkyxNUAefsUf!5gQwg>|~OT#8=jES8K2Gq_)`uLEW?R zgoVtb*rStE=@VY8BD)1U|3Z(ONM}Kn9vehjOlUdRA`g2Dygs62`h<2Bb5UydZ5~ zYytz6FH&05v1-q##?i!YF(7kW!;Ps(ZvbUJDA|&#Xv|o>8pptS|K$L(V+1U?nnQlGN4I?h#ezQ{vns^eM+R0NpKa^l-& z&s?)?-a>#&HLpV+wUv`byT&S@2bOF}X0WKGt|V29QO(UVKvIFkk{5a1p!}xr-veD( z0$MKK)k0s7OUZl=Jzq_TrFFyp(hI?Yqp6fEK}71Og_FBw6zqf<{H0R{Xb}c}-^v@wIFD2; z_5Uq5=eS_%1-;3z;0ck$?>yZo8&UI$)!fceqyi|ox0r2gCxAQ#zQnf%#6&Nhz=H67 zzT++4Ge(~KLrQ=_&s@F_jRCrOnS*ZQ*^k6FJ~~`}l14~bfosAtI%STUWp`cynN~Xp zWwVX6jvK_!nVAMzC)OdbR~nI>rPT+&%xJ@yT8x*ZPs22L4LLzm}Ag z4f&nY`Up2(a`I4rv;$0N%+*Sc@aQQ*c3fxGf$U~6<_REhIIZsJEH5R_dD?Mx2SXhL zhR>tLuh&h7l0OP*#rxn=T9#A4nM{4Rrd&0+t=1fPP3b_L$-QGwS1yEkYnEd-nRy*F z&^&W0m`d69DMOsXhTFlmW9=Il?dPv<#k`#z?f75|k*dTAl4gRFj+$jRg^;fI%$#~7 zG`fE6LD#c3BHBXvf~x+LVUeZ}i+BZ668iJlLBkX9@G#@wb*goU?7Je4gU-dQURb|N zlq%3?x7mM5OW_7$2yl&71VIXH%Ra{Uo70?pmJ?!mjIalg(}5B(*Ng9HYJ4ZwwrfBW z!9+!#_QV`muGxq-{u^2WSbL-s*7T&((nCe}ks(Wd>-md%Lvd8PpL%eD;|9~vtU|IB zR1!T(%PUq@O+GIE)+zm%COy?k=pxs9!SjyWdY)Y*xJXs#8xYyF2Zo8e6WGzWH;#E~ zm~cv$5A-kg?ifAYcZiSS$a?CAXycI9kLKht;}uuOx?tiV#m-8d!<;s|T*B2$e)f5m ze)^piBVxyOXQU%}c$bF29a~^?egINlQ;T1M2QmQ9viwEHf#kQ09`|#WAK&GG*hpSq z>9P0Ujv!EodQZO(CpPNyb)YJ#sa|&l)k6)hA}f0SLozGo$BusbUQ|1z|It3Z>pamN zE(4te05iPz7bi@)f3E77J?8M5C%GF?D9fn!!w44Z`%Wp7UjNMMI`Hidd?IyqmU0pH zSCCvPHwI8EqMkTh{A4#oydrkd1vCtGF2)8C1C<*AjMAw)cgeWf8Zco4HHIiKljV;j zZ`Baj`lgkwc4y5C-Yz3i5_KdyQDJMV$W46nc&s;+Owba7txm=cM->w-E#m-2%I$u+ z8uREBIvmUcv~&S-F5Oheg?+lL)0eRSAU`KjpKWj3s3#WQ27-mL{*xCp4NaSqZ$J)p z2Q-+XD8@^R-7&|e=q2nV3n)vJ%C`Y&*u3zBC;uN_rE zVX0#d7syZ=o^J0N+9CVN@kpg~`96`KH-O04?(ih1AJfsObU1L&>@c>D!^p8-V44;p ztB^8UedDth{`pGCsiVp1agWCN;Bxih$qS=Y9^INDng@@*!3H9*7N(l zw;Z~sT-`yW+61}*}jZmLX;tatPT_UM|8Z2h+_NOIj8y_ zhj3F+2Qi};VIrT$%!5=|2F&Q%yEvSg(68@LFrSY&OkLOF`%9RE-Tuk)3r}sloVjzX zYE@Yv{{^M}gQvGTQ{2}KT4qU%4_?YqWgV}XnTGS7$U-=DEYa9w%oI{x()bD~T^f$*VhI=B^4C42k+b1t?$l)!?5kG>AW0JUb4eF|Ex2Z&4@5WYlF5K1OVI}@SS{~u zB4+DC-YhmG#I*0wx?=kIHk#d(QL%Y>G4vpO;6n=P{aLdeIZOOQCKYK*ipnvF*uw7< zZ`7Fx+Y#wHiNbiop63+X-0DIN(XF{mWqU1tJwg^&nFAR+pN-1Lvf$4SNVj(~qM_+p z3xQWWzx}&Iea>)n*kp0aOiKh6Ggj2ym{bf@t|C89FUd?J>c1t^sU*?Yc zS~C!uj9r@t`Xt8twz2>-IU8E#Hse~0s9kh$+{lmdGCX5G)5>E1l4i6_ER*+ZM?Q9m zy}aoMJ4meNi1ln4-H)w5wUi|PQ61N@T|S7hR0V@agWN6r#E@j1Y_E2bvAie6}Ia~IRXFWr8N5UOD1Q4_bD-*pPQ{PiTtBM~{7XlD87w3wb zLm27&ync}S*+Rcy-blvwtE)Y8x1O&%E3>CVxD=uI?JRWV$`r$t@2Z(8r?Uobc52>w z$*V{gsBru^n~AvJ65rhPFO4w1a}jMm`7jhr<-c8tgDse}P(niYc;m1E_F6%3_eHS$tWtFX?-+NtYJTjsB>2Q}a5o_IIt54DCae zo$=Ez6;IOYLh73Sn}%gO$2&o{Ai&+Ty&sFJl#1^`TBFwywQI4y*g@`9jNvy9>=eV> z<1Gn!`(l$?=TeQcZ?LtTjJ4ZkuyaI<1z5k!uyr3)7rv}PBMJ0B9B=H44!*q`X?B8C zl^!?y-TdCqAV)k^7}>zT|5)Y4Jn-hiK=5T+*stcgr`g1_-w67#C#-NHH{9VxSq#W*8Xr7 zfbu*reHK?A6m@gb-6Z=W{A|g5*R^k;wA++)lURo~cqm`9LFB@*B;*2NQxu->L2cts zNFFL3i5A>9(-EI*{N&?DAkLxj72{y5ptRzjdVsM}kH;ihW+gVpC^RbZt^gXPS_1&g@;3&oT)w@Fw96geS?8@O};)??26vxY106#I5FN z^WzUNP|ry>%Kaw7nWO4h$cR5*p z3Vwg1v2`x~2j$c)3CtV~%}}TLH=C|b!@f7~%oL2vZSMCt;A2@n7yI$`Xa;0CY5zrE zgc>dj^Oi)wMomcWg|2dmm_DVeeYs!#YtyR;uVI{1Vsi7vlRu;ycFw<2w>}}aRLStQ z%6$kjN=T`Cgcsbu_|-sEz5L0+hcT$JYc1IK5^lPw=hD;|p$4X+!Ncp}H-`PRM+!)* z5f0i7zjmD%P!8BR7!~>=9Vb({MBAH=M`umU!fnyShIKA)nc2EV>x!pSb55;*C1Xc6 zf6}!)+fC)5*+jSb;yArV(iGH38wMb`il2vyz>Q z$`?X?-$=}9KO=PXq<@lWcsk5gJVk!hu?Px9_|W}^(01?0GrLTw6Gy_X;sYZmYW67Y zRDGYY-`_)!UAJBJa80B#m7dBU=gaZ zE)X9#QPiW-86we6L~{4V+?0l&g;BqO8gED@O&B(#?G{b%*Yvi(pFjm)GM5MfH8a!Z z90diUc(c6x89_+wMqB#-VxYQil_(3Jjc7WiOZj4;oQUONpCgR+x{b?{E4s2 zw`9Ga@h2fu7iOP>oBTe8QKZ!2#3SB3EbVYdZkow5NRJa^#0srYyhMh*b3vi_f=Byd z$b3gvkh})fb~5lqx@BY-xt?C$F1`M2DDD>Ai+gb? zPH~3>EA9@(9f}iN3WXxYt;LHL__p7ly|T&X%I;>*%stPUGn3L0R!JmmOpx{qLFEAP z*z5u#kd*jdV!rNATEQJF{R|v*q%5iD&N2uE+(Y>eQt9VwkR(oY&V_|xe~H2^AUh6w zl~_5Sz@@7|n#f}a+Z3`oADaItDPIk5Xmj83k#TN9FxTKZfpI26$9aSEh>dO)nre@<{U`($xEC|UU; zZjk(zKk0-F7|tNbCEmElWttL`@+6oNDe}hs)ynq5|I!H85DyScUfj{McmUkvu9TB9 zV|Jr+xZ+}&$B+9rkz$CTnt4IlY4_`%#4%)9)ptL<-Z2%F=GIxkX%+97{#nAS#3st{ z37GWmXab?&dc#5U%qak4IWkEt>k^U@)}v3}CI#F9Z?vK&gcfGTPON1H9W=%BFqU>R z>8Oz55t3HtZ$d>f*N{~nS>6mqu2;H4t6;+C7?fwEmLBrqz~f+*t1G6m^`% zq?&n+a02j(v$T`!Kh%Q_8!4!0gvP-*WL@0ZFc=MO{>;weh+a^)(Ufa_VJh^vu1taj zd1`N)(1QrxqhAN&u}bb@d;CcrU35viVfKSDu7<6$X_D!F#&v*m>m{rZ zLGsoprz{N;=r93a*7?*Jj9plbsUF}T50lYzL~Auc1ttCrJ-WB5{{dV~j^wt%TIKCD zI{#@H%flJy*!=>sA)w1#h;QmhTmzrX@^#FZXK%XW=aP?UaO|ht1IaVS8z{B-)n#)- z&AfRWxW8_=N3No+NC#T9hOPAm40h$2GybWTo#tK1jT@c5Q-%#iL0x6B-SiSyi1sv^ zoJsR?OubT%!pdlx|Dak%a9Ymme1*#av>7Ac18M3RFP#2l%O9o9K?WH=1;sc@jl@5s zyB1Nx!So?g%P$ZDC5a~6a>>tgtEgAMW_Dx6?cz)GQ1WG^mybiSasQ^h?W^Zy0~1 z3tN)BU^7mpEH|j3>kn615{<^B4JdnaPV`F2-Vb{}(>vKnCUD4J=z?ep9qgoRvX*Hb zWg6H(?FMg+3aeGSM8KpmRK_|6?Y$pB_e|92{%y$C{P%9@Y^tzqW* z^<{zOv?WO%cOCN=6p9~lDyJqzzy`FoMSfK!Sfcg^Oq$2H5t66X-fzHNz1T!3@B3NJ zPBe@D2&1I$M1n}Z#QEAqf}+2~-Jwo+$8d%zn@)w*sBq2Yq*&jR{s7t;mAHqm66%unj#QE^JGYV;(pIk9y9kbdkj_X+Q8M4Bj#V& zHupXlR3TB8VEUei;D7bg{kY*j<33(Xj4`T<*v!zlnwtuOv#bmcn!PakI|gay`lXXF zdZ7}=w~6@vysYbJ*!IXJ_JoehkUeFEjg&g#ayYdG^+iRi}*>O)4$ymV*OW=?2k+aDu{jhKiN~M2TRG6&r-s_Q#Swe znJ3f$ABUnhi2Lu>QB*^j)vi>f5llh^@D(((+U`guc>cIN!6-5nJ**#P-AFQug~#4R~u7 z>M}Hr&;MKf55Q7<09NzY5rnZI`um|KsIa#v*>Q(?M|PEnkp7Rf;>AGNB^*=BmZmEF zsz{#l(o*u(RH`0T>dpOyS>v zM~(XbfLAEt6)C+v#zCF2HHnD=YqG1Sir7uIJMvAnQWXZazOlZ)Tc2ulJ6 z0VKP3Hs40DTa<5QL%ZJklCc@maUhqvXt@x^gqAWD!A$8h6 zcyvJ1HLz%h4P`l=E#yUp9%ZO}A-~8f_d{o@McLyXkxe_pefU*KSewCnom4cKq`BrF zLi9trtbERv$sl6a9&Teehm~XF5w#x2H58U~i&;GMpX52!fJY`2Hjsfhoqa7#a2 zAaG@Oqe%FyAmNk^P4ACqwp~xpYx#2WSAM3<^jO13Rgq$-`tR=Cf6_Tx6f0$kS2UgN zDP4@Rz_)$)JpR^p_ft(y(1eOvsr$US{QPCYhHev5Zp=cnOsDV3Clg$ZyoamFjBzY? zQHwT7i~8c=%!a*4BXS;DEr6Wn#fmdorna|;@<*bOw?vRu1R2zRPmcK#Jbhw6)-C~E z4mprl#b&j_-h+fE zkQ6V={&5Ma8rz1?1FIp1=(CnlD)D4Rl3r_WxB3wfhtX!Est8i=a6FSmI0K4Asx{f$ z>4c_S+Gj`F|*!!QOagfR_np4>g_;Ih_?iK!dF>8VN*c6EK*UfV&g59C19UDpPRL4T$WY{k zG3XpKZ=l^RLlk|&{(Xkmy{MZu%S@jKx4+^oeUOHrk#>ft5lr@Gk9H0ay?7e;YNGKO zpUI*VfUDcXm%VycNimipODx41(3wH6eG;rLoFdN15`VbJ3y8H2|Ih85ig!v#>(a;n z*YHHhVN~y5WW>G4e&4s*RL9zr(Y97|tw8u@bKrt~R~QVxS3v5wo|NMIH>mn+rCp35 z{5foz1m!FWonY4;JMb?DSUKf|KZ{hQ^$(3n**|)DJu)!5bW2rraz3cz*~$f9DS85S zq4BO{k(LAnsGRgF?L|_k zi8cOazHKaZAcVLWdHNU$wh{Z@iy(^fy%&y@>y_+lswkYO??*b~bn!Qrb|rQe_`(m9 zzT;(Yk7tE%41$!JamB@?uz8gE`Y_(PzVvtCck^5EtRmv}JE)%3g48Nl3VbURL)?sZ=Q_CF?n<4k;v3PV)6qXU{l?139TqDM6Plq{2wqIaNY`R3Fs{Eh$(v zl2dKfKKUXG$J4jN=Fi~%iE!e!;tUgmvCUo$6NjWWB8Z^HzbM7FO9?nL7k+dHlUQmY zg3X@TsbsIbL%R$Y1vy93-;dfY$E~=^ZPI)muQP~(h^i*y)B~u*{A-aI6(V}hUIlPm z=^)WyZtVYL_cGrM@RH&TBKTuKwydTxu_hvh_BiZ_51^O^=hox?D0R6ex7@Y z=B^U{3KIESGg`WU4T=IV^5j2!AA@>FQ!yIR!C(>EH8@av!p9U>F3rw^h9MQI z&PHk-B~!(u5Ll}$`{RF0RZf5f1l%oM6H+rr;ldRPfn)HmG_24j`V?xUSpcdw2dd)9 zkHbC*sRi6B)e5O~`HI(|5PHI>gyU~frx+I5s+{N733{o&nmyefWI<$=dl z8CC#4@P2sQ*mfa@ht&nKj_p^t7=pYckhBvKhRfsmpT+Us2)+eRC0LNclTajD%4WCu zZx{v5sZ=L7q9LMSHcZHG+9A4;qOz8o50~c?eqQXiG$f^4OKzcTSQLr4F^>QC2Lr6? z>DB6S(;|EGZKLeRC9TiS5RsZq`x5e2zN{U1O~cs}&F%lz;(I?aRsghKQTKIBQxYCF zlX~;LA}hY*jnQOK~?AcI<^*dr89+nFI7!~ z^}El!MgeGhGs$Dk1@3ZynHTzyI|SFcd)jqpaOlan6^98$FnbrdQ4ZNz)48Nh4Jy=z zX!7W3uXadiT1QBnAb?U==p3JOPi<|~wjyC@npKi@cIUSXi1U=1hF`95)exZRV?44# zQvOQ3<7>VjIOg~g@>kW(P2@3NFHA2;8voJ5n|zH><&dSKL1r$-htyhc zAd}D4{kN1jDir{+PXhtgAU=%3%uwK2^^i>G5VZN~>(0iiTO-5t>5qse^)Z}3c1yYJ z6}@fb@2ziIt*vYEu@MCt?Q)tADl4d5||KpjCo{^1a#1Bbp{>B@VJ zA;!C}_^rQ?N_>kKy670WQ4?Og%qmgDHc`yw<%&-7i0mb>1#FOWqhj(2iQ;AoVT^ua zv4Wex8Q@sd%l;Qti2?>2jPoHiGc#sCQU9`Y6DU^ptli=8Y@t>GE1rcjVK5&Dl0`1g=Ipn(3~rhQLnkPe2_qtFy@?CI;Gid899?`-1KdE~{Exj=jc&`kbOdQVj}oqg z6BAtBX7kQ`g6#jKq^%DZ({XXxcL>;9&IUZEq7T1dM` zn&qr=d0Q)qqJS?EXlyA`Z00;-^);)(SfFrW zgaD9xpqImpD1GK8lxY|iO74mcp)8U@Z?0}o{{v{&6j9?i(KTxt4j?>U#T%9bfpMH| z(EF=UcOWul1ksKCjCUj@cpLyT z<%D1f#22cna8fm^sI~E59brvnxpm68+vnWQ+)e)t^QSxCw|}0g zRvNqELG_3o&hWv?W`=;k{2lEURerPHyb{Hln=@EVYcn{tZsH?N6Xh{byKr3(5`Sz= zaPZX#6{PnJR1pR!87l^&TY)lC)R+Vq}O@bg@nq};I zmnZL_MFu0HA?vi73bi{fy;!nAQe~XtxOH$)Pq{aMTnlw21no*OX;K}V70am_UwS0K z$w;!+b57_q7B^!ZCDGv5r2cxeOagfSPhID{CePckMsR z@A0IzB=i_VX!p}0}VUr$8nFnG5TEl*UxE<3$g7f?jW_qzfqMTVa!1 zsoYeKL+P*a_rz}BQ?pBn$0o~t62lKPNo|tFknv=U_>_5Nr;D+0aEQNxO%jK`G0x?X z^xcu%^evo5xuyp)#i1%#fRfkkJ}%_ooAR_Pl&7(X6C56M=wOVyA+tUehu^#*tHB-D ztJcKo0|5N^(+bN$iT#h;NJlB+bO#>jgyYR_$`yiyNA~h(ZI6|ow~JqX16>QVDRNS# zTuAV!WB!AlL<(Q)~g3so_5<#;h%{iG+Td6E9e-lg>hw(9#e_EKTiSlWhh3@WsI>nz#bfiBi6uW4(Q}vgzX;{aJ{aGM zm{a)0?lh{HFU=TY0r!xRZxVjaJC}oVD8_#NLlNU#k49H5uCtDy{Kvbi;T!|8_G%(DU-q$6DGj9 zO?WHkudxKh8L_o@)^8tk*ma34rx7FBqk`C0w#$-;9LO;a0rQTwOiTW_?OLY`Mu>S= z*d+1@+7$OjJROb~LI~p8Y@5-)L{MXxL(}B^E7f+>DGz&8egvAarOrItkLkoopI3Zf z3qozElUl`3FIU(G9+%#aM65%nJaajR(-&(fkZ$JEV=ceZC#&;Kt461bE*!9+es2sf zHrPk;`JZ^>-}%5`(%Tlc+{5Tk-W)YVv){rD>`ZYEXU>^DrK;;{IYikLvQniysJ`Pz z{^v6pEo~CsyHp!pC+s;m?>{3SzG+nr_$9Y|DJ=gT5Nx#4g52%=XPeF6eXd^aq0Kh% z|B|Hn1Kz;+72=N$4Xza9nJrPX{X(81cbaje5_Uzw?y(ZLu0`6%#^g)905NX*PZlwj z6reWaYOaU-^RI=R@KClvqMw#4nbDULVYX@rbq^nihr$@fa&VNIhM>~Jf9TwA-lHVp z*N`v@3+|=bE$EQ4z|e;v_O2ASEuV6+!(c?RRP39S)vXv{y)uy=%7HF2Clf0(YM&^v zTHpE;p-YdGJh&4BcN)R5*dEdAw+K*65%HV5A2$BBHvPVUp#~ujZ~Q` zQJ~9?nhtmA5>beb>_d$-NhqPpk=R?m_feMXBxlOXoGX&(9A7TMXiD`FOcW=-{_6-g zR34*XN4dRWNe}lDwH{>HK+aEN8loHq(M|jfRWX_LpgCF6LU*y)1bn@{IJ7cF3`GS) zJ^KNTQ~E(ge4J8qO3|&%Z`E;&R+YjF$iE2347&nTj6*8i7erIork$c=sC8x>I5KHh zbBQhFsYdw3dB2Ey1cu}{q<9{)jGCrlZNkr!YW7j1d*HKLW!xb6!5r5Rw776X_zx^; zz9&yB3i#<^`Q@V0oQPTDC)>>X1A9}lX^O8DjpzDpz<$C0m%Xk+8#na^sywVcsT`>zq=ex@Eg9wrdSi8K{Kx_+RZHM z=xNHg`eCqL-S`jMD6r(vP-iNi7aMCE@qTkYTi&n)12pQ{&;oFHZs0^KU8=RQ$D1E2 zg@8-VL_0UFC*?im`XCf{ z^)1v)A2*g*Oak#WHrAEBuCE@&dgC2oHl!Lp`C~yRQabHk!aICJLST1{H;_6xBKeve zCpzB_F@+CX31r;FO#9xMy21KhY*Y0*8knhSU;O({;3rS&i+>L=H0lAkM5S@r-TwO7 znVLFW?OaS^;=+GQ8vhvQX@&h)%>kai@&mQRc(BEdH5JbH2s}^ZjfLo+|4+{Wv1FiO zk|xRX=S5S-`L(E54QP`0B3;NKE9uy;|(}PS(E-chWU; zMBZRevp0I`9un>r*4{S$_vHNpg(C6`AX9~9zUEVj5PUk+@rT8?*bJVe?nwpB2G zGtUa><9h~Epp@Js!+eG~&VSC!3kzHy`()msiuzB7PX3y9NZ(YK73GWukk=lu!P-V4 z%5>Jmx=Lm(FdyLE*dmISm!hS=s=@WH3=^ye#fkwmoS(-}bNd2t5K#kKK)*m|yc^4H z+lc`l>vw6BUrJK;I1D@l<{sKR@$-mDZ9CY^gTCHWqq;xf?>78BI z+i2`gjyX!1HPACO)Q&eXByBhBTny=UzWaX~fa&A0(Umsc4r)*{-FM6r5YW@&^ zzMH6Qg7Y+A8lCKd5w@?VnwBTsF_06+rnSDGzWDyX;}Uutm9r&BCll_4Z{YkyHc^h5Tgb@2Y}b5Vx0Q~_L7|kYWcG@n?<*XcGNUG%pVo9Q%~t{bxFShX$Y7X<6w`{baMZ#9I|(~ImUc)Y0GNm+QHKi!_d1rP01>* zps_DQ-z8G198u?EA_$9xy#GZ02M#vZN6QZiwM9e{DHnni%;c=Rr}+tn;t~yc672 z6La-_icr=?l0lDd_0Kg`%>=m5HXoJcQuQ)l(l9C>m^`Iv3ySn~hif??o2W0?l?Aey zo&yL`2?k>P1^4-Z9KjN>)tgrA7F(|~JCPc>f0M0c1^cq|;!S3yEkKgO`hzlyB)k!y z-eYIdxBR8S*VuqAi*(3Ha$TQv3$squ^tAFbeQ_a0Z6-UId< z`M{4R1C6hT!ZrAsK0j&4!aPWV^HI|+K$&oPM-kE%H>bv877Ydfw|#Y0qH-%0(#O6=->@vf9 zTMbIg04h|Dv^}_Vn#6boW7Nm79C{YXh#$WEK^)WuT!xWtrR0n{Y6dq=)A_;slb&a& zSj~3ZM|Ssmhc(hSG_%fPR4hKL0X?D!8m(^fw3&y)ibl499d0+>_&8kX(Rq~e#K3fm*RzfQCC&x1C%}E$nM1Y__R|WCp7yZ<=Hq$| zIC>OPPNPcHW3|ck(mCJf6&MM&HeDvgmfP_)g-J3STP_JpO{lKH{A305GHF!=zaoV= zJ9Iyf94PsJ)5OplQ!muM7f+}@=*9>^Bf_>g)!#t}tw=dZz2KXjCvYX`KnAzbBzE;hO-k$)bsTi2c3VEE zvx)eS8QhJMK3V})aA3nl$_lkt{^<|vcJE?%iQQnm*{aYagAo8FhjdRlZ8YvwE#B<~$$h^AYm0e5<@e}XPft#C$12UTD^;Xe z!~LEutI^y-HX=BSsD1Lm&Eb3cBh>xWCkhPX7qZDMUdVfcjP`-FV?jQ!x( z;jhv{Q#&us8)*?QwU477+$b+|WsDuubtid=uuSqRM9g1x>`cVErOgI8Z|W)cNP$cwoL8FU<2^5PD# z__{=5OZ*SBZDRnsx5ODYlx?;B#25jZC2AP}IT*%T3&}2vox*3M8tITDkRjCh>mdlE z|Fe;di085^=q{s;z~S>bhm5O?`=6!x?C&Ks$?z#~nU4JkJPAO?Qu`h`K_pXOYGl&l z8z@y!@Q#^)`Be?6vso6$)i3hr6r{;8bL?eWWpI?znUu9!?4IQmxdgmFdP}(%N)rlX zivV##-jGkV2~jPh|2~}>L8IzUM2tt&N%^w{u$5Qj1zwWOy*F7MOR+VLRCuI}geGE) zgA-Yr1>w#6$XjQv+AryU||h|2zRf#B;_0 zMAM}#QL0?MCnK?!n}_pECzoQ7SlB7e5YzSVXiu54H{rBz!VB?Q@P`Y?Jzw&L5A%1` z3R;^NgYIk_PEHQ<&YyZhMny++on|_1mp#mXxz#pv-L`Yx3YnSrpoLsA=l;etrzC8W z2)tzeJ0iUuAAuk`bof$O2*3W+`mo92jtup70kyN&nX^Ef_yeuGnAr$VS=};JE znCmbuDmDFdUC#-;^>|H7RC?)u7aR5Hvu;HCa`>L|m5bz|(;$T57bU?@r`x&q<|Y<4 z+3q6_V%a^QhX568+>^J+l$klXi7i-{1`qe=lGICcfxyQ zDpO1!g@f-Q(I8~JbSV5t`5b~kj><8uAbI_sGAN2CF%)GVZjr}cvpiTv@RGey+HmZK zlAkp?t6nN%;hLgZwzu#SK44Z^{uni}Pt{Tcc_`g3##P{2efDi?v@}o|c5Q5Op0d)1%!Um1v*0LRJBRiR8~B&h9OJ6$Xc(tjxn8M~K5W7t{VnYY`ADetWQv z1C_p6#oP$b@}GaJSnyWs#NTikod5C7Tvn{zOLC-m2Wx;o9cM_~w0D6oPN zcknMh&gJpn_?(lxGxx7#(8x04ujEW4d?tEElAUM47R!j9*vuM zghw-8#LNX&uu$6-UpPI0zO~gwINK&+qYeX%XU&Duot9zAv6Wwq?b?2PP?u)teiW6) z86rWU%MU;HSKcS;{)W|lgiG8lfZ0By%sb?={^9iHz%_Q8`1d~f-JsiKhW>pM>+sht zXw^Fv#^gc_^T0nF+5VWA{1fp^rmdPbCX9(Z8pUE0Z1ej?tSZ7bCOezwJau;OxOx9P(CI}DcER1 zX_NJskwi{zL)4;DZnTRR^nRSx5HCXgikK|%(mr}+{&!^UX1*A~7%#vQ4Y_ukB9HBrWS$%J!MJMrW-a#|4+e*^94Y=j4 zcCBOa*hC~(!rrHkxc$m<%0gGZVYSEL_!j0Ox&==V8{f|&ni6$4==K;<-yU(Edu_Tr+hCfU_nRo1;J$b2aebKj zPgh7ue|uFJLE!td(4)XRS3<%eSLCRBysO(v2`@Y%mgB%L*^LExrA3KiAo zrKPC;OUnc0=N_Mok>|nRF1~3F!RP^*in))y53a<&mzwg1(1b4VDhfzk)AZ-aFj$hn zLiFClsl^1JY|#CHBc18b!Z#CD!1(8*OrU6QHddh`U#wUUp)-c9&7ZDZ3p?kN2X=^< zV^qU+TLsxuL;q2_52fPhPH=2~-Htgmm3cqG(M1dSof|j!_>S@gafO7fJ@Z3vjmq0j zIXT#E_}n%H6gOEg&N(d^m>@Guo%wKA&&l(ZeZ4TXCu-)uyLbkH1jW3#o43h?rh+rt z@#{ld-wM-w{cuuEWaBu^Gu+d=-QCp7Z+r5OdQK5^e$Y%AIkoV7 zBq7Lcx4R^BD!E6qqh^EIEJ^MHqA?EW{ODpMH}^Pp-$)6g9p3O~NMmTJU-lslS?g&C zwlz|P$(JWh*UkjbRkow*AQ)xuNxT_*!*EBkqI1BV_cyhcbvJ(q4U(UW|LlINqv}+s zrGf#eJD+eoT7_}{bwu0YC&kW6vzsTIAgp4qkac@s>~#pS4gkq@@P^04kiL>v(l?E2Py{pPY7Wvrev(Zb=(=W`Azd9L zIiz)@A3SR)UT*ZyR18c4%`u)AUUQ}zfatpQPpML`_e-*)vBcWO$C6y`NJI;`rJ9y9$5PpM_a^r9uBYsutb$ zhq(9T%y%=Y|JSER&xHL{wuk5}&GPUjkLN^MRp;NoK?dH=qW8zk!>gi6Kf$VKuKctO zCW0#SA&5sdp^#(j-c}2e2gh%?Sh8-^j#F_{UgF{mG=?(K6!ATlD|QQ)acXUDL-aj> zx(ty=M?5m0#DSJT!%97a0U2V6GaYBzYUB&k3PQ>p$t;~ld;PU6IB)9{!1-d+*6ktw+O$|-8BrjA1EJO z5a~@l9gnn)O}YzllCO7cnX^{IU134kCKJASF*=6!)p7w$lw{*$wdE-sP_uzch5Fs0 zsp*atIE)#%Isd+pU|!D&VLS4;bA68uUGH^LH2F%{#qz)=vI{OAQT&!;6jMuw_1k(H z(=9P3B1BLpGGB#S-mdmi239b<(MA8VXee9cd&eX(y0;M&>k`6j6}^Z&A>g&Sab6Aq z%CjkzsqQn$aX1bwVFzSlrdhoK&R5HY+hfCwp&-Q<8M8kyz5_eT&Fs}aIgzB$7sreq zC_X8k@;$%(*pj4J#6H0`0*Lvdj*hRkR!*~@v&w~|4yZ;6du&oJ*<@KND^8#rHj9;K!la4ASM0?UBGURD zaV*t(Iiawnk|n`y(x-1Go`oW1RS$h-t&kPfmi(<7J6inM!sjlJKAq+MiRU&JW`7-2 z(jo(9YyL$$S(uT~wlZ&i9Z{;mLldz%t@!KSbA(6jO5AI6+Jv?bVW>#s>T3a)2~$BK zpGXlobhTTy7(cp(WkL>bLU6)&Kq|dvi^~GKxvYag5}B|qtFZF zUxVyg$&uT(IAKdxR=92f2X1}N8|LFaPr%=82C45&aI6*63b*lk5^oJa61VKE;q|W;UV-1j!g5}?n!`|8l zGQEnG%guG0Yn5OkW8Zl))(jWcoc)~q^dDUB6ZE%xB^v|yM$ac+7fWaQjs0H_V8z72 zSA$&gyPxJuJF1M-h3J_MX&SHE>NP$}sVE-+Dh9^1S>j%EIP)c?ZlRLiU}23dxJc%{ zmm=7r$8hn0@Z@gYaRF0u7&L+qb*D3QGNUk^1Fo*OuC}H6YP@vu^8=KR*t5JQ_vB6D z&>)lL<8}QQjlM;7*r?Wh94nPDlZdy=Sg9+8mVA+F=%}<6rjB$hY@>o$V7A+ux&fK{ zZwKXjtryDJk$26INIGX4;I zyt=t=0q%99FmcR)yASwUr<3&Q9K%`>7AOYLGE%R`R#tW%MIreTVZy+~$SpwASBvKOTz9gM)y z51ZU`=^ezhN8{^fIpMKxahjXfI(8JQKl{|15rtauJ((WLP4RyB`b|;M*KsG7@~$60 z3^8=ZFts14()u`&y3R)g$A1b&2*?zZF+l~)b|peWD?g$!e6LCr={_rf|L?;=>!&F_ z2{Qnt?_;z$7Az}PuJur4vI2FvW&aEUM5cfQ0G!>wA%kuI3=u*gKYu|4Ag85S^<6eR zV3`O5ggCW=-k7(94Uv<&nk(sjPLQi4s*tAOtAJittvCR)L{w+*Ddj74HMKldQq6gN zsr>hjzCf8&9n0qviCG=*j?JfUcRuu^yI(fgR5x0wn7y-O)G6g#AKI;sx$4{16J_K& zOfBBk!g2MuJ1dg)@88wCD>m=xuG)fo5R}>_@5Wi=w*SS=p=nFjJl8F|gHXQ0uXpWn z%~l=cCRlQJ%ZJ&o7w?B0b&e)Q7;vY#v-C&z7Vjh6&DmF`FnN!LBjqwg9UA-GZw{tG zkK2;PEp~-Gv3yy2142f#5=!OA>F)O(y>^+PvpUIt_2#H1 zi)9ZH)rq7Ddj*zhuqHkgq<=~YxnF%qZsGYObZwzB|NDSStYP4y1{|X_!6jl{OKB|) z_=0at>d%Q&gg`T4qyEFlg5k6+`Mnh-t+KDfAy5IO=%p{3()>Hv^lb0%ecsA5Ge<>A#O`s0`)w1)>d=)MAzIBjYYTMD3pFxKTgO)4I`)O?eak z!$2|ee*62o2ymK+F)|j9TCIZeT2UAt6N^lF*8BVi!MI)Py}&bnj@xVGaJMyUTSIc= z`fewns5;<}1^zc+5Hx2cnEJh0B($&PiB_6VI4!_qEn|fVN3*@98h(#EAD(`UTdk!& z=DwVVgxTMh_#aNxZs}fcNY;Er{aO>lJ(skVH4l?x;GyI=uUEvT0OL#%`kkp>ipD@; z4e?U63+_MvTLe_&*rLk&?U2$y>fGTWv;KF?(A)AaKxF=z&d=#nJy<9?d(g!xVy|z? z(91af(L=+EtaVA);HP*dS)!{XU_r43c4;VrP$`r}F{3LU5t`312oU9{Ls;AlflwfH%&-kp)9*J z^KZ`f?!%skZ(lS>)TK%=#>^@l=;Si;PA9q`(eWPh8iR$I(faL3Ss{qpE%fvPs1Z`=Y- z3#xc`;wzXE(>a71JWD3cZEIxII+?bJDrfX^S6ofx7$gqmjeDHmc0Z$=GWgub+sn$~ z^#6);O#L8#XpDYy(T1?$MmI+rJG7MlqBV5#p}9?DtybxW zolzObXnJ%V=2%{1IF~d{fl2@HlF}DI%)%?Tx~Tv7y;e=oX-%*593|-Q8yo1sMyVJ- z4(>A25`p#mjZkb6fuoj=;=c^%~6efb_S$D93q!M2572av8|OR%Laqec;cD(>U} zq2$ZiO;6o<4>sN{eHKV;`mB8(<=K&BtM=phXvMlE`DO?NK_=MS?l$Xicx? z>R$WJexb`B$o;%g&5b~=#qwuheO)OH_X2n2iG6?RJc^a~u+7*>WxUt7u*}}-h*tv< zEUyX#1eD~YCE`A2dqp&m#;z(p^oaZQiM=M8?J2GZrumNlQvMl$pV zr^$4G+ua<=HCJLWafYLk%6*)}TgkEzbOCY2Pp3F+{84usj)G^lYSkq7fhjq9ED@i* zSfbRru-CNE*}nCDXM{Fp*kW{+;@MuF*yspdHsPNh>$ZA{f9Gvq0zMmOQj=6S9EiQ? zGV5}1rZG2Jn8^m3CaBi50QHkWr(h6SDx3_rJnOK6ygJ#nMVYp zj2z#P%r8{t4{Fy15^o7}_n&0GhaY-6{sQX#mFY;Zn5nIEKUo=Ts|KS=c-!(}jeE6L zsoTk@Om~&$t}bI!A%Sl09_|WV2UTUP1FObFMVRSvT@$kZFIIl{m!AFf^Sn`#UG3dj=IZ7n{tahp$JIGsdMg8t43~Rx za^vhzlYc4G&^Yc<_5yI84K4{sic~t4n zC-gDzpRR+$AFr2<%XX+=qn)e#G8M%Xi1d>8FuX=hTo%40y=KXE?d~A|d2?s@Plpq& z9ApIhlDKDV14o)D5D`PHBYEQjrBhi7-C6lq(Uib_KwPJ56wkmD-rxDvkvStPwR;;P zD&{kBi#9HO5vKqK7wUp=V6NW@)#RqTM(D*;;vp{rGs)91$#NS+>G^ zKs4vKvv<*NV^&e<{sB)e>zm$UxmXp4*+qf@#*p8wG;>|jYsm5x=d>`~c@$2>sXKuU z2`}oJ*yKj~4fdC|*?Ac*j>H=#-|cR?k9^4i;l4&oen7mdb2GQ7S(aIh_CSyCLcJX% z6ev0I3>d<(qoPcN@`m=V-6OcoyRGKlA%Mz9UdO@9UxMHs`LoOem3bnzjfZ41fJ@iA zcRQq*&cSS6!Lv5#NTMCW|8#TUc&o3VU1#Aq+a%=V;OJ10qv!CE>~<`uEN}GDlGs0Y zPTS2gDT-t0)*Fe;r=DTF&>>d4G``~I#5&94ja$yV*5l^u6tgf8=P=&BHcSz!n<`r_ z>T`J&0pbclR!@zJNhgd!O$AVK0%v?=Kk)%f4}{w)tt}}FH4*>g=_|wHTAFTgcM0x6 zLm;@j1s~kqHMqOGyABXwAV_eB;1b-O;0{3o!SBv_pZooR-LrkVyK2>1HC<5#VBjzy zhJv#udnB^PYm7d|;w1llH2hUz$i@{ljbt*y(l&;OV{%)PXp(UTxlJLlraaDsAFiu| z)%kDWp(|;V7e;&Q(AM183!6zCRTO)nS~1nQDHB8VfQ7=Mt?+>6lgJ8T++HC^jPz{4 zOB4%{TQocJ6CURyWy~~SCG^3eU85; zcki+6p&R82d7VCsu5}$1l^4mewxN3WFIf_7@{3G+@c0~+1|7@$8%9`?e%JhjOw`0( zXxd#fT#xF!bYMAXu%-u`GnirMLNLqeAUv!mw0MW`zf&&6bIK;HyuJ;u8p>b_p=>;HSUyAGN>gBr?yQ8LK!tTo%*cW9JT2p7aXn z$kG@m>*Ta~a!8vbTaw4J+xbEZF?y`5!>W|WHs7kU(lh+)Cv+}BcslO}@SpBf4PGRK z9P{Rbt=V&?7011U_S+Ucv!E!j(DVWz`GY(F)c|eDMR!;#I_SSMq zcG_Vq*+76*tj9sj-+S%Q$&BOZ7s@yWR!|GYKJkW$c%rAUky!XD=YUr#wEUGo&vleu${nAwrB4NIkG?%^Gr}+)eEO;^ULBYwj7F6& z{bP z-3z9zI;lP-pCX6D%`<%FxaGSna!U(rerBvhu0;MtVfnK@JYjPf0US^8DNz0(KSyG> zG*ET9Ja<1@>@7>EdX@Ls>burA2_aO?jnbu%Z>w|gT0ZCXH24DQw;DOhpEatUk8GWV ziv3E{X#9_tbtR*P52sC9zypWf%xi#X#o-ro%+~OQRG_8kXxdIvmN2=jA1s)tOYqXz znUKxT{>0;-ZAhKNf>754>B_p68iSS-2X39 zH?{?})Oa>_MUne38b79VB%u;IOm0`7k~vJ3L>5Fabq3?<_IZ%p#d!tOl<&Kk1z&(~sycAeA%!TQfPII*TS zPcScB{)9iOJ`IIuFi3#x!>t122ls`>~I_WP7xBGW``5MQ*Av|9xnGCR-0U zr|afMA?1(vgx!cxS8%r%cK1;_0||?ZSZ6?0d&HP7Z3qT-?D9-{8*wqdj;^MvjqJNr zI>pA%O*rMU`mLW!G%}|e-p$MFyM*Eq5XNZFT5IgHs9LMwv&{O0qZ{yY%SOs~$z!)Vk4^njviUTKE#Z5^6*%y!V=Io@)M@;CumH;-!p_Ei zX7;y%Mihaum!#PB2e%;@m9Jb3MZ58qxq_?0;}{{H{a1C^BIb?Jx%DKMCSxEFPIP7M zpsrEU*}oMiO&L{hy-Y>Sj$SkDnE`*VtP&3MzOaZRr}VRcB&VRC@O2y_G6?n3skd&9KqR7TcQxA-}N>{J{4bR`Zl7!XJvDJM^2z<;-tbeUQgdoOL9q^i-ly%zMNm@-3Hj% zSkUZ?6Tk!Sw}#CYs1>V$c?9Bk{PuFp^ruA4ta^UTJ6~?xYTI_w-D#(0 z+m@@t;wd`&*r7yM& zU790J@WlHNG?gk9qCAKI0zK1161$RE3F*B=!+}Q-g4AZQHa$EJCb_}fs;x*xzl%Ap+p=+q1m>fMAi1!e?URa*m2R=*lYz+QoUu>OzuL{d(EhDmhF=ylR`g+Oz4a|oZg8yUJz|d0?4xng zF9Y1T|B8KDe-qPxX3HL3{b&YMb9i^2QKx6xDs`{^RAG+98BuBKi5erhlfRqI&`^y8KXE^}Fg@|3rS?Is;xQWfky z{TEHDOqZNi*Stk*irhUfSbFqjo(+k3_~Ko0)$YcoUL#iBA-zTAwD_q1QJfFnG5P=W z&pcE4izyl@hq(XA?3_t5F`8DSHtSLIWHK=q;p#NUvLm*wIeO;~i<(cl-apj~1my&j zA1kHrF2uNwfMf&0B|@QfHt|ExKyhy8A!@_WV(THn$z21<>?E(C;{-j2&yG*ga@PV%MuR9ACoDcqq}^)qU5jv@zZ%UhR`h~_6T#1JJawy>;xu0(mUf5KD;DF zwKdO-IZ?HJaPbNO7ik}p>-^4Z`OK|qI~!B>V@)}vz*L=QBQ`N>)3ieBqkXW8?;nPg zRo@$>o|Oe}U-xDX*j2?i&!{zdZn1jCPkvPVJJf{2jm+l}$H0%$PDyVHLx&~_)QVdo zg*u;}+|cCTd%UG7;Cpm8PS2j=JHoc<{YzeW^r|KEK|C_(B2l^6rbDgN65(T|>~61d zikrC?#a`$z4~nAsr*_hVHk`j^cI@%|a!c>SCh8 z$Mx@4Jb9-i?G@+B$1%=)w`g<7)*y^e_-RLT=@JaU^3#?+{Si%U@;O{)&1f;px;oNA zJoXjuw%Of@WEw~kZX=#<$iwqO7j^d;*b)Baahy-xUmihmz!=$_?)^dm zc%)dWZI>sPW2CHZ%OX~wh~Ux)kR3%&@!lxS9jzM^O>p#u)*z?+ zwtXAw%aKRl55wT0m?z<*-g~hznz9R8YpxI-U*Kl*0lLk5nxd!GoF3m=#8}&;T6)a& z{vPX~037ovZ1xyXHB$HDoq=ymy(0dQN*n5>BcP450$)1$M+v_xj%%N8wQH54CzjD# zU~Xz1b=nD9YP*6}mRM*nLlJ0My2vvPwT_>@0^*JgEd^e?Wc?WW)SMiPTy3IieFRpY zY{8&q6~u%XV%rJGSns#PRFh+dBrzG$q?0d5lFK3>QrP`svM$&{K8TAkGcfkf9}7Oo z*NX1O&jOCEHz{s7-E2(HaU|EF<=qA&>WnrYPhPU)K@TG5WTm^4vk1pp1uXm(JYj-B z%Kc3EWq_2M$cGz1d$_R5bW7LDtJ{=@cmtuCBrOI#S_&r0Ds3?iV$NPy@pqfi$fG#& zVRx=LCAZ2b33lJ5R&n*6TWnmMbbf6A$$+6o21Q;9T6ILi1jLl3X?WfJg>V}}PLE=l ztQdxwfZ7}Zh)`Ad*at_|;*^D~?-=j5`ds+HvbGs)KB3gjF{s1T#9)u+<<%CEot8qC z*v7;SZb49RE3el}0qK7kVe0h%34NRFqEco+4XSU;6@{tzWaJB?f{)D#_?qQ=YHmaP zT3<2N_2d>mrMNS#JhWKA6CQrjyVbq`NToDSufv+N7)JpYUu}1ez=%IkJ-E{yqiR6@ zK=eRxC+v*IB8K7E$%Ynf#!14fsA#{&%Vk6%g~MWF1(s*%qgX?kL-^i@A7#6>k{54n zIa6nooJRvWCpZl>xdmOurAloyUTsaB+23v_N4NSs#R+$)C$G|1^(Ep zTmX7Lb=@0*r5%0ehL)XRcmRUWl2si^-lTsbX&mUnl8CN z|AS^TZS!=uK#ev+hWg6CVetOqEqp_~n8d!K3eg^OM4f=3FT?r)gds*VLsw?@Prgh@ z_G2pMDgARfVh=#gUa|q8K(^k?!h(f+zdeteZ--Q+fq&zKb+bZ0yp-uM>liWdU8U{P zX3ZMLAfVx0%*xck8vljDbv_Zeah9Y|N9)ao>Th|Z$yg82aR002bb-BUeTEBUMLCb_ z{Ah#&1mY{K^o1u2d#OE1z^D?R$gi(H?nsFA=C~c2*tq+EgK9C>>r1td+$FAe_e{5&h8ljQi0eW*cb3Zgz>Gxt0 zMaXuD;kAVilE-CY(U85=aqOy=vw)_zO=aMQRv7PIZJHJ_{%GTS3lg`;l z0c-3FVdinR+zz|32l9~`Wq>*xR8ya~4XD{3uK$>Igl!@Z^VWYDhgSyk})R4q^!T#<9a*$-w10vMDy9{_VTqLE4 z?sE-!2WhsKxN)DyB0Z3XOC#*0Y=N zT_OttM=7i52!Xtu_1x4(E+Q=HzS(A+^Ck80e0%rdUdbAeN0mxY2IUH5tnz9ZRkf6e z0A&`SZG79WYFsDV9){j5E?-JMtTp@nZgMO=z0hNQG3+)9KT>Mp6r&0pAbco^OBT77 z$$3s@J9BkWyySYg7$EMKE9z(8jB5s(#5i8Q+*Mg{z5;19JP zT0Ond@wJ-pc2V=bAD)vKsunoRx#0+`YFjjXx)&BU+84EjBDV#P!S5up5(?EVwXptR zn%zL$Z^q5cYc=>)RgrQ|b}!{j`<69+bPZRtAq;EpN-Zfr!YWaAMss9Ce6Xl)*(;3T zj)@lRk8x7QwoC`%O4s;a4qj9rWlw!B=UUcAwu$DzC>zwDCuJHpsX!VbO$dRAXPDd= zp_rI)?NJu|u*7ifUEp1*rj#44FCUvPFM&~|`N_G?`Ynl76$f+pvodZ>IrOotAk}xn zn>lk5by;7+d~>*SB30-%hbfFt7&nQ2h8ME5-*4PmT_SDw2q@JoIfXv{SkFOOS?~-k zXSr_rC95Fr<3lbO&Bu?dT%Z|>x_Yztam_7QujN9<)L5*%5$gk)6RDWR9s-E%okqp1 znW#3g#j0u(3bgk#LI<72kt(?=Sb~2(D!OZ5u zuMdsKs#6MpW4B{6r;ylVDN1Ff{oo`n!7Q}mu#b0F3eGM>H#NnA zw8hEa8;hf8&t9H)Ei~01|KBaRO)qPxnQ zHDbV3l!%mPijTY0+B9#??Y4}JU#$M?7#ng4=9@x~(E8x0&pP8yL{LMSoCgNAXUyjS zXm-yN*t=g=4@ek`lL8H(cljI&aWL0W%%SZQSXmubBJ|(+@{>- z7F>Vi$N7zRwQ3PP)zg)J8|+(Pcu4th)%1()mm0{flI#0;qxvl^WRt!63!TyR>%^5P zXArA?xTF@izDzu$AdL*FL+0PG7D7v)8)5O&%OY{Vo)BN83}nZ5LccD{(sIAPp(T32 zAJL~Xj(r|vw9I?cEBiBNj!0eydz;lC=IPvHPeu!F6EG6@Tv=#QI4w`zikuuBp%Am& z_r}twg_T@4S|41zMNxk!>!nhs2akCVF{-a~<0HZ1VX4F^;gw*jx3w<9YKTBw*4d%( zTg>76px`C-Oa6`{9_;3tWC%R?Y7w&b13m!L3zXT zaOZBG)wVM^UXS01<)|x->r{p+Xsj)n_M*JcY)Ue(zo8=)$-`uoV3sU#&~iW@%1%+P z*__Vf&wO=1*KpK%aN(iEyB;$_!~`L2wfOiZGX@*(nyhF6&G^F8n{4Q&GP#V3ZVO$S zFG=Pif^F|dG4bltfUeCtPW_=AY>Ln@iq?--79_kj^^48R9B#jRMmXXE3$NFv_dTU$ zD&snJxn2UafZlMLDn>t&4O~Wmt)HZpQQ z38yXCa8yBHd11$5Y;!K`DgBDY|8FY69qwp{PEx>qW76Swo6GRqmYokPI0z|st{;xN z47lqyxQuEllg<#^ILEstbFxs3w^zoBF3Jl(p|uX^KPlm8RoOY4e=)+6PO!gZy`|>) z;mm2;ZgMa=Gm?2WfUIL*uD>GxE9D~XqmKB%KsuH)XqgcvdM-RbluoQ#cCKpp&-eR`pMNwzo z9|!LTqHR73{tT4PNI~GNIhm^e+QeT-o0blPXprXz^F$6RO$l>DjM64sELw${pkOvO zYhjMtbv0!%wbV}aFkah$0-n+C#@=26vNwv%8}8F_Sr=3)Z&zs^`Rgdb#(xW!Tbin| zj32WZxzhfE{Z}g*Zw=h@CYBSk7X`flzGTI?N!~Fttov|d_Zu<^bBfDgL&9VIAZd^SkAP@_&+!0L3Tq+y)IIXmLbeqlD_?e&d@a|0#_t3 zilSLjsyaT~V>JqR7X&e)j5;-8tJ_MsgHNf3U!T6yxxi~I8dbK&1-Qh1ASkT0_kWCI z;)_^uMLW6cw#o3bjP=h;u2qw{TSvc?vx8GH{ z;!N|bH^nXqc%9sZ;Kz$2{!h8!vCUK=>X(z#Ba*nqZ_`suI+`mR8-YUzc9#44mKAru znBL@`ycT=!g!f+gYkAKJpYa1G7sb+V0+F#%C3&h)S$Fncg(-!=7clS-ma^}Zkxj|* zvH-)Oq`!FrU$FeXNBv@vRPHgjHPdcg<1cej9N94%zvn`(>QGl@JO}*=sdHL&Mv@k^ zDwV+Vd4TacSF1-sqKT%@V|Xzxq(*p4{J5gBG_9z1wOM{A=VE4t`f>Ky6NPM{%1p2! ztw#KbZ&zsx99J^4!2V;bJ0U3@3j2v)oKUq*h!gqL8? zm~!drt$Jj3y*j4EAd*}Y5ribTRoUbTdT+V>`)KE;2d#??79KNnVpqoX0tE4MCB^&( zC)`iJf1ZQx51u9|x5Z62^!wmU>LlKo6NIqr4;G!h#(t0K2VtZy^@U(ky=J>4Gy4@k z47P21*7W@aW|JofbFDe@S}ir-+Hi8-d1`%U4y}EmSOP3M_f&1niXS>#gVj?pbFC%v z+Cc>?MrVU8aWpRYIRBh&1lp>Bd_bdR*US~i)W@U)dk@!*$p1X4FQI&P9L`nwi7pBjMLJ=BTbu^e8k_kN_0MAGVV6UVtIR)-`9QW>}**NoHc%?dIx-W1?!7x z2CFg?a2RZsFu7+uk3R!k!l55O~?Z9ab zLdbmU3PpVAClS`v^6#e2dyc{#=+2Z|8to{%j`k%$7S%mrm9YI~d1J~nC=<*Y zv;wcuE{3$h=$Z9iQr}BgI;ig_+=^;|t8+lh+2Y5Ecc2Oa@L1HwEXULGo87ba@9B{9 zV58IhXy@3bJAJGFEJ~F@V}|8!OtzQPDGWa4A^=JixOzB=6PG@iXvLndzw&aIO!1F_ z@m{IaX~1Ku$|K@IQC!iLnE<{QdUX##T8|+)lxb)()}+#7$JIiz+D@52@A{zAcOW>Q zhh|?Zp3vXOOC(LIe~a9)We)3$QTe9`x7`rrP6{sR@rzrr7R^Srn#qFIc$c6EX%Nuf#u7P?j#)Fy@3a_4;<{h>r?#ei4Wl=np{dg+5xNb3IJF z*7v~)Is}iQWkpmXS8gPl=E)m7l`ajEW{O33L#^fzuN-{2PIsBg8`8s{m^8Ud=*aoa zAip_*6GQmsTE>+`TOHY!BL3J-kjCEhN=wm$QK`Q`9$`zQ-Ufamt|Y&e_GV1YHyQq- z4U4cP21omsMg8mIS98oF)dM5kN*d5UR}B{gC2CoJ`Kr5km+L!#Ds`u~*3G9&o7p1#gbun7`?Rb9^2Ft+M`;%_uCbIk z7H-t4FZqq1wq)UntT21M(P#;9B)IB2w~yWZB@{urYNv>Lc0TFs?U>NnFd7jK#FZ8x zc<}|xps2{zX7CAWTa=y`eGpo>QVc?IC zT6|7~SD~8kJ-w1G@368ewhq`91*zp51j_!9Q4FcsBYAv%KsWPzFAHrG;;XGQjn;ol zW?iWxuJRGmokqKrLA#Yhi?@(uJQ`E11L1$sD=c|^QII=S|5$ocnK4^xVU+%@fYCu* zPcFI`AF`fl&-4(Glp;tw2l<%)R&A& zcXi~t=#;eOLBTX5Q`mzl!4R3#gUV49A3*cQmK|++OV6f2`yr;R=&>`f*!n@@Ub-(* zNBm)z+h>e#u})~8^juq+FR~_$Sc(r^}doETk?hzAR{dlwIb2?z3AYtV_l%9360X$=#K3gObCD#%BAr~Cb zUof8HkEHt7YfYhjf>)lw_<4YF)4iQnf={TXFu*|D#3hzKg-liyWd$B1`Zdfyn)R`Q>oQpgMJERK>JaoXl!+cb^9brgm76(y z=oDKs#ZANnMw0Fg`HG`?Iod47qZ?A?ZS}pt%MoS>lm8PT0seuU?S!wn-Fb%zxE-_7 z%?$2%Ni5ybY3%^UOpzb`76ww^#_{pr1L*PMq}mc@mx1Mm;)EznV@q5v=7@QZ)MrV; zZHd*7@9EU_z!&HG*IhkxiQTD#u`>w25y2OVX4kX=R~nor3BT5I($0R#A!Q~}1S=fp z-Kwhyy3fp+{#K{zxaklVb$+Gn(!#&onDy1TVqpm$-jpAvbxu?2$9!u;EqCrrF(JLL zG!YE21Ke60EiCnrlZ0FVxB6ulZ$jwcW(R0R479H<99$U`b#4wNmL0~9jMh1wTR*<> z1C_q-jF=f|Cj(#)Y(@?_lP8 zM<|{R3$s!OW!ZKW9lAU|Zocp%*o0(V}zh+5`IkPFzHA;=W=?tHzv9g2$ViNojvQmJXh0e}N)&=NI{gzxgq4|D zJHC>V1^D%9Ti(om@fnk(dXJohvH~BqPKS?)Gr=ER2Rw>7T{G%`fw-09R~YmYZVM%gNuow<&OlO+5UZ{7iQ7eF#F z1LpyOX+-XCb>H&i1=7XeNYe(*d|_P(3?DuXlFkEB6(?^{rRT0KoxKR=HS=4NXdcx$ zaJfIQ@@iTh*8w{i!^RW+GU8isb}Q+8B0}C)oas8uZGK?Nt6;)8`iQfQ zowl%-EGC&~JFM_`P7j(b7AKghr+BCDfV-odvR)fm1F%d=HZL%VPT@fon`HeozBOnl zG@TIy7$|E3xy;3{FGn=XWTCohH1cYmc?6j!a840*0OewN;y<^xI&*Aulu(H4Y}gez z=E(zZ!MA+zIA>URiIesPekK6#4lpIN>bZRL@o@LTLd_lB<#^3h^vvgx#+Ly>aLkIe zr~+tJT)XD-mZp8|#C1Ge67i&JmJSv{^%$wt6~(Gw~J`LHp*v5DXWMyAUf4 zW+P5=lrCXZy|6PMza%+6T0Q%%L3PE(vyelEr*X@xieUp6JA8oAfbY!pD~+u%)Ruf6 znC=2tZISi6?`@i);&!qRYG3n|Gi2-Y?S1*0duEu6%#nz72YQbmunGVcXCt_x*b$_%A-qBV5v{?pJL`u{=8TJRCJgDA zm+8J_eR^dw6IY%xu~ZB{o2+S>O(?Tz#v88$`g+H2pXwLcIj(M~E$)05HQXK6JP=q| zg-4ye^z6(vmt};|evBpt>8Q~NkVzinEE9k)o~(>p#5QaYmw|Q4PEFXmps6E#-*K6| zRC!Bg?0OD2-iZi?#~Px^vzUiUO@&|We2PFKT_#Dm!X9T4P4^y&{zHi-aSmlu&nu_G z`^eGDWT9c>00e}P8iox9(zswra!ti-V$@ez2+(iR`a_AsWvZ#-{x zn_hP~Y`?YI3}S^~ITz;CIWm~59R*3`V-mzT?x*H=W(0oS7JdYO7L0rS9 zf^`B%?zq#OuzZN{#tF~xb968V6mt+0Zo>9E6_l0+sE&J{*psBKNChHgAKeh|a^G!! zzxM1|x<-Rn_>6g@Q@3G*`A+Ltuw~oF5aO~AC7}KU{fTR=jnhZH?$e8jvFY&E_Ost8 zvy5G?iZe{=MkI#c9M7|ui?T)~ZDX>{MxFCug&b&-*jcPVLa(RY%7Fe4V-9!gaPLa$ zxTp$>+#xIX5^;S~89-Y%@UD$^T@SuuVPJW!e?Zysd)F~1h>}qB!wM|j5SBuQrdAYf zhVhENwSqT)zTP_-3UJE(djwQ!wj3}E%#iEF5oRV|G}{S+UB5*zb<+WCeZH@-#y*-I zhGryqY(JV7k|3H+o+lw?JMn(y0!vR&bENTe^+S-o$se)xDcAwI5HsgOqoH?~x*o=U zvegebD~^z=2UXHsn?K>p@xo}Uu%P{w5f+G#Sh`74oz&3J?{xoeatdNhprD>}2hn!P zLNvvy9~N7;*pohgA>m8X<&eFDVzO{#18^O&xv~WR&dPTS$f9U^z|UpsU9+#ilMswz zgfUWbbCgNhDuyzbhp6sKnESv~nvXBnCTF;`3ZUT=pjj0Ca;EV2`uL1P)48 zguqv4f#(bA20L~1ug+5jh~Y#Qf>qAE9p#YjM1 ze<{$qhLw+5Rx=^F_dyjtx=FBk`H^|NzuirtXeUf5Kg`GCaYsBU2hMMHKgbG9SA;zf zPRu@=RQuuaLS}^F;4*hc^?l22|GP7Fzn1;A5rHcrA%!_|QOT!=p}qmK#yyH=#@*;# z_*W8BKM#1NWzt_ludrgfn=Ma)D|{-6!LL5|8h<>DL*7BXwv(ReKL%P1Uy+*Bo__Zq z7QB|$5y#%xBcb-b@>k-0+9W#G9!l&^z%Wh{VdgT6I{^*-- z`k1+CQEp9M>AQ_s*$`Imek5m!=OC)#=Ny!xXnkE`!!z)NMH<|`dn@;P%S=0r7;wsb zI9>B$?zgH>Vh9kV=?Ce)lEc%wPX8qfeS%_!Q=EQYh|T$#kwP%do2rjZ&xs@oJKr^k z0AS7>Pk`Pr*pjl_r0qaYUMm$c+l3Pc8g?Ku&vwxOGIn75C-uR_j(PTb8BN(cfa$*H zD3iC+G@OVM@E&f|3?+NAoS>;c(@9v9xnFM4A3+E`=xas1H<4}mM`=-4A$O3QWHNc^ z^|91&1~PI?+Tp)uhk3*Xk$s&4B2a^=h)-dF@3_w|kZ6LdT>sqRpp%7SrQC6Wo!P7$ z+;90xUhXC5fluwwB7kCmQn_w-7JfnnaVc?ysx$#sQ$$ingNPD>gQ9YC&c={C(`)kM ztz@t7{kNXPYHb$Bu*T4A46%z}Yv-j0ShOus)hn&)VNDRL-wsLHfAgy8Wa)+el^g=-$l zeE5Ge+4id#Q5WDg->8e`(O*Ra_!o=#2Ih@US$x#&ckqYyJs zmV$IrQ@Et+OZKv(Rf&A~Q3?i7g}J<{LYWNTOM1zg7k2m+He{5aeCL1(IXw z2e8HSLzq6Cu&9SIJvq`%w(^`^#$Mj1)BjVLpwro{=!#aMH8RGBLDfM_ByS%epR2ty z&#>sicCu`e0b%$YS<_VHd%QLfZsEt*J%tdk{p5R;O13lSn_PWrnx}o6CICWAdmc$g zf9fsRY*jCx6BMkvIwi3`g!4kC$^qr?W6Moo`AxUjt8M-TrC8|h1m8V(p_?C+{Q?aR zcbqr{;1_{Zgp};%D$loMPj9%B$*vy>)HzRrsl2c&uu;bUUfDyw&(UaE1HZ$<#1li{ zCegp!F&2IexssIMQpNg6?h*(obxv08?tzJk^F;i4CGX41lNte~BO%qUnlZfQ471@g=U3l(j0- zh1W1;71!{>F0UrhHn|hsz>(d2Rud^udWWt#jSf{}-@qA&MQLhM{s$Bk)uj&$kXwK~ z?|Nh2qhB=5sfOpk_QS1om{z*?RtSVS#_*urfc`kil1|a22W3sB&ZlTnul9Kr_|~sk zV*`>d!xSn$2u=K$TR@a#D5ViJW%=(Uq2GH6WDvhHJ zVdGO`=~4-fme9^tQ{~Ae+dE@h5+{d z-}q1HC>b6yLrNz{lURV#I2a&y*?`eNc*3hpHY?0>!FM7_3WvfzWV8yp1$5cPS!fNE z%3Eu+N^}q{!GWml1l-D;G3{*0?gJF|v7%TLeC1cqpQ9t2Zm&1Z_?9PM7ZsAokTr|7 zazFopQ*Ybo#$0&$CB=NBV8<;wut5I53p4>2I1RBSRF}PkR(A!<&1C-b?f&(23Vz9K zbJR_iA!jV4Ou0YN{$buY3wvk%JECf42?#{|I*io%Z>VtFw)=doIIj+zlM5=K^$!RkkB@kJg3kU0e485SbAu&1H?l#UGxy7 z`1TDes_J3M@HQhk5`ipeDnyq<34mOh;HMxFD0gMM&<(_YvkPWMuPi;K+|zH7CmMey5lNEM zk~Z;&vsH{glf^Y+CrjUbiUParfwn_hR6Ax=Lky&!=1zXzOgcVwPt(NnwhK_!?78 ztWE`sa#9xpqgpm}=VmY3ON}?;eX5fIy2Yu)$`5JM7VCw^izBbiBo$EQ0qvE8)LSM) z4WQjWT^l`o=h;ptuO_l$D;qo$wKvZ03vhL-! zBD+qc-++Dp;~7Xm8sgw?mF<|CqW-jT(5iyeM#gx`V~`v`XZ9fLSs%>r)OT38WE_es zOi-^f9^jmw59* zG9_BpYP$Wz2DK#m4)!a+4vU28#>T$h@?wq8`hOn=J1&nD=EG~5F5_v@IQ62XbuK}z zKxt6kil20o!`yO0*v0cdHzCdg7EqOSfLRx=6ZtX2CO$=kX>_Dev}|uf(&ele#>8at zljM>p|62)b7w{6NSZ(LY&vfQvSMNis2zm`e6^-|Yas-9=i5}2@r3vC+cKj}Qr7vTd z{E@{{v6E%^@9~ACpe+6(CLbd~fD4?(dEj)Q{uPF-S&weX@Z`n$v6{hyqR+%`UoN+>2($qq2anu>7IY~2T^@5Mk=5yQ-Ff7G3WSM|;w%I>+ejE|N zHJ2j3ty8WOUkkx&)YyEF1F~DTRZ}h`2)3%eHB!4L1_d;hh>7yHk3rZUX7!`)EqQ`& zU#&z^--%YsV)kOZ@zl1P>BcHA69$7wtd{X>$UlnR!rUg<;82N{{=rXI$X2kDxq5PAF3_lRSe-;=0)a?uGa1@)Mmxc0G_& zqrf|LB3)q!wj+C6xYzThWDTywozJ;{{DBerkEUJ1YLiJT9H>YX*Ma>=&QxwrOf1}K z2xu;rMScCJ3qU-ML9A8({8cDHAS!x5Ma_}0A&iV6ii>eYC2E}mNqJd20+gLARO|oo zNwk`Xel1cG$hWA;;zs_R555ronHsR@bq5Z3*ldEma@z zsorwKg&1KP+Mu{%r|w)w*7VcyKFCV1nlN(dOnPNqU;Fm6{SEw~ZSpN6aQe`RqU}>)GXZ6f zmG0qW;D2W!kvX_TmiEYRcVzT9RQwfo?W0%-GEsOk!0)84avcH*RthuZnVJb_(ST=b3}hbJn)OQ+KM6i!w2+lY~fu3 ziHdnJIVgUNc_5oi`ESOhCPudlpQ>3v5 z$Qbx$@!*y5{e^wxCDg*6LNo#LV4{4SNc&!)O;SliCi3#j@e>Z-AF+Lw$OkKJ1|pQ4 zXIyGv9=#8z(`P6##*TSbZ{MlmSFMLu{Hr}k4tHSZXDc=XFUAT%P3b5GQ^Zi4$q`TU z;{JglKV=L3b%A?mZ1YXuT%}5`|JU2aqoE)i;9v#Nk~<0{1Bloy`YFxflb+F4d7`Hc z;r}Qvs@I2wkTLv)LSLi#@-*K)q`ndKoe!05yPITii+Oz_m}!Z>M_2X5cC>_m)*?FH zXl0e^{Z(kOLeQgtAs2k5=$(lW7Ud3Kv>Dt9wE9Z)CS@iG9KTG^Yf@~hR6Fd#FQF|C zVDiRKc_**&#q|{LfbPZFmkp*{6zn3NY0Uu**2p8G zCVDGP0CpW}R~ixUGwZ9$LB|LhOfC$9f%?6X*lsB5*&Bd%dLo`&KcK>8HLN1}0adpOh4YQ`N=`QgaF~F4eFmxKkV>6Fg??2|L19m6{Z*t^E$H3-6APDDc$pN8fZs z7UoE(&NzSrfVAq0B%#O=2komclGe+TGVld8>#`Z>W6>tX#RM^U>@S9xhUkFd7j4l2 zrJO~MASNODuSArlDAVmhQTh;FWW!Z)4;V?fVs~h4L&z#7(42(*|IKzZpy?ABMxkUu zXk#E6Mo{?}n%SJhDJq$0{a=&rUlTyA!T)P!gaFO>|7$k?+q?UJ&B=dzYbaJc*nxW^ zv8w-pV|AeFho<(CJcXg|1aZCVYz!Yqh(h{b^N*mH4XVw*=7Jn>beKI{)NkP9yHQF|cx-WQ4=_Z43szd}8$d^j> zof45}&H>^UXYqS5R49y&E*}`3N6oOqOp1&dV>j7b7X{ba3@y?dx#qx(9Dfl2n9B zuJ6+IK&ue3%@^7Q<}D(x$)btj+-OH!aJFyzlpoQPL&z)Qk0})P6T~0+_4g-+OOr_Z zf_@NA|A4!{kl(I`%A@|veJT-o=rLLRU^BFrhk0H9Wh>LPfI(%`5gBY~;bA>6E?Uf3 zBwTWE89E};_Ym+?!kMGz`9dz>yzmg7j%ALqj`2dC{m0q=$Uip()#t(T8_Dqe2ox}d zgB$>n-lO=~JtT&j@c+Bd;H6;?>X&C6P>LbI^xX^gBn*JuC9C?IySttH!;i(zZBbz!ul}HsZR8D&d@C;#tZQT%UUVd<^rr$-7>JAE zz~8pJkGCe3ZD41lH?=0+FL|}b?l|46MW!5UeG#vFU2HI!u8i$}Y`G3(bh5F`w4a`_ zWM6xN{ZPRarFyU%ASuQ}Uo?PKB9c;;Jf>B@=Np3D$%D+`EX~Ly9ylLgnrMNP_D9Sy znz=dM9NgJF{o{rp7Ulh{h4Yg;G!XGvnCP-5$td;wnb9rz(MF3ZA%Mk3Es*>jt#5Ub zRQQ;gJAEN-oKQO28Y&2#VRqn+QlE-kTBa%veTmRApKm^r_qG6SKT0+{>XAzzMt;XI z2H!3sg7oSf02H{K$BJ@|JCNm%>c42#o(6#N@Po`nmvvpHfEes~u`o+r8|c<2cN zYe5;QcLJIvp;D49GFn&icxCK;tKBOgQUVbI2FhWF1%C+=u52kIcx8(V4UQSUl z(R!{37_J0xm>VNsC;~Fz!l|NUGMPnS#`Bo_>3q26(qBS)PG^-cPsQ zJWKntXjLbC)phl~pE(%zaw|tl%137Orhg{M(q@6?B(UQ)wPfUD-CdXI%czvHFw;wr z+ArRxoZuvB6)XjXlw|VWawWk$}w|5!>EYP)AQDkI}>CTZI*Ji=rl^71nQ~OU7-L^qZt{iQ;p**YE^%jau9{)(0B6zJOQ-*s8efIJ@OaS%35OU%P1}(Qi#{wEF0+C z{H}Y^ArwNEIo9*3;sWat-V?^xGRh8Li?;S{3K3KIs%A?A$KC+_=0ja>!;5`kJ;771g*O1suy|I13Ehg-ts7VoJuLDaJNG3H}(IH$wdR zrQ4y&%YED%ZG17`U14;|;hzgQloSBKj=bi!K04&Z+YOOZllL}j`NVywOnr$Q%f zg(kM%M(y-|+(Q4ZwiSce_QOodyS!J6VhjD~N!%1Fq6jbP{b*0PX@Qh}csp1h0?m{` zdLUowe#Bf8h6SkLojScpH9Ev5_02!>tWT<|MnYctxcPeWcFS`{RW33oV!l2~xdgo^ zLI*X}u#XbB+#Xn-ah${JrLJmT#S2l_o*-)*e7cDsdDD^OnnhNHTOckE*ysbhqXztA z?V*6xMtnLbx+BU0JNw-C#JN=X8$ec9(jysmO$;&`8gLDr=+bQYY#}nUtfZ%wc7Pq0Jc*~!0PNP$ z4s9XRBSSlS(6pjWkTq6BExA5gH*cB9gtA>oQEY#(O|wm?Fm)hpl`6U}Jz`?%#vl92 z;Uw_#ye6k~2Zq0vfxTrj>_mb}@tuXtq)og1VhNv?xm+r`^bEwDe2<}9)8rI5s}D-~ z<~9yjiBwt79_f*=l6xReytX1PzMeF+$a}95+0o0m21dQCHv`BfRuDrKD)BB}crTz) ziU=A~Cu1*dEI{0+;NI{Y@QX4r@rbzy1(4ye8Yi$jQqD!$<1cmRof6U-8I92(3qUor zy0y!J87m$m5s#`mHQrOd1R=hFqRRI9)SQv2STph9i~AsT@=HQcDT1-$wMGprEf-@B zNeIb-lvJfAATYFTE>#LtstmuT0`F4iHel2q?}dZeum##~6cuK+J5tNh5eq0Fmfh}P z2xCh#6@nmU%@QmF)yZ5Zua&8W8HDPVr{J%v8jibj-?5M;Jig+!R+lsI)1jNZ+K;B+ z(=`BV+Y1*;F0Te3xRdBD*~YUs6nmhOX;#E15Y!38#GO*5ZMtFqQK(;z{Fp%WGnCOZ zSpctx{Fck9#w`S(6^=1l6B--LOkqUTIMK_ss2zyjaOu|awzi+_We^S_K zFa)tq+(Em0zGx+WAo=om+4#mS~uXtw-7*gJQ=}RD1hAz#iO4AXP1=~pJJUFxxm$f!00}IkYCj_ zF!T(r7AwXU49{&>>dxf@(O<+!@ODC>Hg{S+|3FEK+?&QV;ZyO^U+46`*ty>iFWM=$ zUm~W~WnOHWnE*n#)Qwgu6$g6bBOsR;*oa=FBXF56sYg{P`^*M=uj_B=5H#+cv&T`N zb4^z~LwA}8#eb{^eWC;1tzfQMfy8iVw^3|y&RN3*fr;o!iN-6s6+%wVzG8>6=HChG zO5?kWlv0!ldXa^&+MTAz5FdmRGkQC{_5UQN1sok(_!H>}!gY>Uem+B4Ew7 zPQ<+I*xUCLZ;UQ#8imE;!p|(b0N8NY9)n`Uap+74FG(d@NsFD&l!xwJYVW~*0KKKJ zS-`X&SaX^*Y$^ocf94*OlIgZwBY>E$3fe^$$C-;`Ki1v*Lr^Yz%`9LB#_nb#Gm;}+Uxj?%~wiG2_ibm-yXox6L;5uId?4jX;;Av_$cLvOcCs6TE3Yj+20t#n`~_=MIM(ESE8w+{9V*uP$}1(3iu zC^oZTO}{EN3WtwGlf*?BlJ#?uLSY^4x*m9QK!c;2Q^;ixES!M1TDSI-2U^SC?J#s+ zxnxH)8WgN@KmmLIeoX(zQ%loi@iWoVNqi#15zCWr<}6|tK0AxHrNL#A%H1ZRuqf{+ z)Xvu;qUIIsJ#G_A2zU3)y}YpW_k7|wd9Ljig-8cTP~DFnpFBv*ZGDYcZ`|=k=tRTE zW6CklF6q$8c^QJy5%Dg`$`eQj{M5OIpD;|HH{0mH{HTz*`$@Wr;@&Oy#7>Z>Uh*;j zMufdzbQ?$kaKu^ZY28tD4OKY}pUds%37wVf;`L4edvjgGn1sY#4VNWmT3wJ#eBdie z-A_@0W$i%*m`pyF_~kFkHE&S%+@2eg!7)j-gn{Nzy0|IiK&&a%pfs$`ODSJ3fAKW0 z+&bTo*t)uo{-+3>=lSq9KXBvLU<1y$b*KkmJRwk#UZjkrtfDAADM)nHpHL6);?Fx4 z(d`qdJJ%r(pr3`9y1A>a>wS2S#0EBr^ptX*B!bd&Z!B@byc9FXG@0l;5HPKqp8$VJ z$@&W0!8Q>qZqZ&GCD2)Bt3Zt7%^wrajc^`waNSY+k|YG6O?8Adp)^>(^IrEhc5Lv( zDmQ1PNG)WS(pJoG{L~;Z76qw(|ChkyJoBS+MP)DQf)ICl?fq$KFqYoXgbAbSVH=-%^&NwW6|C^+V;w{78hULc;Qg zr(dNd`%!yEXG@RxI4pf#ow#8r}$|LvqoC40>SO{kPhLU@Hx*#I|r^S-s6Uks=J z97E{#WMyA4${_-ua!gmUX)lnf{}lkNs{*Je|jeW6a2L!EU60x zD1@N(Jyp=|!hZ_zPZir3ZAcp>U zZ7ZVHXG7LkBE`;y2r|2@*VMzBpu4lbH24KjAcPFv2XpBNclRowbHX8^eC5WiS%fTg zSh%YZ9jYiDFJe|uNOb&=TCB8cYS%ON`EYvw;pa6K!FBXMg*l#CyM0Q36k~#j_R81@ z70MJ2*ZQ$OJsSZ zzSd|@+PZB2`Cb~fqgWHb$YU~Qg}*eWSOYWtrWKKXBmPp%$|F`w1~(;*_Zj?*l=1#s zHqpuC?dqQF|7fAE^TSn=%|-}!=M4W{IF`~sF5ZiZaeaF3Rf7+s^Gqk(zk;RJESV!Tra!e5j*ku6ModR<8f?=Q^#177TVYL- zpelgfiHlaFCU<16(cueYH?qnb(D*Ga`rueFEf16>ol*aL26t~Rz52%z{R?`IMRZTG zY($fvB{^gou86Ud9G>v|(gCT#m>TBZ=sxE>5l!)cyZQZyWn#0?O=cM1FD*J_aOIUFOOF}QzIS=Fz3NpbIF>LVf7!3@)&Q0lPL>XNZvNa(mXN4@VjUCpJdw>FO$D!{>b2^F%b^K!1SZ=1n$K8d3fRh4ao16 z9(eT#!cYxE&UvL^QZ%|)D?vaN2FR_Q=aDNmE@~RTcS3~Xu#eCM|7k$aw%lV0p^z%S zy^9{4BDbrSjKhQ#=#`Zf!D6eu6h4b|?8^ zV-t$+{XXGaqJrDum@W0viOD`EukIh$98Q7MUc$SyazM0pf;_}08Di9%%g{~Wv`X7e zUfg{n7WqOR2n&r?EAyiS#4OSHvG9#wqa;lpIhF&z(%;_OasO zDMX(n)eicrU|_^4|EBFnVC*9Z{>hF``mJN#^(;oaDz8tN)v&9l#KzH^aJa{svDCd` z!;-2m^(dvW3jtZ@Td^3<|8d(&a50dgkymuXubtkYQ;JIG3lh8`3Y_9?z)fc%a0v;L zEpNhFk^r9UHuttP(&vXjpSt<0!TPn(B2B}OBduyrI5UR7kIi8^Mug)Yxx1~qb}?dM ztrMW19{bgYLq&&cbIWF2RtIkXxfy{Z`gCGBqLa?Zw&^0#1YaYLs(ZxB9^YvGEBz}=pUTg4g9B;HU{!o11xAZ9pcaA!HhlED-Dg7OseI=FhjJyBz0f0sq z(0H>jj@sO8@Zyfzz8{M|Eld@em=Q=z^fE*<`BA6F>*3FQ^- z*yr0GvbcmXBF6a$1UBo&UQ-cTSvBM~gJU!lLvlcXQT{#z=tuW_d>za2AXn^YGj5ns z;XKgyCcs#Bj$PTlqhFJf4wsRL7=A85=4ySdxexBm2pT)blgjzrjhk`s? zQ+v%^cEp=w*BxP}@?JP!)8oV+=FFEUK7ZfFvle?4eSsp*RYNAs2>xP%7z#0cp;(Tl zge5VAdr#NFEGQI+y{F=5=+3X7zyukzlq?8|Cr2%lI~wP2LIZI*?nr+k3*#XIdb2|} z89;v85{AZ;o(uSn@+SwyOGxQo=E&|cB$x3`NUNo28%2ibhD8e6wCbmZx2e}pU>~bQu-lIm zZ&YgKl|r?ZM0)GoQumSZ=m?2!{5Vlr&`=jmMqa+e^UD6N zUrN}4!)U`2Gu6gz=$D_s?}R9MXwIJE1a=SV6<_{tqgM;4S`5a!LYIg$bxq6e} zYu`o)q{9gLNn^$(zMv#}KmemYO-p(vE@n=>2XgIKQyF+9+@Y5+3l`Qd*oZBzy89wKwlu`d-b6$VHt0pZm zBiTpnAf;^lP~8mxIVkJ*sIw12VhG?i*j4rlZ>i&(2`v7H8z|?|Gek_Z{ z0m@;wMTbthRuuD~@_z>)y(pN1{q)>D400C%Dy%w8~4+C^! ze8Kp9acTPKw~%Brk=;)!S*^ZLI5$)<1L6Q5o z)AUSnvuuvt@gH|_vq_OsWoz7Vi@tXL3VZdUv7$E|gL>mcy8Kh#tL=~`icmznP7hpJ zm7>V=-&OJGYh8GI)wN2b>DYQ1rE&i~rp+=C!Evud56lhrqw0m3woGJqzE7pdN2-QZ+sljUqBC8gUM6YB%l{MJ)@6+Gxm+969yMT~A~fP-ny?RMc|+ z=4sBo@d+U&esCr7<5ICa4!GUQasIxZDH5X z%gikAjVW)m_*#M5j|V5zJ-Kz179RQYP?4%#5SEeCz=u#ZI7)=V?AW@G64^zqxAcdW z^IJ14C3O>t(TV@g#ZswJKBoS8kvGi40{@g1=1VVwc8XkpR;m^b$G>wW_gGSm>z?^4 zi(&kVa1hS}DD9^sfm4wSUaGZ4%&K|jR`JKAatjA6!$p>0thj9Vjw=C*$1Y+ra4v&Q zPw{k*z$I@-^|BBe{8QxRaJy}sM?2a)OTMP<$230vG?>L?h=2cT(DkwT`(U?GQ-bHZ z_YDosa}BKw8W&KQo$y940!M5*)ZAV1&ibrp3`22I9pIBkp<;q2cG`QvwIGy7PlK)Lqt`*&Hp5EKeym!0`dY!5;|im^RblYd>^| zbz*<$T>$n{$FC%-{4-=Ba1KFT2!IUOm(lt_K%83B;{Nx(bx$aSLITIpRP5Ym2wXTN zpCutsq?9RhbHCTv_ij@_=Wk5SH^LInO~I02F6+L?^mmj?qMt-ZD|`g%6ONgnx3oFv zLIpGxN8{`4X1)$X_iV6FE5Tfl+KZUPX_m=b;fnf+j(-h9u2z&wYy8x}G-3YwnR` zSWWI7#jDAqXuQu|k0Qv9^AKZe%nYp*)B#&wz3=q-&rFpGEN{0DTu zX}9V{bo8Bv^G>^b0~kUKa*`$&ca)wBI_Qt&%VaShltyheU3A71zeKZaBo!caK^K3j zwawqqLb2g=+`|RuhfBG6 z1+eyN4a`HJ8txe?XaV<6uq`b@j7w#k^^Sa3X-)WaOW$F5-^#3Ur8nzqi{XEUzFvYA z>T8?lG`fZY%wbJLa1dEo;RGIjsFqA*pO}255dA{GRv_KqM=9xh_Otbd>qydl2tmmM zTnU36UTEwR^+^7let54lvTw6shM=NlOF^A+TgRdkD$v6?-W?D>vfn@jT}K@ z7+@933i!zGXjU|l2rD_xlW#$S3y;6$3<{IG4Ma{kh@g#`8q zb;^=J&=9tsPifqx2S)OP3?0i*JiPO0R#JE`9G*}oUU7M;uu>9t*@QpO2J11Rab676 zr=~U$kjoXq5fEZH^1!XH%cC9x}?}L>*f#s2;<3_xG3FQ5C((VA}2yhXwB@>jjvp-%2d{7Q%Q* zE;u5E=hW|sp__;e!*8Ld7evy&6hSP*%weRvn+P*C#J)J+3lT-1ETsB0D4j-2d75Mz zYlkwY^AVSseU=nB6NldWwJBCZMc^*+v7;8I&{pI=vdP^>k>^i``ud>I?sK@d4ug;=B|J&^q*=Z|RQ=j}pe64xfbc88H`(#l2>xZZQ4u5XfIaP;X#!cI_=4o0A7mvrpy}! zjw#8!9mh|gX&S^Mzr~g@rnpUl90QW&RjMJ3qpo1cu;I*JvI=&7y)mJ6RSo}JlSXyw zSZ8^iR{A!#v6#TS5NY7WBK<Nu+VD9(XHT{_o#ohN`Md39qrhJ!1ZBod)Soz8$>2 zOe%ZUCYHCrx^TlBT%a=5unsRyq*J|V_YZByn2Ze7Bd!ntdW7Z+5Fin&(fR!6`#OAX zEM-rdps1LqO^6~%qH)Q92|u)9NQJ{58x_{?aA{|O97+)?lbP{j`UwaQKkKy9Pwm}` z|2SB+se_)Fsm=1a_UIZUA}cMau=tGyJk$`x+;7;_==tvxK~s#FXDyB2+Chjys;pzh?{J%AQX~G-?`_9i z${mpJC==Z34@a`xqv(kF=OqIIi{Bk*?O@eCG3WoNtshslz-lsm0 zP~ep4MmhO>M{Scy&(^TVFFEcYJn4LOpEDYzBJ=W+TPHDb(C;RJ7ib01wL7D^ZW%db zzZR)B;n`5O{P-}Z9wQgD!x_59F*fly;fYPJoCJPN1Vz@~PdA#TXMj4Z#TI1glw4@A z%@?>u(Xq;$t*~0WQ)Ufk9Xf%;CBPryu~RK+?1yDZDwxJ}`YE=Kg8yw9WPGAmjBugJ z<|5vl9541vR)2kv=xZcgJWc4TBQbLlF)4(}!rZnjs;u_L9Vw@ln&0K^oG*~HWVq;4 z0t&B7OTE`T5-;I{H;7ZOFAYM!;?p$-s@(#6yET0{fK`%K+3@q2gne=~a!fKj)FMhf z|fV z-J5bpnpk(8GSk?1YT!D!&=@)B^N7<0F@8EM3=0=Lw8Rn8_2%yCKcXGLhYG^e{wgwq z+=-vVn3q)ReyjtiZ{(!gfPgM+qjx@lxzSSWh_!KYS?_iWdf;EMbD%LH%rpl~(d#bHv{ydonD4Qv`C}%`Dt$2QFL!T(?5#`Gh|r zHq#73jLB_K2luM*8}DXu9an^?b2g*v|FbBT*twScsHZ(%qQfHT^I1miswK#9)XvhL z)LSfi1^KC%1|EYok>QcmkF>u*8(h}o#d`f1G&G`0d)OM`Pn%&xaE_9>@YN%Nb!x1q zU=`b76&~WEGx@aG-*BQR!l6ca{FW}VS4O7Hmc$=7XmnQJ4=r6D5_vF$gt2L7Ad`IsKGWtF3xQQ+J!KHef0;WLAJ}?pb>VRkZ4y#y8XlG_l9Jhc z^2pUQVw1>IHGY3|*mGtS3UqVxb8yYr!Cst~k{6NRZTC$7bIGs#M07>{e;$1d{l)kh z4i2TrwQ=v;$D5cl%?`H%lQ}x({bmrdkyCWafBex~X!=`)?5$|ywE&0KrM zggP$GuY`T5%4@ug`r}Lc=rV9c)viJvZ)77QMYQDF2ny*Ew8iZ9(FlXcuaFBmd#^Xo zZaWGJ-}Z{&F`uv>dwpyR|Lb1$O$on7#ZO?9m?li}n-Wh0#@KFqL^NH-BGBj}jBlP$ zWzl8EC~(9QQw{FKz*DmxFB^l#tx)eO2NK@6eI7!D6*u7#G7KY|AYEy%%M;Kic1t3a zIb10nS zKF@u^1--pF<>-c2GNCan?mUB~KjM5<;XQoabtD-%;ffG$iJ4v&8EArz%JY*+Ts>io4L+L2F<6V51yrJm z>a|Jt@dGF4&w_a0fDUk;__2I3w6{T73zw??jq43qNzQ2F_y__ka?s;wKgcU$`ovs* zq_X{EBcGJ9jvFO=q!KVceQMHhiWJ%}6v1o)2YDh*AB5N86-zOB`b_&3;c!cE*oci> zXG0M^Sx-QBF--i#I1Jbd-8>v`X4#pi7|#^T}2fzq*Nw(y;Nk9 zyKxjp4_JqLxCU-~hbt%RxHdGu|Gk|26RoHeLsb`}1F#ZPDE}avjFTJw?q7Clp}1gN z!T>|irw5Mf+i7tt{PF3`Xr{{XprVW&*V7uzpn`6uQ5%H?R^CPH)b|X zkb^r|8xTXEz+CJeBmKUKE91!_nXvSvnsc8dLu`!)9x{;6I9N$H$&pgGg=--}%^QTI zN4yV@e7qO7O*=`G^zcw&v?W#C@ur5%nksxjg1gbN!Ix88zCwhl!5?TZv0WRlSVi8A zFQ!`3&9~GRk)2k-Q!tuJGffZi{Cp<6C2T$ttarO5Lo6@Olgu=wdgKfI;2ZqJ>pH1y z#F4ZvKe;q=W`DvCz~Ru@)$MihvLsvbZOr+TRWo5=>eN?a^k+5lclOP)a~OdFT&G{07$=nn)})aNs1X?!KJ-Dht$N=>QQJ5pUYJDG1Yw-5 z_kSPFX&qxcA;yXQ>kZYeeH>;IR75=^)))TcH-^F_6G24jMjH_Ew`>%p{QB>@xe^@! zS*WKmyqmQn?`LSB0Kkz>8E;Q3l;V1>01#Cv4TX|PRiTra(}xbiQu@)7X{`TH z%J0t6BJNziyuV~YEZraJQcPZLgJ!8DjjAay@@@IPIC~Gm@uo}DEh3z&;pomiDE7`~ z*BWDq+3)(quCM)#??XW?R4*vNGz|{Dku_50s~nfl8fJFo-^ED&8fp@nTg(1s8up-S zmDJ{HXd>E-1RqqAXM9dmFuWh2p^d_2SPnu0@MY`v?zM;A2_o=VAiW#)0z4 z`hvmpT_yPG^ENillW%ANl-Q~Ob~qR$i%S~UHlt7RxIdK8V`SWmO)=uNxxs+^+cuU^hQEA4+EOuv%9(>A)UPN)54{mX zi80=WeEoc1%izED$u`$};s@z#`l~!fq1E{e(ra!z)io{aK!{R;F3l&kZ?&w-wbZv8 zw*&7t-Z?|aE8_p)dP{YG{F%GxNU~V@`nqRq?aiX2F&_5Xx2P^J0UrK7UMtGx59Vvk zT))@pe>6DWJA2*)5tTHJ8wi_XiU_t-zxpjilD9%iNcZM6E{4EPDchjF5Ow$q5xvlx z4xc$xo!!P8@i-wQ_E}R&oAAgRZo70tRCr8lR$VtEw3l`8zHBG$z|k+chRvdF5DPvP zP8r*%GfnMM9{G89KU3=+l*WmdR$TAGJSw*g-n?~XnApi<`_cCM6&6pkcg5IR4}R9M zb85z4XTsm_g#z15vXDAxXibddII-!Q$CKktAV?RQDnEfP*~(aDqY(i(q&n7eP2r~@ z@F;S2#~tJ37xjdXCxci z5l@Jp6xCz)igWiXC5eJDYA^l9fzlnbl-!?~2h9LK2QzM4XDL>GEYZ;V&ut_`d%sg2 z^I9MEkK%}cBFYbOiGCH#6lyj>eJdBI6%ZaT^*!z??g@Mb~*LsQO6 z=#)P^iFW&440?pZOM@r8y%`!3XVFlWs%;B>n|u+-E6LQaQ8hI?M$5E}e~CVCF*=hN zDezVP%Bsoop{6wI0nUE_P8z?4oBZOTN7Wo|n&@=EXzwBs%zffLSr%XelY?IsHy&yR z#nE(VhSBRZBZ4mUc|8`9FLaC@7*=jX@a`Q6m#wC>^o&M-cid?^=5XzP7dkUNRBQ@G zqa-uUes>!}PLscrX?iDtVr{V;naK_AqioaI#uW=V4V+QF{iqj6@DOO-uAE*BD{)0y z!beMVP)^@DQlz4LO`loDujzxP-(;L*fnZyU_H{8~$3fNq2b4II8l|}Ny{?Ue%O=LT zo^5kfw)pwMpx|_(xQC!LuccYqJqOD1+qHF}-NyDvxnH2gEDP{@bhSG$n}>X#jaRF7 z%}2Ct82O+3RfjAbWLF7e_XBIE1`yCw@A6}|`H=@J5s~}}genoizdXoTLj;d&!HcP8 z)@D?~ewcs+Qi{~5^}Lv90mu*{=RfJuc8tK^cvFdtuqH}9FwqG-TO3~g(HfAKj53n@ zQhfrRxUKq&YH$){MdVC_B*TCi_wcJvh9UO#OM>V0k}gV>@6IHCdr3NUU=LZp>&o?jsmKhptIFlbqfDw7=MrNc0ub6# zJV>YRLH6P>-uH(iK=25IKM@`2Kjc1&p>DKw{3s_cLT-8H)S}ThQR#2k9aR#`Xa;u- zPT1>IdYzJRc~yOx1`YvGZna5O+kin z<&&*!tgNQKPMt+XMU5m_>cvGx?|?vH=w;WtozJMKsF9@FAW$BCPWFYJtzW}n^ojMK z0?&G76KKKVgXEtnf#8)|8UMQM?;qu)zwfWweJ+vHdfUB(hERQIm)nyPxBr`;DkKha z$KZ>#(-mEEHE>6^1fhbY?9_QOBMzFeJ1+OI41hI()Z9lR3Fn+)6y8=Pl zQg%FxG3(Ep7_-i$pJ=bUU_!WSt6`?)-?yO{B#6+ho4Euiia7r2X|srV@-4U zn=262HO{5QAQ)8_&)8R8_RQw5(z>$s--P88>}?^1+Kn*Y(kCqODCScH6lTo18)DEg zsr57jtO#0htb^y%zE&f*t!RAa9#8crcqT`*pw@7e6Hji|-fyW8DjA8-P#wy&o*vQDW$Z|(37R-skdG4;=oK2E}~s50pQ zp0U{o3*6_ooiZ9BKF8JI)g<1?YS6HdUlC}}dxt-m8(z&#HIZ!3WrrW1usn?-D4}s; z%KH%`lwl@^!jQR!dQmJWV!#VBjl-Fm-Y)-rY+BOz+e&CZ!|~P`sXANd;&=IVf&!t` z#&qZ1DonZ0w(9Gf-3)Iz)*Vaz6c+iw(+Q%?LcL*<+@=S_M8#(BOdNY?XR)4*gB`nq zw+9Mry^1T?tg!Vy#r*LAej2-toO}#buqW%`6f#dTh?taABqdrDVyTIja5D>t%>&K& zsg*eVn{qb&6p%7mq;*_tQHjKj$ghPA`!nJ_QxWz>rM6Hz$xhfDLO zw1nnYfIF^Ov1NsV0C0ZPRHkD?Lr7;or%3p2;UAenCb~G&ySA~V$fAE!z~98pW~Rhf zPFsE4ISxq1(Zok$v*k4FD0vyLX7FNa5{x#hZ0m>kjAEEuWx{#y#C(kmviwWV%|t)7 zw=7h5*M-xNW>ooZ>I&>u;cH>f>(&Jx7dUG1pD-tCSdmc*3w0Hzvu{p_y~S^-t#DHF zeMQ(>!B?g?mZ6YO@feZ;@i6QtQH>?~0!|RpG*s)f5fA)TYh$ZP-1ejQ<`m^(cm9Eq zlbR=cM#$IHSOC+XWBCveP_A&N8B65QW&y=6a6D_5JHfu+u!w+!uC!Phpu%5Sq0sDS zP=R_Y({Z6Oon-vvP^+Z~3cQ>ll;XL+?cd+l<-@2C4M6SZE5cCZnQ)Bwrj`oC2mSD+ z4Z22qJKF*~RTXAdr>~8BGg4I0`jq#In}wHeZ%KjYxla}*nc6f5KW7CX!R8laGE%{8 zzdcQbADLQ?52c9ue6`5j=mN91O+Cm?@<=$ydhE;xg2jk}k2NQF?o=MtkDhqEAHDMi zgU7$DXRd8_R^@OXI0ydz^6&8MXMDqKCQ&d|^Wn(t?tg7H%v5ljO(op>Z9J_CtMT+n zTc|zqTXe4v)S1rRWy@gx?eQEZyRdp)cI6~0AFyTq#P1)JEj9G}@=x%Gd%uqnJX=Ge zDnBzN{e$ifzfsN6Jd{0q_G|p{Q(lQMpU)`s}9spC-$LJcCktucA}dKQ7lP@#&488EKV`zRpg8 z6v$!4{)_0^FW7TX7xW~bTlTWB#qqxNvn6cs^cB;`X)$qiS9XM&x#al`ZK*8tIG(WF z!!JZ*GVG|J-u-^vmWTGXP*=q8+uxdt0ON5l_1x4CF!?sgW@O~7 z$3^Sp*N8&FjTgVQOAs?(3m+g^=|(J3MK&|}stiYxW` zDT3{DV$4ED_X+z1LYgb~=-$GVs+JzoRt}Z1pUX7jItml650G(-;bsb>CG!;HH(x0D z$mXW9NnM+LJ`*tRWwX>0wr6$?$Phue))-NE3-O+ldf z2Db`LvGoe!N8@*T&dNDX?4;ZUQ(S-uV+clFiH`+PAH_Ctk)B&gqabb@ z40xsKxP9E0ats#Sg@Dojb=Z%V(dn58TJtk4=h;{M1l1{|e&w3ysFH5vIED#>Oi8AP z!^U+4t7x6m9M$@ujNgzKP*ol%>qq1^t+Hvg}ZZ^Pz2 zrHO$2A8GC8?z0XWI!QA7X`Is!v~JM|f%uYX}sSlx5jebs-v)z7ixCR)$Ed4w~50lWP|M5$$!QN@oxCF|-^$7LgrHA4Qrkrs8Q zEyQ?F>XtF0?jqH~!0u~7|4=b;m;7B^VB8o` zorU%pmwGq??deW=$_h*Z zHMVVSY&K3~+je88al`Mvzb}7evzxoK=giKTdFGk9=Tz0$Ope0>yRS0RL{ActYgyVS zB(xv)hD=enElW6@bPp(CCR_X!{S#Qei|Hfn`7Ye2c3V%D1(z?n%F&kveG$>3^rKbm z20~YJ+Jr17rNcl);VqGyi7D?kEaWgl_OYslwB9!u22In#W(xD7YJ0bO#8r`mtbV&^ zCWf^T=NKS(3aH9_-9vo9YckgtRJ~pcw~+&fpu40(2F%+(aQE8a$!A3~r?|>*ysK|G z8ATp5raz~|zbOo+{JBI`OS2|#sxK5kVR-r{aa zIjpovAG&PJphEz8U1oyb@wccW{dy#SJgPrae@l(?z6nk7?`C}a+9D|QtSZ^_(#F^u zKRp|)WK$P#_1wE5b3GpaH*luA&ST@^<+=Bm-5ZDGxr^g|_i1J}xQAB^#jn}`tm7QU z@3vcT7{xDZuJgIiU)p;`P_Snqn1Cq$Y^NNC1(1i5TL5#6T8C&(8dq>t8O#BuE_vxP z1=m^F;|8(r@glGDr8{;09p%8y0&K9bcKfhN2sI$j*7+nZj3P6$L=R=UZ)+=Im+-#( zk*H-3LHNO?ZQ=6m%8+SM*&PeTDmT&JXp)tW2f`pTgzI-fl(Z zv(SVS1n(_@8;#c4w{8?P!LcvTB2>!JlP;Zf3P^vS#?2-{)rZ@JIGD zm~pmby-o8YIvAv%7vP~kgX`r%)oVQ-EpYs3%0ZoBdCX>ko;Tb`3lE=Yex{FLO#0ub zY!x8f6%wla&TD zv^w@|65Bev$SnePtHxxLZTF?I0VE_sk<6{Z!Kp9H_-{uV$}w^a&27WHmm5>wGJ$B~ zEf)LbJz#9ZdR{&;pN))P!X8XE*9OcF9K)~hF#gLz?>&OX zk&<=(x)dS@m!XD-64LG2eQn>t?xgS@bL|eV!~7?3g`=9dGoTgqCWwWNE-^jU!!?y| z3P9Xf;+s_RW7MwaM9fCzonzaR?;$6uC5 zsVJA2oAlXc;rtRS>%@W|4MfPzOcuFj7Tc-Giq#Ko&CALI8cxHDFD3bNP7fULp?PN7 z7Dv}gX8oQ9v(*EEgGo*R&*;%#|h`132YS4 z%|@IS1Z|)eE62ZLpcWWe=yJS^UbK|^NRZ@xsm=`ZElh0$5{eGiC&BDhoR^91 ztkXvl(Trb(%knePTj&qK&Bl5tVbyd)!>YW?oW?r9DH?Qz0lF?YX@wm7C5Gqj9yLDl z$5Tb#%^MGV%PmzS{O4kNE}aF$Wtesj1FDkouL}@l&3BiJ>8HE$585{P$qak* z^^BTJcQGMVigUL+E?>}oYx$mQ2t!ncXoczv%c){b7tBD4at-Vcj5T`FE$E$TT{B@q za?+>fc@uVimTqOU@0wYi^rZvqe_=eeFi!KX|CC zpP&-9pX^WWKj>^V;;@E!rN}-B*N}n8d=P`HeSGdHmFyykw(@MugO#xPhf4wQ@DbbkW~YKQ1j7i zxM=}a1WIppg@MT%xuVl#c6dXN!`x%!}SS9mG9gnbzY|0Xjt{wcK}}uFme=J zRb8Wqb980UohvV215!iZg>^Fjy%SOt3u4;oE$kmch@r8N@F223P_E=_Rd9BQ;m-v) zM6bV?B+&66C`4)tDnlU0mo5>5fUbOI>Oh`5-L7f{vp~8QlCSPFrr4pJJ5(1;(B7^Z)mN zaK@IqB?bE(piFddHi!|aeE37${^L(dn!V+%%G@nv2xkF);b+JX1u7jEf;7+HM56Fl zk3o&XT}0rCoxA2*a91~zyGfspV^Y38@>VQr{~S3|{nhSfVAh^EZvYveX#EI*fP>Tw z+7gQYg@b4HJ*R64bi$U46OXE@u#uV7J-XPGTX8DF)P|xSRp@(&rb@_>$zy2wCu3~z zZwvNF2!3kXjD7{X!e+`T)|2J0&M9!*^g`CFOZzggKD$Y9;fFdtqn*?%$FCqRue-`p zEwDMYosd_>PrMidZ!-pS3T*~?CSDI{?@a&|qot^jo;b4ezDs6nvJR%OV z`;DGM)d8=Cf&t3kL5G#};$NDWHRxdv+Bq9Q>ENZVoUcJa+@zAKw=MK$&}rL*ky8lM zWZN|`Moa2ibeIthh@J$F+@AsqjQ-?aYI0us;Jr)jfCJpg1j~L=O!Zy31;4u`jZx@S;k4nqtzA!5^((MP9L*es?GDv8gb0{JFe?@SLdZop4SCO`7n!qq1(})2DRzp z*cL4;XCL`lj0l6=XphIr-3&$xID3tfn-TS`f(bm8C^Z(btH9q!MORa>ui-1FvxpVS z;$nrFtt{n#)Hy4<21M*Oqp6$gTDeQsv71XJ>q^CFH7Xz#W}b@|CEYk zn7*z5REo{{hYVs`$|>inp=w|#Ty8pPx`bV#=c3kdRoiY{jI_44`Z!vwy7M3@*M})O=GkGE+*(* zL)74%4;V7%a42RfeFH7Q&mL9JrZ1eR8WwxR%xy}8kXxt^EY?PMD3k%(ZM|D8JQ_Ly z)eH+O4qu%sHFW|6(rf>qS{K!Vucy%%3{8wcpIKpO|POc&97{&F^0O zKyRsdsGEUrq}QtYgS6bRX6-5}iTj{GOinJMM!pme;(Au>4L(FGOvDCT0Mp%xk-P&P*Owfk6s=e4+N|45jpadk65 z@)ujoS`J!uQ_;&8I7#w3!?(k)X9#i*r(Zj=FaxNuBn2a<;wHK~?!xwp2TN9eT7VI0 zc5N9`{bBl5yl38&Vw5GM?6`{5S2u*r#vC65`@L~eoQHHNiFSyB1wkn^;CH!=a7zgQ zZfbvcXFfW&TuJ!&@}F7c5jVyD zKb501p=B~~2U*?uO85!q^QcI-pdYbvgKT|cXrm#VDgJp$5MzWh&SULDC zl=!>3adxGm=9N_%aHtjMS|8Wd?8~{bd(d9uD#r1fsLW4fr73Y(SVJ%2Sxlee_z}{6 zR+|j^9~!k&BbhoC6Ukg^Tg1$n)1LHvl=fdak?*|($)nGUEk1;`^}?Iq)-Axq2eCA0 z8B6j#>g=nSDk6Ly1c!*{<<@4eGM^?M&2Kdqv+!1fVV4|wruUu+sY4__{W=04{^niT z#V|$ay1WLi0x+xVs38tirYjht1M@HQrr%X^AZVVHu_1x8;9Rx;DdOi3bqcL-Id1e? zt_L?Y7=kd+{W2E+<|L1vFP-mG+YPWU8;=g{7S^1e`g}^SifU|Uzht4KJrzG5>$H+4 z9jp}YffpEHe}Pd=0L#P=EQ3ZmmHKm{1>Hztgmbl1?&kF6ZF8JpE=mre&?u9?#Ak_n zQIKjqu;7I*oVojWN$Si_92@brfNP>H0M#t8Md~9`VN-d_Df&0%TT~|82z76KDtB27 ziUdd1Q$pL`kr{-J#+Na*%K|!&mKiLyQoam($z)v=kT;Hk^+^Wn-Z0$) zgj=$1+rih4>#-0$?ut;ktL|T2#?HK1i@$&La1$!nrVbxSa#ncZrAEC5%Etm6kWK07 zQL!%SlxN?8A!o&qsFGu`Lr96n78&ZRdL#}0syY0p^o*x@4K1(`IV%ug{Y0Kjk=5+k z=2lkCgNl7O8bWP9#T2Dez3uqYK;mGGh}J+-p_ne+{yaL&7u4gS)H0wJSwBn`WuS4J zeG{)&m0~zF5+Zg{lNneusG_I!n}1`6y;W|5`7(FjPjCHNmS1nZvm}d*N}of?D(k7V z^vCkcguVmDDgsvuP&zWnrF8i&)uLcg)l39`_0zBV@<&9M-iv5AgVW-AE&m4Z2J#9& zJ^6zBKt~fH)>IQwAW>z(<}ICRyjxdc@mbk{Lg$vvIR6_cC6{d#40*`9zfa`Bh<95Ikq z&3{?Y*YqJy&7<|p#_F-$_G^L!8E1VTs}O9XXoLeUW1ZE}Slwr&nzJNc@f%mQJlo_i zQEYfWi}2FmFmn#y{BRyVOptGK8lN;5Ex^2u)_20z*1F1cuvsu4gdK4ed&KZ8AHS4} zE2JGV{BlL2M#{`#TL4+&_4_4fPt4U$tbIDlz7}El=?(uXyz*a2`+UNN^!V`OD_12F zE5s)$r$g#2bY{m9@-*39jVBhPp*MePB@?vMtyenL7n1*8&vs=ZVT|MG7JbkkW}*84)RM%dpuszi^( zx0EyQ>ktB!A2ptOM3qa9kWL9x$;WZn)}b%DNmqhyu0t$zQI)diis9t0*@AvxUv?nY%EK>>CU?2aOA*hS$1QWQ77-As2S5U@GPQlC!?ZkSxVpEphegGY&t-) zOK^Z-e9e@q!gk5Dvu8KD(UWVLXs9DwELTh{qGT zn6wGoQ!RJ3ERI;8znd(}*Hy@mPrrpK1$w@njMAtx#ipHxZr9YskeqT1`|i4_pyKnGN&2J&`>m?p0$Bk5Cq@-F+(e*VQOhvDBRfT zQnwzlnJ#ZdoM)@E5LBW$jp!$^7PQ4pXC&$Jr%(WgPAQY zf!z`ypQ@9KX;p#OV;}t^mer$)zS~d53R($ux|(6hEQ2ykE!1l2z%5mb5vaAIN1Z!7 zudsU*Y3-p#aRlclOlP`LnFi=Cgb>9|XV<5kLvy}WnM-=Dn0Yl%#G5T)W#MIXIm1pN zPU-nUl;!nFTendUgGyPnS4)K5OA>3d&OiV~+g*hUAZBc-N=;4}9RX ztzj=ll)K4t(dHU-4wV%JTZ*6BcBs=)%k*JE&2XIz(0)qDe#NFK;a;Vtv?C-X137l$c!q@wZLI2BZM3+ z)h?_l#$MAV@g0RZ;23&#Vg=j1D`_|KtiM4r1)**1I0AC2U6}tlTuJ?dQtSzkx>(^d zr^jGviIZ*nR}E^5PKE=zr#Dz*DQLeQ;ySPbVSgC5!}xI%EFSW+tGl4mSLv;EJ?kU$ z7fI@rWV|~J`ZA`okBuC91o5-$Pr-cpXo}3-i1FY2Ek3GZ94j{n&YkXz!U&uGTP3a zGz&M`@PZ5U`K{x1SVsPcpvRzZOzvt->AXpjCAv6nTjVWDRRV|WJ|bV0?Xv2DLKEBs zzTg$Z_6V$=^PWhE2Y8K5zr#n@?9?{$UP-U~=hVbdrFFqd)C71)z4t(Nz()N0fYq$o z;et<);szcQg0XIi9FeKKjf!EKILFFQPuud`8k^qQ^SclIg}Sky22CTbnj{pztAk)^ z{u90ZDF(Y_C8>>Rt>B_mm3$Em@NtEA#y83H5%2_95BXJX0*vF}*7B7*Vcb(e=n2#( z3bL(GMUBe$+%nm|(aBuTEgB^Z4%fWg@erKq4LjBo*pbiij}@k54fmwq-G|=6_6XxW zylCHcowE|yO0HJlx;?j?bQaFy#x|(9$r4cj=Jz6mywMWnx^ z1VlY`pwQeg+Fo$?K=9--!;U%G^~yj|_NhpN;4x58=8`Qpbp-Yt?&kw+V4a1p8matg zw33lXh?NHFp4Wfx=aJbxGYcW}?K?#f#g*9|Hw!@u1ezlpPX{FP@d8lBkW|(!lNsxld%p5#6+OQ6w&H_o8a)I83 za>v*doaHT+H$zL(`?XcIwgC1FJw1BVc zHr|QCg%dTA5j(iRHG~xC*k`lU4VL8(YnzW!uI!8tKcx3|FzkI-XQ|53d6q-9%{LX2 z`KSLrC7UuLVkc5--sU6$j-pSVvH1Zyd>kL_o|pKP|Gu$Q*SNn_zDWA&$M()0?E-=a?*H&lx z_LJNy8DW)wb-UcYs*BG@J3YSuYbD4;Q%$2h2?aXv#Uf2BOO@L`QWs!wA{$3sKVFnF zrGa0V@DFJPU8;Y6K9dqNHivtBufUezP&(3fun_6W8K+`9i z2*vUh7YWm72U41!roWt2yZ^?Eb^)Q1_$~R%;nm#hr_*d~q@`trT_63r;!Z8? z!K;WPK2r_8@=xzs0dDYsmmb2m4kOaGhkcK*%wF7W44P zo@N!2VFLaGa^8&Z^Bheys?s37^0Aoc8iIZ(YoneUBc)I!3H~hmFig1cSANq!>O}~I z!c2%iQ_>L*yGD@SOCdPZmgC^%O7F!Z^$t&_{t6`Q#jZLfn;26DJBu%OMKC8L$gzS* zy+9nSxWSNYFFD%6ZhkigN~}PEeRRQ5|2sQ1GpGaF@Wrff3qL%wG6$-C6?iLxHwfljlT2|@H9MC4ArjxY6(8{qg@NI{$duE zS&`Vq$^h_CA6EG7k62I~qLLrw;x7?Rq-k?y@06!TryQOy34E`DRJ;oUD0gqXR?T0tPHyA;tk`;Mo1&X(ecDN#zp%9{w6A4;M09c@%LM0kS1K6=-IlR>Zj|vi&iFsxTiwC>_jl z(EW+&oa2P*iesbjtCR5w)b1{9=31$|waAnfv6+ZAu2?a9D-ThaX@}Jtf z%oRHv)B~zWpU1nrciv#sLZkN#Pq-i*>``-p{r;4T42vL7+L`FW%;-xPRjTAuBoPV3 zu9n^}7J{+VNUOu*<@KGF!TIP%ny^@%^k*g2jjm?G4(%70@!!?`j|ngG_l|NHG}_+aF%Ri%dK0~ zA41rIUNB|#H}k&FDaL$vG)cDM?Lauipzi}nnQ*xEXU76V7Ql@Mo^?C!XH);cf$dYG zO1!pVtU=NnYt3gV5FIvNl}=zwm>GGb zl<`X5O72D8ks$p2QrW3DB*}^=SMBzNhE=NEKQ2=EYuM)J+wRytl`Lah2hfi95=8`% zrZ5s)^948Dp*jlzzNiH@t7^VdC(ivl>eb8g191q>mN%*NOVgL?Hii%NmgxV{i9N-O zWoO7y9rW%c5*29@99kB>l?xfx!xO*N0n*0s5%WcwvHbA~v$;5VW^KpkEUZuax$IVc zgSe`beW~AEj5-y@UbwFK_BCIrV}dF{%%=86_tuTb@JV6|D{%(whL!%!NY0{x&RE=E zYmo5EzDfb195}ML8FIjWxpLgZ3xtI-=g}8y>Afqve!42Vl%b1_Qg6?Ta*UOLs;hOvZ`A(?kh9_gfb$-1y1550@M?(6j8u6n!9 z^GMcmKsAg+jm=!mefTO2Zr*VrIM5@Am*{xYh>RGea?FqNX9a5*q;WX2#? zC3S>b5mdaUj5`U17w8lwjISqYl0)}tMry7`tCLvOEC{79t67#U^!nL zBNI^XwJXd7j$P}VD_)Ll8a}sHB~XK?JO`B%5SeZiX3}+P0et#$q!>FM@Ua0$`SH}v zH`aH0wk?whJ8D;2z?|ZS@}hJX3KyV@igfM1kMZ$VYMeF8Z%61Zyogjs#<@w#oGMe( zL=l_aAGw6>j2Ak^hG-o{%{qI^~P5VIbaX?7TCb<3L6ju%2acF z3k#XNu^cQX7jU_YWWE#5JD33zvrsD0#R4h>*_Z!S2vmR>eMMd|Z)DD@0L#6n&RXm* z()zjxms#|frd|Zh=xA^{x+7I`ur|sP`WdMrsYthE*qoi&R^hyR6>3gipzQw(1mta& zlZ3n(gw{7d3PlCcYB81)Y6Wp5+`NVLBLUs>qti4kc2}cqpgk@tQ4vRv<0s;)TOY}>1n=62s#6}QdO)cJq zssF#?F_5As6GqGhvN&4-)MDu!r9T0vW%$S+_wF-;-v`u@^tH#sPJ1d-=eJxc9Be(# z#;WCa`~7BnGd&GU4?3K{AeTLIwmaJu&-6w(OjK0VlPxk*QspmhaG12DAbogDWeX@s zcvwtYWnqvo7+4@UI20uCQ!9A|pI4TD{qc>YRmtPT>*<634Mi_G zooim&lq#|M5jFGWTzAU4LPp010bc{^ys&jNNn7|DTO@wy)&cFFGl@8mdc(U?#>QYi z0-r@#`gbs=uB{Y%de9!Xd4av0eHR7qMG_n1-OH71;r3Lp-=g8L$L1CJvqhl*xIf4@ z{kqLSfW0^++tI8WjVGR!?a-DKd9ZblkkwMCmh$8SwB z?aD5`+RqERU{-A7DlE(WFBYlDj0S<6+}zGaeyF00*8NCdOh2Y#9+Vd z5sYP;p)OL1q@bG{^p6b8ef)Nju50wC+M~(WNc~w7F+{jn@rAiq*U0dS1I>_V6(Sp%wZ{Z5 zFc0W#ZXQ`3zZW&}H@cE~j$EegI!fHtLcY_gqCyB^OyQc3n08@sI`};edNbpSI=aDg z22|2EKG)Ls^1x;#%`3cIu%+8F;jc#EU@KTg%(_@3U9YRt{SB{xdMjoAIT5%lHS-xI z(yg*Ew=S95TR0g8yYxfpPEp&E%vFq4USc=95U&fF3%QX^+_L0dc(!dJP~$_9+;=c2 zICVP?dFX`_ce)&nujGzQbjvy|!p6YLo)F$!E2w)p6W`<=?%8K9=4Cx4ltN@*6Ff1P zHfbwJajdTz249A5_!fP94*G zHv_+fafnbv2)lNE2=mg6Dp^~pjy2@w!BU*+Sy5KE;V&Y(6ATfv)#fGtN66UWWARkV zq^%m1(~uYrkpXz}8OnYGvVQ_|ZeXOZFLJl_inSSNi1Wiv2~Q=>l-Bnv8V$8ju~y?W zrcUGG4ftIsQX$@j39%i#SXGOesFI9w=>I5j;SJs48-wS6pA)--=e{MJh`gzkk@9bn zrsoD-M2x1UN&&01i@FQ=x*~DBZoiMg)D36$FwhV1ixjyn4|%g#Z-#!4OszI=^)MPy zA<=w^IE?Kt8T#!b%~ey`@tZ-!gPhI>4B1ZnX+_c>AIDB?7S)RmCg-7`l$@Vts?(wS zOzD6mf_M;z4@$?FG(GY+wM}&bO>O^Wt$WmsF}Q^kek6p25@EYEhi$H5)wcn3j+aHB zNJNRmi}VJ;YFCmE)0ic}>U*?_fc|3J-+IN!hEZ5)?FfhFSQLcX5PW3=o#?JoQl{D- zDCNK%kp0y04&FC)dgLVxLt$ZnPaI&!N2bAgQD@yG2nI~96H0j#y5XQwv5x9PbG8%v z#F?IsrP<7z?k{(c$%?!bcTbpp%hYSl}~pNT%*sC}(DvwDC#zX;2p(k;Vw#ml3xE zmxpG^a|OD~I%3H}0glU#1{<%bM6uux5Q&q5Nlb>?GqGa zJYMI;+ByDWKtWC`lh0G4xa3n;UH=p;KDioS^g$+wtdUL=eT*5|H-d0{+^Vl0AxJsS zsi9PNaXyk`4WWcC*PNZfdh*VbCzhP*BvZPN_gVED7!3gdVcaitiNS&`acdNA%rPL#B3_ebE(92`;njZ%7ilD@~H_u_#Z*3&#-TIx29{h^Qk-F&fUPMqJi zrZ~0h?YG6;aI>(n=4{66%Ahxsb;OUxIRv7&eIR(KeADcay!2AfhWTD@(=QFjrSIAL zWnFnehJmhT6rpjuS!5>?iy3;C1aNOi>-BkCiH@>_$-_t~WX|+89DS@YeRTw!Hzv8a z`&;DJ6y^3!LaA`yo^aGF8~OH3`1x2wp2Xp65I$r%i|mfmj*#RiwEuvp_9H1EN0CN*n*g-^#y5=N@lB%qm5WG`NuF2jR`As*M8wp~$%p+wm>q zrE2;r=)U$hZ!`9Yd?<;#s>%7{<-IZfLfU&zHa9v7oZF{&VJW3lao(#; zCp7HhhG=8eQf5NksIpi-PZZ^9J=N;ToqSFmz}`jqX(jj3gA)1MDmOrUd|f};z_%*@ zE*tA4=_hx86K6tp{i}TcthS1~lQjOk|5DL4YO7+iUyqju2XUhT&OpY=>Zv`SildUE ztbZP*U|%-|XSpn(E&}`U5wn8{w-#=9fN!U-^Xo~Xvf$y8m zdAgJE(JeQDoE{qSkDC907WewA$IIA62Z|fC%B~#Nj*U->2qToeK90*r@`s)aY(J!D ztpn2moOoerkpPXxS&bNxD$dS;I6{NYRs9VcfC?-P9pT{uw&|y|u_}5`Nhw!VyWjh6 zh=PabeMPQyK{2otw&KL%HTHZNnCE$*zwl<#20673Jl=GPVj^M(q1rN(3{Pf})v)-Q z%tNxx>8U3!)Ja@CD}fW*C+PR`t;WksaLr1p`)A^L6pY^bxymD0S~Rz9SH5oJOy4d- zHaZ*-xHp#-PC@A{AeE8$A#Wzn;L$2tc9d~4Ka&q=Bh3>0WUlGB!V>#NKbGYR5So(5 zP{{T2qV!_r63CZFD&)^Uy>!>z_;WNt25U?+-D=7tjp0&pLD;Z5mk{Rj1Fov#@~%`y zgY-B4IUiSpMJI_Bs`&G5gQr+R(tip(?M<}_Db%jI(|I5j37p1Xr4;r+%pfRj)eqt6-_OhbrfGLx>kt5n(=D zID<{Q=h+I`ky9)jS>GrbhRQ&m*@x@+IDsZbf@ZpUxfta^Gb|^*{eB}XvbWhuBJ5DEykrD4hgzVTYT_Upe@fwu}ZVX~0x ztt$zh3#J>;9JGSr)*_vo60fhK>%~dyllfUI%R#7Uv&6binF<7>`uHPT!|snS>CX%09**0g;7wQ zagboJmw>pr%1hRcJrHQlS4*6R8mJQ9RM{FRwwp`JN7<7G&>Tgq zc5d-sf^Fs??x}&eh$|=PAt!P@XVG(-at7{Z@9Vs0U_4)Kn`P37 z+x77z9sJ|UJGNU!o+P7467**=Lrhcs z9z*2X4>#Ro{CtaI_Itzc*FE9m_--7;WcKGKcmnI)kmEa&%NSf*_W?3%_7o)lGYe@p zyu&FUna5Qj(8&l?l}T61=g(yUztf+#T8;#$l{ zr_HTTz{HJNeXrf)2a0TW_YgZ33+qIz zvU$wVZEnxt6>XHl@)7*b-BGG&^kH3#uI+}erj>HR*D+E{$K*;=Ig8r_Key^uggnAY zROp5wU$Z{DuQIZi-sjUmX#HV;qxEqXNE=Nx=0TRTuDFY=Az)verqY|*L;w)7)tt{} zf|Ke!M{b+_pdi_@z<<75_<9}0F9Yu?l+?+#774|CDk!yO`nNO>7(eZ zLe1Ce-I2x^nEe9WWxYu66=(q*y3L?qqX# zn2};KFEUh$VL@?AixN!E>dCXWBPJ0sb1}eYyDghVws|@`!*$e|Mb)GU*CgPJ<-UPV zY;uV(tEuC%NU80O=sBrhXh9)_XHVa-F9HE(%20u>+1KE} z=Qa}AcG@Ig_Z!1%HVt9z49XPcfqIz-U78|yJ4sni!uQML6aV`Vz56P` zvm-6TAerWc6cC%+LGEpfz(?A9h=U)t8KcNd)AmMAC#4^=^bXml&ON7?NT2PWVqzT{ z`=Y*0iEfjEk*Gf=x%)!&CtF1n1^JLbKqUH@py!W42V=CrFZnNK?Kl$Rr)3AZ0Ww zFh;U`gPTe>%kb{}Orq!Ntq&R%!5ph5jOKbcZaCmdLMMMJl(w``sP+f~K->zs&O`XR&zR>5`1f*) z2kx(WFx*tuDTIlCX_JP&Q7i*RT`1tB%p{$_W(H3;W*)CsFW9!&ngzJNan_ z-1ySg>_m!?QF-IZb%+q(3x#5eu%X`+&Hjue+>9us&-RY zzcK%+QB^iAqB$gMhC9_?A3oPZ-wG(DREjSC8Z1g9O-SnsVV`(?h8@}=5z^ojbioyfgTIc~YhbW+NB-X3%BiIfNdWW?N6Ha)^YTDtT7q#?y8rz326m%`M6s zF!HR}jxs>89_g<-TQ3SX+*Ib^DMjw8z+a||!D_poWbw}B@5PsmRa|7^WYu=n$ ziO*5SoxEed)B{4P~K|u@b-1bR`al8n?AB zWA{}BErAoVBboiPC2;rkBZ{@qf`~C2q1`FRPgMv(O1w(@_jPjDq`=AJ6_eTC2#*Id zL;MNE@UT|ZZR`7vZ~9!`!iR-eWxsUO)ZSn=rca&JCH2mQd9{K%&`$sO%eY)&X}igo z)U8CMVHhgb&WJ?JMr!@_KQpS6s9b(?<@HF8YG%Uy`jGI(AY!Jz-Pn?OW@x?XvPIRy z;@zPwx<*(Hp_IdykKQtO<3NmQVRy>Qj&jgTYu_rJ6O?qvm)Z!ncr0R`K6rF1o_Eu) zP~H&w^$JCucU?7!F;L45ujMT@9cXf!+GnalsMF@IL|ASBuK>4mgTHl@P*Q*kRgl0a zt6fQ{e^>n4Kd(?gs}~ysEEvCIY(9yuE-1=H7=zWo(iMbLqVM7#GOQP$ESL~`>v=UB zg%_R(6DQ+8YJz^$jz<0Ps^U>zO%r(JgXK}g5v0w>nkNYhb;&h-I%~}}^|*87gNm6j z1ZS=FhU@)e$!v_dZqZqJ_D}KTO9FFKiDN0kexsZ*KO-aJ-vQiNzh>3T(?ZP0XfGp19J?k2l$JZ=O13h#{>i~9SjSX4Y? zGE+X#;c*xf#lvu7fY6jHU4iM=FI3cgw&P;UC=^LGt1v8Tp z0u0VA<%u7I||E(Yfl(YA^E?e)S|B{S$(9n9bkF;vO}&*MYYJIS^{wpk~i7vHgcU zzCtApQleG?*z+R7M4Ad0t(bUvF)km<2Qx4Uye3?0=_Ct8CVHvJ04sJ7SeZo6CB7~5 z8Vn-46|SZN_-yK}bEaF>>Xo3d)Oh-f3gh^*Y_&3fQry8bzM;m(svwOb+SFmSj4-cvh$T&|Cp zIBm#}+}e{z`GN)NFDrejYJGUP=!J>Mz(50I57yv-Uh__>F$zk!X%8CbH`eRws);=l z?Ex3X`fwPUM-XUlPqo1a?vIJI$Q1nJ%@3xD&_P6$(6Ad2DKQU$iS$-Oc({k^E2*`Y z@0ybKv6YA$kDOLV z9QtG8A6qCm<`Vvt)*-f&SJquox<(c3a(D-pB~CkybZKY>PCC84-it4?Xv9_NE(=R- zpB<Je3tD#3@&NzTa}^*;f0{i@LIT}U;I^Q9m_fPcU;Ai#iJ z{)u|+%<(EdV3;YGjmzGqa{pt;4^x^u#qE!#jn4XZGuw{@>1KOb-$~eSF03kgZj3Oo zGFc-@#i=zUmjh1`y4I?!n}-O8%puTe zJ7TX}9LU?+xqcFGw|sk}uGx70pxilSrn2+gZxQe>?v8c*S$p!guT89D&od5z=*px9 zOyrVW*8#vF_k8Rn7Mc1u_YPo91&{toqPf!tP&fdmMqs<9TE~5RYdG5m54!q;M{aS+ zP9^?WB>mX`qKm9qD7`$KW7bG0ft?4Z5cX?^fi0)0@kUn1i_sc${-%q}#uOGtA<9*Z zC#+7Np=Yte9Y1t6jisqe4^rXkS7AS2V#{1Eniq~l<1o36&d+-A7vbNt`+br9Kf>_y zAqdFB8+i)3z5_vppB&0+cShn>hbeb#tb92$6yr;XB5YVjZVg6hEZz@8x(?5SXUq3AsGwNlJX^aHpSEl73qS?PXH{a6z}J z;9ilM)kc3970mVld<~^h7;Map?Kgt8Ta;*ELzuF8P!-KqmDaMD5faUg{ zA)D$a#_GxG_pi)nUWrmNnoUN-$BPk&jhI;8u2q9=(6*3C7M>j7V;tRLm^F$$14LEa z@Ebe=^>(PHZ&8|8&=IVU$gmg&YLhhhX`Ms1%3&}C&fS3SrWY8#|`zvSV= z+ttv){X3|C@e=e_#ZT*l6ERaYH+YHA^j1~9Eh?-k{xzN!L~oOwYtyUqh?3h>WYhKyA8TRLMhztyHZ4Y6nE@W2I8J-muOc?BA%B)C+Y7xNNl}xuMj~_q5WU$@5xlz2SiU7;@Xo{lOXX!PH#Ev^beUW5k{6DI` zGAgbfS{rvA+}*uU+!@^6-Mx5=I}AP)DNx*9ic=g~ihFS@w76T*d-~q{{rJ{mW*ss) zNlwnr&ffcZlJMhnLX|Yb-Q#|nK1ON4@vqP(H?PZ=EY!jj_GobT7ivh~)&;T7W?7Uf zMSlV!UUIPW)I1!Om$55dw^a(@lXV%5!=H7BBs=a1$|!yB_^IwOExUCv>JbO0-_Ns* zfRHoIE)k~NjWV4Y8TygXK^J@mjlpSX3pW)Ov41Q9Jc#Ym^sWMLe-~2zuB#d_FY2@d zQ+L}36v>&ZN#uEkhN_%uVqz3o3SCT39S-OHzL0EXWHbs^AVN1g{I@rx%R~9-^>8!( zBu4u5Ysd|wI>-Hnr_0bjXhBFqOvGmW-u&B1d-}bboDE%^jXMhfy|FtONbS-Bu7QEb zt%~~&23zbg7&?vyaerlJOI56wCe**q4)Y`1;0W)*VH;jV z^tMuRn|He6(y)jq97uLwDjE&Vdqpp>zTiod@+cauK(PkWN85o)@=)gfT?PTE@VH7q z)ukM2I)=EGy4;nLA86Hdww*Uzc~a5R?03NFM6~26a!8SxR`kXi@12QtslQI@6nrIM zs*>F5*1Uv^lE0~d3-c3GM2wqL4zCzsmlOthvO2Jj?-`%)L2U2#>}S=>L?S8^GA+%iC#z>1#K*|tySA!C<)ilLK<1u3LtF_= z^hcL8d1?1U2k~i^aqf;J-A-x2hAIiVQGbw&?hIju0&YK@A z5R!sYv30RCUv@T;h0{uC`^szBnDKQ#r9R0mTT3a1XxtVTjAV|Qp~i{U5Q))+(9=4s!C6^vwaTV-oJOW^P!^~D*eBVgigY%@Y#U`!NOD`mTliSdMK9Ee}i z9BreKOH6^l`o1cgCVkfh5dTI7o{uxi4BfwtyDFNLh%b;rQ5bmg7iOq-zlAIkG6H-h zTduNj)JGD^R9`eMyuzsWTyBDg#XOFUEWy30&=ebA^&&R9W)h?o)#VD?UHO|PKEC}aK1IsX+u)bX+TtB3tJ({w+E{Q^0; z`y0^b40I`D2Oe=#kf>Xa(J(5=EF3&e3syT3(vO%mF9U^1nR=m9IW)x1go!bx%29y=Qmu z?s06qcN}LPZUTQQxfnWZPW}q8J-|tLmn%DHamgur#LWwbup1rxS?58%1A(GQf5TNWQ#Hw3lAKT&C9QoMopZ;`paQ2eYl+_UnmJgdWZp>&=lG{ z!`N>35ueV#++2wgB|1KQI%wix(Z*M~h3SD~w|na+dWFt3Tlls;%&-I}aUE#O8I$zB z(?L!n+4ikrzJx9=W6`4Mz74(YnS!SbLv$#>K?2qK?M1uHGJo@$;#l2{8of1}W`5z| zNUn%m0ge@j^C|@FGp3aq3zYy&Vp?ab#twL|3cL7ETkyYZvEdpXEQ?lJU`EM0DmY_r zl37wFZ*upjbdseOI_sT2D(&YFyH`ke;wWq129}2oAXkW)BYg>i%b(D<%{#;2Why>! z(#k);*TCYPEa)kwAgmG4L=)Dyrxy1pNKit4-Tf|$J(t&*tk1%qf2ns^`&8|6-?wCg z6I%JB;C#Zrc%y#z#)x}C1ixIp)qhcBvt~jurSHd8w_&H5OxA3hE(A}c43wH|yV?c9 z-{XcT3YQT;;C;lJsY1%+qTD(n?UCFb_bQkDaqXdBRNuH$n=qTB{ zV`;^5*QvuJE<#N7L$^_&Q07zua_9^Y7koprSW|GpSc?tCbHskqoO*}bky^onhSQNm zYuFw|o`6oeeM{rXe8MYL?29XuNNadPd&v`LvmFdN>d6R;dj1;Kia6+sc%S4TCu)!l z`M-MnW|a7+s6EMLo5KIl8nQFZzOXwqYg5rWzm}Y;aUmx9OW8;Oh5QEUh?x!Ma)?}w zQTVHV^iBXV@g435QrV_=Z9^+Wd{zfCHplr3jpJyZ=tkPwhZ$FHl<9jHM&m0#eC6zz z7_9Mq5hhf4Y5B)CZ{& zZjUhR=lGQ!%#5T`yU2tuWZ-w)tE;%QbDH#IMqXC6D5QVIc_-a&OG{40y zq9T%vPUXew9cE6A_1NQ2|9VXEdb+7rji*AG5`-_bV36B@rXxVBZ0gZMtv-xcEhkVk z>*j#@(3i2p%ZdTjh4A&oNy6vFTdzP4D{uMe94*0i&N%Xf$mwFfK& zC)y?o*`|QMVvXYe=rUMOIh~+^TJ-ybe`47go8d3qC53=|)J;Lt1V~r7du$7n!*!cD zIQqra6jnR@x-vU^w&Z^BwXTdL{R<6L?Ekd~KJ>WxUwd?CWb$2r_E2a70)?mmvmtKpgjpYE1-Yv0eXkY1=hS$ohju@c61d{B}ZeZ|aBxZCe)DK^X zLBAu7Mue+epIs0F0K#FSLt5XhE5Z_H^@SR4zUrTH=Tf{tqiD8{s$` zuh9g9WMF_i;s|~8ybe@1gLII0B>;MC&jE zy$eZs4@_lmGzIfL^#cn@aYclcDhlb|zV8N`0xg`=1LLDvKOi)cd4mZnhxkJehsvH+ z@xp+p9^@Q5dh1EFLM8CT1bNHO#GN7@dUOKu%dyx>-Gt75YkIs^0)l!hZ71>a-RPS` z)1ws!Dyiz?$yfapFoMoUXty4B#m8QzsX{{I+;9W+Ui$y-?YAV$QjT833;=)fogJSc zRf|-RdgVr5iGQZ`~7 zk~qC4>E!sgbPo8P|FmS+tCoJbrUST+!D+35#*;v{Ng8{k-@3n{S$4nEVt?l!Ty$aK zC=_??{jakpi_(t;D%7nyUX|8uk{)oD({7;!nzUf7Vui(8Pe4^zJDQ`ACRwPy2q>iy zkU}AVQVt(^|6fx97~~h}KQ-;+0hTKov7+!((zbH_C*Y^?_?-mzSq^gR76*p-Ka>_? zP_W`2eG(=fO`&B7bI+V<0Xx@UH-{f05o)t!w$RvcXR5^&-z%YDoRzz*E(nIBjKl>x-ZkFX z^D}uN87~}Ha}qEr{zLNyV64#y{6m*)WoyDDYR7yd6lieuaG+H9Vztx}p086*#Q={` zj@)Izlf{&^hGzNJ4HqBJGL$h&Sd&zGQ1kScr6i-xyYjp~a*W`L5$ZuY0y>}CLH^_w-eIzid+!4?@V-hid8 zk5Oq-3@X%OQhx$5owmrWMSoeVqQGAeVfO;US-&7@hsA1Vx;jL%#CbeHDI-w@Qz9&~ z?>X5L^r7q|AR9S^8761T*fIqD=%=yzHBR zofbRp$R=n`p}BclufGjo4WV=rDaIG@#R9-;rOq#>_BuDjYd74q9snq2)(!c7(iCB? z!i&ZrG{%`d?^W#Ld^xqmok!nFFO36`jKpx+j;B#4LwPvc)Cp*HZRfwYtYmqd0Mv{U zBl@pp$oYg54SdvuhZ|xDvRy0ZX(}uqevLihHGa|xk5v+2J}iZ;P6(Cc5z)BDr(#9xD6vNY1)tuv?s$6YOD+@e)}uPynf+y9j+QfaBTlk)j~bNXV{|W zS_Z|R)CT-h$;xc*oN#SPYi4UlHlxwsvAT^8NC0mGbV!j&^~{@9DaJS7ey6VJB!Dm< zgA(St>w|h=({cN^d)4$*Cx>8Hz!liSl^0>^VkZ$`&a$KD{?H^&pv`i9Yv~7!O zEY4E+^j!!$aob8gJzyphN?ll;w0qLGSW8(aJunmg{%Q=DoACwEgs4wp4$-B`hNQ8y z%ZPcYJ2Y!o`l~HcFnViA9bCj;N;|S9M0sR)UNy!3wVh17N4J~U6jkKx(+kFn5Tvytd(aA5X!?B z{akl2!og0+&zdvSrTdBv)uJ-K)cH1q#H1&c8gzi{U|hrdkD7sSk+|A@pA)^wYWbi& z5AZhkU0-!j1!fa=GXX*a0`RY$zjJB`;4YIj7y6|SAG}ogiqq_`!#T*DiOzMUQCYaC zqV&zf79@=67Ms$n<5h2<+WaYZN|5|aaMjfirLg6Lrr-=E_zqX1uexYui!-ZfMPO zBrUOQ>~X+|EwQRW$TO?4xaSvnd8O|9|h?EfhmkIt~CgFq{Vv!Po|1VRCV{H<} zY?guf5Y~msxZH6HCmq{2EQo%oE_SVT3_?Pq3{2TlA;!_Lv+ci(?f)`*X#LA*M+;UfQ*{5n>8|@Q;cRww_Iw7(i9-oLqsG&9-ta4k0k!DXOF&y;C*rd12(u zFlnF$GNhCIDQwsE8*Dj4jUXZ)lcupy-`_NxcW)UGBK4dQR&+YpTA9}CbapL_QAw7P zYzRI|aw%&TPou!>xL6=pQjzssNgL^z_u@>9zsnRZHlC;4`!Sb8NT<%k;I@~){mu_5 zed@8nM<#|5%Q?$2m7(B|>P|yT2{CAHe2w98Ig-eo@jAwrt(svv4Q%?t6mwj9q5_Q& zS5T57O4XXSPt{|^92{kO%E@3=x7^}M&(Twdwz(0OUX&W4-V<#5zid~d9%K*cq-1$C z&D+YmF>lTJ5OmQv39$On7;+tB*{OvKIT#{X=(c)3)(lT5u8Sdqxgf zmcr^;mBQM%Lsxzsd#DXMw@Ybj!47PVAb-+C7P|jxrd08rC{Xcov;xkEMRxBT(I}l6 z!#u@DadaEKflX>1_q-d+^IU*pck8!)W|$i~{e4vAS`yN^=!mO)N0{B-mMKtcj2hO) zx)fG$Z3KB>Bk*AvSzSTyS(CzgsRHV`{#o)1*)7rdk>TaY+Xlc3&$@XnFa1HU9cGfn z@+OZDU6Noe1-?FGTg!?U`UETKFmW$o_Gg+rPtYPSr50!*;vA{SA~Y9}sGgkHNSI%i zSGiVpt8z5{uI}^u)lF7LQ)(vm9zN6nz&Ph_ikjCNDVt0Yh=6|9pa|m zO9LQEy*+sPokY4$^B(C+fAG?im{@bwb%bB|>%7IQ(nh(nvmR|wH-H;dmwNLXdIOLi z@lYQ{Q2+b3Z+K0Nd|rrrcBenCm%Al;3(5fB*brsV1pHX)%@8+98{@QoZNh7A%^S)@ zyYHwAo&ug*X+JaH<%w0ox>XikO>QS2DWe#WwdO+qbsgw`t7@ zx)=}Ze2ksdSG#vK5>}4rrTfdSDNePh z>{b=)zRz|3HpFkKPh~MC;b2OhYQA?nSo5X!pHU(Fdq*Vn1UYB>_Ke|kwB-Sf@bE24 zI7?3<&T@ZilDi=5wN2U*oAGaW6@AUQg7XDxpP9Nl z(E^#XvwmpXc1(|r?^2jnPXHM`m6tcnb@a|9mw}CFRW_#C9<_^r(q4yq`p`9Wi!;z~APKb!f;PoF^MxcYmA{miSDMgCfZY){DpH=xTZ4m5 zaJ2~1`tHwF3x9f~GAf()ianw1l-+xUm9)um6vGO!E`|89lt_7#$m^HTGgr0i^R}oz zWwz$GN1UE1l^I;P^m*8h8n)$NuD=lhP~ataL{uar(hJqvwcJ9W#DXFQr)5U!iJKCyW`qgi(_%S@fa z&RhW%Du+-?fV(W707k|F5m^xedGMFGO%BiZ`?8N5QivfH5~PU~_d?sGqz%sDn%EJ; zOl!t$>*u|p=)GpcIkH$(Yh-NfSRviO2{IiVJ?irtMC2To!HrMr&d<*jOIs~%JHV>` z)7-caB_{E@R)2k#p?Si%M6jhq9tdztNRa`>h@vhFDAi$H~?U^cQ-Y{EoB zA<+!axlX;^TMpusI9J7R-TX40#~O#7G0p^x=K?P2xh?%jbDo#`1|I!gi&nm%ya+XggeJFKzsMyxJqzk|&l17TUb0y86!D>TfZ9B2L~+<| zlketjaEaC`dOzxMnAW?S64BC2Qq$#;JI1%Pb=4faSx94=oGv(?Q#} z>>61_CH6u@TG@Tu`p!!gWlQl|`@Y3XF=FYih=l_B8>#y8n!Y;>nj;E?~eb1qu2)|v4Dl*)_zg`zLwJ2(3!Q12EG z##k2{*5KiZByq;+cwhv3eEnR6GEgr?_!4I*V|Op1iIj|C zE(bIF>g%jD5G}4enc+RE0hfQz9OimBedU15DW#?7pkj_jqF^RD6E@5G^oF?}246Fs zR!bt~B}Xnu_e0l;%b;6E!(1>+s~?5y-O#VBC2LJxRFOhp0agZE$sovAt{uU@yqb&Vd;2>X#X$P24W_D%Q=olh+{E6*8+1O0Dz;mxRoOfbz=Ny2O$xGojieTHVpN zGg7EsZV_VamOl&V8jl;BFvrB%h;McD6{=FLpP-YQv(dKB9Aw_gF@HYHa4lc?L(d=- z(`a32Ro3rc0aD9zdcB1-r`0)4mZ)S`>oRh)DI}K}#ox5?X5~k&e$d4;5Cmh_= zRW-5F?19-cB%tgpo~9g-t=;%hw0DgV?1W0h@lBIX1iSWd-a!#O-RflPZRR-NNDrP( z2*N4PxbpgolBl+2wSTQ=mSc(-z75v|<)FnIUd$$u(wlvI|K$tj+$^MJYs0B=?r5{L zXgTSnzz3}FKfWd*u@#v&VKc{lmA4NS*X)0Gxh)Fcj1>bBJZWGSY9j>n${1-Z^hb5w z?($Mw7jhy~pzGyH?5$c9-}(2T9v1(Zd-WzU(%CMF-&e-7$~_|= z{v`XCN@;c_vF20<+L7A)L|9gStk~pvTW|?M`6Bh@afNULQ$IuBb|cu~u#N!MO<}9o zwIMTz`n~sZyE;rQii2sCk~7Sd_gou3OpT((TSk;@kmFOv??AAO@H3rwvh@!?&Yh#6 z*9u;bZg=zcgQU#xr2(dH>+=qBH9<9p!#>YX_kHE)r@Q7qyZr=szsHfklmVu95YgPq zUp;691(Qt=lgtj`YqR&d4LPUheO#h$K=sz&ww)wv5k~xcb(@OBzSYd_X!J+yNI~!A zO&X(|xhqi(O8>xRta)lAM(zjSR(7n(;&|U*1)|dxnMg6dsa~fpZIqo8GUOLXjqtGE3y%PbvAa>GxKrS@>H+f^rJx* zavlvg`)g|jgl#49dO4nl$CHBB$w+Wi1#dO(b_!7m+!Q5m`Y>;EPYv3U-RJ<1f!5>@ zQ~SrAfLi26V}>2G zYwi;Uo0C%GDuz%Jc5+0xUpDEe`^7@E&xs2aO;wqMTer)y{jaxnVJ?AcAOSxO?oZCF zndIiEAw(q&28Mwq8@s@ujMtF?NUX8xW6)N|<z{lh)Z>S|TZgnprinx!=v7Uga^)*)_85+| zoBdRM%e|Cg;|dQ-L2AV&pS~FiMXgcb06)^3s(d7HmfSg4q)%IK8B>_oR;cp^jC@_aEke1& zT;J>MX4-#&-`gnc_0o(B>rgEZKrbc#yc&D*O{ybvi4(E(5ACWEdm+VM=g%cKF?Kw0 z%>BtfO%A}=aRl#d_=?r!tNt{ZTi?GW4Bbd;UVPiP_D~mt9H?vQB7mjDG_M>XBl6?m zv+q%X{ZY2MkZb$T-m-g}GO3K!M+jxD{%yAxkHt%5J}ME|N132i{@vd$4HyCX=`-nC zF~DGZkvLG*15=_@R?hMkx#*sMYPT|)I)S)LH0mz6kFChlr`w-=^28=PR@Dvtuy8;H zH9$paIh=_ifK{zfEqxnmt6HK3(?BaVOpL=vv*YXH$T>7#{=OvmUIe=hzwj^#*;l@) z6_Yf@&2>{j%F%a$otRBMKvBcNXw+Y;?(jYD(RXTKFi~?x;3rliR9UJGfg8tT>SScB;&iPe}$f;f!U^& za_FD++A;I3BNOxS3bPrbd+D@cvS3BFO@haOc-akM74{8z)&N!|@9n>X)A}mT-&X`1 z_-*_&n^pCcFZv$N$9CcWnwk3b*)cd9Gs2=;JbEIL4iIrB_kGGeVUQ|xJn*}E^JCh{ zTvgJXWvRs$^r=zLysD2x9e9zbLEU_U%^#n->}j4<%$@en#XO$HHk1FpzZeW5HZT@Y zNfu}SN>jBC(`tUsaED$vD2v5S9TqI?ed7Uzzo_V;t@oy&-GvgSM3d@aY5xn z6tddp^h*Y4u!BtnoohDU?}^y;$A@QveR9puIy2w2vSnv=*>vf=xri66kmTi+^X+6O z=+=Ji;6KKA`Kpz3(|amdjYo>1w2kY-ebj~1vC1p>YO(MyU&KZpS`CG zDhj8H%_aO_=j=RgNmsL<%&JWm@exgCB~^ZUJRzmKDiyLCrp(&Hn*ILrMytqlW(a#W za3Ezfr8HR6A0@92CWfl&Fd2U{D5$wSY5xJeXVZcD>)&|F^7vujc(Z0Ue?RD;K$LQj z^l@5+h5MTlfvTtQ`8RX)@!MWyZ&ibtD-g-Vb1Q_Vhej&&zg4!G6+5q}IFPoi@Fxt{ ze_xznbn2$iN_dL_ALt6}IfCV_|L5$g1cE>jX zbn3Z=UpL9wE(L7YIv1Edm-HEq#c4y=iH=u9^>)wiW&iZyp}%_{{q4IqX^?_Q^H~3+ zzVu3L*QeH+5y!W5^A4WN zTGpoIxqcfFPkaH>_P5)5yjR)6pL7}Fpo1&1kYym$O{V25#|MN0IZ>K6QN^N`L7%b$ zY#iI>uA*i93*S@3+Sx_Al&)P>kWYLt%^+h??wB{P7`k;dticVuKus^!vi;;T?Afc2 zbx=E>445C%ty=6=u79{b;B`pn8>l3gcml^!^E45RMQo@k{It1fb+G$3qBR~Y_qUMt z5jf`Pi}P#efb9JnUb)-u6M4bH10x_*)Gj_;wHH{*H*W^t=C-1U4d-*aDx0j+^7`wW z0D6~vc&@_Yo*wQUbio@Mk;hnCpd7OBxNb)1Z8+;xYax=_A(3-Taaks9q`yE`1d+Xr z0*e&+Zd0*c>RWBb9(GMxtS|)%at2+fdjKzZKNqY&YCg&7*)SK0;qu|9z9z>Xs8Z^r z?#z%%Hv_JYF~M=lkQaqTVgnPVQ8Bf7+LB%ty`Q;VC zI1xrA4T&&h1*cZ|ZJ{UiOjPeF2M|mJj$iW`L6zLCIPnLYkf;;(llXV)EJx- zrMH0b853S3vzr{%{e8Ati@~3Zd?vUORQo6vGT0?SbC?tbD3@M?9a%Rnk*!RnHSFMf z-ECpM55H&@s+CO=zp)nk*iUBZVJB%=T9F=)WWvvYajerVn*+=~v`uB{wM|7u*04|% zAxUtqP0~Nk-9KMB^#WETNQP14;9^|9}*6&8|9*qb}5GQ?{ zPxYrqyxtcnx@lcVX95NL6CA;QO9{R=H47pIw$`I@@a>tu8j;XGSPSg|NXyN|1G}`F~Ce@A=rQ#WD>6ciemrdXMTUmFx9GIgUKk%=wP@`m_2qRZwnw zSxI^LXe<{Qh_=FwbZ{f>ZjCRxmtjo}0;N5}Q@%sPTDWhfZ&95YvXDb$4YAPI1%+(+ zMfp_-CM{%@jTF?p;an9#Nb^|cM6@+&RhA;jP7i}0YIos68EtpT3oKG1|bFlK; z&vcOHYZTd1u3#1heU^%v{a!Ugc_lZRQL=R?vEB$=qsD$I~*vRlNqa z@++tBm$5E<%}`>1lY9h4p@d?be$W?|gE{*CMiT-v{dO4z7bYvU#2P`(_NEmd54Ueo zqY@+=>SR}{1^i40kw%cbWjG*)t>IE`1i==#{!2*umw^BKHR&vNC^d96N{hh=q+!UZ zTU7gLRzN9zWYh=ZFN>!?s11sWD{4WW8Q(lvDsnZDOI|zXjCrxFf+b( z^)~vtviO~ z_Vw>w;2G2Jna;I9rtJOVHjrw%UXkWqhi)^y`63wa*IoxOJ|TNo7_9X=4+?yidl-cx z5u+qU0Z8dmHxnri1E!tsx~%D#ut2yoAbE~T?x`IW74zRfa{qek1d+Ox^R3Td9sHS& zSsHzYl1-#4Dl7k}R|%Ss02HHAX_h1x!{M3=Ujg9noxDC$ zC7XBtg$Q-jO0rRW&LqwcF=y@!jMGNL9IOs|(<=T@`By_GlH)cM-)_$}gRy1tKHd)A zzbQr|1mkh|GtOi?3}o_FxKv%&ISh=(IO2w#=_7wF7tzehbSk35q43sQPGPP9GZi62 zm6}(zgg5Qiz(k6%Za#WhsrxGuhYpD8>mdnByLFleoWPu7&Kv;fOFJ2)-(X%|CEwD> zQ)rN`bg}*`q`pI)kGB|p6bp#_|ufRa3R8mp!Q2$n)4L=0cGCJ92aZ;d}oQZo&yu(L}z4mP|a zULJMX)a3)#AULL$B7=1@oE(}+b7oJw^d118u8-(g?$_>+K+@YmIT zNpdKXnC6#a(9f6!?z3%Fsn4nL;KH}*+G15+!=p^77S1qOmAs4Zwglhv8EcP^FOf+R z>8Mtnl{C?3XK5yLI(L$?3_8tNV#urM)WdGa1D_@9c7WM&wGb(WIIfJ23zWq(u{THXW=#x199$S5fTM< zdvRtc5*+|o_Xu7sFEK{6nM2Z@l>xz z!@*o&Jkl$SvV6rR~V&tC0ah^8HZI_B&G9Dz2}{k{lLC) zjB&CdX&jvV8O(&wn*81yRbs&4sTCC3TgN$=U!H7JkaPXf38?kC^EQq`cW8n z!{!1BmfG{J1evN7%<5NxBTm2sQh*fSsu{8x)j3{xRqA|0m}Y|v)F3Z^Ecu1c|2q5K zO|sdF!aRDE;Fna}?w>LKJ6j_nE!)#2$ZFy)-Y&!(5zR&gdO)c22D%T4din|KP=5ccd(j0Wb=o6#eENn=n)exPs2yThtOG5qe`R}B3?{yqdg4+rtI z8^0n5{0^or`~)Dk;ovMsH?{zJr)0HVHYo_d6s;uhhw>P?+Yw4Z(ZrwCQomxvPp^tv z1@Np9l2w)&X3~ZVr^*JA7e1rT+$BJ!zJ*P-evoilF9p|^37bWn1NyS`b>@AickBB} z)+BZTh}P!Bg^lCtB1nH(EG$oXelK{n`0c4*&@_=E%YJ{aS7BW`&=K>^bjH2{zMHgg z;}w+F_m@N8lcOjW)2YEX+@aceYOlaQkxXaGfkr zXQ&tUZU%iTEfb2zCB#?KhdxY9_ewCe&pc&)?Rl9e;5~dHgA`mi*V0OAqN`>X4P%l( z1PB{q^!8Bze<&%wb1?V0I2i^HwEN=Db3-IFVn=_`hynp93Y!7!yos{5nX)GrkS7ns zD@5r5on&v;KTHLvkmLPJu2wEoL)=ic=b1?q3M0064fIarbJ=USK6o)9R0?BBmIp zdVi+#F<+PeaTnLLXid`YViW{KZ+I?*h>#1>*x5O8mQ)SbKrQPZKas+Nu;YwcwrOKr z(R^W>z3?qe;9fcE(nDRqsnfRN6w1YaMy}GukveHK9~VgWCjjXaXSvahid^h$J|TNM z>ia5RZ}+EsDhk|)d7xKDFkJ?=g{K9Xes`|Mm>TV=bx@^JfKX=pm z6ac9Ci}&PmeyOdxt4R)a(LZ*AF9V#@)J8q&Y=}l1L70>6I^OPrdJs9ueAd2xFUFqD zVCvp?tVg1~{9~bScS2>)>~ZXLrU-wFR9UNCyTlJ=Dao3Se(EH#gNJW@BlSd&4biHw zqw@U3L@F(I=5Zia`iY*x&dec0ozJZpL(wy_iowK&L+G(di#N>)Rj%6EhJ#^6y>j}6 zrzw3IXF>f@eeAZJKg#IFw#%?Qzl`1R;ob^Cxa8a%%ty|;Mx&avfTS60X;xOp% zI+|Rt`lsjO+tIw(m7-mu7vqZN46EMgi|V`Hfc5#G4@5f3!?3KpwzjHG22F`|3`)79 z7Ixo$Xsx_J7?;WMC&u4renoFB77LbM$tlX}Ft1+su3Vv+8EO-X2jN~tj_T^ZGoJT1 zQ5K*-#8bTw&k-qA@&?J-cIiMeWOVW}S!XiBMgbowms0bCW);|;MyKEb5y>FIe4gX8 zk?3f!vAzW3w{N_VMZkJ^Qd_Qm9b8qenHJIdz?RKD{^^7I`g4_qT$){!sQ%tS7DcI-cI7hWQ^w&~pU^lcJy z`YZ+a8^loIbJ|(?aNL}t;=@G0?llA(! z(A!!zI4+G}SF3O0&?xam=$*D_?iUq;Ds1c`w;PI6D^IvM`Lme`yM6AB>Zs!E04mOY z$X~nm9FREKY+NLlES|GY8~CaSlJ2HS_s(>FBS$O4G86FGa}GKF;9vy(3g*T7odmZh z`3V^|@WopZgT{wn<|@$W1-ctA9E&xk65&!>+?w}(O2$aD!)Im))W$I51sIblwVyU( zRmgmf(;Rk&qT&-OzhH4ibLw=#9)A^%w#5&Yy0^7`WPF1mej$t{BWh|{N#{NOa}irr{GH*^hw+@!Wtu2pmyCM&&^p-FD;3#w2bk!$iXVtB4M{Y zSaN#q+;rgNn_a$eoY;$mS@#veW+h)hNfuy;wIMDaVP9$wfZPoV-e^>TktbMm`I)lc z%e<66d9jPFk{Sd z>NvwpagQm_TQc$qg+{9A1<_tr+A%0%O`m&vOpW+!0Hz?wluz|;n&8EUfQrrYK4`l& zx{)@7Y4OvzF4UN}wx#^GZx`yO$r^fAzhfB?nx1n zOn9rw{Z#pGHBt`hmwV+~4>_dK*FHYEGCQs^4Kmt=@vDMcwF(VJWt~CFj+5ndNuRG3 zmwD^KAhX%6d5$OY& z=iVjlJ8>xS+&XnvMFyDQ(Q5e_w=$YX7Y5M5Ni<(xj~eDom@FDdK^(r2;y5@6RbE4DpWO`5RR?Aj|e_oU?Y9e%vw=Rpdi9?C?1lYk_peOik{>wqx7n9@L%)p6$9EB-aE{~9dr(o!yjE^6#Z;{TO z0Nr+Z&MT$Tw4(k1la{GY{W-r}SYR4HOjQb&6XhbK>mI7Q= zv;?l19_%}sJMq0bx5x4asX9e1LfCd~A{bG2MA=gn*tMQxHV?L{TKKJW1R~dyUjQtn zwPXFFz|nIQCr~2Nh}qb^`Nz^e&0(zgs`Mu8_l=*^TyJ;bGEuritL$U+|(@1Z%AUP;=|R6t3UyZk56A6Yh^icQ|6jX zyqlR`s%@W&pKXk5?JJwn``&BTeRgN?9sBtnI`~DasICD=hGO?*6H{D9Aa!7P3FH@0)kqO*fs3G zWY*Wlnjv$jRAc zv%B}sojdc*H!~j;{_bw?vHc)LCGa~E2{7*(m8G% zT^8Vmx=dCZBf>eUv%sP#NZFj+O&M^WmBg=Z!WDOF(#i5+CVJTfh*$nw;Z2qBqb?Ye zmh4nLQbKXa=xBrQKX%tig)NAB8R?KZO1>fO!{-Nv;+9^-6?~~-sg4ZD{717h$!)vE zq%);9^Vx}_M|m7k=EaJN+gPets^sotHQ6e6vXZhsHELx(udor^&L-yZ!w&(&(I5o2F_Y_$-R{wgaXIyCQG(a-LeLU65# zeUOYeJ{C~R&I364rb#z`GvGjsIy!D%wWs@LUd`vRtY$5@cV(okYLr~=i=5r;DYIh^ z7{3CMJlLS(-V2B!AtPE1l?14^g>T3n^$VsN|f@T}4F>M~7w~6lL zw}4_cueA6RY;V&f$Lo=I zQbrJShQ3LXrgvr**{%hNoad}tADS+J#rFcDmWyHQ>xm(=dsJ9SplCslAF^+QB%o_! zMTS=h{SVVkhZR!7}o(uLI{o{gsc`eZr;qkCMy8yzWcO}EeYhE=u+y^_**_PQKplo6s z^B3{a)PM7pk?}ooc`7S*?Ky&+_tER+WmgBWrmOrKfh2#Z@W|dSP1l1E<_&qqmwdM) z!Kp^*ht_tFMz$1Fq6SLJdj?DWic~ZC)B%E2$cE@~N`H|(z-CZK|JSt9zZs3_#F;$6 z?bs9yxHr^k@v+OoTTJ1{@0wk%Gx{DO8RU#B6%t+v5f+u`s;a}z8A1S!lgtQI{8Gs# z-po462N$T;ylm{+mD?948L9paN2r}(9N_$M8$G-R9ENB!v?6;%#@O1}K?4hen31&Q{hM=j5d)XFCkBw z!{R>m_6Y0yv9|SRxi#T3fCqLJ8*lQ5?wVK5#VEvxwB33mwuULh0O3Y%4U_kb-v%$6 zEq0bJ%7?4!VQYAGv3>8pOtM?&_4^l}?}#R8v?ia!P80|d1C(JqQyPB<_T|Gk5OKT!lR7{9Y7j1TB@jXE01hvG z8_STyt}m8s7Z2~f`oBGmfAcwSuxdV81Yk{-nwaht#pM*?B8w4t&CKRpN$)Y#&<&yE zAW=noXLl-MC?u?Q*q^nIqWXfp`S9^3tmQT ze^pDO{A+mUepq(XKljdcT$1zOyn9a-XsOjn%jhX9F({?hixibV!EMTPdKuYx3l=^m z(dm#g29@#N7{6*YH&A5`Q$ci({(SUOuJEEtbic6eYx@4oPx@HsFoEmG#ePeC4Tnxu zlZ06V9|4Lz_8Ws_LmxokR-9d$hwS=!PB}AOiS7kssd6*yD6i{>*5Zk|MS^)ez{ZP2 zr8Zq?-g^437aa&Wqk<>BKIlzqcedXp@kBXTeHGX_h)k-=JCK&lRWsO6BxT?l7M?2t zMA1)z@{zVjZ|YC!&m=9Zh{kH&q&xp~npX>~1#OnwcnJ%AFCRU|{%EgAPRfxc8tmfC zZ?MV*^eMifArqZ6$S!ZNF?M}Lq|r=U*xi&xzrP%m$5~GXSQASI1sLTB2#wWB@bHvI zg~6LeMP6(27wb6xK2t3b2^RnW*g@}umos8E%0$+@W&LZpJzKg#KfwK?|7` z+>iSxoa0#rzQx&7`rf;N?-CXG$7=H-;o6vqk5{eMn1JEtWPxDUQ30?Os{qVd%3Mbj zz}A!6p>*aD&b^*Ef%`G6AL4k{d6kkO!X)XuL`m;Q-70(XbCwW%KQCv z?zb8l__ywdRBPMxlYGXkfW=3oJt)vqb-(tr8sAhB=JW&*P}FM5%|L0)k}i{g5JE*t zOt>oKeDF4gW-|WKlbJ3^B-xwt@zNRif3axe;{+bbj8BL8ww!%o%2PAC!)*Wr3pn{~ z@`yV*x1!#%TYGcB=B%5)9A;VaUA) zl+?KY`$CT~9XM#<6C}Cj6VznsS9iHCA>NJ?SUh=~EfMhGxzQ2u`t%^O@CV|fbU9uP zGnaZiHo;3>toh1juI3}8y21}HPVn5v0aX#@^47U3N;xMSMwOTJsA_204U(18nMLW| zhawlmOokS|w2qa;tn=XG*ni6=8ea{SvC(8bbL@RxA`h;eZ&+24Dzf^%U#Seu!LMe0 z=t9p;Is2}~f5PbuvN7k|CTBI)j?RVG6!1fF$BP}Rql0&qXUm2EG?iQ~ELnC4ju7=~ zed;qENNzMfNrVN>zSy*P4lv}Aj#DYYRF(Sqmx8j;fXnEeGSFhy4EY|!F~FOAS#$qe z$2R8!$@sC|AeYc!(jnik)Gxf@*#W0HeRDRWD5dff_kR4dr##> zd5610)O($uDwK=lpX0}BrhBR|e9Ah;7*U)FBuV0R{u08sLmX~U3ib>ODHzivmNAZS zEQJ!Y$_LR9pP)N};g-^WyrzVTI|-^;N@u!!9i(BxB%jo(id4xyH}FJ|?2#`SlO*|| z$rfYXekDM;^V<>(-_ou4MG)`&nQIfw7Xcrh`Qf`Gn#muK7nrk|Zb>p7)q>;ox2b5F z_vwMWLpO=;fkE8s?c&$IuJXGeqCO|ovys^pA7TSSWC3fgI+IS>eFc*Wi5U>z;$p}aJba8|4Dj^=HB z90?T%Ko8$z!>4H2KnR<*+VvmH(Lz~bf4U=_+?wg!n1~V9lZ-wS-EMQBazoYUP3?uM zD7FbBt&v`uCzr%xMZ-#6eoIRcFdBdNBwCa0=_iMURuHCk4TthvrAjPo8z(sZeJy4u zK9z??fZ4<~lC9Zn7`N`Wv|U5yo=ryP6>5l$(FV~qZZhwrq>tWHy#23uwBW3H*NZ>% z=2bSe=YnCAFYy{d2yhuM6|{fbTqQ5x-gclVzkR!y!-mHn(8_k$=t!-#+`D+yo&{;lM_Y41fF$qZKLV{$L#);{WBA zAkx;(Y@~+5BAE-wrhq;>%PizNw!%^#-|4ut=zrUab+^p@UNPIG#U^M}cJ5cS>R7QF zGa^2nKACNCQ#eho=ja-y)%HE+_}~7S5VHM`uK2utXqy?zVG=zFd{=-|$JMRhi0>2r zSJboDs4^~7@imGFwJH0GWhTx~aVAG(V_2}`4V({^YEjAx5r>)RFHCtCEG+?-i;Bpl zK}|g!`pWB`VH@~o>V7|=rgJsboUCk|By(5r9&QcID*A)=Z7>gu!usk2B?=urqhMi+_eA7 zTGW^4SZ9m=v~i9k9(x)wVOiAERNHr-JJ1|kP4J`FO0(Z1SqYZwg=83n+tFu|j;o?l z5;#ZON@V&nPi5HeHLS~0-zY*Vw_NryYnUJf3#+`oi8{(}!q1O{@P7w?JB)!*$fZRV z_LMA+EB<^@MMbzyuwFA-c@1{Qz)7(FNtV6@y&l7y7@K4DsnpZSE6Oj1#NeFdZ{ktk zdeT@cC7})kObo^bdmlj@Q#idG2aXB!8mcvrq8!(P?4>?4Y)!TO2ywQyuB>$wS*QK_EPaotGiR@dpO z84&oqnq82aZ%uwi47|LCBN4GF_{T$mHz2|LQuFzlq^o{JX1kUG?@FGoRoPj8kh zw|5U+3X|Yo=4A-pD4Bj<2RmBDFzSd0-dlgSMKw5&@GNwV{WQrCrfy$dM&JPs--z+` zEyfKrZZ4;Z7AM4}gjY=^*#w884!9od%SkzR(zK?abQy1zLS#?qv{3Ed6x=Ff%{8!| z1oy>p+(~a~`+TZmjFD~V<^0$Q@}TO%Mfd6Wmg23=t{VU+O7}hh4mU;Q#7Y;JwEaS* zNAECoQCy4i&8KfEB-Z9hsM3F4Dv>?Gr0_Y)a#>rG5oHexBKAIV)Y*rP12o~%+;m43 z0w7FDHj|L5n|PJ41%EAo9?IL3H1)KxwI;&$A*uBLBA%o%YuS~{2ZgoNfalDQ$T9F6 z5PJ%BBZb;J81%{TBUlL1+je!i%A258+yOZsk_7&Yj=ec6whq$kfaEF7Q$UehQ@@gQ zWq~9GRodR(q`=BVW}cmEQRXbs9+j-VEjt#P%B(LzP&epS=Onbj0P@=r^c)yRi^z|T zhB%ia`2|0ig;~VnG`&S-m zOU=B?RifDYRqMAQ0SCZYkEVTPa!JPw$><+y&R)d#%2U@&1wTm&Te?kzRr1fxY7Q?z zM0#-g&7yfEwl);Svh%m9BH9AUIXF0_ymq=LO21S2U3l~eTNJ5a%6(ydm#>o2L-Ca2 zc3=NESip26hink`=LbmIt8?60@JJE&?!)1I!b!q|vtoz{gChsfyDy9?`4Sk?1MzMo5K05s04VZy7EYU?<4qqzrD{6bsY#B+sKbF zC5R)xquz2vWRGG$x}fTr#h47C;|)~O({8doels;@Z=QMp=DTDf(#l_!^ivLqpWJGP8> z|H(3Aq`t zGh6T_r)XN;z_VWJb@c$y+TsEW?=2P{-k0Z9UkoC5^rbJQu<%FT(3MTwS%YLSA$Ml) znplBn4kDg++3m32-vjTe*=2m{RJv+D>3)0sIqY9;afU_5#L8IPxiV{N%Y-jeTP_>+ zPS~b;_?9Dk!avCK{@{U5d?;C-#!DH6@hra$GlfKu)2+}HEPLyT5}3y5cSPcPGJJnS z4=A3U9Qw1D%pjS|8_DniY#dZ@4GJIq6z-U{gI^w|n|2RKIRCH}&0YbrLpxMXKh=#4 zwA7yW`@3+~f~T|*gi|TW_Y$ihtBxYTxg_`nH9NI>EyLt8==PMA;~=iElfcYZ21_iD z6fsM|trY5cJ>(WWQJ50pkksEJUN^t3Tjubzfqa|=iSTPIKAG*rh4hFS>)t5Ub5E|b zu2i^ijnx&8aK@1AEw$D*Yp2^`zP?WvCjw+zcj@evNG@X=LDIbJ665k0ztrs-U76#G z3FN)!C(DkZlpZz7P1{v;I4esF#DUUolE+>wM*9zPYWx>u~0 z;B0sRBX{uglE8rmL2c>{SBN0bI9$kh20Iki{&wO9>e%?@|1Vaw#WF}GI>soQ>Hk8>nPvc z+&J$n8|01pSl`Cm7X{RpnePuKEO)5PIa#mHRh^uk8jm+r1x`4m)x4SNd1|KklxDxc zR`O-`27CA*+}<)!75E2^{bd75LG{tIBzw!3k%p2?!xJ-Q26mo770e5DgeJ~sr`KXj zJdy_7Rq*?-h6?Ui;rvC$OyANPyf$&;{K1FN>okanXKny}=BH;Fh!5leO}W8~)8-o` zs)3FIR1q^GaH=ORQ9Q1=S0QbpIy;^RGx9BYI>Gp=Ejal=_3Ed9wY-8Lpnwz_rxSBs zU5A{=g$Ty^b`aCfn82-5*e(o3WOd=gNH_alJAs?puA1W9^qDQ=gUng;5xTnwg!cOH z%F?hwn6Kcd-t^Z_%~! z6N~6;(7GT03`uw))t?)ryJ-`j4+`%Z%MA19w+u`u;kx4=K)H zNo=uhwJ{w@Kd4MA%=Q0voq(^Vi(rPMO@HxXH}CV;S4K)CXl+4jV;gmMEF6wznLB1qu8& zLifWe_rU6lyM}QdjZytLo?gcr_f$^0S*j!yw0IF1D0! z*U^Sjm@~AZ%$ONQhamiu7}kc$pX(Eoox)^5g0-lRqRPsPjb;|U%}LKB#_QOVp05~O zH9I`=rh&2Bo!3^WkIG5qLGi?kufvu`#ES0%-O#N1-UUpwzMw#ON*>F~x z16@+X>PKF~0Kb3RkAYv&yAqShWg8BK{a8soUouz>I#1;dwOhD&c8{8Vd^Kgg)hjZ2 z7QlvA-(~#okYu^Y{dapyimRzlSbAY6GgUHq#6=<3nAo08U-VKxr5<)P)ee78@#o`a z;r$JW#abeao6fp~{nkGC?=0z{jx)aqt(I&(_fKn7U89>RxSu}Esb%66o7Mh6y$oC% z;fV}c-W5Yz5!i0xPze@H6jdJcGVUW3_YnEvUxz;oMb<)m5o{ytZ70Wjn`uBVLfpPp zX;BnF$@&*u&z<+9eeM1<`||q3XAN%+Io_bd=ii5aWQ&V&ITn6KH*4_C;9^JL$X^qW z%)g;d^)=x8z%rvpIGsz(F_vcSdR{tiVlY=cg}k(eH~uj^s+U@%e>EVxA(D2c198s( z9XOq9XnnmS-sJIU<~ifUEY@~evCTG+;`BIq$_&t-@__cM*aNg5$Mxu0Gt6IPD#?C< z5>SsXS!q+mQ$4DQ?d<`hEjM!-d6cznY?*!{Ju=NI#S%^G)Lb0wPD1k~>>L@9Gt&g& z(f6s>A3BdH@Wz|x3UvI653mJic?acGUUzjVctjY$>G-v2e?KmgO{1rx*vw00!ABRcjAH;$-A6ylldDy_SRd?k6h^@?{e7<@Rpm7)I+&s$bZ@ImKjqE$vYwtJz z0XVp8AHnCm0%-xg`hRxz`5e(--oDz|Cps%ziC08%%ojYAF`hW3>_^xG_N)uV=t+<* zqb&VrdEW1a$p=z=KY1?9LsN{V;zmN`fI6JSa_6r4(zEyGvJvELbpVBW9QIMEo(VJt zmURJWG|;!1?;}9GrL&c6Bn%=%EL; zYMG~M{`>r>1-0E(-I5@^zMWA3VFtZjjb9ymT~W1UH{@P0QLArae{I`f#Z4i7nXhWaMY>vGs0F{W)CHOGg=7wiNf~m& zd4z%uicFQ79o1A;9zNv{xW+iu*A&qB;D7$&Q}0sxh}h@M1>z+`$(OP!!gX>SX{`% zk=cUw?#qG})VqC&?e?qV4T?=(GMet58&xVumT&taf4Pl5^H?Yv7`Zo>A-b(Jkq0*A zVo7Mk-<OD`O{zxg6F0=# zJ_J+bKG7NiJIO~`SJq}kW;7j$VM5HO@ZMVt4f7$CZpS40GJrFtCLmP5S+j#vF@}uy zCy;p3(_0ou%>w+OiF#C~r}W4SV#D--t%T4g(Cl&dZvkAC_GFkRmp(YFzKY>UH$bBF z12p2Cq|!i?bGKJ?YI610;fo^j@1i$Xb>o^2Th4uoAUm2462q$FWwYgiadLn|l0*txbtc~4Wly^P}zNUe0fb~uml(Uo%l?e&kiGAvC+ zw31vWBr4|+D1L2nhuyr$5SM~VgASX7R`wi)7~{0yd#P0GWP$>CmbJNmVHXYYyH%s2 zS%I(2x-&Poh~p84jRgHU_G`y*n*XfQc2i$YUMyEjt}T1|nc>JRNc-j=4RXqAtZEf> z=0)g$2uRri^`B)m%vD+L0o0#&%d<>BGNz&rzv&vo1fYS@Fz%*cs^p1s`@L2d5X50B zj+gDI(s@et2Pea4rc5nAHvCeTJ8?D+c82Hnq%r@dfL9^D0Chf{-g-G@sQ2}Y0xPf) zuody@&T?jI9VXc;%?5lnTpA7{0JZ(l9)i|0=jctv*~qmCmTC5~&Fu_S)l$E*>!y}v zTTxDXxvsGovlLxBgNS~{WKEcOwcBPK58MP%e3T^lZw>dyALb`dH_iek;sPE~P$@0< zX?GQd2B8fPjdoc?Ph2AjFtwi9g|pxjrYf?9X9g!ggHH2Cg^v2Dmh_+tW z!umF=TY2Q-`H1kSQ|%9AT{=$Sf5E?8SnyAvx=mCl>I3c?4r|utO;jNIthaL<2@j$~ z&Tdnd*Ip-Og&! zC&oe4^{-&J8d+UVWNzp@iE_o92dAbRm0j0X0)#NISIqFsmCupF$id|!Ok&ThUdbgw zEBIH!wU#>CTJ*#Jrc^zV zO(9U)(2|03DyjCn#$NZNA8)_N`ihW;UcJ~>CjmQM z^c|u319tA+!;)v?)4VSsH$QT!uO&*ZuNKFXV*JKNq`>ry&e5maCUcuxIS*d6{vzo1 z%T3uwsG)O8$Nh>WQaip)ZEz6VYJBL_19eX226lg&{9(Y|o2^RUy>HT0eb10t9AG;p zo}68OL@l`S(+b*~6pIs0{Z%1&prf{_?Wpt;VZX=Yqz!omq%tGrKoaNU7 z6|mB4LJ6~KAo#VS=zpFYtzq68w>VyN8+MetbBzP-n~t2}9!btIBtU9LQex3M~IJ8%ikUezzn=~`1W@?tnL2$m1urbpnHRwvNv<) z;i4!kuI#GR?0VRc97xuy2P|+q0=}w`Ji3%`d|IcaN>9uYJoBd=UI`Lq zm7jjxuQL1&S+Cuy$cjURT~zAy!{@UZDdPnH`mv*c>YHXKqvJjRuj|`T@~5j5R1v%W z3loP+$P~n@gUh<0T{7G2q_OsSe|PUQ#dJD=Ifi|#S`Qu0>Gg|7%Zc;Hto4l@>CnXi zOrw!3v2#MAqMT$-hENjQxR0!QZEO!A*zK}xuq$vNF+j8W{N27@c1m>%#(#q2rPa#f zbjGi3({>do4S1b?GxRf}WFXdtd$<&MJx#wPcsYl%ETwCkg?tPHDn?OGEz3;n{dcpp zZBzxe6bNrEDTyn!LirfhxwB%599>a;SbgOtIP3;Mm@1;Kr6GMyE$10?AuJ)W5F8x= z#xwXTwBcXrYNeSdbcbWs0?5`6S)N(s)25y-PIJ_&-7{=+8JIXcB*IOH)epnX zIi~z=ug%Nm)88mZW&j^IRY}rZ6)GY%a2otc%x)kVSwV#43!GM1nZA zREJVsrV75L6zY^6b6UO_ig+3r|0@>IoNBQdUoBvu56T+47O9m!Trc9K%~>5vMDu9M zxc{c7)$eSZjzv~Yo`B0I1DHDW(@+J|7~AsdB*9P5CjJ)>pLB6{5QDCU#HMJ|hPwtf7I%6nAq}Go zx|C?Hxoz0nPXYmOvNc~{opuZzq$Amq>|XG3hr;PoZV=Q!o|pd;@}2t&e$$JVIQ#;F zbPh`ab>2^smJhnhmOx6gYf+~i(5i!NUQj!t{RpS$%VatK@TCTJ)c1W?vIz3ySq3>- zzRU8?z<$0F;u#RTo@n(l{Sls5&c3S)oLFktYr~w18Tt}Qyu2sbU>`9@J-1q|NrSDG zaB(m`c@tqHf}+K03X30SCy%j!TfEBOo~Lwn=y_H{$}9X2)wvsei4+|ZI=l7Wb{i~i zAcfZQy%ng8;)^2SFDFv}c3)Manf?}SWx}TajXM7=ap{{Si}5(DILESGt9Fp?D-g)~ z-1_*dUMk&5@a6l3r|&Cj^6`)>Nc#TA819!Py8>ofgV+srjF{UEX4a|?@8p>67`FwF zaH%)}+SM=5pi{a$_PNh@x~TwTgKM;5xYt|DCq3n+Y#PB+d2_G(6Bm4UNz_1u!}MsE z+nME}uk-X;f_=P|9?AC4SrIT#>|>tJWWp?og8ZJ1#OF9C{o4o}YPY)9)Ddc5qO4Sx z-7Z9MGINfA^xdHL^>2i2E)_j;GJ~?=cW4VaE`4`|@8Jyc{z_;bBU`a|cLt%%9WnoA z{u*7xRTcnXt`&0SH|SI@U$Y0TwyjCGuTO-QWTnp(81JtJ-*BE-{TUej9w)m0{0CuE z4#8(9+y)hmUxIt`Sw-^$6dCg8#%;5?#i_PFKY^I}7~@-87zUCe8)L{<&3|-_(hjm5 zQ4eV<*=NqwJp6jiUy9>hkHD~Zo|f);(@Kf@8(3?ezf1B(b^xSM6OY5$+80B!yq-I@U{$h z-ci5D`cU$IfH(xc3h4g#=T!`#aReZf>mx~*9}#R6UgT=OIV&qdHjC%G0|{%J7IdEd z=uj^pXOKchK%CF?u8k{C|QqEFG)T(eTj@sq~ z%D~gF^iH=?noDVpMMf|xxfF1n0R1109zM($@IQ@z=d#+pJ|0$5u9>Q_dm>s8m*>lK zl9Wc6Hl?OvjTV$7QAf{{0R%L7*1d`h*8K0MdMVj4w&2*26_~aY2df=$Ys=!%6Y>rm zU+kX3%x=649q(M!u@1cXn`U?`c5xnCb=P_e04GimNs`ZrluPCKwFYINjS`SZT>4U; z>f74G4Q>d zcsgRlJjV8gB1#x$CK$z##D|;9{etv;cPfN3fDTHnFN#*UnM%@EEE+|itNvGNfdD$g z^Hr(LNg5S6Pz z%HO8O%i4N4Dl^=;m58p`U=pvY_IIB->=ooaT3!7(z7;&A6#=irovyG zGp_8Hu(|Gn{DtWwQT3O_W z3gHO=SeZV{pDt)(%%_m3-X`E(-Ykyrh_5?Hwd^60FXO4k94hv6B}N}qu)U3~%6rbygAN2HSWcIhVy8o??W`@t#Cq40er>DS=q30Rp4$xH zfy&HNXZ~T|Xj^3>Os>b`jxYO@X5MmvFmDWxS4*)@qOBLV=LKTHdKyYfkF2)!+&(^- z$)^PEuJbSFm}I#%LhY%uOwWE(Jz`94?|{jAl;pB7LmyLJVeN%qhnr2F*cyjv4 zrbajrG(@>v{x>=uYHDk3;rtK7|3bgHH0WLG_+J;d+|ee)64D~+Mit|tU9-of)Q9i( zdqw>%a%qse6_NCkz4lUB+;ztU9{zld6CJJYUMosSs4<(UF2f)sqaCVg=`Zw(w{1i& zI8yd-SzfeE6-wRWa+YfY>3VX=!@JTQn!tC z)?o!o43{~AHfmS|sYPiFe|e!Q#1ogBj=IutH!*b#$i%4LWW3GM5M-&8w6yW;4Q0Jn z=L2CT@V==M@|lO=PELK35YtWYx6B~=^%)330MU~9$^=A6?ewySV0fX|q+&k}jkf7a zw`Q5vJ84Yb%Z1v|8qQ23GmeqV0HEU7ox~|~h6`h8H8!;Em+uzI8734tOP7VF1HjpE zBii~q*gRS_!PP%WGU`yhbFFJQxdph(A1vz`O!Mp;B&vtwus-q*TLoBD{a|l|KM7Dk znTLw+YttM1*Q-^0p$DfcI8{H7yF-rrha zA;qR?qK8iqnL4I5L5FShp!NLCPQ3%~1P-8L`I2oO$9m!>V1Ad7v+pUj8ndJsAG|cw zWr;lv6+{P_#9mtX%Q_WIn75VIw4IYfHb~C)vc{JDrEx%I9JaJYebd-?yE~acs zcP-~hAat==pP6S8q7~wZ)}@_v7H&risLnwbw2%KS?bOKkHk$>4Sn%ElYEk28yei9x zjW;JTANEXAY&oUB(YNAV2ilPAA7>7l#s0^Gl&1c4JHGr#x^KlPCyu6*VYl9i7WNKm zV`PSZT{k}`;{XqvTx<8T^y14~w|Ly1(>GjeAsRL!@uaX0$UovZQPD1YvJ zCB`ZYZ_~tPUJT%0^XX9nraF9sTL=f>e2jb50jN;`_9TFQv#ib~8kx{F*0eW}u4smo zI#eq#1oXRnBb>xK>zLjY@wx^WmaI7xHY}-c)kbl|-8afj*}J$ARt@S44Gwc-BP`xQ zd(E-$KTMg>+U&=}GSU4R7b#vNyOkWIg}7HS;a&bom@#vZsq5Kv|423)WrDFruBD~l z_0XXCP#^cKCw-&0CA2etGIBum45T9Q>gU}KMQl^F<$?cjehOdW<{eB!a>l4an)Wkd zI#kWt+QK8r5;xGS`O>$%zN*h98p8!$_G6I$s${D`7dpN!HQb{dLjaN@2y=sLRb0&r z@yk7M|G>Vr7-zj0mPcH9q%kY)DsTG8^Zct)8&Eg_Z0}RL%`tp@&~h$g0j)V-L;+}X zbwHa>qO6p@NI5D(1chFm)8xuMDz<*+RjiGI$V(qAjkvct#Uh_en45wpvMIo2wo?PO z&DR*^wc*hQTs|$}KcNMm8Ro#Zp{WApr98KC9U8Z1cxw33oHe9@?!aYr*pz`_n3 z)9d5pbF1-e?x}*gLHM`2iTjCgi^u%Bi(yQLU)=&1{3}?Jh_mdA_2$%RN=^xpZc4YA zl4{>3S40`lzBj+t6UZ^+ve)#n@a=1p++QSs{w8KL&-uUxIh@7jxpV5Cp@$bv4rkr0 z3TG22@C7~o+m!k*;+FG+G=lte?#(VDlc-F97pa;QjO9?RDJ&L-PW1vSl>~4o zS8~rf3dCcGRG5H9w%G%-Dbdq33RGaoOm*Bu1F40zgd>&v*8Ax zgc5#;6M0USKQr7DT4uDXTr}0$;QHSgIir35%t77%mg99^u;lDB!nw*=!`r8j3)C&d zc1rU!l7m7{1d%i}rwh`awPXQ(Fk96MfKMsvJfOuJELO_#uHCP(8R>0T%JT{i`Rl#{ z5p0EFPV|2pv0>fkah+<1lQFirV`reNX3@TXI!)s}`_Kp)-NomI%ts9?O_f7YN}=zl zq>v+vMW4`$wvAtn4_*#!yGP*%h_Ck=TnIhKG0c8c)2X2I7~7s(aX;^<_tR{}4z9pO zTtGW#c%9(|H5m%(%0XIu9_nJ>?UgqCHor#X;a48M>l1`39(5CIEp*3E_gIjZ1L24xlRxRg@}{6&FdwhnQDqcIpc}Ov z>k9*^%+Y)lrM^7xhikf7nJ$-%V4qpz{r|WyD-0WFZA~1OZerUPP*uZ}QKTjo{Ef1^ z*)L|TYb%?1FuP}@lb2E|NXoR205=nEs{GntVSVtTSGOgC_lBl8kvm6er@06|o|%E% z@OC1K7ski`9~}4cq8YO$t)_hVhQW6C3x2HlalTr$2UAGK&sbSs8)$6u93N_pDWuvpDOVG{ZKPYjhx?c711G zF>qXp>kGm*QvjaAka|f)M#H#H1Jrzg_dE2{n)bM1$$~g&?RO8~@PwR?qlU=Q8J`ZO ztcc#@^3Rmzn?Gv=*gz$sWETFt2KzlPn0T}**7)V7G{|!}Mfbqx&ZlRF3}MUTy>e1{ zWccZA?bc)u5Dk(HBDk84%9G-xpJK{cL&1?cPZ~NU1Q@5soir!n+*(LiV2Ca;+Bl2| zLtndRgQ>I?zyoW7HlEjTQD%VAR^c$?GQvTB)XeF%Y}4g1MFiNH;?G{L#ciFoVOtDd&=j2KUqVwDr17-Th(A8C{r?=s16a~i_w z5Znb^N^qU}I)v;o#Mr>;)5DVCAsmuCPAe{+&GHeQ^}UBU&LUbmQc`7B6(#TAVwZZC zj%43xhB(^ya*iU%;s@$ANB*H}S!Q5m>yAyv(TgDobnF=GaC&gQB*51AAzw;Yc<$2e zNap>uH5DMkswh1dA21$s(Magmz-tlXu0yZtN}z9<2IP0KPMR8QwEI)#^~4(973QgN z#Hqp}DcBLOwy_M$2@1yG`&8S08X0zn>>9Q^WS^8RM!;gCz7_%J+bBn!7ufGLF6II; zibm|;J2WVrg7Swk!A0S}P7@GPOR$My5|kK^BJ+4R*Wp1-tH>Vp_4>qO1jJO1Y7T~0 zFddH-9&|HOsPIKqcpLAMN)RJrOX?2q_HA8>20;ZQUn)!I&wumf)X1Z>hTdGItx@YM zT*m{Gx(^^eUhll8PxjCG%*UOFP!V=)Tw zD>r`&Mwl1B?^W6_d*bX!5g7DU-NG%7b0H(|z_j~NlQPE)@5$GD{n88%izYb@d0xx&A73$eiPb<60bm|k3t1pCl@YTymt+I*6*A<+ zADA&^;a;NM`peBvf?=BsHD!>zmROJ59D2BpRYGLALDsE>I%;4kNBjDYqpcrY@|Ox- zn<+W7+5))ugW-}3VA4*-Y@zWFRm$1NowU;4LaF{WA9DZuvQPvp=Dz}jcbrCQE_1d& zSV~l5Z3obauUOer#zjLS>HqzJclUR0)F)RzTWNd)pp=RANw_pCyC0)E8%g{0@OC zW+i*en~oPM;0vp}6dk$~Vt+aCA^)E8aIPV%p2XPI2!C zo`P;BXoSveMvvDT&)PjU95*m7^o8B>S^H8EkTIyxxM{np5wOPW6@tFxtsBE5Ad%t4 z!g1K26VplslkmkMBI8gs8=_(mF}rD%%7h^56-b33BA1%ZRsQ!4v)g9ykvWj_B|gI; zZo1*W;UDsG5Twbr^YPYSqMZp6A=GkMt07IK%V`}zq+9!Hg{6YTu~W_fa93nx%Lpo> zNpfq6aN5NhVV7-3pIMZyBThJ#83qM9QZ2^m^FsD@O}{c246pZWx=X58&+}Obw~+|= zP|cLAs}uYXDd~u)eT&l|gK1)g)=&hmG8C~Oed|>lw?D(OXcLW*#;SGIS^b;x=!3SV ztI!sYXK2Yw`u8u4cA}67qXFbuO(%+K6B^S4Q7(w;fjwrUq|}n+8riTA(Gq7h-LVi2 z53yYDR^Ol;HgZau$owZ#m+$$T4kX1zI`79l3 ztGU|s^Bm^a$ny8>=QCLr<)bnDuN$Zu-0JbEY+g$klIY=GXa6=q=2g4RrWzEd_n=Ca z2sj`crTS_K2Mc4=H{NhZ8sTkQA3YttsQH@pjV@|8iM6^X_15r-zmy-bX?5Ro1kSx~ z}VlIbIVG#CZ2P?T& zCRMbUF!&$r=J+Zxtw%P}u$F4Nml>4{iIC>zw#<6o99YdQk{2Gp=H+(bO+`YbN82!>nNMhcn-|Q<1)mFa7DXGAT49e%hu1wnky32(FrEcNQs6pyi zV2<)wLAQh@7Y5eo_>vX+2a>ESnZkfzrFli!Yzc+W$yASc|28$+m?ln+Xw=$@Q~`t} zpjEi}w}3vWV}7;RpiO(_(o@M_t_qkd`U3B_qsGl6am?FFqAo)8KZ^NM-*|_MDos`i z^eDqx+uh9gT4PkkNkfBJ7v@!aT!xAt9q@evF^4mi4VT><*X`JS&C%DhF8{SMfejH1 z)sV_aPU_&EEwpfQV@TH9`?TsaL!q*Qs{TZ|Z;W`6vpm&bWxpYxw^6*xz=gNt_e|h~ zom&U6!K_jJwdFMIkHg)*m_l>2+9oygqTmN#CtIQAn~OU@AbDh=)b5cQT}aWqZ1aBvH*!QCxr zfZ!0^-5nN9aCcn@Zo!=_!QGwU?k)+=;u`du=l#xg&YxkHnXc)n>F&Bqx+*Iw;K8jY z>;8;rLtT{2+)U5GE|98u9?9K(X76cILysJ+uW>$S6x}Sn!JirsgL-eGZTfzIFxwfa zf;ToZ+ca>lfnR=-kKO%_S&DBZPw1&1|1(44%T9DW0|B+~hiqOX7n?v;mpi0%L0{}_ zt9F#rQ>0V}{vGxK5hLmYE{-$>zIA?w9TPciufjh^r)*n0eSectE~PHlISu|A3lO-G zEBu_sVO|rbd-~i929~ChwCP~G^y1Nt?s4nm0~e-SqE-$X;^{Vs{f7XpWu>`*PKmu* zv7d)V10nV8vrM$1V1CxrBoen4&gSh1EW*8gRD35Jw#J)@=8&&jlIv_4pWreJkDO5W z81x- z#6y%eP*}yS5g%zolHUFS^1Kpj<@xB2Hn{C(5F#IEx_C-)VgCbhj2lr}1<8eZG zH`E+e1JgmQu1Xw+G_gj=JAd6JgC6;N?@<$ccv{JOy<2 zzE=uqk1>X_sNMUo;xij!=mk4_JcQKq>gmsI56VKzli#Nf=mjM8uKeA0NNT66?Y3R* zHi?GbbHq9bf3hbBD`meJkF1;<9Xm*qqn^iLKijE}D08W})o%qu#yXaHH`or8xh@R) zP%#BRpAL6?OEQxfXUd(e$I3}_LuD)ABGIf%9&eIr{~z~{K@zEBJ{c49e^W~ro{j@1 zfA_@}z4%a_>qk)FYLoSp%_9i@J{%;>?$qK(9Wnj$?StJ2y5P_BcB%m?X$=rcs(4w7 z{^PzuZ}U0T*_2{7%`N4|MNf-hgMA=kM}pbC2Tb(xXgwLXH+Y$6!Bi&69UXPMH4JFtZ%Bm4iTHC32TwnZ%hI;Rbm;@08#^8a zQ%P6(6COw2K_|d7_rKp2KpP^c-EKouaU`Wik%7cD&+ejK5ycwIO=`i%@~g%w9$dN@~3#RJAwO4_Wau{P$Rd z7`9f^vl+-ukKQ{dDm;AwK4k}y@=A2!A>0L*2ZI9Zrk7-iXQXkBZ8T$TiB6C4bUJD02843Jc znKpk~*Zn;MDz4LRIVpfV>@-yn034zEO`>EcPGHEeRMKIiS2M25 zj>0inY%p~`NyB}v%4B9`_&n1cU)1d^Fyjbn%kEj6f2rDomyK&9R6JL8Q+Uw?httk( zM`8{oN(d9U&sEHnsR`qgrs4Kvz&i^BSJ)R!}u&0{}Z{+qe%x1z#;r}GRc;!DB)&jlj z-@p8-z?+<>-Vd?xp@GcfnH;9AhGQ9b9tj^!Be)G9-2J>--KSusv+ma$|DR?=)9{V^ zNS*!$35?d<8XwY8=Q9PCLA*;REu|y#9QqGYk5jJ3qN`p0H^KG98!ofaySPPOS zd9>z;qKmZmnEog*=XQik7DnpRzDcD{y=gZ=a#p4lCr;JC3{OGQfm)tFJ{=AvZrm2F zIF3B*;U>(936k{aXG$C4VqHk|osGO3_0KLdsF4XrK^~NX-l3whDP-i@W|>YWK?!m1 zZO(sO{AFMVg43jWosKS6d7WYIX`#7N`A`2njQ|ao@H@)-DgJ*`ymF4OH{hdl`IT$K z->Xq(GDpsU+yeVQu`$vn`KY`4a_RPQ|P$-$~ zBJhL^yNzVz6sEK`geU9d!?L>*?2YDeT~!Kva+BX7>l3t;xNYd%t3mU01^CBoJ3dTZ z<;Ouz(y?*B{w3k{{XFXH9&<^hUk%%Hq7G(A>09F-8eLE@LUmLkyOW(ppL<=q@N(0| zanTw~>A+XJ$Cs*|lG+Gt+1Wy4>3F)@$;H6G&H(lP1Fu#hq!K{6H;n!I8*Iwi>B3XE z!9-5SiUpslD0f-q#eOh96i#~iU(8c6l4>v%6QLqgNuwZ(@5DS(#8Qr^__>o{P2{<~ z!M3yMEj1x~QJQsk6B=>sh|Bo`d`KBGUDk?gXfM__9ZGURlD+CR4fx%CzM7PThFAuaokw9%7M8W`MjhH~|)H=EwjBlZ^yX$ESr zaMGK2`u_LXnKB*`o?5dK(&KqWYZFRgzQ^3Q4-zK;z7qDsy}u(Z9&5p`>z283tS7XC zS0$5Sokj4)>?oC_WdW?jY+}k>D8sc~@??&`&_6LXG_g^HUt=<> z`hSULPD}UyVkaf=1FNw#ZbTX6Mw~WWnX##UF(rjo;Quh3aQfo|)}#B&^V7_W-PrqQ!1L)93iGDiu{s{O;l=jcH zGISo*L8k8PPAnsTW7d)of_h|XU;(4bz~npqHf$7UM3j+=w$et+Tt<;&Zccm#6di0uHk=tLdkqYu%Irk zvn0?&$Z39*Mk@Vq3-gi^gt3^aq^@n%M1L%TNpmOGa8a8k0{&*aTsBm4B{rWaM=Dbe zwaZzX?V{25qCh$^*cn2o6M|Fo&hIjq3kuht3+W^yjg3O1=-@SA(9HY#?Q0CtU5aWb0Q8$U#B!$d zk7-(s_+&OKJ{+m(cKHdF=w+V?*dRA!KB^7hL@}7*#OZ{BSrrx(DiAqV$jAuQ1<;sRG9|5;cv50#S}H6g^^VD9t&|%s zf(yuiJt=6+D!^tIw)ZsMZI{NvPXqp{AK%^!9u;{m$QT*q5WBk^-2GmR=Wi~JD{1}A z7jYY%82F2oB1T_Bl+a))ytd?AVb?mAJEN1poxi!?gqG;@{S2^wR7U}>a1t+ovv*r2 z48QA_;we22BH*S#*Ax);)*kxaF?B6(yk#Gs2jD52yfE z2Bck>do`Q`koTKKl@1&mYH);w2prW5Vu2S)FI&5vnh~MtOv~Cq`ZcaFnfiE7x(yfk zezY^uAT!!UIv*B&)q=oU+?DH-xC&tJPpu&hzV6&g2w?z{ zDTcw5>*j3chvnLLM#sKN?^C;@xDKt70fIp~>mcft zZqhs|01;sX21(O!yPeaxUB_%O&lF)_R3Fymc(*-+YA5&T2v zYCXMWTQ07DI~`BP%zfKm!0T(}u&>FD2&#z!=Ys(XqG*cg#os=sHWP|c^{1GCFqVYT zATiHVrspV5dwsTAn&UK$Yh&{Q6BUW>x=MS^eRs92z>FQkzb;gE6NY)DlVF01M>_LH zJ#K#ke-o@uv(>*BH>+kBp~vPsR^x2wnB}vXTe|pRLs_LSZ(YTGv=A|7R$Ti4n*H%~ zZGsof^Wi{;tH^lxnP^__nwy={C!=r7MFo;8XkuI+=6IJF&TD&H#jWDBoigthbu>XG zuw|UC6&aziYL;6D-i7q%;bQelo|4S8ml3wt+)M=yEWR94qP&&IPaX3|yZ4Gu;ZHt~ zgF4PSB1uZja6;+t0}I6Q_n(?O;_{eIoWQ*lDDAeZD&2)wA_&#>Vq10#jjwg*;&rvK z6Y}$&Pob0eCHec+KFu3V-E`wh^;?Bp*&&*P2!i$xJ|Vqd z(dw;nJZ`HW9 zq^&zNEkR3dDWu?1c}whN8ZOoi7NBx2DV3gXshU1jKMFFiUt*zw7F0!#xT zqlT&@@qIvww%2IibGx>ptR1 z4PHi z{~7_hh8#Qm1Oe@&b6rfpH|-;_%v%51D|jTP|LyPXGs0th_V#YAt)In&gH6I7%t%lbv$?2RWnz0 zeuvyAZ+F7P3;~Gy-J1lP{v1$0Xm@@)nZTXKhqb|rR6jec1pht;@uG$KGsA@&!Dn8x zS`QV{heM{PgWkf=re{tF*kQMT_WYDpOW3upu{9)JnURSFghF{)wc+I??{|REf2yw$6Jdjg~sv8Nx@BKJ~Klc$UYjr)zZ!|(*oheJdcUZ z84lbZ>3h(o zJYMW3+J_nIY$6z?UFv)UaACI=m3^TaY#o)HyJNf%JFJ8JHho-RB=)XilERjm;p`tT zDxcqlLJ6bQEzPW@N$Hr#x;|$$*`rgI$S+-_-%Rf`cnHk<@^~@Lj;566_6cPzMozmJ zmvex*qc@QuQ@A+Z!^KjW5n`pUZIYLSa6O&Lq)T6@5lS(WQfnPuP$U`N-z!vd+6h_X zYFu8at^n@rZ!=r%#+bsenwU?bE+Jf0?4L!kK~dpAjem0g-BY#q$Qsqz+j;4(!i{+> z@}3r?J)cPrji$6g>1H3lZU1S=9YJ2609|{;RH?HJ{z4aBeqNQ(1~P|lU{vGrp|#ZE z`3Sq3&ghR5L?*XS(6BZu#0wJ!Eryo&99D8pS}jTE6%X(G?lNAL{A0dD2s<% z&txeBG;AA|7Hf7}jd_g-{~p!${U00FZWXN=8az=lr68PMGOa^Hx>7M!No9?FU5!j} z(rG6059iMIeJjVpuM?8Gf7s5VvrvOtt(0)nu-$w$zq+dMpsGl3*pt?(+Go}jjp~|_ z2&FHOsNEO!n14{VFEx$ah1}#UN@ncT)_hC=leNnIOwX5``2?*FGmHX0`7|f^UB2^X zaK~6D4Eo_qI}z-#kz5j1&@nI+(h{s@29S}7t-0PcTrGZ!L`eu;H#lFX9D6!8H+w9) z;(|1o$~F70eR%!+%V?44uk{2Tv?XODkYf8>#sMXFeuMLr&MWDF(@XuEbRcLo(^eP9 zqks2Ym1b=*kT97Fb~P133_iZ?DM;W3o&yx2nmJ4h(6y8RxRjaBNL-2R&6-IBb1I7$ zixHk34RjXHXM`;F4Ee)xiiY$CfUzt|la{>t{d#{WagN&-+o zx+#*57?%ywG5vmn(47IP_Nx?No#*o17{c?zt4;V?I`3|iP7h5w%WWvd@ck7y-QK*j zV}iy)Dsj<3`kB|Xw##f4?c!?)16i(l?_AEd+|MLkRXucOC0*ig3Rtg>AVthx-HQgC z&sMQYvQlV32WQ2OT!7Lq4sE7)_vVaU`5KrXm&^`eQ!42y=tJbwwA;kT!#}R84Rc6u ze3{jVqZI_OFJ<(OUBQq`tnTA{50Efo)}M8TTg|?dqWmqgF#IA{UP#~8HEJ(b`?rvq z{jq_IEF3Ul2b;KLiXQKm%OJiahR_y~yT56K&tWxv)7wXi`+)Jf)*~6Ki~O_I^*a@k zUJbs#Y66)5>-88~7e4V=8ey(6l8T;%FV0K|uSN}zY8&wbBX<`252iZZ>6Mqnp^CD8 za(G4qW8G7PRMtwj&>v_PUIvRah2bOKI)xu+LQo5doSHhSu*Z^So9Xp+jTN!>SLie* z4?d;^go{w>ANExc8)3O`O()&~eJ(YV;fX?!vBx=mBijm~I)aeOFJvM@)q<=|58P;( z{US(YaK-7eMj=pyAtl{wPm3_~A!&u`@LkG?A`4Acp^WIb549Z$s5$l4#A!rT!$;qS zZP7fa#gc0`{M^!-m(WPedQ#3VMh3Ip`tx*UjhD%1|g~@51&#n9k zhWO6*#Iruw{^5Lh>Z>T5iV=Q5Qk!tCo&IADs)Zp51uf2d8O{4cVRIwM5Ji8bRodc( z42$H5V;N9IIk2j&ATzIM9Cu2wA=pl^vO2dmPwZF})=^CfD-nKX+s`fKcFF+lE}h`OiPTAyc9O8-N)H%?h~>c)1T$&e=B#< z=?_w{r#HLQ^+9Q%s%I!%JAPWM_%H`*GhwM*E0n^I}6I-!& z5ZNs|&Pu$zjGQ$5#ZoN}0G4mB(Wn{)utg*$Ro|LOb6(DLG;wUYpWL$(9e`drYkksW zh1ied+>6Mm=%vdmrWj8T)g_i4e#RRs)%1|AocYI?W`h&UOcu_8hnMt;{qzYCM196H z=XAD1%2qZi+Q)v`4mFA+00RC@k|i^1f(^V`*7B*P$H{CUt3DB1?z_*q6}EnO@g>}B z#r!~H<0!f@in-+DM)UX$?+0a7=%mW_j(gP?3sMumhwF-xg(0&NKd(`8XYbG@VP_}^ z(QVlNIh7V`)6Nb7K{O1}WX-rCeeL38=(YSVv1Lsdxz=ROzFZ?+wZ zr-|ID!p`Ywf(`TlrUDtwz|I$oAF{Lp3(-WO=iPsc2!!lLq8;OV49 z=5a#dJ)H9(Oo(PJ*~{wd3zxc+pOo`i^#eNdia1GXW&Ugk-DF?nVXY5oMX70#mdAU& zbPvrD!Nwx*|Lkcso~i7>dJshy8oo5H+nFSpB?>(n@XWR7GkjtQ2tvb@(!5*XzMqU+ z4h{USmBv;P5jtvV1XY;n8`G2#|Ax3zz!rHYQs*TZ&8e#K|DzhKm4_!rxrUaRl8jK$}EwC(d`c z{Vt2QHkn3Oc(|vYigcxY*votMjrBz64SE%(P{IMRL@`N2egxZUQygM>(BM! zi$h0$18F;|Vn{r&zMy*LldhX=v{sSt4WphOemUSSQYn%;Zn6?5@DR1T>tO>8=0q}4=5GJ+ca z5ktb4njlhzKW(~u51sEoLe4yc<`*QW7JeL!o~cPa8!~IhF*E8-$Ni zh%%f>+Y4`M6as?1(oZsl{l*S705;li!n7n%W(H-yvWU9$!fz`A*In3w|9bt`&(;Kh zU`H}={YT&iE|FLs{0w}tNzycGPY`gn+XPVDjswmtbpeW;%>T6jC|(-Hgr|<)+W~S} zqB0}AvwF`)$yE-noeEgB?u^3BCA+5AbDMtk@oGUnBRg8zeAG+}mA{jZh|&oieGjz` zDkZ>U0?J{)J?T>0llSFHA>Szha>e4DqHmFBslv8b0x)Dl^9O$=Bp=8x*{j)S`d@(? zeHmm`-BR`fjhF#_qS;`ORv)MFUprPc-e4K17fsUbw;08kpwEagjdA~&ulEPkqDLy@ zs+sAehyz(3?@|~tg_Ly+?#;5`TtLx1P-`oG8XpAIM1E-|(COC00)90S#rgcZCpyJH z2*gPcACNX?+efOC|Ikx})XSj1MT61#{3>n^@u9UEYMV|GJp3&)Weq>V2i>>m z^RBhmY`vd|E(S^SG|M?5?;Q#$;e2WJ9ME^mXl?CHpOU0m06479!U<}C4c3O+6+*WR z82d@%j=adAXSI(hEapiYoouE$`~yJLZX8j9T6oDh#MAohSI)otl2(_X`*fu4+R76R zNJ5Qw-wYM*dC3ali}C5s6ej9(h>?>Mv?0k^nZ2-iTYcLMp=$sXU%aAA1a24m2|QNkbQfMuP5PrysV(aOa=X|)1 zLhqY8ddr&JLc6pn1bp}~0U)*}G!>id%Je}A!Z=>@@P1Kdx5|rL=PEAY!re`Lz%JB{ zIHfA|KDUU*iU;l-TW@;J<{;vApI!ls2*tL8p zv}Uzm9O7=v!#lUklC*#{pm?%LDVFhZLtXVQdVmc}gY^vFM*iE|FB9wycJZUH&GQBW z65Yt$EAPL3TY!Dev~D3?_;Op;j?oS{zbJ5xxfjM-e=DO~O5m_Ux(UeH#3t!_LmtDw zdA@gav(rR+3ssSK+dZkh;nULRE z=@$KE?OQP8OJUbTp1&#ne{BQtE;4?Z%%}T&JLd5HcFe#evQegX{>CBK4!95>zeP`Z z*v$`VbO8O&Lw<0;XSns=k%wDg>&+9q&G6%};;Xdt!Q-1e!0E(ib8xz+lW5GJ73vAk zh?O^z)X}Bz%Z~T#3xH&ml8Gn+7e9J@$dg}qe&)V7mD$%4E+WmV_)JFUX^FM)29x3AP6#je zi`_{Y@W=9R7Tx#Z!gMIr#J17L-CYlrGSliy1%86vX_a-pMZo(A{rEG0*3h2k@w#NG zgOfomIN%TaK{R?6`gvKKjvuqh>F_y{a5q>Zkn;0c7iIg~hHu<|8`g*MZ)tXpp{>6N z3-f-+-PcCm|B7?+d2<+>FUZrzyix8kn0>401Kg%PXec80=gA^(bsBK1Q_^Cg-G8%G zDuTYyp|ZiS%B#K<>(*-&b>Un@k~J4;1X4faMta(5PQm|;c$DrrSvYl^e|n9?#P>gb z>2rUDc-m3+XTTTJp>#o}P(3Y{pz{#&XO%6tZ1}ERJf(bJAU>*(%Vhnf>H>+_|DHs{ z+_t}rE}%T5T>Azi=07v3kjb6$FH}qV88HNHr{s`!hJtWGD7W}oWjRNg1LHAjaUI)q zreH>vjs%M^Ga8dD9m=^h!Dg#D=i9=NAz9u!mtaD<EPyewnbG|sbF`b&KT?OU_u0UZR*nGtM-g*YU_q+m?AHAOL`27McFt zSGtF;K#k|^G384C2dkfmljCQpp^_ZQn2~HXYMqfHD`haTvh((+laEKKq4h7fqrK@3 zdH&>Ci2A7z`4kF2z(!81#l3f8Y!v0^%y@+3>;C>8Zcnh3$ zT=!VbP!fimXnF({?cBI|@2bH{ys#X=1L#%vC&p(g*+aXN>T(7f*;g@z@le(7ZKA#z zFx7pH+8|)dhGC%9$7Lhsb4`VYMw&_3N)Q+$=GPHw9@kVOw3^&LBt@&qqrw=uuooae z;#f2V)GxM+C%vf!WZpUF%1ViSC)$KeF*yiFyd(@raN-`j>?n$lMV9FL>n2neG8b!dGxluW@vLY*OP7p(NPL~p z56cj=JMw;@zx%!bW0GK=1&JZkSl|;wP_Zp#+`CH@%qvGyRKHhqDpPWrGm42-ZSN?< zd$7d5fx%`c@9n+0l8{(U<2zonCpgV5>~)3(1(*3*`0`iR$yX{)gPJs~h z$wxJjTo1w(++RNnLpq&UqwL?tEW$-PQVvr=1(^QPj$$`; zB19uax##^!hVdSLc%y6iKnFP?vcN0Ar2#|$pNYObo zc8K4O{G@L!eJKZN>Bo=oS8koiHIe>BMa*VllKw8Yh;zGj01cfXfDrGjg7k;3l$6nI zAZ)f4MzSNG+-du1=Y~NeY5Fi}H z_ej`FC5Uw+zV@v<^%*B3R^%d!Pc`vp!KGbAOC1zbh%_s-Ga$v?mgY#zz ze|=gSZA959`!^0!Tjw-SVw3qERIXnz%ZDoKPx zs9^pU?(lN=yih{g3Ag?!pu_qX(xZMIym-PZ(9DE`c0}!;aAG6!KUAtB7E9=c4+W0^v8G!IsgArU-+89F!GB~!-*4W`ge4l| zUl{Tr8zXzs5q}}xrbTA|U<*r@U~X32j0ZWoHpBmtIlLvi;NKz*Y+V10?#m&DzI^#k zNhQjkQlBWOP0FA!JTW)@umoi0yF5m7L#7zr)T+|xTt|V|)bH4L#P(OT|AM%mrufnF8 zxO&BQ?`zpj@zD|g4)`*Mk{$q~ZDpiteZ0N-Ezc*rJ`ps)sTdHH=_dL(DdN#e=~#g# zbSht(R7v{fI%@(&U3@uQZB2s}us?MMO^RTmOvKegDx_1%YKMS8*;vp6H@(*WLzVv-xW=&f|E&DiZ$VO6g z-}ZMoHb7&7P*EUl5NGjBGK_B;OG$_PHtBcwVg8|oM-6c#oih? zd_=SRGeN*yn+gN3{c%k;nLI<_xLt1rOx6!8hBxW5?xo$%t^WzmqoCF0O*Xyn-r=QfTp6BH%xX zfy@}z*z6dwJ7-qUh&|x@5x1RS-R|V?9< zlnBfRNpXIqr?&uUI&yz@B~+t2iuLxd94cPsZdC%R_w%>TGksDv*?)H`FxuaQyB%AY z-o2^onrU7%6lGW_{q4#{V^ia2***xXZR zN+R#}WYtjRbs44!3eh7j8 zL&(o3@e-7n#-}<0zZ;-rXy{L*UJWz?`}>&0iy4hOjQcjOPC$WtN!11VU2{9ViT588 zAP@9fWy@ZADiNX8Z=vbs%E+1{D}Z~g*db}+toD_bz78%QkbXbc;7kssrp*1EhDCIH)DYADRxo}_sN!p z_bNVHg}WwEW1lu(#f+)jdM(TQg^n;l=elEQkdGg25wkB%<4qY!*v})hS$94TK#^A3 zne{hW##CoLbdYPFwkX<9m-?E?x3v;yWwMhS)rPc@uE`GnpBbgF$iGC!N+zFo&NowF z#Bg~c;>0k(*-i5 z;#7T=9|##LI+Q+j!yU^%@Bdp-HBZ9zd^W0+<5)RWF9n+BP`R{W#erwUHa-bGy5T;2 zOf20?1MToWM1FZG@K{1Vg5$^H6Bw_4LiQ=9G6GCN9RqZ}^SsRsd82nvnj0-xY~TL{ zOR4@BKS0M!yCZr1q_L8K)KI`4MKEbugd+}E2qqOYKe4fbNH($9XzgTu=fXe*jvljV z${yj7WX!jKNo__g12C!W2|7r9{nXJ@)%hgjxJYW;VXGo=2e z^%k~4s3d|=|5iRoWHEl2_xuLUF>y0q+nhRBJw0moP?_{~nfZt(u3AkTO%#$ptbqNc zGq+gI^UmA1Lmd0d1!Xqnh7fWHWjsE-G#0!xk+kX;EO>FXu(=q+U24M4VQCJR88nNk zt%LUc@p|h!@65S7xASE0#I3IZfq@5KCvW-fD~B|@j{DkmD*KV7H}C%{alVUnKtQKv z&dX=os>bCCEA~+>Md3uM3{TE~V$fU84CyUc7_y#X{*K=oQBLKz(3typKYI6^R|Ik> zvb;8{!N=Qkp5?PNtrU(Q-*AjS5A-%^9S+<-i`HVSwic1}z3l&f-fcJE-H8MwR=>;= zyU)*Pr@13y^p=>-xHo7?7#oj`iS4MKSN2Rvg^n>l*+@nkCOo^fUd3iPC!^+2U)*Ol zG+u#6!l!7?<8~9wXR4Dh_xT z7VVf`6E5MFzzymNF$L8enU5f!0=B>22*BHFExUvM2nDo{zfkeG(wKjJMRpD7ZHy!D zcm^*Xp)ipysO$EdqXAjvYnK9wSJEd5obQPAL+CLbkz)iv`w`WJf#~|HWv)Vqp(OSv zpH@PxogQZHGeEfdf*LlWh)Ns{F~Wl})=s((goOheDBy^Y=w-cpuJF)2)6GVdw0!Xb zCG(F66YC&c55&w*S_U$1?qSW^+VTXNf327`JWpJZqEZ^C_3nmVhhC#E@=PD zZ}$4Fo8~6+b=n;&5X!H)@4cKD_L!F)s1xfOyvs7v0}B(k#`T-w)@O0c&K{mtsB=); zgM2zj++7YG=vBg?@0yFpwTPvrd|E1%Kd{2v3x2#ndiH4KN|*$XdCm_EYcJliy|E) zPP2H$bZ(aUYAJKnuv1Kvu|KbrP)7c&Zd;smNNfg%a_mYQhZS`{=Eg?f&@)8#-|Cf9 z?xW}liV1P$l`l7M#{?rUZMXMzNyjuXxLO zoxRl$nImkTkArkl_R|BwU2q&^5Dq8jj5^!TVRos%x>3nRhA4Me zRca9kX(gN}6FF|5dR1108B=*BzNj>!>C4<`Ev;TWiM(a{*#|Za)2X8JBA_4+Q@J?x zBRd9DULECeBPFGyRoyl;t*5Ca)luy03iH1Gk!xK-#;z3Z-`uF_>UR5~^)ssj-NC*{ zmsA4Cnn<#;aF4q*6Q2@i-=9h8vZT@o0kg!l$)9?R%TFl0c)Vw>&IiW?Gek8NfahW{ zU~jpS7^V*c!1-)aMt7B2)`?H?s>mD4^5ITzJS_8a1_kZ1Mfs)VnO6ohir%~;`s6dY zaHo?0x~6p#(FDZ)r0dzbz;lY3K8bX7f5ybFR4Qr>vNkXMN|hN*Pj8B&rdsy$rU9q% zdsL;54&xLYM!sXTr?}fPz?oJ6_V__jI`3t}<9@|!MC)pJAvc>I@ z@;W8zYcZtrns!Izg;%hdvdwTDxVslv$0kz2omboy7q7OYm%^rCHAjm(yv*fGHcI_) z`hDAkcjeO{BpML9T7wNSvr7T4=vbWy6TTpr$Ho4*fC*0E`<;QX=-fQwh0CL|tg`iR z<7b4oVG(U)+P79wAr89om;G0K9?wdc?nss^C0G-*;KU!&ASAD)AY9yAYfT?H7i6Ci ze@$b{?{j$(0rA%q@*Ntxusm&;3gY(HbJX1vH7N~#;bwZiy zkuR&)sq&`gZPQ&yw^KH~XOb`R^8Iaj7LCf92i$%vU-lz@2Uxf4 zVDuT$6*+^)JImNU7M;_beXMYwRthV6e`W{yQ5DHH^@oQzl5v z3cB}i>l!-ZgoVIlK)kT-aKk!86u1$`RVWTV{J>LN<%vxuhRdHLba7==HhX{Vki#m8 zyO27nU!pF0AkBlS1YIJ)u9U!KMx7UD&ns||3K~=*(KDA)&wyy!(HwtqL&%i%M4k}_ zNk|6^4)1Ym@*#giR{9QsOWmJp_Nfqa=a+d|K#r=7# z(!6s#6>>ds2&N{iGfajC8NP)xSU^PK$^B4TW2N-UM6v&R#sGyRi741zZhu-lJ0+Hj zYV2sE-|F0J=y5I*!1RqtEJu*w5>FdO-zv1O#31Hx`$brTbr%}7OmzIO@Z}T9q zN!qtX1)e%bO6b4a9Lv+dxlfirQ}8Ez1LhJBR# z*4KpYUA(+dx>Ds_W9{CE-=nMD@2I=luQb;#9d`;a@!#nBRu%Mz7;m+~m@!&WfGkw4 zZ;$U{q|<5!>(XfjVw1X;D}v&&zDnTUCW21f@FNdVc|MxhkTuz@+{dumzFl!bvF4}h zAJ$A?+Y@R!yXRRuGo1@Yo@mBe9LkvB}CHI6G}jiEIXUo0I^Mop;;my5H4Ra?*odjbN5_rqxx*tg;_C=J65z z;eI_8@XLu`a#h7 zc|p>eS^gXtQSJ_Hc;)7&=KC2%(V~6&=!01=3EDr4O3esNDQoK4eaf%1k4oJ@s?zfH zl~t}UysrCC z=Ykqwj2DTh=ro`ke_`b~t_~_9ud6HFxLp&N9c}m6BO`x52`ZJmAQ7nQR6 z9xNVtfK0qTRzzgdXYTe!apWjF-jYVOfa}JKOqP^~XlsVDSRNoXrYb3kZBQLg$9ryl_n1ThW ze2JC4j?;d&j%ql@o#fiZi!EvqgH5-N8m3&YSmw0VK$-tYy8Afas?nB*n$fS?i7&HE z14drtapNUAGribo;xn{C(VvumjHAbB;dMV@ztu&5V&%IseyUFF*edUck4lw!bF24i z9bb=HuHwus|5Fszh*Y$+;&H`nev18(u4FV|Gsdqcp;}AQ3Hlr~ap4O3_w~K|U|=c= zx2FsgPqpl)GA`%kfDZNU`&G2*D-+ja#jEc0@eOPtG|l6(Yj{rVs~A3elZH#udK)i< z+pXFMO)|$;I*4+pk`TaO5>Zoy`gx6mkNI0;jg2CPAeHo1XTUZ7^7kuZJw7Cmm(U~C zl%i$P%bj0KbPhDtofzc zpwd$`_d3etd*?xW-cWNpUAC|2mPz`OqoL8!pYbg)4#mdAKa7nWpL>H1?}6)=#?ueR zo(f*~EC+rRPTcsbggad$2j1FSFMQv~FZ}`?*WOOfszs;PR=m&n4hlLqgx~%JazF38 zFTU}fU*(a!WYs^LlnOq|95i2wPBjbNcRsH*Pyip`uv2b(gA9FZA-k&`yYmrdEz9tE z@%q^)cYe+2?EKg{yxH~r>5c$60Q9HwPqRT+^T`Wu#Qhmxl4qm&=0+5GE#_)Oz~IM& zPI-CH_Xl19>;TUUESh|8yVDZO>d}9A1xZyAFzfW2Tb*{d8nmvK8Jc0O@+J%#^*^VE zIIBs@933yH-r_&iy`fK0e?7I7W>@?-z-2~U@LX2yrt)uc9G9H@bcZJ6HHNyz{{4KO z^u(`vj311biCjC8wR>8%c%a|GM#StjpXxb1+Pom)->KL+PcV*(*p;R#nkej+^f~US@BDE zqug5D;Zvhk;&r6RNu5T0rmt0|uUsg{&&ct&m|>KXQ`q1a`sDrc-MsqanLEf_WOMsa z#b9zKEJcYV_2wm;FWSx?WDs>65Tn)I^UEaSkEW4#>u&UVAWxYhtsUmawFq-^Tj1VA zM%;?C56zYQpO7@5rC9*paKxW^kl9PYG?YDY=&$-euJ z;-*^so1#IB`9GyAD~byc5vy%pDhv(W`-f4~$0m7*Z5R{lHOuq~Z=Ls8tE(Syf4pX9 z{HJ3pe^0w1u7 z!!J=J_S>dK<0U(Alg^R|@v)A3R^-=HiQn(p!yu&;g59ya9iHOMOX&(~|0MaP*;V)A zpsV$QC*xzcFzyQDhqGY_Yr*uId;zg#pCi9K5s5!Vu|J_)_fs&rm~kYeS{rNchOAff zP6ec!C83I|6R&Jasq#~QwZx&)Nyu)?Q)@#iPFWUs|L3m=kG$CQ=fZ@bSZcfO$p@L~ zVQ~IXR3C=+Fg=cFw9Ax`&sImQBug(|4-XG5ttBFupUHFN`W@P|X&u}Z9x<&%E>&5! zFw&6`7TKm{c(Tgv z&4OJnH15eu_4$rfLR}L@WW6Kvy-*r!N~M2Z(%vPIL53fLe$iqu>&R78WFpT8kG@|- zo0g)Sc=P8=1K@=6GdoFxs3SK!Pll4Vb-y`H{VGED_?eb9&Hp(iPF*3ZP5jW!Nvw~1 ziw`kTtKqu#YztJWso@Ksm4tM!2E{@NtQCbCY*VxWivTvs3fbb>cRR0N`EO!W?3M>6 zvY5dYBZ?)%g5{&BTMqm81p$L*_@^QErwjE`wm8T2VX@F-QTdhYHCAH|9#;yJ&`$IT z(xu0O(+2#WK=Wqpi(a4S$FHvwh4a5%?nJG0v##7z3{`*SwVM26OWOkUYXKw4hARUl zUT2r?uu-lXg|pl(`*L60F$MD1mSL0G^Fr-_sT*g1!oaZR^l6S(iYw!VoPjYq%)rj! z1)bc@lcf{mc213NfiSn|Bzhn?Mn{Qc9by0Ox%WP$vGl2DMK?H^pU9T!WmDAr3l{_0 z5xoBieW#z>6t~4Fk*aYLfe{L_`*Tx{l&YthRPcBre_KrPvA2C%s)pe|{gTVCy|k}e zKtkx`?DSvCze95{UD}(0+eYsoznFRX^tf{}RfAU3HR1Q)TkBE=!28E6@MSEE^488G zrnFXrW7GC`_#50Z%{C|kBy+rb#+`9l8hD>Q>o>WFgoCGXELH~Pd0b5h%Z0@Y8C?f- z!%CarJ%$9?|K*4#c)XTL&VMG?%B*;`O{yo4!--5)CAPP5_t$RcCOG<-1ts87D|WnN zH#7O|xHOIT%sYkXv+|@Qj(bvpH1m$9HbihaeRIGEIrE~B3S{NpGEDzT|8p39T+92*Hs$I>5b7ZCAoGNgYu8yDLcKHZ`~FQ&hL9 z`o>-ZvtO6|Nu=4KRuc43q7`ry?8bT1p8@4?cRI_yw#1xo%oo^w%Vjl6mJII^M8t_m zP*3(N=+gAg3fQ>j-2q_ku&wU&%;t9Ka#XuLu<8%h&Y!^y&6EIT3eNyA%3q64T`0m{ zpH~Ttup!b8z6N7-+;GFj(%yDQ!no1rgZ~b(NdZW7&X>#!K$rDgyofWmp_d(>3k{cZbE@2@-5^ zcL?qT_W&WdOK^7!i@RHp5G1%0+=D}K+js8g`+h9fEKCnQ)!kKfPIXsBr5B85hY6iFqunD+9xH|ALc?VEM;$v&jnf!b>fQ=h4}6ze1a2zY zTGYNn9ZS-8VCkzJ!uvuoA+27)4pPxj-$pH+=KF-K!_gvBvx3gjB9XmZsEJ;RdR8JF z{p^^1QmFZFR?=8l{jb?H1w^#i%6z&dz9%$m1LC_~)HyATa)ZX%qvJJ|tb}ahDSbG6 z(ehGk98vfIZ0c3>9-5+wzFz>)r6G@-wygl0M5wBjxRrQ_WlsqblA=*mn^ppw54Jc; ziBP}b0Bqdzi^n61Uw_NN2aQ7(N+quLhD9a*R09j8fFTMAvC*uK;SKnv4`C**0F!)t zBz{5<@Sa}SE@*WB4OyOS>asBMA=?OukEN!N1YFcCWs{UzZhJSSDH)qK5-{vuI)W%B zh5v%OB8&TocY~q9g**HD?1T{T%jnJ2=@pCk5`|PbOjKq^B^j#c@o*aMM?_a#uy_z7fqHMQcX&cOtv}f2lDOxF}EaivfMU*i>&%`)T~dD40&HYOWaU} zrS=#n32nIA7~(g?tzH3}^Z{Hhk|nW=%I8jNhpzEh@X!dBYE9Cvx+MAWQ{0g`yq!Q( zVGLOU=$kxI^4JQ0ke40FW-C_WxwwUS<)MBpJcg9?3&RM;yd3k_33xWC(C9>Z&_*fw z8`=*RzDyJYY0WJC{Gtgh2(bRnqkzc#v1#5v41d^cA!!jQPaMH$F&ktS#Q}Ex$+shz zKghRGeEdy>fA&r_{~sec>*m`tdU&bPp{nWae=5Az7BNgQ_*^!N&3dAJdxFZh$INq5 z%2c@|jT_Y}ESZ2E{<8(K5fd}HHM#3t+#ZmuJLeH$v3m)NUQ41IsJwQ)oT)oZb_0=u z4s9d+2Fk5evuagCmfbC=uFU2pGs>E_ZCKxUJ;xY8ko8N7+(9rAQwq;8_IH~`bOfs% zvIcQ2_WdvR$%?_WdrEw~L7h~wVk_r%GADz_qG%V|f0>9_XT(ItN1zDSfB7=Ju@S6C z!o^%hG=fRm4st&*Lh5ZYB)khHX|39lkJM@Q-Y2uf1z95WXC>;%v!uiZ4h(0+b`DTs z%f`G2j4<)ZhsDuV#sGs#OA8&7in6TvY9gGe1Kl)% ziheTGa-Wjt$@Z8064jY2KE>h!!XoIHeii>jsiugDu3~Pblh2+&_^3ZSe^NmodX;NxmU|l-~&l6Ve7O-08>ieREoiod?j*C1MqzSH|S;cioX(SY3$3a z{vYRXg5@H)dP` zp5u^r?#zV-LlC^_zhac>iF&SR=RrU#Ifl4`iv`wqu^cs<(We{=sVwgA* z>!ZVzm%mzR1S5z^hXB42vt?OghlquBZl&6nqu=q(zmzF5_uNCefx4fa z36RPua1y!$gVn(IB$->B8x##lNMf(JLmCS1N#ysqG^zjOkXmDiDUmst@`oiV;gupl>$ zR$Tc34`?VxgLemKpiLz?K|tmLNw}5PGC}hk-9#tD3=T!6_!d&b|EU_6l{Bjm6I`Cp zeqQ3bKb12z5?M$I-cJ33R*HHX+WZWb(oM=G)kFKkBf|IirGM{&|hl>=GEU~O0^WxY@Qnk8vOF=IYqau!qh^DzhR-{ihVQh
    Hp2|4+Y1`4>PhXOmBFX=_SwPe70wu;egp~(4Ga_{p|5~7C(?r0 z5&FR+N}#l8V8QHn-i~_!%utUM;aLKLv9I0Zv(9!6pgwg#Gf@cq*uHdsdc)&%agC|a zI}%D2jed}aY$=b3CXZR+n4yv?=Ld^MB1I>D1*P$leYPvX|3sJ#4Dz}uPs_YHxT#ws zYrz?J?1jO(d1!$O0jmxH)h%!Z4mtX^B;t(yh+a_hfhc623U12y#6IbnE+TP6FnOek z-_hD_bmg}GDJfEmBc{|X)(z~SFpXV&)ZcVPOC+41ik2t!w0{kxC-es((-wx5iMRa| zlms3Bjo8xOesB0RiNq#vlHU&X$+w#L}uWj`$H zP?>)(+7DvKljMzRFW-d@E;6|np#zImrqr~xOXiMBAh-&JQ*Qu3d+CX&e^f@o&I(e~ zST&XOP(UWv=kN_e-n&f2uBPO4;N~X~pX_0^|(qzj?St*R+5GQj0W$V}>1) ziPTY8_!vSd;%NSg4;9)M_;1y|)gy>!bS%)nBFCSRrS_oiUW&$h0}Rk?#3<{5?2!<; zIZUU7%3)T9(4vXpX<@3YFzb5W%O~#mm#t2<35c^-UdG@UAl)ze zkras9oYOVnS!F)yjtJPGI~*{0>{_I0z2{}XbRrUArguiVd&Sh+1Oj>v7Ht*Y$6x0S ztXS3iSUJ>M5FBYArsIhoduVUpv;|q2GoxrGXK68?i+Nfc{ohd z6=%oYX4N9IwZkH5h{$P|`~dE8k;bd*%xwsuKv)XVw=h5QRC%?&bk$_ovs;%X0WD&w z^b%bq0pOkIu5XYG1ArjGfHH8j(*3gF8Ox+r1YqVohK2c!j~rj#T4nTL=PwYk2JsuU zQ!*o`_nuj@0Vu<|s}1X1v=PK00D%S83t%9`z!m*0$FRbr)lYI;Ms}6Yxb5A6(*W{= z{e{Bu*fq5-Q``G2qKmM7{5f>DFXNn_=@Mq$P`x(7WsV}e*eOZs4?W|4GSDf-5;jZ| z4k^60%|8<_qJ`^-z|%vI(ADLKKjO_;LdI&}Y{LH>;?0XY4=#KTTzVNxcrxC?KSf)o zJYq)FYNjZ*uBEwy86i@BLFY1!Z*7gW!^&3o_2@?;Ss>>VrbPcJf&cB7RC?k=iKMT4 zA6h+Zd^akf!G$rYfWTA^FiSi7Y|Df{Iq2Jw&hqqn3TnR+Ty_h4;n6}Ral1dJTp0LU zIV%I2ld3Rr#oyXn&k;)Z?nk!a#F|EpyYS?K@ zulomVR%8mkd)IoBYOr@jNrIBdQK}oIIDVO_XzLHpt@^5~q=eZK&B2^bhsWYbScXm5 zk66iD3#&M->sHCj$m0r2;#?^Zq>xT%QFO7J@;nv%GLQ@TajE%{?cuL@lV-C48SzK4pU2ro2CNIMtRns6dpO1` zVsOF{vb2)$&>{DS7~>LUeBbdtJsKaB25|&;X*?@5(noxJ%nprZ#K!wi!BSoK3GpsK z{512e9BD$DvwiW3@whwgznI1a6-nI?@CUG|>Ua+FF&i&?G@_UC2O<*l15)04fL&%! zQCoQbO>&&J8Em3*vwsufP~%^zDyYDCJqva)4k%AQeop@N+|xN#rQO>4su(SE_L@I< zFVgjoK)2PUVPF#Y^^`)|q-~YsVUtce&4(0nmVt^kRA~`Ye(UGl>g<0d_A9+V5sNsA zo!|ax{xQXla&jcu+uZsO_t(6l5Aq1I3Gh^XjlTZFr)87%r3N%LQF-U28g%fmu6+N6 z;tY`$ijv))tlKcv{3Nk=qSPbl zH(t(P60w3A1+Ph}ffE1rvn%P zwNl9+{vSY^$Z9y~WK7y|HO)kL%TC2~Qi#UpJ+vK&>3qmKGfVF(>!&q+dZQ(xJz0B1 z{`mUG;((p+ad{w8v7%QrPg60vz~a0>D?-N++HM_Xt0F8&Y;4iyCOc)zr`4!LL(|~= z$6a+I=yy7|*6qA0EY>X%ZJnfrhE$4+!BIzLp}A8I@pY!ponCQ3L^ALin1%C4Rsunj zk*90tK*T90s>dvnrTZz67<5d{C-ce)2!e(b7m1HR5$2`du2Y+ zIqXq55}p=@iW_Hfg-k`jyYtUPCAYSxgrlD*vH^pm!lu=QK3e;RJPsnQ0URY7FPa|t z%9#xW;xHt3t-D_5)GPPKns)g zhN~M1HL9AO-hpu0s@}mtphd_EutUajU7x9ys^)=#C&3`1NTD@eRU1}v3OgJPWkp(3 zXN!1?;N}L6>D+@)2ln>9U#;SY^pFU!9fzWy<-b*oCTY&dVh*LVHq+IWRI*rQHRnaTq%xO+7R>O_F}~kgCNmN^Ts25$@Z1$FzH48pcp$$Aa6yC z*}$|jHC3dIvm>motW&CXt8D-&*#F^4?LZ?`?IJ|C1aV_D+8G zuDuO{5m-H7`Db7v#9(j0-O3td2p`gk{fG+u_bT8+CSOVJ49{1%k%c*ujHzO&hdt5q zgodLVnF#AYPW#ZzfK{wq)#+ZcP!wRgzo;Ae^t#pFKwNajE$LpMPoV{2lX(3A?@e%6 zu|TszBfOt$z>TQ#@>yvpW98uYQ&EeE#>_G03xW2D-|J-|vBOZzEcX1pINR3WPt774 zq+VF%WktmI(FA4Y{n9DNV%h}CUpr8glt#4JLO?z(4DqbcxhDqgvxN-1Zc8&?gknPFggK1QDH=}M9|lj%v_CNI zwIiab3Ut@@jIq#O0|!M^TYq=E+|UrX0!kI@|bQpY~KHQQE3eYN!YWi9`pA_xipY3C@*6B ztSN&s99t-oCTK4^_{DaT7D-Ymvb#`HLLGlJ2x|NkG)#r=AJyINy!tdovFkGKbv*-4 zV+3eSYFe1~Vp8=Z+xGNoWU=qu^cs|ReeTdHnplz1?br2tr6ZQg|Cn)Tg-0FiJYZ@C z1yDo~RC13-cS*At1y(v0Urz${$HzZGMVywDL~|A+t0Vz%p}Y6r7L6}kZaDgyPYOE|_%%wBUQ z-yg0m3a&#LFJ6LA^jljtJgPm!KIq*WU2$Oz@>2f@f`LaP7jmTrGFv0leHvfN-j}YBm@*}vr2rS!p`Ss zm4xq0i!)bg7afsH{U$xVEq=Gh;&Z%RwO+r zfnLPq4nudc@cP3zlf&PcK(eZ8M*H?JhQ-gt0eYRq3ED^gnctNz1baRldK$hgtcDckGe0^0;ySVU9%K>~G?%su*{KZ&?6` zJvsR*#gKJ{NMa;qUt$~aE=ZdlY1~yIwx8GJY3)U;m%}-Rp0xp+S$$Pblha7XQ!cUZ zGfp7g@AiF*zeU>m5=ebaqU?C^{XWS-r!1JQTbro&*8GdbJ81NeFH#*);wpRX{{)*) zZ7Mco8&0wiT6UsYB!4LwRwaM`b21j~+eUN9kkIYpTg}L_l5*p(^T^U2&NO8*g-&@r<3*#W&4>1v9@kZi?Owj4sAZR2m=mOBXV|gp6ah zaan9*C0KOi#x-(lWLJ=+(2ob_hbSuSj)?cQOmNvc6#isXqb3hc@vqFwTUhii28g5& zQ!`yIyN@f#N?sj)&Dt4Tg2`(II-8kDeJgVB0;&=K5qVL(1kbh^AwN-T2r~N|!`u&8 zrMQ)pI0GTi^UZ$suJ9b7q$HA9rtgCDHUkmCIv%DUSHYeOjJfNqkEkn;)PeXvWJ@T^ zt-y63zS_%ud8e2bZlhy#&`3Ky+yD_zj2KwI)e7N~s*AH^tHT7?y_d+;JwZ?AT4=&jd5N?+gvz)$K8ig+E&smw%`8 zNPSL2p)*3=&J-c84IY@lE&GEkMtt1m+En3eL9Fq4s5G$uJtIa=fOG^kn_r6^bvWl5 z_eSOSqG78Im(kF9n-%|&+FWH817zrc>SSeEVc)Agt?g6XcK`c3;fSjDVp3sbmi|BC zJxz<7?NRrFK@$`{l0PhG()kP7qhG2(P;8S7>OaZNxMygqc(>8T9@H1~S8C|ng@3T% z-hs7}Ju7}n%-EKGaugH2xE_krB7WxNelwZ(xf|DMtYXj`WiSU$*VVYyCL8!t3lhn! z_`~!utcmlIVWIiH%fjQdHaAQq-?|UGA2omN8-9ABJ|;3}db;eBNrEn6TQVn}N_2+j zP_HVcJJA?sj0zUZp3n%t#cLD3E2(oRmX&?R#eBVo*h79RG}GEcP63@I{$!YBCp}-k z^Jc3o#$pfoFa4rDq`kz>TJi=ztvp`Q+sSMnKkYRt}uW?SYPP!17)Obh2s z3zQ;-?Ebdx_m>pS32Nk7!?fp4D+Pe@! z1;pRCd05cn6&G0-=~s#Ps|&AdHAbt+6`CKo7vs$l(;j8%n}7$_LV#Bt`#h^e-V&f>&?Xz@)FZkT z)dHhS7uu+FnP#{C8p;=8SuL{)+`q3Sst-qa5|%#~Ot_3QsMY&EOi~#IT%LgDY=+v8 z-q92a_&w0Qwx)+HBogY!W~zNhEafsE)ug}+!K^G)AsI%9i~Sy{jC~~2m-;8L0j97V zRHVW%Xv-dC19~bmG`^p3yE*AJ5_|J9rd_@$589H}ToyHl?U$6>j$XPppnkApX5(C- z57`YsL-}y4CE@zst7psVvfnnia6wRQQTo`JJ6A3*|2;4M=luY?9}oIi&DTyhRkx$> zp$!cv-xCe(d%4Z@uRUDQy-0fX(;bIgL8ct0Q7=<3{(3qYmxBYG9b8R^OH}aN4odh= zrLKk*hv2}20D|7RY(9&2FYeht$))QLIBMJGwU27Y?)wD?|A5@-qPYCB9YpRx7Cu+8 z;yOfQ*Q&ry1YRL*3U0!Rp0u}G$km0HNw@(vKe^Ptc}em*Nj_6(RmNpmWdLPKQ?dCs zY#V*Cv5~Wuo6Tra7FlPi(yt)W-cuM4MQ7g7nQ>nYx;D$SPnS8sl=WAiAdkr}cAtk> zrL{vMjQ%s1Gpwe+x(A20PE5fE>U=>sK=snN#96ziL1p^qgh!)C=V(Ib|jbn!)u>+MG$0mrS_ ze^uM%I5mBkufExBpVOOTVDal#M<;W?cx-Pz{Plxsw`ymY8oC(VHXT>}7!_ zLJwQt-p-<)4$mHzapTK_QUTEqwc9_bF0eaFd}vQEt9ro@0IDC2oF zB|~sxDoP(g=p4c%BQX36$J*Vr*);{+hVb}1f9$VbF=cFRsRV3M_zBKe7Omm%R`!_& z2-Lrt$VT(y&K@YL+?VGQ-RU<{ z7>?S&--GIN_ILM@V~ivLU4Q1n=eNS!XC@y(_D2H}HsDJTceAXmi?}9uF^5(KaP)eIkRy_msKe?0vrPcIR=%f+X%eU9U_ z@Y-*CAIiG`CsP{wJSAA^?Kbd)YsZ`?IWsVEUS%uE*}kw&pP7J5=$y`U5NdL4z)k#D zc3y!Bn6v3eNrmVEq-Zu<_azkr6Sd4wQa6lq^Ud!{7BeV*a8z;6l?f}|RDywtmqSnN z=df*q#qUZHizG%Ikp(j>tI*HoEiFqK``?opUI$`_-^`AU9AbL$`3V(gFY*D(y%Q2l z`BHYYIogG8cdJ)?lXLL9)qe-zEw}xM89TfVM^jW%98a+i} z@&`Esul7?RP^JZU=u&y^1vml=7~y<-4h&Zfk#K|kHl~m5;)(;r2cUt3fmdz~#U0}@ z(Wi_ zGEB9p?_;M!lvbb(PaZuhapc=wM-%CE23WExd##-7#6+Wv{E#3cn#L zOWv{8v3rwd*Ff-1ScU$U?udP#TftiQa}5HG(F{L7U?>A6J!RC}*+Sh})l|FBN53Wxq+AI%HmI#>zV2U9`+Za4jxL@KVApcOTrW8 zXYYbJ4LZAIJ6oy=Ad~ZGwkOfz?))>Aqi2*e(#F%~ABDZn~?qKWUVtuSbbTwipx76fdDp5;K{Q*+;Fx*S~ty?efDcmUym-15f0P$KOv^!|-iwzRtix zLh1*rbm$ALNXR!v2f2Qp;K5+XOTazs`B2=7z&`T#sD58KkE#P}{Rz_cE64&-%w?S^ z_4e*ogI3}N4zj)>bkL8Q%@Mx&2u*Wqp{??k6$%B+x{DvWjOYR)xA@UX)|6T7n5@Ga zvq97{?6N@b;`9mep**>~6RF}Rgh!zhv0s4sXyB3^U2kXq@+%?Q(h0*IR`+JcXi` zP<5Y935kPLr)1CdA9pG%g~)^AxcTQq)a-x0aAU?`OH07K)|trXo)@TQTU1U8tAhS?b)4)Z?ru z>5{EEjqJA@$YVNvsIWRll#2A;z;JVEtC#E%=&4~}P{kvz(I4Yyfut#G^R>k{^#dw6 zWm;L#P7{`ORt-zNadGKWOJ zRTk-gMEnOu(|oC|(n0I8UDeG-G~rbyfSb*3By-bj%_%ke0UV4JvM8Eb14jJaB)^tr6 zOvSx;<**!zkwlQ&c8CVnpe8ZS{sG)nBbjOZ@Y%Nop?`UMmsnxtBG@CjgasglHZ3QX zvs#G8{Wy<1Tg?4swJRzSRLXb&>(f4((91qj-N25uk8US~&{-i~hbN>9@rMYbmvimq zUbb^B^^!0%kVgC&Bfgf0@rrk5KnL80_^7&mn_}fK%e;m#qsvn>Egu}7w$%I*$BG>Q zZvVV^2u)(Z)aAazVM+T}v8T%2|-&hME|| z#VhXR#Rfh~ILqVa@%Cmkv4yM5=+0=}4%ZiY@pH-;Lb-wk=oP;ObtjkB(W%A@v-ri( zv7N4@R(kO(@)hb3&%gI)7M*YiF#>88&?TF(E-Ipl%jQ3LO81iJ1fyvSvg>Q!u@abT z;0*IW{2G|sLLI1hsR>xxrF8iYesjZ$&oZ2yuG(tGa9j!c!cdsq4E_)~U$|B7OmJs~}8K<6c&DhS>^SX^I}( zK6Z5?SR86AA%Jz7!4khq?6Yl6D1t(g`V{97_NdA(u=2D$WtRGGQCjHp$Y!r{XbF1g z0Vt-Z!A1g40pv+NwihqHneRi2 z*Az>XhLbk!6RTRZM4EO=jq}#@FLDJ^pi&mVcr4ync$E2u`tdB((MULAUy&BcO&W1V ztK#W{=>q*JZ~ylDzDgyZH}k+VD%z9ly!i)_-v!tY@T2|PEBVDn3lS<3x!&>G;3fX% zkNnb&B!BUpL+n_y@=rC*&~s9#WSuC+cbF{$%H|Wmn5>SPkISa}60~p3WJK`W(X`vw z1rQ~l4d=3Fc$5S=1vvK_-l6^kl%)|5odlJ^;!$jrwk1$fhDv)8u>skw6=W@yt_^VY z5||7EYK#8z64R>x5^oT;HKz5V%)ey93$_)60Lode1&crZ^VJI+KOx+|W?24KGVWn^ zhZm+b%_|)$E0#8@G|uUet_71DQWNg+vlk6hfuO?-u@i$%=Wt zggQ_EQuXd#-};uDE?R(TI}+)bLS~AO#tpvOl|;Ik+m@|6{@WKGhWE{uUdC_g?3ZK% z&wQI9L+X}aN$4)W8oLi44S#|MIK)dk;|gD^pK3nu(A66t&Tzj7$VV{B9S1y8gE+r) z3*P9C`XmZ`jDJQlJafZ-D>~=C_686y~Mfw0?iS8sKu5#ZZIKOznf>hdCPRy_R z(IfLQWNbo~-bETQ|8IO8io!mIZeup1S@;QYH`z4rn`k3dLERzA2Q7k^aei%~*27+R z0qtd)@lKJt;`H*m$3Tstjy#_hRUel8Pdx)Fxcf=7&=khWzKH*>Y5&;|&3$F9I_I|@ zi4oZyuuQI6_!Y%-^fWuFjwgR7#cz(m=>p2uAz}w~Z~Fcz{Ab@rW;%mbcpkMy-sG7z zmF2{g-%|w6$&Z4`M9#@}<1T(Oc-c$w;)YsL&+nw5?;B3aISOPsHrsE|~E zKymvfKg7%<8@kV8B%}hkcD7}()J@#WMV!D$`H=6T4LLh!QY|?}~%a0Uy3iC(F5Fz#}p7WAw?k={p%T?D(j%@?g z1J+snZP|C_LRS(1awoOila6i$$0IS`I+rAiO^dMe<>1_6RmXh5z11Ud`OVkTBtRtjTd zkjdO%KE|>_y5u+7{H4ZoH5l?*C9`k2!db-leIn5n_yg%if$U>#WLx5B_tJ4!UMNHA z{Jd<8u`_&^mMmFq$9nkQ1L;G#9E2v-1Fq@mRM%dUs%rl+F>)bNv;5pH;CKzhlW8Sk zH@EK`!FT&QN(g*xgX}oAu-hdObjt>1OqL%~yij=<6~+m%omO$Z>}&rf-_-No?b+HN zU~23xtRP3*8TOqksH^esmhUNbh=Y!~cOEVpYIk${BUE--_RU)K#%f&&G}v;w93sl5 z!nNA}5{1Z9wU!Mw$JN+g{F~}>@jeOOKyqr~$L^`6hkIK88x_bvdJ@b5BkL%huj9pw zG&lYcQ-(|m6US)<7xwj>?;?o9g~MsregFIcKC+k>V-eDwj3)}`T~}tk-nAJ;SWDYk zyFz)=s@k}uxY$_(Z+@`XLxjJ}SY~|DY87DE?7HxM5`GOAGxB7>==IgEzb;L$S(7=0 z5~G9cbBCrkXRLc$WFP(7z2&ZR0&!)Rn4?-n$Dct?lzZLyuGf0BfAV~}4e%Z+j3C6z z@0t0KzD-ue?NF2Ia{P_aV6hpXHeH>aup_s~yQAzE1HzuY9XfrT42c8}9PDpxn(K*m zZQxsZm~mzg>)*e`apm1qo2}8K+}pqvYuwX$fAeg+(LO*7-A~J|0 z+Og2!v@q+Sk$_X)OegyMP^)Ie8HyJ-6ru>)q+;P#l!XM8#IIRMa$XRG8KA_ zImK=*oe@dpTh$r1|816(FX(7U5!NBjMk3B$5q5l;;Cw>Ic!1Zn@HL$x?b9q)~JjfD*R<-;tKK7|YT_(~CqvSU8QeW7x`1J#29C>9I0~<1;`%>6u zhJh)^ZmqA99R6e!>E|!ng=;RU7AAbn(^kd<;@IcB0w(pzIl|L`wq^?vipjo|+{8VOX+#gpWbsA@GOgV^ zTTYT6_A1YqR$Aocavi^=X@8T6fBdA0b=xMjFUf!K!VeKc zxoL*FJq;xGUWhImM2!wqzT-{_Vp9sSy-Wyy9^)TAQi-NI8Br@yJfL4Cw7!{#Sq|gP zd@5XX9!tIYaH`Hy60g`=8$aJhmUgo2;wY8f?uGD z1|v>0AlR%V1jEawf#;iHr|6<(3t~4ZMt92g_q0-=SS!l;`R(w%xcD--KFH;|W zrw^tJ6kJT5q14y1?;zEDECzo{u3I%mImon41X&D3IF*`d#>82Cs-Iye^zY=~mE-TH_^FqX z$H}$9Mmq!k8%4z-0J#ztTfyxwmbxc$1f-_^w>n;^U7UJ@XC;+N4-J9DUw|U=DFdBD zfCa;)6;@;ce+DA+d(iK|Bz7t5Wv!&d{6hU;k%^pFtrR4UI!1koWlX)74q|R29{HE& zXs1d@*p_7$PNmM>Ea6(jAsGRpK@`=#cU?}B70VZg2{iT@gRv4w3Hq&oOX^w7v3-Gl zk14E?abh6|7ISn=hyIo=9TOkzoDqAV9-_-THHVzads5p&usxyoEMO|dg92b%6s~s+ zy)nl`A}S}9l#I&agk*3|Jk}qxRR~a z)-qx<^LgQsceBiNC~O`jS4Jqm5hRosz`B9^N5f|9&`!I5ZXvck)unUwcesS-(2hl8 zNMap?`U9*Hqf8w{7BFSyFeG@rR;ZYA`b*a9_{fq%UpR7QV6G($S|>SSET)_l5eA6F zcRJjvJU*~;c|WvToB7Mr86fzw3zAM%5KMMoicm2OzOlp>mlah=;9KBcS8u!B^jp<==a8phVc$rzROR+&q7id` zv#GzHpef->Vs{#TRLy7wRcO6r$KPMM^K$5)J>bh3x~`Y+nAN!;`9x-$RcmXn+sw^C z(c#WL(2y-l$yTZg2H@IDi zWy>|Zl&2`-xL)V`GO*9CW^^KC!s9|aV#%WULZ1uw5rVm!*^?iU3;ag zhO|SA72W$_J!Mcl4e*E7BV74H30~kI6K`UPUohn)p80t&gjYe1VnK0Uo^j{mtZ7a& zycJd{!m)}IpZVgVRbR+c`hZEfLAVzyk?Zu0GS(pG0N|6;W;O zMO3)AnfI9m;#+UB!fUX;9rA$^r9P_lC&XS#IQBLC85{$FbM_N^r)sjae!}BF@oA2d zKS;Dkw(_c*JBhHrglfqlJr;s{tCYjK_(p)e4k>rt-oXuI)g4BQARmrZ6r`5d%TBw? z-&n+6sGicrF4_I19R16pi|H-d^a$Q^TAF>vTHmOEKvc|8wJ2Y9Y~GLm#;=E&Dqh=v zrpzA0mOayO^sUK-g}*Bmed!N@wt%l~#D!8blj422DdENiXQ{i;&s)P)A8*4OvNpdL zMqro9C8Jl9!F{h4QAsri>~i*+D#D#q^lIaDZcRO1p0P&Ek|ru_$DAx>U>@_wPg(U| zfg>p@iH_=jPzUA{cJ#on?jaXuv)}TViwDPej{2Kl)C-hp?k#68cVo7H+3X^drJ?~S z`J`Tp`1`)xT||a*UDbIvyNpXz#Mx&qODAj_*+Q34)yy=YxCHjY9=tD?aECE0us z(^5ncsN|SW4_;3_4b%9+eRd{9gOHo#%Jm>zBPv;-Seexb-={E6g!E!S_5Q&b_yq4U z8o~P)z4|kT1=WEZmynig{SKqUf-XRgj0k^tt;}v3mCTF9=B3JGI}uw%w5L$(r$9EK z5L3KKiK&uLLm|AUao)k< zReba2h<-*;32y5w?0O=Tm~ik~YN@ZMAB~yT4OllQZk91@{lE;JHx#Wa;NbW>1pmK%1la6AO%;Jqxz5RMnWcef5-y3I0$hjXG9*Wa;bsqj&dIiKxm1tNa{z;+?+{<`Ff0t}v4 z$9Jigdv4YF{opOw_?Q}uAPyxk()z4-TMw(WcYmPzCuupubz>mt1+UN>9XW?ULR=<7 zbMmm7?v-c3$=UW-)9~{6VEC(Ho9gD+=hr`(pW*JnoXn$E#&8r$_|@UIdCt9Jk3OdJ z`s98{1m|f9+PB01$b-YXY&A!1IDOG4+o&;E{eQ)^ZAOgcZq!_@BTI)bIWF;81~8=k zHa04BiHKkJ%kmUKsdk5u@5}$E607BrOQIVcuORrIVky5NAgdKDaTUqG7 zX4TLtHeN!59Z`I}ReT?0OF6NwOjxF_aWVEgw{$aVq&RHDyBT=N(Tv+;m^K3TuLH6D z1HNIrlDZk#(~lqcV(AF_djjBhCf}s&q0=D5mwNh0KQqL>f}AbVwduh_HQlE|>j{cm zC8Feo>TdAH3*$@TB>hA9#v$-uWxVpPm=nXeXXQ6jMLr(mtG14`i)%Gc@rCD9{+ZYS zlz*0FKfa(2zz}XohF-e0F(}-}=EnzNz3b7)BJ2O6GWt&^U-pMW-n6o7wH8;3p*CHx z-h!YGOyGyYcbEPw$4hmb{jL_aFy`m1WF-k(r1``wxvXgHYvO|_>cf*QEG z=|L?#cNHOy`h%zZGv31W8qyIZ2)$o#C2<$cyA*?dGXoelLdFJYCQNt(u@9Oqgd7S}_zk~JKh>bRSQ}LOn8Agy3$v51%90Xdp z@uY{@AS&WMOZ~3zNk3g+wNklxkG-Kryqm)vrFS~N8%mmWGt`joz=RLy8UqtQg zO4b+?g4+zzt9`=78a(AIj;a=NM2NP#_yleal@%BliYzLc;#p&w0jE86R&R;>Z|$8p z$J%F0%PQCl+R=QS<@Gh@Kks$t-e(v4O|=cXT{c$MyAmu6ap%057L?ZHC-n&Ku-_Fu z6}iM!IGA5)=xjnK7^9ebNNd3|Bq{!+yq zq=`7+w?Nok%WwtVnm=ytogu*T`nl6mYqac3f_`SQKreb$uu2hjr-qxTO>={S{i1zf zdOlF1KVA1~WxSr6&J#APx>%s|z4qVyYsBh+9lW;BzS7+#XWG18f?Jy}?Ntm!kM~@l z8~%WJGT<{=_xqpbi;};O)8YVW9F$6BZTS{toeNNR4=E-)rv)hd@#)v-|H|?&IwrhH z7PAme$263lo?wn0_{mW?u%Sq?E~O&{~t|X0o7LXyp3ydf~2^+ zOM&9<1b25YTA;W?ad!v~#oeLBrMSDh6nDP7zw`eNXAe2a-p$_0+?jcvnccPf{r+** zfrrAotZ3i0c0}{CO;|Ise+YhtMR}3C8n|kQpcZHkD!Sm_%`y>$TO}@8;9ikA1nEEw zTs2D9o{}p1T z6IVlLre8$iSgds>L3(O$@^Pm88p-xYm?>riJGR%g-KqU8(Db7$ZAZ|zb?vG>Fwg18|O+&h)MmSS`Xn{VO?l)L{Y@p6XD?Eyfg!yQjA;C zpT_>-st=xmZ|xsXY}L;<8~#s}cV~|Ec`Ac(>RQoY;FNJ5a`(}zq6uwEW_!yHV9w?HI9DR&QVdZbmZ1%F6vC-Hvld4LWs3uAs z*+YJ<@;lT2aq0?Ie8PBltOo#J#*-n?4$-PTZXjg?pJ4muS>MzCcfZu^SZ5M^i=Pqm z88Fv;$AD^GbvFa9&SXeQbl@Pgf~9FMfjX}gL`nBZU_L}zFUaEt5{tLeB^hPVPT%B) zq32z%*OneySf-oHrtvXFxt;sEHRZAc{8`u1`o1&;?p+pHp3l$YjHZ`uR#qOBDLvk; zw`s7l%UJ0*LUI#&BV70!D5|v4nvU7Z#60!Aoinn-&>`f(P|fz?Y+xcth3N6`+6zRe zS--G46nUU%{`)G|`!Hn>4g4=!SK$X%N-UVavR{r~XM=<{)|D{=S>%DK_(NJ5B5~CG z8JM?`^zg+zN+s~VRZ#-;@cZc(Nvc!goXkfF^zd)ya-uojb0a@QZ5Cr2aSSUo!&1~B zbtfB`dvS4;e$wgR@(0y)ys2&VQ_DoScX}@vs43B3>zw^{los~IpK56s2t35E25L)u z>RF%-WmFIX{okPq$`j$tjclBe-$h!lNmS&M!9fD<>ux^J^*z=6< zv!LBbP4`xs-rVw_6^>eRujd9mGq>FKnjhq&1ACn8r)cqrelyDGYzabR7JE3Cip zp@c=#2Cya1xAtwrg`c@*ojeC_{PJF>W{y9ar^YFZ(+vapJO8_rL1`bfJ=rk?Xf7Eu@keN*%IIi`Xn-V6@@ zz+2zDW{fNS3$LL&V^k|l1wE0aq>hOwZBiUvUgu&LE>Bu;2n^(bEEXV@C+&`n%te?!+r--jUvx*+WbQUK2zw<3tLRSrogAwgs2II{sLFjo zJ%*i=h()+IwTJ?N9Q%*nn`8zbG9GFpWk0^p+}G^1kt|`~OYFp+;osgs67jJ#>{Hl`%_2Y?rf;f0fC6OxJG@qrwn-)PJ z|Em`*f)UC?oYvqi{Yb%~+1*fCp5w#I_M4wRWRr$L+$EQi#Pt=ShQ$PW-=mi4;&u(q z?DMFc5e5?)k7-nsU zIS7hwtJSQzEY+Ir;t~Jr{I|1oqovX^_wY%`f1x3_$$NUe<3pd-W%*o}5kp`ybO9!e zBqJ`X(eRr8P8J*vzGoA)*SJl!iTx9YjLO7Mt2%Aj8}jhS$i&46G%Vi${Y~V=J`lQ0 zW;+cF6L?pjE9syqzzR^yhsZNRvAp~HgJTGWE0Pz%kO3Fke-VtV~q zD?*HiYa&8(uPnwLiSX-^yYHC{Qy2P0l6<+q&(iJUl-c}21Ldi5@E7y^(WY*M>w@~FAm?<{(T zbkD}uu<&l>JJTc%=#J=L)7F_LCsZM8!Q)EMZ5o%j7)fLWT0e51=d6516BR;w>TjcF zn320N!@?Yv$(4ucgNa3s#YsHg-mW;m#QC3=TE@KTX|}Rl#`R?L_10V1P!%cTMQ%FL zlXIQc4lXPjaotnDm4aSHS~q1yO8m=LAG!ud{3v-yj<5N%Lns=*=hhIAbGQdhzcQ%0x!c+lTnbMVOU_6UWMCcmx+WQ2` ztG6P9O3omeBLj|YoPrRK?baSr6KFSZ=9i2+UBwJpE=q~OFl*>dYK0UwEb}`Ducr$` zK6QCSSf_q(0&fT-eZOMgu_D#Ij^RjBPv;!R)OHPXInh?jo6+(2GN9xSYVI~ljCY1Z znj7TE8?dM1Y&QX0Bs5+T8TvKYSs=NI%8xvuzu`+YcTbKDRsJaKzXDrv*Wsk!78kp1 zXb&$OsM&HJm1HWCV%dqAVF`<&V{6=pylbQ*OjB3Ya^jIfY{!>L$9jl;f6bE?1Kn>s z4rYu@ZDoJ1y;TzDK0u$QpyyQ^?b^Rc+z1(eGB7;se3e=?7#%VEioIGwbB_3J%gp2+ zO5-fMj61m0BKoO$O)6R?Cxd*3AOGj+XbE{mDDpQcHdLJJper95-}#KUNJ49I2K{&= zq!xi*XKc?hqX)^9($kPl9`316j*j!?3}gmVKgF|C`FRvy+H-WVgQp_(naB_*N;!0O z>AVd!mIz48IK;BGw3aR6wL(`%;od#AVs*BvQhiVCB%PTe;w|Se`1bg)*TY)Djrvc&*7swo;dUR6tfsilYDNoV zIqO@1HE-!NzfCGEZrSM1;cqB7$WOkcEsY;2T0J_TYw=v1+|}Ix&BlX6b(Yl4qy2aV zSS!eyUkypvv4aT-K2_zvlCYj&|L%dUbd(Chpy32U%7E8Y%BJ?%soZFUR3L?eIZbi# zfhG7yc`VElX8{mhf`<4{;A^+%5;3uWb2jEuF}gfWu~C{Mjod%$yJ!LXgU81krvx*y zvJzy9a4`j(y%r+iw`>LYHZ7zKoZPh)l)cG7DeM=`bxz_`!-xa@02hDmbN1#gg{?*F zmV}2)^kbM=TU7=p)pjX}cn;j@dMJR8*O1sP9(iASv3+Q26pip6ghf~(8$vLaWJuS`}DI6iIjR;Kve@*e9ZX&?a zaAI8+Ap5hE?5iu3b}|g2ISpy6^0I^Abuh!XexY)D#B1?w=Fvc(nsFFJ7(E7LuB(b> z@eC1hnw3L3E-#ANw}ltOhZ@gN0^FvD_(%i1rXERt%ANv&WJU7|)`8qeUEarw%`JWA zgD*W;Co+D4`xp8QWm3oqN4Fb89;<$Rf?ei-M}>aNJ{C56F77h)X{zhSs|ENWQ^`~b zkqw*;ei%Gf3mZGu`>R#`IC1yEbA@L8Nijd_wZF%`IC}=|jy$ZuR+rcjH%nFiR^r48 za$x$bnyNuzfoz6h0_rqOLzJmOne{ztscBmG`XZK}qIP~AuS>_JqVYfUH{A_t*Rm3B z)4aKH%ssztk9-*Xp8FypoB`se6ldW+5q<=Nn*Z$LpKCF8`;q<~q7&;O&sNL_$$3z} zVc)V-AJm)bk#zA06+!`b%{S)9^RC8nnEPl|?>*@4?q0Ip&0~%SAngm<82Lbi0s!w& z<#@v`JTd%w+N=zwY z@|hxekaeK`1V&?Fc$^|7ihUkq~5rbW0E2F+b0xxmK2 zh~{d#7w{rm8@Ml))cN=!8Ubv=L6*b_#)6*}Y4noxV(~^xVg!EGO8!ggwvHt6r%0Yg zOM()mB+z;{s-7H}agw@Z0P?AY_D}euALgf*@T29g5X>RL4aZQ9ou80H%esCvFMgyWn#H=B)vG2~n<)nq<7kC-{#p8Kh(dKl zGfNWAv`8ZuxwJsYr^R3~w&braZzQrhuM*jg*Sf-y{}xr7GHF6KHrg#|5@AN8Z3^a6 zmpGl+c;$!)okBhX7DaAVBD2Ry6gDwKBriD7Jc_1Dx9X@RSsEOulKvx3K{u2?S*W^W z86Sz8Wj@oo*Icv$Fx^Z3r%l~S0v0qLF;-x}WjsTp!2}Voc!l4zNHQ3?5bsM>hE}rV ze^T_*hX_M2b)?#wOn16yzBdB|kmtfgN%G;a0aS=TLoO%-j{tnLwUQ6Pf!68vqmW-i zqK^ynTpz@r*BYh&XDq6Elp49&syFTi1dQ7ilD6r`a+R zM*!0iK{jM7so+k$CK}SVKx_P_A(|_3zHyzW^As_+;gWf*+4|cdaP!FTX6AXj>ESsO zA7PJX9>zx-lR(N6amn5;NRNr8@2&|)3$_bgGgxZVdr>3K6?9hMz=V#T`_M{JxjbVSU5osKlO!p{9%HB=swux~?qp$fW9a!6+z=b78~ai35;cizU>t zPm^nj2T~(xYpA81qC*6N5Za4=1uRH_elU?BL1}|KkE+f$6DMDp{`evN9~DBmOi~-v zRNbw3@UE=>8KCtf#o^K_y!01mg_kkSq% zbgJ7v1T%Fj`10J5pbih$#2VftEWYY*{ASDV%lAuT$v+@i_2fJ@>4K6VKdz{259JG< zDvWC44>4m#m+?E;i0l65Xd4V)-!)Al{f^y*#MUpp$4c`F<_^^riW!tMhThF8@}}ko zA>&v^79gp!b=Qa*&M&@nzo}1J9Lm`-))Y71x*WqMBUTlUGMT$`%PMt<#8hhA>N5gF~qJahTYfJv1 zdUW(&QkCD)0@CVsr7_HeORV?4Fi*t@dR<0KSrViM1Uf2|p;v+v2m>v0SHtIh#~fe6 zvUqWTOdgHHKY!O}Eei)#^ZUJoRjRdEZsuE?ll*Z+t!H(+2Dq&9>gOy`Yu$!3bIhM$ zv^I4Vo>(6_5j%c%k)LEfKOLraihh1D3&NbY)8BvNDZMv}`0oZj5DnyxZAiokNklk8C_1+`ABQ?idtfK-gR*wGRM*kz5h8m zPsSGaIsIYL>EWNf2WxWv!X@V2^uUa1)Vc@Kj)(*sg(w5;7zH!QvvzB9DU=tXgV0`_?MV9n!diZN#4!~`U%e^OZlSh3q4FWXQb1kUYdnHTC z_$BKa>u$bh_Ya_0<#8Z&$~$P8JV;XBJjyUJZ*oj9yna4rI!N-=>#*IRx1G!rk~8fm z@ADiViX6yE+AKS6w={vw{)V)z098?8jfbNJc$Pr+!ifF)*(9Od;b&`^yfRUYf2@$K%YiuUOxWnBT>gF+`Wbn}wutH6N`tscrkBk8w$eVVD^pM8I= zCNTc6SgH_vPzMX~;lAi{ar~*3qHfl*8EF1bQ=2cymvk`dUPLKxkk9O#;8A17X=^d+ z*PRIPfEmihIwtlNp;Z+XoUfjWf0%or!a0Un)=5!~vrP}#v-|BBzTS-xP((i` zJRzmh2!L_Dkw6gi1hj76!3b-$>7q)Cw zRtX@I-DUZKPRlMbG~^g*J;|cBT%#J~0pFA_D9U`~t)h4K*o?gjh*5acw(o$EC_xvX z8%9U}dJd;K<8sB&SCA0?BVYBrJoN$Sm9NeK4(t(z`#PaeVUXAA!Wtd+zPIB+!TWbG z9vN|?N?Q>8uKy`yp|j-6r$$-(7m=Rd+pjF;Cy3Ws!?!XT1;Be=R#A-PZ{}ep;c&~y zu*%^u(I7rmK}?%=B3aMdrx>Z`lmK59$+I@=vV6&wHKkYqEgNp`(ou&_J0Rj z4x9Y|)(Tu4l(jg7x9m)9l9q6(rpu@BSGe>XlmqI&GVGR}YWxbb!Vkd-Pb;76&U;46 zVf-5irM)pTu(VyG6<|~6&g9@OXYJu;m<&k#i@gan9&!ceU;1;-kxu|IRSfe#Q41!r zXWP}K!F&Kro2T!-3;Mwk{hZgwRtH0y8JvzHl%N$g&?5;m zOW^4jg|Wj8xaOCZ)_={6X?6=vtyQBj7I0o_kL$PEqkeP}y{ToX(GYjH%xEL>w`e2? zx|4wcYG?CIwI_)uuYXwZcY_QRMiffGH~NT>ugq%?u;%4O(90dajulMf@u|^}g7ZE2 z$CN)!Kz7)aIRED0y^XN-Rqe>_H%8$qfdYaM2QNP&9kE(~O8}+Xr%esasBLaCC)UY& z@5%9>3T8U<8~8B_u=mAe9bA30QtIzO8NL~3vKco%)#J>OjyMWpbN{GuGi{F|y%Ik3 z$!hG3A)FH~&ZW#g&M$bb4FgU_gV}`Rgv^fjBc^rHV2`d~BLJQ@UnEyXMsjt)VsR!u z8j+<|5k=&gEfZAtvE-s#4+8m+efR_AZu2DPJ$HL^X?4ct37(mrc-;-Sd5%S^XM2Gr zt9Nj$&sudKk0~Dx1gazXP}}syk{Lv*_z2&AaRws z;g{#cBU+a4GTb0)(x34?cKhnP8N@kff#J06X3IrdRGIOllW15q`ht~oj?RQb%`$2;e4*;C2qK% zkt?V^7Z?8V$Tq*^pA~%qWa&Fmhm*N7Puw zlUa5_Z9%#EGpY_#Jj~8%zM=xfUCB7cJ;`YXqKL)wY!)wUkFB?9U7}V+%-+G1a(Sz> z0eD5%I6!mROnWidT4Qhg7R~2#b1*ZYz3Ccamd3n2R=NC}8&@1{-7RfmUm0?41blVZ znjEtZb~x_~(I<`|{>`Eu64xoD{`V@XsO6lJtv$gDW-PtrA11-*@K+u6<1+Ot<+1pv zMoM6YZN8E4L$aTPwQ?Nf$*W%DnaJ~r60w4yq(#WyYj*X5j26VHnvmf|7xvmcGJE6T z&rgUISC^AXyzyS1O`f-YZ_nPAV?2*TZ8VI=sRC5uTso{0zqrer=0~ZgiNXApc>+AR zB{dnN#TE7JefmygQ4PxHncqqzCDUN!LHV0*;DTVz`aV_U*|GXF$$rtY!opqA zvvW;~zM$oNkpokEpOW*Fyj(dkOr_)2uV6D_bf0?R@iwBF7;&~w;)nrSOi)@E^8MXA zz29W*rUU;A0{EtobJD9vh*pPxe2QLmn0IW=3t#qJp$0!Wyl_{we5PgbDe_k{b1{ed&bJete9H4 z&9h$Sk*pOeU0|#B=uDW~{Ve7I9=-su@;)N1s1VGor9&g;_5kjwFGF)Z#-E5zIA!n~2a< z*Udsxk1vW+8lSPd%q}Y{soAgFu9mpY*}q9YVLR~!brh3h77V1_M`2wo>piZmu0)Hj zH29RCIq40QN8N=aHeW*H$_t-0&4NF-U)b;lmqA~*UoCLcNev4U7<_WM3!c`-C>!|? z8vTCvP(ACT%+Qj&`-N;OUi;$wjX4r}u;?nzC1@&h5qGtJM}pm@6h(e3=Hr<_yW>S-^Zyj2!rY1xmqEvoJrr_5?5&b9JsMVYN1 z6nL=tHd{QMzW5H$3yoJ^wTZ0Dj!!fUh-fR1GID5W!-SOJwpY|!l!^%9Z+MqNgm{iS zK&EwxtF2rn`*JA9q!Z#DaPfZWdiPf`-ZUnvB(R}MNRkl0ivmca$I;}JjqCGn#*#J# zVs%`tSBw)|XNQ@JRX@K7nNuQtQAH}~0H-zOJM?UF`|6;sFgrk=E5mYAAIwZY5LyxI zY*DG?AK6dWDnQRsuIzrZlgE%U3t;*`Hsixp4qqhL3_t7yb9= zq#||}fT?D63GofAYCv^5<*oqRX_P~pe7~lUyNdPEx5{B2j{g{@<8K+P3l8rXt>{Fr zqSE5D=aUw&^91B1a*7%WMktdpSn(h`K7dLoWTXr14bz`1@9|@#6+~D*#WV~qlHV`9 z%<}8%QLLpHz~qxCP6?ESLRGRjU)~1IX*lU~{L&QVl!NR?UL@v(HmRF0%PZBafA4sZ zul8Psre|By6c1t)UxRXc4}c$aJ4#`Wy2uDo!6OQmstiiYMaf3XMYlNa51ouNt=44t z3MJ;)?XQ}R$a6SJ$f0$-r})jIq#h$gkq|n~=TSO)6rJX^u2$r)gmbJ*bRPq;a zIgKD53|~A=*SJLud>-=Ae;R^uww<*883IjzNw>>uu|t!FBnOQ7XP4dUCZT2Z8|%#& zM4_}2tHNAB-p}y|uTd?*9=i;{ourH!^0`YlkonG-OaEYm(UkN}5nU)6sdyFZ?Y4eT zWF=@Iud(B1BzT4}I^SBxey^^5SN*0J+{0-5FgHzgF%>U_+hxb-Uo?9)^L#Tw9j4RQ{yX>8y+N~=!cekUhY>V6tp(SI7s>=_>7A8)|uiZb|^bv#EVe%kh+SY7KwnJQOL zV@(X~{$wjkJAZ3oG(~UY8Uv#!zaJOxA|TtIz^5o#f}VBie0;R0@O1w{ua!Kk{@K(@ z!YS)uffKG!LKTx7k6=k)A~71Z2{r63s&ESttp6fHf|=V<1UpAp8BkJ80lfZsg{P%j zHW_(|aQ1y?24e!S7P~)4PjFrC?Ej1^rd}f(&enqUISxYN?AR+?x{@4gy6qY~OB#KU z#LO|bm>_G6U=F?itV9F|C9budUELy3`q1Kvq~X?e6xwk_ie6MU8qP8oNheFW92e`= z0Ew~pYp6J6SK4@V-*+Vv2uibvT3lni;#5)BIo-%VQ)cxhIA*EmfCJ6O?Iha5Mg&r? ziPs6)Ag6lCb}eEwX4cj!3&$qd zIz5*-1vHQM$qtzo#hdx;nv~Vp{RiE-Tt(i8TpIS?&-A7~e`G60Fu7COpvD0JC{)!) zZL+bMAI38;RI?tve_{FAo>TX?y!UxsPC)T<&WASG%CCG{DK?W&1$f!jAm^QK(O!vbfSN>6=&j4HuNCLpy z^>=!|EJz?bF6q1S4l1ZG96L?|{-w_OvyKz}Dde|F%zeATFakC9YQzlm?2R@t0bAF) zZt!zPx{n|cF~*M<2fvABrpPeA{H3%DZ7!a%&D=(2|L}#>HJ-}U14%ujIZ~}(veP2Z zfbx9kB#kCmv~)K{6fR>ImL$~afXD;}Jhb#|27K$@B5^Z#wDj8%I3U}xmN)>y&4^A=hr@W5!Vr%Doy5NqpM%#VxKDSZJ1RhwMzGr9h1Q^SX#?c#9f z)nXqy;P+CaQguigz%~4T3X;|^ik4y_KKK3;ls;OrThrR(k@R0$g5=^$ir}mDJ`Z(^ zTa{an6||!KoyM$wQyfgq>c_pXqA4zC)hCsB5qhyodrJU2hr71v8pl4W*e&tu|Ja`A zs4DmOqDoZtF*?(hIi^Ag0Glmbe`}-Kczt0}dc`1`z=e7P1}K2W&Bd`I+*Y}?ge9%D zmLRq!=Q+H(cn;k})OZWAN^oF^%a^1sy?lEwfaQ82f39KRh#+mqeG~aH1utfIlFdt??^2PGfou(bqlR1|eN5n6Vp}N?V!XH^m zAAvR(`vX0uy-4%?ZJZb3#0i^uJ*P@8<(e%av@k6z&U3 zj(#0E%yy=WYvT}P(AI|Aer;kzFp~|mZ4=R7%p7nD>?B_!F`Q3))CTK#zNz8%=YCQ$ zLRKB$zOCVBEeoO;^q(jnfo_w3L@e>LEgk%)j~#r6=w_^O91*UMuXG*i;Pj^$S|c^W zN)-q26mx~4aI+$PlRbRzvvbN6Ba}KqkVU(f4KZ0 zgB&2dW%C+t+erarBaDAYwm!-Ti-IiF2viG^R*i{9P{OLl+6U5HYBxTdzRT>gQ3DAu zEEnn&maGz#L+nN(KI*c>bHFPpSREW+-mX?*BfG#Ts@WY@wy?mAp<3VTPecPk$+jw7 zY`g5`ka(sekDYK-LGD4tUohnecsG1!u9=ewp#q5S=fnrLmlmDBC(RsN7=NcTuU>Gq z4d#JpfnegOpRV{>o%I$SCTkvu-bOvA!!byzWQDew!B+YEHm?i8tE)+Y-PLFnBWJlF zuHJu7FY%Q`Bf)FQ8O%DRcZ;Aqx%CgrhZ^GYH`c%3 z*4jB+fcAf@ZkcBAPo-!OPh=pZXiC?D@1Juv*UCN!f$RHXx;|_UB92r5csw8KJyac~ z<~|B5nf}ni{cBW!r~}DzTTi~=TFKYVule-Zq?4U5<80lNUzp~5Q3q;OFHS;8J=`eY z$4Py1iW@kO7o#u3xtl`bOLtq(oFPeHBiR1^Zd>K8juOO)QMgN4LWI=R+tw`EK&am^ z13YuqPlDp#DcLyUeBM){ImjRoSn{m%KiYZnA;UXffBqqt5{z3Q6r)_Ox^9rYabZgU+2{N{;K*}k;7|KGDjFWgN3neaI z%+d-!a}rL>^?loW%VI|6GA`GFy?QN<+|<%Vy4h0|PL?Kt)TzhA>aP%b{9NrB0&aby z$LY>~ol&R-=cx0}PR>w_BRA${VUN8wdPX4eW5p=MptxHAD*AvL!-i%bS1c&G1R%%&o<-)*p$B?p2ML6ZK!|b&#b1<=4((h+uZ;}8{8|52 zXKzvTQwg+qqQMC^z13DKO=~%Wdp#azf~?-FT*|o=M2Dgwe&?;Ar<_?XS%Lc(Q(IqU zE@yq={Nq7=2zk?Ug=?ZUiYs9~X1OeFRZNj4d|L#7gIqe9N0BX0m;to!5rc3LfWW}Q zHo?&ET0_@W$^|mHz}wYcX12v4m}$AA999I*MYo4!e-7vV7;1f3CKpb8 z68w;3$(Jp6rsvXrK7AN?o$w8(E?Nrg{jF_iAq9M%WrGw_U}?X5!?8%fEj+rMdGo0p z!_ma=2_)xdi#sU1UFXmPDzYt)d%M5W-3};(d1_zOuoDh8y(&dP@)#at;!F#rBn*S- z3J5R`mWFpO`KORRbbTQ!CEE}&Di@*rGBeL*6s_yYyHWK7hbC&UyD_?~_P9pV&#{Cz zQAwSpJjcFaRi*Y11GXR56xT~3R@?g5FPO}PDC^;d-|pPMv}xW`olc#6AZoS#u~AIQ zFFoL(=-5WO8^}{!zZkl{TSo?WpJ}RDTBfZNURr<&ItP1Onn)-h)r= ztaEpHs9M&(B38)nTX7-`u+<>+3#M7_j}%{4B6t~sw*+I7Ivd>VqcO8#D`DLQNPUaKQ8{J;6#!4;{kR~ zHo0Z$DC|J6!fk^Kp7L-|d^vGY+((gi^jx*}Pmx056mGfQ7DeoG6prJ0>o^DkV`udc=jw{aHQ~j;>u9PNA73i7!K#c(H@CG(=4;hnl;DwAYKNgyLQERsEfqTNpSnK9lkXCFiv&GyD zi^Y{+kbzw!gLKb@sjrdidBp&~=3RzOg4Yav3-omFQq{1XG$i>-5BNirVw9<5_+m@P z+bI(LF>r2k?4vvLuov)4)^)LH^GtS!8QN^<@4&`Tf;W_c6^a)V(s#;CFR0r$E&NfE z&DPJ~qB~#>dO4gWVn*ceIGl-LlN!d0ZV|WDE2!@{IR5yU4yE{QK}GURawN^zn0J8P zA`w`uJ!JM3b8$~q5=OGE$wu?lcfo;tv(;Q3kU|FjqHCIceREX+ngn6;XjU?q4U9Gs zxV8s(^5&#~;Yka^4pxv$nxG4Cr`MgNTN&VBD`d+6*#;7Zj@VnOW`br_=TlUTpQi$N z=@s(?CHVkoxGyr0!YhV*yNtC-7y9DQ^81Q%AiCvT1y^wdw|mq9a@Y*vZ<+SPQEJ&o z1PBNv_NvusE;k^^$s!g>Gfp@7CsHkm=x6d>9LG2@<4KBjH4?CfyQ&k>2!7h>36L2g z?1<2mLP}huRlSmCc)3^R`8G#pwqM>7W$95uFP<(Pf4C;WSQ}J~9ctza%p4F!s|EA0 zBr6%)8rNrKB$o`jmP5+bH2!3bLvo=nDmD;6FOP8sP55eQscGx4e2&cyQKlV-xTNiJ zd2^wl^@$)zo{{5-a;f`cTZ+QD_W_*zdngc>VIOy6tQJwKaDF@=zfBfS!b<4otmB}y zD{iiuFLz)rom^ugS${rYLuMc2ljzEOX_nz~ph-^v^K>fX*NJKd5A&1S_3Ne{`ABMg zV=LMzIXvqSkwZfDaAH-Fm)S1ul?Vmm1zxR8b1u)s0hYJB{(fnC=9P36X+M3jl4@_~ zE^Q5;bK$EJ74Xc*sYc~|NGrwLH+MfZu3GQEGTf}dFFWK0{Jxx$`8Piw0g~Ta*o$u5 zCkjQd?&qFhr&&9Z+6>CSjJxHolR2}EKpC*(lwFHxhRi7c7~hYD=#v^X8qp|K3j*{+ zc6-WTjVPJkOrySSM68LiRI;Mn9R(I?u^XFBvTT<1R{Euw;4Mvzqs~ijv3QMWhC&oV z?qIi+H`mm^9({UO4FvwQlk3f)ojG!qj$e>ikh+&y%}*cDGW!d^n8Hk~)lTX{i=vU_ z%Sr*r`#;aodA7e}s>Pbj*bMQ0Lh6P0^Cb27IsQ4MDJ(z=5-ay^Tfm@+^I4Hq z)u(bO7Z$~_auK&ruxbVNsw?HP<|-4CmfvO0LaetiC?O~N!Y!1l=?0~lcTobDuojC~ zaM3=Iq7ikwy~r60_U+Me(!Xh#=>c#u7|!~c!@sDE_|Exzq105El{$jTWJbU6E=q?u3*> zfmK$b+(nVv0P3>Q~#7KNG^2oP~-tkKM}aPjG77G+A#M-veokQrlc(0$(~y z7Y~Vhqy?rztc{;}Al9?E=g%nzAFc(vb4SExlt<@bS#E!;X3x%e&3o-Z0+1i4$q64* zK0vQTr#%!itIx?jW{J|Fj<03L=$3w;i`6#I3*U#q_5-sc-A{b+UL$;2c_*qWA}m&E z%3+iSQtLkZu_;;acxCk)hSIYF>8+iU%NMQP*B04WCTi^qlt%G$)XU>u{aZ)#GgD;W zXXe{2A4q$FG-*g1g0vdFqdrzhX6*DMkI}vEW6KQs?Z!&>lhFBHlI+=u)!i27|8=G{ zbn3avij9lG@B>b*{)6>j7Q^t{fV3hTtzU7KnVaZbhz0jl4XOPR3Lwo-ds;5?|Gcp& z^H5t%&RW`2;00h0x_w(T=Ca5^FBSDxNXcJ0+?Tiq6wfi6;St{b@TKQV@V`%2JW;dc zNP|7kDo2L(vP+U2@NaAd6s@nL-tytfWVZm1<&MI32wUc@eFRK{X!h` zes%f?NB|^WmRyMvJmIkXsoogc!7cB|f1CG|DHr8>{yIv@X%c z5_!5gZv=*YCYt_?G%)NsT|IAvOf!wfbHdnXZln*r@UX$KeW^6&6rpbR17KGrdBQKeQ!{XwpgkF+N<}hjyrY*jvd|{a&p)u}zBd2K*M$2;Cv(0k1nL+CQur%1HL)5^a zhH)n@bk%+O?n1|2yOG)oGDqU+6VdXQuQNe#(Ioe3n<(a&@-d!*+Kz5=nXAhL_vf9Z zq<&2mFpH8^2dM6M64MSKB^>H*M*WcofG;(}W8}qjv*aJ?S*_D3$Oc%(Qu<`kkDn1`#!*N=nBJTWJ&bf^x#C)+n=)(0_cUi(x z2~=(hWOZ%|Zw)@>%4vs@%P2fKGGujXOy9EX(v+$DWx|dtf%2~OXR#lP#p_h9&Qh*{ zo`Os6qC8?-q{xhOIEqZpAo3k1`|@d0`PtO6t!7`}NYW@g6dGi8bei^(?4?m(*ZO3~=oK9g(+5e1a=?3Vt+KUPA(5z? zG~YM4e+JtrsEjt1?(kw6IxsH3z8+D;qRwS5s-N3{`UE9kz(K3b!L!XN<6kN7i_6-G zyFJMn*qB`S8a22tKq_slDS!UzW8%G~o}wg+DanZr`7`3ptDtg`Pmlb}kBd^B8cO7u zgE^N;zGM+Gl*6`^@5m=eG-3dC%pkF98{)FjWWqu1VrMrJ->QO8A1qx4%R++Gy zp*v_Os2+7t`f31=$uI;GLtgzs!tD`GsFUp?_f+JF|0uUJbEGvAqQRM{w16CJfWmG4 zmOj()d@LL!l7Q~Z(9!#4kM6MBl~qV`sZQ!6hA3PFM%hh9=&w6m8_ZjytY`i3;r)>M zmE_&gjvpN^u1O()?ae!R@)2V$>A6|esCM)Fs=bD4$zvnbm-fC8Dx^(+5XZm#*Mjw1 zJB3^d98NJ~LFgB5JKRqa79(QWJayQ3Cv$q$BUosPBEFH`9yd+PazDskX~P!heI<|C zx1(MxbG)Zw_qO`~)ez2I8s_H}5UvD2q5ehP6bIa862+MHcWn69U9d`)ad9R%$k}9k zjxfS=yvVGqY#yDxzS~+|eK!5X?0b~$`X{=FCPemfQyDNT!L`J@5f8d}nia00r$R?>o0pEa# zUq560K?Ou2{toOItN5)r4Tar@3QZM6+S!2~O)A!|t&OgZRB@;%K{{G-b?e?-9Z`eY za>1de#aUlN%fQ^0PGCJBEvK3OA_Ft;1emrPm3@fucFoW7KR9}vH!oz=U-;f6U{vSh zPrXpg72=s`n|mw z@p}c_W_ztThyF&e2FE2YnCVA|Pj_`dIQ4rEa3|)E@GnL<%2H|(kuCuskH&+^d{q)u z->?lbrv4XZXqdG{dI|w{gs%wm;XV;0!wIkTES1;1k`86ebMpf8KX-QL+!~bbI}`d2 z*9S`+&fAvX{`r(%xNLhCT5Q~zd0tx}}HxVcE&AmD*isK`<}Lp!B5rGNTVyj0&8JWSD3L%lYhbf8NWJI)hf+d!;gI$lDXx0g>o z$*0a-L2{YN3y(bGbg)q8*k$97RJL`?^)$gqH7JBNNQq$TcS366(LO@|JIQrh-6(`( z5svgveEZN~4a8H%nBRh(5ZXG+WfI2X$1a{{3)P8LtiE#@x;g}NZk9TEF%L*rd!WYn z2ii7Tm@&dw#^u@Hf&~Es9__Xva;bwr#da8PS}dIijN|aLvF7E7Mnjzai^T6n-*<=o z@)5BUs5Nr0-Yft#l8C7j-?;9 zcq{gkga<0d4src)EUaL>Zo?kCu_-8{M8{qf3(^oYt$qxttByeYA!4p4?d8q^vu$(o1TT0b71${c}Hm6O7 zY5%u0s90=#8;(P0c1`5>tICfIC%h3WHOqD<QoU zyYQg{+Q!{#hWw#PyrnwL%7$`XvW=5IjW}R1^fwUT~CMW7_7 zrg-(ugNNn!$e6&cmkqkP{K|-EcGd8GwBDERk?Y+rqlQbPzKZu7_{@zf#E~wEe|hEw zsoRRWGVVv4wHJ<}(Lp@ThdjB8Fp9Dh&ad`==iBRPEArE#RaJ1ye?k%V#3W1TlftMQ_I7&dTe5 zEskcB&F`Jg?%d#tH@h5lC=iKr?2sdu@YHQ0ib^+ zO!N8$=TMi`YM%9ZuAdd``5FaGO!7UG#_t=a;}m~vXE{n7WkGiq9jdE=L)%I!{i|8u z^uQ(qi8A6J|Bs`qj%w>^qPSbpQnZlZuEi}#kmBx6@#0XN2KV9=3-0djTCBK3ai_TU z%kTRm=e*>dmu&Xz&fJ-~JJ(}Y8HgE&c(inS%cPM2&|jIgFa{Bfhn%`Ljmhj1C^xD$ zR=#Zf>P>w9xt>n&m_`}ziIZp3%;;CNUXyc7(mZ!X3b*kZy*Q6MAAvFKqz)?%dj4$T zysXG_mi#tNFMUSaYX)mO_2DcL1h{o1zJq`u8%-=T6f=DiE*)w;9ZsuKf5Rh!ly(ak zm+sR)pW=jV$TkwrwM*-GZ2K&>LqDd3Ngi-6g~dX>2}Pz=>ch4wo!3U^=@&nb%{y7T zkc&IB0*}(J2Ze7a=n63Z&Pva4D7-Um!k|u2Rx~^n+?YEzUrl3e8WW0H&Gv=@U}M0! za~YdY$NsdwRp~-9>HA>z_JTv;3>4d0nDz_iY(RvMRL! zKI0I*ZF73<9E0{TL$6G8HRu;r?lvOP`r+-5{ubTC7iUEtRQ25JO^fIsX0lf#QHbG@BsH7mJnuW(XKVI!i`G_(}M^FrW|{pm;1a&XZ*9tS$5 z`pN|3nlDwkUkH_iz`w~Wp3h3IVFtsHE+#hvI@|88!?U8sDa_QF8RlSfQNbXVa#sw! z`(<5g(@@R(T4$<^#-DU3eg}gZ4!f%-yX}>}gnbm;U%3KK_+tHawaMDMPdD7v`MmAF z4jT!j9&1BQSxdCF2QF+^e}AQ#nXj-Gn2)?T#FcW*T7g{9liP2ex?ywaM#!U;yxpFKBUVn zG2ym!?6_}|o(|u;CbT)Ey7s zg77@v4IEE-V!xl^3nrbBxeY?WhggT-r8!qs^*G8~0W(Xg#Lwl;fMK|9yyT>PN%*-; z!ok_>rA>xvcb1+So7$gUklbTx=mmr_Veofj`VIMc&tVrW$Ua}*991&h!Qywa6%M&r zUAor35Pw|7Rh&&i$Ml#_MGDUHZPoBm+cVP%b8{`0nD^6^O$xY;71j53ddgz8tHiJ%+>iBm9iK&$ zt>v#`B=J;kxVfs9h3|Hn-9$@9%AQZnw_y99z1<}Hh8NJa5s91>#WzLxv&E#!8OFdO z;L`#n?%^oolA;7klU{s~sYBX~Oy!`&rxtFv-pdE%U58m~<%VMp-5^7i!7hi99vR^H z2MOnR_hS{p9*Z%2PxLvW5e+H)0Hj1_qDvd&{cLR~;|k{7AW;7i=k(BC+Xu8k0$9)N z1}7<2E%VjUXf9^R{fAM)1K5Bqm&nnSy*F4J$7?OXl?aW+Q7gUMl|H)sr?&q%@3mr! z9kLw|?^GIpm#6TF`nV&@i@PG@N{+ND`~XCs5^ZFRq>HZ;l5})12wa zI)8J2Bp;~d%hvVfs+Tn8jJEWz0|}0JiE${{S+>V+1_0;9EWxnpqiYDS8nyojGWi*p z;egm$DOj9%hwQvBfnPAB(zE^f)^P$Pz6^YsbuDt7cODJ?^^6G552{?EUeb;+4yWr4 z$LgfcK&oR$#;UX^@l>c$x$sAc`nAE@>#`q}6^^2eteCEtjn`;#sWIFRT%rYDJEGsI zxYz%@<0A<34xJ-4o5-vuh5Ou^T~o}N7})cmyE$$o5TeMUjGp_rY0 zvEcKTY^zXtdXJc`M~b3MghBGnjR&Ji>RgjA=AhdqNVxvb)JA@A>nSqrxsmwsykPsZ?@{D%DKpCcv>0x(9$87j zf9-b*2$R}=CY5n9sxS*rr^yC>h-_dUVoORyL1uC@=Dj^fVTtU}58m4{yYNZQ*29YO z@kG3HfSFqM!=kzNjk={UDC{4If>jPsZd*_Pr2p{zr^G9_UDPp&KC$sCk;teL=LcjJ z_HCj2qYc7DzH&a)m7iq{_n|5VWFUKpW|bOLQvk9*UV?`khfac%Mo!?7ivhv4=SE<>w?tM=DJie}hAG^Th z74?K$`WGVax-?tW@aR}LHGOn-{B(ru{=-dB#QK3ey9)W8tQLtaXzQcWM|4DpzkysG z6Yr@rGeF`-0(=(Kt|Pjt@uW+$T02W@MFX0CpykolhWqlzbL9=U@9wZhYXw(fP@Fu! zLO*4%t!_|ZdR)%{)~=_M?u!&Fo;!Ba&Do9ykwOq5RYAelxMSkyi$l7j7Y&1Xvn_5_ zAr95kXsxme>8U);j(wiom5?UzoH^PwLoWM?2g%{rDiiB$gx+C!N5Wl`2gr z(r)PSJFda;_tafRmg!JHVcr zPZ{LA_{>OT@H04ehfN5=I_nl!`7~@^9}7z!(chA5f^((^x|}KP@DG?Zy^F<0lo)^E ztxZy@W(KMdm8M@ETP0tY`kaJ^ESD2|KX>Emfh^Z2V% z_eSCqvzQNZU1*-2)>$N+tsm*7Xx4FQ)g;bTKBoG4JU2 z%~u*R`YpHjx@Ya&VmwB#s=FnLvDMh zO=``gfmzxqt!-wvA%EPuc~!k;IzP*vs-@<%U3SIzMHGC#-_+p9OkmM`uUV>cv2Vgz zaoIr?vc#?LER;jxQ^}j#H#L?3(#TVp76N*+>)9}Zh8ahLk5l@9tZ#}DK8s;l@7yMh z0MvE#)9s=x*4SZgphI-z@^g9QM@&pE7UCK1u84!^`O@;5nCDdnG*r~U+PB4|!Y8Kb zr!^lK_IS189-(Hb^Ks7S}O+qCbNWE4JRgfv}5nc2x&s->9BD7uT zzxE@0hJ&8>r8JIDB?22UYyyf_H7clMSM2%Ga-wNazsfh3I#hk$Tb@k?G>O@vu@|F3Vzo7VyfQ8M>yTl!^smU0<=Hn@Y|6UYn3O#6 zm(n@p7a7BMn+gw9bD;zQ6^6YZUkwc39U%R_W?Qpf9rqO{&sxEQj~Q`kcz1A%imhVg zn+pwA?`Ke1R9Ze<7iJM~7%x{V7N6fJ8QWlW#$sRYd=_9SS}oSw4%5KC@W&a~r+~n; zo9w65yb%?*cnmIlewTra=i1><^O0^%Y6r4kdaMZq#qiU_TQ^vH_OaKZezGgTE^AV= zZGD>IGNVp}@ALGg`_OFeWzWn9nc7GxAfNmyW|{+?rKFHR{8D6BQzsq)u}aoD73GLw z^HnXI_=gFgD{}Nztxww8f#kd&aC13K@7r=3>{i6>*fGQR=JZb*FPT@Q3=V14EA1hG zI7?PACipJtdx%NE&W@`^FF6v~9XD}P39-D%GxvY72f0SgpL`69a+mF~q)Hh7IQfY8 zaTli5@zJJt$FEQn|8>lPr9Z&l~D&I3L!Th+CPS zW_-RyvffY)M|BiFCS8UpE%###G*^cs4*6N-?+A=W;D{_tHV;FxvnY4X3@OzjiXA7& z!O7?Nk6(V_$E$+->LPS813zx_bzF90?|xJ3d2`zN30Zl_4pfW%;_96;!pfNY3~_O8 zz_?27JG*bMc}+*K(umJufJvq|>>AbGCZXKp(>r;Xap?pl@fY;AQ?jHhFr$rBebH~H z(5CTF`@>Ldr3-HX4`N^Z){*fM8 zaTs)N75<~srFi|9@a*{mJ57wxtPx20WRQNXs{c0ey1dGPS+U&`KA)P5S7s`j`>kWCp^4lg8&_bdG@;fm z_Qpo8VZ`-5vTPR4F-CY94+yqfn&mMeOd<-J8FCxC3>rte#qy9SiyP(AZH#U^z;@xg zi~UdV9!jl!-YXzyFF5seLKT$x)(H@OLHu&!18|$q$m+yadL|6I{mxY95OEth@p|$u z0OcLt9WTgpS8iidg|kioVr~1X4TV^*L>thN3Zi|LsY$-1&2r<=q{GkBDlC0>r4krJ13M~yoyFvO?LCXS*mnaTHg$ii<@@6-FIUN!1Q_RH2ju;UD zBnvTJ`yyF>fd%ioIz&PE`VR8ET1$x^$njDVBY2p)yf3oU)buZiO-k)X6j^ijFdQ~$ zB?l$t)8qTdT5lp>4%f-;^S=*g`LbJ(5);!cO98!EZC@{Z4Br*f7`G2zmWtD_%1Sf$ z_p9-bv;YqN5X9bob4Pa5gcei~#abXjeE3`PKIE^r_jWZzmu-^VX?LmMmw1YW{Av|6 z4!3V^5xGV$4sO;LLBC{1$-E{$jyxpd)tAS;6c4^+;30(ntCQ$eq=N^4<{>T44j6k9 zKcpN*65LjAWw3_NlPzL_bDII!@EU*kJf${%V|Zh)ih(O^2AIigebxyZv)zZ-C(wE9A!l;6l~i;D=$ke z%0kgf8<@+hV8$q*$b1o9;u%%bP8uwNN9Z3OPL9c<;blxr73sr|DwOE*tM_w^Ys{EMi@uXV{*!|8(e5py)ui(w`Mq@?20o( z4T<;f9Sg%@601w9Ern9-MpsqJnJTgFzwJG+#_QnYzB7(dRw1rwAygt|qM?QHf*fG4 z+79yRx_kr-cb|{^v$P#2{ghx0orl$AG`&N2H_WvB$dkx&j3LY+{AGO;eEJzgVg-&qaMtvufAbkQHP1F1H8@6J9lMj66IG>a zN~m;gypOQINM3J8UScHOSw}c!mALcfeQ-C0j91aCwbAM=DPF12Ot9UsR1BfPrnt7( zs3asH?eys9hp(Z1Y$c;8PzcVW)LmGd%Ww^o>7rhgyL6II*foX1rm>1g+kWb4nV8vc z%29nG=zim48_koVv)3%AvGxE}NldbEY!CV5wEkgZe*mpj|K>m{*(DVVmqD zb+ZtDJbmK#!I9QB8h;jpllgIXWUfd4T02qu_w@eK56W28%+T`SdT5#mDw9E}91LBQ z*8jr3{3CDm{w0Y6_O_TCNr-kthEI5(G({wNq3qn%w_jp;_>OADB~JxmOq+RSKg6{le`)2nrSw(yJyffpD}RVI!fWi} z(bopa60Fr@AO4Q)dZ%d%{ShE^jMKc&X9ZUT80n|7xb!qjVS#V`h)zV^#bRJd;1|DT z@?|aq(NRF&F`~K$kIHV&rmJd!uoLF<%tlWl8TkAuLUpq2hu#CH28U~amD&aK?cPh4 z5>4xHZ?QFfX8ov|{os7hPQ%(~XcK_pPEu_yq|o33rH0T>EalQueG>lk6$w^Op|gQ| zrjv-O`D2?`y*7mXz-YRGZBk6ofEJ~XsgS|1Db2LKj=&Ogle~J^Z>^N|+%`<1q=2l{ zSyeQdK(;!|ljMiDDu$YIrzy{c8)bLOhSQbmJKHLiXU^S4$~Hi{70^2*^yjG(MSfcb zA9oK>&;0k=Z)P?*mQW2&40|8|NB}l{s4n@puq_7EJ7(l*5?AO3r-Qz2C$%6rO$ay6nJgUa_9V_Jnsu&l^wHV9^C)FK^p zL#gI7;qLGgme5rdP`cSB+69)1gIP#lhEY(IvoI)y)wpMX9Ve##ci*hj9SwLh@#Y)f zsrph-7JX-Dabn))R`s*7x;HX}H?@!=%*saWyj0P{XhzW1@GHS~lxUX5#4KS42;#Fc zh)Q+Sp-Uy2O82o=RhJBa;~!*o*_3jam*`gDgMIkOlvC!0bstTJEGS|F>mMU7De)Ouj>_4#30NNf9 z$TQBh3+Rxmr5$S(Zq=4}`YjwPQjL!v zxV!a#q&zmH@{oiE56b{P5U_gL%RtGXkSg&%{wnxGWLM1UGpEA-;#FYD*e;kr<4JbC zySx5OJ591 zg!KOOt${%-gV$$7vMEEQ`AC8AKdRS1f8oh{sB3V{pax%m_$b%!k^HkVHqW8m^R;RD zE=Cz^h~wfZ=}o0jpUZ2EmnG$gRPzAD+`TnQZ4YLRff7xz@Nt|?9SAwt`aK*^v9R)P z$~-Y>fQoU;X{iNva-%i2>oyo0t>Li(KDsQ&YatLh z>FMYI87n`ItH8v(z0EsNg;4(emjTiU0aP^e1o8pW=x)l)kJF*!{}@2OU*vtIy|NP| z&OHFsxB%0tuIspbSVc{jWTarjV=^&~Hf(s-oBDX2<hT z%Ji#Af9j`c*pqQg{q4F-dAsBAr!h#s`q=1g;63;y>eoHe3nOA(%MPo_IY|GUo_Z~( z`c3N^JA9kn?}0dLh;~6j1)O>Pdq|>XVqJ5;2R8U>fl-&#SwCAK4lG%Dx2A9^mYV5Y ztdpNAMPQJOk^pGFn7)>+z6w(Ice!ILhH_oi1`s<4`}H*OE|rBPCA8j@0%uPd&IFpT zc1S=Q7&nfTcfZ6ULchC#Lf^h1GzUmn6rkhx61IE2NlzppHrbahZDP@{JDt8ktN5~C zp;bN2$_XLn{z77(Zg>RTMXE2**cXWKcpa^g1L*I0>JYYr#~MPXTB66L{AQ?0m&}Fn z)^2~FMw}~*r6y-7^6|jrJ%Yr;&MN+GeSSvuDR}8N#oZ4Eyde6sUyV-W>MV`@B;yUm zwXKtXVLn4(DcrPlM34_vqVpcB(P97HK+@fLlN93q^uOJ*HoNe@Qz zqRFTa^i2X-!h1ciL&I1UUhok|iU5q`O@W50CEkK!Xd}rNiW}Dhs|dO z+MjJfhPrFCvo-eZ>U{}3Lccz3{MsOHr-SVU`~2zk*s^AqaoL%^N1`G2H~ndW z=34i-5vd@Ee)N?4mv20WKR=)#{_@{|;8+h+!{6?fIR(R9E!-hVjIj8pijN4;KfV-m zu)0S^c>>V0;JsX3;r_m4`a`VqS<#aAO|p$oFq|`kL{|-p_hLeza0jtNp8d{AUp-rV zegKK91q|s;Yky&v#{6X@CuwWXW`N16@DXM)mtd>jleZZVOe}a)o9Ih;3tP^0aYwmAa>fuaQ%IdK=0EBf-{ByBXg3ix?vRXcW2CgBe`h?QEe&*7X{5f|uU zel?A}geY)hRr2W~AOa!0#$>t&BGV1n@aRge8L#Z{Z$X&%^cp)^i7Mb7)Zev#i?!=2 zd)r$*_Gg2|g;uL8wk+olVP)i^2k!c_d_7a)Rg`a1@gnGuVkQWaBGV)9Oy7X~@3wz< znQ6q-UCb{xMNW1#Zi!)K%q{ z30iZLX=YcNG6@!Zl$<7dca!GR;>^rfx^W0SU`+0&zdft zZo)Jh{@{5;wkw(4eR#*j)}07U&zw48I3rYw6BLW&v$#5k*hw*?f|bw-`xc0}zR7R* z6W~mI`Uo~GQtNj-o)3dX*;V4O7-ka<<0yP!{OL+I93W?5U}AclJ1#DTSS`<9 z33Dwh4pg(2QD!!A`4?jN-R&s8*K+RD0}6y283tql@G!zsEwj(n(f zu1xM|-k`Ms{ZNrYas$)AewVPy@vqv9lxlA+uZxMrsjAo`^3q&(4392{}y5| z1|x8>_L@a`A}+~5vSBHzEG)8~S@ur-9$!JD7G3(f(u!UZkmwQhiY5PYxp5r1oTMF* zAe(fJ@eu(yw4t!nnblPjDg;Gl1+Me+diH>JQ`>CWsoqxKjv2B@Pf{FW8S+yZRM^CJ>ntt#aVGmf$L*XjOOv(hbIzVk2QW@eG{)KX$$ehak^!w_3(*!Jx5 zYm^r}22a)6_Q>L;fD+!Ay+12rbX_J_%}e2WOF&hXxR$2YgIdtp`8R-x`rLktiPZU5 z&W7wLBA48!-MgF%IU>G1r^XDrT3=Uwo`{+tn^JJW7X$DEFJ0_P$2c0& zo-RV&+N`v%X3HH^Sj|m+&e0WP5&rD&#NyZt2`dXgmE9!(7q=Ae{>M_{KB!g-x^MTe zvB;TjnlPSMiD8`|*RfnE;Dj~Kbd^v-`Wu4;@ZmphWM`VgNw2z<1OY^1-Vx-f3D-#d z22*4?-I!}?3%V@aVS)FqgpowwB)lf!U0Bcs!UG8X<(;5yzH}{Ldr=zb*D9ckJ8LaCrWS2+hhoBXh*D$FohBSGpt zBG&M9RBm+&$-`mkaRuIfC?FxB0^?3H*sVDckp@fjVn|rP80~(wYrTzb`&|bG`^-HYS&z--%wn-;vC2wD2JN z(5rUwAbYce+l+pyNpM3SG1PmqZN}a`+v6-<_b=Rq&3xVqz3Dv;Zr?0_%Vz`^AN-UU zCrzv<3mk?b>w5rwfGZD>$+LG-{9j(GTuezVK$|$m?;LD8Sr1`-e#bscBe;YIsDo@-%R)qx>wC|hseZ%t6^r64MDK~wDCsc;%dKlSj@KzM=$q#Wzf0WlbcKXkG z$_4kA45T{5axXndG)Z8_aXJsC*_IhTfas9}{+xapvo~DF543ix2o!;{g>Wy0CBE~E zZ#$xvAOTe(4hRMOH=OR!-yih$=+Erry;iT00C{HT!pB}~2rcV1megvjAN+>Hc{(###ljg?`Le^NujyOA%_e9!O} za*1<$)#z!&BD%zfimDiG+DT2%^6hd= z#&FY+(t~`+u^j=%D{PCLO;(eb(V^H7Yuendpg|$T21XH|*fMtf#rfWs(-t%C-dKBJ zUxEifO8npqS**P7xtEl6c;cCzW0YjCbO3lZ!q!{aDR$!b z$;Jm*)F?$BKgR=K5~BTRR#HODz4a+qnZgc8X#VNVZD><14o@$F&I(m)X+Myp*h{_u zRr|Ld@qM<5pH)(nU$j_S;|u1%u}NpPV|=*n>?2QVbLoiwTlq&ZwK#54#_VDO3lgb7 z2MeS&)&$;H`<5Yu)*k>7vLaWQTh>mzIe9YZ!JMhUvd}RGh<%|tgg^=1Iv9}Ge=q7O z+fGhK<(>5Lj1w6wrR_OyXOu0p1T7Oc(AqY}#%-0lC$l=0Aa&{_1%HNZgcv=3p5eCr zOO4KqISBX&3v8t!X0W|J3nabQ*feH0`et;rOGfzj6?~9!t4F_iYnj|k<1^_X+$mdN zI`BKT?js`^jE43_gUWK48CC`QcfL!e_4L!Jr})of%QGyF9=;FfNqYS%yG;7iH&1=T zZ1r@$)&g4+L5V_69wt3G$#FwXOu|G1RqGZyJ-NRmuJ1kU)-f+qe$5w- z4rfOk+M~;?)d>z)A2`vSgwh8(FN{(lOdGd5>t}`Ml=rbZJ>M@mO7;tyJ{K?fA6xa$ zBZ&1+;KqbTaBJY?Jb#;}6uo<2x=A6pO?F7&Zu`~0Ho4<9Q_;mgrkS@kh#-JT*x)qH zAI{2`Yd3Oeny>xqp2}fejPcht79tyqHOI!h#{RgI#6LPex_?(I9ZSN|;-?+eVg_AG z-A1t8w07^GHL2v-G$Sf4JHiA1{cfA4)x_o<;D;2mAzhxZX&A^&YmR)IkqLlX>3l!D zbXlCrR}g3r6NL1g<|Kx%rM=w(?5!(JTxF|L7vPhK7-1Aa+&~VVd(P6~7mAWQtt%1X zgBTOtp(}j`e~6O{s*+2hN(jCIf|Vtkk;%hX!n5mz`fRLl04B}Jzu#pi){F+h0t+P!SNB_$8F$s*3qpz+ zMy%j`YZtEqi!dniH%G9W{@e?d=owB8U9Y#0oC|LUHq!Ser!&@%qdm^jhfn2&D2B;r z&(N44v>Pqxz6?{1Co<{M+=Vn1&vlStLWL^%v}VM_{=*-57bX1b&n+CJXe}RMc?cGT z#5$}KvKtZ*848?X5`!Hg=?}n{Ogs)o*iA)nVjU=FR~%6|fgUr}KADLV7H5U2PTaVu6hP147Q+Ss-$LGZrDB|j5h(o8;qvk| zN|W&~K*kYO?f09XOM%-iEj7K|%v)GEICYp2#1`(LoHS@sKDeukjwQggOTokIzkLC# zseE7|k!wFI)uO)+62uPrG5cNKr;l2EEk0@jkv^1{sFPLikZzpGRBvQn`r|@{&0%r1|1*De$?tD)mf;UwN%fZ%QyS=N}Oi=$G3_@(j5+^B8$s_F_O;E z>#B|W%)#44W30>5sU9%2R+{ctj4Nt)+)?AQG{eJSbL`IRu62=RAGFf%E@8t{LUcJ= zn+St9gZwa?ILOOq+FuXjXO!=`{7}f}VN4gnx|$oElh}-dJe%#&#cWUqm9AW$UC?84 z*(7Erst@m3mQC-4osZB_sm&iB?89^ry%V8?x1Y_DgNAz}r;pL@H0N_09t7VAIQkh= zOd4@K_+T^+5bXRI3Mg3)lne(i?@Yudj~hH2LiyiUwP2Ke^Xp!JKK*SilYerRRWNI5 zcl*?J4m%TezVUo2=F*KtD8+UjB|a=~v{9sGrAfWl)G=xh!jS&jxhijnLMbJAJj6OD zrTfPL=}>rSS6KkRT2(Ngy8(gqS%8=C?8+cc$g)bpO?m46;kuIVOOp6dL6- zIbcoO#lpf_(gYG=q{_0v^J5&*r^!CKdsVJ+(_H?P05T@2$~@8h!L^3h2_UU9T0@^w zgWFzezoSVp{Ra+>iz0tdWyiyz+^B(-3SqwFz*eKhbJwooM40hj0F7E!VDWHbUy+jS z%Za!t6+UwZ&o=ed&R$+>>`X))#QRv%xq3$2CC3{L;`K9P<6Wog(Q)&8D?0`^Dwyq&V|+bU-FB#ZUv2yRXv0JaB5zqDtZ>F`M_YTzbMJ$X>)O z4gRpR@6R=aS|TSg;o{V3~`_QIZVB<_W z;8OdAa<8X!f?FE-*KP2qE+(FJ(Ut5?fNqCKy={gKC0pcUz>5L|lBL^~S5w zoy|on`+KwD@>w!hdCvP z&TYy;#E#sZ`1rGxBjEwZwz0Wmg!z(c7TsRZzfxt@pHpjo&<8S6_@Ln8^mgSWe5p2_ zH01No8`Hnq1Y^1?$lR*sXUPs<`@mHmtu&+y|6~&K?-!lj41SQhGKNYd&n9Wqk(Smc zehQ1#_)7%TPbTbOziqX+^lllMiL?Fm6ycm6v7uMuInc}zxsh8+ft_zSI`3&*Z*(H2OXUW{^;OtE1m~rKe-IithaWSh*V|D(<==i?%=KDr`;>|V zcOstlEe2{pf|3-3KP_h2=@mlJKO3S!kXuKyZQ=)>-BB?%uYhNYn!seG1H$*%66jgA zFlgtPTjrYFDC;KMv{>@m?|%SkyLYFE`L5ydz4 z2fMAv0N+d;O(-yps7m4e(XmWG5FaGQLSAkphwU?`4JExf>}+fPeSaaRx-s=wM&Z#` zTqmnmnsXf6>M+W&tRGb`jZ;Uv54Ah<>-QYCPY7ApSTFxM4@6muQ=U5{I^Z-&R_;&S z{@`3cGDFtK-nNk9Y3koJ(#x0s4R|l_*qKtXk7ypP(R!Ew@lF;h;+kw<=#!Nh^MSi%<-jLCGp*QZ|RPiJ>)vdZK)jbkkWFd=yX0eF$ zqt3b4uX02T?f$v~t?eeNG9CkY?!QSC`ByTckNP&X5hjguC63PIor)}yTA?ET$X<&t z)B$O!LYnUgrt>e|t5gx!hi-UQ7H`Z{ULN$*gdNTttB%?YndvO%uB0kP|0IF>@C4%@ zh*xaT>sh_D*Cj=1UUt~MUR)gbcX*NP8bYN$$bO`tO|0F$@SAov!?JWtV(4eIsKm{K z<1%n89YhG1bj|jx{CEG#z+(!hYBMzeIW8_^^SpUF!pnYy&kgFQ2q~uuEk%&QTt(c< zwyzA(+3lIT@LSBdH#DFNU$+Uu8gbD_3B+P{cgFp0SzX5hCvf}RUUfUBJSXi+nP#e* zAEfK#!`vE0o z)gRoDSt7v}b!AR{Q-Avzs{vaL)oxCd_Yhgn{=W`wteF7fF6> zx_UQ;sMI&XOSPb-5I}eH?ga3QK%7}5lyPq$Sggb^ypM)loN&VG`~;-?CfR1QiV!9A z*hxm^SfayXaV`|0746{m{!bTwfgqy0)Co@3m7dQ9@3nMR@49mskeu?qnTN9jKSsl} z#7}H0Q7!EY=hj5gPqfS|p)70CsXkM-BHor$W=HUGzHA%G)Mjrm-k=`zqgu24TFYl%)Ls02Ew9>I| zZ||5O)=c$gb{;nMi3xTdU)q*bVlM%anD)lqQvGks27`_3!1CT|r~gN)G3TM8^jT4Y z(l#htc+r<>DopLavzW+DB62_}%li;bHxJQy3f!gXWlt$<`wTEedNHt34Qe#M(3{iI z7%O_bmj1JLskp8kSZbzP-1z%gkL5t{=WmUwBe<^#$MpuCYEvoOtVH$YG3VJ9`$MpE z_aD<+uV$Gc&AV&*O#Aw+&Lt>}{rWDC(dGeqi(CnM{3=utR_o%%cvZWWmP9QW-9?54 z0b`0YgYXJ}0;FlW04!f21PUi(lV5nB2)4Z+Pnpn$Xc6lwc4{D9G;34;2GXBHBUe&| z4~T^}v}7_w3c+(W`h-?o{E}{JI6qx0V`U3*2G$?;7W`p2OJsWZ#_z`mQp9DH%Gw=yd( zl05$JX8GFUf%o_aL`s$D061+ARKQgGf>x;sf8Z@g3HhglmSY^qoUnw$7{YIi*C1yx z1lh=!tLi!^KM)zWyxU0uqp5*Y<-J-nNxrC-?l#@t42`TY{&{6A@#9K0Pn0qcnSGtZ zOOwm9axkthQ$T!Sz<`I&7er>SMO5ZuqCB`w^2EIjt6${Ao~CM?E%=8#HnNq@#rfy= zDg%?Bj-2=&bkv-suve3k-YJkFHhSk}&<(+Z2v)ER_fykl6q_$%d*h{QLI~^F43o8% zxlWSxjqi@5^wVwn6R&IjAHAev!0QxfQ(RX|78TFZ&;zTnH2uo5Efs}J{v z5zirOZSo{a1|HD?_efHj3l5u&nrI3OIOb>H0njWGqe9z9~ByknQX8QCZ>h>F}(Pk`(v-aqw!NvL1Jd*`&i!C z&j9ym8Ca8|F+;nzKh6o{yNPL0Lk%fnOfDQKddX4JdTIa8&eV_*#fX2oM0T;PQN_qa z`f49{S?Cz)MNyFmjJR^XnROY93ZpJmU#ag+l)raIE6t}pj+}7Kl`$qdedQo zImvl^IpEe4GjHN_0Azz|a?PUC5JstL)`H{?Jf8U8q3igph_z>w$ku#8=jPqx0=46_K z?BvbKZs~ZqQ2s5q)i);VszaDrRX2yG0{rT%4&sn-K|ff&!t~Cz2|V5nub6ZsDZb!* z8(PWcTvc+gb_74I@JEv0%GHP&qu~}0yt4}WHBW!qow4E>qu{@K(m^MiEmt;Kg6;69 zZ6RG`?aQ5aPSSp~p~sND(%GkBpr)P1z2?buRimhRt@T6`pZ)o6^4Y)4Ro|~{!7m2N zs*_6y))Nc=geta)f%CsmhQxm*2uA0+{2ft6eXYz}x!0T=#|WjcNpwbDN*|n*z$TM2sz=03O#aSBN;hWtC7K^*@$GYGHqV z-=i+ydW6fdi-yQKo2_{{<&#dww@$1cJLqjjd@W5)uCm~=OhSmLLS62&nUrN^L?8}m z-T+0E*l-kmuG|PygZ2d<0TebgS?3WEM2Jm#XE&qoxF!tt%MHWlh@-DqVObcR73FrKaKYhIy zH`qFPykw>dSyD_vaS8SaC49wsj;xwnQo||Jtzh3{PIz0 z9h+KXnDLi5FgR&7ZjmH$ zZ1o>w%;sw`*1t@oYem}>gaVF9Q3aJk)16G|vcKAM#3wje`PO?(*=2_%&)pe_Gei3r z(8t+F%HDUgpqLr<5R4|)Fn;JS!WT}SSfhYy%d+b3ATy+`Gq}d!13mXMR?WUCNJS2a zlm0Q&QJ==WG1^^gylEXvTSQ=7wCLUZQ^Jt0zR3;5Rtq6;SEsu~r6}FS-P@=rFmA^e z>NmKt9F^ZhFno8LeJ!+csqWcAf%IZaLg@>|bc!MDkM|EuODG8Dgg_?UJVIr<;QdBu zJbg^UsM%8gao!5)Vaxm!cGptXVxfE3N=_lN3_@zDO9%Mz1@a z3MRfuUXsrfua*}ORP#fKyexlK+a}Net3EuF(w#bTm-K@l53<%G?(wV=4L3u{Ia`2i-XB&SDmQ-{Dn^*kyi@!2r9c;q(}bpSSXrsyU4E z-+x-eMMQ|k-6RDd?304Gg5#;h5UYi|VP>g>WR0j02zGb<<9sJ=m4WqDur4X~^_-P?5 zs$d2Xa;bI&VE{v0MiB8<~dzaZ(a}7+6L9)lvz_ zKC

    Km02`!0SIHBvddo!Jn3w0b&DtP@e3Xf_`ZuAm8 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%0DDB+*ikVJSC*5qkt-N9L)mTLT{s+JC!mA!vU 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%0Dt7i~qujsqvs8EnY7qoU)1 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𝔐uwW6VX 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/backend/data/commory-store.json b/backend/data/commory-store.json new file mode 100644 index 0000000..f14197f --- /dev/null +++ b/backend/data/commory-store.json @@ -0,0 +1,181 @@ +{ + "imports": { + "import_1778758632278756000": { + "id": "import_1778758632278756000", + "schema_version": "msglayer/v0.1", + "imported_at": "2026-05-14T11:37:12Z", + "source_path": "../msglayer/examples/export.sms-call.json", + "raw_json": "{\n \"version\": \"msglayer/v0.1\",\n \"exported_at\": \"2026-01-01T12:00:00Z\",\n \"source\": {\n \"platform\": \"android\",\n \"device_id\": \"device_001\",\n \"app_version\": \"0.1.4\"\n },\n \"identities\": [\n {\n \"id\": \"self/device_001\",\n \"type\": \"device\",\n \"display_name\": \"Pixel Demo\",\n \"phones\": [],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"self\"\n ],\n \"meta\": {\n \"source\": \"system\"\n }\n },\n {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n ],\n \"events\": [\n {\n \"id\": \"contact_snapshot_person_zhangsan\",\n \"type\": \"contact_snapshot\",\n \"timestamp\": \"2026-01-01T12:00:00Z\",\n \"direction\": \"system\",\n \"participants\": [\n \"person_zhangsan\"\n ],\n \"content\": {\n \"identity_id\": \"person_zhangsan\",\n \"snapshot\": {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n },\n \"meta\": {\n \"source\": \"contacts\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n },\n {\n \"id\": \"sms_101\",\n \"type\": \"sms\",\n \"timestamp\": \"2025-12-01T10:00:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"text\": \"你好,验证码是123456\",\n \"attachments\": []\n },\n \"meta\": {\n \"read\": true,\n \"status\": 0\n },\n \"relations\": [\n {\n \"type\": \"same_thread\",\n \"target\": \"thread_42\"\n }\n ]\n },\n {\n \"id\": \"call_202\",\n \"type\": \"call\",\n \"timestamp\": \"2025-12-01T10:05:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"duration_sec\": 120,\n \"call_type\": \"incoming\",\n \"recording\": null\n },\n \"meta\": {\n \"source\": \"call_log\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n }\n ],\n \"indexes\": {\n \"timeline\": [\n \"sms_101\",\n \"call_202\"\n ]\n }\n}\n" + } + }, + "identities": { + "person_zhangsan": { + "id": "person_zhangsan", + "type": "person", + "display_name": "张三", + "phones": [ + "+8613800000000" + ], + "emails": [], + "avatar": null, + "labels": [ + "contact" + ], + "meta": { + "source": "contacts" + } + }, + "self/device_001": { + "id": "self/device_001", + "type": "device", + "display_name": "Pixel Demo", + "phones": [], + "emails": [], + "avatar": null, + "labels": [ + "self" + ], + "meta": { + "source": "system" + } + } + }, + "events": { + "call_202": { + "item": { + "event_id": "call_202", + "type": "call", + "timestamp": "2025-12-01T10:05:00Z", + "direction": "inbound", + "content_summary": "incoming 120sec", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "meta": { + "source": "call_log" + }, + "schema_version": "msglayer/v0.1" + }, + "raw": { + "id": "call_202", + "type": "call", + "timestamp": "2025-12-01T10:05:00Z", + "direction": "inbound", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "content": { + "call_type": "incoming", + "duration_sec": 120, + "recording": null + }, + "meta": { + "source": "call_log" + }, + "relations": [ + { + "type": "references_identity", + "target": "person_zhangsan" + } + ] + } + }, + "contact_snapshot_person_zhangsan": { + "item": { + "event_id": "contact_snapshot_person_zhangsan", + "type": "contact_snapshot", + "timestamp": "2026-01-01T12:00:00Z", + "direction": "system", + "content_summary": "person_zhangsan", + "participants": [ + "person_zhangsan" + ], + "meta": { + "source": "contacts" + }, + "schema_version": "msglayer/v0.1" + }, + "raw": { + "id": "contact_snapshot_person_zhangsan", + "type": "contact_snapshot", + "timestamp": "2026-01-01T12:00:00Z", + "direction": "system", + "participants": [ + "person_zhangsan" + ], + "content": { + "identity_id": "person_zhangsan", + "snapshot": { + "avatar": null, + "display_name": "张三", + "emails": [], + "id": "person_zhangsan", + "labels": [ + "contact" + ], + "meta": { + "source": "contacts" + }, + "phones": [ + "+8613800000000" + ], + "type": "person" + } + }, + "meta": { + "source": "contacts" + }, + "relations": [ + { + "type": "references_identity", + "target": "person_zhangsan" + } + ] + } + }, + "sms_101": { + "item": { + "event_id": "sms_101", + "type": "sms", + "timestamp": "2025-12-01T10:00:00Z", + "direction": "inbound", + "content_summary": "你好,验证码是123456", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "meta": { + "read": true, + "status": 0 + }, + "schema_version": "msglayer/v0.1" + }, + "raw": { + "id": "sms_101", + "type": "sms", + "timestamp": "2025-12-01T10:00:00Z", + "direction": "inbound", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "content": { + "attachments": [], + "text": "你好,验证码是123456" + }, + "meta": { + "read": true, + "status": 0 + }, + "relations": [ + { + "type": "same_thread", + "target": "thread_42" + } + ] + } + } + } +} \ No newline at end of file diff --git a/backend/go.mod b/backend/go.mod new file mode 100644 index 0000000..ed55bc8 --- /dev/null +++ b/backend/go.mod @@ -0,0 +1,3 @@ +module github.com/IsKenKenYa/Commory/backend + +go 1.25.0 diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go new file mode 100644 index 0000000..1820187 --- /dev/null +++ b/backend/internal/api/server.go @@ -0,0 +1,182 @@ +package api + +import ( + "context" + "encoding/json" + "net/http" + + "github.com/IsKenKenYa/Commory/backend/internal/importers" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/query" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +type Server struct { + store storage.Provider + service query.Service + validator *msglayer.Validator + importer importers.Importer +} + +func NewServer(store storage.Provider, validator *msglayer.Validator) *Server { + return &Server{ + store: store, + service: query.New(store), + validator: validator, + importer: importers.JSONImporter{}, + } +} + +func (s *Server) Handler() http.Handler { + mux := http.NewServeMux() + mux.HandleFunc("/api/imports", s.handleImports) + mux.HandleFunc("/api/validate", s.handleValidate) + mux.HandleFunc("/api/events", s.handleEvents) + mux.HandleFunc("/api/events/", s.handleEvent) + mux.HandleFunc("/api/timeline", s.handleTimeline) + mux.HandleFunc("/api/identities", s.handleIdentities) + mux.HandleFunc("/api/identities/", s.handleIdentity) + mux.HandleFunc("/api/search", s.handleSearch) + mux.HandleFunc("/api/threads/", s.handleThread) + return mux +} + +func (s *Server) handleImports(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + var req struct { + Path string `json:"path"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + export, raw, err := s.importer.Import(req.Path) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + importID, err := s.store.Import(r.Context(), req.Path, export, raw) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusCreated, map[string]any{ + "import_id": importID, + "msglayer_version": export.Version, + }) +} + +func (s *Server) handleValidate(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + var req struct { + Path string `json:"path"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := s.validator.ValidateFile(req.Path); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + writeJSON(w, http.StatusOK, map[string]any{"valid": true}) +} + +func (s *Server) handleEvents(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Events(r.Context(), buildSearchParams(r)) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusOK, items) +} + +func (s *Server) handleEvent(w http.ResponseWriter, r *http.Request) { + id := r.URL.Path[len("/api/events/"):] + item, err := s.service.Event(r.Context(), id) + if err != nil { + http.Error(w, err.Error(), http.StatusNotFound) + return + } + writeJSON(w, http.StatusOK, item) +} + +func (s *Server) handleTimeline(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Timeline(r.Context(), buildSearchParams(r)) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusOK, items) +} + +func (s *Server) handleIdentities(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Identities(r.Context()) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusOK, items) +} + +func (s *Server) handleIdentity(w http.ResponseWriter, r *http.Request) { + id := r.URL.Path[len("/api/identities/"):] + item, err := s.service.Identity(r.Context(), id) + if err != nil { + http.Error(w, err.Error(), http.StatusNotFound) + return + } + writeJSON(w, http.StatusOK, item) +} + +func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Search(r.Context(), buildSearchParams(r)) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusOK, items) +} + +func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { + id := r.URL.Path[len("/api/threads/"):] + items, err := s.service.Thread(r.Context(), id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, http.StatusOK, items) +} + +func buildSearchParams(r *http.Request) msglayer.SearchParams { + q := r.URL.Query() + return msglayer.SearchParams{ + Keyword: q.Get("q"), + ContactID: q.Get("contact"), + Type: q.Get("type"), + Participant: q.Get("participant"), + From: q.Get("from"), + To: q.Get("to"), + Limit: 100, + } +} + +func writeJSON(w http.ResponseWriter, status int, payload any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _ = json.NewEncoder(w).Encode(payload) +} + +func Shutdown(ctx context.Context, srv *http.Server) error { + return srv.Shutdown(ctx) +} diff --git a/backend/internal/cli/root.go b/backend/internal/cli/root.go new file mode 100644 index 0000000..45df4c0 --- /dev/null +++ b/backend/internal/cli/root.go @@ -0,0 +1,241 @@ +package cli + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/api" + "github.com/IsKenKenYa/Commory/backend/internal/config" + "github.com/IsKenKenYa/Commory/backend/internal/importers" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/query" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func Execute(ctx context.Context, args []string, stdout, stderr io.Writer) error { + if len(args) == 0 { + printUsage(stdout) + return nil + } + + switch args[0] { + case "serve": + return runServe(ctx, stdout) + case "import": + if len(args) != 2 { + return fmt.Errorf("usage: commory import ") + } + return runImport(ctx, args[1], stdout) + case "validate": + if len(args) != 2 { + return fmt.Errorf("usage: commory validate ") + } + return runValidate(args[1], stdout) + case "query": + return runQuery(ctx, args[1:], stdout) + case "timeline": + return runTimeline(ctx, args[1:], stdout) + case "contacts": + return runContacts(ctx, args[1:], stdout) + case "export": + return runExport(ctx, args[1:], stdout) + default: + printUsage(stderr) + return fmt.Errorf("unknown command: %s", args[0]) + } +} + +func printUsage(w io.Writer) { + _, _ = fmt.Fprintln(w, "commory ") +} + +func runServe(ctx context.Context, stdout io.Writer) error { + cfg, store, validator, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + server := api.NewServer(store, validator) + httpServer := &http.Server{Addr: cfg.ListenAddr, Handler: server.Handler()} + go func() { + <-ctx.Done() + shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _ = api.Shutdown(shutdownCtx, httpServer) + }() + _, _ = fmt.Fprintf(stdout, "Commory listening on %s\n", cfg.ListenAddr) + return httpServer.ListenAndServe() +} + +func runImport(ctx context.Context, path string, stdout io.Writer) error { + _, store, validator, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + importer := importers.JSONImporter{} + export, raw, err := importer.Import(path) + if err != nil { + return err + } + if err := validator.ValidateBytes(raw); err != nil { + return err + } + importID, err := store.Import(ctx, path, export, raw) + if err != nil { + return err + } + _, _ = fmt.Fprintf(stdout, "imported %s as %s\n", path, importID) + return nil +} + +func runValidate(path string, stdout io.Writer) error { + cfg, err := config.Load() + if err != nil { + return err + } + validator, err := msglayer.NewValidator(cfg.SchemaRoot) + if err != nil { + return err + } + if err := validator.ValidateFile(path); err != nil { + return err + } + _, _ = fmt.Fprintln(stdout, "valid") + return nil +} + +func runQuery(ctx context.Context, args []string, stdout io.Writer) error { + flags := flag.NewFlagSet("query", flag.ContinueOnError) + flags.SetOutput(io.Discard) + var params msglayer.SearchParams + params.Limit = 100 + flags.StringVar(¶ms.ContactID, "contact", "", "") + flags.StringVar(¶ms.Type, "type", "", "") + flags.StringVar(¶ms.From, "from", "", "") + flags.StringVar(¶ms.To, "to", "", "") + if err := flags.Parse(args); err != nil { + return err + } + if rest := flags.Args(); len(rest) > 0 { + params.Keyword = rest[0] + } + _, store, _, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + items, err := query.New(store).Search(ctx, params) + if err != nil { + return err + } + return json.NewEncoder(stdout).Encode(items) +} + +func runTimeline(ctx context.Context, args []string, stdout io.Writer) error { + flags := flag.NewFlagSet("timeline", flag.ContinueOnError) + flags.SetOutput(io.Discard) + var params msglayer.SearchParams + params.Limit = 100 + flags.StringVar(¶ms.From, "from", "", "") + flags.StringVar(¶ms.To, "to", "", "") + flags.StringVar(¶ms.Type, "type", "", "") + flags.StringVar(¶ms.Participant, "participant", "", "") + if err := flags.Parse(args); err != nil { + return err + } + _, store, _, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + items, err := query.New(store).Timeline(ctx, params) + if err != nil { + return err + } + return json.NewEncoder(stdout).Encode(items) +} + +func runContacts(ctx context.Context, args []string, stdout io.Writer) error { + if len(args) != 1 || args[0] != "list" { + return fmt.Errorf("usage: commory contacts list") + } + _, store, _, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + items, err := query.New(store).Identities(ctx) + if err != nil { + return err + } + return json.NewEncoder(stdout).Encode(items) +} + +func runExport(ctx context.Context, args []string, stdout io.Writer) error { + flags := flag.NewFlagSet("export", flag.ContinueOnError) + flags.SetOutput(io.Discard) + var format string + var importID string + flags.StringVar(&format, "format", "json", "") + flags.StringVar(&importID, "import-id", "", "") + if err := flags.Parse(args); err != nil { + return err + } + if format != "json" { + return fmt.Errorf("unsupported export format: %s", format) + } + _, store, _, err := boot(ctx) + if err != nil { + return err + } + defer store.Close() + raw, err := store.ExportImport(ctx, importID) + if err != nil { + return err + } + _, err = stdout.Write(raw) + return err +} + +func boot(ctx context.Context) (config.Config, storage.Provider, *msglayer.Validator, error) { + cfg, err := config.Load() + if err != nil { + return config.Config{}, nil, nil, err + } + validator, err := msglayer.NewValidator(cfg.SchemaRoot) + if err != nil { + return config.Config{}, nil, nil, err + } + store, err := openStore(cfg) + if err != nil { + return config.Config{}, nil, nil, err + } + if err := store.Init(ctx); err != nil { + return config.Config{}, nil, nil, err + } + return cfg, store, validator, nil +} + +func openStore(cfg config.Config) (storage.Provider, error) { + switch cfg.Driver { + case "sqlite": + return storage.NewSQLiteProvider(cfg.DSN) + case "postgres": + dsn := cfg.DSN + if cfg.DatabaseURL != "" { + dsn = cfg.DatabaseURL + } + if dsn == "" { + dsn = "./data/commory-postgres-store.json" + } + return storage.NewPostgresProvider(dsn) + default: + return nil, fmt.Errorf("unsupported db driver: %s", cfg.Driver) + } +} diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go new file mode 100644 index 0000000..9062fcc --- /dev/null +++ b/backend/internal/config/config.go @@ -0,0 +1,31 @@ +package config + +import ( + "os" + "path/filepath" +) + +type Config struct { + Driver string + DSN string + DatabaseURL string + ListenAddr string + SchemaRoot string +} + +func Load() (Config, error) { + return Config{ + Driver: env("COMMORY_DB_DRIVER", "sqlite"), + DSN: env("COMMORY_DB_DSN", filepath.Join(".", "data", "commory-store.json")), + DatabaseURL: env("COMMORY_DATABASE_URL", ""), + ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), + SchemaRoot: env("COMMORY_SCHEMA_ROOT", filepath.Join("..", "msglayer", "schema", "v0.1", "root.schema.json")), + }, nil +} + +func env(key, fallback string) string { + if value := os.Getenv(key); value != "" { + return value + } + return fallback +} diff --git a/backend/internal/importers/importer.go b/backend/internal/importers/importer.go new file mode 100644 index 0000000..033d872 --- /dev/null +++ b/backend/internal/importers/importer.go @@ -0,0 +1,27 @@ +package importers + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +type Importer interface { + Import(path string) (msglayer.RootExport, []byte, error) +} + +type JSONImporter struct{} + +func (JSONImporter) Import(path string) (msglayer.RootExport, []byte, error) { + data, err := os.ReadFile(path) + if err != nil { + return msglayer.RootExport{}, nil, err + } + var export msglayer.RootExport + if err := json.Unmarshal(data, &export); err != nil { + return msglayer.RootExport{}, nil, fmt.Errorf("decode msglayer json: %w", err) + } + return export, data, nil +} diff --git a/backend/internal/index/index.go b/backend/internal/index/index.go new file mode 100644 index 0000000..357c9c9 --- /dev/null +++ b/backend/internal/index/index.go @@ -0,0 +1,5 @@ +package index + +type Provider interface { + Name() string +} diff --git a/backend/internal/msglayer/types.go b/backend/internal/msglayer/types.go new file mode 100644 index 0000000..2de954f --- /dev/null +++ b/backend/internal/msglayer/types.go @@ -0,0 +1,64 @@ +package msglayer + +type RootExport struct { + Version string `json:"version"` + ExportedAt string `json:"exported_at"` + Source Source `json:"source"` + Identities []Identity `json:"identities"` + Events []Event `json:"events"` + Indexes map[string]any `json:"indexes,omitempty"` +} + +type Source struct { + Platform string `json:"platform"` + DeviceID string `json:"device_id"` + AppVersion string `json:"app_version"` +} + +type Identity struct { + ID string `json:"id"` + Type string `json:"type"` + DisplayName string `json:"display_name"` + Phones []string `json:"phones"` + Emails []string `json:"emails"` + Avatar *string `json:"avatar"` + Labels []string `json:"labels"` + Meta map[string]any `json:"meta"` +} + +type Event struct { + ID string `json:"id"` + Type string `json:"type"` + Timestamp string `json:"timestamp"` + Direction string `json:"direction"` + Participants []string `json:"participants"` + Content map[string]any `json:"content"` + Meta map[string]any `json:"meta"` + Relations []Relation `json:"relations"` +} + +type Relation struct { + Type string `json:"type"` + Target string `json:"target"` +} + +type SearchParams struct { + Keyword string + ContactID string + Type string + Participant string + From string + To string + Limit int +} + +type TimelineItem struct { + EventID string `json:"event_id"` + Type string `json:"type"` + Timestamp string `json:"timestamp"` + Direction string `json:"direction"` + ContentSummary string `json:"content_summary"` + Participants []string `json:"participants"` + Meta map[string]any `json:"meta,omitempty"` + SchemaVersion string `json:"schema_version"` +} diff --git a/backend/internal/msglayer/validator.go b/backend/internal/msglayer/validator.go new file mode 100644 index 0000000..958f508 --- /dev/null +++ b/backend/internal/msglayer/validator.go @@ -0,0 +1,84 @@ +package msglayer + +import ( + "encoding/json" + "fmt" + "os" +) + +type Validator struct { + rootSchemaPath string +} + +func NewValidator(rootSchemaPath string) (*Validator, error) { + return &Validator{rootSchemaPath: rootSchemaPath}, nil +} + +func (v *Validator) ValidateBytes(data []byte) error { + var payload RootExport + if err := json.Unmarshal(data, &payload); err != nil { + return err + } + if payload.Version != "msglayer/v0.1" { + return fmt.Errorf("schema validation failed: version must be msglayer/v0.1") + } + if payload.ExportedAt == "" { + return fmt.Errorf("schema validation failed: exported_at is required") + } + if payload.Source.Platform == "" || payload.Source.DeviceID == "" || payload.Source.AppVersion == "" { + return fmt.Errorf("schema validation failed: source.platform, source.device_id, and source.app_version are required") + } + for _, identity := range payload.Identities { + if identity.ID == "" || identity.Type == "" { + return fmt.Errorf("schema validation failed: identity id/type required") + } + switch identity.Type { + case "person", "device", "account": + default: + return fmt.Errorf("schema validation failed: unsupported identity type %q", identity.Type) + } + } + for _, event := range payload.Events { + if event.ID == "" || event.Timestamp == "" || event.Type == "" { + return fmt.Errorf("schema validation failed: event id/type/timestamp required") + } + switch event.Type { + case "sms": + if event.Direction != "inbound" && event.Direction != "outbound" { + return fmt.Errorf("schema validation failed: sms direction invalid") + } + if _, ok := event.Content["text"]; !ok { + return fmt.Errorf("schema validation failed: sms content.text required") + } + case "call": + if event.Direction != "inbound" && event.Direction != "outbound" && event.Direction != "missed" { + return fmt.Errorf("schema validation failed: call direction invalid") + } + if _, ok := event.Content["duration_sec"]; !ok { + return fmt.Errorf("schema validation failed: call content.duration_sec required") + } + case "voice": + if _, ok := event.Content["file"]; !ok { + return fmt.Errorf("schema validation failed: voice content.file required") + } + case "contact_snapshot": + if event.Direction != "system" { + return fmt.Errorf("schema validation failed: contact_snapshot direction must be system") + } + if _, ok := event.Content["identity_id"]; !ok { + return fmt.Errorf("schema validation failed: contact_snapshot content.identity_id required") + } + default: + return fmt.Errorf("schema validation failed: unsupported event type %q", event.Type) + } + } + return nil +} + +func (v *Validator) ValidateFile(path string) error { + data, err := os.ReadFile(path) + if err != nil { + return err + } + return v.ValidateBytes(data) +} diff --git a/backend/internal/msglayer/validator_test.go b/backend/internal/msglayer/validator_test.go new file mode 100644 index 0000000..f3a2b02 --- /dev/null +++ b/backend/internal/msglayer/validator_test.go @@ -0,0 +1,47 @@ +package msglayer + +import ( + "path/filepath" + "runtime" + "testing" +) + +func TestExamplesValidate(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + for _, name := range []string{"export.minimal.json", "export.sms-call.json", "export.voice.json"} { + if err := validator.ValidateFile(projectPath("msglayer", "examples", name)); err != nil { + t.Fatalf("%s should validate: %v", name, err) + } + } +} + +func TestValidationFailsForUnknownEventType(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [], + "events": [{"id":"e1","type":"fax","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected schema validation to fail") + } +} + +func projectPath(parts ...string) string { + _, file, _, _ := runtime.Caller(0) + base := filepath.Join(filepath.Dir(file), "..", "..", "..") + all := append([]string{base}, parts...) + return filepath.Join(all...) +} diff --git a/backend/internal/query/service.go b/backend/internal/query/service.go new file mode 100644 index 0000000..2d5d8f2 --- /dev/null +++ b/backend/internal/query/service.go @@ -0,0 +1,44 @@ +package query + +import ( + "context" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +type Service struct { + store storage.Provider +} + +func New(store storage.Provider) Service { + return Service{store: store} +} + +func (s Service) Events(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.store.ListEvents(ctx, params) +} + +func (s Service) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.store.Search(ctx, params) +} + +func (s Service) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.store.Timeline(ctx, params) +} + +func (s Service) Event(ctx context.Context, id string) (msglayer.TimelineItem, error) { + return s.store.GetEvent(ctx, id) +} + +func (s Service) Thread(ctx context.Context, id string) ([]msglayer.TimelineItem, error) { + return s.store.GetThread(ctx, id) +} + +func (s Service) Identities(ctx context.Context) ([]msglayer.Identity, error) { + return s.store.ListIdentities(ctx) +} + +func (s Service) Identity(ctx context.Context, id string) (msglayer.Identity, error) { + return s.store.GetIdentity(ctx, id) +} diff --git a/backend/internal/storage/postgres.go b/backend/internal/storage/postgres.go new file mode 100644 index 0000000..41f2610 --- /dev/null +++ b/backend/internal/storage/postgres.go @@ -0,0 +1,5 @@ +package storage + +func NewPostgresProvider(dsn string) (Provider, error) { + return newSQLStore(dsn, "postgres"), nil +} diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go new file mode 100644 index 0000000..ed7b560 --- /dev/null +++ b/backend/internal/storage/sqlite.go @@ -0,0 +1,5 @@ +package storage + +func NewSQLiteProvider(dsn string) (Provider, error) { + return newSQLStore(dsn, "sqlite"), nil +} diff --git a/backend/internal/storage/sqlite_test.go b/backend/internal/storage/sqlite_test.go new file mode 100644 index 0000000..0d780e5 --- /dev/null +++ b/backend/internal/storage/sqlite_test.go @@ -0,0 +1,84 @@ +package storage + +import ( + "context" + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/IsKenKenYa/Commory/backend/internal/importers" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +func TestSQLiteImportAndQuery(t *testing.T) { + ctx := context.Background() + dbPath := filepath.Join(t.TempDir(), "commory.sqlite") + store, err := NewSQLiteProvider(dbPath) + if err != nil { + t.Fatal(err) + } + defer store.Close() + if err := store.Init(ctx); err != nil { + t.Fatal(err) + } + + rootSchema := repoPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := msglayer.NewValidator(rootSchema) + if err != nil { + t.Fatal(err) + } + sample := repoPath("msglayer", "examples", "export.sms-call.json") + importer := importers.JSONImporter{} + export, raw, err := importer.Import(sample) + if err != nil { + t.Fatal(err) + } + if err := validator.ValidateBytes(raw); err != nil { + t.Fatal(err) + } + importID, err := store.Import(ctx, sample, export, raw) + if err != nil { + t.Fatal(err) + } + if importID == "" { + t.Fatal("expected import id") + } + + items, err := store.Search(ctx, msglayer.SearchParams{Keyword: "验证码", Limit: 10}) + if err != nil { + t.Fatal(err) + } + if len(items) == 0 { + t.Fatal("expected keyword search hits") + } + + thread, err := store.GetThread(ctx, "thread_42") + if err != nil { + t.Fatal(err) + } + if len(thread) == 0 { + t.Fatal("expected thread reconstruction results") + } + + rawExport, err := store.ExportImport(ctx, "") + if err != nil { + t.Fatal(err) + } + if len(rawExport) == 0 { + t.Fatal("expected exported raw json") + } +} + +func TestPostgresProviderSkipsWithoutDSN(t *testing.T) { + if os.Getenv("COMMORY_TEST_POSTGRES_DSN") == "" { + t.Skip("COMMORY_TEST_POSTGRES_DSN not set") + } +} + +func repoPath(parts ...string) string { + _, file, _, _ := runtime.Caller(0) + base := filepath.Join(filepath.Dir(file), "..", "..", "..") + all := append([]string{base}, parts...) + return filepath.Join(all...) +} diff --git a/backend/internal/storage/sqlstore.go b/backend/internal/storage/sqlstore.go new file mode 100644 index 0000000..635a1c4 --- /dev/null +++ b/backend/internal/storage/sqlstore.go @@ -0,0 +1,313 @@ +package storage + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +type storeSnapshot struct { + Imports map[string]storedImport `json:"imports"` + Identities map[string]msglayer.Identity `json:"identities"` + Events map[string]storedEvent `json:"events"` +} + +type storedImport struct { + ID string `json:"id"` + SchemaVersion string `json:"schema_version"` + ImportedAt string `json:"imported_at"` + SourcePath string `json:"source_path"` + RawJSON string `json:"raw_json"` +} + +type storedEvent struct { + Item msglayer.TimelineItem `json:"item"` + Raw msglayer.Event `json:"raw"` +} + +type fileStore struct { + mu sync.RWMutex + name string + path string + snapshot storeSnapshot +} + +func newSQLStore(path, name string) Provider { + return &fileStore{ + name: name, + path: path, + snapshot: storeSnapshot{ + Imports: map[string]storedImport{}, + Identities: map[string]msglayer.Identity{}, + Events: map[string]storedEvent{}, + }, + } +} + +func (s *fileStore) Name() string { return s.name } + +func (s *fileStore) Close() error { return nil } + +func (s *fileStore) Init(ctx context.Context) error { + _ = ctx + if err := EnsureParentDir(s.path); err != nil { + return err + } + data, err := os.ReadFile(s.path) + if err != nil { + if os.IsNotExist(err) { + return s.persist() + } + return err + } + if len(data) == 0 { + return nil + } + return json.Unmarshal(data, &s.snapshot) +} + +func (s *fileStore) Import(ctx context.Context, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + + importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) + s.snapshot.Imports[importID] = storedImport{ + ID: importID, + SchemaVersion: export.Version, + ImportedAt: time.Now().UTC().Format(time.RFC3339), + SourcePath: sourcePath, + RawJSON: string(raw), + } + for _, identity := range export.Identities { + s.snapshot.Identities[identity.ID] = identity + } + for _, event := range export.Events { + s.snapshot.Events[event.ID] = storedEvent{ + Item: msglayer.TimelineItem{ + EventID: event.ID, + Type: event.Type, + Timestamp: event.Timestamp, + Direction: event.Direction, + ContentSummary: summarizeEvent(event), + Participants: append([]string(nil), event.Participants...), + Meta: event.Meta, + SchemaVersion: export.Version, + }, + Raw: event, + } + } + return importID, s.persist() +} + +func (s *fileStore) ExportImport(ctx context.Context, importID string) ([]byte, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + if importID == "" { + var err error + importID, err = s.latestImportIDLocked() + if err != nil { + return nil, err + } + } + item, ok := s.snapshot.Imports[importID] + if !ok { + return nil, fmt.Errorf("import not found: %s", importID) + } + return []byte(item.RawJSON), nil +} + +func (s *fileStore) LatestImportID(ctx context.Context) (string, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + return s.latestImportIDLocked() +} + +func (s *fileStore) latestImportIDLocked() (string, error) { + if len(s.snapshot.Imports) == 0 { + return "", fmt.Errorf("no imports found") + } + imports := make([]storedImport, 0, len(s.snapshot.Imports)) + for _, item := range s.snapshot.Imports { + imports = append(imports, item) + } + sort.Slice(imports, func(i, j int) bool { return imports[i].ImportedAt > imports[j].ImportedAt }) + return imports[0].ID, nil +} + +func (s *fileStore) GetEvent(ctx context.Context, id string) (msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + item, ok := s.snapshot.Events[id] + if !ok { + return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) + } + return item.Item, nil +} + +func (s *fileStore) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, false) +} + +func (s *fileStore) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, true) +} + +func (s *fileStore) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, false) +} + +func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchParams, keywordOnly bool) ([]msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + + var items []msglayer.TimelineItem + for _, stored := range s.snapshot.Events { + if keywordOnly && params.Keyword == "" { + continue + } + if params.Keyword != "" && !matchesKeyword(stored, params.Keyword) { + continue + } + if params.ContactID != "" && !contains(stored.Item.Participants, params.ContactID) { + continue + } + if params.Participant != "" && !contains(stored.Item.Participants, params.Participant) { + continue + } + if params.Type != "" && stored.Item.Type != params.Type { + continue + } + if params.From != "" && stored.Item.Timestamp < params.From { + continue + } + if params.To != "" && stored.Item.Timestamp > params.To { + continue + } + items = append(items, stored.Item) + } + sort.Slice(items, func(i, j int) bool { return items[i].Timestamp > items[j].Timestamp }) + if params.Limit > 0 && len(items) > params.Limit { + items = items[:params.Limit] + } + return items, nil +} + +func (s *fileStore) ListIdentities(ctx context.Context) ([]msglayer.Identity, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]msglayer.Identity, 0, len(s.snapshot.Identities)) + for _, identity := range s.snapshot.Identities { + items = append(items, identity) + } + sort.Slice(items, func(i, j int) bool { return items[i].DisplayName < items[j].DisplayName }) + return items, nil +} + +func (s *fileStore) GetIdentity(ctx context.Context, id string) (msglayer.Identity, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + identity, ok := s.snapshot.Identities[id] + if !ok { + return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) + } + return identity, nil +} + +func (s *fileStore) GetThread(ctx context.Context, threadID string) ([]msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + var items []msglayer.TimelineItem + for _, stored := range s.snapshot.Events { + for _, relation := range stored.Raw.Relations { + if relation.Type == "same_thread" && relation.Target == threadID { + items = append(items, stored.Item) + break + } + } + } + sort.Slice(items, func(i, j int) bool { return items[i].Timestamp < items[j].Timestamp }) + return items, nil +} + +func EnsureParentDir(path string) error { + dir := filepath.Dir(path) + if dir == "." || dir == "" { + return nil + } + return os.MkdirAll(dir, 0o755) +} + +func (s *fileStore) persist() error { + data, err := json.MarshalIndent(s.snapshot, "", " ") + if err != nil { + return err + } + return os.WriteFile(s.path, data, 0o644) +} + +func summarizeEvent(event msglayer.Event) string { + switch event.Type { + case "sms": + return asString(event.Content["text"]) + case "call": + return fmt.Sprintf("%s %vsec", asString(event.Content["call_type"]), event.Content["duration_sec"]) + case "voice": + if summary := asString(event.Content["summary"]); summary != "" { + return summary + } + return asString(event.Content["transcript"]) + case "contact_snapshot": + return asString(event.Content["identity_id"]) + default: + return event.Type + } +} + +func matchesKeyword(event storedEvent, keyword string) bool { + needle := strings.ToLower(keyword) + if strings.Contains(strings.ToLower(event.Item.ContentSummary), needle) { + return true + } + if transcript := asString(event.Raw.Content["transcript"]); strings.Contains(strings.ToLower(transcript), needle) { + return true + } + if summary := asString(event.Raw.Content["summary"]); strings.Contains(strings.ToLower(summary), needle) { + return true + } + return false +} + +func contains(values []string, target string) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func asString(v any) string { + if v == nil { + return "" + } + if value, ok := v.(string); ok { + return value + } + return fmt.Sprintf("%v", v) +} diff --git a/backend/internal/storage/storage.go b/backend/internal/storage/storage.go new file mode 100644 index 0000000..61814a4 --- /dev/null +++ b/backend/internal/storage/storage.go @@ -0,0 +1,23 @@ +package storage + +import ( + "context" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +type Provider interface { + Name() string + Init(context.Context) error + Import(context.Context, string, msglayer.RootExport, []byte) (string, error) + ExportImport(context.Context, string) ([]byte, error) + LatestImportID(context.Context) (string, error) + GetEvent(context.Context, string) (msglayer.TimelineItem, error) + ListEvents(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) + Search(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) + Timeline(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) + ListIdentities(context.Context) ([]msglayer.Identity, error) + GetIdentity(context.Context, string) (msglayer.Identity, error) + GetThread(context.Context, string) ([]msglayer.TimelineItem, error) + Close() error +} diff --git a/backend/migrations/001_init.sql b/backend/migrations/001_init.sql new file mode 100644 index 0000000..9f11577 --- /dev/null +++ b/backend/migrations/001_init.sql @@ -0,0 +1,7 @@ +CREATE TABLE imports ( + id TEXT PRIMARY KEY, + schema_version TEXT NOT NULL, + imported_at TEXT NOT NULL, + source_path TEXT NOT NULL, + raw_json TEXT NOT NULL +); diff --git a/msglayer/docs/indexing.md b/msglayer/docs/indexing.md new file mode 100644 index 0000000..c037cb9 --- /dev/null +++ b/msglayer/docs/indexing.md @@ -0,0 +1,25 @@ +# MsgLayer Indexing Notes + +`MsgLayer` separates canonical exported data from query-time indexes. + +## Canonical Source + +- root export JSON +- identities +- events + +## First Query Indexes + +- keyword search across SMS text, voice transcript, voice summary +- participant/contact grouping +- timeline ordering by event timestamp +- thread reconstruction from `same_thread` + +## Storage Direction + +The first backend release supports: + +- SQLite for local-first deployment +- PostgreSQL for service-style deployment + +The schema is normalized enough to support future adapters without changing the exported `MsgLayer` wire format. diff --git a/msglayer/docs/mapping-android.md b/msglayer/docs/mapping-android.md new file mode 100644 index 0000000..ca1c4e1 --- /dev/null +++ b/msglayer/docs/mapping-android.md @@ -0,0 +1,77 @@ +# Android -> MsgLayer v0.1 Mapping + +This document defines the first stable mapping from the current Android backup models to `msglayer/v0.1`. + +## Root + +- `version` -> fixed `msglayer/v0.1` +- `exported_at` -> export wall-clock time in RFC3339 UTC +- `source.platform` -> `android` +- `source.device_id` -> Android device identifier passed in by the app layer +- `source.app_version` -> Android app version passed in by the app layer + +## Self Identity + +Every export creates a stable self identity: + +- `id` -> `self/` +- `type` -> `device` +- `display_name` -> device info string when available +- `labels` -> `["self"]` + +## Contact -> Identity + +Android `Contact` maps to a MsgLayer `identity` with: + +- `type` -> `person` +- `phones` -> `phoneNumbers` +- `emails` -> `emails` +- `avatar` -> `photoData` +- `meta.source` -> `contacts` + +Stable identity IDs are generated from normalized phone numbers when possible, and fall back to contact ID/name fingerprints when no phone number exists. + +## Contact -> contact_snapshot Event + +Every exported identity from contacts also generates a `contact_snapshot` event: + +- `direction` -> `system` +- `participants` -> the contact identity itself +- `content.identity_id` -> the identity ID +- `content.snapshot` -> the identity payload +- `relations` -> `references_identity` + +## Message -> sms Event + +- `Message.id` -> event ID suffix +- `Message.date` -> event timestamp +- `Message.type` -> `direction` + - `1` => `inbound` + - `2` => `outbound` + - fallback => `inbound` +- `Message.address` -> participant identity resolution input +- `Message.body` -> `content.text` +- `Message.threadId` -> `relations.same_thread` +- `Message.readState` -> `meta.read` +- `Message.messageStatus` -> `meta.status` + +## CallLog -> call Event + +- `CallLog.id` -> event ID suffix +- `CallLog.date` -> event timestamp +- `CallLog.number` / `CallLog.contact` -> participant identity resolution input +- `CallLog.type` -> `direction` and `content.call_type` +- `CallLog.duration` -> `content.duration_sec` +- `CallLog.contact` -> `meta.contact_name` + +## Restore Boundary + +`MsgLayer` is now the primary export format. + +Current restore compatibility is maintained by converting `MsgLayer` events back into the existing Android restore DTOs: + +- `sms` -> `SmsData` +- `call` -> `CallLogData` +- `identity/contact_snapshot` -> `ContactData` + +This keeps restore behavior working while the write path moves to the new standard. diff --git a/msglayer/docs/versioning.md b/msglayer/docs/versioning.md new file mode 100644 index 0000000..1957bbf --- /dev/null +++ b/msglayer/docs/versioning.md @@ -0,0 +1,20 @@ +# MsgLayer Versioning + +## Current Version + +- `msglayer/v0.1` + +## Rules + +- Backward-compatible additive fields stay within the same major/minor version line. +- Breaking structural changes require a new schema version. +- Schema files, examples, Android mappers, and Go types must evolve together. +- `indexes` is optional derived data and must never become the canonical source of truth. + +## Compatibility Intent + +`v0.1` is the first stable interchange format for Commory. + +- Android export switches to `MsgLayer` +- Go backend import/validation targets `MsgLayer` +- legacy backup JSON remains restore-compatible only through bridge converters diff --git a/msglayer/examples/export.minimal.json b/msglayer/examples/export.minimal.json new file mode 100644 index 0000000..5657fa2 --- /dev/null +++ b/msglayer/examples/export.minimal.json @@ -0,0 +1,27 @@ +{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": { + "platform": "android", + "device_id": "device_demo", + "app_version": "0.1.0" + }, + "identities": [ + { + "id": "self/device_demo", + "type": "device", + "display_name": "My Android Device", + "phones": [], + "emails": [], + "avatar": null, + "labels": [ + "self" + ], + "meta": { + "source": "system" + } + } + ], + "events": [], + "indexes": {} +} diff --git a/msglayer/examples/export.sms-call.json b/msglayer/examples/export.sms-call.json new file mode 100644 index 0000000..8ee25fb --- /dev/null +++ b/msglayer/examples/export.sms-call.json @@ -0,0 +1,134 @@ +{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": { + "platform": "android", + "device_id": "device_001", + "app_version": "0.1.4" + }, + "identities": [ + { + "id": "self/device_001", + "type": "device", + "display_name": "Pixel Demo", + "phones": [], + "emails": [], + "avatar": null, + "labels": [ + "self" + ], + "meta": { + "source": "system" + } + }, + { + "id": "person_zhangsan", + "type": "person", + "display_name": "张三", + "phones": [ + "+8613800000000" + ], + "emails": [], + "avatar": null, + "labels": [ + "contact" + ], + "meta": { + "source": "contacts" + } + } + ], + "events": [ + { + "id": "contact_snapshot_person_zhangsan", + "type": "contact_snapshot", + "timestamp": "2026-01-01T12:00:00Z", + "direction": "system", + "participants": [ + "person_zhangsan" + ], + "content": { + "identity_id": "person_zhangsan", + "snapshot": { + "id": "person_zhangsan", + "type": "person", + "display_name": "张三", + "phones": [ + "+8613800000000" + ], + "emails": [], + "avatar": null, + "labels": [ + "contact" + ], + "meta": { + "source": "contacts" + } + } + }, + "meta": { + "source": "contacts" + }, + "relations": [ + { + "type": "references_identity", + "target": "person_zhangsan" + } + ] + }, + { + "id": "sms_101", + "type": "sms", + "timestamp": "2025-12-01T10:00:00Z", + "direction": "inbound", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "content": { + "text": "你好,验证码是123456", + "attachments": [] + }, + "meta": { + "read": true, + "status": 0 + }, + "relations": [ + { + "type": "same_thread", + "target": "thread_42" + } + ] + }, + { + "id": "call_202", + "type": "call", + "timestamp": "2025-12-01T10:05:00Z", + "direction": "inbound", + "participants": [ + "self/device_001", + "person_zhangsan" + ], + "content": { + "duration_sec": 120, + "call_type": "incoming", + "recording": null + }, + "meta": { + "source": "call_log" + }, + "relations": [ + { + "type": "references_identity", + "target": "person_zhangsan" + } + ] + } + ], + "indexes": { + "timeline": [ + "sms_101", + "call_202" + ] + } +} diff --git a/msglayer/examples/export.voice.json b/msglayer/examples/export.voice.json new file mode 100644 index 0000000..3b37825 --- /dev/null +++ b/msglayer/examples/export.voice.json @@ -0,0 +1,67 @@ +{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": { + "platform": "android", + "device_id": "device_voice", + "app_version": "0.1.4" + }, + "identities": [ + { + "id": "self/device_voice", + "type": "device", + "display_name": "Voice Device", + "phones": [], + "emails": [], + "avatar": null, + "labels": [ + "self" + ], + "meta": { + "source": "system" + } + }, + { + "id": "person_lisi", + "type": "person", + "display_name": "李四", + "phones": [ + "+8613900000000" + ], + "emails": [], + "avatar": null, + "labels": [ + "contact" + ], + "meta": { + "source": "contacts" + } + } + ], + "events": [ + { + "id": "voice_1", + "type": "voice", + "timestamp": "2025-12-02T08:30:00Z", + "direction": "outbound", + "participants": [ + "self/device_voice", + "person_lisi" + ], + "content": { + "file": "file://voice/001.mp3", + "transcript": "我们明天见面讨论项目", + "summary": "约好明天讨论项目" + }, + "meta": { + "source": "voice_recording" + }, + "relations": [ + { + "type": "same_thread", + "target": "thread_voice_1" + } + ] + } + ] +} diff --git a/msglayer/schema/v0.1/common.schema.json b/msglayer/schema/v0.1/common.schema.json new file mode 100644 index 0000000..b4ea487 --- /dev/null +++ b/msglayer/schema/v0.1/common.schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "common.schema.json", + "definitions": { + "id": { + "type": "string", + "minLength": 1 + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "stringArray": { + "type": "array", + "items": { + "type": "string" + } + }, + "meta": { + "type": "object" + } + } +} diff --git a/msglayer/schema/v0.1/content.call.schema.json b/msglayer/schema/v0.1/content.call.schema.json new file mode 100644 index 0000000..72e8aa1 --- /dev/null +++ b/msglayer/schema/v0.1/content.call.schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "content.call.schema.json", + "title": "MsgLayer Call Content", + "type": "object", + "required": [ + "duration_sec", + "call_type" + ], + "properties": { + "duration_sec": { + "type": "integer", + "minimum": 0 + }, + "call_type": { + "type": "string", + "enum": [ + "incoming", + "outgoing", + "missed", + "rejected", + "voicemail", + "unknown" + ] + }, + "recording": { + "type": [ + "string", + "null" + ] + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/content.contact_snapshot.schema.json b/msglayer/schema/v0.1/content.contact_snapshot.schema.json new file mode 100644 index 0000000..0c04d27 --- /dev/null +++ b/msglayer/schema/v0.1/content.contact_snapshot.schema.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "content.contact_snapshot.schema.json", + "title": "MsgLayer Contact Snapshot Content", + "type": "object", + "required": [ + "identity_id", + "snapshot" + ], + "properties": { + "identity_id": { + "type": "string", + "minLength": 1 + }, + "snapshot": { + "$ref": "identity.schema.json" + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/content.sms.schema.json b/msglayer/schema/v0.1/content.sms.schema.json new file mode 100644 index 0000000..e1f5846 --- /dev/null +++ b/msglayer/schema/v0.1/content.sms.schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "content.sms.schema.json", + "title": "MsgLayer SMS Content", + "type": "object", + "required": [ + "text", + "attachments" + ], + "properties": { + "text": { + "type": "string" + }, + "attachments": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/content.voice.schema.json b/msglayer/schema/v0.1/content.voice.schema.json new file mode 100644 index 0000000..6dca77a --- /dev/null +++ b/msglayer/schema/v0.1/content.voice.schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "content.voice.schema.json", + "title": "MsgLayer Voice Content", + "type": "object", + "required": [ + "file", + "transcript", + "summary" + ], + "properties": { + "file": { + "type": "string" + }, + "transcript": { + "type": "string" + }, + "summary": { + "type": "string" + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/event.schema.json b/msglayer/schema/v0.1/event.schema.json new file mode 100644 index 0000000..c5323ee --- /dev/null +++ b/msglayer/schema/v0.1/event.schema.json @@ -0,0 +1,150 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "event.schema.json", + "title": "MsgLayer Event", + "type": "object", + "required": [ + "id", + "type", + "timestamp", + "direction", + "participants", + "content", + "meta", + "relations" + ], + "properties": { + "id": { + "$ref": "common.schema.json#/definitions/id" + }, + "type": { + "type": "string", + "enum": [ + "sms", + "call", + "voice", + "contact_snapshot" + ] + }, + "timestamp": { + "$ref": "common.schema.json#/definitions/timestamp" + }, + "direction": { + "type": "string", + "enum": [ + "inbound", + "outbound", + "missed", + "system" + ] + }, + "participants": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "content": { + "type": "object" + }, + "meta": { + "$ref": "common.schema.json#/definitions/meta" + }, + "relations": { + "type": "array", + "items": { + "$ref": "relation.schema.json" + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "sms" + } + } + }, + "then": { + "properties": { + "direction": { + "enum": [ + "inbound", + "outbound" + ] + }, + "content": { + "$ref": "content.sms.schema.json" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "call" + } + } + }, + "then": { + "properties": { + "direction": { + "enum": [ + "inbound", + "outbound", + "missed" + ] + }, + "content": { + "$ref": "content.call.schema.json" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "voice" + } + } + }, + "then": { + "properties": { + "direction": { + "enum": [ + "inbound", + "outbound" + ] + }, + "content": { + "$ref": "content.voice.schema.json" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "contact_snapshot" + } + } + }, + "then": { + "properties": { + "direction": { + "const": "system" + }, + "content": { + "$ref": "content.contact_snapshot.schema.json" + } + } + } + } + ], + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/identity.schema.json b/msglayer/schema/v0.1/identity.schema.json new file mode 100644 index 0000000..e3dea1f --- /dev/null +++ b/msglayer/schema/v0.1/identity.schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "identity.schema.json", + "title": "MsgLayer Identity", + "type": "object", + "required": [ + "id", + "type", + "display_name", + "phones", + "emails", + "labels", + "meta" + ], + "properties": { + "id": { + "$ref": "common.schema.json#/definitions/id" + }, + "type": { + "type": "string", + "enum": [ + "person", + "device", + "account" + ] + }, + "display_name": { + "type": "string" + }, + "phones": { + "$ref": "common.schema.json#/definitions/stringArray" + }, + "emails": { + "$ref": "common.schema.json#/definitions/stringArray" + }, + "avatar": { + "type": [ + "string", + "null" + ] + }, + "labels": { + "$ref": "common.schema.json#/definitions/stringArray" + }, + "meta": { + "$ref": "common.schema.json#/definitions/meta" + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/relation.schema.json b/msglayer/schema/v0.1/relation.schema.json new file mode 100644 index 0000000..1367837 --- /dev/null +++ b/msglayer/schema/v0.1/relation.schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "relation.schema.json", + "title": "MsgLayer Relation", + "type": "object", + "required": [ + "type", + "target" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "same_thread", + "reply_to", + "derived_from", + "references_identity" + ] + }, + "target": { + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false +} diff --git a/msglayer/schema/v0.1/root.schema.json b/msglayer/schema/v0.1/root.schema.json new file mode 100644 index 0000000..5a64799 --- /dev/null +++ b/msglayer/schema/v0.1/root.schema.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "root.schema.json", + "title": "MsgLayer Root Export", + "type": "object", + "required": [ + "version", + "exported_at", + "source", + "identities", + "events" + ], + "properties": { + "version": { + "type": "string", + "const": "msglayer/v0.1" + }, + "exported_at": { + "$ref": "common.schema.json#/definitions/timestamp" + }, + "source": { + "type": "object", + "required": [ + "platform", + "device_id", + "app_version" + ], + "properties": { + "platform": { + "type": "string" + }, + "device_id": { + "type": "string" + }, + "app_version": { + "type": "string" + } + }, + "additionalProperties": false + }, + "identities": { + "type": "array", + "items": { + "$ref": "identity.schema.json" + } + }, + "events": { + "type": "array", + "items": { + "$ref": "event.schema.json" + } + }, + "indexes": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false +} From eb9f2015de799a69cc4bbfef09a6a4cbcfb39a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Thu, 14 May 2026 21:22:47 +0800 Subject: [PATCH 03/20] =?UTF-8?q?feat:=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=9F=BA=E7=A1=80=E6=9E=B6=E6=9E=84=E4=B8=8E?= =?UTF-8?q?=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增大量静态资源文件、工具函数、路由配置、组件与页面,搭建完整的Vue3+TS+Element Plus后台管理系统基础框架,包含权限控制、主题切换、国际化、多布局支持等核心功能。 --- .gitignore | 8 + web/.prettierrc | 20 + web/.stylelintignore | 9 + web/.stylelintrc.cjs | 82 + web/LICENSE | 21 + web/commitlint.config.cjs | 97 + web/eslint.config.mjs | 83 + web/index.html | 47 + web/package.json | 123 + web/pnpm-lock.yaml | 10109 ++++++++++++++++ web/public/favicon.ico | Bin 0 -> 4286 bytes web/scripts/clean-dev.ts | 838 ++ web/src/App.vue | 41 + web/src/api/auth.ts | 29 + web/src/api/system-manage.ts | 25 + web/src/assets/images/avatar/avatar.webp | Bin 0 -> 954 bytes web/src/assets/images/avatar/avatar1.webp | Bin 0 -> 2296 bytes web/src/assets/images/avatar/avatar10.webp | Bin 0 -> 1410 bytes web/src/assets/images/avatar/avatar2.webp | Bin 0 -> 1214 bytes web/src/assets/images/avatar/avatar3.webp | Bin 0 -> 726 bytes web/src/assets/images/avatar/avatar4.webp | Bin 0 -> 944 bytes web/src/assets/images/avatar/avatar5.webp | Bin 0 -> 2272 bytes web/src/assets/images/avatar/avatar6.webp | Bin 0 -> 810 bytes web/src/assets/images/avatar/avatar7.webp | Bin 0 -> 2712 bytes web/src/assets/images/avatar/avatar8.webp | Bin 0 -> 3946 bytes web/src/assets/images/avatar/avatar9.webp | Bin 0 -> 1680 bytes web/src/assets/images/ceremony/hb.png | Bin 0 -> 2275 bytes web/src/assets/images/ceremony/sd.png | Bin 0 -> 4752 bytes web/src/assets/images/ceremony/xc.png | Bin 0 -> 4910 bytes web/src/assets/images/ceremony/yd.png | Bin 0 -> 4629 bytes web/src/assets/images/common/logo.webp | Bin 0 -> 2484 bytes web/src/assets/images/draw/draw1.png | Bin 0 -> 11315 bytes web/src/assets/images/favicon.ico | Bin 0 -> 4286 bytes web/src/assets/images/lock/bg_dark.webp | Bin 0 -> 70592 bytes web/src/assets/images/lock/bg_light.webp | Bin 0 -> 67246 bytes web/src/assets/images/login/lf_icon2.webp | Bin 0 -> 25016 bytes .../settings/menu_layouts/dual_column.png | Bin 0 -> 514 bytes .../settings/menu_layouts/horizontal.png | Bin 0 -> 409 bytes .../images/settings/menu_layouts/mixed.png | Bin 0 -> 431 bytes .../images/settings/menu_layouts/vertical.png | Bin 0 -> 439 bytes .../images/settings/menu_styles/dark.png | Bin 0 -> 292 bytes .../images/settings/menu_styles/design.png | Bin 0 -> 286 bytes .../images/settings/menu_styles/light.png | Bin 0 -> 293 bytes .../images/settings/theme_styles/dark.png | Bin 0 -> 448 bytes .../images/settings/theme_styles/light.png | Bin 0 -> 416 bytes .../images/settings/theme_styles/system.png | Bin 0 -> 509 bytes web/src/assets/images/svg/403.svg | 1 + web/src/assets/images/svg/404.svg | 1 + web/src/assets/images/svg/500.svg | 5 + web/src/assets/images/svg/login_icon.svg | 1 + web/src/assets/images/user/avatar.webp | Bin 0 -> 2130 bytes web/src/assets/images/user/bg.webp | Bin 0 -> 12352 bytes web/src/assets/styles/core/app.scss | 292 + web/src/assets/styles/core/dark.scss | 93 + web/src/assets/styles/core/el-dark.scss | 2 + web/src/assets/styles/core/el-light.scss | 34 + web/src/assets/styles/core/el-ui.scss | 519 + web/src/assets/styles/core/md.scss | 1036 ++ web/src/assets/styles/core/mixin.scss | 157 + web/src/assets/styles/core/reset.scss | 41 + .../assets/styles/core/router-transition.scss | 104 + web/src/assets/styles/core/tailwind.css | 208 + .../assets/styles/core/theme-animation.scss | 63 + web/src/assets/styles/core/theme-change.scss | 11 + .../assets/styles/custom/one-dark-pro.scss | 98 + web/src/assets/styles/index.scss | 23 + web/src/assets/svg/loading.ts | 32 + .../core/banners/art-basic-banner/index.vue | 343 + .../core/banners/art-card-banner/index.vue | 114 + .../core/base/art-back-to-top/index.vue | 40 + .../components/core/base/art-logo/index.vue | 21 + .../core/base/art-svg-icon/index.vue | 24 + .../core/cards/art-bar-chart-card/index.vue | 103 + .../core/cards/art-data-list-card/index.vue | 74 + .../core/cards/art-donut-chart-card/index.vue | 124 + .../core/cards/art-image-card/index.vue | 89 + .../core/cards/art-line-chart-card/index.vue | 126 + .../core/cards/art-progress-card/index.vue | 86 + .../core/cards/art-stats-card/index.vue | 67 + .../cards/art-timeline-list-card/index.vue | 69 + .../core/charts/art-bar-chart/index.vue | 203 + .../art-dual-bar-compare-chart/index.vue | 195 + .../core/charts/art-h-bar-chart/index.vue | 208 + .../core/charts/art-k-line-chart/index.vue | 152 + .../core/charts/art-line-chart/index.vue | 371 + .../core/charts/art-radar-chart/index.vue | 105 + .../core/charts/art-ring-chart/index.vue | 133 + .../core/charts/art-scatter-chart/index.vue | 115 + .../core/forms/art-button-more/index.vue | 71 + .../core/forms/art-button-table/index.vue | 59 + .../core/forms/art-drag-verify/index.vue | 430 + .../core/forms/art-excel-export/index.vue | 389 + .../core/forms/art-excel-import/index.vue | 62 + .../components/core/forms/art-form/index.vue | 507 + .../core/forms/art-search-bar/index.vue | 581 + .../core/forms/art-wang-editor/index.vue | 257 + .../core/forms/art-wang-editor/style.scss | 273 + .../core/layouts/art-breadcrumb/index.vue | 142 + .../core/layouts/art-chat-window/index.vue | 262 + .../core/layouts/art-fast-enter/index.vue | 113 + .../layouts/art-fireworks-effect/index.vue | 633 + .../layouts/art-global-component/index.vue | 14 + .../core/layouts/art-global-search/index.vue | 431 + .../core/layouts/art-header-bar/index.vue | 485 + .../art-header-bar/widget/ArtUserMenu.vue | 167 + .../art-menus/art-horizontal-menu/index.vue | 110 + .../widget/HorizontalSubmenu.vue | 106 + .../art-menus/art-mixed-menu/index.vue | 279 + .../art-menus/art-sidebar-menu/index.vue | 354 + .../art-menus/art-sidebar-menu/style.scss | 251 + .../art-menus/art-sidebar-menu/theme.scss | 258 + .../widget/SidebarSubmenu.vue | 199 + .../core/layouts/art-notification/index.vue | 456 + .../core/layouts/art-page-content/index.vue | 136 + .../core/layouts/art-screen-lock/index.vue | 519 + .../composables/useSettingsConfig.ts | 248 + .../composables/useSettingsHandlers.ts | 167 + .../composables/useSettingsPanel.ts | 233 + .../composables/useSettingsState.ts | 37 + .../core/layouts/art-settings-panel/index.vue | 72 + .../layouts/art-settings-panel/style.scss | 92 + .../widget/BasicSettings.vue | 77 + .../widget/BoxStyleSettings.vue | 38 + .../widget/ColorSettings.vue | 35 + .../widget/ContainerSettings.vue | 33 + .../widget/MenuLayoutSettings.vue | 31 + .../widget/MenuStyleSettings.vue | 44 + .../widget/SectionTitle.vue | 17 + .../widget/SettingActions.vue | 235 + .../widget/SettingDrawer.vue | 51 + .../widget/SettingHeader.vue | 18 + .../art-settings-panel/widget/SettingItem.vue | 101 + .../widget/ThemeSettings.vue | 28 + .../core/layouts/art-work-tab/index.vue | 584 + .../core/media/art-cutter-img/index.vue | 350 + .../core/media/art-video-player/index.vue | 111 + .../core/others/art-menu-right/index.vue | 415 + .../core/others/art-watermark/index.vue | 64 + .../core/tables/art-table-header/index.vue | 339 + .../core/tables/art-table/index.vue | 368 + .../core/tables/art-table/style.scss | 99 + .../core/text-effect/art-count-to/index.vue | 310 + .../art-festival-text-scroll/index.vue | 32 + .../text-effect/art-text-scroll/index.vue | 285 + .../components/core/theme/theme-svg/index.vue | 100 + .../core/views/exception/ArtException.vue | 55 + .../core/views/login/AuthTopBar.vue | 149 + .../core/views/login/LoginLeftView.vue | 602 + .../core/views/result/ArtResultPage.vue | 43 + .../core/widget/art-icon-button/index.vue | 23 + web/src/config/assets/images.ts | 61 + web/src/config/fastEnter.ts | 79 + web/src/config/index.ts | 135 + web/src/config/modules/component.ts | 105 + web/src/config/modules/fastEnter.ts | 127 + web/src/config/modules/festival.ts | 51 + web/src/config/modules/headerBar.ts | 63 + web/src/config/setting.ts | 109 + web/src/directives/business/highlight.ts | 250 + web/src/directives/business/ripple.ts | 116 + web/src/directives/core/auth.ts | 66 + web/src/directives/core/roles.ts | 87 + web/src/directives/index.ts | 14 + web/src/enums/appEnum.ts | 81 + web/src/enums/formEnum.ts | 24 + web/src/env.d.ts | 34 + web/src/hooks/core/useAppMode.ts | 45 + web/src/hooks/core/useAuth.ts | 74 + web/src/hooks/core/useCeremony.ts | 184 + web/src/hooks/core/useChart.ts | 745 ++ web/src/hooks/core/useCommon.ts | 87 + web/src/hooks/core/useFastEnter.ts | 55 + web/src/hooks/core/useHeaderBar.ts | 201 + web/src/hooks/core/useLayoutHeight.ts | 148 + web/src/hooks/core/useTable.ts | 762 ++ web/src/hooks/core/useTableColumns.ts | 312 + web/src/hooks/core/useTableHeight.ts | 105 + web/src/hooks/core/useTheme.ts | 174 + web/src/hooks/index.ts | 32 + web/src/locales/index.ts | 123 + web/src/locales/langs/en.json | 296 + web/src/locales/langs/zh.json | 296 + web/src/main.ts | 25 + web/src/mock/temp/formData.ts | 273 + web/src/mock/upgrade/changeLog.ts | 12 + web/src/plugins/echarts.ts | 76 + web/src/plugins/index.ts | 6 + web/src/router/core/ComponentLoader.ts | 82 + web/src/router/core/IframeRouteManager.ts | 78 + web/src/router/core/MenuProcessor.ts | 280 + .../router/core/RoutePermissionValidator.ts | 161 + web/src/router/core/RouteRegistry.ts | 90 + web/src/router/core/RouteTransformer.ts | 132 + web/src/router/core/RouteValidator.ts | 187 + web/src/router/core/index.ts | 14 + web/src/router/guards/afterEach.ts | 34 + web/src/router/guards/beforeEach.ts | 418 + web/src/router/index.ts | 23 + web/src/router/modules/dashboard.ts | 24 + web/src/router/modules/exception.ts | 46 + web/src/router/modules/index.ts | 15 + web/src/router/modules/result.ts | 33 + web/src/router/modules/system.ts | 60 + web/src/router/routes/asyncRoutes.ts | 9 + web/src/router/routes/staticRoutes.ts | 72 + web/src/router/routesAlias.ts | 8 + web/src/store/index.ts | 52 + web/src/store/modules/menu.ts | 109 + web/src/store/modules/setting.ts | 450 + web/src/store/modules/table.ts | 97 + web/src/store/modules/user.ts | 235 + web/src/store/modules/worktab.ts | 568 + web/src/types/api/api.d.ts | 138 + web/src/types/common/index.ts | 95 + web/src/types/common/response.ts | 30 + web/src/types/component/chart.ts | 324 + web/src/types/component/index.ts | 145 + web/src/types/config/index.ts | 211 + web/src/types/directive/directive.d.ts | 15 + web/src/types/index.ts | 22 + web/src/types/router/index.ts | 80 + web/src/types/store/index.ts | 157 + web/src/utils/constants/index.ts | 8 + web/src/utils/constants/links.ts | 35 + web/src/utils/form/index.ts | 12 + web/src/utils/form/responsive.ts | 122 + web/src/utils/form/validator.ts | 316 + web/src/utils/http/error.ts | 182 + web/src/utils/http/index.ts | 214 + web/src/utils/http/status.ts | 18 + web/src/utils/index.ts | 34 + web/src/utils/navigation/index.ts | 10 + web/src/utils/navigation/jump.ts | 68 + web/src/utils/navigation/route.ts | 85 + web/src/utils/navigation/worktab.ts | 67 + web/src/utils/router.ts | 61 + web/src/utils/socket/index.ts | 423 + web/src/utils/storage/index.ts | 7 + web/src/utils/storage/storage-config.ts | 125 + web/src/utils/storage/storage-key-manager.ts | 97 + web/src/utils/storage/storage.ts | 250 + web/src/utils/sys/console.ts | 13 + web/src/utils/sys/error-handle.ts | 143 + web/src/utils/sys/index.ts | 6 + web/src/utils/sys/mittBus.ts | 63 + web/src/utils/sys/upgrade.ts | 277 + web/src/utils/table/tableCache.ts | 266 + web/src/utils/table/tableConfig.ts | 55 + web/src/utils/table/tableUtils.ts | 297 + web/src/utils/ui/animation.ts | 80 + web/src/utils/ui/colors.ts | 273 + web/src/utils/ui/emojo.ts | 24 + web/src/utils/ui/iconify-loader.ts | 31 + web/src/utils/ui/index.ts | 11 + web/src/utils/ui/loading.ts | 84 + web/src/utils/ui/tabs.ts | 60 + web/src/views/auth/forget-password/index.vue | 62 + web/src/views/auth/login/index.vue | 284 + web/src/views/auth/login/style.css | 38 + web/src/views/auth/register/index.vue | 240 + web/src/views/dashboard/console/index.vue | 41 + .../console/modules/about-project.vue | 44 + .../dashboard/console/modules/active-user.vue | 47 + .../dashboard/console/modules/card-list.vue | 74 + .../console/modules/dynamic-stats.vue | 79 + .../dashboard/console/modules/new-user.vue | 169 + .../console/modules/sales-overview.vue | 43 + .../dashboard/console/modules/todo-list.vue | 71 + web/src/views/exception/403/index.vue | 16 + web/src/views/exception/404/index.vue | 16 + web/src/views/exception/500/index.vue | 16 + web/src/views/index/index.vue | 29 + web/src/views/index/style.scss | 93 + web/src/views/outside/Iframe.vue | 42 + web/src/views/result/fail/index.vue | 28 + web/src/views/result/success/index.vue | 21 + web/src/views/system/menu/index.vue | 479 + .../views/system/menu/modules/menu-dialog.vue | 384 + web/src/views/system/role/index.vue | 240 + .../system/role/modules/role-edit-dialog.vue | 162 + .../role/modules/role-permission-dialog.vue | 254 + .../views/system/role/modules/role-search.vue | 125 + web/src/views/system/user-center/index.vue | 247 + web/src/views/system/user/index.vue | 259 + .../views/system/user/modules/user-dialog.vue | 143 + .../views/system/user/modules/user-search.vue | 112 + web/tsconfig.json | 28 + web/vite.config.ts | 156 + 288 files changed, 47831 insertions(+) create mode 100644 web/.prettierrc create mode 100644 web/.stylelintignore create mode 100644 web/.stylelintrc.cjs create mode 100755 web/LICENSE create mode 100644 web/commitlint.config.cjs create mode 100644 web/eslint.config.mjs create mode 100755 web/index.html create mode 100755 web/package.json create mode 100644 web/pnpm-lock.yaml create mode 100755 web/public/favicon.ico create mode 100644 web/scripts/clean-dev.ts create mode 100755 web/src/App.vue create mode 100644 web/src/api/auth.ts create mode 100644 web/src/api/system-manage.ts create mode 100644 web/src/assets/images/avatar/avatar.webp create mode 100644 web/src/assets/images/avatar/avatar1.webp create mode 100644 web/src/assets/images/avatar/avatar10.webp create mode 100644 web/src/assets/images/avatar/avatar2.webp create mode 100644 web/src/assets/images/avatar/avatar3.webp create mode 100644 web/src/assets/images/avatar/avatar4.webp create mode 100644 web/src/assets/images/avatar/avatar5.webp create mode 100644 web/src/assets/images/avatar/avatar6.webp create mode 100644 web/src/assets/images/avatar/avatar7.webp create mode 100644 web/src/assets/images/avatar/avatar8.webp create mode 100644 web/src/assets/images/avatar/avatar9.webp create mode 100644 web/src/assets/images/ceremony/hb.png create mode 100644 web/src/assets/images/ceremony/sd.png create mode 100644 web/src/assets/images/ceremony/xc.png create mode 100644 web/src/assets/images/ceremony/yd.png create mode 100644 web/src/assets/images/common/logo.webp create mode 100644 web/src/assets/images/draw/draw1.png create mode 100644 web/src/assets/images/favicon.ico create mode 100644 web/src/assets/images/lock/bg_dark.webp create mode 100644 web/src/assets/images/lock/bg_light.webp create mode 100644 web/src/assets/images/login/lf_icon2.webp create mode 100644 web/src/assets/images/settings/menu_layouts/dual_column.png create mode 100644 web/src/assets/images/settings/menu_layouts/horizontal.png create mode 100644 web/src/assets/images/settings/menu_layouts/mixed.png create mode 100644 web/src/assets/images/settings/menu_layouts/vertical.png create mode 100644 web/src/assets/images/settings/menu_styles/dark.png create mode 100644 web/src/assets/images/settings/menu_styles/design.png create mode 100644 web/src/assets/images/settings/menu_styles/light.png create mode 100644 web/src/assets/images/settings/theme_styles/dark.png create mode 100644 web/src/assets/images/settings/theme_styles/light.png create mode 100644 web/src/assets/images/settings/theme_styles/system.png create mode 100644 web/src/assets/images/svg/403.svg create mode 100644 web/src/assets/images/svg/404.svg create mode 100644 web/src/assets/images/svg/500.svg create mode 100644 web/src/assets/images/svg/login_icon.svg create mode 100644 web/src/assets/images/user/avatar.webp create mode 100644 web/src/assets/images/user/bg.webp create mode 100755 web/src/assets/styles/core/app.scss create mode 100755 web/src/assets/styles/core/dark.scss create mode 100644 web/src/assets/styles/core/el-dark.scss create mode 100644 web/src/assets/styles/core/el-light.scss create mode 100644 web/src/assets/styles/core/el-ui.scss create mode 100644 web/src/assets/styles/core/md.scss create mode 100755 web/src/assets/styles/core/mixin.scss create mode 100755 web/src/assets/styles/core/reset.scss create mode 100644 web/src/assets/styles/core/router-transition.scss create mode 100644 web/src/assets/styles/core/tailwind.css create mode 100644 web/src/assets/styles/core/theme-animation.scss create mode 100755 web/src/assets/styles/core/theme-change.scss create mode 100644 web/src/assets/styles/custom/one-dark-pro.scss create mode 100644 web/src/assets/styles/index.scss create mode 100644 web/src/assets/svg/loading.ts create mode 100644 web/src/components/core/banners/art-basic-banner/index.vue create mode 100644 web/src/components/core/banners/art-card-banner/index.vue create mode 100644 web/src/components/core/base/art-back-to-top/index.vue create mode 100644 web/src/components/core/base/art-logo/index.vue create mode 100644 web/src/components/core/base/art-svg-icon/index.vue create mode 100644 web/src/components/core/cards/art-bar-chart-card/index.vue create mode 100644 web/src/components/core/cards/art-data-list-card/index.vue create mode 100644 web/src/components/core/cards/art-donut-chart-card/index.vue create mode 100644 web/src/components/core/cards/art-image-card/index.vue create mode 100644 web/src/components/core/cards/art-line-chart-card/index.vue create mode 100644 web/src/components/core/cards/art-progress-card/index.vue create mode 100644 web/src/components/core/cards/art-stats-card/index.vue create mode 100644 web/src/components/core/cards/art-timeline-list-card/index.vue create mode 100644 web/src/components/core/charts/art-bar-chart/index.vue create mode 100644 web/src/components/core/charts/art-dual-bar-compare-chart/index.vue create mode 100644 web/src/components/core/charts/art-h-bar-chart/index.vue create mode 100644 web/src/components/core/charts/art-k-line-chart/index.vue create mode 100644 web/src/components/core/charts/art-line-chart/index.vue create mode 100644 web/src/components/core/charts/art-radar-chart/index.vue create mode 100644 web/src/components/core/charts/art-ring-chart/index.vue create mode 100644 web/src/components/core/charts/art-scatter-chart/index.vue create mode 100644 web/src/components/core/forms/art-button-more/index.vue create mode 100644 web/src/components/core/forms/art-button-table/index.vue create mode 100644 web/src/components/core/forms/art-drag-verify/index.vue create mode 100644 web/src/components/core/forms/art-excel-export/index.vue create mode 100644 web/src/components/core/forms/art-excel-import/index.vue create mode 100644 web/src/components/core/forms/art-form/index.vue create mode 100644 web/src/components/core/forms/art-search-bar/index.vue create mode 100644 web/src/components/core/forms/art-wang-editor/index.vue create mode 100644 web/src/components/core/forms/art-wang-editor/style.scss create mode 100755 web/src/components/core/layouts/art-breadcrumb/index.vue create mode 100644 web/src/components/core/layouts/art-chat-window/index.vue create mode 100644 web/src/components/core/layouts/art-fast-enter/index.vue create mode 100644 web/src/components/core/layouts/art-fireworks-effect/index.vue create mode 100644 web/src/components/core/layouts/art-global-component/index.vue create mode 100644 web/src/components/core/layouts/art-global-search/index.vue create mode 100755 web/src/components/core/layouts/art-header-bar/index.vue create mode 100644 web/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue create mode 100644 web/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue create mode 100644 web/src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue create mode 100644 web/src/components/core/layouts/art-menus/art-mixed-menu/index.vue create mode 100755 web/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue create mode 100755 web/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss create mode 100644 web/src/components/core/layouts/art-menus/art-sidebar-menu/theme.scss create mode 100755 web/src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue create mode 100755 web/src/components/core/layouts/art-notification/index.vue create mode 100644 web/src/components/core/layouts/art-page-content/index.vue create mode 100644 web/src/components/core/layouts/art-screen-lock/index.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts create mode 100644 web/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts create mode 100644 web/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts create mode 100644 web/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts create mode 100755 web/src/components/core/layouts/art-settings-panel/index.vue create mode 100755 web/src/components/core/layouts/art-settings-panel/style.scss create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/BasicSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/ColorSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/ContainerSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/SectionTitle.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/SettingActions.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/SettingDrawer.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/SettingHeader.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/SettingItem.vue create mode 100644 web/src/components/core/layouts/art-settings-panel/widget/ThemeSettings.vue create mode 100755 web/src/components/core/layouts/art-work-tab/index.vue create mode 100644 web/src/components/core/media/art-cutter-img/index.vue create mode 100644 web/src/components/core/media/art-video-player/index.vue create mode 100644 web/src/components/core/others/art-menu-right/index.vue create mode 100644 web/src/components/core/others/art-watermark/index.vue create mode 100644 web/src/components/core/tables/art-table-header/index.vue create mode 100644 web/src/components/core/tables/art-table/index.vue create mode 100644 web/src/components/core/tables/art-table/style.scss create mode 100644 web/src/components/core/text-effect/art-count-to/index.vue create mode 100644 web/src/components/core/text-effect/art-festival-text-scroll/index.vue create mode 100644 web/src/components/core/text-effect/art-text-scroll/index.vue create mode 100644 web/src/components/core/theme/theme-svg/index.vue create mode 100644 web/src/components/core/views/exception/ArtException.vue create mode 100644 web/src/components/core/views/login/AuthTopBar.vue create mode 100644 web/src/components/core/views/login/LoginLeftView.vue create mode 100644 web/src/components/core/views/result/ArtResultPage.vue create mode 100644 web/src/components/core/widget/art-icon-button/index.vue create mode 100644 web/src/config/assets/images.ts create mode 100644 web/src/config/fastEnter.ts create mode 100644 web/src/config/index.ts create mode 100644 web/src/config/modules/component.ts create mode 100644 web/src/config/modules/fastEnter.ts create mode 100644 web/src/config/modules/festival.ts create mode 100644 web/src/config/modules/headerBar.ts create mode 100644 web/src/config/setting.ts create mode 100644 web/src/directives/business/highlight.ts create mode 100644 web/src/directives/business/ripple.ts create mode 100755 web/src/directives/core/auth.ts create mode 100644 web/src/directives/core/roles.ts create mode 100755 web/src/directives/index.ts create mode 100755 web/src/enums/appEnum.ts create mode 100644 web/src/enums/formEnum.ts create mode 100755 web/src/env.d.ts create mode 100644 web/src/hooks/core/useAppMode.ts create mode 100644 web/src/hooks/core/useAuth.ts create mode 100644 web/src/hooks/core/useCeremony.ts create mode 100644 web/src/hooks/core/useChart.ts create mode 100644 web/src/hooks/core/useCommon.ts create mode 100644 web/src/hooks/core/useFastEnter.ts create mode 100644 web/src/hooks/core/useHeaderBar.ts create mode 100644 web/src/hooks/core/useLayoutHeight.ts create mode 100644 web/src/hooks/core/useTable.ts create mode 100644 web/src/hooks/core/useTableColumns.ts create mode 100644 web/src/hooks/core/useTableHeight.ts create mode 100644 web/src/hooks/core/useTheme.ts create mode 100644 web/src/hooks/index.ts create mode 100644 web/src/locales/index.ts create mode 100644 web/src/locales/langs/en.json create mode 100644 web/src/locales/langs/zh.json create mode 100755 web/src/main.ts create mode 100755 web/src/mock/temp/formData.ts create mode 100644 web/src/mock/upgrade/changeLog.ts create mode 100644 web/src/plugins/echarts.ts create mode 100644 web/src/plugins/index.ts create mode 100644 web/src/router/core/ComponentLoader.ts create mode 100644 web/src/router/core/IframeRouteManager.ts create mode 100644 web/src/router/core/MenuProcessor.ts create mode 100644 web/src/router/core/RoutePermissionValidator.ts create mode 100644 web/src/router/core/RouteRegistry.ts create mode 100644 web/src/router/core/RouteTransformer.ts create mode 100644 web/src/router/core/RouteValidator.ts create mode 100644 web/src/router/core/index.ts create mode 100644 web/src/router/guards/afterEach.ts create mode 100644 web/src/router/guards/beforeEach.ts create mode 100755 web/src/router/index.ts create mode 100644 web/src/router/modules/dashboard.ts create mode 100644 web/src/router/modules/exception.ts create mode 100644 web/src/router/modules/index.ts create mode 100644 web/src/router/modules/result.ts create mode 100644 web/src/router/modules/system.ts create mode 100644 web/src/router/routes/asyncRoutes.ts create mode 100644 web/src/router/routes/staticRoutes.ts create mode 100644 web/src/router/routesAlias.ts create mode 100755 web/src/store/index.ts create mode 100755 web/src/store/modules/menu.ts create mode 100755 web/src/store/modules/setting.ts create mode 100644 web/src/store/modules/table.ts create mode 100755 web/src/store/modules/user.ts create mode 100755 web/src/store/modules/worktab.ts create mode 100644 web/src/types/api/api.d.ts create mode 100644 web/src/types/common/index.ts create mode 100644 web/src/types/common/response.ts create mode 100644 web/src/types/component/chart.ts create mode 100644 web/src/types/component/index.ts create mode 100644 web/src/types/config/index.ts create mode 100644 web/src/types/directive/directive.d.ts create mode 100644 web/src/types/index.ts create mode 100644 web/src/types/router/index.ts create mode 100644 web/src/types/store/index.ts create mode 100644 web/src/utils/constants/index.ts create mode 100644 web/src/utils/constants/links.ts create mode 100644 web/src/utils/form/index.ts create mode 100644 web/src/utils/form/responsive.ts create mode 100644 web/src/utils/form/validator.ts create mode 100644 web/src/utils/http/error.ts create mode 100755 web/src/utils/http/index.ts create mode 100755 web/src/utils/http/status.ts create mode 100644 web/src/utils/index.ts create mode 100644 web/src/utils/navigation/index.ts create mode 100644 web/src/utils/navigation/jump.ts create mode 100644 web/src/utils/navigation/route.ts create mode 100644 web/src/utils/navigation/worktab.ts create mode 100644 web/src/utils/router.ts create mode 100644 web/src/utils/socket/index.ts create mode 100644 web/src/utils/storage/index.ts create mode 100644 web/src/utils/storage/storage-config.ts create mode 100644 web/src/utils/storage/storage-key-manager.ts create mode 100644 web/src/utils/storage/storage.ts create mode 100644 web/src/utils/sys/console.ts create mode 100644 web/src/utils/sys/error-handle.ts create mode 100644 web/src/utils/sys/index.ts create mode 100644 web/src/utils/sys/mittBus.ts create mode 100644 web/src/utils/sys/upgrade.ts create mode 100644 web/src/utils/table/tableCache.ts create mode 100644 web/src/utils/table/tableConfig.ts create mode 100644 web/src/utils/table/tableUtils.ts create mode 100644 web/src/utils/ui/animation.ts create mode 100755 web/src/utils/ui/colors.ts create mode 100644 web/src/utils/ui/emojo.ts create mode 100644 web/src/utils/ui/iconify-loader.ts create mode 100644 web/src/utils/ui/index.ts create mode 100644 web/src/utils/ui/loading.ts create mode 100644 web/src/utils/ui/tabs.ts create mode 100644 web/src/views/auth/forget-password/index.vue create mode 100755 web/src/views/auth/login/index.vue create mode 100644 web/src/views/auth/login/style.css create mode 100644 web/src/views/auth/register/index.vue create mode 100755 web/src/views/dashboard/console/index.vue create mode 100644 web/src/views/dashboard/console/modules/about-project.vue create mode 100755 web/src/views/dashboard/console/modules/active-user.vue create mode 100755 web/src/views/dashboard/console/modules/card-list.vue create mode 100755 web/src/views/dashboard/console/modules/dynamic-stats.vue create mode 100755 web/src/views/dashboard/console/modules/new-user.vue create mode 100755 web/src/views/dashboard/console/modules/sales-overview.vue create mode 100755 web/src/views/dashboard/console/modules/todo-list.vue create mode 100755 web/src/views/exception/403/index.vue create mode 100755 web/src/views/exception/404/index.vue create mode 100755 web/src/views/exception/500/index.vue create mode 100755 web/src/views/index/index.vue create mode 100644 web/src/views/index/style.scss create mode 100644 web/src/views/outside/Iframe.vue create mode 100755 web/src/views/result/fail/index.vue create mode 100755 web/src/views/result/success/index.vue create mode 100644 web/src/views/system/menu/index.vue create mode 100644 web/src/views/system/menu/modules/menu-dialog.vue create mode 100755 web/src/views/system/role/index.vue create mode 100644 web/src/views/system/role/modules/role-edit-dialog.vue create mode 100644 web/src/views/system/role/modules/role-permission-dialog.vue create mode 100644 web/src/views/system/role/modules/role-search.vue create mode 100755 web/src/views/system/user-center/index.vue create mode 100644 web/src/views/system/user/index.vue create mode 100644 web/src/views/system/user/modules/user-dialog.vue create mode 100644 web/src/views/system/user/modules/user-search.vue create mode 100755 web/tsconfig.json create mode 100755 web/vite.config.ts diff --git a/.gitignore b/.gitignore index 5381194..d4fa121 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,14 @@ previewer/dist/ previewer/.temp/ previewer/.cache/ .pnpm-store/ +web/node_modules/ +web/dist/ +web/dist-ssr/ +web/*.local +web/.cursorrules +web/src/types/import/auto-imports.d.ts +web/src/types/import/components.d.ts +web/.auto-import.json # Coverage coverage/ diff --git a/web/.prettierrc b/web/.prettierrc new file mode 100644 index 0000000..f3d6ad5 --- /dev/null +++ b/web/.prettierrc @@ -0,0 +1,20 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "vueIndentScriptAndStyle": true, + "singleQuote": true, + "quoteProps": "as-needed", + "bracketSpacing": true, + "trailingComma": "none", + "bracketSameLine": false, + "jsxSingleQuote": false, + "arrowParens": "always", + "insertPragma": false, + "requirePragma": false, + "proseWrap": "never", + "htmlWhitespaceSensitivity": "strict", + "endOfLine": "auto", + "rangeStart": 0 +} diff --git a/web/.stylelintignore b/web/.stylelintignore new file mode 100644 index 0000000..476ea45 --- /dev/null +++ b/web/.stylelintignore @@ -0,0 +1,9 @@ +dist +node_modules +public +.husky +.vscode + +src/components/Layout/MenuLeft/index.vue +src/assets +stats.html \ No newline at end of file diff --git a/web/.stylelintrc.cjs b/web/.stylelintrc.cjs new file mode 100644 index 0000000..9dbea0b --- /dev/null +++ b/web/.stylelintrc.cjs @@ -0,0 +1,82 @@ +module.exports = { + // 继承推荐规范配置 + extends: [ + 'stylelint-config-standard', + 'stylelint-config-recommended-scss', + 'stylelint-config-recommended-vue/scss', + 'stylelint-config-html/vue', + 'stylelint-config-recess-order' + ], + // 指定不同文件对应的解析器 + overrides: [ + { + files: ['**/*.{vue,html}'], + customSyntax: 'postcss-html' + }, + { + files: ['**/*.{css,scss}'], + customSyntax: 'postcss-scss' + } + ], + // 自定义规则 + rules: { + 'import-notation': 'string', // 指定导入CSS文件的方式("string"|"url") + 'selector-class-pattern': null, // 选择器类名命名规则 + 'custom-property-pattern': null, // 自定义属性命名规则 + 'keyframes-name-pattern': null, // 动画帧节点样式命名规则 + 'no-descending-specificity': null, // 允许无降序特异性 + 'no-empty-source': null, // 允许空样式 + 'property-no-vendor-prefix': null, // 允许属性前缀 + // 允许 global 、export 、deep伪类 + 'selector-pseudo-class-no-unknown': [ + true, + { + ignorePseudoClasses: ['global', 'export', 'deep'] + } + ], + // 允许未知属性 + 'property-no-unknown': [ + true, + { + ignoreProperties: [] + } + ], + // 允许未知规则 + 'at-rule-no-unknown': [ + true, + { + ignoreAtRules: [ + 'apply', + 'use', + 'mixin', + 'include', + 'extend', + 'each', + 'if', + 'else', + 'for', + 'while', + 'reference' + ] + } + ], + 'scss/at-rule-no-unknown': [ + true, + { + ignoreAtRules: [ + 'apply', + 'use', + 'mixin', + 'include', + 'extend', + 'each', + 'if', + 'else', + 'for', + 'while', + 'reference' + ] + } + ] + } +} diff --git a/web/LICENSE b/web/LICENSE new file mode 100755 index 0000000..cf36c79 --- /dev/null +++ b/web/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 SuperManTT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/web/commitlint.config.cjs b/web/commitlint.config.cjs new file mode 100644 index 0000000..d2ef1bd --- /dev/null +++ b/web/commitlint.config.cjs @@ -0,0 +1,97 @@ +/** + * commitlint 配置文件 + * 文档 + * https://commitlint.js.org/#/reference-rules + * https://cz-git.qbb.sh/zh/guide/ + */ + +module.exports = { + // 继承的规则 + extends: ['@commitlint/config-conventional'], + // 自定义规则 + rules: { + // 提交类型枚举,git提交type必须是以下类型 + 'type-enum': [ + 2, + 'always', + [ + 'feat', // 新增功能 + 'fix', // 修复缺陷 + 'docs', // 文档变更 + 'style', // 代码格式(不影响功能,例如空格、分号等格式修正) + 'refactor', // 代码重构(不包括 bug 修复、功能新增) + 'perf', // 性能优化 + 'test', // 添加疏漏测试或已有测试改动 + 'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等) + 'ci', // 修改 CI 配置、脚本 + 'revert', // 回滚 commit + 'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例) + 'wip' // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例) + ] + ], + 'subject-case': [0] // subject大小写不做校验 + }, + + prompt: { + messages: { + type: '选择你要提交的类型 :', + scope: '选择一个提交范围(可选):', + customScope: '请输入自定义的提交范围 :', + subject: '填写简短精炼的变更描述 :\n', + body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n', + breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n', + footerPrefixesSelect: '选择关联issue前缀(可选):', + customFooterPrefix: '输入自定义issue前缀 :', + footer: '列举关联issue (可选) 例如: #31, #I3244 :\n', + generatingByAI: '正在通过 AI 生成你的提交简短描述...', + generatedSelectByAI: '选择一个 AI 生成的简短描述:', + confirmCommit: '是否提交或修改commit ?' + }, + // prettier-ignore + types: [ + { value: "feat", name: "feat: 新增功能" }, + { value: "fix", name: "fix: 修复缺陷" }, + { value: "docs", name: "docs: 文档变更" }, + { value: "style", name: "style: 代码格式(不影响功能,例如空格、分号等格式修正)" }, + { value: "refactor", name: "refactor: 代码重构(不包括 bug 修复、功能新增)" }, + { value: "perf", name: "perf: 性能优化" }, + { value: "test", name: "test: 添加疏漏测试或已有测试改动" }, + { value: "build", name: "build: 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)" }, + { value: "ci", name: "ci: 修改 CI 配置、脚本" }, + { value: "revert", name: "revert: 回滚 commit" }, + { value: "chore", name: "chore: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)" }, + ], + useEmoji: true, + emojiAlign: 'center', + useAI: false, + aiNumber: 1, + themeColorCode: '', + scopes: [], + allowCustomScopes: true, + allowEmptyScopes: true, + customScopesAlign: 'bottom', + customScopesAlias: 'custom', + emptyScopesAlias: 'empty', + upperCaseSubject: false, + markBreakingChangeMode: false, + allowBreakingChanges: ['feat', 'fix'], + breaklineNumber: 100, + breaklineChar: '|', + skipQuestions: ['breaking', 'footerPrefix', 'footer'], // 跳过的步骤 + issuePrefixes: [{ value: 'closed', name: 'closed: ISSUES has been processed' }], + customIssuePrefixAlign: 'top', + emptyIssuePrefixAlias: 'skip', + customIssuePrefixAlias: 'custom', + allowCustomIssuePrefix: true, + allowEmptyIssuePrefix: true, + confirmColorize: true, + maxHeaderLength: Infinity, + maxSubjectLength: Infinity, + minSubjectLength: 0, + scopeOverrides: undefined, + defaultBody: '', + defaultIssues: '', + defaultScope: '', + defaultSubject: '' + } +} diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs new file mode 100644 index 0000000..ed2d4ba --- /dev/null +++ b/web/eslint.config.mjs @@ -0,0 +1,83 @@ +// 从 URL 和路径模块中导入必要的功能 +import fs from 'fs' +import path, { dirname } from 'path' +import { fileURLToPath } from 'url' + +// 从 ESLint 插件中导入推荐配置 +import pluginJs from '@eslint/js' +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended' +import pluginVue from 'eslint-plugin-vue' +import globals from 'globals' +import tseslint from 'typescript-eslint' + +// 使用 import.meta.url 获取当前模块的路径 +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +// 读取 .auto-import.json 文件的内容,并将其解析为 JSON 对象 +const autoImportConfig = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '.auto-import.json'), 'utf-8') +) + +export default [ + // 指定文件匹配规则 + { + files: ['**/*.{js,mjs,cjs,ts,tsx,vue}'] + }, + // 指定全局变量和环境 + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + // 扩展配置 + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + ...pluginVue.configs['flat/essential'], + // 自定义规则 + { + // 针对所有 JavaScript、TypeScript 和 Vue 文件应用以下配置 + files: ['**/*.{js,mjs,cjs,ts,tsx,vue}'], + + languageOptions: { + globals: { + // 合并从 autoImportConfig 中读取的全局变量配置 + ...autoImportConfig.globals, + // TypeScript 全局命名空间 + Api: 'readonly' + } + }, + rules: { + quotes: ['error', 'single'], // 使用单引号 + semi: ['error', 'never'], // 语句末尾不加分号 + 'no-var': 'error', // 要求使用 let 或 const 而不是 var + '@typescript-eslint/no-explicit-any': 'off', // 禁用 any 检查 + 'vue/multi-word-component-names': 'off', // 禁用对 Vue 组件名称的多词要求检查 + 'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行 + 'no-unexpected-multiline': 'error' // 禁止空余的多行 + } + }, + // vue 规则 + { + files: ['**/*.vue'], + languageOptions: { + parserOptions: { parser: tseslint.parser } + } + }, + // 忽略文件 + { + ignores: [ + 'node_modules', + 'dist', + 'public', + '.vscode/**', + 'src/assets/**', + 'src/utils/console.ts' + ] + }, + // prettier 配置 + eslintPluginPrettierRecommended +] diff --git a/web/index.html b/web/index.html new file mode 100755 index 0000000..ba51ce5 --- /dev/null +++ b/web/index.html @@ -0,0 +1,47 @@ + + + + Art Design Pro + + + + + + + + + + + +

    + + + diff --git a/web/package.json b/web/package.json new file mode 100755 index 0000000..7b66362 --- /dev/null +++ b/web/package.json @@ -0,0 +1,123 @@ +{ + "name": "art-design-pro", + "version": "0.0.0", + "type": "module", + "engines": { + "node": ">=20.19.0", + "pnpm": ">=8.8.0" + }, + "scripts": { + "dev": "vite --open", + "build": "vue-tsc --noEmit && vite build", + "serve": "vite preview", + "lint": "eslint", + "fix": "eslint --fix", + "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"", + "lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix", + "lint:lint-staged": "lint-staged", + "prepare": "husky", + "commit": "git-cz", + "clean:dev": "tsx scripts/clean-dev.ts" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + }, + "lint-staged": { + "*.{js,ts,mjs,mts,tsx}": [ + "eslint --fix", + "prettier --write" + ], + "*.{cjs,json,jsonc}": [ + "prettier --write" + ], + "*.vue": [ + "eslint --fix", + "stylelint --fix --allow-empty-input", + "prettier --write" + ], + "*.{html,htm}": [ + "prettier --write" + ], + "*.{scss,css,less}": [ + "stylelint --fix --allow-empty-input", + "prettier --write" + ], + "*.{md,mdx}": [ + "prettier --write" + ], + "*.{yaml,yml}": [ + "prettier --write" + ] + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "@iconify/vue": "^5.0.0", + "@tailwindcss/vite": "^4.1.14", + "@vue/reactivity": "^3.5.21", + "@vueuse/core": "^13.9.0", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "next", + "axios": "^1.12.2", + "crypto-js": "^4.2.0", + "echarts": "^6.0.0", + "element-plus": "^2.11.2", + "file-saver": "^2.0.5", + "highlight.js": "^11.10.0", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "ohash": "^2.0.11", + "pinia": "^3.0.3", + "pinia-plugin-persistedstate": "^4.3.0", + "qrcode.vue": "^3.6.0", + "tailwindcss": "^4.1.14", + "vue": "^3.5.21", + "vue-draggable-plus": "^0.6.0", + "vue-i18n": "^9.14.0", + "vue-router": "^4.5.1", + "xgplayer": "^3.0.20", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", + "@eslint/js": "^9.9.1", + "@types/node": "^24.0.5", + "@typescript-eslint/eslint-plugin": "^8.3.0", + "@typescript-eslint/parser": "^8.3.0", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/compiler-sfc": "^3.0.5", + "commitizen": "^4.3.0", + "cz-git": "^1.11.1", + "eslint": "^9.9.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.27.0", + "globals": "^15.9.0", + "husky": "^9.1.5", + "lint-staged": "^15.5.2", + "prettier": "^3.5.3", + "rollup-plugin-visualizer": "^5.12.0", + "sass": "^1.81.0", + "stylelint": "^16.20.0", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.6.0", + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-recommended-vue": "^1.5.0", + "stylelint-config-standard": "^36.0.1", + "terser": "^5.36.0", + "tsx": "^4.20.3", + "typescript": "~5.6.3", + "typescript-eslint": "^8.9.0", + "unplugin-auto-import": "^20.2.0", + "unplugin-element-plus": "^0.10.0", + "unplugin-vue-components": "^29.1.0", + "vite": "^7.1.5", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-vue-devtools": "^7.7.6", + "vue-demi": "^0.14.9", + "vue-img-cutter": "^3.0.5", + "vue-tsc": "~2.1.6" + } +} diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml new file mode 100644 index 0000000..401c518 --- /dev/null +++ b/web/pnpm-lock.yaml @@ -0,0 +1,10109 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.2 + version: 2.3.2(vue@3.5.22(typescript@5.6.3)) + '@iconify/vue': + specifier: ^5.0.0 + version: 5.0.0(vue@3.5.22(typescript@5.6.3)) + '@tailwindcss/vite': + specifier: ^4.1.14 + version: 4.1.14(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vue/reactivity': + specifier: ^3.5.21 + version: 3.5.22 + '@vueuse/core': + specifier: ^13.9.0 + version: 13.9.0(vue@3.5.22(typescript@5.6.3)) + '@wangeditor/editor': + specifier: ^5.1.23 + version: 5.1.23 + '@wangeditor/editor-for-vue': + specifier: next + version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.22(typescript@5.6.3)) + axios: + specifier: ^1.12.2 + version: 1.12.2 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + echarts: + specifier: ^6.0.0 + version: 6.0.0 + element-plus: + specifier: ^2.11.2 + version: 2.11.4(vue@3.5.22(typescript@5.6.3)) + file-saver: + specifier: ^2.0.5 + version: 2.0.5 + highlight.js: + specifier: ^11.10.0 + version: 11.11.1 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + ohash: + specifier: ^2.0.11 + version: 2.0.11 + pinia: + specifier: ^3.0.3 + version: 3.0.3(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) + pinia-plugin-persistedstate: + specifier: ^4.3.0 + version: 4.5.0(pinia@3.0.3(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3))) + qrcode.vue: + specifier: ^3.6.0 + version: 3.6.0(vue@3.5.22(typescript@5.6.3)) + tailwindcss: + specifier: ^4.1.14 + version: 4.1.14 + vue: + specifier: ^3.5.21 + version: 3.5.22(typescript@5.6.3) + vue-draggable-plus: + specifier: ^0.6.0 + version: 0.6.0(@types/sortablejs@1.15.8) + vue-i18n: + specifier: ^9.14.0 + version: 9.14.5(vue@3.5.22(typescript@5.6.3)) + vue-router: + specifier: ^4.5.1 + version: 4.5.1(vue@3.5.22(typescript@5.6.3)) + xgplayer: + specifier: ^3.0.20 + version: 3.0.23(core-js@3.45.1) + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@commitlint/cli': + specifier: ^19.4.1 + version: 19.8.1(@types/node@24.8.1)(typescript@5.6.3) + '@commitlint/config-conventional': + specifier: ^19.4.1 + version: 19.8.1 + '@eslint/js': + specifier: ^9.9.1 + version: 9.36.0 + '@types/node': + specifier: ^24.0.5 + version: 24.8.1 + '@typescript-eslint/eslint-plugin': + specifier: ^8.3.0 + version: 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3))(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/parser': + specifier: ^8.3.0 + version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.1(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3)) + '@vue/compiler-sfc': + specifier: ^3.0.5 + version: 3.5.22 + commitizen: + specifier: ^4.3.0 + version: 4.3.1(@types/node@24.8.1)(typescript@5.6.3) + cz-git: + specifier: ^1.11.1 + version: 1.12.0 + eslint: + specifier: ^9.9.1 + version: 9.36.0(jiti@2.6.0) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.2(eslint@9.36.0(jiti@2.6.0)) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.5.4(eslint-config-prettier@9.1.2(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2) + eslint-plugin-vue: + specifier: ^9.27.0 + version: 9.33.0(eslint@9.36.0(jiti@2.6.0)) + globals: + specifier: ^15.9.0 + version: 15.15.0 + husky: + specifier: ^9.1.5 + version: 9.1.7 + lint-staged: + specifier: ^15.5.2 + version: 15.5.2 + prettier: + specifier: ^3.5.3 + version: 3.6.2 + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.14.0(rollup@4.52.3) + sass: + specifier: ^1.81.0 + version: 1.93.2 + stylelint: + specifier: ^16.20.0 + version: 16.24.0(typescript@5.6.3) + stylelint-config-html: + specifier: ^1.1.0 + version: 1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.6.3)) + stylelint-config-recess-order: + specifier: ^4.6.0 + version: 4.6.0(stylelint@16.24.0(typescript@5.6.3)) + stylelint-config-recommended-scss: + specifier: ^14.1.0 + version: 14.1.0(postcss@8.5.6)(stylelint@16.24.0(typescript@5.6.3)) + stylelint-config-recommended-vue: + specifier: ^1.5.0 + version: 1.6.1(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.6.3)) + stylelint-config-standard: + specifier: ^36.0.1 + version: 36.0.1(stylelint@16.24.0(typescript@5.6.3)) + terser: + specifier: ^5.36.0 + version: 5.44.0 + tsx: + specifier: ^4.20.3 + version: 4.20.6 + typescript: + specifier: ~5.6.3 + version: 5.6.3 + typescript-eslint: + specifier: ^8.9.0 + version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + unplugin-auto-import: + specifier: ^20.2.0 + version: 20.2.0(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))) + unplugin-element-plus: + specifier: ^0.10.0 + version: 0.10.0 + unplugin-vue-components: + specifier: ^29.1.0 + version: 29.1.0(@babel/parser@7.28.4)(vue@3.5.22(typescript@5.6.3)) + vite: + specifier: ^7.1.5 + version: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-plugin-vue-devtools: + specifier: ^7.7.6 + version: 7.7.7(rollup@4.52.3)(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3)) + vue-demi: + specifier: ^0.14.9 + version: 0.14.10(vue@3.5.22(typescript@5.6.3)) + vue-img-cutter: + specifier: ^3.0.5 + version: 3.0.7(typescript@5.6.3) + vue-tsc: + specifier: ~2.1.6 + version: 2.1.10(typescript@5.6.3) + +packages: + '@antfu/utils@0.7.10': + resolution: + { + integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww== + } + + '@babel/code-frame@7.27.1': + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + } + engines: { node: '>=6.9.0' } + + '@babel/compat-data@7.28.4': + resolution: + { + integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== + } + engines: { node: '>=6.9.0' } + + '@babel/core@7.28.4': + resolution: + { + integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + } + engines: { node: '>=6.9.0' } + + '@babel/generator@7.28.3': + resolution: + { + integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: + { + integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-compilation-targets@7.27.2': + resolution: + { + integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: + { + integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: + { + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: + { + integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-module-imports@7.27.1': + resolution: + { + integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-module-transforms@7.28.3': + resolution: + { + integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: + { + integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-plugin-utils@7.27.1': + resolution: + { + integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-replace-supers@7.27.1': + resolution: + { + integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: + { + integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-string-parser@7.27.1': + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-identifier@7.27.1': + resolution: + { + integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-option@7.27.1': + resolution: + { + integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + } + engines: { node: '>=6.9.0' } + + '@babel/helpers@7.28.4': + resolution: + { + integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + } + engines: { node: '>=6.9.0' } + + '@babel/parser@7.28.4': + resolution: + { + integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== + } + engines: { node: '>=6.0.0' } + hasBin: true + + '@babel/plugin-proposal-decorators@7.28.0': + resolution: + { + integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.27.1': + resolution: + { + integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: + { + integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: + { + integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: + { + integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.0': + resolution: + { + integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: + { + integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + } + engines: { node: '>=6.9.0' } + + '@babel/template@7.27.2': + resolution: + { + integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + } + engines: { node: '>=6.9.0' } + + '@babel/traverse@7.28.4': + resolution: + { + integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== + } + engines: { node: '>=6.9.0' } + + '@babel/types@7.28.4': + resolution: + { + integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== + } + engines: { node: '>=6.9.0' } + + '@cacheable/memoize@2.0.2': + resolution: + { + integrity: sha512-wPrr7FUiq3Qt4yQyda2/NcOLTJCFcQSU3Am2adP+WLy+sz93/fKTokVTHmtz+rjp4PD7ee0AEOeRVNN6IvIfsg== + } + + '@cacheable/memory@2.0.2': + resolution: + { + integrity: sha512-sJTITLfeCI1rg7P3ssaGmQryq235EGT8dXGcx6oZwX5NRnKq9IE6lddlllcOl+oXW+yaeTRddCjo0xrfU6ZySA== + } + + '@cacheable/utils@2.0.2': + resolution: + { + integrity: sha512-JTFM3raFhVv8LH95T7YnZbf2YoE9wEtkPPStuRF9a6ExZ103hFvs+QyCuYJ6r0hA9wRtbzgZtwUCoDWxssZd4Q== + } + + '@commitlint/cli@19.8.1': + resolution: + { + integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA== + } + engines: { node: '>=v18' } + hasBin: true + + '@commitlint/config-conventional@19.8.1': + resolution: + { + integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ== + } + engines: { node: '>=v18' } + + '@commitlint/config-validator@19.8.1': + resolution: + { + integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ== + } + engines: { node: '>=v18' } + + '@commitlint/config-validator@20.0.0': + resolution: + { + integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg== + } + engines: { node: '>=v18' } + + '@commitlint/ensure@19.8.1': + resolution: + { + integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw== + } + engines: { node: '>=v18' } + + '@commitlint/execute-rule@19.8.1': + resolution: + { + integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA== + } + engines: { node: '>=v18' } + + '@commitlint/execute-rule@20.0.0': + resolution: + { + integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw== + } + engines: { node: '>=v18' } + + '@commitlint/format@19.8.1': + resolution: + { + integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw== + } + engines: { node: '>=v18' } + + '@commitlint/is-ignored@19.8.1': + resolution: + { + integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg== + } + engines: { node: '>=v18' } + + '@commitlint/lint@19.8.1': + resolution: + { + integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw== + } + engines: { node: '>=v18' } + + '@commitlint/load@19.8.1': + resolution: + { + integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A== + } + engines: { node: '>=v18' } + + '@commitlint/load@20.0.0': + resolution: + { + integrity: sha512-WiNKO9fDPlLY90Rruw2HqHKcghrmj5+kMDJ4GcTlX1weL8K07Q6b27C179DxnsrjGCRAKVwFKyzxV4x+xDY28Q== + } + engines: { node: '>=v18' } + + '@commitlint/message@19.8.1': + resolution: + { + integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg== + } + engines: { node: '>=v18' } + + '@commitlint/parse@19.8.1': + resolution: + { + integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw== + } + engines: { node: '>=v18' } + + '@commitlint/read@19.8.1': + resolution: + { + integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ== + } + engines: { node: '>=v18' } + + '@commitlint/resolve-extends@19.8.1': + resolution: + { + integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg== + } + engines: { node: '>=v18' } + + '@commitlint/resolve-extends@20.0.0': + resolution: + { + integrity: sha512-BA4vva1hY8y0/Hl80YDhe9TJZpRFMsUYzVxvwTLPTEBotbGx/gS49JlVvtF1tOCKODQp7pS7CbxCpiceBgp3Dg== + } + engines: { node: '>=v18' } + + '@commitlint/rules@19.8.1': + resolution: + { + integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw== + } + engines: { node: '>=v18' } + + '@commitlint/to-lines@19.8.1': + resolution: + { + integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg== + } + engines: { node: '>=v18' } + + '@commitlint/top-level@19.8.1': + resolution: + { + integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw== + } + engines: { node: '>=v18' } + + '@commitlint/types@19.8.1': + resolution: + { + integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw== + } + engines: { node: '>=v18' } + + '@commitlint/types@20.0.0': + resolution: + { + integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA== + } + engines: { node: '>=v18' } + + '@csstools/css-parser-algorithms@3.0.5': + resolution: + { + integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + } + engines: { node: '>=18' } + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: + { + integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== + } + engines: { node: '>=18' } + + '@csstools/media-query-list-parser@4.0.3': + resolution: + { + integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== + } + engines: { node: '>=18' } + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/selector-specificity@5.0.0': + resolution: + { + integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== + } + engines: { node: '>=18' } + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@ctrl/tinycolor@3.6.1': + resolution: + { + integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + } + engines: { node: '>=10' } + + '@dual-bundle/import-meta-resolve@4.2.1': + resolution: + { + integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg== + } + + '@element-plus/icons-vue@2.3.2': + resolution: + { + integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A== + } + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.25.10': + resolution: + { + integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw== + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.10': + resolution: + { + integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.10': + resolution: + { + integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w== + } + engines: { node: '>=18' } + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.10': + resolution: + { + integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg== + } + engines: { node: '>=18' } + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.10': + resolution: + { + integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.10': + resolution: + { + integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg== + } + engines: { node: '>=18' } + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.10': + resolution: + { + integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.10': + resolution: + { + integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.10': + resolution: + { + integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.10': + resolution: + { + integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg== + } + engines: { node: '>=18' } + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.10': + resolution: + { + integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ== + } + engines: { node: '>=18' } + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.10': + resolution: + { + integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg== + } + engines: { node: '>=18' } + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.10': + resolution: + { + integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA== + } + engines: { node: '>=18' } + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.10': + resolution: + { + integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA== + } + engines: { node: '>=18' } + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.10': + resolution: + { + integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA== + } + engines: { node: '>=18' } + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.10': + resolution: + { + integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew== + } + engines: { node: '>=18' } + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.10': + resolution: + { + integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA== + } + engines: { node: '>=18' } + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.10': + resolution: + { + integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.10': + resolution: + { + integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig== + } + engines: { node: '>=18' } + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.10': + resolution: + { + integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.10': + resolution: + { + integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw== + } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.10': + resolution: + { + integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.10': + resolution: + { + integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ== + } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.10': + resolution: + { + integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw== + } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.10': + resolution: + { + integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw== + } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.10': + resolution: + { + integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw== + } + engines: { node: '>=18' } + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: + { + integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + '@eslint/config-array@0.21.0': + resolution: + { + integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/config-helpers@0.3.1': + resolution: + { + integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/core@0.15.2': + resolution: + { + integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/eslintrc@3.3.1': + resolution: + { + integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/js@9.36.0': + resolution: + { + integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/object-schema@2.1.6': + resolution: + { + integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/plugin-kit@0.3.5': + resolution: + { + integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@floating-ui/core@1.7.3': + resolution: + { + integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== + } + + '@floating-ui/dom@1.7.4': + resolution: + { + integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA== + } + + '@floating-ui/utils@0.2.10': + resolution: + { + integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== + } + + '@humanfs/core@0.19.1': + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + } + engines: { node: '>=18.18.0' } + + '@humanfs/node@0.16.7': + resolution: + { + integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== + } + engines: { node: '>=18.18.0' } + + '@humanwhocodes/module-importer@1.0.1': + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + } + engines: { node: '>=12.22' } + + '@humanwhocodes/retry@0.4.3': + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + } + engines: { node: '>=18.18' } + + '@iconify/types@2.0.0': + resolution: + { + integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + } + + '@iconify/vue@5.0.0': + resolution: + { + integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg== + } + peerDependencies: + vue: '>=3' + + '@intlify/core-base@9.14.5': + resolution: + { + integrity: sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA== + } + engines: { node: '>= 16' } + + '@intlify/message-compiler@9.14.5': + resolution: + { + integrity: sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ== + } + engines: { node: '>= 16' } + + '@intlify/shared@9.14.5': + resolution: + { + integrity: sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ== + } + engines: { node: '>= 16' } + + '@isaacs/fs-minipass@4.0.1': + resolution: + { + integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + } + engines: { node: '>=18.0.0' } + + '@jridgewell/gen-mapping@0.3.13': + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + } + + '@jridgewell/remapping@2.3.5': + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + } + + '@jridgewell/resolve-uri@3.1.2': + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + } + engines: { node: '>=6.0.0' } + + '@jridgewell/source-map@0.3.11': + resolution: + { + integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + } + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + } + + '@jridgewell/trace-mapping@0.3.31': + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + } + + '@keyv/bigmap@1.0.2': + resolution: + { + integrity: sha512-KR03xkEZlAZNF4IxXgVXb+uNIVNvwdh8UwI0cnc7WI6a+aQcDp8GL80qVfeB4E5NpsKJzou5jU0r6yLSSbMOtA== + } + engines: { node: '>= 18' } + + '@keyv/serialize@1.1.1': + resolution: + { + integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA== + } + + '@nodelib/fs.scandir@2.1.5': + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + } + engines: { node: '>= 8' } + + '@nodelib/fs.stat@2.0.5': + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + } + engines: { node: '>= 8' } + + '@nodelib/fs.walk@1.2.8': + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + } + engines: { node: '>= 8' } + + '@parcel/watcher-android-arm64@2.5.1': + resolution: + { + integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: + { + integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: + { + integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: + { + integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: + { + integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + } + engines: { node: '>= 10.0.0' } + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: + { + integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + } + engines: { node: '>= 10.0.0' } + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: + { + integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: + { + integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: + { + integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: + { + integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: + { + integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + } + engines: { node: '>= 10.0.0' } + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: + { + integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + } + engines: { node: '>= 10.0.0' } + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: + { + integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + } + engines: { node: '>= 10.0.0' } + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: + { + integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + } + engines: { node: '>= 10.0.0' } + + '@pkgr/core@0.2.9': + resolution: + { + integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + + '@polka/url@1.0.0-next.29': + resolution: + { + integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== + } + + '@rolldown/pluginutils@1.0.0-beta.29': + resolution: + { + integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q== + } + + '@rollup/pluginutils@5.3.0': + resolution: + { + integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== + } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.52.3': + resolution: + { + integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw== + } + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.3': + resolution: + { + integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw== + } + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.3': + resolution: + { + integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg== + } + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.3': + resolution: + { + integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A== + } + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.3': + resolution: + { + integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ== + } + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.3': + resolution: + { + integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A== + } + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.3': + resolution: + { + integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA== + } + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.52.3': + resolution: + { + integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA== + } + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.52.3': + resolution: + { + integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ== + } + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.52.3': + resolution: + { + integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw== + } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.52.3': + resolution: + { + integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg== + } + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-gnu@4.52.3': + resolution: + { + integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw== + } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.52.3': + resolution: + { + integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg== + } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.52.3': + resolution: + { + integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg== + } + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.52.3': + resolution: + { + integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg== + } + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.52.3': + resolution: + { + integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA== + } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.52.3': + resolution: + { + integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw== + } + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openharmony-arm64@4.52.3': + resolution: + { + integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA== + } + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.3': + resolution: + { + integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA== + } + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.3': + resolution: + { + integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g== + } + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.3': + resolution: + { + integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ== + } + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.3': + resolution: + { + integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA== + } + cpu: [x64] + os: [win32] + + '@sec-ant/readable-stream@0.4.1': + resolution: + { + integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + } + + '@sindresorhus/merge-streams@4.0.0': + resolution: + { + integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + } + engines: { node: '>=18' } + + '@sxzz/popperjs-es@2.11.7': + resolution: + { + integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== + } + + '@tailwindcss/node@4.1.14': + resolution: + { + integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw== + } + + '@tailwindcss/oxide-android-arm64@4.1.14': + resolution: + { + integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ== + } + engines: { node: '>= 10' } + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.14': + resolution: + { + integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA== + } + engines: { node: '>= 10' } + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.14': + resolution: + { + integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw== + } + engines: { node: '>= 10' } + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.14': + resolution: + { + integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw== + } + engines: { node: '>= 10' } + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': + resolution: + { + integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw== + } + engines: { node: '>= 10' } + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': + resolution: + { + integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w== + } + engines: { node: '>= 10' } + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.14': + resolution: + { + integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ== + } + engines: { node: '>= 10' } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.14': + resolution: + { + integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg== + } + engines: { node: '>= 10' } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.1.14': + resolution: + { + integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q== + } + engines: { node: '>= 10' } + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.1.14': + resolution: + { + integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ== + } + engines: { node: '>=14.0.0' } + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': + resolution: + { + integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA== + } + engines: { node: '>= 10' } + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.14': + resolution: + { + integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA== + } + engines: { node: '>= 10' } + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.14': + resolution: + { + integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw== + } + engines: { node: '>= 10' } + + '@tailwindcss/vite@4.1.14': + resolution: + { + integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA== + } + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + '@transloadit/prettier-bytes@0.0.7': + resolution: + { + integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA== + } + + '@types/conventional-commits-parser@5.0.1': + resolution: + { + integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ== + } + + '@types/estree@1.0.8': + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + } + + '@types/event-emitter@0.3.5': + resolution: + { + integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ== + } + + '@types/json-schema@7.0.15': + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + } + + '@types/lodash-es@4.17.12': + resolution: + { + integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + } + + '@types/lodash@4.17.20': + resolution: + { + integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA== + } + + '@types/node@24.8.1': + resolution: + { + integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q== + } + + '@types/sortablejs@1.15.8': + resolution: + { + integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg== + } + + '@types/web-bluetooth@0.0.16': + resolution: + { + integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== + } + + '@types/web-bluetooth@0.0.21': + resolution: + { + integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== + } + + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: + { + integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + '@typescript-eslint/parser': ^8.44.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.44.1': + resolution: + { + integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.44.1': + resolution: + { + integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.44.1': + resolution: + { + integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: + { + integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.44.1': + resolution: + { + integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.44.1': + resolution: + { + integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/typescript-estree@8.44.1': + resolution: + { + integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.44.1': + resolution: + { + integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.44.1': + resolution: + { + integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@uppy/companion-client@2.2.2': + resolution: + { + integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og== + } + + '@uppy/core@2.3.4': + resolution: + { + integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ== + } + + '@uppy/store-default@2.1.1': + resolution: + { + integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ== + } + + '@uppy/utils@4.1.3': + resolution: + { + integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw== + } + + '@uppy/xhr-upload@2.1.3': + resolution: + { + integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ== + } + peerDependencies: + '@uppy/core': ^2.3.3 + + '@vitejs/plugin-vue@6.0.1': + resolution: + { + integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw== + } + engines: { node: ^20.19.0 || >=22.12.0 } + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.23': + resolution: + { + integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ== + } + + '@volar/source-map@2.4.23': + resolution: + { + integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q== + } + + '@volar/typescript@2.4.23': + resolution: + { + integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag== + } + + '@vue/babel-helper-vue-transform-on@1.5.0': + resolution: + { + integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA== + } + + '@vue/babel-plugin-jsx@1.5.0': + resolution: + { + integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw== + } + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.5.0': + resolution: + { + integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w== + } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.22': + resolution: + { + integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ== + } + + '@vue/compiler-dom@3.5.22': + resolution: + { + integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA== + } + + '@vue/compiler-sfc@3.5.22': + resolution: + { + integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ== + } + + '@vue/compiler-ssr@3.5.22': + resolution: + { + integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww== + } + + '@vue/compiler-vue2@2.7.16': + resolution: + { + integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== + } + + '@vue/devtools-api@6.6.4': + resolution: + { + integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== + } + + '@vue/devtools-api@7.7.7': + resolution: + { + integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg== + } + + '@vue/devtools-core@7.7.7': + resolution: + { + integrity: sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ== + } + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.7.7': + resolution: + { + integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA== + } + + '@vue/devtools-shared@7.7.7': + resolution: + { + integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw== + } + + '@vue/language-core@2.1.10': + resolution: + { + integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ== + } + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.22': + resolution: + { + integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A== + } + + '@vue/runtime-core@3.5.22': + resolution: + { + integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ== + } + + '@vue/runtime-dom@3.5.22': + resolution: + { + integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww== + } + + '@vue/server-renderer@3.5.22': + resolution: + { + integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ== + } + peerDependencies: + vue: 3.5.22 + + '@vue/shared@3.5.22': + resolution: + { + integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w== + } + + '@vueuse/core@13.9.0': + resolution: + { + integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA== + } + peerDependencies: + vue: ^3.5.0 + + '@vueuse/core@9.13.0': + resolution: + { + integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== + } + + '@vueuse/metadata@13.9.0': + resolution: + { + integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg== + } + + '@vueuse/metadata@9.13.0': + resolution: + { + integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== + } + + '@vueuse/shared@13.9.0': + resolution: + { + integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g== + } + peerDependencies: + vue: ^3.5.0 + + '@vueuse/shared@9.13.0': + resolution: + { + integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== + } + + '@wangeditor/basic-modules@1.1.7': + resolution: + { + integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg== + } + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/code-highlight@1.0.3': + resolution: + { + integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw== + } + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/core@1.1.19': + resolution: + { + integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q== + } + peerDependencies: + '@uppy/core': ^2.1.1 + '@uppy/xhr-upload': ^2.0.3 + dom7: ^3.0.0 + is-hotkey: ^0.2.0 + lodash.camelcase: ^4.3.0 + lodash.clonedeep: ^4.5.0 + lodash.debounce: ^4.0.8 + lodash.foreach: ^4.5.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + lodash.toarray: ^4.4.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/editor-for-vue@5.1.12': + resolution: + { + integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ== + } + peerDependencies: + '@wangeditor/editor': '>=5.1.0' + vue: ^3.0.5 + + '@wangeditor/editor@5.1.23': + resolution: + { + integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ== + } + + '@wangeditor/list-module@1.0.5': + resolution: + { + integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ== + } + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/table-module@1.1.4': + resolution: + { + integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w== + } + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/upload-image-module@1.0.2': + resolution: + { + integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA== + } + peerDependencies: + '@uppy/core': ^2.0.3 + '@uppy/xhr-upload': ^2.0.3 + '@wangeditor/basic-modules': 1.x + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.foreach: ^4.5.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/video-module@1.1.4': + resolution: + { + integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg== + } + peerDependencies: + '@uppy/core': ^2.1.4 + '@uppy/xhr-upload': ^2.0.7 + '@wangeditor/core': 1.x + dom7: ^3.0.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + JSONStream@1.3.5: + resolution: + { + integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + } + hasBin: true + + acorn-jsx@5.3.2: + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + } + engines: { node: '>=0.4.0' } + hasBin: true + + adler-32@1.3.1: + resolution: + { + integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A== + } + engines: { node: '>=0.8' } + + ajv@6.12.6: + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + } + + ajv@8.17.1: + resolution: + { + integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + } + + alien-signals@0.2.2: + resolution: + { + integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A== + } + + ansi-escapes@4.3.2: + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + } + engines: { node: '>=8' } + + ansi-escapes@7.1.1: + resolution: + { + integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q== + } + engines: { node: '>=18' } + + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + } + engines: { node: '>=8' } + + ansi-regex@6.2.2: + resolution: + { + integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + } + engines: { node: '>=12' } + + ansi-styles@3.2.1: + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + } + engines: { node: '>=4' } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + } + engines: { node: '>=8' } + + ansi-styles@6.2.3: + resolution: + { + integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + } + engines: { node: '>=12' } + + anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + } + engines: { node: '>= 8' } + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + } + + array-ify@1.0.0: + resolution: + { + integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + } + + array-union@2.1.0: + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + } + engines: { node: '>=8' } + + astral-regex@2.0.0: + resolution: + { + integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + } + engines: { node: '>=8' } + + async-validator@4.2.5: + resolution: + { + integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + } + + asynckit@0.4.0: + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + } + + at-least-node@1.0.0: + resolution: + { + integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + } + engines: { node: '>= 4.0.0' } + + axios@1.12.2: + resolution: + { + integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== + } + + balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + } + + balanced-match@2.0.0: + resolution: + { + integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + } + + base64-js@1.5.1: + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + } + + baseline-browser-mapping@2.8.8: + resolution: + { + integrity: sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ== + } + hasBin: true + + binary-extensions@2.3.0: + resolution: + { + integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + } + engines: { node: '>=8' } + + birpc@2.6.1: + resolution: + { + integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ== + } + + bl@4.1.0: + resolution: + { + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + } + + boolbase@1.0.0: + resolution: + { + integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + } + + brace-expansion@1.1.12: + resolution: + { + integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + } + + brace-expansion@2.0.2: + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + } + engines: { node: '>=8' } + + browserslist@4.26.2: + resolution: + { + integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + + buffer-from@1.1.2: + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + } + + buffer@5.7.1: + resolution: + { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + } + + bundle-name@4.1.0: + resolution: + { + integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + } + engines: { node: '>=18' } + + cacheable@2.0.2: + resolution: + { + integrity: sha512-dWjhLx8RWnPsAWVKwW/wI6OJpQ/hSVb1qS0NUif8TR9vRiSwci7Gey8x04kRU9iAF+Rnbtex5Kjjfg/aB5w8Pg== + } + + cachedir@2.3.0: + resolution: + { + integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + } + engines: { node: '>=6' } + + call-bind-apply-helpers@1.0.2: + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + } + engines: { node: '>= 0.4' } + + callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + } + engines: { node: '>=6' } + + caniuse-lite@1.0.30001745: + resolution: + { + integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ== + } + + cfb@1.2.2: + resolution: + { + integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA== + } + engines: { node: '>=0.8' } + + chalk@2.4.2: + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + } + engines: { node: '>=4' } + + chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + } + engines: { node: '>=10' } + + chalk@5.6.2: + resolution: + { + integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + chardet@0.7.0: + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + } + + chokidar@3.6.0: + resolution: + { + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + } + engines: { node: '>= 8.10.0' } + + chokidar@4.0.3: + resolution: + { + integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + } + engines: { node: '>= 14.16.0' } + + chownr@3.0.0: + resolution: + { + integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + } + engines: { node: '>=18' } + + cli-cursor@3.1.0: + resolution: + { + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + } + engines: { node: '>=8' } + + cli-cursor@5.0.0: + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + } + engines: { node: '>=18' } + + cli-spinners@2.9.2: + resolution: + { + integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + } + engines: { node: '>=6' } + + cli-truncate@4.0.0: + resolution: + { + integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + } + engines: { node: '>=18' } + + cli-width@3.0.0: + resolution: + { + integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + } + engines: { node: '>= 10' } + + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + } + engines: { node: '>=12' } + + clone@1.0.4: + resolution: + { + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + } + engines: { node: '>=0.8' } + + codepage@1.15.0: + resolution: + { + integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== + } + engines: { node: '>=0.8' } + + color-convert@1.9.3: + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + } + + color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + } + engines: { node: '>=7.0.0' } + + color-name@1.1.3: + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + } + + color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + } + + colord@2.9.3: + resolution: + { + integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + } + + colorette@2.0.20: + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + } + + combined-stream@1.0.8: + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + } + engines: { node: '>= 0.8' } + + commander@13.1.0: + resolution: + { + integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + } + engines: { node: '>=18' } + + commander@2.20.3: + resolution: + { + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + } + + commitizen@4.3.1: + resolution: + { + integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw== + } + engines: { node: '>= 12' } + hasBin: true + + compare-func@2.0.0: + resolution: + { + integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + } + + compute-scroll-into-view@1.0.20: + resolution: + { + integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + } + + concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + } + + confbox@0.1.8: + resolution: + { + integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + } + + confbox@0.2.2: + resolution: + { + integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + } + + conventional-changelog-angular@7.0.0: + resolution: + { + integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + } + engines: { node: '>=16' } + + conventional-changelog-conventionalcommits@7.0.2: + resolution: + { + integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== + } + engines: { node: '>=16' } + + conventional-commit-types@3.0.0: + resolution: + { + integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== + } + + conventional-commits-parser@5.0.0: + resolution: + { + integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + } + engines: { node: '>=16' } + hasBin: true + + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + } + + copy-anything@3.0.5: + resolution: + { + integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + } + engines: { node: '>=12.13' } + + core-js@3.45.1: + resolution: + { + integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg== + } + + cosmiconfig-typescript-loader@6.1.0: + resolution: + { + integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g== + } + engines: { node: '>=v18' } + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + } + engines: { node: '>=14' } + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: + { + integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + } + engines: { node: '>=0.8' } + hasBin: true + + cross-spawn@7.0.6: + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + } + engines: { node: '>= 8' } + + crypto-js@4.2.0: + resolution: + { + integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + } + + css-functions-list@3.2.3: + resolution: + { + integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA== + } + engines: { node: '>=12 || >=16' } + + css-tree@3.1.0: + resolution: + { + integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w== + } + engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + + cssesc@3.0.0: + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + } + engines: { node: '>=4' } + hasBin: true + + csstype@3.1.3: + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + } + + cz-conventional-changelog@3.3.0: + resolution: + { + integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== + } + engines: { node: '>= 10' } + + cz-git@1.12.0: + resolution: + { + integrity: sha512-LaZ+8whPPUOo6Y0Zy4nIbf6JOleV3ejp41sT6N4RPKiKKA+ICWf4ueeIlxIO8b6JtdlDxRzHH/EcRji07nDxcg== + } + engines: { node: '>=v12.20.0' } + + d@1.0.2: + resolution: + { + integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + } + engines: { node: '>=0.12' } + + danmu.js@1.1.13: + resolution: + { + integrity: sha512-knFd0/cB2HA4FFWiA7eB2suc5vCvoHdqio33FyyCSfP7C+1A+zQcTvnvwfxaZhrxsGj4qaQI2I8XiTqedRaVmg== + } + + dargs@8.1.0: + resolution: + { + integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== + } + engines: { node: '>=12' } + + dayjs@1.11.18: + resolution: + { + integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA== + } + + de-indent@1.0.2: + resolution: + { + integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + } + + debug@4.4.3: + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@0.7.0: + resolution: + { + integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + } + + deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + } + + deep-pick-omit@1.2.1: + resolution: + { + integrity: sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw== + } + + default-browser-id@5.0.0: + resolution: + { + integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + } + engines: { node: '>=18' } + + default-browser@5.2.1: + resolution: + { + integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + } + engines: { node: '>=18' } + + defaults@1.0.4: + resolution: + { + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + } + + define-lazy-prop@2.0.0: + resolution: + { + integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + } + engines: { node: '>=8' } + + define-lazy-prop@3.0.0: + resolution: + { + integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + } + engines: { node: '>=12' } + + defu@6.1.4: + resolution: + { + integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + } + + delayed-stream@1.0.0: + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + } + engines: { node: '>=0.4.0' } + + delegate@3.2.0: + resolution: + { + integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + } + + destr@2.0.5: + resolution: + { + integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + } + + detect-file@1.0.0: + resolution: + { + integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + } + engines: { node: '>=0.10.0' } + + detect-indent@6.1.0: + resolution: + { + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + } + engines: { node: '>=8' } + + detect-libc@1.0.3: + resolution: + { + integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + } + engines: { node: '>=0.10' } + hasBin: true + + detect-libc@2.1.2: + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + } + engines: { node: '>=8' } + + dir-glob@3.0.1: + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + } + engines: { node: '>=8' } + + dom-serializer@2.0.0: + resolution: + { + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + } + + dom7@3.0.0: + resolution: + { + integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g== + } + + domelementtype@2.3.0: + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + } + + domhandler@5.0.3: + resolution: + { + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + } + engines: { node: '>= 4' } + + domutils@3.2.2: + resolution: + { + integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + } + + dot-prop@5.3.0: + resolution: + { + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + } + engines: { node: '>=8' } + + downloadjs@1.4.7: + resolution: + { + integrity: sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q== + } + + dunder-proto@1.0.1: + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + } + engines: { node: '>= 0.4' } + + echarts@6.0.0: + resolution: + { + integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ== + } + + electron-to-chromium@1.5.227: + resolution: + { + integrity: sha512-ITxuoPfJu3lsNWUi2lBM2PaBPYgH3uqmxut5vmBxgYvyI4AlJ6P3Cai1O76mOrkJCBzq0IxWg/NtqOrpu/0gKA== + } + + element-plus@2.11.4: + resolution: + { + integrity: sha512-sLq+Ypd0cIVilv8wGGMEGvzRVBBsRpJjnAS5PsI/1JU1COZXqzH3N1UYMUc/HCdvdjf6dfrBy80Sj7KcACsT7w== + } + peerDependencies: + vue: ^3.2.0 + + emoji-regex@10.5.0: + resolution: + { + integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg== + } + + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + } + + enhanced-resolve@5.18.3: + resolution: + { + integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== + } + engines: { node: '>=10.13.0' } + + entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + } + engines: { node: '>=0.12' } + + env-paths@2.2.1: + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + } + engines: { node: '>=6' } + + environment@1.1.0: + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + } + engines: { node: '>=18' } + + error-ex@1.3.4: + resolution: + { + integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + } + + error-stack-parser-es@0.1.5: + resolution: + { + integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg== + } + + es-define-property@1.0.1: + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + } + engines: { node: '>= 0.4' } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + } + engines: { node: '>= 0.4' } + + es-module-lexer@1.7.0: + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + } + + es-object-atoms@1.1.1: + resolution: + { + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + } + engines: { node: '>= 0.4' } + + es-set-tostringtag@2.1.0: + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + } + engines: { node: '>= 0.4' } + + es5-ext@0.10.64: + resolution: + { + integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + } + engines: { node: '>=0.10' } + + es6-iterator@2.0.3: + resolution: + { + integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + } + + es6-symbol@3.1.4: + resolution: + { + integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + } + engines: { node: '>=0.12' } + + esbuild@0.25.10: + resolution: + { + integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ== + } + engines: { node: '>=18' } + hasBin: true + + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + } + engines: { node: '>=6' } + + escape-html@1.0.3: + resolution: + { + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + } + + escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + } + engines: { node: '>=0.8.0' } + + escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + } + engines: { node: '>=10' } + + escape-string-regexp@5.0.0: + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + } + engines: { node: '>=12' } + + eslint-config-prettier@9.1.2: + resolution: + { + integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== + } + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.4: + resolution: + { + integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.33.0: + resolution: + { + integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw== + } + engines: { node: ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: + { + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-scope@8.4.0: + resolution: + { + integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@4.2.1: + resolution: + { + integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint@9.36.0: + resolution: + { + integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esniff@2.0.1: + resolution: + { + integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + } + engines: { node: '>=0.10' } + + espree@10.4.0: + resolution: + { + integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + espree@9.6.1: + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + esquery@1.6.0: + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + } + engines: { node: '>=0.10' } + + esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + } + engines: { node: '>=4.0' } + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + } + engines: { node: '>=4.0' } + + estree-walker@2.0.2: + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + } + + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + } + + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + } + engines: { node: '>=0.10.0' } + + event-emitter@0.3.5: + resolution: + { + integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + } + + eventemitter3@4.0.7: + resolution: + { + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + } + + eventemitter3@5.0.1: + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + } + + execa@8.0.1: + resolution: + { + integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + } + engines: { node: '>=16.17' } + + execa@9.6.0: + resolution: + { + integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw== + } + engines: { node: ^18.19.0 || >=20.5.0 } + + expand-tilde@2.0.2: + resolution: + { + integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + } + engines: { node: '>=0.10.0' } + + exsolve@1.0.7: + resolution: + { + integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw== + } + + ext@1.7.0: + resolution: + { + integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + } + + external-editor@3.1.0: + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + } + engines: { node: '>=4' } + + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + } + + fast-diff@1.3.0: + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + } + + fast-glob@3.3.3: + resolution: + { + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + } + engines: { node: '>=8.6.0' } + + fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + } + + fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + } + + fast-uri@3.1.0: + resolution: + { + integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + } + + fastest-levenshtein@1.0.16: + resolution: + { + integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + } + engines: { node: '>= 4.9.1' } + + fastq@1.19.1: + resolution: + { + integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + } + + fdir@6.5.0: + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + } + engines: { node: '>=12.0.0' } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@3.2.0: + resolution: + { + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + } + engines: { node: '>=8' } + + figures@6.1.0: + resolution: + { + integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + } + engines: { node: '>=18' } + + file-entry-cache@10.1.4: + resolution: + { + integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA== + } + + file-entry-cache@8.0.0: + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + } + engines: { node: '>=16.0.0' } + + file-saver@2.0.5: + resolution: + { + integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + } + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + } + engines: { node: '>=8' } + + find-node-modules@2.1.3: + resolution: + { + integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + } + + find-root@1.1.0: + resolution: + { + integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + } + + find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + } + engines: { node: '>=10' } + + find-up@7.0.0: + resolution: + { + integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + } + engines: { node: '>=18' } + + findup-sync@4.0.0: + resolution: + { + integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + } + engines: { node: '>= 8' } + + flat-cache@4.0.1: + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + } + engines: { node: '>=16' } + + flat-cache@6.1.14: + resolution: + { + integrity: sha512-ExZSCSV9e7v/Zt7RzCbX57lY2dnPdxzU/h3UE6WJ6NtEMfwBd8jmi1n4otDEUfz+T/R+zxrFDpICFdjhD3H/zw== + } + + flatted@3.3.3: + resolution: + { + integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + } + + follow-redirects@1.15.11: + resolution: + { + integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + } + engines: { node: '>=4.0' } + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: + { + integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== + } + engines: { node: '>= 6' } + + frac@1.1.2: + resolution: + { + integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== + } + engines: { node: '>=0.8' } + + fs-extra@10.1.0: + resolution: + { + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + } + engines: { node: '>=12' } + + fs-extra@11.3.2: + resolution: + { + integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== + } + engines: { node: '>=14.14' } + + fs-extra@9.1.0: + resolution: + { + integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + } + engines: { node: '>=10' } + + fs.realpath@1.0.0: + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + } + + gensync@1.0.0-beta.2: + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + } + engines: { node: '>=6.9.0' } + + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + } + engines: { node: 6.* || 8.* || >= 10.* } + + get-east-asian-width@1.4.0: + resolution: + { + integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== + } + engines: { node: '>=18' } + + get-intrinsic@1.3.0: + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + } + engines: { node: '>= 0.4' } + + get-proto@1.0.1: + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + } + engines: { node: '>= 0.4' } + + get-stream@8.0.1: + resolution: + { + integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + } + engines: { node: '>=16' } + + get-stream@9.0.1: + resolution: + { + integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + } + engines: { node: '>=18' } + + get-tsconfig@4.10.1: + resolution: + { + integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + } + + git-raw-commits@4.0.0: + resolution: + { + integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== + } + engines: { node: '>=16' } + hasBin: true + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + } + engines: { node: '>= 6' } + + glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + } + engines: { node: '>=10.13.0' } + + glob@7.2.3: + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + } + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: + { + integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + } + engines: { node: '>=18' } + + global-modules@1.0.0: + resolution: + { + integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + } + engines: { node: '>=0.10.0' } + + global-modules@2.0.0: + resolution: + { + integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + } + engines: { node: '>=6' } + + global-prefix@1.0.2: + resolution: + { + integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + } + engines: { node: '>=0.10.0' } + + global-prefix@3.0.0: + resolution: + { + integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + } + engines: { node: '>=6' } + + globals@13.24.0: + resolution: + { + integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + } + engines: { node: '>=8' } + + globals@14.0.0: + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + } + engines: { node: '>=18' } + + globals@15.15.0: + resolution: + { + integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + } + engines: { node: '>=18' } + + globby@11.1.0: + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + } + engines: { node: '>=10' } + + globjoin@0.1.4: + resolution: + { + integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== + } + + gopd@1.2.0: + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + } + engines: { node: '>= 0.4' } + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + } + + graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + } + + has-flag@3.0.0: + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + } + engines: { node: '>=4' } + + has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + } + engines: { node: '>=8' } + + has-symbols@1.1.0: + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + } + engines: { node: '>= 0.4' } + + has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + } + engines: { node: '>= 0.4' } + + hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + } + engines: { node: '>= 0.4' } + + he@1.2.0: + resolution: + { + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + } + hasBin: true + + highlight.js@11.11.1: + resolution: + { + integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== + } + engines: { node: '>=12.0.0' } + + homedir-polyfill@1.0.3: + resolution: + { + integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + } + engines: { node: '>=0.10.0' } + + hookable@5.5.3: + resolution: + { + integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + } + + hookified@1.12.1: + resolution: + { + integrity: sha512-xnKGl+iMIlhrZmGHB729MqlmPoWBznctSQTYCpFKqNsCgimJQmithcW0xSQMMFzYnV2iKUh25alswn6epgxS0Q== + } + + html-tags@3.3.1: + resolution: + { + integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + } + engines: { node: '>=8' } + + html-void-elements@2.0.1: + resolution: + { + integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + } + + htmlparser2@8.0.2: + resolution: + { + integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + } + + human-signals@5.0.0: + resolution: + { + integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + } + engines: { node: '>=16.17.0' } + + human-signals@8.0.1: + resolution: + { + integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== + } + engines: { node: '>=18.18.0' } + + husky@9.1.7: + resolution: + { + integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== + } + engines: { node: '>=18' } + hasBin: true + + i18next@20.6.1: + resolution: + { + integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A== + } + + iconv-lite@0.4.24: + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + } + engines: { node: '>=0.10.0' } + + ieee754@1.2.1: + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + } + + ignore@5.3.2: + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + } + engines: { node: '>= 4' } + + ignore@7.0.5: + resolution: + { + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + } + engines: { node: '>= 4' } + + immer@9.0.21: + resolution: + { + integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + } + + immutable@5.1.3: + resolution: + { + integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg== + } + + import-fresh@3.3.1: + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + } + engines: { node: '>=6' } + + import-meta-resolve@4.2.0: + resolution: + { + integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg== + } + + imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + } + engines: { node: '>=0.8.19' } + + inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + } + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + } + + ini@1.3.8: + resolution: + { + integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + } + + ini@4.1.1: + resolution: + { + integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + inquirer@8.2.5: + resolution: + { + integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + } + engines: { node: '>=12.0.0' } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + } + + is-binary-path@2.1.0: + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + } + engines: { node: '>=8' } + + is-docker@2.2.1: + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + } + engines: { node: '>=8' } + hasBin: true + + is-docker@3.0.0: + resolution: + { + integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + hasBin: true + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + } + engines: { node: '>=0.10.0' } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + } + engines: { node: '>=8' } + + is-fullwidth-code-point@4.0.0: + resolution: + { + integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + } + engines: { node: '>=12' } + + is-fullwidth-code-point@5.1.0: + resolution: + { + integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== + } + engines: { node: '>=18' } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + } + engines: { node: '>=0.10.0' } + + is-hotkey@0.2.0: + resolution: + { + integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== + } + + is-inside-container@1.0.0: + resolution: + { + integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + } + engines: { node: '>=14.16' } + hasBin: true + + is-interactive@1.0.0: + resolution: + { + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + } + engines: { node: '>=8' } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + } + engines: { node: '>=0.12.0' } + + is-obj@2.0.0: + resolution: + { + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + } + engines: { node: '>=8' } + + is-plain-obj@4.1.0: + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + } + engines: { node: '>=12' } + + is-plain-object@5.0.0: + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + } + engines: { node: '>=0.10.0' } + + is-stream@3.0.0: + resolution: + { + integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + is-stream@4.0.1: + resolution: + { + integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + } + engines: { node: '>=18' } + + is-text-path@2.0.0: + resolution: + { + integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + } + engines: { node: '>=8' } + + is-unicode-supported@0.1.0: + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + } + engines: { node: '>=10' } + + is-unicode-supported@2.1.0: + resolution: + { + integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + } + engines: { node: '>=18' } + + is-url@1.2.4: + resolution: + { + integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + } + + is-utf8@0.2.1: + resolution: + { + integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + } + + is-what@4.1.16: + resolution: + { + integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + } + engines: { node: '>=12.13' } + + is-windows@1.0.2: + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + } + engines: { node: '>=0.10.0' } + + is-wsl@2.2.0: + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + } + engines: { node: '>=8' } + + is-wsl@3.1.0: + resolution: + { + integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + } + engines: { node: '>=16' } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + } + + jiti@2.6.0: + resolution: + { + integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ== + } + hasBin: true + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + } + + js-tokens@9.0.1: + resolution: + { + integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + } + + js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + } + hasBin: true + + jsesc@3.1.0: + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + } + engines: { node: '>=6' } + hasBin: true + + json-buffer@3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + } + + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + } + + json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + } + + json-schema-traverse@1.0.0: + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + } + + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + } + engines: { node: '>=6' } + hasBin: true + + jsonfile@6.2.0: + resolution: + { + integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + } + + jsonparse@1.3.1: + resolution: + { + integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + } + engines: { '0': node >= 0.2.0 } + + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + } + + keyv@5.5.3: + resolution: + { + integrity: sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A== + } + + kind-of@6.0.3: + resolution: + { + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + } + engines: { node: '>=0.10.0' } + + known-css-properties@0.36.0: + resolution: + { + integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA== + } + + known-css-properties@0.37.0: + resolution: + { + integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ== + } + + kolorist@1.8.0: + resolution: + { + integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + } + + levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + } + engines: { node: '>= 0.8.0' } + + lightningcss-darwin-arm64@1.30.1: + resolution: + { + integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.1: + resolution: + { + integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: + { + integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: + { + integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== + } + engines: { node: '>= 12.0.0' } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.1: + resolution: + { + integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.30.1: + resolution: + { + integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.30.1: + resolution: + { + integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.30.1: + resolution: + { + integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.30.1: + resolution: + { + integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== + } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.1: + resolution: + { + integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== + } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [win32] + + lightningcss@1.30.1: + resolution: + { + integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== + } + engines: { node: '>= 12.0.0' } + + lilconfig@3.1.3: + resolution: + { + integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + } + engines: { node: '>=14' } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + } + + lint-staged@15.5.2: + resolution: + { + integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w== + } + engines: { node: '>=18.12.0' } + hasBin: true + + listr2@8.3.3: + resolution: + { + integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== + } + engines: { node: '>=18.0.0' } + + local-pkg@1.1.2: + resolution: + { + integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A== + } + engines: { node: '>=14' } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + } + engines: { node: '>=10' } + + locate-path@7.2.0: + resolution: + { + integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + lodash-es@4.17.21: + resolution: + { + integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + } + + lodash-unified@1.0.3: + resolution: + { + integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ== + } + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.camelcase@4.3.0: + resolution: + { + integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + } + + lodash.clonedeep@4.5.0: + resolution: + { + integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + } + + lodash.debounce@4.0.8: + resolution: + { + integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + } + + lodash.foreach@4.5.0: + resolution: + { + integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + } + + lodash.isequal@4.5.0: + resolution: + { + integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + } + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isplainobject@4.0.6: + resolution: + { + integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + } + + lodash.kebabcase@4.1.1: + resolution: + { + integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + } + + lodash.map@4.6.0: + resolution: + { + integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + } + + lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + } + + lodash.mergewith@4.6.2: + resolution: + { + integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + } + + lodash.snakecase@4.1.1: + resolution: + { + integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + } + + lodash.startcase@4.4.0: + resolution: + { + integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + } + + lodash.throttle@4.1.1: + resolution: + { + integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + } + + lodash.toarray@4.4.0: + resolution: + { + integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw== + } + + lodash.truncate@4.4.2: + resolution: + { + integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + } + + lodash.uniq@4.5.0: + resolution: + { + integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + } + + lodash.upperfirst@4.3.1: + resolution: + { + integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + } + + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + } + + log-symbols@4.1.0: + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + } + engines: { node: '>=10' } + + log-update@6.1.0: + resolution: + { + integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + } + engines: { node: '>=18' } + + longest@2.0.1: + resolution: + { + integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== + } + engines: { node: '>=0.10.0' } + + lru-cache@5.1.1: + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + } + + magic-string@0.30.19: + resolution: + { + integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== + } + + math-intrinsics@1.1.0: + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + } + engines: { node: '>= 0.4' } + + mathml-tag-names@2.1.3: + resolution: + { + integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + } + + mdn-data@2.12.2: + resolution: + { + integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== + } + + mdn-data@2.24.0: + resolution: + { + integrity: sha512-i97fklrJl03tL1tdRVw0ZfLLvuDsdb6wxL+TrJ+PKkCbLrp2PCu2+OYdCKychIUm19nSM/35S6qz7pJpnXttoA== + } + + memoize-one@6.0.0: + resolution: + { + integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + } + + meow@12.1.1: + resolution: + { + integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + } + engines: { node: '>=16.10' } + + meow@13.2.0: + resolution: + { + integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== + } + engines: { node: '>=18' } + + merge-stream@2.0.0: + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + } + + merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + } + engines: { node: '>= 8' } + + merge@2.1.1: + resolution: + { + integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + } + engines: { node: '>=8.6' } + + mime-db@1.52.0: + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + } + engines: { node: '>= 0.6' } + + mime-match@1.0.2: + resolution: + { + integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg== + } + + mime-types@2.1.35: + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + } + engines: { node: '>= 0.6' } + + mimic-fn@2.1.0: + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + } + engines: { node: '>=6' } + + mimic-fn@4.0.0: + resolution: + { + integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + } + engines: { node: '>=12' } + + mimic-function@5.0.1: + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + } + engines: { node: '>=18' } + + minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + } + + minimatch@9.0.5: + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + } + engines: { node: '>=16 || 14 >=14.17' } + + minimist@1.2.7: + resolution: + { + integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + } + + minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + } + + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + } + engines: { node: '>=16 || 14 >=14.17' } + + minizlib@3.1.0: + resolution: + { + integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== + } + engines: { node: '>= 18' } + + mitt@3.0.1: + resolution: + { + integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + } + + mlly@1.8.0: + resolution: + { + integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== + } + + mrmime@2.0.1: + resolution: + { + integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + } + engines: { node: '>=10' } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + } + + muggle-string@0.4.1: + resolution: + { + integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== + } + + mute-stream@0.0.8: + resolution: + { + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + } + + namespace-emitter@2.0.1: + resolution: + { + integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g== + } + + nanoid@3.3.11: + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + nanoid@5.1.6: + resolution: + { + integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg== + } + engines: { node: ^18 || >=20 } + hasBin: true + + natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + } + + next-tick@1.1.0: + resolution: + { + integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + } + + node-addon-api@7.1.1: + resolution: + { + integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + } + + node-releases@2.0.21: + resolution: + { + integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== + } + + normalize-path@3.0.0: + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + } + engines: { node: '>=0.10.0' } + + normalize-wheel-es@1.2.0: + resolution: + { + integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw== + } + + npm-run-path@5.3.0: + resolution: + { + integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + npm-run-path@6.0.0: + resolution: + { + integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + } + engines: { node: '>=18' } + + nprogress@0.2.0: + resolution: + { + integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + } + + nth-check@2.1.1: + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + } + + ohash@2.0.11: + resolution: + { + integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + } + + once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + } + + onetime@5.1.2: + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + } + engines: { node: '>=6' } + + onetime@6.0.0: + resolution: + { + integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + } + engines: { node: '>=12' } + + onetime@7.0.0: + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + } + engines: { node: '>=18' } + + open@10.2.0: + resolution: + { + integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== + } + engines: { node: '>=18' } + + open@8.4.2: + resolution: + { + integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + } + engines: { node: '>=12' } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + } + engines: { node: '>= 0.8.0' } + + ora@5.4.1: + resolution: + { + integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + } + engines: { node: '>=10' } + + os-tmpdir@1.0.2: + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + } + engines: { node: '>=0.10.0' } + + p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + } + engines: { node: '>=10' } + + p-limit@4.0.0: + resolution: + { + integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + } + engines: { node: '>=10' } + + p-locate@6.0.0: + resolution: + { + integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + } + engines: { node: '>=6' } + + parse-json@5.2.0: + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + } + engines: { node: '>=8' } + + parse-ms@4.0.0: + resolution: + { + integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + } + engines: { node: '>=18' } + + parse-passwd@1.0.0: + resolution: + { + integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + } + engines: { node: '>=0.10.0' } + + path-browserify@1.0.1: + resolution: + { + integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + } + + path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + } + engines: { node: '>=8' } + + path-exists@5.0.0: + resolution: + { + integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + path-is-absolute@1.0.1: + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + } + engines: { node: '>=0.10.0' } + + path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + } + engines: { node: '>=8' } + + path-key@4.0.0: + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + } + engines: { node: '>=12' } + + path-type@4.0.0: + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + } + engines: { node: '>=8' } + + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + } + + perfect-debounce@1.0.0: + resolution: + { + integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + } + + picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + } + engines: { node: '>=8.6' } + + picomatch@4.0.3: + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + } + engines: { node: '>=12' } + + pidtree@0.6.0: + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + } + engines: { node: '>=0.10' } + hasBin: true + + pinia-plugin-persistedstate@4.5.0: + resolution: + { + integrity: sha512-QTkP1xJVyCdr2I2p3AKUZM84/e+IS+HktRxKGAIuDzkyaKKV48mQcYkJFVVDuvTxlI5j6X3oZObpqoVB8JnWpw== + } + peerDependencies: + '@nuxt/kit': '>=3.0.0' + '@pinia/nuxt': '>=0.10.0' + pinia: '>=3.0.0' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@pinia/nuxt': + optional: true + pinia: + optional: true + + pinia@3.0.3: + resolution: + { + integrity: sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA== + } + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: + { + integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + } + + pkg-types@2.3.0: + resolution: + { + integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + } + + postcss-html@1.8.0: + resolution: + { + integrity: sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ== + } + engines: { node: ^12 || >=14 } + + postcss-media-query-parser@0.2.3: + resolution: + { + integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + } + + postcss-resolve-nested-selector@0.1.6: + resolution: + { + integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== + } + + postcss-safe-parser@6.0.0: + resolution: + { + integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + } + engines: { node: '>=12.0' } + peerDependencies: + postcss: ^8.3.3 + + postcss-safe-parser@7.0.1: + resolution: + { + integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A== + } + engines: { node: '>=18.0' } + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: + { + integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== + } + engines: { node: '>=12.0' } + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.2: + resolution: + { + integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + } + engines: { node: '>=4' } + + postcss-selector-parser@7.1.0: + resolution: + { + integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + } + engines: { node: '>=4' } + + postcss-sorting@8.0.2: + resolution: + { + integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q== + } + peerDependencies: + postcss: ^8.4.20 + + postcss-value-parser@4.2.0: + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + } + + postcss@8.5.6: + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + } + engines: { node: ^10 || ^12 || >=14 } + + preact@10.27.2: + resolution: + { + integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg== + } + + prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + } + engines: { node: '>= 0.8.0' } + + prettier-linter-helpers@1.0.0: + resolution: + { + integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + } + engines: { node: '>=6.0.0' } + + prettier@3.6.2: + resolution: + { + integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + } + engines: { node: '>=14' } + hasBin: true + + pretty-ms@9.3.0: + resolution: + { + integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ== + } + engines: { node: '>=18' } + + prismjs@1.30.0: + resolution: + { + integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== + } + engines: { node: '>=6' } + + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + } + engines: { node: '>=6' } + + qrcode.vue@3.6.0: + resolution: + { + integrity: sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg== + } + peerDependencies: + vue: ^3.0.0 + + quansync@0.2.11: + resolution: + { + integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== + } + + queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + } + + readable-stream@3.6.2: + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + } + engines: { node: '>= 6' } + + readdirp@3.6.0: + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + } + engines: { node: '>=8.10.0' } + + readdirp@4.1.2: + resolution: + { + integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + } + engines: { node: '>= 14.18.0' } + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + } + engines: { node: '>=0.10.0' } + + require-from-string@2.0.2: + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + } + engines: { node: '>=0.10.0' } + + resolve-dir@1.0.1: + resolution: + { + integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + } + engines: { node: '>=0.10.0' } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + } + engines: { node: '>=4' } + + resolve-from@5.0.0: + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + } + engines: { node: '>=8' } + + resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + } + + restore-cursor@3.1.0: + resolution: + { + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + } + engines: { node: '>=8' } + + restore-cursor@5.1.0: + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + } + engines: { node: '>=18' } + + reusify@1.1.0: + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + + rfdc@1.4.1: + resolution: + { + integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + } + + rollup-plugin-visualizer@5.14.0: + resolution: + { + integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA== + } + engines: { node: '>=18' } + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@4.52.3: + resolution: + { + integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A== + } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } + hasBin: true + + run-applescript@7.1.0: + resolution: + { + integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + } + engines: { node: '>=18' } + + run-async@2.4.1: + resolution: + { + integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + } + engines: { node: '>=0.12.0' } + + run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + } + + rxjs@7.8.2: + resolution: + { + integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + } + + safe-buffer@5.2.1: + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + } + + sass@1.93.2: + resolution: + { + integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg== + } + engines: { node: '>=14.0.0' } + hasBin: true + + scroll-into-view-if-needed@2.2.31: + resolution: + { + integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== + } + + scule@1.3.0: + resolution: + { + integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + } + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + } + hasBin: true + + semver@7.7.2: + resolution: + { + integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + } + engines: { node: '>=10' } + hasBin: true + + shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + } + engines: { node: '>=8' } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + } + engines: { node: '>=8' } + + signal-exit@3.0.7: + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + } + engines: { node: '>=14' } + + sirv@3.0.2: + resolution: + { + integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g== + } + engines: { node: '>=18' } + + slash@3.0.0: + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + } + engines: { node: '>=8' } + + slate-history@0.66.0: + resolution: + { + integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng== + } + peerDependencies: + slate: '>=0.65.3' + + slate@0.72.8: + resolution: + { + integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw== + } + + slice-ansi@4.0.0: + resolution: + { + integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + } + engines: { node: '>=10' } + + slice-ansi@5.0.0: + resolution: + { + integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + } + engines: { node: '>=12' } + + slice-ansi@7.1.2: + resolution: + { + integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== + } + engines: { node: '>=18' } + + snabbdom@3.6.2: + resolution: + { + integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q== + } + engines: { node: '>=12.17.0' } + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + } + engines: { node: '>=0.10.0' } + + source-map-support@0.5.21: + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + } + engines: { node: '>=0.10.0' } + + source-map@0.7.6: + resolution: + { + integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + } + engines: { node: '>= 12' } + + speakingurl@14.0.1: + resolution: + { + integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + } + engines: { node: '>=0.10.0' } + + split2@4.2.0: + resolution: + { + integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + } + engines: { node: '>= 10.x' } + + ssf@0.11.2: + resolution: + { + integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + } + engines: { node: '>=0.8' } + + ssr-window@3.0.0: + resolution: + { + integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA== + } + + string-argv@0.3.2: + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + } + engines: { node: '>=0.6.19' } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + } + engines: { node: '>=8' } + + string-width@7.2.0: + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + } + engines: { node: '>=18' } + + string_decoder@1.3.0: + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + } + engines: { node: '>=8' } + + strip-ansi@7.1.2: + resolution: + { + integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + } + engines: { node: '>=12' } + + strip-bom@4.0.0: + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + } + engines: { node: '>=8' } + + strip-final-newline@3.0.0: + resolution: + { + integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + } + engines: { node: '>=12' } + + strip-final-newline@4.0.0: + resolution: + { + integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + } + engines: { node: '>=18' } + + strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + } + engines: { node: '>=8' } + + strip-literal@3.1.0: + resolution: + { + integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg== + } + + stylelint-config-html@1.1.0: + resolution: + { + integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ== + } + engines: { node: ^12 || >=14 } + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recess-order@4.6.0: + resolution: + { + integrity: sha512-V76fhv3YtcNXh/hyAuAdSzi5FmcrG54Mp2AThJ3D/PTMTSYzUPd7GIhP6z9mTqnRhmkk6YTfcu/JWB8h+Yrcaw== + } + peerDependencies: + stylelint: '>=15' + + stylelint-config-recommended-scss@14.1.0: + resolution: + { + integrity: sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg== + } + engines: { node: '>=18.12.0' } + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.6.1 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-vue@1.6.1: + resolution: + { + integrity: sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ== + } + engines: { node: ^12 || >=14 } + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recommended@14.0.1: + resolution: + { + integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg== + } + engines: { node: '>=18.12.0' } + peerDependencies: + stylelint: ^16.1.0 + + stylelint-config-recommended@17.0.0: + resolution: + { + integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA== + } + engines: { node: '>=18.12.0' } + peerDependencies: + stylelint: ^16.23.0 + + stylelint-config-standard@36.0.1: + resolution: + { + integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw== + } + engines: { node: '>=18.12.0' } + peerDependencies: + stylelint: ^16.1.0 + + stylelint-order@6.0.4: + resolution: + { + integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA== + } + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + + stylelint-scss@6.12.1: + resolution: + { + integrity: sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA== + } + engines: { node: '>=18.12.0' } + peerDependencies: + stylelint: ^16.0.2 + + stylelint@16.24.0: + resolution: + { + integrity: sha512-7ksgz3zJaSbTUGr/ujMXvLVKdDhLbGl3R/3arNudH7z88+XZZGNLMTepsY28WlnvEFcuOmUe7fg40Q3lfhOfSQ== + } + engines: { node: '>=18.12.0' } + hasBin: true + + superjson@2.2.2: + resolution: + { + integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== + } + engines: { node: '>=16' } + + supports-color@5.5.0: + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + } + engines: { node: '>=4' } + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + } + engines: { node: '>=8' } + + supports-hyperlinks@3.2.0: + resolution: + { + integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig== + } + engines: { node: '>=14.18' } + + svg-tags@1.0.0: + resolution: + { + integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + } + + synckit@0.11.11: + resolution: + { + integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== + } + engines: { node: ^14.18.0 || >=16.0.0 } + + table@6.9.0: + resolution: + { + integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== + } + engines: { node: '>=10.0.0' } + + tailwindcss@4.1.14: + resolution: + { + integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA== + } + + tapable@2.3.0: + resolution: + { + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + } + engines: { node: '>=6' } + + tar@7.5.1: + resolution: + { + integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g== + } + engines: { node: '>=18' } + + terser@5.44.0: + resolution: + { + integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== + } + engines: { node: '>=10' } + hasBin: true + + text-extensions@2.4.0: + resolution: + { + integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + } + engines: { node: '>=8' } + + through@2.3.8: + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + } + + tiny-warning@1.0.3: + resolution: + { + integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + } + + tinyexec@1.0.1: + resolution: + { + integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw== + } + + tinyglobby@0.2.15: + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + } + engines: { node: '>=12.0.0' } + + tmp@0.0.33: + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + } + engines: { node: '>=0.6.0' } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + } + engines: { node: '>=8.0' } + + totalist@3.0.1: + resolution: + { + integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + } + engines: { node: '>=6' } + + ts-api-utils@2.1.0: + resolution: + { + integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + } + engines: { node: '>=18.12' } + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.3.0: + resolution: + { + integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + } + + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + } + + tsx@4.20.6: + resolution: + { + integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg== + } + engines: { node: '>=18.0.0' } + hasBin: true + + type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + } + engines: { node: '>= 0.8.0' } + + type-fest@0.20.2: + resolution: + { + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + } + engines: { node: '>=10' } + + type-fest@0.21.3: + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + } + engines: { node: '>=10' } + + type@2.7.3: + resolution: + { + integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + } + + typescript-eslint@8.44.1: + resolution: + { + integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg== + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.6.3: + resolution: + { + integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + } + engines: { node: '>=14.17' } + hasBin: true + + ufo@1.6.1: + resolution: + { + integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== + } + + undici-types@7.14.0: + resolution: + { + integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA== + } + + unicorn-magic@0.1.0: + resolution: + { + integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + } + engines: { node: '>=18' } + + unicorn-magic@0.3.0: + resolution: + { + integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + } + engines: { node: '>=18' } + + unimport@5.4.0: + resolution: + { + integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA== + } + engines: { node: '>=18.12.0' } + + universalify@2.0.1: + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + } + engines: { node: '>= 10.0.0' } + + unplugin-auto-import@20.2.0: + resolution: + { + integrity: sha512-vfBI/SvD9hJqYNinipVOAj5n8dS8DJXFlCKFR5iLDp2SaQwsfdnfLXgZ+34Kd3YY3YEY9omk8XQg0bwos3Q8ug== + } + engines: { node: '>=14' } + peerDependencies: + '@nuxt/kit': ^4.0.0 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-element-plus@0.10.0: + resolution: + { + integrity: sha512-oRSW0x6U58xBOWKy8TcoVZNA8ElIpfp3TUJRLQI6ey/E9PpjHl9/deeTAZNt8D57Li4OA4pCJtM6p2cb4Ff4ZA== + } + engines: { node: '>=18.12.0' } + + unplugin-utils@0.2.5: + resolution: + { + integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg== + } + engines: { node: '>=18.12.0' } + + unplugin-utils@0.3.0: + resolution: + { + integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg== + } + engines: { node: '>=20.19.0' } + + unplugin-vue-components@29.1.0: + resolution: + { + integrity: sha512-z/9ACPXth199s9aCTCdKZAhe5QGOpvzJYP+Hkd0GN1/PpAmsu+W3UlRY3BJAewPqQxh5xi56+Og6mfiCV1Jzpg== + } + engines: { node: '>=14' } + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 || ^4.0.0 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@2.3.10: + resolution: + { + integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw== + } + engines: { node: '>=18.12.0' } + + update-browserslist-db@1.1.3: + resolution: + { + integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + } + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + } + + util-deprecate@1.0.2: + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + } + + vite-hot-client@2.1.0: + resolution: + { + integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ== + } + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + + vite-plugin-compression@0.5.1: + resolution: + { + integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg== + } + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-inspect@0.8.9: + resolution: + { + integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A== + } + engines: { node: '>=14' } + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-vue-devtools@7.7.7: + resolution: + { + integrity: sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ== + } + engines: { node: '>=v14.21.3' } + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + + vite-plugin-vue-inspector@5.3.2: + resolution: + { + integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q== + } + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + + vite@7.1.7: + resolution: + { + integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA== + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: + { + integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== + } + + vue-demi@0.14.10: + resolution: + { + integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== + } + engines: { node: '>=12' } + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-draggable-plus@0.6.0: + resolution: + { + integrity: sha512-G5TSfHrt9tX9EjdG49InoFJbt2NYk0h3kgjgKxkFWr3ulIUays0oFObr5KZ8qzD4+QnhtALiRwIqY6qul4egqw== + } + peerDependencies: + '@types/sortablejs': ^1.15.0 + '@vue/composition-api': '*' + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: + { + integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== + } + engines: { node: ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: '>=6.0.0' + + vue-i18n@9.14.5: + resolution: + { + integrity: sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g== + } + engines: { node: '>= 16' } + peerDependencies: + vue: ^3.0.0 + + vue-img-cutter@3.0.7: + resolution: + { + integrity: sha512-fNw3kimawg9XVXDZCw2bI74NI+Jq+H42wjymatZVVSY46wuBty6LbQsu4GeVfo/yzpS9AHY0tzckpYzX3D2fmA== + } + + vue-router@4.5.1: + resolution: + { + integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw== + } + peerDependencies: + vue: ^3.2.0 + + vue-tsc@2.1.10: + resolution: + { + integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA== + } + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.22: + resolution: + { + integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ== + } + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + wcwidth@1.0.1: + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + } + + webpack-virtual-modules@0.6.2: + resolution: + { + integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + } + + which@1.3.1: + resolution: + { + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + } + hasBin: true + + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + } + engines: { node: '>= 8' } + hasBin: true + + wildcard@1.1.2: + resolution: + { + integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng== + } + + wmf@1.0.2: + resolution: + { + integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== + } + engines: { node: '>=0.8' } + + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + } + engines: { node: '>=0.10.0' } + + word@0.3.0: + resolution: + { + integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== + } + engines: { node: '>=0.8' } + + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + } + engines: { node: '>=10' } + + wrap-ansi@9.0.2: + resolution: + { + integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== + } + engines: { node: '>=18' } + + wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + } + + write-file-atomic@5.0.1: + resolution: + { + integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + wsl-utils@0.1.0: + resolution: + { + integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + } + engines: { node: '>=18' } + + xgplayer-subtitles@3.0.23: + resolution: + { + integrity: sha512-deGdV75giVzfTTdG9XATmji39NHwKTpEelWt2rRx/RyXGgU2bQFp0Ft7yWaK2Uu8A/WVrP5fpxEAj4MstREMkQ== + } + peerDependencies: + core-js: '>=3.12.1' + + xgplayer@3.0.23: + resolution: + { + integrity: sha512-Bn3zQfMMAZimlVG9EeIDybMcklc+6FH8Sv47KpTq4K6ofCzyhPG/KenxailDedlHmxjb5B2o+240TpJtMQ3oJA== + } + peerDependencies: + core-js: '>=3.12.1' + + xlsx@0.18.5: + resolution: + { + integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ== + } + engines: { node: '>=0.8' } + hasBin: true + + xml-name-validator@4.0.0: + resolution: + { + integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + } + engines: { node: '>=12' } + + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + } + engines: { node: '>=10' } + + yallist@3.1.1: + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + } + + yallist@5.0.0: + resolution: + { + integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + } + engines: { node: '>=18' } + + yaml@2.8.1: + resolution: + { + integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + } + engines: { node: '>= 14.6' } + hasBin: true + + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + } + engines: { node: '>=12' } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + } + engines: { node: '>=12' } + + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + } + engines: { node: '>=10' } + + yocto-queue@1.2.1: + resolution: + { + integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== + } + engines: { node: '>=12.20' } + + yoctocolors@2.1.2: + resolution: + { + integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug== + } + engines: { node: '>=18' } + + zrender@6.0.0: + resolution: + { + integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg== + } + +snapshots: + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.26.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@cacheable/memoize@2.0.2': + dependencies: + '@cacheable/utils': 2.0.2 + + '@cacheable/memory@2.0.2': + dependencies: + '@cacheable/memoize': 2.0.2 + '@cacheable/utils': 2.0.2 + '@keyv/bigmap': 1.0.2 + hookified: 1.12.1 + keyv: 5.5.3 + + '@cacheable/utils@2.0.2': {} + + '@commitlint/cli@19.8.1(@types/node@24.8.1)(typescript@5.6.3)': + dependencies: + '@commitlint/format': 19.8.1 + '@commitlint/lint': 19.8.1 + '@commitlint/load': 19.8.1(@types/node@24.8.1)(typescript@5.6.3) + '@commitlint/read': 19.8.1 + '@commitlint/types': 19.8.1 + tinyexec: 1.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + ajv: 8.17.1 + + '@commitlint/config-validator@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + ajv: 8.17.1 + optional: true + + '@commitlint/ensure@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.8.1': {} + + '@commitlint/execute-rule@20.0.0': + optional: true + + '@commitlint/format@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + chalk: 5.6.2 + + '@commitlint/is-ignored@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + semver: 7.7.2 + + '@commitlint/lint@19.8.1': + dependencies: + '@commitlint/is-ignored': 19.8.1 + '@commitlint/parse': 19.8.1 + '@commitlint/rules': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/load@19.8.1(@types/node@24.8.1)(typescript@5.6.3)': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/execute-rule': 19.8.1 + '@commitlint/resolve-extends': 19.8.1 + '@commitlint/types': 19.8.1 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.6.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.8.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/load@20.0.0(@types/node@24.8.1)(typescript@5.6.3)': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.0.0 + '@commitlint/types': 20.0.0 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.6.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.8.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + optional: true + + '@commitlint/message@19.8.1': {} + + '@commitlint/parse@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.8.1': + dependencies: + '@commitlint/top-level': 19.8.1 + '@commitlint/types': 19.8.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.1 + + '@commitlint/resolve-extends@19.8.1': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/types': 19.8.1 + global-directory: 4.0.1 + import-meta-resolve: 4.2.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/resolve-extends@20.0.0': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/types': 20.0.0 + global-directory: 4.0.1 + import-meta-resolve: 4.2.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + optional: true + + '@commitlint/rules@19.8.1': + dependencies: + '@commitlint/ensure': 19.8.1 + '@commitlint/message': 19.8.1 + '@commitlint/to-lines': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/to-lines@19.8.1': {} + + '@commitlint/top-level@19.8.1': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.8.1': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.6.2 + + '@commitlint/types@20.0.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.6.2 + optional: true + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + + '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@ctrl/tinycolor@3.6.1': {} + + '@dual-bundle/import-meta-resolve@4.2.1': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.22(typescript@5.6.3))': + dependencies: + vue: 3.5.22(typescript@5.6.3) + + '@esbuild/aix-ppc64@0.25.10': + optional: true + + '@esbuild/android-arm64@0.25.10': + optional: true + + '@esbuild/android-arm@0.25.10': + optional: true + + '@esbuild/android-x64@0.25.10': + optional: true + + '@esbuild/darwin-arm64@0.25.10': + optional: true + + '@esbuild/darwin-x64@0.25.10': + optional: true + + '@esbuild/freebsd-arm64@0.25.10': + optional: true + + '@esbuild/freebsd-x64@0.25.10': + optional: true + + '@esbuild/linux-arm64@0.25.10': + optional: true + + '@esbuild/linux-arm@0.25.10': + optional: true + + '@esbuild/linux-ia32@0.25.10': + optional: true + + '@esbuild/linux-loong64@0.25.10': + optional: true + + '@esbuild/linux-mips64el@0.25.10': + optional: true + + '@esbuild/linux-ppc64@0.25.10': + optional: true + + '@esbuild/linux-riscv64@0.25.10': + optional: true + + '@esbuild/linux-s390x@0.25.10': + optional: true + + '@esbuild/linux-x64@0.25.10': + optional: true + + '@esbuild/netbsd-arm64@0.25.10': + optional: true + + '@esbuild/netbsd-x64@0.25.10': + optional: true + + '@esbuild/openbsd-arm64@0.25.10': + optional: true + + '@esbuild/openbsd-x64@0.25.10': + optional: true + + '@esbuild/openharmony-arm64@0.25.10': + optional: true + + '@esbuild/sunos-x64@0.25.10': + optional: true + + '@esbuild/win32-arm64@0.25.10': + optional: true + + '@esbuild/win32-ia32@0.25.10': + optional: true + + '@esbuild/win32-x64@0.25.10': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': + dependencies: + eslint: 9.36.0(jiti@2.6.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.1': {} + + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.36.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.5': + dependencies: + '@eslint/core': 0.15.2 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iconify/types@2.0.0': {} + + '@iconify/vue@5.0.0(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.22(typescript@5.6.3) + + '@intlify/core-base@9.14.5': + dependencies: + '@intlify/message-compiler': 9.14.5 + '@intlify/shared': 9.14.5 + + '@intlify/message-compiler@9.14.5': + dependencies: + '@intlify/shared': 9.14.5 + source-map-js: 1.2.1 + + '@intlify/shared@9.14.5': {} + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@keyv/bigmap@1.0.2': + dependencies: + hookified: 1.12.1 + + '@keyv/serialize@1.1.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@pkgr/core@0.2.9': {} + + '@polka/url@1.0.0-next.29': {} + + '@rolldown/pluginutils@1.0.0-beta.29': {} + + '@rollup/pluginutils@5.3.0(rollup@4.52.3)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.52.3 + + '@rollup/rollup-android-arm-eabi@4.52.3': + optional: true + + '@rollup/rollup-android-arm64@4.52.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.3': + optional: true + + '@rollup/rollup-darwin-x64@4.52.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.3': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@sxzz/popperjs-es@2.11.7': {} + + '@tailwindcss/node@4.1.14': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.0 + lightningcss: 1.30.1 + magic-string: 0.30.19 + source-map-js: 1.2.1 + tailwindcss: 4.1.14 + + '@tailwindcss/oxide-android-arm64@4.1.14': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.14': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.14': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.14': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.14': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.14': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.14': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.14': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.14': + optional: true + + '@tailwindcss/oxide@4.1.14': + dependencies: + detect-libc: 2.1.2 + tar: 7.5.1 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.14 + '@tailwindcss/oxide-darwin-arm64': 4.1.14 + '@tailwindcss/oxide-darwin-x64': 4.1.14 + '@tailwindcss/oxide-freebsd-x64': 4.1.14 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.14 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.14 + '@tailwindcss/oxide-linux-x64-musl': 4.1.14 + '@tailwindcss/oxide-wasm32-wasi': 4.1.14 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.14 + + '@tailwindcss/vite@4.1.14(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + dependencies: + '@tailwindcss/node': 4.1.14 + '@tailwindcss/oxide': 4.1.14 + tailwindcss: 4.1.14 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + + '@transloadit/prettier-bytes@0.0.7': {} + + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 24.8.1 + + '@types/estree@1.0.8': {} + + '@types/event-emitter@0.3.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.20 + + '@types/lodash@4.17.20': {} + + '@types/node@24.8.1': + dependencies: + undici-types: 7.14.0 + + '@types/sortablejs@1.15.8': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.21': {} + + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3))(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.44.1 + eslint: 9.36.0(jiti@2.6.0) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + eslint: 9.36.0(jiti@2.6.0) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.44.1(typescript@5.6.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.6.3) + '@typescript-eslint/types': 8.44.1 + debug: 4.4.3 + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.44.1': + dependencies: + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.6.3)': + dependencies: + typescript: 5.6.3 + + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + debug: 4.4.3 + eslint: 9.36.0(jiti@2.6.0) + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.44.1': {} + + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.6.3)': + dependencies: + '@typescript-eslint/project-service': 8.44.1(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.6.3) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.6.3) + eslint: 9.36.0(jiti@2.6.0) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.44.1': + dependencies: + '@typescript-eslint/types': 8.44.1 + eslint-visitor-keys: 4.2.1 + + '@uppy/companion-client@2.2.2': + dependencies: + '@uppy/utils': 4.1.3 + namespace-emitter: 2.0.1 + + '@uppy/core@2.3.4': + dependencies: + '@transloadit/prettier-bytes': 0.0.7 + '@uppy/store-default': 2.1.1 + '@uppy/utils': 4.1.3 + lodash.throttle: 4.1.1 + mime-match: 1.0.2 + namespace-emitter: 2.0.1 + nanoid: 3.3.11 + preact: 10.27.2 + + '@uppy/store-default@2.1.1': {} + + '@uppy/utils@4.1.3': + dependencies: + lodash.throttle: 4.1.1 + + '@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4)': + dependencies: + '@uppy/companion-client': 2.2.2 + '@uppy/core': 2.3.4 + '@uppy/utils': 4.1.3 + nanoid: 3.3.11 + + '@vitejs/plugin-vue@6.0.1(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vue: 3.5.22(typescript@5.6.3) + + '@volar/language-core@2.4.23': + dependencies: + '@volar/source-map': 2.4.23 + + '@volar/source-map@2.4.23': {} + + '@volar/typescript@2.4.23': + dependencies: + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/babel-helper-vue-transform-on@1.5.0': {} + + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.4)': + dependencies: + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.4) + '@vue/shared': 3.5.22 + optionalDependencies: + '@babel/core': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.4)': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/parser': 7.28.4 + '@vue/compiler-sfc': 3.5.22 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/compiler-sfc@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + estree-walker: 2.0.2 + magic-string: 0.30.19 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.22': + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.7': + dependencies: + '@vue/devtools-kit': 7.7.7 + + '@vue/devtools-core@7.7.7(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@vue/devtools-kit': 7.7.7 + '@vue/devtools-shared': 7.7.7 + mitt: 3.0.1 + nanoid: 5.1.6 + pathe: 2.0.3 + vite-hot-client: 2.1.0(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vue: 3.5.22(typescript@5.6.3) + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.7.7': + dependencies: + '@vue/devtools-shared': 7.7.7 + birpc: 2.6.1 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@7.7.7': + dependencies: + rfdc: 1.4.1 + + '@vue/language-core@2.1.10(typescript@5.6.3)': + dependencies: + '@volar/language-core': 2.4.23 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.22 + alien-signals: 0.2.2 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.6.3 + + '@vue/reactivity@3.5.22': + dependencies: + '@vue/shared': 3.5.22 + + '@vue/runtime-core@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/runtime-dom@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/runtime-core': 3.5.22 + '@vue/shared': 3.5.22 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + vue: 3.5.22(typescript@5.6.3) + + '@vue/shared@3.5.22': {} + + '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.9.0 + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.6.3)) + vue: 3.5.22(typescript@5.6.3) + + '@vueuse/core@9.13.0(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.22(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@13.9.0': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.6.3))': + dependencies: + vue: 3.5.22(typescript@5.6.3) + + '@vueuse/shared@9.13.0(vue@3.5.22(typescript@5.6.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.22(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-url: 1.2.4 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + prismjs: 1.30.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@types/event-emitter': 0.3.5 + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + dom7: 3.0.0 + event-emitter: 0.3.5 + html-void-elements: 2.0.1 + i18next: 20.6.1 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + scroll-into-view-if-needed: 2.2.31 + slate: 0.72.8 + slate-history: 0.66.0(slate@0.72.8) + snabbdom: 3.6.2 + + '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.22(typescript@5.6.3))': + dependencies: + '@wangeditor/editor': 5.1.23 + vue: 3.5.22(typescript@5.6.3) + + '@wangeditor/editor@5.1.23': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.foreach: 4.5.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + adler-32@1.3.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + alien-signals@0.2.2: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + astral-regex@2.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.8.8: {} + + binary-extensions@2.3.0: {} + + birpc@2.6.1: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.26.2: + dependencies: + baseline-browser-mapping: 2.8.8 + caniuse-lite: 1.0.30001745 + electron-to-chromium: 1.5.227 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + cacheable@2.0.2: + dependencies: + '@cacheable/memoize': 2.0.2 + '@cacheable/memory': 2.0.2 + '@cacheable/utils': 2.0.2 + hookified: 1.12.1 + keyv: 5.5.3 + + cachedir@2.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001745: {} + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@3.0.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + codepage@1.15.0: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@13.1.0: {} + + commander@2.20.3: {} + + commitizen@4.3.1(@types/node@24.8.1)(typescript@5.6.3): + dependencies: + cachedir: 2.3.0 + cz-conventional-changelog: 3.3.0(@types/node@24.8.1)(typescript@5.6.3) + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.5 + is-utf8: 0.2.1 + lodash: 4.17.21 + minimist: 1.2.7 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + compute-scroll-into-view@1.0.20: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commit-types@3.0.0: {} + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-source-map@2.0.0: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + core-js@3.45.1: {} + + cosmiconfig-typescript-loader@6.1.0(@types/node@24.8.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + dependencies: + '@types/node': 24.8.1 + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 2.6.0 + typescript: 5.6.3 + + cosmiconfig@9.0.0(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 + + crc-32@1.2.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + css-functions-list@3.2.3: {} + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + cz-conventional-changelog@3.3.0(@types/node@24.8.1)(typescript@5.6.3): + dependencies: + chalk: 2.4.2 + commitizen: 4.3.1(@types/node@24.8.1)(typescript@5.6.3) + conventional-commit-types: 3.0.0 + lodash.map: 4.6.0 + longest: 2.0.1 + word-wrap: 1.2.5 + optionalDependencies: + '@commitlint/load': 20.0.0(@types/node@24.8.1)(typescript@5.6.3) + transitivePeerDependencies: + - '@types/node' + - typescript + + cz-git@1.12.0: {} + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + danmu.js@1.1.13: + dependencies: + event-emitter: 0.3.5 + + dargs@8.1.0: {} + + dayjs@1.11.18: {} + + de-indent@1.0.2: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dedent@0.7.0: {} + + deep-is@0.1.4: {} + + deep-pick-omit@1.2.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-lazy-prop@2.0.0: {} + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + delegate@3.2.0: {} + + destr@2.0.5: {} + + detect-file@1.0.0: {} + + detect-indent@6.1.0: {} + + detect-libc@1.0.3: + optional: true + + detect-libc@2.1.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + dom7@3.0.0: + dependencies: + ssr-window: 3.0.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + downloadjs@1.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + echarts@6.0.0: + dependencies: + tslib: 2.3.0 + zrender: 6.0.0 + + electron-to-chromium@1.5.227: {} + + element-plus@2.11.4(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.2(vue@3.5.22(typescript@5.6.3)) + '@floating-ui/dom': 1.7.4 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.20 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.22(typescript@5.6.3)) + async-validator: 4.2.5 + dayjs: 1.11.18 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.22(typescript@5.6.3) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@10.5.0: {} + + emoji-regex@8.0.0: {} + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser-es@0.1.5: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + esbuild@0.25.10: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@9.1.2(eslint@9.36.0(jiti@2.6.0)): + dependencies: + eslint: 9.36.0(jiti@2.6.0) + + eslint-plugin-prettier@5.5.4(eslint-config-prettier@9.1.2(eslint@9.36.0(jiti@2.6.0)))(eslint@9.36.0(jiti@2.6.0))(prettier@3.6.2): + dependencies: + eslint: 9.36.0(jiti@2.6.0) + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 9.1.2(eslint@9.36.0(jiti@2.6.0)) + + eslint-plugin-vue@9.33.0(eslint@9.36.0(jiti@2.6.0)): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + eslint: 9.36.0(jiti@2.6.0) + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.2 + vue-eslint-parser: 9.4.3(eslint@9.36.0(jiti@2.6.0)) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.36.0(jiti@2.6.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.0 + transitivePeerDependencies: + - supports-color + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + + exsolve@1.0.7: {} + + ext@1.7.0: + dependencies: + type: 2.7.3 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.0: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@10.1.4: + dependencies: + flat-cache: 6.1.14 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-saver@2.0.5: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-node-modules@2.1.3: + dependencies: + findup-sync: 4.0.0 + merge: 2.1.1 + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + findup-sync@4.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + resolve-dir: 1.0.1 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat-cache@6.1.14: + dependencies: + cacheable: 2.0.2 + flatted: 3.3.3 + hookified: 1.12.1 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + frac@1.1.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + globals@15.15.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globjoin@0.1.4: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + highlight.js@11.11.1: {} + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + hookable@5.5.3: {} + + hookified@1.12.1: {} + + html-tags@3.3.1: {} + + html-void-elements@2.0.1: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + human-signals@5.0.0: {} + + human-signals@8.0.1: {} + + husky@9.1.7: {} + + i18next@20.6.1: + dependencies: + '@babel/runtime': 7.28.4 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + immer@9.0.21: {} + + immutable@5.1.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + inquirer@8.2.5: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hotkey@0.2.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@5.0.0: {} + + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + is-url@1.2.4: {} + + is-utf8@0.2.1: {} + + is-what@4.1.16: {} + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + jiti@2.6.0: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + keyv@5.5.3: + dependencies: + '@keyv/serialize': 1.1.1 + + kind-of@6.0.3: {} + + known-css-properties@0.36.0: {} + + known-css-properties@0.37.0: {} + + kolorist@1.8.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-darwin-arm64@1.30.1: + optional: true + + lightningcss-darwin-x64@1.30.1: + optional: true + + lightningcss-freebsd-x64@1.30.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true + + lightningcss-linux-arm64-gnu@1.30.1: + optional: true + + lightningcss-linux-arm64-musl@1.30.1: + optional: true + + lightningcss-linux-x64-gnu@1.30.1: + optional: true + + lightningcss-linux-x64-musl@1.30.1: + optional: true + + lightningcss-win32-arm64-msvc@1.30.1: + optional: true + + lightningcss-win32-x64-msvc@1.30.1: + optional: true + + lightningcss@1.30.1: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.5.2: + dependencies: + chalk: 5.6.2 + commander: 13.1.0 + debug: 4.4.3 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.3.3 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + transitivePeerDependencies: + - supports-color + + listr2@8.3.3: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.debounce@4.0.8: {} + + lodash.foreach@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.map@4.6.0: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.throttle@4.1.1: {} + + lodash.toarray@4.4.0: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.1.1 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + + longest@2.0.1: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + mathml-tag-names@2.1.3: {} + + mdn-data@2.12.2: {} + + mdn-data@2.24.0: {} + + memoize-one@6.0.0: {} + + meow@12.1.1: {} + + meow@13.2.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + merge@2.1.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-match@1.0.2: + dependencies: + wildcard: 1.1.2 + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.7: {} + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mitt@3.0.1: {} + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + mute-stream@0.0.8: {} + + namespace-emitter@2.0.1: {} + + nanoid@3.3.11: {} + + nanoid@5.1.6: {} + + natural-compare@1.4.0: {} + + next-tick@1.1.0: {} + + node-addon-api@7.1.1: + optional: true + + node-releases@2.0.21: {} + + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + ohash@2.0.11: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-ms@4.0.0: {} + + parse-passwd@1.0.0: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pidtree@0.6.0: {} + + pinia-plugin-persistedstate@4.5.0(pinia@3.0.3(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3))): + dependencies: + deep-pick-omit: 1.2.1 + defu: 6.1.4 + destr: 2.0.5 + optionalDependencies: + pinia: 3.0.3(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)) + + pinia@3.0.3(typescript@5.6.3)(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@vue/devtools-api': 7.7.7 + vue: 3.5.22(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + postcss-html@1.8.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.1 + postcss: 8.5.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) + + postcss-media-query-parser@0.2.3: {} + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@6.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sorting@8.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.27.2: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.6.2: {} + + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + + prismjs@1.30.0: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + qrcode.vue@3.6.0(vue@3.5.22(typescript@5.6.3)): + dependencies: + vue: 3.5.22(typescript@5.6.3) + + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rollup-plugin-visualizer@5.14.0(rollup@4.52.3): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.52.3 + + rollup@4.52.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.3 + '@rollup/rollup-android-arm64': 4.52.3 + '@rollup/rollup-darwin-arm64': 4.52.3 + '@rollup/rollup-darwin-x64': 4.52.3 + '@rollup/rollup-freebsd-arm64': 4.52.3 + '@rollup/rollup-freebsd-x64': 4.52.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.3 + '@rollup/rollup-linux-arm-musleabihf': 4.52.3 + '@rollup/rollup-linux-arm64-gnu': 4.52.3 + '@rollup/rollup-linux-arm64-musl': 4.52.3 + '@rollup/rollup-linux-loong64-gnu': 4.52.3 + '@rollup/rollup-linux-ppc64-gnu': 4.52.3 + '@rollup/rollup-linux-riscv64-gnu': 4.52.3 + '@rollup/rollup-linux-riscv64-musl': 4.52.3 + '@rollup/rollup-linux-s390x-gnu': 4.52.3 + '@rollup/rollup-linux-x64-gnu': 4.52.3 + '@rollup/rollup-linux-x64-musl': 4.52.3 + '@rollup/rollup-openharmony-arm64': 4.52.3 + '@rollup/rollup-win32-arm64-msvc': 4.52.3 + '@rollup/rollup-win32-ia32-msvc': 4.52.3 + '@rollup/rollup-win32-x64-gnu': 4.52.3 + '@rollup/rollup-win32-x64-msvc': 4.52.3 + fsevents: 2.3.3 + + run-applescript@7.1.0: {} + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sass@1.93.2: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + scroll-into-view-if-needed@2.2.31: + dependencies: + compute-scroll-into-view: 1.0.20 + + scule@1.3.0: {} + + semver@6.3.1: {} + + semver@7.7.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + slash@3.0.0: {} + + slate-history@0.66.0(slate@0.72.8): + dependencies: + is-plain-object: 5.0.0 + slate: 0.72.8 + + slate@0.72.8: + dependencies: + immer: 9.0.21 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + snabbdom@3.6.2: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + speakingurl@14.0.1: {} + + split2@4.2.0: {} + + ssf@0.11.2: + dependencies: + frac: 1.1.2 + + ssr-window@3.0.0: {} + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@4.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + + stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + postcss-html: 1.8.0 + stylelint: 16.24.0(typescript@5.6.3) + + stylelint-config-recess-order@4.6.0(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + stylelint: 16.24.0(typescript@5.6.3) + stylelint-order: 6.0.4(stylelint@16.24.0(typescript@5.6.3)) + + stylelint-config-recommended-scss@14.1.0(postcss@8.5.6)(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.6) + stylelint: 16.24.0(typescript@5.6.3) + stylelint-config-recommended: 14.0.1(stylelint@16.24.0(typescript@5.6.3)) + stylelint-scss: 6.12.1(stylelint@16.24.0(typescript@5.6.3)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + postcss-html: 1.8.0 + semver: 7.7.2 + stylelint: 16.24.0(typescript@5.6.3) + stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.6.3)) + stylelint-config-recommended: 17.0.0(stylelint@16.24.0(typescript@5.6.3)) + + stylelint-config-recommended@14.0.1(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + stylelint: 16.24.0(typescript@5.6.3) + + stylelint-config-recommended@17.0.0(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + stylelint: 16.24.0(typescript@5.6.3) + + stylelint-config-standard@36.0.1(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + stylelint: 16.24.0(typescript@5.6.3) + stylelint-config-recommended: 14.0.1(stylelint@16.24.0(typescript@5.6.3)) + + stylelint-order@6.0.4(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + postcss: 8.5.6 + postcss-sorting: 8.0.2(postcss@8.5.6) + stylelint: 16.24.0(typescript@5.6.3) + + stylelint-scss@6.12.1(stylelint@16.24.0(typescript@5.6.3)): + dependencies: + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.36.0 + mdn-data: 2.24.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + stylelint: 16.24.0(typescript@5.6.3) + + stylelint@16.24.0(typescript@5.6.3): + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@dual-bundle/import-meta-resolve': 4.2.1 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0(typescript@5.6.3) + css-functions-list: 3.2.3 + css-tree: 3.1.0 + debug: 4.4.3 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 10.1.4 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 7.0.5 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + supports-hyperlinks: 3.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + svg-tags@1.0.0: {} + + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tailwindcss@4.1.14: {} + + tapable@2.3.0: {} + + tar@7.5.1: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + + terser@5.44.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-extensions@2.4.0: {} + + through@2.3.8: {} + + tiny-warning@1.0.3: {} + + tinyexec@1.0.1: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-api-utils@2.1.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + tsx@4.20.6: + dependencies: + esbuild: 0.25.10 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type@2.7.3: {} + + typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3))(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.6.3) + eslint: 9.36.0(jiti@2.6.0) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + typescript@5.6.3: {} + + ufo@1.6.1: {} + + undici-types@7.14.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unimport@5.4.0: + dependencies: + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.19 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 2.3.10 + unplugin-utils: 0.3.0 + + universalify@2.0.1: {} + + unplugin-auto-import@20.2.0(@vueuse/core@13.9.0(vue@3.5.22(typescript@5.6.3))): + dependencies: + local-pkg: 1.1.2 + magic-string: 0.30.19 + picomatch: 4.0.3 + unimport: 5.4.0 + unplugin: 2.3.10 + unplugin-utils: 0.3.0 + optionalDependencies: + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.6.3)) + + unplugin-element-plus@0.10.0: + dependencies: + es-module-lexer: 1.7.0 + magic-string: 0.30.19 + unplugin: 2.3.10 + unplugin-utils: 0.2.5 + + unplugin-utils@0.2.5: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin-utils@0.3.0: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin-vue-components@29.1.0(@babel/parser@7.28.4)(vue@3.5.22(typescript@5.6.3)): + dependencies: + chokidar: 3.6.0 + debug: 4.4.3 + local-pkg: 1.1.2 + magic-string: 0.30.19 + mlly: 1.8.0 + tinyglobby: 0.2.15 + unplugin: 2.3.10 + unplugin-utils: 0.3.0 + vue: 3.5.22(typescript@5.6.3) + optionalDependencies: + '@babel/parser': 7.28.4 + transitivePeerDependencies: + - supports-color + + unplugin@2.3.10: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.1.3(browserslist@4.26.2): + dependencies: + browserslist: 4.26.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite-hot-client@2.1.0(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + dependencies: + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + + vite-plugin-compression@0.5.1(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + dependencies: + chalk: 4.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + vite-plugin-inspect@0.8.9(rollup@4.52.3)(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.3.0(rollup@4.52.3) + debug: 4.4.3 + error-stack-parser-es: 0.1.5 + fs-extra: 11.3.2 + open: 10.2.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.2 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-vue-devtools@7.7.7(rollup@4.52.3)(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@vue/devtools-core': 7.7.7(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.6.3)) + '@vue/devtools-kit': 7.7.7 + '@vue/devtools-shared': 7.7.7 + execa: 9.6.0 + sirv: 3.0.2 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-inspect: 0.8.9(rollup@4.52.3)(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.3.2(vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) + '@vue/compiler-dom': 3.5.22 + kolorist: 1.8.0 + magic-string: 0.30.19 + vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + vite@7.1.7(@types/node@24.8.1)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + dependencies: + esbuild: 0.25.10 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.8.1 + fsevents: 2.3.3 + jiti: 2.6.0 + lightningcss: 1.30.1 + sass: 1.93.2 + terser: 5.44.0 + tsx: 4.20.6 + yaml: 2.8.1 + + vscode-uri@3.1.0: {} + + vue-demi@0.14.10(vue@3.5.22(typescript@5.6.3)): + dependencies: + vue: 3.5.22(typescript@5.6.3) + + vue-draggable-plus@0.6.0(@types/sortablejs@1.15.8): + dependencies: + '@types/sortablejs': 1.15.8 + + vue-eslint-parser@9.4.3(eslint@9.36.0(jiti@2.6.0)): + dependencies: + debug: 4.4.3 + eslint: 9.36.0(jiti@2.6.0) + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + vue-i18n@9.14.5(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@intlify/core-base': 9.14.5 + '@intlify/shared': 9.14.5 + '@vue/devtools-api': 6.6.4 + vue: 3.5.22(typescript@5.6.3) + + vue-img-cutter@3.0.7(typescript@5.6.3): + dependencies: + core-js: 3.45.1 + vue: 3.5.22(typescript@5.6.3) + vue-i18n: 9.14.5(vue@3.5.22(typescript@5.6.3)) + transitivePeerDependencies: + - typescript + + vue-router@4.5.1(vue@3.5.22(typescript@5.6.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.22(typescript@5.6.3) + + vue-tsc@2.1.10(typescript@5.6.3): + dependencies: + '@volar/typescript': 2.4.23 + '@vue/language-core': 2.1.10(typescript@5.6.3) + semver: 7.7.2 + typescript: 5.6.3 + + vue@3.5.22(typescript@5.6.3): + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-sfc': 3.5.22 + '@vue/runtime-dom': 3.5.22 + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.6.3)) + '@vue/shared': 3.5.22 + optionalDependencies: + typescript: 5.6.3 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webpack-virtual-modules@0.6.2: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard@1.1.2: {} + + wmf@1.0.2: {} + + word-wrap@1.2.5: {} + + word@0.3.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xgplayer-subtitles@3.0.23(core-js@3.45.1): + dependencies: + core-js: 3.45.1 + eventemitter3: 4.0.7 + + xgplayer@3.0.23(core-js@3.45.1): + dependencies: + core-js: 3.45.1 + danmu.js: 1.1.13 + delegate: 3.2.0 + downloadjs: 1.4.7 + eventemitter3: 4.0.7 + xgplayer-subtitles: 3.0.23(core-js@3.45.1) + + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + + xml-name-validator@4.0.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@5.0.0: {} + + yaml@2.8.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + yocto-queue@1.2.1: {} + + yoctocolors@2.1.2: {} + + zrender@6.0.0: + dependencies: + tslib: 2.3.0 diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/web/scripts/clean-dev.ts b/web/scripts/clean-dev.ts new file mode 100644 index 0000000..cc0b9bc --- /dev/null +++ b/web/scripts/clean-dev.ts @@ -0,0 +1,838 @@ +// scripts/clean-dev.ts +import fs from 'fs/promises' +import path from 'path' + +// 现代化颜色主题 +const theme = { + // 基础颜色 + reset: '\x1b[0m', + bold: '\x1b[1m', + dim: '\x1b[2m', + + // 前景色 + primary: '\x1b[38;5;75m', // 亮蓝色 + success: '\x1b[38;5;82m', // 亮绿色 + warning: '\x1b[38;5;220m', // 亮黄色 + error: '\x1b[38;5;196m', // 亮红色 + info: '\x1b[38;5;159m', // 青色 + purple: '\x1b[38;5;141m', // 紫色 + orange: '\x1b[38;5;208m', // 橙色 + gray: '\x1b[38;5;245m', // 灰色 + white: '\x1b[38;5;255m', // 白色 + + // 背景色 + bgDark: '\x1b[48;5;235m', // 深灰背景 + bgBlue: '\x1b[48;5;24m', // 蓝色背景 + bgGreen: '\x1b[48;5;22m', // 绿色背景 + bgRed: '\x1b[48;5;52m' // 红色背景 +} + +// 现代化图标集 +const icons = { + rocket: '🚀', + fire: '🔥', + star: '⭐', + gem: '💎', + crown: '👑', + magic: '✨', + warning: '⚠️', + success: '✅', + error: '❌', + info: 'ℹ️', + folder: '📁', + file: '📄', + image: '🖼️', + code: '💻', + data: '📊', + globe: '🌐', + map: '🗺️', + chat: '💬', + bolt: '⚡', + shield: '🛡️', + key: '🔑', + link: '🔗', + clean: '🧹', + trash: '🗑️', + check: '✓', + cross: '✗', + arrow: '→', + loading: '⏳' +} + +// 格式化工具 +const fmt = { + title: (text: string) => `${theme.bold}${theme.primary}${text}${theme.reset}`, + subtitle: (text: string) => `${theme.purple}${text}${theme.reset}`, + success: (text: string) => `${theme.success}${text}${theme.reset}`, + error: (text: string) => `${theme.error}${text}${theme.reset}`, + warning: (text: string) => `${theme.warning}${text}${theme.reset}`, + info: (text: string) => `${theme.info}${text}${theme.reset}`, + highlight: (text: string) => `${theme.bold}${theme.white}${text}${theme.reset}`, + dim: (text: string) => `${theme.dim}${theme.gray}${text}${theme.reset}`, + orange: (text: string) => `${theme.orange}${text}${theme.reset}`, + + // 带背景的文本 + badge: (text: string, bg: string = theme.bgBlue) => + `${bg}${theme.white}${theme.bold} ${text} ${theme.reset}`, + + // 渐变效果模拟 + gradient: (text: string) => { + const colors = ['\x1b[38;5;75m', '\x1b[38;5;81m', '\x1b[38;5;87m', '\x1b[38;5;159m'] + const chars = text.split('') + return chars.map((char, i) => `${colors[i % colors.length]}${char}`).join('') + theme.reset + } +} + +// 创建现代化标题横幅 +function createModernBanner() { + console.log() + console.log( + fmt.gradient(' ╔══════════════════════════════════════════════════════════════════╗') + ) + console.log( + fmt.gradient(' ║ ║') + ) + console.log( + ` ║ ${icons.rocket} ${fmt.title('ART DESIGN PRO')} ${fmt.subtitle('· 代码精简程序')} ${icons.magic} ║` + ) + console.log( + ` ║ ${fmt.dim('为项目移除演示数据,快速切换至开发模式')} ║` + ) + console.log( + fmt.gradient(' ║ ║') + ) + console.log( + fmt.gradient(' ╚══════════════════════════════════════════════════════════════════╝') + ) + console.log() +} + +// 创建分割线 +function createDivider(char = '─', color = theme.primary) { + console.log(`${color}${' ' + char.repeat(66)}${theme.reset}`) +} + +// 创建卡片样式容器 +function createCard(title: string, content: string[]) { + console.log(` ${fmt.badge('', theme.bgBlue)} ${fmt.title(title)}`) + console.log() + content.forEach((line) => { + console.log(` ${line}`) + }) + console.log() +} + +// 进度条动画 +function createProgressBar(current: number, total: number, text: string, width = 40) { + const percentage = Math.round((current / total) * 100) + const filled = Math.round((current / total) * width) + const empty = width - filled + + const filledBar = '█'.repeat(filled) + const emptyBar = '░'.repeat(empty) + + process.stdout.write( + `\r ${fmt.info('进度')} [${theme.success}${filledBar}${theme.gray}${emptyBar}${theme.reset}] ${fmt.highlight(percentage + '%')})}` + ) + + if (current === total) { + console.log() + } +} + +// 统计信息 +const stats = { + deletedFiles: 0, + deletedPaths: 0, + failedPaths: 0, + startTime: Date.now(), + totalFiles: 0 +} + +// 清理目标 +const targets = [ + 'README.md', + 'README.zh-CN.md', + 'CHANGELOG.md', + 'CHANGELOG.zh-CN.md', + 'src/views/change', + 'src/views/safeguard', + 'src/views/article', + 'src/views/examples', + 'src/views/system/nested', + 'src/views/widgets', + 'src/views/template', + 'src/views/dashboard/analysis', + 'src/views/dashboard/ecommerce', + 'src/mock/json', + 'src/mock/temp/articleList.ts', + 'src/mock/temp/commentDetail.ts', + 'src/mock/temp/commentList.ts', + 'src/assets/images/cover', + 'src/assets/images/safeguard', + 'src/assets/images/3d', + 'src/components/core/charts/art-map-chart', + 'src/components/business/comment-widget' +] + +// 递归统计文件数量 +async function countFiles(targetPath: string): Promise { + const fullPath = path.resolve(process.cwd(), targetPath) + + try { + const stat = await fs.stat(fullPath) + + if (stat.isFile()) { + return 1 + } else if (stat.isDirectory()) { + const entries = await fs.readdir(fullPath) + let count = 0 + + for (const entry of entries) { + const entryPath = path.join(targetPath, entry) + count += await countFiles(entryPath) + } + + return count + } + } catch { + return 0 + } + + return 0 +} + +// 统计所有目标的文件数量 +async function countAllFiles(): Promise { + let totalCount = 0 + + for (const target of targets) { + const count = await countFiles(target) + totalCount += count + } + + return totalCount +} + +// 删除文件和目录 +async function remove(targetPath: string, index: number) { + const fullPath = path.resolve(process.cwd(), targetPath) + + createProgressBar(index + 1, targets.length, targetPath) + + try { + const fileCount = await countFiles(targetPath) + await fs.rm(fullPath, { recursive: true, force: true }) + stats.deletedFiles += fileCount + stats.deletedPaths++ + await new Promise((resolve) => setTimeout(resolve, 50)) + } catch (err) { + stats.failedPaths++ + console.log() + console.log(` ${icons.error} ${fmt.error('删除失败')}: ${fmt.highlight(targetPath)}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 清理路由模块 +async function cleanRouteModules() { + const modulesPath = path.resolve(process.cwd(), 'src/router/modules') + + try { + // 删除演示相关的路由模块 + const modulesToRemove = [ + 'template.ts', + 'widgets.ts', + 'examples.ts', + 'article.ts', + 'safeguard.ts', + 'help.ts' + ] + + for (const module of modulesToRemove) { + const modulePath = path.join(modulesPath, module) + try { + await fs.rm(modulePath, { force: true }) + } catch { + // 文件不存在时忽略错误 + } + } + + // 重写 dashboard.ts - 只保留 console + const dashboardContent = `import { AppRouteRecord } from '@/types/router' + +export const dashboardRoutes: AppRouteRecord = { + name: 'Dashboard', + path: '/dashboard', + component: '/index/index', + meta: { + title: 'menus.dashboard.title', + icon: 'ri:pie-chart-line', + roles: ['R_SUPER', 'R_ADMIN'] + }, + children: [ + { + path: 'console', + name: 'Console', + component: '/dashboard/console', + meta: { + title: 'menus.dashboard.console', + keepAlive: false, + fixedTab: true + } + } + ] +} +` + await fs.writeFile(path.join(modulesPath, 'dashboard.ts'), dashboardContent, 'utf-8') + + // 重写 system.ts - 移除 nested 嵌套菜单 + const systemContent = `import { AppRouteRecord } from '@/types/router' + +export const systemRoutes: AppRouteRecord = { + path: '/system', + name: 'System', + component: '/index/index', + meta: { + title: 'menus.system.title', + icon: 'ri:user-3-line', + roles: ['R_SUPER', 'R_ADMIN'] + }, + children: [ + { + path: 'user', + name: 'User', + component: '/system/user', + meta: { + title: 'menus.system.user', + keepAlive: true, + roles: ['R_SUPER', 'R_ADMIN'] + } + }, + { + path: 'role', + name: 'Role', + component: '/system/role', + meta: { + title: 'menus.system.role', + keepAlive: true, + roles: ['R_SUPER'] + } + }, + { + path: 'user-center', + name: 'UserCenter', + component: '/system/user-center', + meta: { + title: 'menus.system.userCenter', + isHide: true, + keepAlive: true, + isHideTab: true + } + }, + { + path: 'menu', + name: 'Menus', + component: '/system/menu', + meta: { + title: 'menus.system.menu', + keepAlive: true, + roles: ['R_SUPER'], + authList: [ + { title: '新增', authMark: 'add' }, + { title: '编辑', authMark: 'edit' }, + { title: '删除', authMark: 'delete' } + ] + } + } + ] +} +` + await fs.writeFile(path.join(modulesPath, 'system.ts'), systemContent, 'utf-8') + + // 重写 index.ts - 只导入保留的模块 + const indexContent = `import { AppRouteRecord } from '@/types/router' +import { dashboardRoutes } from './dashboard' +import { systemRoutes } from './system' +import { resultRoutes } from './result' +import { exceptionRoutes } from './exception' + +/** + * 导出所有模块化路由 + */ +export const routeModules: AppRouteRecord[] = [ + dashboardRoutes, + systemRoutes, + resultRoutes, + exceptionRoutes +] +` + await fs.writeFile(path.join(modulesPath, 'index.ts'), indexContent, 'utf-8') + + console.log(` ${icons.success} ${fmt.success('清理路由模块完成')}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error('清理路由模块失败')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 清理路由别名 +async function cleanRoutesAlias() { + const routesAliasPath = path.resolve(process.cwd(), 'src/router/routesAlias.ts') + + try { + const cleanedAlias = `/** + * 公共路由别名 + # 存放系统级公共路由路径,如布局容器、登录页等 + */ +export enum RoutesAlias { + Layout = '/index/index', // 布局容器 + Login = '/auth/login' // 登录页 +} +` + + await fs.writeFile(routesAliasPath, cleanedAlias, 'utf-8') + console.log(` ${icons.success} ${fmt.success('重写路由别名配置完成')}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error('清理路由别名失败')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 清理变更日志 +async function cleanChangeLog() { + const changeLogPath = path.resolve(process.cwd(), 'src/mock/upgrade/changeLog.ts') + + try { + const cleanedChangeLog = `import { ref } from 'vue' + +interface UpgradeLog { + version: string // 版本号 + title: string // 更新标题 + date: string // 更新日期 + detail?: string[] // 更新内容 + requireReLogin?: boolean // 是否需要重新登录 + remark?: string // 备注 +} + +export const upgradeLogList = ref([]) +` + + await fs.writeFile(changeLogPath, cleanedChangeLog, 'utf-8') + console.log(` ${icons.success} ${fmt.success('清空变更日志数据完成')}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error('清理变更日志失败')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 清理语言文件 +async function cleanLanguageFiles() { + const languageFiles = [ + { path: 'src/locales/langs/zh.json', name: '中文语言文件' }, + { path: 'src/locales/langs/en.json', name: '英文语言文件' } + ] + + for (const { path: langPath, name } of languageFiles) { + try { + const fullPath = path.resolve(process.cwd(), langPath) + const content = await fs.readFile(fullPath, 'utf-8') + const langData = JSON.parse(content) + + const menusToRemove = [ + 'widgets', + 'template', + 'article', + 'examples', + 'safeguard', + 'plan', + 'help' + ] + + if (langData.menus) { + menusToRemove.forEach((menuKey) => { + if (langData.menus[menuKey]) { + delete langData.menus[menuKey] + } + }) + + if (langData.menus.dashboard) { + if (langData.menus.dashboard.analysis) { + delete langData.menus.dashboard.analysis + } + if (langData.menus.dashboard.ecommerce) { + delete langData.menus.dashboard.ecommerce + } + } + + if (langData.menus.system) { + const systemKeysToRemove = [ + 'nested', + 'menu1', + 'menu2', + 'menu21', + 'menu3', + 'menu31', + 'menu32', + 'menu321' + ] + systemKeysToRemove.forEach((key) => { + if (langData.menus.system[key]) { + delete langData.menus.system[key] + } + }) + } + } + + await fs.writeFile(fullPath, JSON.stringify(langData, null, 2), 'utf-8') + console.log(` ${icons.success} ${fmt.success(`清理${name}完成`)}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error(`清理${name}失败`)}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } + } +} + +// 清理快速入口组件 +async function cleanFastEnterComponent() { + const fastEnterPath = path.resolve(process.cwd(), 'src/config/fastEnter.ts') + + try { + const cleanedFastEnter = `/** + * 快速入口配置 + * 包含:应用列表、快速链接等配置 + */ +import { WEB_LINKS } from '@/utils/constants' +import type { FastEnterConfig } from '@/types/config' + +const fastEnterConfig: FastEnterConfig = { + // 显示条件(屏幕宽度) + minWidth: 1200, + // 应用列表 + applications: [ + { + name: '工作台', + description: '系统概览与数据统计', + icon: 'ri:pie-chart-line', + iconColor: '#377dff', + enabled: true, + order: 1, + routeName: 'Console' + }, + { + name: '官方文档', + description: '使用指南与开发文档', + icon: 'ri:bill-line', + iconColor: '#ffb100', + enabled: true, + order: 2, + link: WEB_LINKS.DOCS + }, + { + name: '技术支持', + description: '技术支持与问题反馈', + icon: 'ri:user-location-line', + iconColor: '#ff6b6b', + enabled: true, + order: 3, + link: WEB_LINKS.COMMUNITY + }, + { + name: '哔哩哔哩', + description: '技术分享与交流', + icon: 'ri:bilibili-line', + iconColor: '#FB7299', + enabled: true, + order: 4, + link: WEB_LINKS.BILIBILI + } + ], + // 快速链接 + quickLinks: [ + { + name: '登录', + enabled: true, + order: 1, + routeName: 'Login' + }, + { + name: '注册', + enabled: true, + order: 2, + routeName: 'Register' + }, + { + name: '忘记密码', + enabled: true, + order: 3, + routeName: 'ForgetPassword' + }, + { + name: '个人中心', + enabled: true, + order: 4, + routeName: 'UserCenter' + } + ] +} + +export default Object.freeze(fastEnterConfig) +` + + await fs.writeFile(fastEnterPath, cleanedFastEnter, 'utf-8') + console.log(` ${icons.success} ${fmt.success('清理快速入口配置完成')}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error('清理快速入口配置失败')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 更新菜单接口 +async function updateMenuApi() { + const apiPath = path.resolve(process.cwd(), 'src/api/system-manage.ts') + + try { + const content = await fs.readFile(apiPath, 'utf-8') + const updatedContent = content.replace( + "url: '/api/v3/system/menus'", + "url: '/api/v3/system/menus/simple'" + ) + + await fs.writeFile(apiPath, updatedContent, 'utf-8') + console.log(` ${icons.success} ${fmt.success('更新菜单接口完成')}`) + } catch (err) { + console.log(` ${icons.error} ${fmt.error('更新菜单接口失败')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + } +} + +// 用户确认函数 +async function getUserConfirmation(): Promise { + const { createInterface } = await import('readline') + + return new Promise((resolve) => { + const rl = createInterface({ + input: process.stdin, + output: process.stdout + }) + + console.log( + ` ${fmt.highlight('请输入')} ${fmt.success('yes')} ${fmt.highlight('确认执行清理操作,或按 Enter 取消')}` + ) + console.log() + process.stdout.write(` ${icons.arrow} `) + + rl.question('', (answer: string) => { + rl.close() + resolve(answer.toLowerCase().trim() === 'yes') + }) + }) +} + +// 显示清理警告 +async function showCleanupWarning() { + createCard('安全警告', [ + `${fmt.warning('此操作将永久删除以下演示内容,且无法恢复!')}`, + `${fmt.dim('请仔细阅读清理列表,确认后再继续操作')}` + ]) + + const cleanupItems = [ + { + icon: icons.image, + name: '图片资源', + desc: '演示用的封面图片、3D图片、运维图片等', + color: theme.orange + }, + { + icon: icons.file, + name: '演示页面', + desc: 'widgets、template、article、examples、safeguard等页面', + color: theme.purple + }, + { + icon: icons.code, + name: '路由模块文件', + desc: '删除演示路由模块,只保留核心模块(dashboard、system、result、exception)', + color: theme.primary + }, + { + icon: icons.link, + name: '路由别名', + desc: '重写routesAlias.ts,移除演示路由别名', + color: theme.info + }, + { + icon: icons.data, + name: 'Mock数据', + desc: '演示用的JSON数据、文章列表、评论数据等', + color: theme.success + }, + { + icon: icons.globe, + name: '多语言文件', + desc: '清理中英文语言包中的演示菜单项', + color: theme.warning + }, + { icon: icons.map, name: '地图组件', desc: '移除art-map-chart地图组件', color: theme.error }, + { icon: icons.chat, name: '评论组件', desc: '移除comment-widget评论组件', color: theme.orange }, + { + icon: icons.bolt, + name: '快速入口', + desc: '移除分析页、礼花效果、聊天、更新日志、定价、留言管理等无效项目', + color: theme.purple + } + ] + + console.log(` ${fmt.badge('', theme.bgRed)} ${fmt.title('将要清理的内容')}`) + console.log() + + cleanupItems.forEach((item, index) => { + console.log(` ${item.color}${theme.reset} ${fmt.highlight(`${index + 1}. ${item.name}`)}`) + console.log(` ${fmt.dim(item.desc)}`) + }) + + console.log() + console.log(` ${fmt.badge('', theme.bgGreen)} ${fmt.title('保留的功能模块')}`) + console.log() + + const preservedModules = [ + { name: 'Dashboard', desc: '工作台页面' }, + { name: 'System', desc: '系统管理模块' }, + { name: 'Result', desc: '结果页面' }, + { name: 'Exception', desc: '异常页面' }, + { name: 'Auth', desc: '登录注册功能' }, + { name: 'Core Components', desc: '核心组件库' } + ] + + preservedModules.forEach((module) => { + console.log(` ${icons.check} ${fmt.success(module.name)} ${fmt.dim(`- ${module.desc}`)}`) + }) + + console.log() + createDivider() + console.log() +} + +// 显示统计信息 +async function showStats() { + const duration = Date.now() - stats.startTime + const seconds = (duration / 1000).toFixed(2) + + console.log() + createCard('清理统计', [ + `${fmt.success('成功删除')}: ${fmt.highlight(stats.deletedFiles.toString())} 个文件`, + `${fmt.info('涉及路径')}: ${fmt.highlight(stats.deletedPaths.toString())} 个目录/文件`, + ...(stats.failedPaths > 0 + ? [ + `${icons.error} ${fmt.error('删除失败')}: ${fmt.highlight(stats.failedPaths.toString())} 个路径` + ] + : []), + `${fmt.info('耗时')}: ${fmt.highlight(seconds)} 秒` + ]) +} + +// 创建成功横幅 +function createSuccessBanner() { + console.log() + console.log( + fmt.gradient(' ╔══════════════════════════════════════════════════════════════════╗') + ) + console.log( + fmt.gradient(' ║ ║') + ) + console.log( + ` ║ ${icons.star} ${fmt.success('清理完成!项目已准备就绪')} ${icons.rocket} ║` + ) + console.log( + ` ║ ${fmt.dim('现在可以开始您的开发之旅了!')} ║` + ) + console.log( + fmt.gradient(' ║ ║') + ) + console.log( + fmt.gradient(' ╚══════════════════════════════════════════════════════════════════╝') + ) + console.log() +} + +// 主函数 +async function main() { + // 清屏并显示横幅 + console.clear() + createModernBanner() + + // 显示清理警告 + await showCleanupWarning() + + // 统计文件数量 + console.log(` ${fmt.info('正在统计文件数量...')}`) + stats.totalFiles = await countAllFiles() + + console.log(` ${fmt.info('即将清理')}: ${fmt.highlight(stats.totalFiles.toString())} 个文件`) + console.log(` ${fmt.dim(`涉及 ${targets.length} 个目录/文件路径`)}`) + console.log() + + // 用户确认 + const confirmed = await getUserConfirmation() + + if (!confirmed) { + console.log(` ${fmt.warning('操作已取消,清理中止')}`) + console.log() + return + } + + console.log() + console.log(` ${icons.check} ${fmt.success('确认成功,开始清理...')}`) + console.log() + + // 开始清理过程 + console.log(` ${fmt.badge('步骤 1/6', theme.bgBlue)} ${fmt.title('删除演示文件')}`) + console.log() + for (let i = 0; i < targets.length; i++) { + await remove(targets[i], i) + } + console.log() + + console.log(` ${fmt.badge('步骤 2/6', theme.bgBlue)} ${fmt.title('清理路由模块')}`) + console.log() + await cleanRouteModules() + console.log() + + console.log(` ${fmt.badge('步骤 3/6', theme.bgBlue)} ${fmt.title('重写路由别名')}`) + console.log() + await cleanRoutesAlias() + console.log() + + console.log(` ${fmt.badge('步骤 4/6', theme.bgBlue)} ${fmt.title('清空变更日志')}`) + console.log() + await cleanChangeLog() + console.log() + + console.log(` ${fmt.badge('步骤 5/6', theme.bgBlue)} ${fmt.title('清理语言文件')}`) + console.log() + await cleanLanguageFiles() + console.log() + + console.log(` ${fmt.badge('步骤 6/7', theme.bgBlue)} ${fmt.title('清理快速入口')}`) + console.log() + await cleanFastEnterComponent() + console.log() + + console.log(` ${fmt.badge('步骤 7/7', theme.bgBlue)} ${fmt.title('更新菜单接口')}`) + console.log() + await updateMenuApi() + + // 显示统计信息 + await showStats() + + // 显示成功横幅 + createSuccessBanner() +} + +main().catch((err) => { + console.log() + console.log(` ${icons.error} ${fmt.error('清理脚本执行出错')}`) + console.log(` ${fmt.dim('错误详情: ' + err)}`) + console.log() + process.exit(1) +}) diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100755 index 0000000..d941a48 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,41 @@ + + + diff --git a/web/src/api/auth.ts b/web/src/api/auth.ts new file mode 100644 index 0000000..9dc7b6a --- /dev/null +++ b/web/src/api/auth.ts @@ -0,0 +1,29 @@ +import request from '@/utils/http' + +/** + * 登录 + * @param params 登录参数 + * @returns 登录响应 + */ +export function fetchLogin(params: Api.Auth.LoginParams) { + return request.post({ + url: '/api/auth/login', + params + // showSuccessMessage: true // 显示成功消息 + // showErrorMessage: false // 不显示错误消息 + }) +} + +/** + * 获取用户信息 + * @returns 用户信息 + */ +export function fetchGetUserInfo() { + return request.get({ + url: '/api/user/info' + // 自定义请求头 + // headers: { + // 'X-Custom-Header': 'your-custom-value' + // } + }) +} diff --git a/web/src/api/system-manage.ts b/web/src/api/system-manage.ts new file mode 100644 index 0000000..8f4a8e6 --- /dev/null +++ b/web/src/api/system-manage.ts @@ -0,0 +1,25 @@ +import request from '@/utils/http' +import { AppRouteRecord } from '@/types/router' + +// 获取用户列表 +export function fetchGetUserList(params: Api.SystemManage.UserSearchParams) { + return request.get({ + url: '/api/user/list', + params + }) +} + +// 获取角色列表 +export function fetchGetRoleList(params: Api.SystemManage.RoleSearchParams) { + return request.get({ + url: '/api/role/list', + params + }) +} + +// 获取菜单列表 +export function fetchGetMenuList() { + return request.get({ + url: '/api/v3/system/menus/simple' + }) +} diff --git a/web/src/assets/images/avatar/avatar.webp b/web/src/assets/images/avatar/avatar.webp new file mode 100644 index 0000000000000000000000000000000000000000..bea307b7d2e5e1a9d952d834eb57f73605dc55b8 GIT binary patch literal 954 zcmV;r14aB&Nk&Gp0{{S5MM6+kP&go_0{{Rp6abw8Do_AW06w)$ok}MpBB89-ZP?%z ziD>{53Yw2F8^s*TeR(t1;sau?)6x+IJ1ULup4dPqlKRaw%L00&PyRBV@TRirkLMoh znecI$mizfs;B~7~IjdMHs2{A`^5xH2WwlFsv{w~GUrD-c6mAR;p8@&L1l{|oRAzySXHiNX^g1uHD- zk>h_3$=>CvsNexHz6NhKDop!@&$-)@k^G zpxC;k(_I+TKnb=kfcV<3(d@OeA$m8)Ux;2hwn++&N9ggUrswPzKFBA>H1|z9H9&|78oYJ6 zqmYWjF_7HcNYd8We?h}xgx?|h{o>j~Y6Ort0-Tr&f;blhrY6~brlb8`aT?w+$`-AaIO=h`ieN z$~Gg-mXxYMelEHs`4HK%%m9=g4(z;v{W(jv8Yy0+*!MmE7Wb&l>IMYrKWC`)P-M2m zu$RqPHPng}*nD$a!U%{{NAQRJtAxj3Skt$rNr5Sz(*ys48Sm7CQ28#6@u$SQp8jq1 z)0|6ELT|Zgn}T|MFJ^9l$ZpXeQ$e+^QI50?#DWtekW>TGc)Xar_&#%;r9pb{&G`?s zaP-tYMb^D)AT=a2z3RNn!)}O2cKg(?2+hD+pV;B^mgx83f_)BBT#K1H) cmY(20IDjVb)DMN`D2T(p^ZM$jri0Q@7_2mk;8 literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar1.webp b/web/src/assets/images/avatar/avatar1.webp new file mode 100644 index 0000000000000000000000000000000000000000..68e256c297cea6017efb892509f005290f32c95f GIT binary patch literal 2296 zcmVLHNCsINV&i=yrkQTpUuSn>Acb z2FE|`v?5W%`1-J1k%&b^{1D+E*v&*cgPXpOkC1j6c3zl~THPT33XotPrLtyQ6T5WG zK)!TAT}RO#s23>vzA4R_R4Z`A z)!tkNowc|9f8G#J-=@;b?8g;}XfMv3vXpQ%%8H}JEd>Q-E=Is*dOG0dKP#mpzK6Zu z!~hOswhdJQ>~$JV9YE{yxG0G7eyp!4WjSqX4`vFrIzpIQ0C7!XfcamHM$sc`M2fb8 zp?r)l(JQ^6s8qm)T%}1_SBx8Ei&#F=-z9}B6N}fuspI`o)nIez>LrpO#ZCv{{2?o7 zizMB-j`ht%neuFw9`x-5QLn<^-`6#2Q&Jjy+o`+KTIQK8(?v)43qCH3lBIY}J^8V+ z!&1a_htv&I@_M)c0092^2zg+Z2FA6yE){J(rlOXGqB`_f57m^A&4PKhbc!KFs7OB8 zdlaLr7TvuJI%#4#-P7{r$I-Vawb#sYrY1ZHul|y?8{3F>u|DwD9~|=ZB=TKNp#;aH z6p{8M)-)<+c{^=m6B0X{RudGJjVD&&L_)4Q_O-UM8aHDF436jm=6;o62nG$yl1N%V z^US=K*lNl}uT*xK!uV;kLRBU>FcxuN!aJ-6^T-zU<4BjZHoo!!CG`NKe=YJ;2G_dxc7RRuC!*ki8f7LL%n`-+KYn3a!J?P@;tfvk2Nst5@wK3y zRdIUSYB8(CZTDhk8nxBMCfFOiau)hb=Rx7ub2hR3WL{Hyrpsf+J+hGLMDG-~woLz+c}Z@!7eEkAC9e9%w>(!zlJ@E3xS^#||H1lMw>!0H5qz`? zDTk_akMd^!5{RFXFk>aW@yCUb(ne!t0QU(B9Kw(BX97mmD2irsOwo)JKe)-C9>6-W z8>zQiA&goy3?**OV)g6ha!+LWYa$kEDvBX5cFt_J}Y0=#0<)9Gxp~2QlLcB8}FqW>Rt=Zky2M5|a z;Hc#Pb0Ak4j|G(TYytIeThz9Q7q9nW1+bIw%qZ{hkGJdCN^(2I&!>>*jiM;zsNsay zfD%f*gMDH+xlIIpl2^zsEveXG-)Itxrc5f{VG z2+%x%J-=#LxVgp3INtBtb9Dls=&UII?9k3BspvyU-yDWy#ZZ~p{*3H`GxnG%ZA&CL z&*2_n6+ig<_r zr$au4SfLz_%DUXgc@3zY%{O#}L*SV!h@$ z0&J2lMSWRS?_2t+t%IovykIn^Gf0E(4)1S?`Q&xoPeYMB3I7AQVb*GGTG&qx)z35` zm-*_NYHX|F!A=SFfAm+@A_k_kST8zZ^As*W84Ywga!W-8E;52QU#|P1>A>0AG0ZKh z1{j-VQFdICVO6OER;VL$V>bR5N9PP03GmD;8Qdn}J)%-_?J)}HeZciZ5q@(VMY4g( z+?!k6V8t}Nw0vuxbc5?JCw4MK7peL5#PnJHvA}FX`~lUGz3J zY|qT!%$9q#ltNvl4zfC+1!n>208_(%8;BBBv?g=;kmh|_nCPRCC&3y^hj$-@-t&>} z-b^A#l{w#iwS?_Z7@c;6zG?p5>zH=`r^z&UF!0@+o>6G)n+?TjkXzz577X8g2C<5o SVD2lzkuUx<_ZG<9l>h)e2Ygfj literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar10.webp b/web/src/assets/images/avatar/avatar10.webp new file mode 100644 index 0000000000000000000000000000000000000000..a813d4c23ca9d2945fa089f0e4281a7e6e122e42 GIT binary patch literal 1410 zcmV-|1%3KbNk&F`1pok7MM6+kP&goN1pok0BmkWODxd(M06w);rA;R!qoSu4ia_8N ziDxRj@G(#c8w@MiZ2Pm1xtXg&SV}tO*upn_$e3T{3IKsG)2P7zl)<|FlG0beLZ66? zP8MKY$g2W!|C9%Jz7n>$67R(*k0AH;%P<`vmTFO)=V##pXZCZ)gtN(Z%p*SC`lfMv zD>&oYT&*hXU^Rn_m=qyJP9*z79qaCF(f*3BmcvomuMR=u8kHme^Vh+Y#SverH3t|FRmiPRS&TRUoCKe-bsYMg$7@O?MPgGwcid>XA$|n6Z=L) zZ2uB6qou3e=(axuwzL2Vp-2eWFAM$_IkRILs9hSH#S0Z+MXb;wb8oKdBte3;R)bA} z*+BGDjYM<{i3fa8{Zlse2Nb(xOK+^ybEndK`Zlp`kDA%hMHUtv;J0j=R{~n*D$iXB z&!JSJ=<`@=^kw-&i^Bsa0`G0K_b+M}`aMe#zB&dJWAP(c47c>965b2)B(4!Vx4$; zw1H=hX#>fy7P?nk_rl#aH{h1yQ$2BN$smP1u-VbsMnWv11? zLp058?xk1an|Sw(?NjDb;uebjVkWHHiQ7W(f`P#D#fli5R=&I_)-XU?fc6SBhQ?kN zJ$AQ42J^$gWWE%oe-N;M|ApbrPsxz_(cK-~ZAFgxPE2^B`Q75YhbMy^7Pw~YD-ChS zA=>F9_HN9N3FH?)0f>*-9{l#atdGpurvFT^8H)aFa0%PFn~F3`ubg8gY$SI3_!~2` zS_l(^H=T)7S7kzz(;dvwpf17sUZ}3lKcvMGGLfTwlHX5cAC;>SC~wT_CZ)TPLJ|+^ zO1^m4YAnp%qoe6yc=?;Ew9>7%+BplwY*&G+-T%ccSxkn1Qw7Y2OFWn*`da)d=D&$8 zPbb~qkF!m1wX=~@J>R*@ZYZ}fr6gbA|E>MzHvxRQN8k;s6giiV7hzBm=J2h|Fq!!k zd3*yobrI{Cf)}+vu8w>&2vWX5W68fofgrK9qFsRY-2?*b~wc7TUc73C>=31jaEDl4iGgxUWZ zB4rTdKzTY{)gGK&8Am&B2>R;B9wKiG*l5R=A=#t?3mmUkxUGS7kn QTF;h&;#lF?m{x!Q0CCo}*Z=?k literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar2.webp b/web/src/assets/images/avatar/avatar2.webp new file mode 100644 index 0000000000000000000000000000000000000000..6716e3ff9a7c07198562500a8b7b15d86eddd92a GIT binary patch literal 1214 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 SOT){6x=sa6x ziDv-LJda-J@i#;hzW8~^&ycs+x+Z)S_h@HPs{&NWIsvF}Yf|wew7S9Za;U>aQ$~y5id98~wmJMzcHjDBq)*uuBf~SLu z)Gp7IuZx!uI9P=5&_Dqy#yuEZD#{4@MMZH0ciM^|XF*;3r z9;A{NP`bRGi#ZJEeNWg`G5RMK9xvPpo%yTs_LyO5m9BZ6M8d=6DrzKBk#26MucKg% z@Jmlisk&6TglV1uE@+Mi6dU?WTlj^OWWD+VusOAR0QO@7&Is!osAf6}pPg{NW71Lz z;rRW1v6D6$EyDKb`U3Y#iU6JgDBoZ>M~GrxedkT`+jJu#XwKj42Uj3@#eB16DhPMe z?b(<`( zs`~_!4&_XB-I(Go!Ti!(B zzX28-dwQ8RJL`7&KAUMlIpDVwTj)zHMR}xDz-D@3~Cc z7|ZkGAVEdXA(ao{SKLu?NRz`qi;$@P>N24l+deOf>s))>An)p$#2X!_5;0xOako)X zjIOe+FA+F+H}$q69Y(8V+=}dvt+qbRSF%REpd_z<{gNTS|1wDRih&;=->ZRCM90dv%N9SSzr(f;PM-%fXrH3Pfe2f(DQ2NV&X2&-DORYw}T--4;V);q5 z_0DY^&XL%`xt(>cWVu58mGS#f*E!W%9W)`^Ht({sb?}UPP-X{41Jd+OelWn1DB=!? z?MC>k2#5dG-RGm{KTf5t%~`eqSg6fR1{uXI1M|uCGp8g4^^df%E{456Kx`7P(>#EL zmhGFzWA7={)deTE9PtU4F*C@=vOzZKQHFT0AgxVwj1%kfZW*%UC{wbm;GRO6K_yc< zw+EhfXW12v2HeMBD0!Hq=)pPKt|b&p`+N5s*oO##&@~ZAhA7o3S52Pz{bcveBBC5r zCvhxa8Nh;#y@aO<5eJyW?$Hl}R1WvJQx&b&?*|4N4T}!E?@yxeE3b2sV1`a@^R+7J zp27xGD+@x*xmx7d&{M%Yfd#$BB*qzx1LzqTkQa0)>ycf>%P|WAHa3;I)bi6;o@^&8 zlF!9&kvZXgXme;5J9SggsLI9x!bbkq`v&rTj4TS4=%It-3h6O>)z;jL+26!mg@0s7 z{4(NDv3IR6vYgZOFlTl!c!b?aLBP6L#|@u(xpJ83IMLF?7);-IWQly}m|w*of%ad$ zs4&NHOL!Vvik=DMMaQ-=WnunMXR#%% zIGbDlMeFoEBXYga#NI7n8!Wj(pa!rZe>u0q3$8d;_hEE_F!k`bcamCdsV5*a6aolrOAz(+B zd@P)%Sve@b1T5Gzk>0D?uqoxzL9g;Hq#>W|iLtr^A-5BQTpT9ebo8522y|Yi&}N}+ z!nlr^T4DNF?&R$Cvv9rm^Me9(!ik`_w@ulxS$XEX<#KKx{wypTfIc~YJvA0GHEjBa z{tEX`KyB>SnrEk(@oucu?SqXbBaEcn5w^tTc2WGK(%4D)aa56stfLL0kuMEM7Rqi; zo`xQal&o-#zU;IGUcZdFg?D_jdE*(s*c%p)6)*r98xXMy&ILWlQaYSn60FD<1I}dkS@TL!3$rhUX&agD&Hyk%~IJImH>Onl3MQU|Ay%bPf&#ECZX4~J>IhG$r&FUr~Xpd&X)r{G|={i?b_HnA@GVU z)1>)kALc5Yj)mf+#4Bd2-y+^^2?%cJf4F uD!N*}&DvQ+z%4JRZt z**wNaQ)XNFP~Hyc-5LfbIC&@l{_)m6_A6qduzFFQLe7hG z+`Dg7`MP=8PMs#W z>)Zvn?0Q`J3a~$cdz%M6qCYPRal2tH)ADr7pFDSr0hhEecfKJAnD?cGv8&)tngt<% zBEa;{SzSMNkCB(s_+f1EmeKCik^88@dGSs1>7b6hrH2O!%;F^AILl`PB#npS3=mrv ztu!z!I`*4f;;#|N@y$x9puJq@e%MLELvFmQ$7sQp+jYi8zXn z7!yB{(N+rF_;=ECz2YtbVQ{P8&hmx-SM^Px`+Fx?{VVD?*kb%yULK5fou&W;zx@57 ztjN5fd9K(%4A*ppn$C~0uwAicQHGUJqaXtTq-SEO3i*S5UtzkmT-;2S-*yKx^S4)p zu(xtY`uuGFdnEcF#&D-^5r5^8ea?Ikb(enTfiNd*6A`*r_w3nuP4|nOjv4Ar7>Bn* oum=sD9}=@(JYWHzN=bN_eTt*WCui4r!^|MQ?*(KtUpN2&0LE>RZvX%Q literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar7.webp b/web/src/assets/images/avatar/avatar7.webp new file mode 100644 index 0000000000000000000000000000000000000000..e5ef6fea28c4dea1f9e10e78c8183bbb544b75d6 GIT binary patch literal 2712 zcmV;J3TO3FNk&GH3IG6CMM6+kP&goj3IG6bGyt6eDxd(M06w);p-ZPFBO<9-OL*WG zi9i_aoN0I-4^TUVIodrc|E|84pR(K^4Ye}2him)-9_C)Uf2WJ@`4U!&jCB@!jQSWf zkWi1W!e|7=uqM|}&jWCK0bJPHdljLAMtSOBhK2FL9vIJwZ*jR0^qz{%o|;eu@jIID z>1Dho=M;OiIBQ6k90N7)U-LUB4fNbnB zcVd!#l@ge#a^5^>ovyb^=oxMdg}d1U^l`2Fm~d{`GrP+hqwRdlsSp zZ-P@AID|3okzavUmSMCE8gScpMng0Q`5{KtM0ZUi0ncfw=fKTHEdntzAfZJM&W&Uv z67K-k4KmgBg(%$Njk|Jg-*xprnCV_zKfhnobWW_!Q|jolDX+OMrq@H(J)qOVrR-qv zRIBNovB7=pht`u{?#HO!58IuZqG!54`tQ%x7=FyAh}uj_ZRsSbgQ2Z1#W=b?n({iD zm$Y-O(G)Itc^B80u=Sua!8J2(sb2BUsv8#G)g?fpX(OpesA<(_`VsuMZ6dfL41iYJ z?*M;4b?t@DbYfq${(Al({l4n!l089uXnn-u$MA2MX|98@2|Cx#>)`8d($l@QFME%7 z_6}QMOoeB?j@rwb*TH=HoDV(FiLvgaLY2@MYNJ=k3TkS{3csOEw_&C-HxHy;ajX(Z z@#lxXph1y}+iOME!-6i8f&P2>gA0==<@-?sKQ{II&j$D`7MMhkLpi2;N%;HPy+G{o z000uB!pDPiCpwuSQQiLY##czfeQr3R&d!)&9!I35n8R!_q{}a)ZBY|b^-u<_=bdjLM zsH;7oYDXr^TFEo<|H}DS%GT1C0L2i5=EqD1g9i2J^W;u>#;j@z=K^hzFU= zYY2QMrIAKg`G1?4OlL+SauH1y`A{Uz#84Uv44XbR0-O9-ol{Wgj|tx$nKLP-P2du% z-Q0jz6G7SVI+1s!A4*xZp5N|eZYSJHTa=>)Ajvyi?EeB#w59bKeTsO@(I;I(WI77R zTk~JMwUgwE@w2~AD^;ya94Kp&WMaW0WwLS@H`8wZvU0zjb@itK&I(FIx@VOp7hB0H zotLS1e03mJ6E`f%jAQB%^&LSPkvnigLijZK-J)3ej9wE3&g(7ejXm+7C@$Tjez_I- z&tVa7hX+KoAg}8LEcb@&UGwPMMlWWtOM7&0LePzZIRAMRmZmAs1`e%T@SSGa=*OGY zhQzw}Ca-M_vl&mQDqK~wClFH;H49m0Y^Ym{L4&A ztXLwKYl_@y2ljr2kkQYC=V5w0{+F69RiFdTm)%T&!mfzP-kw#`aCmmRG$H1>hu-6$F77UAgTvGa;v!U9uan0`(ci0>}JF8n)U zn-=c1mA3i;uD8W=(^j(nz4X`EN%~rB&EFjc;cV(?)IMy<#JIAZJKCn2H!jd#+FP3d zh|Te*k9)A5x_gw)Y-n@x$ zX==z!&?XI>ePW83uOwKEkDLxe*zeJA4Pq9#;q%y~fS0-v=()A!rQFSY%-}3u_+s~H zW9zimEqBTB=n_B`hS84Ispf(XDkch~Aqqj;#aFJNd-kp*#*uNX>22y$d5{l&6GXjo zj>~j?H5qFF3f<<()y8WFAO-OjT6Bgy#(Rr=E4LU_h_>6k79MC*;=Qq*6sN;;TC+an#IgsR6KrAO z$c@_{eBZ9#Y{_X^v3H=kdKtigpF(Gy(*r=wmktt#QMs28C30ForRlH#j}jMaWuk@E zA_pE51~<1C0n?zwLyZVm9FlRO5^l`sqbf$ri^uN7MVKB^fThgOshG+$Pouyye&KMJ zbG2%FWThe&(<80fo5owGc^_cOzvBH@`F?*~*BqZnd>}Yoo_nqw(`pk)V z*Z@dqLMOC}XJjR@tX1aZzBlMg5_@O^19uBchc*Buw}AJhXJgG{jpTle SlnZDgHxy*uU+B%U0002~4@gr0 literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar8.webp b/web/src/assets/images/avatar/avatar8.webp new file mode 100644 index 0000000000000000000000000000000000000000..b66e48f7b056cc570d368c4e0f5d962216d29971 GIT binary patch literal 3946 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 E044g>D*ylh literal 0 HcmV?d00001 diff --git a/web/src/assets/images/avatar/avatar9.webp b/web/src/assets/images/avatar/avatar9.webp new file mode 100644 index 0000000000000000000000000000000000000000..7974139777dcf5db9848b8f0b97b58708d60d369 GIT binary patch literal 1680 zcmV;B25Cq`s!Rw6r*sJG2T- zxVvRExAV}fjI%u($cwje4h=Qh8M^Vhm$-}w&Q^=5w2y(KN)o9n&3k|tlSOs7*31#L zZd*A}kBRj5Ao@<*ftTKbJz|QgG6yI1)!FB5ojbeD5SIT??x5_85>vF3(iY~_s}B6z zJIL03h+X)vz5D?ncg&2BI7M|1dFC`>e0JBim5qthgnd;jgMITvIsJRf`(5IKpu&FX z-rCs3S~Eqe$321H8YQh+4o=)+a^L}065GaGUCEK0%hpy+*Qx>$m=Rv}gtBWa=77lX z(VYa&S4AY~L9+k={`NoGgSxyFZfl)Pi^vA#KNDL6dX8Q>us5c5t;6L0o&x6W@m%lA zDM)$!t-!khhGc^`eu!>cuJy#x%f0VI5!yaa=td}Xunnnhr8ev;uMHIhcr0J$XyqK9 zuX57K{X^gJE0uk0OB+EWP-c7ns_RMON}bt%QVj{Q$m;#|WErNiIZFFI{kvAmC0JDA z6S~aC#;gaT!rVstFalV1u>i%0BG3(ck`%1_k7)7_k4dLbflBWF-$=y zYXuFm?Pkkw>>-p*ze|ub5=lw7qz?%ivp7%e~o)zuOB^QE*8~1b{~M=$X$;g4OB&<`_pQ(fAcH!qE9%DO$8BLT*BZq0o#qHcMiMyX~<| z-=+m)v%h3{wy>hD`#}La=L=Ej{j!TN*UL@gmGY6yNO_SKe0~V$KMCY{uAJ4ke=00S z#(Ss89O&bj<#0={Y6sz^ccLBU{iacl0AlStaKAP5^H&%N#arv<9wubKsR@^3#Bh3j zH^cK&-QW8*&El;j|62<;pvqeA-&I-=$SY3PHw%JH{W2HBMLgw~VZOlbad0jQB0lI? z&A2OQ_kK9>21w6V#o%fNugN!cbI}(?Mnr>8{3YLGv|JBl>tsulVv@2-!G>Bp(?L%z z_4KMfeT23VcUa&**Qq9gpKCv+thWy@(5FZ;SP-pYt;n#N8hgyGcT~yp0o7wWy%$XW zaP2yYd?+xSzH1i5u=5^{bo z<@blJ^<1?6)cNf7eacQ)dqC94Z}gOf7S(g?b+Z=2PdS8(tvK#JzU@=G-<7lJE^qf| zB`U!>-htj`Lio0dQ+Ic}ohghs09r;1A1!tJ0XI!YVxlj%Az=?yczeG5GPnkT{O zS^iGH_&v0;c>ZPbqB~?md!#IKb(FKUmVRUw=bZ%(nx>OTGVw(Tc|O;5oLA5MX`wQgQMaiXBB zpcHtwlRdTvXZ+CKlb4)N9T#5@t0>l_Y-OHSL)^qXurPW*__rJjBN4{NpNd!kblcd- a+aN;YfSUTyaGIA8bqP%u?tI%K&_Do!2TN1{ literal 0 HcmV?d00001 diff --git a/web/src/assets/images/ceremony/hb.png b/web/src/assets/images/ceremony/hb.png new file mode 100644 index 0000000000000000000000000000000000000000..41033245879f1051f34c33766bb6fdb4fffb38a3 GIT binary patch literal 2275 zcmcImS5#B!8a)ttO(dY8U=WaA1Y@Yu5|SVSLls*nQRyN9At)NUNHK_l2oV%TMHq%6 zW~HUV&dd2T-CeP=QYuma z0LbETXb%7o0!tx40s`K`s*ZSpjlH{z7Y1zkPUy`(6yFK+V`I>pEOS2QpB60u2atRa z*&=|CHo&?cCD<6u+7|PZwe=5v|Ia}Tf6!8(^HbId%`rgn(T)P-2M!tue5VWrG=c1Y zkT+Nd_-qS47W*&AGXD__%+_x6kNBj)76=aZn@?`(2$HZY1yh1oaM~J2Z-T)_>suDMOUNnq>hN9D^-_6J|>Uy(NO0(zje=p;q63A<>}zMlWb#0TvU62S8ac z07zD!Aq9aSF*wG<)f1pZWe1pPJ%2*G6%G6F_GRUjI6r$kBgt=^G5T*;Bzg0ljC=>^ zTA$bQySC>KX({n%kGSrXof++Ks6K%aUFVLzA`*S^mMFw_IJ=zSVXphv=Z`g|v}=@v zkW=o5F-T**U1gO1`|gn_LJ|OoE#T4iUh%`+ku$z3_HZ#yp`3kNGF)E^iVL*YYTQv? z8+LCYGgG%>Y?9BXh&0l}l}5J}sGqsxre+&;o>0IpvWi1UB>&w09{yeJikG(;SxTLS z#Wn6tiR!tOM!#_~RsUW`wJIH9zsm|cIN*~Rvmf1v}8ir>tu{H8@G7<-_?S9f4WqpX>ZAj-RS!{3iHgYJB zUwD;AvY_vo`WkkWk(^XsHys=n)m2qKB41Wbsh5zOEWl?xo1jVXChu6YO<~L&VFjYw zw#cTr@2bd+kbW!cXN?C?T-A;JvN^iHmR^4TNyPNjBe~X$BU#ALLS7$a{CvEOYDRRV zG6%F*{<3bL?KU@yIzv>b<7oQjr)z$E;WZSrh^J8kV~U^F+JusB<=9WDqlDcRbn?lo zDw^VpRVgbFTqxPpSSGWpx|7=Vg`GJH({vk>Wl(p0=&mBKY>r9U9Y&BHDmvuUl><-- zke+~Sm&f6DQ|Cw)7o~azQXhx8IGA?04Egj`Qze(paIRz3;vJsB&Y1brzu-=qc%C*W zd2@Bwt3g;?GotQhY6qXmmG&yXwFUU)Yf$?(kc(W`pdCN5-v1v zToE&Uf$CjP!!rM9eto^UnAX)6u2_d=JoFBbCuX!>Up9};7BjBz&PorOhBeMurH0=f zJhhx@)-9aJV>Kk5tAI5H(RWDg%UMq1Vdil_oj?8Cn($3MxV$#rSQXuVp<QP8WMB>}Vqe`-kf-H`C_x$6V+`uqTu6i7O9 zesm99cek;XW0C5kb#mWzqqrL(Id-*-nH3{LNVOzgqb`tZiz|gS zah?EmIB}!yIU4$WTNq*NILvI~9UMQ^rq$Ss{Djx zCuivMP<2n!v=%s=P&EFXkiv{8Pww@7q^4wA($G!y(@*=7XW2erCPmTxN}3%W@7J@n zaUixi-xr&6qZq&N&WHO&%gqHbB?%`2iTK}Fk8vLLzZD8MFBRvK-fQCu49rUh$Mx+uW!0jUCcU-x}#WRz?c^S|49F*g^)J36r3gg%c2}Kte-E~7qe#2lqfT1 zofWC(7}s;Jxq}l?&*3doa{VHgsRu_M2W_J`=m3<@h2QhDWJ^j!7Kdz;Bt^7g4C!;^ rtK9?{oKY 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

    TD-eWE$*|X9h61tDog6 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 ZSO66fIy%JW+RF@^AI^XP00000008fkeAui8$xP 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/images/login/lf_icon2.webp b/web/src/assets/images/login/lf_icon2.webp new file mode 100644 index 0000000000000000000000000000000000000000..5e4f3fd0dd461d4e92ab3222aa9f546e2c4ca2bd GIT binary patch literal 25016 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 Ef{6$HX8-^I literal 0 HcmV?d00001 diff --git a/web/src/assets/images/settings/menu_layouts/horizontal.png b/web/src/assets/images/settings/menu_layouts/horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ca779bc78ad5bf45e4b26e4e75e6481295383369 GIT binary patch literal 409 zcmV;K0cQS*P) zvbn(=z`lWa1n(axjo^q~;4t&bS@^%KH`vFc7`p2Q0I=EJ`>gf&x{iCB)gIPy+H$?# zI&Rh@j<_p{ds>?h{E0Z?i2HPk&-@4Ch&w}E!NafkSzG;R2LRxg$z)yzam_;Ieh_DF zDlv-FwX;E-%i6gQ+qsC>eh{Sfe@zd^TDtroDA!A5hii^ozT^kui2GyQ`9Fk7vFhZSNmiXsv;oD2I1{Wo zId{pb(`jB}R@*LWXIIUn~YTl0Pqhc#kP}ccEGly z+kj$coC&s_oYRhWw4>dQcKbJ=%iasfw_w`=03i1PMtw+J%=}$J00000NkvXXu0mjf DJf+bZ literal 0 HcmV?d00001 diff --git a/web/src/assets/images/settings/menu_layouts/mixed.png b/web/src/assets/images/settings/menu_layouts/mixed.png new file mode 100644 index 0000000000000000000000000000000000000000..c82b58038fcbdab260ef4df85cd0bf53fe232ecf GIT binary patch literal 431 zcmV;g0Z{&lP)Yy$(XK&WqF=)bm5 z&;o+?zlB7C)K}fi`)JgA{>Jxlc!KXfgb6|jAx2Z&sveg*c(ShsoP#IVp>AiIo`88@ zr(tz#nx24pU$**en#2z4P8E+W)>TaYs*4?@TZnE@z)$QW={$9Pq+5t?5s4t(vUL8d zk>BD6MzrHvYjymk9q8Cd*CO3GT_5SB%UpMi1j=u9n@Hh+b*4E&dq@{atWMW0ODCOl z4eTM7=ZGc+P_FT6@YfY7)!;zX6{(>H2c9mqfCEieq?Y>qVa~er;Qc|m&m&qoqK^6@ zVBN$3Du2{%NO?+K9&mf!tI@d6TsrBbTaC_bh#7oGv|&;J<@f7bI_ad#=vP1p(n&`P zAWTV(SImLAJYY(!i%iy}>sF+bPPzt{A(q{UW(H7(@yY~TT`{;`%(2Y&+R=+kRYC}n ZKX+7z8kqwQRWJYm002ovPDHLkV1jqY&3ym> literal 0 HcmV?d00001 diff --git a/web/src/assets/images/settings/menu_layouts/vertical.png b/web/src/assets/images/settings/menu_layouts/vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..16e942b0e9f3919eb199134692e32004544b280c GIT binary patch literal 439 zcmV;o0Z9IdP)(# zD2kaKe_n4u2iGeYpx=`+HyKd(2SbJL9}%}U{@8`CedQuyi89i?#7jp@$(zBsZj{qeqluEicf z*6Rj#SRgdoBZzCSqT|}D=pbE-bUD@21=xhdeC5x5a>aJJ;D*%S|aFn{?|8j z&_So{5lo1xtA1;g<9us`n+K#rx>Kg(1@+SDdjvb0&iU3z)8W<#y8VnK9qURScO3WW h%8Q3N0002Cig literal 0 HcmV?d00001 diff --git a/web/src/assets/images/settings/menu_styles/dark.png b/web/src/assets/images/settings/menu_styles/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e1653b7a657edd6e2e83b8b479bb1b4af4620e15 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^cYt^j3p0qNwsRej;t%i%asBk^tGc?@&!0c-?cF|q z{-!dsl@Ta)!PCVtB;(%On+JK17;v}*%3nHAmJs>!0B^+Y`oPQsN=8b26YP2SNGmV+ z(<1Wuz(Ft&-I2P^pJ{r#^(-^z!+)>dS^035-TET1?9HMwt^CXP@rda`@oSCvV)pRD9`Ic+V>RN|cZ9-Q}41PonSK>R4CZA96Tw@1diy fo(~{Er;M1%fByXW@#Dw4 zckfEI`&$F0PIK_}Tq&4}k`{J&n3>JYDATM6ZXdH1D1|rwka( a+00#Z%j6q-R9HLER}7x6elF{r5}E*&a(=A< literal 0 HcmV?d00001 diff --git a/web/src/assets/images/settings/menu_styles/light.png b/web/src/assets/images/settings/menu_styles/light.png new file mode 100644 index 0000000000000000000000000000000000000000..3007b99ea227f5f203ad309d28358d95aa40aad2 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^cYt^j3p0qNwsRej5(@AMasBk^>;M1%fByXW@#Dw4 zckhOVhNk`~V+6{c^K@|x$+-9SW+HE^0gvlLR`&CZGg~7o#6IM+GMaerh)K|XF7e~v z*2wU>xm~svV6cO!eAexM#~%n4hWb7dn;9*-?$zE?M-Ku)rRC!eF^lI+S&sX@aO&C)xGbBzUl*1H|~cH`T*7S|L8+xoqd^+pNbuX$T2rdEOtd33n=<}rH(r4Bw?X0 z19j9Zq$jx5yQq&=Rv*u@&uV zZv5wD2VJi=A#|57GsIK59E1=t&(Kn59-)r9I&_O8$G{R>i|A%Y2O}3yS41Z&E$H;i qY~iWsL1-c78CvShBh*n>SoaHFuY$So!<9_{0000$3b*O46wRy83EweL3E-p zTDPTC^?=rG?@;xC)#cYaJXSqGb<2^89-z9fBYo%rs(T&jp$Dk$Kk9+HS#|cPcrJon zbI(i6T+zM{&>wNHId#;{s7qL=Yd{@!)cq1mSEY~blI|(J>{oO}dReaMR_P^Q(MdlO z>i~~A@u&cbFmcTrMB15WsH1KUUF~df!d~+osw?&ewtya>4AqH=XPy0+o=3$lg6Eny zh_o}$P)FSyx+-_rpi9hVN3Lj_1$lsMGW5LKxX|5xOc$eay9h37-XPM>JVPCIbLeVE zkAX{UAEGNAI~aL@@(`VV>$4IoA-;gkJ&1+Cgm8pmlOdPn{^_RrAUFTa z?Nwrlv;qeX95`^`z<~n?4ji~TxhJFJb(>akZP2?200000NkvXXu0mjfdG+rO literal 0 HcmV?d00001 diff --git a/web/src/assets/images/svg/403.svg b/web/src/assets/images/svg/403.svg new file mode 100644 index 0000000..68790ad --- /dev/null +++ b/web/src/assets/images/svg/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/svg/404.svg b/web/src/assets/images/svg/404.svg new file mode 100644 index 0000000..48e1ca3 --- /dev/null +++ b/web/src/assets/images/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/svg/500.svg b/web/src/assets/images/svg/500.svg new file mode 100644 index 0000000..512429f --- /dev/null +++ b/web/src/assets/images/svg/500.svg @@ -0,0 +1,5 @@ + diff --git a/web/src/assets/images/svg/login_icon.svg b/web/src/assets/images/svg/login_icon.svg new file mode 100644 index 0000000..4beb3ab --- /dev/null +++ b/web/src/assets/images/svg/login_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/images/user/avatar.webp b/web/src/assets/images/user/avatar.webp new file mode 100644 index 0000000000000000000000000000000000000000..6d7234b9eb1d4962efb9d01a4703fe4540d3ec34 GIT binary patch literal 2130 zcmV-Y2(9;0Nk&FW2mkB(|iQh=J6I zyxsF})jWZrx1zAfq`;31uOrtG^aslZ++-*oHbA=Ws=r@BH$nEcT>f}v8c<1MaH|2|TsFVAnjLEj8 z)v3~&1Tg$gPbv>1OlgM(i_=4U(n13#54;Dp%@xYc7c42<_;HI{&blw#e zNxIkz>nHOh3a&_eJ&|2SelyaGrVT5H-&xr3qchs0k*P(yrJZP27PwoGyrzP(HQNq) zdnp%e(8+0Kvd=#P@!j@e@d-;H6ynU*1u2;INSHcM)CHM>4FQx&W>lUOt}HM!x%Fka z%X5GL{_uBtT#(I|h-+J>-VdN=0k`87mNLbrC!e0hz)eum&xzb_(qj;)6C_`RprQp+gHMV1x!s=;2Rb%2PsYfg* zh??Ve&~jKa^pwSDNm#|Es3PLmb7sTuZ(x2P^RA`Y&UPQ||EZaGfbNJ@(YlYt9%HYh zZd6LrWC~-IbvBzuEVN?AAJR!ig~P0-MlXvR7Z7bx7?0-n<*4=SW=S5*A~>8h3`T5! z`I{Rw5T_p0VkFU17Z&8dG9Tw3V-0ioX90$ba-jE=Z$T+Ka@XHj^&Ah5&3^#B4xzV6Zt7h5hW%IMfcreWr(GyA?@Q(v8ZjmLibkv4Aj2n8A)< z=`*~B`m=?dsA{+ox>qZp7zsL(cLHfKRXL9|zDz?~SSeGwu!UZyhdt^PsU~45yW9Oj z|7T$>K9wSeG)6;}llOZ5%}(}z0=hks13|B$4L31VdOF*sd@YU?jiH_PWPK9UZtNa*gq3V&9l+*yS!e&SOs`1NHt-i^1q)x3)% z>It^qg|*?RqvUXDdRScQn|t^Lu)KXY5VsWF%#?Kcx(iSN8x!^6ce+4JmX87y6y?wZZ4&b%iwh!QfdXkYoDFzcx@r36&& zo2APee^J><5DkZ2e=>DFvmAxNih)1iwKOrXu;mfGI%PS5k!rJn1B3wHU(p$^yBEHx zq~i|&7X}r0s20A5acrQR9#hvK2Xx=6c*tFM@J9UuD8ohc`RLDsu}deGD`*`c;m8QS zgCUifRD^>%<4S8#^2TMADqw+gjHZ>sulGW1(}gDKwF2hjvQB>n-jtmz#9@~4F*^x@%R}e{Y2&KCz?duu^aa>y%iPm%1zqnPR{G?Y4 z48C*_3ipwVb2oo`j1WM8AYDT&ioo^DN+XA-8Nq=KolVDJ>^(q9Nykz^AO8@jU-TDL8=@Yp# z`0V^~J;sb-xt;21tD-A@Q!b4`@x|E>D83vGJA5%XgyFaLGshP4j^0BP@nJi;8QPq} zZasCOfyHw%T^l_D156Rxq9l?k^_qF>+c(_`j%kBrqB>?FPa!(O&K%uAjw|3vex zg~6iGGvYe?pO(JYfzZ{%9l2^x{GmywWC-Ereh^T;KWV6K)&<>!={pX|l+g~?h}`RK z0g*I#Xa`GBWma{trr5d?fk)++ZmoO}fx6-Yk^Ncr>2Umkn-MFU(O?_Y9peO6vtnRF z$QVFE%8MY|Xohq7+4+t3Y-1=b`+7f0p6}a*tiScRyO=V+;Q3*I3IM{IKduC`j8lKO I28@6J0QOxWo&W#< literal 0 HcmV?d00001 diff --git a/web/src/assets/images/user/bg.webp b/web/src/assets/images/user/bg.webp new file mode 100644 index 0000000000000000000000000000000000000000..762b22dbbe34305886a78b1d103dddcc61d106ec GIT binary patch literal 12352 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/styles/core/app.scss b/web/src/assets/styles/core/app.scss new file mode 100755 index 0000000..c0efeed --- /dev/null +++ b/web/src/assets/styles/core/app.scss @@ -0,0 +1,292 @@ +// 全局样式 +// 顶部进度条颜色 +#nprogress .bar { + z-index: 2400; + background-color: color-mix(in srgb, var(--theme-color) 70%, white); +} + +#nprogress .peg { + box-shadow: + 0 0 10px var(--theme-color), + 0 0 5px var(--theme-color) !important; +} + +#nprogress .spinner-icon { + border-top-color: var(--theme-color) !important; + border-left-color: var(--theme-color) !important; +} + +// 处理移动端组件兼容性 +@media screen and (max-width: 640px) { + * { + cursor: default !important; + } +} + +// 背景滤镜 +*, +::before, +::after { + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +// 色弱模式 +.color-weak { + filter: invert(80%); + -webkit-filter: invert(80%); +} + +#noop { + display: none; +} + +// 语言切换选中样式 +.langDropDownStyle { + // 选中项背景颜色 + .is-selected { + background-color: var(--art-el-active-color) !important; + } + + // 语言切换按钮菜单样式优化 + .lang-btn-item { + .el-dropdown-menu__item { + padding-left: 13px !important; + padding-right: 6px !important; + margin-bottom: 3px !important; + } + + &:last-child { + .el-dropdown-menu__item { + margin-bottom: 0 !important; + } + } + + .menu-txt { + min-width: 60px; + display: block; + } + + i { + font-size: 10px; + margin-left: 10px; + } + } +} + +// 盒子默认边框 +.page-content { + border: 1px solid var(--art-card-border) !important; +} + +@mixin art-card-base($border-color, $shadow: none, $radius-diff: 4px) { + background: var(--default-box-color); + border: 1px solid #{$border-color} !important; + border-radius: calc(var(--custom-radius) + #{$radius-diff}) !important; + box-shadow: #{$shadow} !important; + + --el-card-border-color: var(--default-border) !important; +} + +.art-card, +.art-card-sm, +.art-card-xs { + border: 1px solid var(--art-card-border); +} + +// 盒子边框 +[data-box-mode='border-mode'] { + .page-content, + .art-table-card { + border: 1px solid var(--art-card-border) !important; + } + + .art-card { + @include art-card-base(var(--art-card-border), none, 4px); + } + + .art-card-sm { + @include art-card-base(var(--art-card-border), none, 0px); + } + + .art-card-xs { + @include art-card-base(var(--art-card-border), none, -4px); + } +} + +// 盒子阴影 +[data-box-mode='shadow-mode'] { + .page-content, + .art-table-card { + box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.04) !important; + border: 1px solid var(--art-gray-200) !important; + } + + .layout-sidebar { + border-right: 1px solid var(--art-card-border) !important; + } + + .art-card { + @include art-card-base( + var(--art-gray-200), + (0 1px 3px 0 rgba(0, 0, 0, 0.03), 0 1px 2px -1px rgba(0, 0, 0, 0.08)), + 4px + ); + } + + .art-card-sm { + @include art-card-base( + var(--art-gray-200), + (0 1px 3px 0 rgba(0, 0, 0, 0.03), 0 1px 2px -1px rgba(0, 0, 0, 0.08)), + 2px + ); + } + + .art-card-xs { + @include art-card-base( + var(--art-gray-200), + (0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 1px -1px rgba(0, 0, 0, 0.08)), + -4px + ); + } +} + +// 元素全屏 +.el-full-screen { + position: fixed; + top: 0; + left: 0; + right: 0; + width: 100vw !important; + height: 100% !important; + z-index: 2300; + margin-top: 0; + padding: 15px; + box-sizing: border-box; + background-color: var(--default-box-color); + display: flex; + flex-direction: column; +} + +// 表格卡片 +.art-table-card { + flex: 1; + display: flex; + flex-direction: column; + margin-top: 12px; + border-radius: calc(var(--custom-radius) / 2 + 2px) !important; + + .el-card__body { + height: 100%; + overflow: hidden; + } +} + +// 容器全高 +.art-full-height { + height: var(--art-full-height); + display: flex; + flex-direction: column; + + @media (max-width: 640px) { + height: auto; + } +} + +// 徽章样式 +.art-badge { + position: absolute; + top: 0; + right: 20px; + bottom: 0; + width: 6px; + height: 6px; + margin: auto; + background: #ff3860; + border-radius: 50%; + animation: breathe 1.5s ease-in-out infinite; + + &.art-badge-horizontal { + right: 0; + } + + &.art-badge-mixed { + right: 0; + } + + &.art-badge-dual { + right: 5px; + top: 5px; + bottom: auto; + } +} + +// 文字徽章样式 +.art-text-badge { + position: absolute; + top: 0; + right: 12px; + bottom: 0; + min-width: 20px; + height: 18px; + line-height: 17px; + padding: 0 5px; + margin: auto; + font-size: 10px; + color: #fff; + text-align: center; + background: #fd4e4e; + border-radius: 4px; +} + +@keyframes breathe { + 0% { + opacity: 0.7; + transform: scale(1); + } + + 50% { + opacity: 1; + transform: scale(1.1); + } + + 100% { + opacity: 0.7; + transform: scale(1); + } +} + +// 修复老机型 loading 定位问题 +.art-loading-fix { + position: fixed !important; + top: 0 !important; + left: 0 !important; + right: 0 !important; + bottom: 0 !important; + width: 100vw !important; + height: 100vh !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; +} + +.art-loading-fix .el-loading-spinner { + position: static !important; + top: auto !important; + left: auto !important; + transform: none !important; +} + +// 去除移动端点击背景色 +@media screen and (max-width: 1180px) { + * { + -webkit-tap-highlight-color: transparent; + } +} diff --git a/web/src/assets/styles/core/dark.scss b/web/src/assets/styles/core/dark.scss new file mode 100755 index 0000000..c52abc3 --- /dev/null +++ b/web/src/assets/styles/core/dark.scss @@ -0,0 +1,93 @@ +/* +* 深色主题 +* 单页面移除深色主题 document.getElementsByTagName("html")[0].removeAttribute('class') +*/ + +$font-color: rgba(#ffffff, 0.85); + +/* 覆盖element-plus默认深色背景色 */ +html.dark { + // element-plus + --el-bg-color: var(--default-box-color); + --el-text-color-regular: #{$font-color}; + + // 富文本编辑器 + // 工具栏背景颜色 + --w-e-toolbar-bg-color: #18191c; + // 输入区域背景颜色 + --w-e-textarea-bg-color: #090909; + // 工具栏文字颜色 + --w-e-toolbar-color: var(--art-gray-600); + // 选中菜单颜色 + --w-e-toolbar-active-bg-color: #25262b; + // 弹窗边框颜色 + --w-e-toolbar-border-color: var(--default-border-dashed); + // 分割线颜色 + --w-e-textarea-border-color: var(--default-border-dashed); + // 链接输入框边框颜色 + --w-e-modal-button-border-color: var(--default-border-dashed); + // 表格头颜色 + --w-e-textarea-slight-bg-color: #090909; + // 按钮背景颜色 + --w-e-modal-button-bg-color: #090909; + // hover toolbar 背景颜色 + --w-e-toolbar-active-color: var(--art-gray-800); +} + +.dark { + .page-content .article-list .item .left .outer > div { + border-right-color: var(--dark-border-color) !important; + } + + // 富文本编辑器 + .editor-wrapper { + *:not(pre code *) { + color: inherit !important; + } + } + // 分隔线 + .w-e-bar-divider { + background-color: var(--art-gray-300) !important; + } + + .w-e-select-list, + .w-e-drop-panel, + .w-e-bar-item-group .w-e-bar-item-menus-container, + .w-e-text-container [data-slate-editor] pre > code { + border: 1px solid var(--default-border) !important; + } + + // 下拉选择框 + .w-e-select-list { + background-color: var(--default-box-color) !important; + } + + /* 下拉选择框 hover 样式调整 */ + .w-e-select-list ul li:hover, + /* 工具栏 hover 按钮背景颜色 */ + .w-e-bar-item button:hover { + background-color: #090909 !important; + } + + /* 代码块 */ + .w-e-text-container [data-slate-editor] pre > code { + background-color: #25262b !important; + text-shadow: none !important; + } + + /* 引用 */ + .w-e-text-container [data-slate-editor] blockquote { + border-left: 4px solid var(--default-border-dashed) !important; + background-color: var(--art-color); + } + + .editor-wrapper { + .w-e-text-container [data-slate-editor] .table-container th:last-of-type { + border-right: 1px solid var(--default-border-dashed) !important; + } + + .w-e-modal { + background-color: var(--art-color); + } + } +} diff --git a/web/src/assets/styles/core/el-dark.scss b/web/src/assets/styles/core/el-dark.scss new file mode 100644 index 0000000..8f81cdf --- /dev/null +++ b/web/src/assets/styles/core/el-dark.scss @@ -0,0 +1,2 @@ +// 导入暗黑主题 +@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *; diff --git a/web/src/assets/styles/core/el-light.scss b/web/src/assets/styles/core/el-light.scss new file mode 100644 index 0000000..ddf2bc5 --- /dev/null +++ b/web/src/assets/styles/core/el-light.scss @@ -0,0 +1,34 @@ +// https://github.com/element-plus/element-plus/blob/dev/packages/theme-chalk/src/common/var.scss +// 自定义Element 亮色主题 + +@forward 'element-plus/theme-chalk/src/common/var.scss' with ( + $colors: ( + 'white': #ffffff, + 'black': #000000, + 'success': ( + 'base': #13deb9 + ), + 'warning': ( + 'base': #ffae1f + ), + 'danger': ( + 'base': #ff4d4f + ), + 'error': ( + 'base': #fa896b + ) + ), + $button: ( + 'hover-bg-color': var(--el-color-primary-light-9), + 'hover-border-color': var(--el-color-primary), + 'border-color': var(--el-color-primary), + 'text-color': var(--el-color-primary) + ), + $messagebox: ( + 'border-radius': '12px' + ), + $popover: ( + 'padding': '14px', + 'border-radius': '10px' + ) +); diff --git a/web/src/assets/styles/core/el-ui.scss b/web/src/assets/styles/core/el-ui.scss new file mode 100644 index 0000000..44429a1 --- /dev/null +++ b/web/src/assets/styles/core/el-ui.scss @@ -0,0 +1,519 @@ +// 优化 Element Plus 组件库默认样式 + +:root { + // 系统主色 + --main-color: var(--el-color-primary); + --el-color-white: white !important; + --el-color-black: white !important; + // 输入框边框颜色 + // --el-border-color: #E4E4E7 !important; // DCDFE6 + // 按钮粗度 + --el-font-weight-primary: 400 !important; + + --el-component-custom-height: 36px !important; + + --el-component-size: var(--el-component-custom-height) !important; + + // 边框、按钮圆角... + --el-border-radius-base: calc(var(--custom-radius) / 3 + 2px) !important; + + --el-border-radius-small: calc(var(--custom-radius) / 3 + 4px) !important; + --el-messagebox-border-radius: calc(var(--custom-radius) / 3 + 4px) !important; + --el-popover-border-radius: calc(var(--custom-radius) / 3 + 4px) !important; + + .region .el-radio-button__original-radio:checked + .el-radio-button__inner { + color: var(--theme-color); + } +} + +// 优化 el-form-item 标签高度 +.el-form-item__label { + height: var(--el-component-custom-height) !important; + line-height: var(--el-component-custom-height) !important; +} + +// 日期选择器 +.el-date-range-picker { + --el-datepicker-inrange-bg-color: var(--art-gray-200) !important; +} + +// el-card 背景色跟系统背景色保持一致 +html.dark .el-card { + --el-card-bg-color: var(--default-box-color) !important; +} + +// 修改 el-pagination 大小 +.el-pagination--default { + & { + --el-pagination-button-width: 32px !important; + --el-pagination-button-height: var(--el-pagination-button-width) !important; + } + + @media (max-width: 1180px) { + & { + --el-pagination-button-width: 28px !important; + } + } + + .el-select--default .el-select__wrapper { + min-height: var(--el-pagination-button-width) !important; + } + + .el-pagination__jump .el-input { + height: var(--el-pagination-button-width) !important; + } +} + +.el-pager li { + padding: 0 10px !important; + // border: 1px solid red !important; +} + +// 优化菜单折叠展开动画(提升动画流畅度) +.el-menu.el-menu--inline { + transition: max-height 0.26s cubic-bezier(0.4, 0, 0.2, 1) !important; +} + +// 优化菜单 item hover 动画(提升鼠标跟手感) +.el-sub-menu__title, +.el-menu-item { + transition: background-color 0s !important; +} + +// -------------------------------- 修改 el-size=default 组件默认高度 start -------------------------------- +// 修改 el-button 高度 +.el-button--default { + height: var(--el-component-custom-height) !important; +} + +// circle 按钮宽度优化 +.el-button--default.is-circle { + width: var(--el-component-custom-height) !important; +} + +// 修改 el-select 高度 +.el-select--default { + .el-select__wrapper { + min-height: var(--el-component-custom-height) !important; + } +} + +// 修改 el-checkbox-button 高度 +.el-checkbox-button--default .el-checkbox-button__inner, +// 修改 el-radio-button 高度 +.el-radio-button--default .el-radio-button__inner { + padding: 10px 15px !important; +} +// -------------------------------- 修改 el-size=default 组件默认高度 end -------------------------------- + +.el-pagination.is-background .btn-next, +.el-pagination.is-background .btn-prev, +.el-pagination.is-background .el-pager li { + border-radius: 6px; +} + +.el-popover { + min-width: 80px; + border-radius: var(--el-border-radius-small) !important; +} + +.el-dialog { + border-radius: 100px !important; + border-radius: calc(var(--custom-radius) / 1.2 + 2px) !important; + overflow: hidden; +} + +.el-dialog__header { + .el-dialog__title { + font-size: 16px; + } +} + +.el-dialog__body { + padding: 25px 0 !important; + position: relative; // 为了兼容 el-pagination 样式,需要设置 relative,不然会影响 el-pagination 的样式,比如 el-pagination__jump--small 会被影响,导致 el-pagination__jump--small 按钮无法点击,详见 URL_ADDRESS.com/element-plus/element-plus/issues/5684#issuecomment-1176299275; +} + +.el-dialog.el-dialog-border { + .el-dialog__body { + // 上边框 + &::before, + // 下边框 + &::after { + content: ''; + position: absolute; + left: -16px; + width: calc(100% + 32px); + height: 1px; + background-color: var(--art-gray-300); + } + + &::before { + top: 0; + } + + &::after { + bottom: 0; + } + } +} + +// el-message 样式优化 +.el-message { + background-color: var(--default-box-color) !important; + border: 0 !important; + box-shadow: + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) !important; + + p { + font-size: 13px; + } +} + +// 修改 el-dropdown 样式 +.el-dropdown-menu { + padding: 6px !important; + border-radius: 10px !important; + border: none !important; + + .el-dropdown-menu__item { + padding: 6px 16px !important; + border-radius: 6px !important; + + &:hover:not(.is-disabled) { + color: var(--art-gray-900) !important; + background-color: var(--art-el-active-color) !important; + } + + &:focus:not(.is-disabled) { + color: var(--art-gray-900) !important; + background-color: var(--art-gray-200) !important; + } + } +} + +// 隐藏 select、dropdown 的三角 +.el-select__popper, +.el-dropdown__popper { + margin-top: -6px !important; + + .el-popper__arrow { + display: none; + } +} + +.el-dropdown-selfdefine:focus { + outline: none !important; +} + +// 处理移动端组件兼容性 +@media screen and (max-width: 640px) { + .el-message-box, + .el-dialog { + width: calc(100% - 24px) !important; + } + + .el-date-picker.has-sidebar.has-time { + width: calc(100% - 24px); + left: 12px !important; + } + + .el-picker-panel *[slot='sidebar'], + .el-picker-panel__sidebar { + display: none; + } + + .el-picker-panel *[slot='sidebar'] + .el-picker-panel__body, + .el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 0; + } +} + +// 修改el-button样式 +.el-button { + &.el-button--text { + background-color: transparent !important; + padding: 0 !important; + + span { + margin-left: 0 !important; + } + } +} + +// 修改el-tag样式 +.el-tag { + font-weight: 500; + transition: all 0s !important; + + &.el-tag--default { + height: 26px !important; + } +} + +.el-checkbox-group { + &.el-table-filter__checkbox-group label.el-checkbox { + height: 17px !important; + + .el-checkbox__label { + font-weight: 400 !important; + } + } +} + +.el-radio--default { + // 优化单选按钮大小 + .el-radio__input { + .el-radio__inner { + width: 16px; + height: 16px; + + &::after { + width: 6px; + height: 6px; + } + } + } +} + +.el-checkbox { + .el-checkbox__inner { + border-radius: 2px !important; + } +} + +// 优化复选框样式 +.el-checkbox--default { + .el-checkbox__inner { + width: 16px !important; + height: 16px !important; + border-radius: 4px !important; + + &::before { + content: ''; + height: 4px !important; + top: 5px !important; + background-color: #fff !important; + transform: scale(0.6) !important; + } + } + + .is-checked { + .el-checkbox__inner { + &::after { + width: 3px; + height: 8px; + margin: auto; + border: 2px solid var(--el-checkbox-checked-icon-color); + border-left: 0; + border-top: 0; + transform: translate(-45%, -60%) rotate(45deg) scale(0.86) !important; + transform-origin: center; + } + } + } +} + +.el-notification .el-notification__icon { + font-size: 22px !important; +} + +// 修改 el-message-box 样式 +.el-message-box__headerbtn .el-message-box__close, +.el-dialog__headerbtn .el-dialog__close { + top: 7px; + right: 7px; + width: 30px; + height: 30px; + border-radius: 5px; + transition: all 0.3s; + + &:hover { + background-color: var(--art-hover-color) !important; + color: var(--art-gray-900) !important; + } +} + +.el-message-box { + padding: 25px 20px !important; +} + +.el-message-box__title { + font-weight: 500 !important; +} + +.el-table__column-filter-trigger i { + color: var(--theme-color) !important; + margin: -3px 0 0 2px; +} + +// 去除 el-dropdown 鼠标放上去出现的边框 +.el-tooltip__trigger:focus-visible { + outline: unset; +} + +// ipad 表单右侧按钮优化 +@media screen and (max-width: 1180px) { + .el-table-fixed-column--right { + padding-right: 0 !important; + } +} + +.login-out-dialog { + padding: 30px 20px !important; + border-radius: 10px !important; +} + +// 修改 dialog 动画 +.dialog-fade-enter-active { + .el-dialog:not(.is-draggable) { + animation: dialog-open 0.3s cubic-bezier(0.32, 0.14, 0.15, 0.86); + + // 修复 el-dialog 动画后宽度不自适应问题 + .el-select__selected-item { + display: inline-block; + } + } +} + +.dialog-fade-leave-active { + animation: fade-out 0.2s linear; + + .el-dialog:not(.is-draggable) { + animation: dialog-close 0.5s; + } +} + +@keyframes dialog-open { + 0% { + opacity: 0; + transform: scale(0.2); + } + + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes dialog-close { + 0% { + opacity: 1; + transform: scale(1); + } + + 100% { + opacity: 0; + transform: scale(0.2); + } +} + +// 遮罩层动画 +@keyframes fade-out { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +// 修改 el-select 样式 +.el-select__popper:not(.el-tree-select__popper) { + .el-select-dropdown__list { + padding: 5px !important; + + .el-select-dropdown__item { + height: 34px !important; + line-height: 34px !important; + border-radius: 6px !important; + + &.is-selected { + color: var(--art-gray-900) !important; + font-weight: 400 !important; + background-color: var(--art-el-active-color) !important; + margin-bottom: 4px !important; + } + + &:hover { + background-color: var(--art-hover-color) !important; + } + } + + .el-select-dropdown__item:hover ~ .is-selected, + .el-select-dropdown__item.is-selected:has(~ .el-select-dropdown__item:hover) { + background-color: transparent !important; + } + } +} + +// 修改 el-tree-select 样式 +.el-tree-select__popper { + .el-select-dropdown__list { + padding: 5px !important; + + .el-tree-node { + .el-tree-node__content { + height: 36px !important; + border-radius: 6px !important; + + &:hover { + background-color: var(--art-gray-200) !important; + } + } + } + } +} + +// 实现水波纹在文字下面效果 +.el-button > span { + position: relative; + z-index: 10; +} + +// 优化颜色选择器圆角 +.el-color-picker__color { + border-radius: 2px !important; +} + +// 优化日期时间选择器底部圆角 +.el-picker-panel { + .el-picker-panel__footer { + border-radius: 0 0 var(--el-border-radius-base) var(--el-border-radius-base); + } +} + +// 优化树型菜单样式 +.el-tree-node__content { + border-radius: 4px; + margin-bottom: 4px; + padding: 1px 0; + + &:hover { + background-color: var(--art-hover-color) !important; + } +} + +.dark { + .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: var(--art-gray-300) !important; + } +} + +// 隐藏折叠菜单弹窗 hover 出现的边框 +.menu-left-popper:focus-within, +.horizontal-menu-popper:focus-within { + box-shadow: none !important; + outline: none !important; +} + +// 数字输入组件右侧按钮高度跟随自定义组件高度 +.el-input-number--default.is-controls-right { + .el-input-number__decrease, + .el-input-number__increase { + height: calc((var(--el-component-size) / 2)) !important; + } +} diff --git a/web/src/assets/styles/core/md.scss b/web/src/assets/styles/core/md.scss new file mode 100644 index 0000000..b22fdc2 --- /dev/null +++ b/web/src/assets/styles/core/md.scss @@ -0,0 +1,1036 @@ +/* 文章标题设置(h1-h6)*/ +/* ------------------------------------------------ */ +$font-color: #24292e; + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + color: var(--art-gray-800) !important; + margin: 30px 0 10px 0; + font-weight: 600; +} + +.markdown-body h1 { + font-size: 30px; +} + +@media only screen and (max-width: 550px) { + .markdown-body h1 { + font-size: 26px; + } + + .markdown-body h2 { + font-size: 22px; + } + + .markdown-body h3 { + font-size: 18px; + } +} + +/* 块引用 */ +/* ------------------------------------------------ */ +.markdown-body blockquote { + color: rgba(60, 60, 67, 0.7); + font-size: 15px !important; + border-left: 0.18em solid #e7e7e8; + background: #f8f8f8; + padding: 15px 1em; + font-weight: 400 !important; +} + +/* 详情页文章字体颜色 */ +/* ------------------------------------------------ */ +.markdown-body p { + line-height: 28px; + margin-bottom: 10px; +} + +.markdown-body li, +.markdown-body p { + color: var(--art-gray-800) !important; + font-size: 16px !important; +} + +.dark .markdown-body li span { + color: var(--art-gray-800) !important; + background-color: transparent !important; +} + +.dark .markdown-body p span { + color: var(--art-gray-800) !important; + background-color: transparent !important; +} + +.line-numbers-mode { + background-color: var(--art-code-bg); + border-radius: 8px; + position: relative; + padding-left: 32px; + box-sizing: border-box; +} + +.line-numbers-mode pre { + flex: 1; + border-radius: 0 8px 8px 0; + background-color: var(--art-code-bg); +} + +.line-numbers-mode .line-numbers-wrapper { + width: 32px; + height: 100%; + text-align: center; + padding: 16px 0; + box-sizing: border-box; + border-right: 1px solid #000000; + position: absolute; + left: 0; + top: 0; +} + +.line-numbers-mode .line-numbers-wrapper span { + height: 23.6px; + line-height: 23.6px; + display: block; + color: #72747b; + font-size: 13px; + box-sizing: border-box; +} + +.line-numbers-mode .copy-btn { + display: inline-block; + display: flex; + position: absolute; + right: 10px; + top: 10px; + cursor: pointer; + opacity: 0; + background-color: #000; + border-radius: 5px; + text-align: center; + color: rgba(255, 255, 255, 0.6); + transition: opacity 0.3s; +} + +.line-numbers-mode .copy-btn div { + width: 34px; + height: 34px; + line-height: 34px; + cursor: pointer; + text-align: center; + font-size: 20px; +} + +.line-numbers-mode:hover .copy-btn { + opacity: 1; +} + +.line-numbers-mode .copy-btn span { + height: 34px; + line-height: 34px; + font-size: 13px; + padding-left: 10px; + display: none; +} + +.line-numbers-mode .copy-btn .show-copy { + opacity: 1; + display: block; +} + +.line-numbers-mode ::-webkit-scrollbar-track { + background-color: #292b30 !important; +} + +.markdown-body .anchor { + float: left; + line-height: 1; + margin-left: -20px; + padding-right: 4px; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #1b1f23; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + color: $font-color; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body details { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body a { + background-color: initial; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body strong { + font-weight: inherit; + font-weight: bolder; +} + +.markdown-body p br { + display: inline; + line-height: 11px; +} + +.markdown-body img { + border-style: none; +} + +.markdown-body hr { + box-sizing: initial; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { + overflow: visible; +} + +.markdown-body [type='checkbox'] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body * { + box-sizing: border-box; +} + +.markdown-body input { + font-size: inherit; + line-height: inherit; +} + +.markdown-body a { + color: #0366d6; + text-decoration: none; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body strong { + font-weight: 600; +} + +.markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #dfe2e5; +} + +.markdown-body hr:after, +.markdown-body hr:before { + display: table; + content: ''; +} + +.markdown-body hr:after { + clear: both; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: + 11px SFMono-Regular, + Consolas, + Liberation Mono, + Menlo, + monospace; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: 1px solid #d1d5da; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #d1d5da; +} + +.markdown-body blockquote { + margin: 0; +} + +.markdown-body ol, +.markdown-body ul { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ol ol ol, +.markdown-body ol ul ol, +.markdown-body ul ol ol, +.markdown-body ul ul ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body code, +.markdown-body pre, +.markdown-body .line-number { + font-size: 14px !important; + border-radius: 8px; + background-color: #282c34; +} + +.dark { + .markdown-body code, + .markdown-body pre, + .markdown-body .line-number { + background-color: #252525; + } +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body input::-webkit-inner-spin-button, +.markdown-body input::-webkit-outer-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body :checked + .radio-label { + position: relative; + z-index: 1; + border-color: #0366d6; +} + +.markdown-body .border { + border: 1px solid #e1e4e8 !important; +} + +.markdown-body .border-0 { + border: 0 !important; +} + +.markdown-body .border-bottom { + border-bottom: 1px solid #e1e4e8 !important; +} + +.markdown-body .rounded-1 { + border-radius: 3px !important; +} + +.markdown-body .bg-white { + background-color: #fff !important; +} + +.markdown-body .bg-gray-light { + background-color: #fafbfc !important; +} + +.markdown-body .text-gray-light { + color: #6a737d !important; +} + +.markdown-body .mb-0 { + margin-bottom: 0 !important; +} + +.markdown-body .my-2 { + margin-top: 8px !important; + margin-bottom: 8px !important; +} + +.markdown-body .pl-0 { + padding-left: 0 !important; +} + +.markdown-body .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.markdown-body .pl-1 { + padding-left: 4px !important; +} + +.markdown-body .pl-2 { + padding-left: 8px !important; +} + +.markdown-body .py-2 { + padding-top: 8px !important; + padding-bottom: 8px !important; +} + +.markdown-body .pl-3, +.markdown-body .px-3 { + padding-left: 16px !important; +} + +.markdown-body .px-3 { + padding-right: 16px !important; +} + +.markdown-body .pl-4 { + padding-left: 24px !important; +} + +.markdown-body .pl-5 { + padding-left: 32px !important; +} + +.markdown-body .pl-6 { + padding-left: 40px !important; +} + +.markdown-body .f6 { + font-size: 12px !important; +} + +.markdown-body .lh-condensed { + line-height: 1.25 !important; +} + +.markdown-body .text-bold { + font-weight: 600 !important; +} + +.markdown-body .pl-c { + color: #6a737d; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #005cc5; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #6f42c1; +} + +.markdown-body .pl-s .pl-s1, +.markdown-body .pl-smi { + color: $font-color; +} + +.markdown-body .pl-ent { + color: #22863a; +} + +.markdown-body .pl-k { + color: #d73a49; +} + +.markdown-body .pl-pds, +.markdown-body .pl-s, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre { + color: #032f62; +} + +.markdown-body .pl-smw, +.markdown-body .pl-v { + color: #e36209; +} + +.markdown-body .pl-bu { + color: #b31d28; +} + +.markdown-body .pl-ii { + color: #fafbfc; + background-color: #b31d28; +} + +.markdown-body .pl-c2 { + color: #fafbfc; + background-color: #d73a49; +} + +.markdown-body .pl-c2:before { + content: '^M'; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: 700; + color: #22863a; +} + +.markdown-body .pl-ml { + color: #735c0f; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: 700; + color: #005cc5; +} + +.markdown-body .pl-mi { + font-style: italic; + color: $font-color; +} + +.markdown-body .pl-mb { + font-weight: 700; + color: $font-color; +} + +.markdown-body .pl-md { + color: #b31d28; + background-color: #ffeef0; +} + +.markdown-body .pl-mi1 { + color: #22863a; + background-color: #f0fff4; +} + +.markdown-body .pl-mc { + color: #e36209; + background-color: #ffebda; +} + +.markdown-body .pl-mi2 { + color: #f6f8fa; + background-color: #005cc5; +} + +.markdown-body .pl-mdr { + font-weight: 700; + color: #6f42c1; +} + +.markdown-body .pl-ba { + color: #586069; +} + +.markdown-body .pl-sg { + color: #959da5; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #032f62; +} + +.markdown-body .mb-0 { + margin-bottom: 0 !important; +} + +.markdown-body .my-2 { + margin-bottom: 8px !important; +} + +.markdown-body .my-2 { + margin-top: 8px !important; +} + +.markdown-body .pl-0 { + padding-left: 0 !important; +} + +.markdown-body .py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.markdown-body .pl-1 { + padding-left: 4px !important; +} + +.markdown-body .pl-2 { + padding-left: 8px !important; +} + +.markdown-body .py-2 { + padding-top: 8px !important; + padding-bottom: 8px !important; +} + +.markdown-body .pl-3 { + padding-left: 16px !important; +} + +.markdown-body .pl-4 { + padding-left: 24px !important; +} + +.markdown-body .pl-5 { + padding-left: 32px !important; +} + +.markdown-body .pl-6 { + padding-left: 40px !important; +} + +.markdown-body .pl-7 { + padding-left: 48px !important; +} + +.markdown-body .pl-8 { + padding-left: 64px !important; +} + +.markdown-body .pl-9 { + padding-left: 80px !important; +} + +.markdown-body .pl-10 { + padding-left: 96px !important; +} + +.markdown-body .pl-11 { + padding-left: 112px !important; +} + +.markdown-body .pl-12 { + padding-left: 128px !important; +} + +.markdown-body hr { + border-bottom-color: #eee; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: + 11px SFMono-Regular, + Consolas, + Liberation Mono, + Menlo, + monospace; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: 1px solid #d1d5da; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #d1d5da; +} + +.markdown-body:after, +.markdown-body:before { + display: table; + content: ''; +} + +.markdown-body:after { + clear: both; +} + +.markdown-body > :first-child { + margin-top: 0 !important; +} + +.markdown-body > :last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body blockquote, +.markdown-body details, +.markdown-body dl, +.markdown-body ol, +.markdown-body pre, +.markdown-body table, +.markdown-body ul { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body hr { + height: 0.25em; + padding: 0; + margin: 24px 0; + background-color: #e1e4e8; + border: 0; +} + +.markdown-body blockquote > :first-child { + margin-top: 0; +} + +.markdown-body blockquote > :last-child { + margin-bottom: 0; +} + +.markdown-body ol, +.markdown-body ul { + padding-left: 1em; +} + +.markdown-body ol ol, +.markdown-body ol ul, +.markdown-body ul ol, +.markdown-body ul ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li { + line-height: 28px; + font-size: 14px; + word-wrap: break-all; + list-style: disc; + margin-left: 10px; +} + +.markdown-body li > p { + margin-top: 16px; +} + +.markdown-body li + li { + margin-top: 0.25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table { + display: block; + width: 100%; + overflow: auto; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table td, +.markdown-body table th { + padding: 6px 13px; + border: 1px solid #dfe2e5; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #c6cbd1; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f6f8fa; +} + +.markdown-body img { + max-width: 100%; + box-sizing: initial; + background-color: #fff; + border: 1px solid #eee; + border: 1px solid var(--art-c-border-2); + cursor: zoom-in; +} + +.markdown-body img[align='right'] { + padding-left: 20px; +} + +.markdown-body img[align='left'] { + padding-right: 20px; +} + +.markdown-body code { + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + background-color: rgba(27, 31, 35, 0.05); + border-radius: 3px; +} + +.markdown-body pre { + word-wrap: normal; +} + +.markdown-body pre > code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 15px 20px 15px 0; + overflow: auto; + font-size: 92%; + line-height: 1.6; +} + +.markdown-body pre code { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: initial; + border: 0; +} + +.markdown-body .commit-tease-sha { + display: inline-block; + font-size: 90%; + color: #444d56; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + color: #005cc5; + border-color: #005cc5; +} + +.markdown-body .blob-wrapper { + overflow-x: auto; + overflow-y: hidden; +} + +.markdown-body .blob-wrapper-embedded { + max-height: 240px; + overflow-y: auto; +} + +.markdown-body .blob-num { + width: 1%; + min-width: 50px; + padding-right: 10px; + padding-left: 10px; + font-size: 12px; + line-height: 20px; + color: rgba(27, 31, 35, 0.3); + text-align: right; + white-space: nowrap; + vertical-align: top; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.markdown-body .blob-num:hover { + color: rgba(27, 31, 35, 0.6); +} + +.markdown-body .blob-num:before { + content: attr(data-line-number); +} + +.markdown-body .blob-code { + position: relative; + padding-right: 10px; + padding-left: 10px; + line-height: 20px; + vertical-align: top; +} + +.markdown-body .blob-code-inner { + overflow: visible; + font-size: 12px; + color: $font-color; + word-wrap: normal; + white-space: pre; +} + +.markdown-body .pl-token.active, +.markdown-body .pl-token:hover { + cursor: pointer; + background: #ffea7f; +} + +.markdown-body .tab-size[data-tab-size='1'] { + -moz-tab-size: 1; + tab-size: 1; +} + +.markdown-body .tab-size[data-tab-size='2'] { + -moz-tab-size: 2; + tab-size: 2; +} + +.markdown-body .tab-size[data-tab-size='3'] { + -moz-tab-size: 3; + tab-size: 3; +} + +.markdown-body .tab-size[data-tab-size='4'] { + -moz-tab-size: 4; + tab-size: 4; +} + +.markdown-body .tab-size[data-tab-size='5'] { + -moz-tab-size: 5; + tab-size: 5; +} + +.markdown-body .tab-size[data-tab-size='6'] { + -moz-tab-size: 6; + tab-size: 6; +} + +.markdown-body .tab-size[data-tab-size='7'] { + -moz-tab-size: 7; + tab-size: 7; +} + +.markdown-body .tab-size[data-tab-size='8'] { + -moz-tab-size: 8; + tab-size: 8; +} + +.markdown-body .tab-size[data-tab-size='9'] { + -moz-tab-size: 9; + tab-size: 9; +} + +.markdown-body .tab-size[data-tab-size='10'] { + -moz-tab-size: 10; + tab-size: 10; +} + +.markdown-body .tab-size[data-tab-size='11'] { + -moz-tab-size: 11; + tab-size: 11; +} + +.markdown-body .tab-size[data-tab-size='12'] { + -moz-tab-size: 12; + tab-size: 12; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item + .task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} diff --git a/web/src/assets/styles/core/mixin.scss b/web/src/assets/styles/core/mixin.scss new file mode 100755 index 0000000..db36888 --- /dev/null +++ b/web/src/assets/styles/core/mixin.scss @@ -0,0 +1,157 @@ +// sass 混合宏(函数) + +/** +* 溢出省略号 +* @param {Number} 行数 +*/ +@mixin ellipsis($rowCount: 1) { + @if $rowCount <=1 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } @else { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: $rowCount; + -webkit-box-orient: vertical; + } +} + +/** +* 控制用户能否选中文本 +* @param {String} 类型 +*/ +@mixin userSelect($value: none) { + user-select: $value; + -moz-user-select: $value; + -ms-user-select: $value; + -webkit-user-select: $value; +} + +// 绝对定位居中 +@mixin absoluteCenter() { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; +} + +/** +* css3动画 +* +*/ +@mixin animation( + $from: ( + width: 0px + ), + $to: ( + width: 100px + ), + $name: mymove, + $animate: mymove 2s 1 linear infinite +) { + -webkit-animation: $animate; + -o-animation: $animate; + animation: $animate; + + @keyframes #{$name} { + from { + @each $key, $value in $from { + #{$key}: #{$value}; + } + } + + to { + @each $key, $value in $to { + #{$key}: #{$value}; + } + } + } + + @-webkit-keyframes #{$name} { + from { + @each $key, $value in $from { + $key: $value; + } + } + + to { + @each $key, $value in $to { + $key: $value; + } + } + } +} + +// 圆形盒子 +@mixin circle($size: 11px, $bg: #fff) { + border-radius: 50%; + width: $size; + height: $size; + line-height: $size; + text-align: center; + background: $bg; +} + +// placeholder +@mixin placeholder($color: #bbb) { + // Firefox + &::-moz-placeholder { + color: $color; + opacity: 1; + } + + // Internet Explorer 10+ + &:-ms-input-placeholder { + color: $color; + } + + // Safari and Chrome + &::-webkit-input-placeholder { + color: $color; + } + + &:placeholder-shown { + text-overflow: ellipsis; + } +} + +//背景透明,文字不透明。兼容IE8 +@mixin betterTransparentize($color, $alpha) { + $c: rgba($color, $alpha); + $ie_c: ie_hex_str($c); + background: rgba($color, 1); + background: $c; + background: transparent \9; + zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c}); + -ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c})'; +} + +//添加浏览器前缀 +@mixin browserPrefix($propertyName, $value) { + @each $prefix in -webkit-, -moz-, -ms-, -o-, '' { + #{$prefix}#{$propertyName}: $value; + } +} + +// 边框 +@mixin border($color: red) { + border: 1px solid $color; +} + +// 背景滤镜 +@mixin backdropBlur() { + --tw-backdrop-blur: blur(30px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) + var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) + var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) + var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) + var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) + var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} diff --git a/web/src/assets/styles/core/reset.scss b/web/src/assets/styles/core/reset.scss new file mode 100755 index 0000000..17a3bcf --- /dev/null +++ b/web/src/assets/styles/core/reset.scss @@ -0,0 +1,41 @@ +@charset "UTF-8"; + +/*滚动条*/ +/*滚动条整体部分,必须要设置*/ +::-webkit-scrollbar { + width: 8px !important; + height: 0 !important; +} + +/*滚动条的轨道*/ +::-webkit-scrollbar-track { + background-color: var(--art-gray-200); +} + +/*滚动条的滑块按钮*/ +::-webkit-scrollbar-thumb { + border-radius: 5px; + background-color: #cccccc !important; + transition: all 0.2s; + -webkit-transition: all 0.2s; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #b0abab !important; +} + +/*滚动条的上下两端的按钮*/ +::-webkit-scrollbar-button { + height: 0px; + width: 0; +} + +.dark { + ::-webkit-scrollbar-track { + background-color: var(--default-bg-color); + } + + ::-webkit-scrollbar-thumb { + background-color: var(--art-gray-300) !important; + } +} diff --git a/web/src/assets/styles/core/router-transition.scss b/web/src/assets/styles/core/router-transition.scss new file mode 100644 index 0000000..f47c741 --- /dev/null +++ b/web/src/assets/styles/core/router-transition.scss @@ -0,0 +1,104 @@ +@use 'sass:map'; + +// === 变量区域 === +$transition: ( + // 动画持续时间 + duration: 0.25s, + // 滑动动画的移动距离 + distance: 15px, + // 默认缓动函数 + easing: cubic-bezier(0.25, 0.1, 0.25, 1), + // 淡入淡出专用的缓动函数 + fade-easing: cubic-bezier(0.4, 0, 0.6, 1) +); + +// 抽取配置值函数,提高可复用性 +@function transition-config($key) { + @return map.get($transition, $key); +} + +// 变量简写 +$duration: transition-config('duration'); +$distance: transition-config('distance'); +$easing: transition-config('easing'); +$fade-easing: transition-config('fade-easing'); + +// === 动画类 === + +// 淡入淡出动画 +.fade { + &-enter-active, + &-leave-active { + transition: opacity $duration $fade-easing; + will-change: opacity; + } + + &-enter-from, + &-leave-to { + opacity: 0; + } + + &-enter-to, + &-leave-from { + opacity: 1; + } +} + +// 滑动动画通用样式 +@mixin slide-transition($direction) { + $distance-x: 0; + $distance-y: 0; + + @if $direction == 'left' { + $distance-x: -$distance; + } @else if $direction == 'right' { + $distance-x: $distance; + } @else if $direction == 'top' { + $distance-y: -$distance; + } @else if $direction == 'bottom' { + $distance-y: $distance; + } + + &-enter-active { + transition: + opacity $duration $easing, + transform $duration $easing; + will-change: opacity, transform; + } + + &-leave-active { + transition: + opacity calc($duration * 0.7) $easing, + transform calc($duration * 0.7) $easing; + will-change: opacity, transform; + } + + &-enter-from { + opacity: 0; + transform: translate3d($distance-x, $distance-y, 0); + } + + &-enter-to { + opacity: 1; + transform: translate3d(0, 0, 0); + } + + &-leave-to { + opacity: 0; + transform: translate3d(-$distance-x, -$distance-y, 0); + } +} + +// 滑动动画方向类 +.slide-left { + @include slide-transition('left'); +} +.slide-right { + @include slide-transition('right'); +} +.slide-top { + @include slide-transition('top'); +} +.slide-bottom { + @include slide-transition('bottom'); +} diff --git a/web/src/assets/styles/core/tailwind.css b/web/src/assets/styles/core/tailwind.css new file mode 100644 index 0000000..1a9e22c --- /dev/null +++ b/web/src/assets/styles/core/tailwind.css @@ -0,0 +1,208 @@ +@import 'tailwindcss'; +@custom-variant dark (&:where(.dark, .dark *)); + +/* ==================== Light Mode Variables ==================== */ +:root { + /* Base Colors */ + --art-color: #ffffff; + --theme-color: var(--main-color); + + /* Theme Colors - OKLCH Format */ + --art-primary: oklch(0.7 0.23 260); + --art-secondary: oklch(0.72 0.19 231.6); + --art-error: oklch(0.73 0.15 25.3); + --art-info: oklch(0.58 0.03 254.1); + --art-success: oklch(0.78 0.17 166.1); + --art-warning: oklch(0.78 0.14 75.5); + --art-danger: oklch(0.68 0.22 25.3); + + /* Gray Scale - Light Mode */ + --art-gray-100: #f9fafb; + --art-gray-200: #f2f4f5; + --art-gray-300: #e6eaeb; + --art-gray-400: #dbdfe1; + --art-gray-500: #949eb7; + --art-gray-600: #7987a1; + --art-gray-700: #4d5875; + --art-gray-800: #383853; + --art-gray-900: #323251; + + /* Border Colors */ + --art-card-border: rgba(0, 0, 0, 0.08); + + --default-border: #e2e8ee; + --default-border-dashed: #dbdfe9; + + /* Background Colors */ + --default-bg-color: #fafbfc; + --default-box-color: #ffffff; + + /* Hover Color */ + --art-hover-color: #edeff0; + + /* Active Color */ + --art-active-color: #f2f4f5; + + /* Element Component Active Color */ + --art-el-active-color: #f2f4f5; +} + +/* ==================== Dark Mode Variables ==================== */ +.dark { + /* Base Colors */ + --art-color: #000000; + + /* Gray Scale - Dark Mode */ + --art-gray-100: #110f0f; + --art-gray-200: #17171c; + --art-gray-300: #393946; + --art-gray-400: #505062; + --art-gray-500: #73738c; + --art-gray-600: #8f8fa3; + --art-gray-700: #ababba; + --art-gray-800: #c7c7d1; + --art-gray-900: #e3e3e8; + + /* Border Colors */ + --art-card-border: rgba(255, 255, 255, 0.08); + + --default-border: rgba(255, 255, 255, 0.1); + --default-border-dashed: #363843; + + /* Background Colors */ + --default-bg-color: #070707; + --default-box-color: #161618; + + /* Hover Color */ + --art-hover-color: #252530; + + /* Active Color */ + --art-active-color: #202226; + + /* Element Component Active Color */ + --art-el-active-color: #2e2e38; +} + +/* ==================== Tailwind Theme Configuration ==================== */ +@theme { + /* Box Color (Light: white / Dark: black) */ + --color-box: var(--default-box-color); + + /* System Theme Color */ + --color-theme: var(--theme-color); + + /* Hover Color */ + --color-hover-color: var(--art-hover-color); + + /* Active Color */ + --color-active-color: var(--art-active-color); + + /* Active Color */ + --color-el-active-color: var(--art-active-color); + + /* ElementPlus Theme Colors */ + --color-primary: var(--art-primary); + --color-secondary: var(--art-secondary); + --color-error: var(--art-error); + --color-info: var(--art-info); + --color-success: var(--art-success); + --color-warning: var(--art-warning); + --color-danger: var(--art-danger); + + /* Gray Scale Colors (Auto-adapts to dark mode) */ + --color-g-100: var(--art-gray-100); + --color-g-200: var(--art-gray-200); + --color-g-300: var(--art-gray-300); + --color-g-400: var(--art-gray-400); + --color-g-500: var(--art-gray-500); + --color-g-600: var(--art-gray-600); + --color-g-700: var(--art-gray-700); + --color-g-800: var(--art-gray-800); + --color-g-900: var(--art-gray-900); +} + +/* ==================== Custom Border Radius Utilities ==================== */ +@utility rounded-custom-xs { + border-radius: calc(var(--custom-radius) / 2); +} + +@utility rounded-custom-sm { + border-radius: calc(var(--custom-radius) / 2 + 2px); +} + +/* ==================== Custom Utility Classes ==================== */ +@layer utilities { + /* Flexbox Layout Utilities */ + .flex-c { + @apply flex items-center; + } + + .flex-b { + @apply flex justify-between; + } + + .flex-cc { + @apply flex items-center justify-center; + } + + .flex-cb { + @apply flex items-center justify-between; + } + + /* Transition Utilities */ + .tad-200 { + @apply transition-all duration-200; + } + + .tad-300 { + @apply transition-all duration-300; + } + + /* Border Utilities */ + .border-full-d { + @apply border border-[var(--default-border)]; + } + + .border-b-d { + @apply border-b border-[var(--default-border)]; + } + + .border-t-d { + @apply border-t border-[var(--default-border)]; + } + + .border-l-d { + @apply border-l border-[var(--default-border)]; + } + + .border-r-d { + @apply border-r border-[var(--default-border)]; + } + + /* Cursor Utilities */ + .c-p { + @apply cursor-pointer; + } +} + +/* ==================== Custom Component Classes ==================== */ +@layer components { + /* Art Card Header Component */ + .art-card-header { + @apply flex justify-between pr-6 pb-1; + + .title { + h4 { + @apply text-lg font-medium text-g-900; + } + + p { + @apply mt-1 text-sm text-g-600; + + span { + @apply ml-2 font-medium; + } + } + } + } +} diff --git a/web/src/assets/styles/core/theme-animation.scss b/web/src/assets/styles/core/theme-animation.scss new file mode 100644 index 0000000..377b945 --- /dev/null +++ b/web/src/assets/styles/core/theme-animation.scss @@ -0,0 +1,63 @@ +// 定义基础变量 +$bg-animation-color-light: #000; +$bg-animation-color-dark: #fff; +$bg-animation-duration: 0.5s; + +html { + --bg-animation-color: $bg-animation-color-light; + + &.dark { + --bg-animation-color: $bg-animation-color-dark; + } + + // View transition styles + &::view-transition-old(*) { + animation: none; + } + + &::view-transition-new(*) { + animation: clip $bg-animation-duration ease-in both; + } + + &::view-transition-old(root) { + z-index: 1; + } + + &::view-transition-new(root) { + z-index: 9999; + } + + &.dark { + &::view-transition-old(*) { + animation: clip $bg-animation-duration ease-in reverse both; + } + + &::view-transition-new(*) { + animation: none; + } + + &::view-transition-old(root) { + z-index: 9999; + } + + &::view-transition-new(root) { + z-index: 1; + } + } +} + +// 定义动画 +@keyframes clip { + from { + clip-path: circle(0% at var(--x) var(--y)); + } + + to { + clip-path: circle(var(--r) at var(--x) var(--y)); + } +} + +// body 相关样式 +body { + background-color: var(--bg-animation-color); +} diff --git a/web/src/assets/styles/core/theme-change.scss b/web/src/assets/styles/core/theme-change.scss new file mode 100755 index 0000000..5b640d2 --- /dev/null +++ b/web/src/assets/styles/core/theme-change.scss @@ -0,0 +1,11 @@ +// 主题切换过渡优化,优化除视觉上的不适感 +.theme-change { + * { + transition: 0s !important; + } + + .el-switch__core, + .el-switch__action { + transition: all 0.3s !important; + } +} diff --git a/web/src/assets/styles/custom/one-dark-pro.scss b/web/src/assets/styles/custom/one-dark-pro.scss new file mode 100644 index 0000000..36bdf63 --- /dev/null +++ b/web/src/assets/styles/custom/one-dark-pro.scss @@ -0,0 +1,98 @@ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + + color: #a6accd; +} + +.hljs-string, +.hljs-section, +.hljs-selector-class, +.hljs-template-variable, +.hljs-deletion { + color: #aed07e !important; +} + +.hljs-comment, +.hljs-quote { + color: #6f747d; +} + +.hljs-doctag, +.hljs-keyword, +.hljs-formula { + color: #c792ea; +} + +.hljs-section, +.hljs-name, +.hljs-selector-tag, +.hljs-deletion, +.hljs-subst { + color: #c86068; +} + +.hljs-literal { + color: #56b6c2; +} + +.hljs-string, +.hljs-regexp, +.hljs-addition, +.hljs-attribute, +.hljs-meta-string { + color: #abb2bf; +} + +.hljs-attribute { + color: #c792ea; +} + +.hljs-function { + color: #c792ea; +} + +.hljs-type { + color: #f07178; +} + +.hljs-title { + color: #82aaff !important; +} + +.hljs-built_in, +.hljs-class { + color: #82aaff; +} + +// 括号 +.hljs-params { + color: #a6accd; +} + +.hljs-attr, +.hljs-variable, +.hljs-template-variable, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-number { + color: #de7e61; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link, +.hljs-meta, +.hljs-selector-id { + color: #61aeee; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git a/web/src/assets/styles/index.scss b/web/src/assets/styles/index.scss new file mode 100644 index 0000000..cdc2ddc --- /dev/null +++ b/web/src/assets/styles/index.scss @@ -0,0 +1,23 @@ +// 重置默认样式 +@use './core/reset.scss'; + +// 应用全局样式 +@use './core/app.scss'; + +// Element Plus 样式优化 +@use './core/el-ui.scss'; + +// Element Plus 暗黑主题 +@use './core/el-dark.scss'; + +// 暗黑主题样式优化 +@use './core/dark.scss'; + +// 路由切换动画 +@use './core/router-transition'; + +// 主题切换过渡优化 +@use './core/theme-change.scss'; + +// 主题切换圆形扩散动画 +@use './core/theme-animation.scss'; diff --git a/web/src/assets/svg/loading.ts b/web/src/assets/svg/loading.ts new file mode 100644 index 0000000..fdfb078 --- /dev/null +++ b/web/src/assets/svg/loading.ts @@ -0,0 +1,32 @@ +// 自定义四点旋转SVG +export const fourDotsSpinnerSvg = ` + + + + + + + + + +` diff --git a/web/src/components/core/banners/art-basic-banner/index.vue b/web/src/components/core/banners/art-basic-banner/index.vue new file mode 100644 index 0000000..65b47e4 --- /dev/null +++ b/web/src/components/core/banners/art-basic-banner/index.vue @@ -0,0 +1,343 @@ + + + + + + diff --git a/web/src/components/core/banners/art-card-banner/index.vue b/web/src/components/core/banners/art-card-banner/index.vue new file mode 100644 index 0000000..8a5f9d4 --- /dev/null +++ b/web/src/components/core/banners/art-card-banner/index.vue @@ -0,0 +1,114 @@ + + + + diff --git a/web/src/components/core/base/art-back-to-top/index.vue b/web/src/components/core/base/art-back-to-top/index.vue new file mode 100644 index 0000000..6f8da61 --- /dev/null +++ b/web/src/components/core/base/art-back-to-top/index.vue @@ -0,0 +1,40 @@ + + + + diff --git a/web/src/components/core/base/art-logo/index.vue b/web/src/components/core/base/art-logo/index.vue new file mode 100644 index 0000000..8bc8309 --- /dev/null +++ b/web/src/components/core/base/art-logo/index.vue @@ -0,0 +1,21 @@ + + + + diff --git a/web/src/components/core/base/art-svg-icon/index.vue b/web/src/components/core/base/art-svg-icon/index.vue new file mode 100644 index 0000000..0bfcd0c --- /dev/null +++ b/web/src/components/core/base/art-svg-icon/index.vue @@ -0,0 +1,24 @@ + + + + diff --git a/web/src/components/core/cards/art-bar-chart-card/index.vue b/web/src/components/core/cards/art-bar-chart-card/index.vue new file mode 100644 index 0000000..6815c2b --- /dev/null +++ b/web/src/components/core/cards/art-bar-chart-card/index.vue @@ -0,0 +1,103 @@ + + + + diff --git a/web/src/components/core/cards/art-data-list-card/index.vue b/web/src/components/core/cards/art-data-list-card/index.vue new file mode 100644 index 0000000..fc43323 --- /dev/null +++ b/web/src/components/core/cards/art-data-list-card/index.vue @@ -0,0 +1,74 @@ + + + + diff --git a/web/src/components/core/cards/art-donut-chart-card/index.vue b/web/src/components/core/cards/art-donut-chart-card/index.vue new file mode 100644 index 0000000..df2dcbb --- /dev/null +++ b/web/src/components/core/cards/art-donut-chart-card/index.vue @@ -0,0 +1,124 @@ + + + + diff --git a/web/src/components/core/cards/art-image-card/index.vue b/web/src/components/core/cards/art-image-card/index.vue new file mode 100644 index 0000000..d27fe00 --- /dev/null +++ b/web/src/components/core/cards/art-image-card/index.vue @@ -0,0 +1,89 @@ + + + + diff --git a/web/src/components/core/cards/art-line-chart-card/index.vue b/web/src/components/core/cards/art-line-chart-card/index.vue new file mode 100644 index 0000000..e58c9b2 --- /dev/null +++ b/web/src/components/core/cards/art-line-chart-card/index.vue @@ -0,0 +1,126 @@ + + + + diff --git a/web/src/components/core/cards/art-progress-card/index.vue b/web/src/components/core/cards/art-progress-card/index.vue new file mode 100644 index 0000000..048a836 --- /dev/null +++ b/web/src/components/core/cards/art-progress-card/index.vue @@ -0,0 +1,86 @@ + + + + diff --git a/web/src/components/core/cards/art-stats-card/index.vue b/web/src/components/core/cards/art-stats-card/index.vue new file mode 100644 index 0000000..8e0341b --- /dev/null +++ b/web/src/components/core/cards/art-stats-card/index.vue @@ -0,0 +1,67 @@ + + + + diff --git a/web/src/components/core/cards/art-timeline-list-card/index.vue b/web/src/components/core/cards/art-timeline-list-card/index.vue new file mode 100644 index 0000000..fbb2c78 --- /dev/null +++ b/web/src/components/core/cards/art-timeline-list-card/index.vue @@ -0,0 +1,69 @@ + + + + diff --git a/web/src/components/core/charts/art-bar-chart/index.vue b/web/src/components/core/charts/art-bar-chart/index.vue new file mode 100644 index 0000000..d677196 --- /dev/null +++ b/web/src/components/core/charts/art-bar-chart/index.vue @@ -0,0 +1,203 @@ + + + + diff --git a/web/src/components/core/charts/art-dual-bar-compare-chart/index.vue b/web/src/components/core/charts/art-dual-bar-compare-chart/index.vue new file mode 100644 index 0000000..32aa60f --- /dev/null +++ b/web/src/components/core/charts/art-dual-bar-compare-chart/index.vue @@ -0,0 +1,195 @@ + + + + diff --git a/web/src/components/core/charts/art-h-bar-chart/index.vue b/web/src/components/core/charts/art-h-bar-chart/index.vue new file mode 100644 index 0000000..2e34759 --- /dev/null +++ b/web/src/components/core/charts/art-h-bar-chart/index.vue @@ -0,0 +1,208 @@ + + + + diff --git a/web/src/components/core/charts/art-k-line-chart/index.vue b/web/src/components/core/charts/art-k-line-chart/index.vue new file mode 100644 index 0000000..0061b51 --- /dev/null +++ b/web/src/components/core/charts/art-k-line-chart/index.vue @@ -0,0 +1,152 @@ + + + + diff --git a/web/src/components/core/charts/art-line-chart/index.vue b/web/src/components/core/charts/art-line-chart/index.vue new file mode 100644 index 0000000..b70c2c3 --- /dev/null +++ b/web/src/components/core/charts/art-line-chart/index.vue @@ -0,0 +1,371 @@ + + + + diff --git a/web/src/components/core/charts/art-radar-chart/index.vue b/web/src/components/core/charts/art-radar-chart/index.vue new file mode 100644 index 0000000..e99fff6 --- /dev/null +++ b/web/src/components/core/charts/art-radar-chart/index.vue @@ -0,0 +1,105 @@ + + + + diff --git a/web/src/components/core/charts/art-ring-chart/index.vue b/web/src/components/core/charts/art-ring-chart/index.vue new file mode 100644 index 0000000..79115f7 --- /dev/null +++ b/web/src/components/core/charts/art-ring-chart/index.vue @@ -0,0 +1,133 @@ + + + + diff --git a/web/src/components/core/charts/art-scatter-chart/index.vue b/web/src/components/core/charts/art-scatter-chart/index.vue new file mode 100644 index 0000000..995b56a --- /dev/null +++ b/web/src/components/core/charts/art-scatter-chart/index.vue @@ -0,0 +1,115 @@ + + + + diff --git a/web/src/components/core/forms/art-button-more/index.vue b/web/src/components/core/forms/art-button-more/index.vue new file mode 100644 index 0000000..858d305 --- /dev/null +++ b/web/src/components/core/forms/art-button-more/index.vue @@ -0,0 +1,71 @@ + + + + diff --git a/web/src/components/core/forms/art-button-table/index.vue b/web/src/components/core/forms/art-button-table/index.vue new file mode 100644 index 0000000..c849901 --- /dev/null +++ b/web/src/components/core/forms/art-button-table/index.vue @@ -0,0 +1,59 @@ + + + + diff --git a/web/src/components/core/forms/art-drag-verify/index.vue b/web/src/components/core/forms/art-drag-verify/index.vue new file mode 100644 index 0000000..5306e04 --- /dev/null +++ b/web/src/components/core/forms/art-drag-verify/index.vue @@ -0,0 +1,430 @@ + + + + + + + + diff --git a/web/src/components/core/forms/art-excel-export/index.vue b/web/src/components/core/forms/art-excel-export/index.vue new file mode 100644 index 0000000..08207c2 --- /dev/null +++ b/web/src/components/core/forms/art-excel-export/index.vue @@ -0,0 +1,389 @@ + + + + + + diff --git a/web/src/components/core/forms/art-excel-import/index.vue b/web/src/components/core/forms/art-excel-import/index.vue new file mode 100644 index 0000000..8aa82fe --- /dev/null +++ b/web/src/components/core/forms/art-excel-import/index.vue @@ -0,0 +1,62 @@ + + + + diff --git a/web/src/components/core/forms/art-form/index.vue b/web/src/components/core/forms/art-form/index.vue new file mode 100644 index 0000000..561e878 --- /dev/null +++ b/web/src/components/core/forms/art-form/index.vue @@ -0,0 +1,507 @@ + + + + + + diff --git a/web/src/components/core/forms/art-search-bar/index.vue b/web/src/components/core/forms/art-search-bar/index.vue new file mode 100644 index 0000000..6786dca --- /dev/null +++ b/web/src/components/core/forms/art-search-bar/index.vue @@ -0,0 +1,581 @@ + + + + + + + + diff --git a/web/src/components/core/forms/art-wang-editor/index.vue b/web/src/components/core/forms/art-wang-editor/index.vue new file mode 100644 index 0000000..3a55691 --- /dev/null +++ b/web/src/components/core/forms/art-wang-editor/index.vue @@ -0,0 +1,257 @@ + + + + + + diff --git a/web/src/components/core/forms/art-wang-editor/style.scss b/web/src/components/core/forms/art-wang-editor/style.scss new file mode 100644 index 0000000..7f22e98 --- /dev/null +++ b/web/src/components/core/forms/art-wang-editor/style.scss @@ -0,0 +1,273 @@ +$box-radius: calc(var(--custom-radius) / 3 + 2px); + +// 全屏容器 z-index 调整 +.w-e-full-screen-container { + z-index: 100 !important; +} + +/* 编辑器容器 */ +.editor-wrapper { + width: 100%; + height: 100%; + border: 1px solid var(--art-gray-300); + border-radius: $box-radius !important; + + .w-e-bar { + border-radius: $box-radius $box-radius 0 0 !important; + } + + .menu-item { + display: flex; + flex-direction: row; + align-items: center; + + i { + margin-right: 5px; + } + } + + /* 工具栏 */ + .editor-toolbar { + border-bottom: 1px solid var(--default-border); + } + + /* 下拉选择框配置 */ + .w-e-select-list { + min-width: 140px; + padding: 5px 10px 10px; + border: none; + border-radius: $box-radius; + } + + /* 下拉选择框元素配置 */ + .w-e-select-list ul li { + margin-top: 5px; + font-size: 15px !important; + border-radius: $box-radius; + } + + /* 下拉选择框 正文文字大小调整 */ + .w-e-select-list ul li:last-of-type { + font-size: 16px !important; + } + + /* 下拉选择框 hover 样式调整 */ + .w-e-select-list ul li:hover { + background-color: var(--art-gray-200); + } + + :root { + /* 激活颜色 */ + --w-e-toolbar-active-bg-color: var(--art-gray-200); + + /* toolbar 图标和文字颜色 */ + --w-e-toolbar-color: #000; + + /* 表格选中时候的边框颜色 */ + --w-e-textarea-selected-border-color: #ddd; + + /* 表格头背景颜色 */ + --w-e-textarea-slight-bg-color: var(--art-gray-200); + } + + /* 工具栏按钮样式 */ + .w-e-bar-item svg { + fill: var(--art-gray-800); + } + + .w-e-bar-item button { + color: var(--art-gray-800); + border-radius: $box-radius; + } + + /* 工具栏 hover 按钮背景颜色 */ + .w-e-bar-item button:hover { + background-color: var(--art-gray-200); + } + + /* 工具栏分割线 */ + .w-e-bar-divider { + height: 20px; + margin-top: 10px; + background-color: #ccc; + } + + /* 工具栏菜单 */ + .w-e-bar-item-group .w-e-bar-item-menus-container { + min-width: 120px; + padding: 10px 0; + border: none; + border-radius: $box-radius; + + .w-e-bar-item { + button { + width: 100%; + margin: 0 5px; + } + } + } + + /* 代码块 */ + .w-e-text-container [data-slate-editor] pre > code { + padding: 0.6rem 1rem; + background-color: var(--art-gray-50); + border-radius: $box-radius; + } + + /* 弹出框 */ + .w-e-drop-panel { + border: 0; + border-radius: $box-radius; + } + + a { + color: #318ef4; + } + + .w-e-text-container { + [data-slate-editor] { + h1, + h2, + h3, + h4, + h5, + h6 { + margin: 0.8em 0 0.4em; + font-weight: 700; + line-height: 1.35; + } + + h1 { + font-size: 2em; + } + + h2 { + font-size: 1.5em; + } + + h3 { + font-size: 1.25em; + } + + h4 { + font-size: 1.125em; + } + + h5 { + font-size: 1em; + } + + h6 { + font-size: 0.875em; + } + + ul, + ol { + padding-left: 1.5em; + margin: 0.8em 0; + } + + ul { + list-style: disc; + } + + ol { + list-style: decimal; + } + + li { + margin: 0.25em 0; + } + + ul ul { + list-style: circle; + } + + ul ul ul { + list-style: square; + } + } + + strong, + b { + font-weight: 700; + } + + i, + em { + font-style: italic; + } + } + + /* 表格样式优化 */ + .w-e-text-container [data-slate-editor] .table-container th { + border-right: none; + } + + .w-e-text-container [data-slate-editor] .table-container th:last-of-type { + border-right: 1px solid #ccc !important; + } + + /* 引用 */ + .w-e-text-container [data-slate-editor] blockquote { + background-color: var(--art-gray-200); + border-left: 4px solid var(--art-gray-300); + } + + /* 输入区域弹出 bar */ + .w-e-hover-bar { + border-radius: $box-radius; + } + + /* 超链接弹窗 */ + .w-e-modal { + border: none; + border-radius: $box-radius; + } + + /* 图片样式调整 */ + .w-e-text-container [data-slate-editor] .w-e-selected-image-container { + overflow: inherit; + + &:hover { + border: 0; + } + + img { + border: 1px solid transparent; + transition: border 0.3s; + + &:hover { + border: 1px solid #318ef4 !important; + } + } + + .w-e-image-dragger { + width: 12px; + height: 12px; + background-color: #318ef4; + border: 2px solid #fff; + border-radius: $box-radius; + } + + .left-top { + top: -6px; + left: -6px; + } + + .right-top { + top: -6px; + right: -6px; + } + + .left-bottom { + bottom: -6px; + left: -6px; + } + + .right-bottom { + right: -6px; + bottom: -6px; + } + } +} diff --git a/web/src/components/core/layouts/art-breadcrumb/index.vue b/web/src/components/core/layouts/art-breadcrumb/index.vue new file mode 100755 index 0000000..4b54859 --- /dev/null +++ b/web/src/components/core/layouts/art-breadcrumb/index.vue @@ -0,0 +1,142 @@ + + + + diff --git a/web/src/components/core/layouts/art-chat-window/index.vue b/web/src/components/core/layouts/art-chat-window/index.vue new file mode 100644 index 0000000..f3d9471 --- /dev/null +++ b/web/src/components/core/layouts/art-chat-window/index.vue @@ -0,0 +1,262 @@ + + + + diff --git a/web/src/components/core/layouts/art-fast-enter/index.vue b/web/src/components/core/layouts/art-fast-enter/index.vue new file mode 100644 index 0000000..fdde222 --- /dev/null +++ b/web/src/components/core/layouts/art-fast-enter/index.vue @@ -0,0 +1,113 @@ + + + + diff --git a/web/src/components/core/layouts/art-fireworks-effect/index.vue b/web/src/components/core/layouts/art-fireworks-effect/index.vue new file mode 100644 index 0000000..be85274 --- /dev/null +++ b/web/src/components/core/layouts/art-fireworks-effect/index.vue @@ -0,0 +1,633 @@ + + + + diff --git a/web/src/components/core/layouts/art-global-component/index.vue b/web/src/components/core/layouts/art-global-component/index.vue new file mode 100644 index 0000000..6908f94 --- /dev/null +++ b/web/src/components/core/layouts/art-global-component/index.vue @@ -0,0 +1,14 @@ + + + + diff --git a/web/src/components/core/layouts/art-global-search/index.vue b/web/src/components/core/layouts/art-global-search/index.vue new file mode 100644 index 0000000..f2c0b88 --- /dev/null +++ b/web/src/components/core/layouts/art-global-search/index.vue @@ -0,0 +1,431 @@ + + + + + + + diff --git a/web/src/components/core/layouts/art-header-bar/index.vue b/web/src/components/core/layouts/art-header-bar/index.vue new file mode 100755 index 0000000..4e3c8f9 --- /dev/null +++ b/web/src/components/core/layouts/art-header-bar/index.vue @@ -0,0 +1,485 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue b/web/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue new file mode 100644 index 0000000..c8c5832 --- /dev/null +++ b/web/src/components/core/layouts/art-header-bar/widget/ArtUserMenu.vue @@ -0,0 +1,167 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue b/web/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue new file mode 100644 index 0000000..edd1473 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-horizontal-menu/index.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue b/web/src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue new file mode 100644 index 0000000..0f3a817 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/web/src/components/core/layouts/art-menus/art-mixed-menu/index.vue b/web/src/components/core/layouts/art-menus/art-mixed-menu/index.vue new file mode 100644 index 0000000..4e98246 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-mixed-menu/index.vue @@ -0,0 +1,279 @@ + + + + + + + + diff --git a/web/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue b/web/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue new file mode 100755 index 0000000..6bf46fe --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue @@ -0,0 +1,354 @@ + + + + + + + + diff --git a/web/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss b/web/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss new file mode 100755 index 0000000..8cccdd9 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-sidebar-menu/style.scss @@ -0,0 +1,251 @@ +.layout-sidebar { + display: flex; + height: 100vh; + user-select: none; + scrollbar-width: none; + border-right: 1px solid var(--art-card-border); + + &.no-border { + border-right: none !important; + } + + // 自定义滚动条宽度 + :deep(.el-scrollbar__bar.is-vertical) { + width: 4px; + } + + :deep(.el-scrollbar__thumb) { + right: -2px; + background-color: #ccc; + border-radius: 2px; + } + + .dual-menu-left { + position: relative; + width: 80px; + height: 100%; + border-right: 1px solid var(--art-card-border) !important; + transition: width 0.25s; + + .logo { + margin: auto; + margin-top: 12px; + margin-bottom: 3px; + cursor: pointer; + } + + ul { + li { + > div { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin: 8px; + overflow: hidden; + text-align: center; + cursor: pointer; + border-radius: 5px; + + .art-svg-icon { + display: block; + margin: 0 auto; + font-size: 20px; + } + + span { + display: -webkit-box; + width: 100%; + overflow: hidden; + font-size: 12px; + text-overflow: ellipsis; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; + } + + &.is-active { + background: var(--el-color-primary-light-9); + + .art-svg-icon, + span { + color: var(--theme-color) !important; + } + } + } + } + } + + .switch-btn { + position: absolute; + right: 0; + bottom: 15px; + left: 0; + margin: auto; + } + } + + .menu-left { + position: relative; + box-sizing: border-box; + height: 100vh; + + @media only screen and (width <= 640px) { + height: 100dvh; + } + + .el-menu { + height: 100%; + } + + &:hover { + .dual-menu-collapse-btn { + opacity: 1 !important; + } + } + + .dual-menu-collapse-btn { + position: absolute; + top: 50%; + right: -11px; + z-index: 10; + width: 11px; + height: 50px; + cursor: pointer; + background-color: var(--default-box-color); + border: 1px solid var(--art-card-border); + border-radius: 0 15px 15px 0; + opacity: 0; + transition: opacity 0.2s; + transform: translateY(-50%); + + &:hover { + .art-svg-icon { + color: var(--art-gray-800) !important; + } + } + + .art-svg-icon { + position: absolute; + top: 0; + bottom: 0; + left: -4px; + margin: auto; + transition: all 0.3s; + } + } + } + + .header { + position: relative; + box-sizing: border-box; + display: flex; + align-items: center; + width: 100%; + height: 60px; + overflow: hidden; + line-height: 60px; + cursor: pointer; + + .logo { + margin-left: 22px; + } + + p { + position: absolute; + top: 0; + bottom: 0; + left: 58px; + box-sizing: border-box; + margin-left: 10px; + font-size: 18px; + + &.is-dual-menu-name { + left: 25px; + margin: auto; + } + } + } + + .el-menu { + box-sizing: border-box; + // 防止菜单内的滚动影响整个页面滚动 + overscroll-behavior: contain; + border-right: 0; + scrollbar-width: none; + -ms-scroll-chaining: contain; + + &::-webkit-scrollbar { + width: 0 !important; + } + } + + .menu-model { + display: none; + } +} + +@media only screen and (width <= 800px) { + .layout-sidebar { + width: 0; + + .header { + height: 50px; + line-height: 50px; + } + + .el-menu { + height: calc(100vh - 60px); + } + + .el-menu--collapse { + width: 0; + } + + // 折叠状态下的header样式 + .menu-left-close .header { + .logo { + display: none; + } + + p { + left: 16px; + font-size: 0; + opacity: 0 !important; + } + } + + .menu-model { + position: fixed; + top: 0; + left: 0; + z-index: -1; + display: block; + width: 100%; + height: 100vh; + background: rgba($color: #000, $alpha: 50%); + transition: opacity 0.2s ease-in-out; + } + } +} + +@media only screen and (width <= 640px) { + .layout-sidebar { + border-right: 0 !important; + } +} + +.dark { + .layout-sidebar { + border-right: 1px solid rgb(255 255 255 / 13%); + + :deep(.el-scrollbar__thumb) { + background-color: #777; + } + + .dual-menu-left { + border-right: 1px solid rgb(255 255 255 / 9%) !important; + } + } +} diff --git a/web/src/components/core/layouts/art-menus/art-sidebar-menu/theme.scss b/web/src/components/core/layouts/art-menus/art-sidebar-menu/theme.scss new file mode 100644 index 0000000..7626c42 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-sidebar-menu/theme.scss @@ -0,0 +1,258 @@ +@use '@styles/core/mixin.scss' as *; + +// 菜单样式变量 +$menu-height: 42px; +$menu-icon-size: 20px; +$menu-font-size: 14px; +$hover-bg-color: var(--art-gray-200); +$popup-menu-height: 40px; +$popup-menu-padding: 8px; +$popup-menu-margin: 5px; +$popup-menu-radius: 6px; + +// 通用菜单项样式 +@mixin menu-item-base { + width: calc(100% - 16px); + margin-left: 8px; + border-radius: 6px; + + .menu-icon { + margin-left: -7px; + } +} + +// 通用 hover 样式 +@mixin menu-hover($bg-color) { + .el-sub-menu__title:hover, + .el-menu-item:not(.is-active):hover { + background: $bg-color !important; + } +} + +// 通用选中样式 +@mixin menu-active($color, $bg-color, $icon-color: var(--theme-color)) { + .el-menu-item.is-active { + color: $color !important; + background-color: $bg-color; + + .menu-icon { + .art-svg-icon { + color: $icon-color !important; + } + } + } +} + +// 弹窗菜单项样式 +@mixin popup-menu-item { + height: $popup-menu-height; + margin-bottom: $popup-menu-margin; + border-radius: $popup-menu-radius; + + .menu-icon { + margin-right: 5px; + } + + &:last-of-type { + margin-bottom: 0; + } +} + +// 主题菜单通用样式(合并 design 和 dark 主题的共同逻辑) +@mixin theme-menu-base { + .el-sub-menu__title, + .el-menu-item { + @include menu-item-base; + } +} + +// 弹窗菜单通用样式 +@mixin popup-menu-base($hover-bg, $active-color, $active-bg) { + .el-menu--popup { + padding: $popup-menu-padding; + + .el-sub-menu__title:hover, + .el-menu-item:hover { + background-color: $hover-bg !important; + border-radius: $popup-menu-radius; + } + + .el-menu-item { + @include popup-menu-item; + + &.is-active { + color: $active-color !important; + background-color: $active-bg !important; + } + } + + .el-sub-menu { + @include popup-menu-item; + + height: $popup-menu-height !important; + + .el-sub-menu__title { + height: $popup-menu-height !important; + border-radius: $popup-menu-radius; + } + } + } +} + +.layout-sidebar { + // ---------------------- Modify default style ---------------------- + + // 菜单折叠样式 + .menu-left-close { + .header { + .logo { + margin: 0 auto; + } + } + } + + // 菜单图标 + .menu-icon { + margin-right: 8px; + font-size: $menu-icon-size; + } + + // 菜单高度 + .el-sub-menu__title, + .el-menu-item { + height: $menu-height !important; + margin-bottom: 4px; + line-height: $menu-height !important; + + span { + font-size: $menu-font-size !important; + + @include ellipsis(); + } + } + + // 右侧箭头 + .el-sub-menu__icon-arrow { + width: 13px !important; + font-size: 13px !important; + } + + // 菜单折叠 + .el-menu--collapse { + .el-sub-menu.is-active { + .el-sub-menu__title { + .menu-icon { + .art-svg-icon { + // 选中菜单图标颜色 + color: var(--theme-color) !important; + } + } + } + } + } + + // ---------------------- Design theme menu ---------------------- + .el-menu-design { + @include theme-menu-base; + @include menu-active(var(--theme-color), var(--el-color-primary-light-9)); + @include menu-hover($hover-bg-color); + + .el-sub-menu__icon-arrow { + color: var(--art-gray-600); + } + } + + // ---------------------- Dark theme menu ---------------------- + .el-menu-dark { + @include theme-menu-base; + @include menu-active(#fff, #27282d, #fff); + @include menu-hover(#0f1015); + + .el-sub-menu__icon-arrow { + color: var(--art-gray-400); + } + } + + // ---------------------- Light theme menu ---------------------- + .el-menu-light { + .el-sub-menu__title, + .el-menu-item { + .menu-icon { + margin-left: 1px; + } + } + + .el-menu-item.is-active { + background-color: var(--el-color-primary-light-9); + + .art-svg-icon { + color: var(--theme-color) !important; + } + + &::before { + position: absolute; + top: 0; + left: 0; + width: 4px; + height: 100%; + content: ''; + background: var(--theme-color); + } + } + + @include menu-hover($hover-bg-color); + + .el-sub-menu__icon-arrow { + color: var(--art-gray-600); + } + } +} + +@media only screen and (width <= 640px) { + .layout-sidebar { + .el-menu-design { + > .el-sub-menu { + margin-left: 0; + } + + .el-sub-menu { + width: 100% !important; + } + } + } +} + +// 菜单折叠 hover 弹窗样式(浅色主题) +.el-menu--vertical, +.el-menu--popup-container { + @include popup-menu-base(var(--art-gray-200), var(--art-gray-900), var(--art-gray-200)); +} + +// 暗黑模式菜单样式 +.dark { + .el-menu--vertical, + .el-menu--popup-container { + @include popup-menu-base(var(--art-gray-200), var(--art-gray-900), #292a2e); + } + + .layout-sidebar { + // 图标颜色、文字颜色 + .menu-icon .art-svg-icon, + .menu-name { + color: var(--art-gray-800) !important; + } + + // 选中的文字颜色跟图标颜色 + .el-menu-item.is-active { + span, + .menu-icon .art-svg-icon { + color: var(--theme-color) !important; + } + } + + // 右侧箭头颜色 + .el-sub-menu__icon-arrow { + color: #fff; + } + } +} diff --git a/web/src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue b/web/src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue new file mode 100755 index 0000000..9afa262 --- /dev/null +++ b/web/src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue @@ -0,0 +1,199 @@ + + + diff --git a/web/src/components/core/layouts/art-notification/index.vue b/web/src/components/core/layouts/art-notification/index.vue new file mode 100755 index 0000000..a58853c --- /dev/null +++ b/web/src/components/core/layouts/art-notification/index.vue @@ -0,0 +1,456 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-page-content/index.vue b/web/src/components/core/layouts/art-page-content/index.vue new file mode 100644 index 0000000..a862df1 --- /dev/null +++ b/web/src/components/core/layouts/art-page-content/index.vue @@ -0,0 +1,136 @@ + + + diff --git a/web/src/components/core/layouts/art-screen-lock/index.vue b/web/src/components/core/layouts/art-screen-lock/index.vue new file mode 100644 index 0000000..5bf5248 --- /dev/null +++ b/web/src/components/core/layouts/art-screen-lock/index.vue @@ -0,0 +1,519 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts new file mode 100644 index 0000000..35e8066 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts @@ -0,0 +1,248 @@ +import { computed } from 'vue' +import { useI18n } from 'vue-i18n' +import { ContainerWidthEnum } from '@/enums/appEnum' +import AppConfig from '@/config' +import { headerBarConfig } from '@/config/modules/headerBar' + +/** + * 设置项配置选项管理 + */ +export function useSettingsConfig() { + const { t } = useI18n() + + // 标签页风格选项 + const tabStyleOptions = computed(() => [ + { + value: 'tab-default', + label: t('setting.tabStyle.default') + }, + { + value: 'tab-card', + label: t('setting.tabStyle.card') + }, + { + value: 'tab-google', + label: t('setting.tabStyle.google') + } + ]) + + // 页面切换动画选项 + const pageTransitionOptions = computed(() => [ + { + value: '', + label: t('setting.transition.list.none') + }, + { + value: 'fade', + label: t('setting.transition.list.fade') + }, + { + value: 'slide-left', + label: t('setting.transition.list.slideLeft') + }, + { + value: 'slide-bottom', + label: t('setting.transition.list.slideBottom') + }, + { + value: 'slide-top', + label: t('setting.transition.list.slideTop') + } + ]) + + // 圆角大小选项 + const customRadiusOptions = [ + { value: '0', label: '0' }, + { value: '0.25', label: '0.25' }, + { value: '0.5', label: '0.5' }, + { value: '0.75', label: '0.75' }, + { value: '1', label: '1' } + ] + + // 容器宽度选项 + const containerWidthOptions = computed(() => [ + { + value: ContainerWidthEnum.FULL, + label: t('setting.container.list[0]'), + icon: 'icon-park-outline:auto-width' + }, + { + value: ContainerWidthEnum.BOXED, + label: t('setting.container.list[1]'), + icon: 'ix:width' + } + ]) + + // 盒子样式选项 + const boxStyleOptions = computed(() => [ + { + value: 'border-mode', + label: t('setting.box.list[0]'), + type: 'border-mode' as const + }, + { + value: 'shadow-mode', + label: t('setting.box.list[1]'), + type: 'shadow-mode' as const + } + ]) + + // 从配置文件获取的选项 + const configOptions = { + // 主题色彩选项 + mainColors: AppConfig.systemMainColor, + + // 主题风格选项 + themeList: AppConfig.settingThemeList, + + // 菜单布局选项 + menuLayoutList: AppConfig.menuLayoutList + } + + // 基础设置项配置 + const basicSettingsConfig = computed(() => { + // 定义所有基础设置项 + const allSettings = [ + { + key: 'showWorkTab', + label: t('setting.basics.list.multiTab'), + type: 'switch' as const, + handler: 'workTab', + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'uniqueOpened', + label: t('setting.basics.list.accordion'), + type: 'switch' as const, + handler: 'uniqueOpened', + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'showMenuButton', + label: t('setting.basics.list.collapseSidebar'), + type: 'switch' as const, + handler: 'menuButton', + headerBarKey: 'menuButton' as const + }, + { + key: 'showFastEnter', + label: t('setting.basics.list.fastEnter'), + type: 'switch' as const, + handler: 'fastEnter', + headerBarKey: 'fastEnter' as const + }, + { + key: 'showRefreshButton', + label: t('setting.basics.list.reloadPage'), + type: 'switch' as const, + handler: 'refreshButton', + headerBarKey: 'refreshButton' as const + }, + { + key: 'showCrumbs', + label: t('setting.basics.list.breadcrumb'), + type: 'switch' as const, + handler: 'crumbs', + mobileHide: true, + headerBarKey: 'breadcrumb' as const + }, + { + key: 'showLanguage', + label: t('setting.basics.list.language'), + type: 'switch' as const, + handler: 'language', + headerBarKey: 'language' as const + }, + { + key: 'showNprogress', + label: t('setting.basics.list.progressBar'), + type: 'switch' as const, + handler: 'nprogress', + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'colorWeak', + label: t('setting.basics.list.weakMode'), + type: 'switch' as const, + handler: 'colorWeak', + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'watermarkVisible', + label: t('setting.basics.list.watermark'), + type: 'switch' as const, + handler: 'watermark', + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'menuOpenWidth', + label: t('setting.basics.list.menuWidth'), + type: 'input-number' as const, + handler: 'menuOpenWidth', + min: 180, + max: 320, + step: 10, + style: { width: '120px' }, + controlsPosition: 'right' as const, + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'tabStyle', + label: t('setting.basics.list.tabStyle'), + type: 'select' as const, + handler: 'tabStyle', + options: tabStyleOptions.value, + style: { width: '120px' }, + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'pageTransition', + label: t('setting.basics.list.pageTransition'), + type: 'select' as const, + handler: 'pageTransition', + options: pageTransitionOptions.value, + style: { width: '120px' }, + headerBarKey: null // 不依赖headerBar配置 + }, + { + key: 'customRadius', + label: t('setting.basics.list.borderRadius'), + type: 'select' as const, + handler: 'customRadius', + options: customRadiusOptions, + style: { width: '120px' }, + headerBarKey: null // 不依赖headerBar配置 + } + ] + + // 根据 headerBarConfig 过滤设置项 + return ( + allSettings + .filter((setting) => { + // 如果设置项不依赖headerBar配置,则始终显示 + if (setting.headerBarKey === null) { + return true + } + + // 如果依赖headerBar配置,检查对应的功能是否启用 + const headerBarFeature = headerBarConfig[setting.headerBarKey] + return headerBarFeature?.enabled !== false + }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .map(({ headerBarKey: _headerBarKey, ...setting }) => setting) + ) + }) + + return { + // 选项配置 + tabStyleOptions, + pageTransitionOptions, + customRadiusOptions, + containerWidthOptions, + boxStyleOptions, + configOptions, + + // 设置项配置 + basicSettingsConfig + } +} diff --git a/web/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts new file mode 100644 index 0000000..392c690 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts @@ -0,0 +1,167 @@ +import { useSettingStore } from '@/store/modules/setting' +import { storeToRefs } from 'pinia' +import type { ContainerWidthEnum } from '@/enums/appEnum' + +/** + * 设置项通用处理逻辑 + */ +export function useSettingsHandlers() { + const settingStore = useSettingStore() + + // DOM 操作相关 + const domOperations = { + // 设置HTML类名 + setHtmlClass: (className: string, add: boolean) => { + const el = document.getElementsByTagName('html')[0] + if (add) { + el.classList.add(className) + } else { + el.classList.remove(className) + } + }, + + // 设置根元素属性 + setRootAttribute: (attribute: string, value: string) => { + const el = document.documentElement + el.setAttribute(attribute, value) + }, + + // 设置body类名 + setBodyClass: (className: string, add: boolean) => { + const el = document.getElementsByTagName('body')[0] + if (add) { + el.classList.add(className) + } else { + el.classList.remove(className) + } + } + } + + // 通用切换处理器 + const createToggleHandler = (storeMethod: () => void, callback?: () => void) => { + return () => { + storeMethod() + callback?.() + } + } + + // 通用值变更处理器 + const createValueHandler = ( + storeMethod: (value: T) => void, + callback?: (value: T) => void + ) => { + return (value: T) => { + if (value !== undefined && value !== null) { + storeMethod(value) + callback?.(value) + } + } + } + + // 基础设置处理器 + const basicHandlers = { + // 工作台标签页 + workTab: createToggleHandler(() => settingStore.setWorkTab(!settingStore.showWorkTab)), + + // 菜单手风琴 + uniqueOpened: createToggleHandler(() => settingStore.setUniqueOpened()), + + // 显示菜单按钮 + menuButton: createToggleHandler(() => settingStore.setButton()), + + // 显示快速入口 + fastEnter: createToggleHandler(() => settingStore.setFastEnter()), + + // 显示刷新按钮 + refreshButton: createToggleHandler(() => settingStore.setShowRefreshButton()), + + // 显示面包屑 + crumbs: createToggleHandler(() => settingStore.setCrumbs()), + + // 显示语言切换 + language: createToggleHandler(() => settingStore.setLanguage()), + + // 显示进度条 + nprogress: createToggleHandler(() => settingStore.setNprogress()), + + // 色弱模式 + colorWeak: createToggleHandler( + () => settingStore.setColorWeak(), + () => { + domOperations.setHtmlClass('color-weak', settingStore.colorWeak) + } + ), + + // 水印显示 + watermark: createToggleHandler(() => + settingStore.setWatermarkVisible(!settingStore.watermarkVisible) + ), + + // 菜单展开宽度 + menuOpenWidth: createValueHandler((width: number) => + settingStore.setMenuOpenWidth(width) + ), + + // 标签页风格 + tabStyle: createValueHandler((style: string) => settingStore.setTabStyle(style)), + + // 页面切换动画 + pageTransition: createValueHandler((transition: string) => + settingStore.setPageTransition(transition) + ), + + // 圆角大小 + customRadius: createValueHandler((radius: string) => + settingStore.setCustomRadius(radius) + ) + } + + // 盒子样式处理器 + const boxStyleHandlers = { + // 设置盒子模式 + setBoxMode: (type: 'border-mode' | 'shadow-mode') => { + const { boxBorderMode } = storeToRefs(settingStore) + + // 防止重复设置 + if ( + (type === 'shadow-mode' && boxBorderMode.value === false) || + (type === 'border-mode' && boxBorderMode.value === true) + ) { + return + } + + setTimeout(() => { + domOperations.setRootAttribute('data-box-mode', type) + settingStore.setBorderMode() + }, 50) + } + } + + // 颜色设置处理器 + const colorHandlers = { + // 选择主题色 + selectColor: (theme: string) => { + settingStore.setElementTheme(theme) + settingStore.reload() + } + } + + // 容器设置处理器 + const containerHandlers = { + // 设置容器宽度 + setWidth: (type: ContainerWidthEnum) => { + settingStore.setContainerWidth(type) + settingStore.reload() + } + } + + return { + domOperations, + basicHandlers, + boxStyleHandlers, + colorHandlers, + containerHandlers, + createToggleHandler, + createValueHandler + } +} diff --git a/web/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts new file mode 100644 index 0000000..f5e4e56 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts @@ -0,0 +1,233 @@ +import { ref, computed, watch } from 'vue' +import { useSettingStore } from '@/store/modules/setting' +import { storeToRefs } from 'pinia' +import { useBreakpoints } from '@vueuse/core' +import AppConfig from '@/config' +import { SystemThemeEnum, MenuTypeEnum } from '@/enums/appEnum' +import { mittBus } from '@/utils/sys' +import { StorageConfig } from '@/utils' +import { useTheme } from '@/hooks/core/useTheme' +import { useCeremony } from '@/hooks/core/useCeremony' +import { useSettingsState } from './useSettingsState' +import { useSettingsHandlers } from './useSettingsHandlers' + +/** + * 设置面板核心逻辑管理 + */ +export function useSettingsPanel() { + const settingStore = useSettingStore() + const { systemThemeType, systemThemeMode, menuType } = storeToRefs(settingStore) + + // Composables + const { openFestival, cleanup } = useCeremony() + const { setSystemTheme, setSystemAutoTheme } = useTheme() + const { initColorWeak } = useSettingsState() + const { domOperations } = useSettingsHandlers() + + // 响应式状态 + const showDrawer = ref(false) + + // 使用 VueUse breakpoints 优化性能 + const breakpoints = useBreakpoints({ tablet: 1000 }) + const isMobile = breakpoints.smaller('tablet') + + // 记录窗口宽度变化前的菜单类型 + const getStoredDesktopMenuType = (): MenuTypeEnum | undefined => { + const storedMenuType = localStorage.getItem(StorageConfig.RESPONSIVE_MENU_TYPE_KEY) + return Object.values(MenuTypeEnum).includes(storedMenuType as MenuTypeEnum) + ? (storedMenuType as MenuTypeEnum) + : undefined + } + + const setStoredDesktopMenuType = (type: MenuTypeEnum) => { + localStorage.setItem(StorageConfig.RESPONSIVE_MENU_TYPE_KEY, type) + } + + const clearStoredDesktopMenuType = () => { + localStorage.removeItem(StorageConfig.RESPONSIVE_MENU_TYPE_KEY) + } + + const storedDesktopMenuType = getStoredDesktopMenuType() + const beforeMenuType = ref(storedDesktopMenuType) + const hasChangedMenu = ref(Boolean(storedDesktopMenuType)) + + // 计算属性 + const systemThemeColor = computed(() => settingStore.systemThemeColor as string) + + // 主题相关处理 + const useThemeHandlers = () => { + // 初始化系统颜色 + const initSystemColor = () => { + if (!AppConfig.systemMainColor.includes(systemThemeColor.value)) { + settingStore.setElementTheme(AppConfig.systemMainColor[0]) + settingStore.reload() + } + } + + // 初始化系统主题 + const initSystemTheme = () => { + if (systemThemeMode.value === SystemThemeEnum.AUTO) { + setSystemAutoTheme() + } else { + setSystemTheme(systemThemeType.value) + } + } + + // 监听系统主题变化 + const listenerSystemTheme = () => { + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)') + mediaQuery.addEventListener('change', initSystemTheme) + return () => { + mediaQuery.removeEventListener('change', initSystemTheme) + } + } + + return { + initSystemColor, + initSystemTheme, + listenerSystemTheme + } + } + + // 响应式布局处理 + const useResponsiveLayout = () => { + // 使用 watch 监听断点变化,性能更优 + const stopWatch = watch( + isMobile, + (mobile: boolean) => { + if (mobile) { + // 切换到移动端布局 + if (!hasChangedMenu.value) { + beforeMenuType.value = menuType.value + if (menuType.value !== MenuTypeEnum.LEFT) { + setStoredDesktopMenuType(menuType.value) + useSettingsState().switchMenuLayouts(MenuTypeEnum.LEFT) + hasChangedMenu.value = true + } + } + + settingStore.setMenuOpen(false) + } else { + // 恢复桌面端布局 + if (hasChangedMenu.value && beforeMenuType.value) { + if (menuType.value === MenuTypeEnum.LEFT) { + useSettingsState().switchMenuLayouts(beforeMenuType.value) + } + + clearStoredDesktopMenuType() + hasChangedMenu.value = false + } + + settingStore.setMenuOpen(true) + } + }, + { immediate: true } + ) + + return { stopWatch } + } + + // 抽屉控制 + const useDrawerControl = () => { + // 用于存储 setTimeout 的 ID,以便在需要时清除 + let themeChangeTimer: ReturnType | null = null + + // 打开抽屉 + const handleOpen = () => { + // 清除可能存在的旧定时器 + if (themeChangeTimer) { + clearTimeout(themeChangeTimer) + } + // 延迟添加 theme-change class,避免抽屉打开动画受影响 + themeChangeTimer = setTimeout(() => { + domOperations.setBodyClass('theme-change', true) + themeChangeTimer = null + }, 500) + } + + // 关闭抽屉 + const handleClose = () => { + // 清除未执行的定时器,防止关闭后才添加 class + if (themeChangeTimer) { + clearTimeout(themeChangeTimer) + themeChangeTimer = null + } + // 立即移除 theme-change class + domOperations.setBodyClass('theme-change', false) + } + + // 打开设置 + const openSetting = () => { + showDrawer.value = true + } + + // 关闭设置 + const closeDrawer = () => { + showDrawer.value = false + } + + return { + handleOpen, + handleClose, + openSetting, + closeDrawer + } + } + + // Props 变化监听 + const usePropsWatcher = (props: { open?: boolean }) => { + watch( + () => props.open, + (val: boolean | undefined) => { + if (val !== undefined) { + showDrawer.value = val + } + } + ) + } + + // 初始化设置 + const useSettingsInitializer = () => { + const themeHandlers = useThemeHandlers() + const { openSetting } = useDrawerControl() + const { stopWatch } = useResponsiveLayout() + let themeCleanup: (() => void) | null = null + + const initializeSettings = () => { + mittBus.on('openSetting', openSetting) + themeHandlers.initSystemColor() + themeCleanup = themeHandlers.listenerSystemTheme() + initColorWeak() + + // 设置盒子模式 + const boxMode = settingStore.boxBorderMode ? 'border-mode' : 'shadow-mode' + domOperations.setRootAttribute('data-box-mode', boxMode) + + themeHandlers.initSystemTheme() + openFestival() + } + + const cleanupSettings = () => { + stopWatch() + themeCleanup?.() + cleanup() + } + + return { + initializeSettings, + cleanupSettings + } + } + + return { + // 状态 + showDrawer, + + // 方法组合 + useThemeHandlers, + useResponsiveLayout, + useDrawerControl, + usePropsWatcher, + useSettingsInitializer + } +} diff --git a/web/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts new file mode 100644 index 0000000..65352d2 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts @@ -0,0 +1,37 @@ +import { useSettingStore } from '@/store/modules/setting' +import { MenuThemeEnum, MenuTypeEnum } from '@/enums/appEnum' + +/** + * 设置状态管理 + */ +export function useSettingsState() { + const settingStore = useSettingStore() + + // 色弱模式初始化 + const initColorWeak = () => { + if (settingStore.colorWeak) { + const el = document.getElementsByTagName('html')[0] + setTimeout(() => { + el.classList.add('color-weak') + }, 100) + } + } + + // 菜单布局切换 + const switchMenuLayouts = (type: MenuTypeEnum) => { + if (type === MenuTypeEnum.LEFT || type === MenuTypeEnum.TOP_LEFT) { + settingStore.setMenuOpen(true) + } + settingStore.switchMenuLayouts(type) + if (type === MenuTypeEnum.DUAL_MENU) { + settingStore.switchMenuStyles(MenuThemeEnum.DESIGN) + settingStore.setMenuOpen(true) + } + } + + return { + // 方法 + initColorWeak, + switchMenuLayouts + } +} diff --git a/web/src/components/core/layouts/art-settings-panel/index.vue b/web/src/components/core/layouts/art-settings-panel/index.vue new file mode 100755 index 0000000..0cbf344 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/index.vue @@ -0,0 +1,72 @@ + + + + + + diff --git a/web/src/components/core/layouts/art-settings-panel/style.scss b/web/src/components/core/layouts/art-settings-panel/style.scss new file mode 100755 index 0000000..e863074 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/style.scss @@ -0,0 +1,92 @@ +@use '@styles/core/mixin.scss' as *; + +// 设置抽屉模态框样式 +.setting-modal { + background: transparent !important; + + .el-drawer { + // 背景滤镜效果 + background: rgba($color: #fff, $alpha: 50%) !important; + box-shadow: 0 0 30px rgb(0 0 0 / 10%) !important; + + @include backdropBlur(); + + .setting-box-wrap { + display: flex; + flex-wrap: wrap; + align-items: center; + width: calc(100% + 15px); + margin-bottom: 10px; + + .setting-item { + box-sizing: border-box; + width: calc(33.333% - 15px); + margin-right: 15px; + text-align: center; + + .box { + position: relative; + box-sizing: border-box; + display: flex; + height: 52px; + overflow: hidden; + cursor: pointer; + border: 2px solid var(--default-border); + border-radius: 8px; + box-shadow: 0 0 8px 0 rgb(0 0 0 / 10%); + transition: box-shadow 0.1s; + + &.mt-16 { + margin-top: 16px; + } + + &.is-active { + border: 2px solid var(--theme-color); + } + + img { + width: 100%; + height: 100%; + } + } + + .name { + margin-top: 6px; + font-size: 14px; + text-align: center; + } + } + } + } + + // 去除滚动条 + .el-drawer__body::-webkit-scrollbar { + width: 0 !important; + } +} + +.dark { + .setting-modal { + .el-drawer { + background: rgba($color: #000, $alpha: 50%) !important; + + .setting-item { + .box { + border: 2px solid transparent; + } + } + } + } +} + +// 去除火狐浏览器滚动条 +:deep(.el-drawer__body) { + scrollbar-width: none; +} + +// 移动端隐藏 +@media screen and (width <= 800px) { + .mobile-hide { + display: none !important; + } +} diff --git a/web/src/components/core/layouts/art-settings-panel/widget/BasicSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/BasicSettings.vue new file mode 100644 index 0000000..b6dc9d3 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/BasicSettings.vue @@ -0,0 +1,77 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue new file mode 100644 index 0000000..86c7a9e --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue @@ -0,0 +1,38 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/ColorSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/ColorSettings.vue new file mode 100644 index 0000000..05a4b41 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/ColorSettings.vue @@ -0,0 +1,35 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/ContainerSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/ContainerSettings.vue new file mode 100644 index 0000000..1f5be72 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/ContainerSettings.vue @@ -0,0 +1,33 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue new file mode 100644 index 0000000..dbcae46 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue @@ -0,0 +1,31 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue new file mode 100644 index 0000000..61237eb --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue @@ -0,0 +1,44 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/SectionTitle.vue b/web/src/components/core/layouts/art-settings-panel/widget/SectionTitle.vue new file mode 100644 index 0000000..31ef00c --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/SectionTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/SettingActions.vue b/web/src/components/core/layouts/art-settings-panel/widget/SettingActions.vue new file mode 100644 index 0000000..7b47d1a --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/SettingActions.vue @@ -0,0 +1,235 @@ + + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/SettingDrawer.vue b/web/src/components/core/layouts/art-settings-panel/widget/SettingDrawer.vue new file mode 100644 index 0000000..85372be --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/SettingDrawer.vue @@ -0,0 +1,51 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/SettingHeader.vue b/web/src/components/core/layouts/art-settings-panel/widget/SettingHeader.vue new file mode 100644 index 0000000..e3ead9e --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/SettingHeader.vue @@ -0,0 +1,18 @@ + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/SettingItem.vue b/web/src/components/core/layouts/art-settings-panel/widget/SettingItem.vue new file mode 100644 index 0000000..5721027 --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/SettingItem.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/web/src/components/core/layouts/art-settings-panel/widget/ThemeSettings.vue b/web/src/components/core/layouts/art-settings-panel/widget/ThemeSettings.vue new file mode 100644 index 0000000..4b46fcd --- /dev/null +++ b/web/src/components/core/layouts/art-settings-panel/widget/ThemeSettings.vue @@ -0,0 +1,28 @@ + + + diff --git a/web/src/components/core/layouts/art-work-tab/index.vue b/web/src/components/core/layouts/art-work-tab/index.vue new file mode 100755 index 0000000..152ff63 --- /dev/null +++ b/web/src/components/core/layouts/art-work-tab/index.vue @@ -0,0 +1,584 @@ + + + + + + diff --git a/web/src/components/core/media/art-cutter-img/index.vue b/web/src/components/core/media/art-cutter-img/index.vue new file mode 100644 index 0000000..191ceed --- /dev/null +++ b/web/src/components/core/media/art-cutter-img/index.vue @@ -0,0 +1,350 @@ + + + + + + diff --git a/web/src/components/core/media/art-video-player/index.vue b/web/src/components/core/media/art-video-player/index.vue new file mode 100644 index 0000000..4f681ea --- /dev/null +++ b/web/src/components/core/media/art-video-player/index.vue @@ -0,0 +1,111 @@ + + + + diff --git a/web/src/components/core/others/art-menu-right/index.vue b/web/src/components/core/others/art-menu-right/index.vue new file mode 100644 index 0000000..1cc92ab --- /dev/null +++ b/web/src/components/core/others/art-menu-right/index.vue @@ -0,0 +1,415 @@ + + + + + + diff --git a/web/src/components/core/others/art-watermark/index.vue b/web/src/components/core/others/art-watermark/index.vue new file mode 100644 index 0000000..1d7f06b --- /dev/null +++ b/web/src/components/core/others/art-watermark/index.vue @@ -0,0 +1,64 @@ + + + + diff --git a/web/src/components/core/tables/art-table-header/index.vue b/web/src/components/core/tables/art-table-header/index.vue new file mode 100644 index 0000000..788c2b7 --- /dev/null +++ b/web/src/components/core/tables/art-table-header/index.vue @@ -0,0 +1,339 @@ + + + + + + diff --git a/web/src/components/core/tables/art-table/index.vue b/web/src/components/core/tables/art-table/index.vue new file mode 100644 index 0000000..be99e70 --- /dev/null +++ b/web/src/components/core/tables/art-table/index.vue @@ -0,0 +1,368 @@ + + + + + + + + + diff --git a/web/src/components/core/tables/art-table/style.scss b/web/src/components/core/tables/art-table/style.scss new file mode 100644 index 0000000..67459e8 --- /dev/null +++ b/web/src/components/core/tables/art-table/style.scss @@ -0,0 +1,99 @@ +.art-table { + position: relative; + height: 100%; + + .el-table { + height: 100%; + margin-top: 10px; + } + + :deep(.el-loading-mask) { + z-index: 100; + background-color: var(--default-box-color) !important; + } + + // Loading 过渡动画 - 消失时淡出 + .loading-fade-leave-active { + transition: opacity 0.3s ease-out; + } + + .loading-fade-leave-to { + opacity: 0; + } + + // 空状态垂直居中 + &.is-empty { + :deep(.el-scrollbar__wrap) { + display: flex; + } + } + + .pagination { + display: flex; + margin-top: 13px; + + :deep(.el-select) { + width: 102px !important; + } + + // 分页对齐方式 + &.left { + justify-content: flex-start; + } + + &.center { + justify-content: center; + } + + &.right { + justify-content: flex-end; + } + + // 自定义分页组件样式 + &.custom-pagination { + :deep(.el-pagination) { + .btn-prev, + .btn-next { + background-color: transparent; + border: 1px solid var(--art-gray-300); + transition: border-color 0.15s; + + &:hover:not(.is-disabled) { + color: var(--theme-color); + border-color: var(--theme-color); + } + } + + li { + box-sizing: border-box; + font-weight: 400 !important; + background-color: transparent; + border: 1px solid var(--art-gray-300); + transition: border-color 0.15s; + + &.is-active { + font-weight: 400; + color: #fff; + background-color: var(--theme-color); + border: 1px solid var(--theme-color); + } + + &:hover:not(.is-disabled) { + border-color: var(--theme-color); + } + } + } + } + } +} + +// 移动端分页 +@media (width <= 640px) { + :deep(.el-pagination) { + display: flex; + flex-wrap: wrap; + gap: 15px 0; + align-items: center; + justify-content: center; + } +} diff --git a/web/src/components/core/text-effect/art-count-to/index.vue b/web/src/components/core/text-effect/art-count-to/index.vue new file mode 100644 index 0000000..7fb104b --- /dev/null +++ b/web/src/components/core/text-effect/art-count-to/index.vue @@ -0,0 +1,310 @@ + + + + diff --git a/web/src/components/core/text-effect/art-festival-text-scroll/index.vue b/web/src/components/core/text-effect/art-festival-text-scroll/index.vue new file mode 100644 index 0000000..770b457 --- /dev/null +++ b/web/src/components/core/text-effect/art-festival-text-scroll/index.vue @@ -0,0 +1,32 @@ + + + + diff --git a/web/src/components/core/text-effect/art-text-scroll/index.vue b/web/src/components/core/text-effect/art-text-scroll/index.vue new file mode 100644 index 0000000..90be30f --- /dev/null +++ b/web/src/components/core/text-effect/art-text-scroll/index.vue @@ -0,0 +1,285 @@ + + + + diff --git a/web/src/components/core/theme/theme-svg/index.vue b/web/src/components/core/theme/theme-svg/index.vue new file mode 100644 index 0000000..0b565a9 --- /dev/null +++ b/web/src/components/core/theme/theme-svg/index.vue @@ -0,0 +1,100 @@ + + + + + + + diff --git a/web/src/components/core/views/exception/ArtException.vue b/web/src/components/core/views/exception/ArtException.vue new file mode 100644 index 0000000..4be59ae --- /dev/null +++ b/web/src/components/core/views/exception/ArtException.vue @@ -0,0 +1,55 @@ + + + diff --git a/web/src/components/core/views/login/AuthTopBar.vue b/web/src/components/core/views/login/AuthTopBar.vue new file mode 100644 index 0000000..9455253 --- /dev/null +++ b/web/src/components/core/views/login/AuthTopBar.vue @@ -0,0 +1,149 @@ + + + + + + diff --git a/web/src/components/core/views/login/LoginLeftView.vue b/web/src/components/core/views/login/LoginLeftView.vue new file mode 100644 index 0000000..af6a904 --- /dev/null +++ b/web/src/components/core/views/login/LoginLeftView.vue @@ -0,0 +1,602 @@ + + + + + + diff --git a/web/src/components/core/views/result/ArtResultPage.vue b/web/src/components/core/views/result/ArtResultPage.vue new file mode 100644 index 0000000..b2eca48 --- /dev/null +++ b/web/src/components/core/views/result/ArtResultPage.vue @@ -0,0 +1,43 @@ + + + diff --git a/web/src/components/core/widget/art-icon-button/index.vue b/web/src/components/core/widget/art-icon-button/index.vue new file mode 100644 index 0000000..760888b --- /dev/null +++ b/web/src/components/core/widget/art-icon-button/index.vue @@ -0,0 +1,23 @@ + + + + diff --git a/web/src/config/assets/images.ts b/web/src/config/assets/images.ts new file mode 100644 index 0000000..f3e89dd --- /dev/null +++ b/web/src/config/assets/images.ts @@ -0,0 +1,61 @@ +/** + * 配置图片资源 + * + * 统一管理设置中心使用的预览图片资源。 + * 包含主题样式、菜单布局、菜单风格的预览图。 + * + * ## 图片分类 + * + * - themeStyles: 系统主题预览图(亮色/暗色/自动) + * - menuLayouts: 菜单布局预览图(左侧/顶部/混合/双栏) + * - menuStyles: 菜单风格预览图(设计/暗色/亮色) + * + * @module config/assets/images + * @author Art Design Pro Team + */ + +import lightTheme from '@imgs/settings/theme_styles/light.png' +import darkTheme from '@imgs/settings/theme_styles/dark.png' +import systemTheme from '@imgs/settings/theme_styles/system.png' +import verticalLayout from '@imgs/settings/menu_layouts/vertical.png' +import horizontalLayout from '@imgs/settings/menu_layouts/horizontal.png' +import mixedLayout from '@imgs/settings/menu_layouts/mixed.png' +import dualColumnLayout from '@imgs/settings/menu_layouts/dual_column.png' +import designStyle from '@imgs/settings/menu_styles/design.png' +import darkStyle from '@imgs/settings/menu_styles/dark.png' +import lightStyle from '@imgs/settings/menu_styles/light.png' + +/** + * 配置中心图片资源对象 + */ +export const configImages = { + /** 系统主题预览图 */ + themeStyles: { + /** 亮色主题 */ + light: lightTheme, + /** 暗色主题 */ + dark: darkTheme, + /** 自动主题(跟随系统) */ + system: systemTheme + }, + /** 菜单布局预览图 */ + menuLayouts: { + /** 左侧菜单 */ + vertical: verticalLayout, + /** 顶部菜单 */ + horizontal: horizontalLayout, + /** 混合菜单 */ + mixed: mixedLayout, + /** 双栏菜单 */ + dualColumn: dualColumnLayout + }, + /** 菜单风格预览图 */ + menuStyles: { + /** 设计风格 */ + design: designStyle, + /** 暗色风格 */ + dark: darkStyle, + /** 亮色风格 */ + light: lightStyle + } +} diff --git a/web/src/config/fastEnter.ts b/web/src/config/fastEnter.ts new file mode 100644 index 0000000..ccade16 --- /dev/null +++ b/web/src/config/fastEnter.ts @@ -0,0 +1,79 @@ +/** + * 快速入口配置 + * 包含:应用列表、快速链接等配置 + */ +import { WEB_LINKS } from '@/utils/constants' +import type { FastEnterConfig } from '@/types/config' + +const fastEnterConfig: FastEnterConfig = { + // 显示条件(屏幕宽度) + minWidth: 1200, + // 应用列表 + applications: [ + { + name: '工作台', + description: '系统概览与数据统计', + icon: 'ri:pie-chart-line', + iconColor: '#377dff', + enabled: true, + order: 1, + routeName: 'Console' + }, + { + name: '官方文档', + description: '使用指南与开发文档', + icon: 'ri:bill-line', + iconColor: '#ffb100', + enabled: true, + order: 2, + link: WEB_LINKS.DOCS + }, + { + name: '技术支持', + description: '技术支持与问题反馈', + icon: 'ri:user-location-line', + iconColor: '#ff6b6b', + enabled: true, + order: 3, + link: WEB_LINKS.COMMUNITY + }, + { + name: '哔哩哔哩', + description: '技术分享与交流', + icon: 'ri:bilibili-line', + iconColor: '#FB7299', + enabled: true, + order: 4, + link: WEB_LINKS.BILIBILI + } + ], + // 快速链接 + quickLinks: [ + { + name: '登录', + enabled: true, + order: 1, + routeName: 'Login' + }, + { + name: '注册', + enabled: true, + order: 2, + routeName: 'Register' + }, + { + name: '忘记密码', + enabled: true, + order: 3, + routeName: 'ForgetPassword' + }, + { + name: '个人中心', + enabled: true, + order: 4, + routeName: 'UserCenter' + } + ] +} + +export default Object.freeze(fastEnterConfig) diff --git a/web/src/config/index.ts b/web/src/config/index.ts new file mode 100644 index 0000000..daa623a --- /dev/null +++ b/web/src/config/index.ts @@ -0,0 +1,135 @@ +/** + * 系统全局配置 + * + * 这是系统的核心配置文件,集中管理所有全局配置项。 + * 包含系统信息、主题样式、菜单布局、颜色方案等所有可配置项。 + * + * ## 主要功能 + * + * - 系统信息 - 系统名称等基础信息 + * - 主题配置 - 亮色/暗色/自动主题的样式配置 + * - 菜单配置 - 菜单布局、主题、宽度等配置 + * - 颜色方案 - 系统主色和预设颜色列表 + * - 快速入口 - 快速入口应用和链接配置 + * - 顶部栏配置 - 顶部栏功能模块配置 + * + * ## 配置项说明 + * + * - systemInfo: 系统基础信息(名称等) + * - systemThemeStyles: 系统主题样式映射 + * - settingThemeList: 可选的系统主题列表 + * - menuLayoutList: 可选的菜单布局列表 + * - themeList: 菜单主题样式列表 + * - darkMenuStyles: 暗黑模式下的菜单样式 + * - systemMainColor: 预设的系统主色列表 + * - fastEnter: 快速入口配置 + * - headerBar: 顶部栏功能配置 + * + * @module config + * @author Art Design Pro Team + */ + +import { MenuThemeEnum, MenuTypeEnum, SystemThemeEnum } from '@/enums/appEnum' +import { SystemConfig } from '@/types/config' +import { configImages } from './assets/images' +import fastEnterConfig from './modules/fastEnter' +import { headerBarConfig } from './modules/headerBar' + +const appConfig: SystemConfig = { + // 系统信息 + systemInfo: { + name: 'Art Design Pro' // 系统名称 + }, + // 系统主题 + systemThemeStyles: { + [SystemThemeEnum.LIGHT]: { className: '' }, + [SystemThemeEnum.DARK]: { className: SystemThemeEnum.DARK } + }, + // 系统主题列表 + settingThemeList: [ + { + name: 'Light', + theme: SystemThemeEnum.LIGHT, + color: ['#fff', '#fff'], + leftLineColor: '#EDEEF0', + rightLineColor: '#EDEEF0', + img: configImages.themeStyles.light + }, + { + name: 'Dark', + theme: SystemThemeEnum.DARK, + color: ['#22252A'], + leftLineColor: '#3F4257', + rightLineColor: '#3F4257', + img: configImages.themeStyles.dark + }, + { + name: 'System', + theme: SystemThemeEnum.AUTO, + color: ['#fff', '#22252A'], + leftLineColor: '#EDEEF0', + rightLineColor: '#3F4257', + img: configImages.themeStyles.system + } + ], + // 菜单布局列表 + menuLayoutList: [ + { name: 'Left', value: MenuTypeEnum.LEFT, img: configImages.menuLayouts.vertical }, + { name: 'Top', value: MenuTypeEnum.TOP, img: configImages.menuLayouts.horizontal }, + { name: 'Mixed', value: MenuTypeEnum.TOP_LEFT, img: configImages.menuLayouts.mixed }, + { name: 'Dual Column', value: MenuTypeEnum.DUAL_MENU, img: configImages.menuLayouts.dualColumn } + ], + // 菜单主题列表 + themeList: [ + { + theme: MenuThemeEnum.DESIGN, + background: '#FFFFFF', + systemNameColor: 'var(--art-gray-800)', + iconColor: '#6B6B6B', + textColor: '#29343D', + img: configImages.menuStyles.design + }, + { + theme: MenuThemeEnum.DARK, + background: '#191A23', + systemNameColor: '#D9DADB', + iconColor: '#BABBBD', + textColor: '#BABBBD', + img: configImages.menuStyles.dark + }, + { + theme: MenuThemeEnum.LIGHT, + background: '#ffffff', + systemNameColor: 'var(--art-gray-800)', + iconColor: '#6B6B6B', + textColor: '#29343D', + img: configImages.menuStyles.light + } + ], + // 暗黑模式菜单样式 + darkMenuStyles: [ + { + theme: MenuThemeEnum.DARK, + background: 'var(--default-box-color)', + systemNameColor: '#DDDDDD', + iconColor: '#BABBBD', + textColor: 'rgba(#FFFFFF, 0.7)' + } + ], + // 系统主色 + systemMainColor: [ + '#5D87FF', + '#B48DF3', + '#1D84FF', + '#60C041', + '#38C0FC', + '#F9901F', + '#FF80C8' + ] as const, + // 快速入口配置 + fastEnter: fastEnterConfig, + // 顶部栏功能配置 + headerBar: headerBarConfig +} + +export default Object.freeze(appConfig) diff --git a/web/src/config/modules/component.ts b/web/src/config/modules/component.ts new file mode 100644 index 0000000..bc709e0 --- /dev/null +++ b/web/src/config/modules/component.ts @@ -0,0 +1,105 @@ +/** + * 全局组件配置 + * + * 统一管理系统级全局组件的注册。 + * 这些组件会在应用启动时全局注册,可在任何地方使用。 + * + * ## 主要功能 + * + * - 组件配置 - 集中管理全局组件的配置信息 + * - 异步加载 - 使用 defineAsyncComponent 实现按需加载 + * - 开关控制 - 支持通过 enabled 字段启用/禁用组件 + * - 配置查询 - 提供工具函数快速查询组件配置 + * + * @module config/component + * @author Art Design Pro Team + */ + +import { defineAsyncComponent } from 'vue' + +/** + * 全局组件配置列表 + */ +export const globalComponentsConfig: GlobalComponentConfig[] = [ + { + name: '设置面板', + key: 'settings-panel', + component: defineAsyncComponent( + () => import('@/components/core/layouts/art-settings-panel/index.vue') + ), + enabled: true + }, + { + name: '全局搜索', + key: 'global-search', + component: defineAsyncComponent( + () => import('@/components/core/layouts/art-global-search/index.vue') + ), + enabled: true + }, + { + name: '锁屏', + key: 'screen-lock', + component: defineAsyncComponent( + () => import('@/components/core/layouts/art-screen-lock/index.vue') + ), + enabled: true + }, + { + name: '聊天窗口', + key: 'chat-window', + component: defineAsyncComponent( + () => import('@/components/core/layouts/art-chat-window/index.vue') + ), + enabled: true + }, + { + name: '礼花效果', + key: 'fireworks-effect', + component: defineAsyncComponent( + () => import('@/components/core/layouts/art-fireworks-effect/index.vue') + ), + enabled: true + }, + { + name: '水印效果', + key: 'watermark', + component: defineAsyncComponent( + () => import('@/components/core/others/art-watermark/index.vue') + ), + enabled: true + } +] + +/** + * 全局组件配置接口 + */ +export interface GlobalComponentConfig { + /** 组件名称 */ + name: string + /** 组件标识 */ + key: string + /** 组件 */ + component: any + /** 是否启用 */ + enabled?: boolean + /** 组件描述 */ + description?: string +} + +/** + * 获取启用的全局组件 + * @returns 已启用的组件配置列表 + */ +export const getEnabledGlobalComponents = () => { + return globalComponentsConfig.filter((config) => config.enabled !== false) +} + +/** + * 根据 key 获取组件配置 + * @param key 组件标识 + * @returns 组件配置对象 + */ +export const getGlobalComponentByKey = (key: string) => { + return globalComponentsConfig.find((config) => config.key === key) +} diff --git a/web/src/config/modules/fastEnter.ts b/web/src/config/modules/fastEnter.ts new file mode 100644 index 0000000..6b9740c --- /dev/null +++ b/web/src/config/modules/fastEnter.ts @@ -0,0 +1,127 @@ +/** + * 快速入口配置 + * 包含:应用列表、快速链接等配置 + */ +import { WEB_LINKS } from '@/utils/constants' +import type { FastEnterConfig } from '@/types/config' + +const fastEnterConfig: FastEnterConfig = { + // 显示条件(屏幕宽度) + minWidth: 1200, + // 应用列表 + applications: [ + { + name: '工作台', + description: '系统概览与数据统计', + icon: 'ri:pie-chart-line', + iconColor: '#377dff', + enabled: true, + order: 1, + routeName: 'Console' + }, + { + name: '分析页', + description: '数据分析与可视化', + icon: 'ri:game-line', + iconColor: '#ff3b30', + enabled: true, + order: 2, + routeName: 'Analysis' + }, + { + name: '礼花效果', + description: '动画特效展示', + icon: 'ri:loader-line', + iconColor: '#7A7FFF', + enabled: true, + order: 3, + routeName: 'Fireworks' + }, + { + name: '聊天', + description: '即时通讯功能', + icon: 'ri:user-line', + iconColor: '#13DEB9', + enabled: true, + order: 4, + routeName: 'Chat' + }, + { + name: '官方文档', + description: '使用指南与开发文档', + icon: 'ri:bill-line', + iconColor: '#ffb100', + enabled: true, + order: 5, + link: WEB_LINKS.DOCS + }, + { + name: '技术支持', + description: '技术支持与问题反馈', + icon: 'ri:user-location-line', + iconColor: '#ff6b6b', + enabled: true, + order: 6, + link: WEB_LINKS.COMMUNITY + }, + { + name: '更新日志', + description: '版本更新与变更记录', + icon: 'ri:gamepad-line', + iconColor: '#38C0FC', + enabled: true, + order: 7, + routeName: 'ChangeLog' + }, + { + name: '哔哩哔哩', + description: '技术分享与交流', + icon: 'ri:bilibili-line', + iconColor: '#FB7299', + enabled: true, + order: 8, + link: WEB_LINKS.BILIBILI + } + ], + // 快速链接 + quickLinks: [ + { + name: '登录', + enabled: true, + order: 1, + routeName: 'Login' + }, + { + name: '注册', + enabled: true, + order: 2, + routeName: 'Register' + }, + { + name: '忘记密码', + enabled: true, + order: 3, + routeName: 'ForgetPassword' + }, + { + name: '定价', + enabled: true, + order: 4, + routeName: 'Pricing' + }, + { + name: '个人中心', + enabled: true, + order: 5, + routeName: 'UserCenter' + }, + { + name: '留言管理', + enabled: true, + order: 6, + routeName: 'ArticleComment' + } + ] +} + +export default Object.freeze(fastEnterConfig) diff --git a/web/src/config/modules/festival.ts b/web/src/config/modules/festival.ts new file mode 100644 index 0000000..39cd790 --- /dev/null +++ b/web/src/config/modules/festival.ts @@ -0,0 +1,51 @@ +/** + * 节日庆祝配置 + * + * 配置系统的节日烟花效果和祝福文本。 + * 支持单日节日和跨日期节日,可自定义烟花播放次数。 + * + * ## 配置说明 + * + * - name: 节日名称 + * - date: 节日开始日期(格式:YYYY-MM-DD) + * - endDate: 节日结束日期(可选,用于跨日期节日) + * - image: 烟花图片(需要预先导入) + * - scrollText: 滚动显示的祝福文本 + * - count: 烟花播放次数(可选,默认为 3 次) + * + * ## 注意事项 + * + * - 图片需要预先导入并在配置中引用 + * - 跨日期节日会在整个日期范围内生效 + * - 每个用户每天只会播放一次烟花效果 + * + * @module config/modules/festival + * @author Art Design Pro Team + */ + +import { FestivalConfig } from '@/types/config' + +// 导入烟花图片(根据需要取消注释) +// import sd from '@imgs/ceremony/sd.png' +// import yd from '@imgs/ceremony/yd.png' + +export const festivalConfigList: FestivalConfig[] = [ + // 跨日期示例 + // { + // name: 'v3.0 Sass 升级至 TailwindCSS', + // date: '2025-11-03', + // endDate: '2025-11-09', + // image: '', + // count: 3, + // scrollText: + // '🚀 系统 v3.0 测试阶段正式开启!测试周期为 11 月 3 日 - 11 月 16 日,通过 TailwindCSS 重构样式体系、统一 Iconify 图标方案,带来更高效现代的开发体验,正式发布敬请期待~' + // } + // 单日示例:圣诞节 + // { + // name: '圣诞节', + // date: '2024-12-25', + // image: sd, + // count: 3 // 可选,不设置则使用默认值 3 次 + // scrollText: 'Merry Christmas!Art Design Pro 祝您圣诞快乐,愿节日的欢乐与祝福如雪花般纷至沓来!', + // } +] diff --git a/web/src/config/modules/headerBar.ts b/web/src/config/modules/headerBar.ts new file mode 100644 index 0000000..a420e82 --- /dev/null +++ b/web/src/config/modules/headerBar.ts @@ -0,0 +1,63 @@ +/** + * 顶部栏功能配置 + * + * 统一管理顶部栏各个功能模块的启用状态。 + * 通过修改此配置文件可以快速启用或禁用顶部栏的功能按钮。 + * + * @module config/headerBar + * @author Art Design Pro Team + */ + +import { HeaderBarFeatureConfig } from '@/types' + +/** + * 顶部栏功能配置对象 + */ +export const headerBarConfig: HeaderBarFeatureConfig = { + menuButton: { + enabled: true, + description: '控制左侧菜单的展开/收起按钮' + }, + refreshButton: { + enabled: true, + description: '页面刷新按钮' + }, + fastEnter: { + enabled: true, + description: '快速入口功能,提供常用应用和链接的快速访问' + }, + breadcrumb: { + enabled: true, + description: '面包屑导航,显示当前页面路径' + }, + globalSearch: { + enabled: true, + description: '全局搜索功能,支持快捷键 Ctrl+K 或 Cmd+K' + }, + fullscreen: { + enabled: true, + description: '全屏切换功能' + }, + notification: { + enabled: true, + description: '通知中心,显示系统通知和消息' + }, + chat: { + enabled: true, + description: '聊天功能,提供实时沟通' + }, + language: { + enabled: true, + description: '多语言切换功能' + }, + settings: { + enabled: true, + description: '系统设置面板' + }, + themeToggle: { + enabled: true, + description: '主题切换功能(明暗主题)' + } +} + +export default headerBarConfig diff --git a/web/src/config/setting.ts b/web/src/config/setting.ts new file mode 100644 index 0000000..94f2d2c --- /dev/null +++ b/web/src/config/setting.ts @@ -0,0 +1,109 @@ +/** + * 系统设置默认值配置 + * + * 统一管理系统设置的所有默认值 + * + * ## 主要功能 + * + * - 菜单相关默认配置 + * - 主题相关默认配置 + * - 界面显示默认配置 + * - 功能开关默认配置 + * - 样式相关默认配置 + * + * ## 注意事项 + * + * 1. 修改此文件的配置项时,需要同步更新以下文件: + * - src/components/core/layouts/art-settings-panel/widget/SettingActions.vue(复制配置和重置配置逻辑) + * - src/store/modules/setting.ts(Store 状态定义) + * 2. 可以通过设置面板的"复制配置"按钮快速生成配置代码 + * 3. 枚举类型的值需要与 src/enums/appEnum.ts 中的定义保持一致 + */ + +import AppConfig from '@/config' +import { SystemThemeEnum, MenuThemeEnum, MenuTypeEnum, ContainerWidthEnum } from '@/enums/appEnum' + +/** + * 系统设置默认值配置 + */ +export const SETTING_DEFAULT_CONFIG = { + /** 菜单类型 */ + menuType: MenuTypeEnum.LEFT, + /** 菜单展开宽度 */ + menuOpenWidth: 230, + /** 菜单是否展开 */ + menuOpen: true, + /** 双菜单是否显示文本 */ + dualMenuShowText: false, + /** 系统主题类型 */ + systemThemeType: SystemThemeEnum.AUTO, + /** 系统主题模式 */ + systemThemeMode: SystemThemeEnum.AUTO, + /** 菜单风格 */ + menuThemeType: MenuThemeEnum.DESIGN, + /** 系统主题颜色 */ + systemThemeColor: AppConfig.systemMainColor[0], + /** 是否显示菜单按钮 */ + showMenuButton: true, + /** 是否显示快速入口 */ + showFastEnter: true, + /** 是否显示刷新按钮 */ + showRefreshButton: true, + /** 是否显示面包屑 */ + showCrumbs: true, + /** 是否显示工作台标签 */ + showWorkTab: true, + /** 是否显示语言切换 */ + showLanguage: true, + /** 是否显示进度条 */ + showNprogress: false, + /** 是否显示设置引导 */ + showSettingGuide: true, + /** 是否显示节日文本 */ + showFestivalText: false, + /** 是否显示水印 */ + watermarkVisible: false, + /** 是否自动关闭 */ + autoClose: false, + /** 是否唯一展开 */ + uniqueOpened: true, + /** 是否色弱模式 */ + colorWeak: false, + /** 是否刷新 */ + refresh: false, + /** 是否加载节日烟花 */ + holidayFireworksLoaded: false, + /** 边框模式 */ + boxBorderMode: true, + /** 页面过渡效果 */ + pageTransition: 'slide-left', + /** 标签页样式 */ + tabStyle: 'tab-default', + /** 自定义圆角 */ + customRadius: '0.75', + /** 容器宽度 */ + containerWidth: ContainerWidthEnum.FULL, + /** 节日日期 */ + festivalDate: '' +} + +/** + * 获取设置默认值 + * @returns 设置默认值对象 + */ +export function getSettingDefaults() { + return { ...SETTING_DEFAULT_CONFIG } +} + +/** + * 重置为默认设置 + * @param currentSettings 当前设置对象 + */ +export function resetToDefaults(currentSettings: Record) { + const defaults = getSettingDefaults() + Object.keys(defaults).forEach((key) => { + if (key in currentSettings) { + currentSettings[key] = defaults[key as keyof typeof defaults] + } + }) +} diff --git a/web/src/directives/business/highlight.ts b/web/src/directives/business/highlight.ts new file mode 100644 index 0000000..07b6c1d --- /dev/null +++ b/web/src/directives/business/highlight.ts @@ -0,0 +1,250 @@ +/** + * v-highlight 代码高亮指令 + * + * 为代码块提供语法高亮、行号显示和一键复制功能。 + * 基于 highlight.js 实现,支持多种编程语言的语法高亮。 + * + * ## 主要功能 + * + * - 语法高亮 - 使用 highlight.js 自动识别并高亮代码 + * - 行号显示 - 自动为每行代码添加行号 + * - 一键复制 - 提供复制按钮,点击即可复制代码(自动过滤行号) + * - 性能优化 - 批量处理代码块,避免阻塞渲染 + * - 动态监听 - 使用 MutationObserver 监听新增代码块 + * - 防重复处理 - 自动标记已处理的代码块,避免重复处理 + * + * ## 使用示例 + * + * ```vue + * + * ``` + * + * ## 性能优化 + * + * - 批量处理:每次处理 10 个代码块,避免长时间阻塞 + * - 延迟处理:使用 requestAnimationFrame 分批处理 + * - 重试机制:自动重试处理失败的代码块 + * - 智能监听:只在有新代码块时才触发处理 + * + * @module directives/highlight + * @author Art Design Pro Team + */ + +import { App, Directive } from 'vue' +import hljs from 'highlight.js' + +export type HighlightDirective = Directive + +// 高亮代码 +function highlightCode(block: HTMLElement) { + hljs.highlightElement(block) +} + +// 插入行号 +function insertLineNumbers(block: HTMLElement) { + const lines = block.innerHTML.split('\n') + const numberedLines = lines + .map((line, index) => { + return `${index + 1} ${line}` + }) + .join('\n') + block.innerHTML = numberedLines +} + +// 添加复制按钮:调整 DOM 结构,将代码部分包裹在 .code-wrapper 内 +function addCopyButton(block: HTMLElement) { + const copyButton = document.createElement('i') + copyButton.className = 'copy-button' + copyButton.innerHTML = + '' + copyButton.onclick = () => { + // 过滤掉行号,只复制代码内容 + const codeContent = block.innerText.replace(/^\d+\s+/gm, '') + navigator.clipboard.writeText(codeContent).then(() => { + ElMessage.success('复制成功') + }) + } + + const preElement = block.parentElement + if (preElement) { + let codeWrapper: HTMLElement + // 如果代码块还没有被包裹,则创建包裹容器 + if (!block.parentElement.classList.contains('code-wrapper')) { + codeWrapper = document.createElement('div') + codeWrapper.className = 'code-wrapper' + preElement.replaceChild(codeWrapper, block) + codeWrapper.appendChild(block) + } else { + codeWrapper = block.parentElement + } + // 将复制按钮添加到 pre 元素(而非 codeWrapper 内),这样它不会随滚动条滚动 + preElement.appendChild(copyButton) + } +} + +// 检查代码块是否已经被处理过 +function isBlockProcessed(block: HTMLElement): boolean { + return ( + block.hasAttribute('data-highlighted') || + !!block.querySelector('.line-number') || + !!block.parentElement?.querySelector('.copy-button') + ) +} + +// 标记代码块为已处理 +function markBlockAsProcessed(block: HTMLElement) { + block.setAttribute('data-highlighted', 'true') +} + +// 处理单个代码块 +function processBlock(block: HTMLElement) { + if (isBlockProcessed(block)) { + return + } + + try { + highlightCode(block) + insertLineNumbers(block) + addCopyButton(block) + markBlockAsProcessed(block) + } catch (error) { + console.warn('处理代码块时出错:', error) + } +} + +// 查找并处理所有代码块 +function processAllCodeBlocks(el: HTMLElement) { + const blocks = Array.from(el.querySelectorAll('pre code')) + const unprocessedBlocks = blocks.filter((block) => !isBlockProcessed(block)) + + if (unprocessedBlocks.length === 0) { + return + } + + if (unprocessedBlocks.length <= 10) { + // 如果代码块数量少于等于10,直接处理所有代码块 + unprocessedBlocks.forEach((block) => processBlock(block)) + } else { + // 定义每次处理的代码块数 + const batchSize = 10 + let currentIndex = 0 + + const processBatch = () => { + const batch = unprocessedBlocks.slice(currentIndex, currentIndex + batchSize) + + batch.forEach((block) => { + processBlock(block) + }) + + // 更新索引并继续处理下一批 + currentIndex += batchSize + if (currentIndex < unprocessedBlocks.length) { + // 使用 requestAnimationFrame 确保下一帧再处理 + requestAnimationFrame(processBatch) + } + } + + // 开始处理第一批代码块 + processBatch() + } +} + +// 重试处理函数 +function retryProcessing(el: HTMLElement, maxRetries: number = 3, delay: number = 200) { + let retryCount = 0 + + const tryProcess = () => { + processAllCodeBlocks(el) + + // 检查是否还有未处理的代码块 + const remainingBlocks = Array.from(el.querySelectorAll('pre code')).filter( + (block) => !isBlockProcessed(block) + ) + + if (remainingBlocks.length > 0 && retryCount < maxRetries) { + retryCount++ + setTimeout(tryProcess, delay * retryCount) // 递增延迟 + } + } + + tryProcess() +} + +// 代码高亮、插入行号、复制按钮 +const highlightDirective: HighlightDirective = { + mounted(el: HTMLElement) { + // 立即尝试处理一次 + processAllCodeBlocks(el) + + // 延迟处理,确保 v-html 内容已经渲染 + setTimeout(() => { + retryProcessing(el) + }, 100) + + // 使用 MutationObserver 监听 DOM 变化 + const observer = new MutationObserver((mutations) => { + let hasNewCodeBlocks = false + + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE) { + const element = node as HTMLElement + // 检查新添加的节点是否包含代码块 + if (element.tagName === 'PRE' || element.querySelector('pre code')) { + hasNewCodeBlocks = true + } + } + }) + } + }) + + if (hasNewCodeBlocks) { + // 延迟处理新添加的代码块 + setTimeout(() => { + processAllCodeBlocks(el) + }, 50) + } + }) + + // 开始观察 + observer.observe(el, { + childList: true, + subtree: true + }) + + // 将 observer 存储到元素上,以便在 unmounted 时清理 + ;(el as any)._highlightObserver = observer + }, + + updated(el: HTMLElement) { + // 当组件更新时,重新处理代码块 + setTimeout(() => { + processAllCodeBlocks(el) + }, 50) + }, + + unmounted(el: HTMLElement) { + // 清理 MutationObserver + const observer = (el as any)._highlightObserver + if (observer) { + observer.disconnect() + delete (el as any)._highlightObserver + } + } +} + +export function setupHighlightDirective(app: App) { + app.directive('highlight', highlightDirective) +} diff --git a/web/src/directives/business/ripple.ts b/web/src/directives/business/ripple.ts new file mode 100644 index 0000000..e65470e --- /dev/null +++ b/web/src/directives/business/ripple.ts @@ -0,0 +1,116 @@ +/** + * v-ripple 水波纹效果指令 + * + * 为元素添加 Material Design 风格的水波纹点击效果。 + * 点击时从点击位置扩散出圆形水波纹动画,提升交互体验。 + * + * ## 主要功能 + * + * - 水波纹动画 - 点击时从点击位置扩散圆形波纹 + * - 自适应大小 - 根据元素尺寸自动调整波纹大小和动画时长 + * - 智能配色 - 自动识别按钮类型,使用合适的波纹颜色 + * - 自定义颜色 - 支持通过参数自定义波纹颜色 + * - 性能优化 - 使用 requestAnimationFrame 和自动清理机制 + * + * ## 使用示例 + * + * ```vue + * + * ``` + * + * ## 颜色规则 + * + * - 有色按钮(primary、success、warning 等):使用白色半透明波纹 + * - 默认按钮:使用主题色半透明波纹 + * - 自定义:通过 color 参数指定任意颜色 + * + * @module directives/ripple + * @author Art Design Pro Team + */ + +import type { App, Directive, DirectiveBinding } from 'vue' + +export interface RippleOptions { + /** 水波纹颜色 */ + color?: string +} + +export type RippleDirective = Directive + +export const vRipple: RippleDirective = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + // 获取指令的配置参数 + const options: RippleOptions = binding.value || {} + + // 设置元素为相对定位,并隐藏溢出部分 + el.style.position = 'relative' + el.style.overflow = 'hidden' + + // 点击事件处理 + el.addEventListener('mousedown', (e: MouseEvent) => { + const rect = el.getBoundingClientRect() + const left = e.clientX - rect.left + const top = e.clientY - rect.top + + // 创建水波纹元素 + const ripple = document.createElement('div') + const diameter = Math.max(el.clientWidth, el.clientHeight) + const radius = diameter / 2 + + // 根据直径计算动画时间(直径越大,动画时间越长) + const baseTime = 600 // 基础动画时间(毫秒) + const scaleFactor = 0.5 // 缩放因子 + const animationDuration = baseTime + diameter * scaleFactor + + // 设置水波纹的尺寸和位置 + ripple.style.width = ripple.style.height = `${diameter}px` + ripple.style.left = `${left - radius}px` + ripple.style.top = `${top - radius}px` + ripple.style.position = 'absolute' + ripple.style.borderRadius = '50%' + ripple.style.pointerEvents = 'none' + + // 判断是否为有色按钮(Element Plus 按钮类型) + const buttonTypes = ['primary', 'info', 'warning', 'danger', 'success'].map( + (type) => `el-button--${type}` + ) + const isColoredButton = buttonTypes.some((type) => el.classList.contains(type)) + const defaultColor = isColoredButton + ? 'rgba(255, 255, 255, 0.25)' // 有色按钮使用白色水波纹 + : 'var(--el-color-primary-light-7)' // 默认按钮使用主题色水波纹 + + // 设置水波纹颜色、初始状态和过渡效果 + ripple.style.backgroundColor = options.color || defaultColor + ripple.style.transform = 'scale(0)' + ripple.style.transition = `transform ${animationDuration}ms cubic-bezier(0.3, 0, 0.2, 1), opacity ${animationDuration}ms cubic-bezier(0.3, 0, 0.5, 1)` + ripple.style.zIndex = '1' + + // 添加水波纹元素到DOM中 + el.appendChild(ripple) + + // 触发动画 + requestAnimationFrame(() => { + ripple.style.transform = 'scale(2)' + ripple.style.opacity = '0' + }) + + // 动画结束后移除水波纹元素 + setTimeout(() => { + ripple.remove() + }, animationDuration + 500) // 增加500ms缓冲时间 + }) + } +} + +export function setupRippleDirective(app: App) { + app.directive('ripple', vRipple) +} diff --git a/web/src/directives/core/auth.ts b/web/src/directives/core/auth.ts new file mode 100755 index 0000000..3d244c7 --- /dev/null +++ b/web/src/directives/core/auth.ts @@ -0,0 +1,66 @@ +/** + * v-auth 权限指令 + * + * 适用于后端权限控制模式,基于权限标识控制 DOM 元素的显示和隐藏。 + * 如果用户没有对应权限,元素将从 DOM 中移除。 + * + * ## 主要功能 + * + * - 权限验证 - 根据路由 meta 中的权限列表验证用户权限 + * - DOM 控制 - 无权限时自动移除元素,而非隐藏 + * - 响应式更新 - 权限变化时自动更新元素状态 + * + * ## 使用示例 + * + * ```vue + * + * 新增 + * + * + * 编辑 + * + * + * 删除 + * ``` + * + * ## 注意事项 + * + * - 该指令会直接移除 DOM 元素,而不是使用 v-if 隐藏 + * - 权限列表从当前路由的 meta.authList 中获取 + * + * @module directives/auth + * @author Art Design Pro Team + */ + +import { router } from '@/router' +import { App, Directive, DirectiveBinding } from 'vue' + +export type AuthDirective = Directive + +function checkAuthPermission(el: HTMLElement, binding: DirectiveBinding): void { + // 获取当前路由的权限列表 + const authList = (router.currentRoute.value.meta.authList as Array<{ authMark: string }>) || [] + + // 检查是否有对应的权限标识 + const hasPermission = authList.some((item) => item.authMark === binding.value) + + // 如果没有权限,移除元素 + if (!hasPermission) { + removeElement(el) + } +} + +function removeElement(el: HTMLElement): void { + if (el.parentNode) { + el.parentNode.removeChild(el) + } +} + +const authDirective: AuthDirective = { + mounted: checkAuthPermission, + updated: checkAuthPermission +} + +export function setupAuthDirective(app: App): void { + app.directive('auth', authDirective) +} diff --git a/web/src/directives/core/roles.ts b/web/src/directives/core/roles.ts new file mode 100644 index 0000000..f1db35b --- /dev/null +++ b/web/src/directives/core/roles.ts @@ -0,0 +1,87 @@ +/** + * v-roles 角色权限指令 + * + * 基于用户角色控制 DOM 元素的显示和隐藏。 + * 只要用户拥有指定角色中的任意一个,元素就会显示,否则从 DOM 中移除。 + * + * ## 主要功能 + * + * - 角色验证 - 检查用户是否拥有指定角色 + * - 多角色支持 - 支持单个角色或多个角色(满足其一即可) + * - DOM 控制 - 无权限时自动移除元素,而非隐藏 + * - 响应式更新 - 角色变化时自动更新元素状态 + * + * ## 使用示例 + * + * ```vue + * + * ``` + * + * ## 权限逻辑 + * + * - 用户角色从 userStore.getUserInfo.roles 获取 + * - 只要用户拥有指定角色中的任意一个,元素就会显示 + * - 如果用户没有任何角色或不满足条件,元素将被移除 + * + * ## 注意事项 + * + * - 该指令会直接移除 DOM 元素,而不是使用 v-if 隐藏 + * - 适用于基于角色的粗粒度权限控制 + * - 如需基于具体操作的细粒度权限控制,请使用 v-auth 指令 + * + * @module directives/roles + * @author Art Design Pro Team + */ + +import { useUserStore } from '@/store/modules/user' +import { App, Directive, DirectiveBinding } from 'vue' + +export type RolesDirective = Directive + +function checkRolePermission(el: HTMLElement, binding: DirectiveBinding): void { + const userStore = useUserStore() + const userRoles = userStore.getUserInfo.roles + + // 如果用户角色为空或未定义,移除元素 + if (!userRoles?.length) { + removeElement(el) + return + } + + // 确保指令值为数组格式 + const requiredRoles = Array.isArray(binding.value) ? binding.value : [binding.value] + + // 检查用户是否具有所需角色之一 + const hasPermission = requiredRoles.some((role: string) => userRoles.includes(role)) + + // 如果没有权限,安全地移除元素 + if (!hasPermission) { + removeElement(el) + } +} + +function removeElement(el: HTMLElement): void { + if (el.parentNode) { + el.parentNode.removeChild(el) + } +} + +const rolesDirective: RolesDirective = { + mounted: checkRolePermission, + updated: checkRolePermission +} + +export function setupRolesDirective(app: App): void { + app.directive('roles', rolesDirective) +} diff --git a/web/src/directives/index.ts b/web/src/directives/index.ts new file mode 100755 index 0000000..b428a2b --- /dev/null +++ b/web/src/directives/index.ts @@ -0,0 +1,14 @@ +import type { App } from 'vue' +import { setupAuthDirective, type AuthDirective } from './core/auth' +import { setupHighlightDirective, type HighlightDirective } from './business/highlight' +import { setupRippleDirective, type RippleDirective } from './business/ripple' +import { setupRolesDirective, type RolesDirective } from './core/roles' + +export function setupGlobDirectives(app: App) { + setupAuthDirective(app) // 权限指令 + setupRolesDirective(app) // 角色权限指令 + setupHighlightDirective(app) // 高亮指令 + setupRippleDirective(app) // 水波纹指令 +} + +export type { AuthDirective, HighlightDirective, RippleDirective, RolesDirective } diff --git a/web/src/enums/appEnum.ts b/web/src/enums/appEnum.ts new file mode 100755 index 0000000..a39c278 --- /dev/null +++ b/web/src/enums/appEnum.ts @@ -0,0 +1,81 @@ +/** + * 系统级别枚举定义模块 + * + * ## 主要功能 + * + * - 菜单类型枚举(左侧、顶部、混合、双栏) + * - 主题类型枚举(亮色、暗色、自动) + * - 菜单主题枚举(设计、亮色、暗色) + * - 语言类型枚举(中文、英文) + * - 容器宽度枚举(全屏、固定) + * - 菜单宽度枚举(收起宽度) + * + * @module enums/appEnum + * @author Art Design Pro Team + */ + +/** + * 菜单类型 + */ +export enum MenuTypeEnum { + /** 左侧菜单 */ + LEFT = 'left', + /** 顶部菜单 */ + TOP = 'top', + /** 顶部+左侧菜单 */ + TOP_LEFT = 'top-left', + /** 双栏菜单 */ + DUAL_MENU = 'dual-menu' +} + +/** + * 系统主题 + */ +export enum SystemThemeEnum { + /** 暗色主题 */ + DARK = 'dark', + /** 亮色主题 */ + LIGHT = 'light', + /** 自动主题(跟随系统) */ + AUTO = 'auto' +} + +/** + * 菜单主题 + */ +export enum MenuThemeEnum { + /** 暗色主题 */ + DARK = 'dark', + /** 亮色主题 */ + LIGHT = 'light', + /** 设计主题 */ + DESIGN = 'design' +} + +/** + * 菜单宽度 + */ +export enum MenuWidth { + /** 收起宽度 */ + CLOSE = '64px' +} + +/** + * 语言类型 + */ +export enum LanguageEnum { + /** 中文 */ + ZH = 'zh', + /** 英文 */ + EN = 'en' +} + +/** + * 容器宽度 + */ +export enum ContainerWidthEnum { + /** 全屏宽度 */ + FULL = '100%', + /** 固定宽度 */ + BOXED = '1200px' +} diff --git a/web/src/enums/formEnum.ts b/web/src/enums/formEnum.ts new file mode 100644 index 0000000..8e9b3b4 --- /dev/null +++ b/web/src/enums/formEnum.ts @@ -0,0 +1,24 @@ +/** + * 表单相关枚举定义模块 + * + * ## 主要功能 + * + * - 页面模式枚举(新增、编辑) + * - 表格尺寸枚举(默认、紧凑、宽松) + * + * @module enums/formEnum + * @author Art Design Pro Team + */ + +// 页面类型 +export enum PageModeEnum { + Add, // 新增 + Edit // 编辑 +} + +// 表格大小 +export enum TableSizeEnum { + DEFAULT = 'default', + SMALL = 'small', + LARGE = 'large' +} diff --git a/web/src/env.d.ts b/web/src/env.d.ts new file mode 100755 index 0000000..4401f21 --- /dev/null +++ b/web/src/env.d.ts @@ -0,0 +1,34 @@ +/// + +declare module 'nprogress' + +declare module 'crypto-js' + +declare module 'vue-img-cutter' + +declare module 'file-saver' + +declare module 'qrcode.vue' { + export type Level = 'L' | 'M' | 'Q' | 'H' + export type RenderAs = 'canvas' | 'svg' + export type GradientType = 'linear' | 'radial' + export interface ImageSettings { + src: string + height: number + width: number + excavate: boolean + } + export interface QRCodeProps { + value: string + size?: number + level?: Level + background?: string + foreground?: string + renderAs?: RenderAs + } + const QrcodeVue: any + export default QrcodeVue +} + +// 全局变量声明 +declare const __APP_VERSION__: string // 版本号 diff --git a/web/src/hooks/core/useAppMode.ts b/web/src/hooks/core/useAppMode.ts new file mode 100644 index 0000000..c39cd9e --- /dev/null +++ b/web/src/hooks/core/useAppMode.ts @@ -0,0 +1,45 @@ +/** + * useAppMode - 应用模式管理 + * + * 提供应用访问模式的判断和管理功能,支持前端和后端两种权限控制模式。 + * 根据环境变量 VITE_ACCESS_MODE 自动识别当前运行模式。 + * + * ## 主要功能 + * + * 1. 模式识别 - 自动识别前端模式或后端模式 + * 2. 前端模式 - 权限由前端路由配置控制,适合小型项目或演示环境 + * 3. 后端模式 - 权限由后端接口返回的菜单数据控制,适合企业级应用 + * 4. 响应式状态 - 提供响应式的模式判断,方便在组件中使用 + * + * @module useAppMode + * @author Art Design Pro Team + */ + +import { computed } from 'vue' + +export function useAppMode() { + // 获取访问模式配置 + const accessMode = import.meta.env.VITE_ACCESS_MODE + + /** + * 是否为前端控制模式 + * 前端模式:权限由前端路由配置控制 + */ + const isFrontendMode = computed(() => accessMode === 'frontend') + /** + * 是否为后端控制模式 + * 后端模式:权限由后端接口返回的菜单数据控制 + */ + const isBackendMode = computed(() => accessMode === 'backend') + + /** + * 当前应用模式 + */ + const currentMode = computed(() => accessMode) + + return { + isFrontendMode, + isBackendMode, + currentMode + } +} diff --git a/web/src/hooks/core/useAuth.ts b/web/src/hooks/core/useAuth.ts new file mode 100644 index 0000000..283b859 --- /dev/null +++ b/web/src/hooks/core/useAuth.ts @@ -0,0 +1,74 @@ +/** + * useAuth - 权限验证管理 + * + * 提供统一的权限验证功能,支持前端和后端两种权限模式。 + * 用于控制页面按钮、操作等功能的显示和访问权限。 + * + * ## 主要功能 + * + * 1. 权限检查 - 检查用户是否拥有指定的权限标识 + * 2. 双模式支持 - 自动适配前端模式和后端模式的权限验证 + * 3. 前端模式 - 从用户信息中获取按钮权限列表(如 ['add', 'edit', 'delete']) + * 4. 后端模式 - 从路由 meta 配置中获取权限列表(如 [{ authMark: 'add' }]) + * + * ## 使用示例 + * + * ```typescript + * const { hasAuth } = useAuth() + * + * // 检查是否有新增权限 + * if (hasAuth('add')) { + * // 显示新增按钮 + * } + * + * // 在模板中使用 + * 编辑 + * 删除 + * ``` + * + * @module useAuth + * @author Art Design Pro Team + */ + +import { useRoute } from 'vue-router' +import { storeToRefs } from 'pinia' +import { useUserStore } from '@/store/modules/user' +import { useAppMode } from '@/hooks/core/useAppMode' +import type { AppRouteRecord } from '@/types/router' + +type AuthItem = NonNullable[number] + +const userStore = useUserStore() + +export const useAuth = () => { + const route = useRoute() + const { isFrontendMode } = useAppMode() + const { info } = storeToRefs(userStore) + + // 前端按钮权限(例如:['add', 'edit']) + const frontendAuthList = info.value?.buttons ?? [] + + // 后端路由 meta 配置的权限列表(例如:[{ authMark: 'add' }]) + const backendAuthList: AuthItem[] = Array.isArray(route.meta.authList) + ? (route.meta.authList as AuthItem[]) + : [] + + /** + * 检查是否拥有某权限标识(前后端模式通用) + * @param auth 权限标识 + * @returns 是否有权限 + */ + const hasAuth = (auth: string): boolean => { + // 前端模式 + if (isFrontendMode.value) { + return frontendAuthList.includes(auth) + } + + // 后端模式 + return backendAuthList.some((item) => item?.authMark === auth) + } + + return { + hasAuth + } +} diff --git a/web/src/hooks/core/useCeremony.ts b/web/src/hooks/core/useCeremony.ts new file mode 100644 index 0000000..ead2630 --- /dev/null +++ b/web/src/hooks/core/useCeremony.ts @@ -0,0 +1,184 @@ +/** + * useCeremony - 节日庆祝管理 + * + * 提供节日烟花效果和祝福文本展示功能,为系统增添节日氛围。 + * 自动检测当前日期是否为节日,并在首次进入时播放烟花动画和显示祝福语。 + * + * ## 主要功能 + * + * 1. 节日检测 - 自动匹配当前日期与节日配置列表,支持单日和跨日期节日 + * 2. 烟花动画 - 播放节日烟花特效,支持自定义图片和触发次数 + * 3. 祝福文本 - 烟花结束后显示节日祝福文本 + * 4. 状态管理 - 记录烟花播放状态,避免重复播放 + * 5. 清理机制 - 提供清理方法,支持手动停止和重置 + * + * ## 使用示例 + * + * ```typescript + * // 在配置文件中定义节日 + * // 单日节日 + * { + * date: '2024-12-25', + * name: '圣诞节', + * image: christmasImage, + * count: 3 // 可选,不设置则使用默认值 3 次 + * scrollText: 'Merry Christmas!', + * } + * + * // 跨日期节日 + * { + * date: '2025-11-07', + * endDate: '2025-11-10', + * name: 'v3.0 测试阶段', + * image: '', + * count: 5 // 自定义烟花播放次数 + * scrollText: '系统 v3.0 测试阶段正式开启!', + * } + * ``` + * + * @module useCeremony + * @author Art Design Pro Team + */ + +import { useTimeoutFn, useIntervalFn, useDateFormat } from '@vueuse/core' +import { storeToRefs } from 'pinia' +import { computed } from 'vue' +import { useSettingStore } from '@/store/modules/setting' +import { mittBus } from '@/utils/sys' +import { festivalConfigList } from '@/config/modules/festival' + +/** + * 节日庆祝配置常量 + */ +const FESTIVAL_CONFIG = { + /** 初始延迟(毫秒) */ + INITIAL_DELAY: 300, + /** 烟花播放间隔(毫秒) */ + FIREWORK_INTERVAL: 1000, + /** 文本显示延迟(毫秒) */ + TEXT_DELAY: 2000, + /** 默认烟花播放次数 */ + DEFAULT_FIREWORKS_COUNT: 3 +} as const + +/** + * 节日庆祝功能 + * 提供节日烟花效果和祝福文本展示 + */ +export function useCeremony() { + const settingStore = useSettingStore() + const { holidayFireworksLoaded, isShowFireworks } = storeToRefs(settingStore) + + let fireworksInterval: { pause: () => void } | null = null + + /** + * 检查日期是否在节日范围内 + * @param currentDate 当前日期 + * @param festivalDate 节日开始日期 + * @param festivalEndDate 节日结束日期(可选) + */ + const isDateInRange = ( + currentDate: string, + festivalDate: string, + festivalEndDate?: string + ): boolean => { + if (!festivalEndDate) { + // 单日节日 + return currentDate === festivalDate + } + + // 跨日期节日 + const current = new Date(currentDate) + const start = new Date(festivalDate) + const end = new Date(festivalEndDate) + + return current >= start && current <= end + } + + /** + * 获取当前日期对应的节日数据 + */ + const currentFestivalData = computed(() => { + const currentDate = useDateFormat(new Date(), 'YYYY-MM-DD').value + return festivalConfigList.find((item) => isDateInRange(currentDate, item.date, item.endDate)) + }) + + /** + * 更新节日日期到 store + */ + const updateFestivalDate = () => { + settingStore.setFestivalDate(currentFestivalData.value?.date || '') + } + + /** + * 触发烟花效果 + */ + const triggerFirework = () => { + mittBus.emit('triggerFireworks', currentFestivalData.value?.image) + } + + /** + * 完成烟花效果后显示文本 + */ + const showFestivalText = () => { + settingStore.setholidayFireworksLoaded(true) + + useTimeoutFn(() => { + settingStore.setShowFestivalText(true) + updateFestivalDate() + }, FESTIVAL_CONFIG.TEXT_DELAY) + } + + /** + * 启动烟花循环 + */ + const startFireworksLoop = () => { + let playedCount = 0 + // 使用节日配置的播放次数,如果没有则使用默认值 + const count = currentFestivalData.value?.count ?? FESTIVAL_CONFIG.DEFAULT_FIREWORKS_COUNT + + const { pause } = useIntervalFn(() => { + triggerFirework() + playedCount++ + + if (playedCount >= count) { + pause() + showFestivalText() + } + }, FESTIVAL_CONFIG.FIREWORK_INTERVAL) + + fireworksInterval = { pause } + } + + /** + * 开启节日庆祝 + */ + const openFestival = () => { + if (!currentFestivalData.value || !isShowFireworks.value) { + return + } + + const { start } = useTimeoutFn(startFireworksLoop, FESTIVAL_CONFIG.INITIAL_DELAY) + start() + } + + /** + * 清理烟花效果 + */ + const cleanup = () => { + if (fireworksInterval) { + fireworksInterval.pause() + fireworksInterval = null + } + settingStore.setShowFestivalText(false) + updateFestivalDate() + } + + return { + openFestival, + cleanup, + holidayFireworksLoaded, + currentFestivalData, + isShowFireworks + } +} diff --git a/web/src/hooks/core/useChart.ts b/web/src/hooks/core/useChart.ts new file mode 100644 index 0000000..29ba1d1 --- /dev/null +++ b/web/src/hooks/core/useChart.ts @@ -0,0 +1,745 @@ +/** + * useChart - ECharts 图表管理 + * + * 提供完整的 ECharts 图表生命周期管理和配置能力,简化图表开发流程。 + * 自动处理图表初始化、更新、销毁、主题切换、响应式调整等复杂逻辑。 + * + * ## 核心功能 + * + * 1. 图表生命周期管理 - 自动处理初始化、更新、销毁,支持延迟加载和可见性检测 + * 2. 主题自动适配 - 响应系统主题变化,自动更新图表样式和配色 + * 3. 响应式调整 - 监听窗口大小、菜单展开等变化,自动调整图表尺寸 + * 4. 空状态处理 - 优雅的空数据展示,自动显示"暂无数据"提示 + * 5. 样式配置统一 - 提供坐标轴、图例、提示框等统一的样式配置方法 + * 6. 性能优化 - 防抖处理、样式缓存、requestAnimationFrame 优化 + * 7. 高级组件抽象 - useChartComponent 提供更高层次的图表组件封装 + * + * ## 使用示例 + * + * ```typescript + * // 基础用法 + * const { + * chartRef, + * initChart, + * updateChart, + * getAxisLineStyle, + * getTooltipStyle + * } = useChart() + * + * onMounted(() => { + * initChart({ + * xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] }, + * yAxis: { type: 'value' }, + * series: [{ data: [120, 200, 150], type: 'bar' }] + * }) + * }) + * + * // 高级用法 - 组件抽象 + * const chart = useChartComponent({ + * props, + * generateOptions: () => ({ + * // ECharts 配置 + * }), + * checkEmpty: () => data.value.length === 0, + * watchSources: [() => props.data] + * }) + * ``` + * + * @module useChart + * @author Art Design Pro Team + */ + +import { echarts, type EChartsOption } from '@/plugins/echarts' +import { storeToRefs } from 'pinia' +import { useSettingStore } from '@/store/modules/setting' +import { getCssVar } from '@/utils/ui' +import type { BaseChartProps, ChartThemeConfig, UseChartOptions } from '@/types/component/chart' + +// 图表主题配置 +export const useChartOps = (): ChartThemeConfig => ({ + /** */ + chartHeight: '16rem', + /** 字体大小 */ + fontSize: 13, + /** 字体颜色 */ + fontColor: '#999', + /** 主题颜色 */ + themeColor: getCssVar('--el-color-primary-light-1'), + /** 颜色组 */ + colors: [ + getCssVar('--el-color-primary-light-1'), + '#4ABEFF', + '#EDF2FF', + '#14DEBA', + '#FFAF20', + '#FA8A6C', + '#FFAF20' + ] +}) + +// 常量定义 +const RESIZE_DELAYS = [50, 100, 200, 350] as const +const MENU_RESIZE_DELAYS = [50, 100, 200] as const +const RESIZE_DEBOUNCE_DELAY = 100 + +export function useChart(options: UseChartOptions = {}) { + const { initOptions, initDelay = 0, threshold = 0.1, autoTheme = true } = options + + const settingStore = useSettingStore() + const { isDark, menuOpen, menuType } = storeToRefs(settingStore) + + const chartRef = ref() + let chart: echarts.ECharts | null = null + let intersectionObserver: IntersectionObserver | null = null + let pendingOptions: EChartsOption | null = null + let resizeTimeoutId: number | null = null + let resizeFrameId: number | null = null + let isDestroyed = false + let emptyStateDiv: HTMLElement | null = null + + // 清理定时器的统一方法 + const clearTimers = () => { + if (resizeTimeoutId) { + clearTimeout(resizeTimeoutId) + resizeTimeoutId = null + } + if (resizeFrameId) { + cancelAnimationFrame(resizeFrameId) + resizeFrameId = null + } + } + + // 使用 requestAnimationFrame 优化 resize 处理 + const requestAnimationResize = () => { + if (resizeFrameId) { + cancelAnimationFrame(resizeFrameId) + } + resizeFrameId = requestAnimationFrame(() => { + handleResize() + resizeFrameId = null + }) + } + + // 防抖的resize处理(用于窗口resize事件) + const debouncedResize = () => { + if (resizeTimeoutId) { + clearTimeout(resizeTimeoutId) + } + resizeTimeoutId = window.setTimeout(() => { + requestAnimationResize() + resizeTimeoutId = null + }, RESIZE_DEBOUNCE_DELAY) + } + + // 多延迟resize处理 - 统一方法 + const multiDelayResize = (delays: readonly number[]) => { + // 立即调用一次,快速响应 + nextTick(requestAnimationResize) + + // 使用延迟时间,确保图表正确适应变化 + delays.forEach((delay) => { + setTimeout(requestAnimationResize, delay) + }) + } + + // 收缩菜单时,重新计算图表大小(仅在图表存在时监听) + let menuOpenStopHandle: (() => void) | null = null + let menuTypeStopHandle: (() => void) | null = null + + const setupMenuWatchers = () => { + menuOpenStopHandle = watch(menuOpen, () => multiDelayResize(RESIZE_DELAYS)) + menuTypeStopHandle = watch(menuType, () => { + nextTick(requestAnimationResize) + setTimeout(() => multiDelayResize(MENU_RESIZE_DELAYS), 0) + }) + } + + const cleanupMenuWatchers = () => { + menuOpenStopHandle?.() + menuTypeStopHandle?.() + menuOpenStopHandle = null + menuTypeStopHandle = null + } + + // 主题变化时重新设置图表选项 + let themeStopHandle: (() => void) | null = null + + const setupThemeWatcher = () => { + if (autoTheme) { + themeStopHandle = watch(isDark, () => { + // 更新空状态样式 + emptyStateManager.updateStyle() + + if (chart && !isDestroyed) { + // 使用 requestAnimationFrame 优化主题更新 + requestAnimationFrame(() => { + if (chart && !isDestroyed) { + const currentOptions = chart.getOption() + if (currentOptions) { + updateChart(currentOptions as EChartsOption) + } + } + }) + } + }) + } + } + + const cleanupThemeWatcher = () => { + themeStopHandle?.() + themeStopHandle = null + } + + // 样式生成器 - 统一的样式配置 + const createLineStyle = (color: string, width = 1, type?: 'solid' | 'dashed') => ({ + color, + width, + ...(type && { type }) + }) + + // 缓存样式配置以减少重复计算 + const styleCache = { + axisLine: null as any, + splitLine: null as any, + axisLabel: null as any, + lastDarkValue: isDark.value + } + + const clearStyleCache = () => { + styleCache.axisLine = null + styleCache.splitLine = null + styleCache.axisLabel = null + styleCache.lastDarkValue = isDark.value + } + + // 坐标轴线样式 + const getAxisLineStyle = (show: boolean = true) => { + if (styleCache.lastDarkValue !== isDark.value) { + clearStyleCache() + } + if (!styleCache.axisLine) { + styleCache.axisLine = { + show, + lineStyle: createLineStyle(isDark.value ? '#444' : '#EDEDED') + } + } + return styleCache.axisLine + } + + // 分割线样式 + const getSplitLineStyle = (show: boolean = true) => { + if (styleCache.lastDarkValue !== isDark.value) { + clearStyleCache() + } + if (!styleCache.splitLine) { + styleCache.splitLine = { + show, + lineStyle: createLineStyle(isDark.value ? '#444' : '#EDEDED', 1, 'dashed') + } + } + return styleCache.splitLine + } + + // 坐标轴标签样式 + const getAxisLabelStyle = (show: boolean = true) => { + if (styleCache.lastDarkValue !== isDark.value) { + clearStyleCache() + } + if (!styleCache.axisLabel) { + const { fontColor, fontSize } = useChartOps() + styleCache.axisLabel = { + show, + color: fontColor, + fontSize + } + } + return styleCache.axisLabel + } + + // 坐标轴刻度样式(静态配置,无需缓存) + const getAxisTickStyle = () => ({ + show: false + }) + + // 获取动画配置 + const getAnimationConfig = (animationDelay: number = 50, animationDuration: number = 1500) => ({ + animationDelay: (idx: number) => idx * animationDelay + 200, + animationDuration: (idx: number) => animationDuration - idx * 50, + animationEasing: 'quarticOut' as const + }) + + // 获取统一的 tooltip 配置 + const getTooltipStyle = (trigger: 'item' | 'axis' = 'axis', customOptions: any = {}) => ({ + trigger, + backgroundColor: isDark.value ? 'rgba(0, 0, 0, 0.8)' : 'rgba(255, 255, 255, 0.9)', + borderColor: isDark.value ? '#333' : '#ddd', + borderWidth: 1, + textStyle: { + color: isDark.value ? '#fff' : '#333' + }, + ...customOptions + }) + + // 获取统一的图例配置 + const getLegendStyle = ( + position: 'bottom' | 'top' | 'left' | 'right' = 'bottom', + customOptions: any = {} + ) => { + const baseConfig = { + textStyle: { + color: isDark.value ? '#fff' : '#333' + }, + itemWidth: 12, + itemHeight: 12, + itemGap: 20, + ...customOptions + } + + // 根据位置设置不同的配置 + switch (position) { + case 'bottom': + return { + ...baseConfig, + bottom: 0, + left: 'center', + orient: 'horizontal', + icon: 'roundRect' + } + case 'top': + return { + ...baseConfig, + top: 0, + left: 'center', + orient: 'horizontal', + icon: 'roundRect' + } + case 'left': + return { + ...baseConfig, + left: 0, + top: 'center', + orient: 'vertical', + icon: 'roundRect' + } + case 'right': + return { + ...baseConfig, + right: 0, + top: 'center', + orient: 'vertical', + icon: 'roundRect' + } + default: + return baseConfig + } + } + + // 根据图例位置计算 grid 配置 + const getGridWithLegend = ( + showLegend: boolean, + legendPosition: 'bottom' | 'top' | 'left' | 'right' = 'bottom', + baseGrid: any = {} + ) => { + const defaultGrid = { + top: 15, + right: 15, + bottom: 8, + left: 0, + containLabel: true, + ...baseGrid + } + + if (!showLegend) { + return defaultGrid + } + + // 根据图例位置调整 grid + switch (legendPosition) { + case 'bottom': + return { + ...defaultGrid, + bottom: 40 + } + case 'top': + return { + ...defaultGrid, + top: 40 + } + case 'left': + return { + ...defaultGrid, + left: 120 + } + case 'right': + return { + ...defaultGrid, + right: 120 + } + default: + return defaultGrid + } + } + + // 创建IntersectionObserver + const createIntersectionObserver = () => { + if (intersectionObserver || !chartRef.value) return + + intersectionObserver = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting && pendingOptions && !isDestroyed) { + // 使用 requestAnimationFrame 确保在下一帧初始化图表 + requestAnimationFrame(() => { + if (!isDestroyed && pendingOptions) { + try { + // 元素变为可见,初始化图表 + if (!chart) { + chart = echarts.init(entry.target as HTMLElement) + } + + // 触发自定义事件,让组件处理动画逻辑 + const event = new CustomEvent('chartVisible', { + detail: { options: pendingOptions } + }) + entry.target.dispatchEvent(event) + + pendingOptions = null + cleanupIntersectionObserver() + } catch (error) { + console.error('图表初始化失败:', error) + } + } + }) + } + }) + }, + { threshold } + ) + + intersectionObserver.observe(chartRef.value) + } + + // 清理IntersectionObserver + const cleanupIntersectionObserver = () => { + if (intersectionObserver) { + intersectionObserver.disconnect() + intersectionObserver = null + } + } + + // 检查容器是否可见 + const isContainerVisible = (element: HTMLElement): boolean => { + const rect = element.getBoundingClientRect() + return rect.width > 0 && rect.height > 0 && rect.top < window.innerHeight && rect.bottom > 0 + } + + // 图表初始化核心逻辑 + const performChartInit = (options: EChartsOption) => { + if (!chart && chartRef.value && !isDestroyed) { + chart = echarts.init(chartRef.value) + // 图表创建后立即设置监听器 + setupMenuWatchers() + setupThemeWatcher() + } + if (chart && !isDestroyed) { + chart.setOption(options) + pendingOptions = null + } + } + + // 空状态管理器 + const emptyStateManager = { + create: () => { + if (!chartRef.value || emptyStateDiv) return + + emptyStateDiv = document.createElement('div') + emptyStateDiv.style.cssText = ` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 12px; + color: ${isDark.value ? '#555555' : '#B3B2B2'}; + background: transparent; + z-index: 10; + ` + emptyStateDiv.innerHTML = `暂无数据` + + // 确保父容器有相对定位 + if ( + chartRef.value.style.position !== 'relative' && + chartRef.value.style.position !== 'absolute' + ) { + chartRef.value.style.position = 'relative' + } + + chartRef.value.appendChild(emptyStateDiv) + }, + + remove: () => { + if (emptyStateDiv && chartRef.value) { + chartRef.value.removeChild(emptyStateDiv) + emptyStateDiv = null + } + }, + + updateStyle: () => { + if (emptyStateDiv) { + emptyStateDiv.style.color = isDark.value ? '#666' : '#999' + } + } + } + + // 初始化图表 + const initChart = (options: EChartsOption = {}, isEmpty: boolean = false) => { + if (!chartRef.value || isDestroyed) return + + const mergedOptions = { ...initOptions, ...options } + + try { + if (isEmpty) { + // 处理空数据情况 - 显示自定义空状态div + if (chart) { + chart.clear() + } + emptyStateManager.create() + return + } else { + // 有数据时移除空状态div + emptyStateManager.remove() + } + + if (isContainerVisible(chartRef.value)) { + // 容器可见,正常初始化 + if (initDelay > 0) { + setTimeout(() => performChartInit(mergedOptions), initDelay) + } else { + performChartInit(mergedOptions) + } + } else { + // 容器不可见,保存选项并设置监听器 + pendingOptions = mergedOptions + createIntersectionObserver() + } + } catch (error) { + console.error('图表初始化失败:', error) + } + } + + // 更新图表 + const updateChart = (options: EChartsOption) => { + if (isDestroyed) return + + try { + if (!chart) { + // 如果图表不存在,先初始化 + initChart(options) + return + } + chart.setOption(options) + } catch (error) { + console.error('图表更新失败:', error) + } + } + + // 处理窗口大小变化 + const handleResize = () => { + if (chart && !isDestroyed) { + try { + chart.resize() + } catch (error) { + console.error('图表resize失败:', error) + } + } + } + + // 销毁图表 + const destroyChart = () => { + isDestroyed = true + + if (chart) { + try { + chart.dispose() + } catch (error) { + console.error('图表销毁失败:', error) + } finally { + chart = null + } + } + + // 清理所有监听器和资源 + cleanupMenuWatchers() + cleanupThemeWatcher() + emptyStateManager.remove() + cleanupIntersectionObserver() + clearTimers() + clearStyleCache() + pendingOptions = null + } + + // 获取图表实例 + const getChartInstance = () => chart + + // 获取图表是否已初始化 + const isChartInitialized = () => chart !== null + + onMounted(() => { + window.addEventListener('resize', debouncedResize) + }) + + onBeforeUnmount(() => { + window.removeEventListener('resize', debouncedResize) + }) + + onUnmounted(() => { + destroyChart() + }) + + return { + isDark, + chartRef, + initChart, + updateChart, + handleResize, + destroyChart, + getChartInstance, + isChartInitialized, + emptyStateManager, + getAxisLineStyle, + getSplitLineStyle, + getAxisLabelStyle, + getAxisTickStyle, + getAnimationConfig, + getTooltipStyle, + getLegendStyle, + useChartOps, + getGridWithLegend + } +} + +// 高级图表组件抽象 +interface UseChartComponentOptions { + /** Props响应式对象 */ + props: T + /** 图表配置生成函数 */ + generateOptions: () => EChartsOption + /** 空数据检查函数 */ + checkEmpty?: () => boolean + /** 自定义监听的响应式数据 */ + watchSources?: (() => any)[] + /** 自定义可视事件处理 */ + onVisible?: () => void + /** useChart选项 */ + chartOptions?: UseChartOptions +} + +export function useChartComponent(options: UseChartComponentOptions) { + const { + props, + generateOptions, + checkEmpty, + watchSources = [], + onVisible, + chartOptions = {} + } = options + + const chart = useChart(chartOptions) + const { chartRef, initChart, isDark, emptyStateManager } = chart + + // 检查是否为空数据 + const isEmpty = computed(() => { + if (props.isEmpty) return true + if (checkEmpty) return checkEmpty() + return false + }) + + // 更新图表 + const updateChart = () => { + nextTick(() => { + if (isEmpty.value) { + // 处理空数据情况 - 显示自定义空状态div + if (chart.getChartInstance()) { + chart.getChartInstance()?.clear() + } + emptyStateManager.create() + } else { + // 有数据时移除空状态div并初始化图表 + emptyStateManager.remove() + initChart(generateOptions()) + } + }) + } + + // 处理图表进入可视区域时的逻辑 + const handleChartVisible = () => { + if (onVisible) { + onVisible() + } else { + updateChart() + } + } + + // 存储监听器停止函数 + const stopHandles: (() => void)[] = [] + + // 设置数据监听 + const setupWatchers = () => { + // 监听自定义数据源 + if (watchSources.length > 0) { + const stopHandle = watch(watchSources, updateChart, { deep: true }) + stopHandles.push(stopHandle) + } + + // 监听主题变化 + const themeStopHandle = watch(isDark, () => { + emptyStateManager.updateStyle() + updateChart() + }) + stopHandles.push(themeStopHandle) + } + + // 清理所有监听器 + const cleanupWatchers = () => { + stopHandles.forEach((stop) => stop()) + stopHandles.length = 0 + } + + // 设置生命周期 + const setupLifecycle = () => { + onMounted(() => { + updateChart() + + // 监听图表可见事件 + if (chartRef.value) { + chartRef.value.addEventListener('chartVisible', handleChartVisible) + } + }) + + onBeforeUnmount(() => { + // 清理事件监听器 + if (chartRef.value) { + chartRef.value.removeEventListener('chartVisible', handleChartVisible) + } + // 清理所有监听器 + cleanupWatchers() + // 清理空状态div + emptyStateManager.remove() + }) + } + + // 初始化 + setupWatchers() + setupLifecycle() + + return { + ...chart, + isEmpty, + updateChart, + handleChartVisible + } +} diff --git a/web/src/hooks/core/useCommon.ts b/web/src/hooks/core/useCommon.ts new file mode 100644 index 0000000..c936854 --- /dev/null +++ b/web/src/hooks/core/useCommon.ts @@ -0,0 +1,87 @@ +/** + * useCommon - 通用功能集合 + * + * 提供常用的页面操作功能,包括页面刷新、滚动控制、路径获取等。 + * 这些功能在多个页面和组件中都会用到,统一封装便于复用。 + * + * ## 主要功能 + * + * 1. 首页路径 - 获取系统配置的首页路径 + * 2. 页面刷新 - 刷新当前页面内容 + * 3. 滚动控制 - 提供多种滚动到顶部和指定位置的方法 + * 4. 平滑滚动 - 支持平滑滚动动画效果 + * + * @module useCommon + * @author Art Design Pro Team + */ + +import { computed } from 'vue' +import { useMenuStore } from '@/store/modules/menu' +import { useSettingStore } from '@/store/modules/setting' + +export function useCommon() { + const menuStore = useMenuStore() + const settingStore = useSettingStore() + + /** + * 首页路径 + * 从菜单 store 中获取配置的首页路径 + */ + const homePath = computed(() => menuStore.getHomePath()) + + /** + * 刷新当前页面 + * 通过切换 setting store 中的 refresh 状态触发页面重新渲染 + */ + const refresh = () => { + settingStore.reload() + } + + /** + * 滚动到页面顶部 + * 查找主内容区域并将其滚动位置重置为顶部 + */ + const scrollToTop = () => { + const scrollContainer = document.getElementById('app-main') + if (scrollContainer) { + scrollContainer.scrollTop = 0 + } + } + + /** + * 平滑滚动到页面顶部 + * 使用 smooth 行为实现平滑滚动效果 + */ + const smoothScrollToTop = () => { + const scrollContainer = document.getElementById('app-main') + if (scrollContainer) { + scrollContainer.scrollTo({ + top: 0, + behavior: 'smooth' + }) + } + } + + /** + * 滚动到指定位置 + * @param top 目标滚动位置(像素) + * @param smooth 是否使用平滑滚动 + */ + const scrollTo = (top: number, smooth: boolean = false) => { + const scrollContainer = document.getElementById('app-main') + if (scrollContainer) { + scrollContainer.scrollTo({ + top, + behavior: smooth ? 'smooth' : 'auto' + }) + } + } + + return { + homePath, + refresh, + scrollTo, + scrollToTop, + smoothScrollToTop + } +} diff --git a/web/src/hooks/core/useFastEnter.ts b/web/src/hooks/core/useFastEnter.ts new file mode 100644 index 0000000..555eb65 --- /dev/null +++ b/web/src/hooks/core/useFastEnter.ts @@ -0,0 +1,55 @@ +/** + * useFastEnter - 快速入口管理 + * + * 管理顶部栏的快速入口功能,提供应用列表和快速链接的配置和过滤。 + * 支持动态启用/禁用、自定义排序、响应式宽度控制等功能。 + * + * ## 主要功能 + * + * 1. 应用列表管理 - 获取启用的应用列表,自动按排序权重排序 + * 2. 快速链接管理 - 获取启用的快速链接,支持自定义排序 + * 3. 响应式配置 - 所有配置自动响应变化,无需手动更新 + * 4. 宽度控制 - 提供最小显示宽度配置,支持响应式布局 + * + * @module useFastEnter + * @author Art Design Pro Team + */ + +import { computed } from 'vue' +import appConfig from '@/config' +import type { FastEnterApplication, FastEnterQuickLink } from '@/types/config' + +export function useFastEnter() { + // 获取快速入口配置 + const fastEnterConfig = computed(() => appConfig.fastEnter) + + // 获取启用的应用列表(按排序权重排序) + const enabledApplications = computed(() => { + if (!fastEnterConfig.value?.applications) return [] + + return fastEnterConfig.value.applications + .filter((app) => app.enabled !== false) + .sort((a, b) => (a.order || 0) - (b.order || 0)) + }) + + // 获取启用的快速链接(按排序权重排序) + const enabledQuickLinks = computed(() => { + if (!fastEnterConfig.value?.quickLinks) return [] + + return fastEnterConfig.value.quickLinks + .filter((link) => link.enabled !== false) + .sort((a, b) => (a.order || 0) - (b.order || 0)) + }) + + // 获取最小显示宽度 + const minWidth = computed(() => { + return fastEnterConfig.value?.minWidth || 1200 + }) + + return { + fastEnterConfig, + enabledApplications, + enabledQuickLinks, + minWidth + } +} diff --git a/web/src/hooks/core/useHeaderBar.ts b/web/src/hooks/core/useHeaderBar.ts new file mode 100644 index 0000000..be10712 --- /dev/null +++ b/web/src/hooks/core/useHeaderBar.ts @@ -0,0 +1,201 @@ +/** + * useHeaderBar - 顶部栏功能管理 + * + * 统一管理顶部栏各个功能模块的显示状态和配置信息。 + * 提供灵活的功能开关控制,支持动态显示/隐藏顶部栏的各个功能按钮。 + * + * ## 主要功能 + * + * 1. 功能开关控制 - 统一管理菜单按钮、刷新按钮、快速入口等功能的显示状态 + * 2. 配置信息获取 - 获取各个功能模块的详细配置信息 + * 3. 功能列表查询 - 快速获取所有启用或禁用的功能列表 + * 4. 响应式状态 - 所有状态自动响应配置和 store 变化 + * + * @module useHeaderBar + * @author Art Design Pro Team + */ + +import { computed } from 'vue' +import { storeToRefs } from 'pinia' +import { useSettingStore } from '@/store/modules/setting' +import { headerBarConfig } from '@/config/modules/headerBar' +import { HeaderBarFeatureConfig } from '@/types' + +/** + * 顶部栏功能管理 + * @returns 顶部栏功能相关的状态和方法 + */ +export function useHeaderBar() { + const settingStore = useSettingStore() + + // 获取顶部栏配置 + const headerBarConfigRef = computed(() => headerBarConfig) + + // 从store中获取相关状态 + const { showMenuButton, showFastEnter, showRefreshButton, showCrumbs, showLanguage } = + storeToRefs(settingStore) + + /** + * 检查特定功能是否启用 + * @param feature 功能名称 + * @returns 是否启用 + */ + const isFeatureEnabled = (feature: keyof HeaderBarFeatureConfig): boolean => { + return headerBarConfigRef.value[feature]?.enabled ?? false + } + + /** + * 获取功能配置信息 + * @param feature 功能名称 + * @returns 功能配置信息 + */ + const getFeatureConfig = (feature: keyof HeaderBarFeatureConfig) => { + return headerBarConfigRef.value[feature] + } + + // 检查菜单按钮是否显示 + const shouldShowMenuButton = computed(() => { + return isFeatureEnabled('menuButton') && showMenuButton.value + }) + + // 检查刷新按钮是否显示 + const shouldShowRefreshButton = computed(() => { + return isFeatureEnabled('refreshButton') && showRefreshButton.value + }) + + // 检查快速入口是否显示 + const shouldShowFastEnter = computed(() => { + return isFeatureEnabled('fastEnter') && showFastEnter.value + }) + + // 检查面包屑是否显示 + const shouldShowBreadcrumb = computed(() => { + return isFeatureEnabled('breadcrumb') && showCrumbs.value + }) + + // 检查全局搜索是否显示 + const shouldShowGlobalSearch = computed(() => { + return isFeatureEnabled('globalSearch') + }) + + // 检查全屏按钮是否显示 + const shouldShowFullscreen = computed(() => { + return isFeatureEnabled('fullscreen') + }) + + // 检查通知中心是否显示 + const shouldShowNotification = computed(() => { + return isFeatureEnabled('notification') + }) + + // 检查聊天功能是否显示 + const shouldShowChat = computed(() => { + return isFeatureEnabled('chat') + }) + + // 检查语言切换是否显示 + const shouldShowLanguage = computed(() => { + return isFeatureEnabled('language') && showLanguage.value + }) + + // 检查设置面板是否显示 + const shouldShowSettings = computed(() => { + return isFeatureEnabled('settings') + }) + + // 检查主题切换是否显示 + const shouldShowThemeToggle = computed(() => { + return isFeatureEnabled('themeToggle') + }) + + // 获取快速入口的最小宽度 + const fastEnterMinWidth = computed(() => { + const config = getFeatureConfig('fastEnter') + return (config as any)?.minWidth || 1200 + }) + + /** + * 检查功能是否启用(别名) + * @param feature 功能名称 + * @returns 是否启用 + */ + const isFeatureActive = (feature: keyof HeaderBarFeatureConfig): boolean => { + return isFeatureEnabled(feature) + } + + /** + * 获取功能配置(别名) + * @param feature 功能名称 + * @returns 功能配置 + */ + const getFeatureInfo = (feature: keyof HeaderBarFeatureConfig) => { + return getFeatureConfig(feature) + } + + /** + * 获取所有启用的功能列表 + * @returns 启用的功能名称数组 + */ + const getEnabledFeatures = (): (keyof HeaderBarFeatureConfig)[] => { + return Object.keys(headerBarConfigRef.value).filter( + (key) => headerBarConfigRef.value[key as keyof HeaderBarFeatureConfig]?.enabled + ) as (keyof HeaderBarFeatureConfig)[] + } + + /** + * 获取所有禁用的功能列表 + * @returns 禁用的功能名称数组 + */ + const getDisabledFeatures = (): (keyof HeaderBarFeatureConfig)[] => { + return Object.keys(headerBarConfigRef.value).filter( + (key) => !headerBarConfigRef.value[key as keyof HeaderBarFeatureConfig]?.enabled + ) as (keyof HeaderBarFeatureConfig)[] + } + + /** + * 获取所有启用的功能(别名) + * @returns 启用的功能列表 + */ + const getActiveFeatures = () => { + return getEnabledFeatures() + } + + /** + * 获取所有禁用的功能(别名) + * @returns 禁用的功能列表 + */ + const getInactiveFeatures = () => { + return getDisabledFeatures() + } + + return { + // 配置 + headerBarConfig: headerBarConfigRef, + + // 显示状态计算属性 + shouldShowMenuButton, // 是否显示菜单按钮 + shouldShowRefreshButton, // 是否显示刷新按钮 + shouldShowFastEnter, // 是否显示快速入口 + shouldShowBreadcrumb, // 是否显示面包屑 + shouldShowGlobalSearch, // 是否显示全局搜索 + shouldShowFullscreen, // 是否显示全屏按钮 + shouldShowNotification, // 是否显示通知中心 + shouldShowChat, // 是否显示聊天功能 + shouldShowLanguage, // 是否显示语言切换 + shouldShowSettings, // 是否显示设置面板 + shouldShowThemeToggle, // 是否显示主题切换 + + // 配置相关 + fastEnterMinWidth, // 快速入口最小宽度 + + // 方法 + isFeatureEnabled, // 检查功能是否启用 + isFeatureActive, // 检查功能是否启用(别名) + getFeatureConfig, // 获取功能配置 + getFeatureInfo, // 获取功能配置(别名) + getEnabledFeatures, // 获取所有启用的功能 + getDisabledFeatures, // 获取所有禁用的功能 + getActiveFeatures, // 获取所有启用的功能(别名) + getInactiveFeatures // 获取所有禁用的功能(别名) + } +} diff --git a/web/src/hooks/core/useLayoutHeight.ts b/web/src/hooks/core/useLayoutHeight.ts new file mode 100644 index 0000000..4b1171a --- /dev/null +++ b/web/src/hooks/core/useLayoutHeight.ts @@ -0,0 +1,148 @@ +/** + * useLayoutHeight - 页面布局高度管理 + * + * 自动计算和管理页面内容区域的高度,确保内容区域能够正确填充剩余空间。 + * 监听头部元素高度变化,动态调整内容区域高度,避免出现滚动条或布局错乱。 + * + * ## 主要功能 + * + * 1. 动态高度计算 - 根据头部元素高度自动计算内容区域高度 + * 2. 响应式监听 - 自动监听元素尺寸变化并更新高度 + * 3. CSS 变量同步 - 自动更新 CSS 变量,方便全局使用 + * 4. 灵活配置 - 支持自定义间距、CSS 变量名等 + * 5. 自动查找模式 - 提供通过 ID 自动查找元素的便捷方式 + * + * @module useLayoutHeight + * @author Art Design Pro Team + */ + +import { ref, computed, watch, onMounted } from 'vue' +import { useElementSize } from '@vueuse/core' + +/** + * 页面容器高度配置 + */ +interface LayoutHeightOptions { + /** 额外的间距(默认 15px) */ + extraSpacing?: number + /** 是否自动更新 CSS 变量(默认 true) */ + updateCssVar?: boolean + /** CSS 变量名称(默认 '--art-full-height') */ + cssVarName?: string +} + +export function useLayoutHeight(options: LayoutHeightOptions = {}) { + const { extraSpacing = 15, updateCssVar = true, cssVarName = '--art-full-height' } = options + + // 元素引用 + const headerRef = ref() + const contentHeaderRef = ref() + + // 使用 VueUse 自动监听元素尺寸变化 + const { height: headerHeight } = useElementSize(headerRef) + const { height: contentHeaderHeight } = useElementSize(contentHeaderRef) + + // 计算容器最小高度(响应式) + const containerMinHeight = computed(() => { + const totalHeight = headerHeight.value + contentHeaderHeight.value + extraSpacing + return `calc(100vh - ${totalHeight}px)` + }) + + if (updateCssVar) { + watch( + containerMinHeight, + (newHeight) => { + requestAnimationFrame(() => { + document.documentElement.style.setProperty(cssVarName, newHeight) + }) + }, + { immediate: true } + ) + } + + return { + /** 容器最小高度(响应式) */ + containerMinHeight, + /** 头部元素引用 */ + headerRef, + /** 内容头部元素引用 */ + contentHeaderRef, + /** 头部高度(响应式) */ + headerHeight, + /** 内容头部高度(响应式) */ + contentHeaderHeight + } +} + +/** + * 通过 ID 自动查找元素的布局高度管理 + * 适用于无法直接获取元素引用的场景 + * + * @param headerIds 头部元素的 ID 数组 + * @param options 配置选项 + * + * ``` + */ +export function useAutoLayoutHeight( + headerIds: string[] = ['app-header', 'app-content-header'], + options: LayoutHeightOptions = {} +) { + const { extraSpacing = 15, updateCssVar = true, cssVarName = '--art-full-height' } = options + + // 创建元素引用 + const headerRef = ref() + const contentHeaderRef = ref() + + // 使用 VueUse 自动监听元素尺寸变化 + const { height: headerHeight } = useElementSize(headerRef) + const { height: contentHeaderHeight } = useElementSize(contentHeaderRef) + + // 计算容器最小高度(响应式) + const containerMinHeight = computed(() => { + const totalHeight = headerHeight.value + contentHeaderHeight.value + extraSpacing + return `calc(100vh - ${totalHeight}px)` + }) + + if (updateCssVar) { + watch( + containerMinHeight, + (newHeight) => { + requestAnimationFrame(() => { + document.documentElement.style.setProperty(cssVarName, newHeight) + }) + }, + { immediate: true } + ) + } + + // 在 DOM 挂载后查找元素 + onMounted(() => { + if (typeof document !== 'undefined') { + // 使用 nextTick 确保 DOM 完全渲染 + requestAnimationFrame(() => { + const header = document.getElementById(headerIds[0]) + const contentHeader = document.getElementById(headerIds[1]) + + if (header) { + headerRef.value = header + } + if (contentHeader) { + contentHeaderRef.value = contentHeader + } + }) + } + }) + + return { + /** 容器最小高度(响应式) */ + containerMinHeight, + /** 头部元素引用 */ + headerRef, + /** 内容头部元素引用 */ + contentHeaderRef, + /** 头部高度(响应式) */ + headerHeight, + /** 内容头部高度(响应式) */ + contentHeaderHeight + } +} diff --git a/web/src/hooks/core/useTable.ts b/web/src/hooks/core/useTable.ts new file mode 100644 index 0000000..d9def4f --- /dev/null +++ b/web/src/hooks/core/useTable.ts @@ -0,0 +1,762 @@ +/** + * useTable - 企业级表格数据管理方案 + * + * 功能完整的表格数据管理解决方案,专为后台管理系统设计。 + * 封装了表格开发中的所有常见需求,让你专注于业务逻辑。 + * + * ## 主要功能 + * + * 1. 数据管理 - 自动处理 API 请求、响应转换、加载状态和错误处理 + * 2. 分页控制 - 自动同步分页状态、移动端适配、智能页码边界处理 + * 3. 搜索功能 - 防抖搜索优化、参数管理、一键重置、参数过滤 + * 4. 缓存系统 - 智能请求缓存、多种清理策略、自动过期管理、统计信息 + * 5. 刷新策略 - 提供 5 种刷新方法适配不同业务场景(新增/更新/删除/手动/定时) + * 6. 列配置管理 - 动态显示/隐藏列、列排序、配置持久化、批量操作(可选) + * + * @module useTable + * @author Art Design Pro Team + */ + +import { ref, reactive, computed, onMounted, onUnmounted, nextTick, readonly } from 'vue' +import { useWindowSize } from '@vueuse/core' +import { useTableColumns } from './useTableColumns' +import type { ColumnOption } from '@/types/component' +import { + TableCache, + CacheInvalidationStrategy, + type ApiResponse +} from '../../utils/table/tableCache' +import { + type TableError, + defaultResponseAdapter, + extractTableData, + updatePaginationFromResponse, + createSmartDebounce, + createErrorHandler +} from '../../utils/table/tableUtils' +import { tableConfig } from '../../utils/table/tableConfig' + +// 类型推导工具类型 +type InferApiParams = T extends (params: infer P) => any ? P : never +type InferApiResponse = T extends (params: any) => Promise ? R : never +type InferRecordType = T extends Api.Common.PaginatedResponse ? U : never + +// 优化的配置接口 - 支持自动类型推导 +export interface UseTableConfig< + TApiFn extends (params: any) => Promise = (params: any) => Promise, + TRecord = InferRecordType>, + TParams = InferApiParams, + TResponse = InferApiResponse +> { + // 核心配置 + core: { + /** API 请求函数 */ + apiFn: TApiFn + /** 默认请求参数 */ + apiParams?: Partial + /** 排除 apiParams 中的属性 */ + excludeParams?: string[] + /** 是否立即加载数据 */ + immediate?: boolean + /** 列配置工厂函数 */ + columnsFactory?: () => ColumnOption[] + /** 自定义分页字段映射 */ + paginationKey?: { + /** 当前页码字段名,默认为 'current' */ + current?: string + /** 每页条数字段名,默认为 'size' */ + size?: string + } + } + + // 数据处理 + transform?: { + /** 数据转换函数 */ + dataTransformer?: (data: TRecord[]) => TRecord[] + /** 响应数据适配器 */ + responseAdapter?: (response: TResponse) => ApiResponse + } + + // 性能优化 + performance?: { + /** 是否启用缓存 */ + enableCache?: boolean + /** 缓存时间(毫秒) */ + cacheTime?: number + /** 防抖延迟时间(毫秒) */ + debounceTime?: number + /** 最大缓存条数限制 */ + maxCacheSize?: number + } + + // 生命周期钩子 + hooks?: { + /** 数据加载成功回调(仅网络请求成功时触发) */ + onSuccess?: (data: TRecord[], response: ApiResponse) => void + /** 错误处理回调 */ + onError?: (error: TableError) => void + /** 缓存命中回调(从缓存获取数据时触发) */ + onCacheHit?: (data: TRecord[], response: ApiResponse) => void + /** 加载状态变化回调 */ + onLoading?: (loading: boolean) => void + /** 重置表单回调函数 */ + resetFormCallback?: () => void + } + + // 调试配置 + debug?: { + /** 是否启用日志输出 */ + enableLog?: boolean + /** 日志级别 */ + logLevel?: 'info' | 'warn' | 'error' + } +} + +export function useTable Promise>( + config: UseTableConfig +) { + return useTableImpl(config) +} + +/** + * useTable 的核心实现 - 强大的表格数据管理 Hook + * + * 提供完整的表格解决方案,包括: + * - 数据获取与缓存 + * - 分页控制 + * - 搜索功能 + * - 智能刷新策略 + * - 错误处理 + * - 列配置管理 + */ +function useTableImpl Promise>( + config: UseTableConfig +) { + type TRecord = InferRecordType> + type TParams = InferApiParams + const { + core: { + apiFn, + apiParams = {} as Partial, + excludeParams = [], + immediate = true, + columnsFactory, + paginationKey + }, + transform: { dataTransformer, responseAdapter = defaultResponseAdapter } = {}, + performance: { + enableCache = false, + cacheTime = 5 * 60 * 1000, + debounceTime = 300, + maxCacheSize = 50 + } = {}, + hooks: { onSuccess, onError, onCacheHit, resetFormCallback } = {}, + debug: { enableLog = false } = {} + } = config + + // 分页字段名配置:优先使用传入的配置,否则使用全局配置 + const pageKey = paginationKey?.current || tableConfig.paginationKey.current + const sizeKey = paginationKey?.size || tableConfig.paginationKey.size + + // 响应式触发器,用于手动更新缓存统计信息 + const cacheUpdateTrigger = ref(0) + + // 日志工具函数 + const logger = { + log: (message: string, ...args: unknown[]) => { + if (enableLog) { + console.log(`[useTable] ${message}`, ...args) + } + }, + warn: (message: string, ...args: unknown[]) => { + if (enableLog) { + console.warn(`[useTable] ${message}`, ...args) + } + }, + error: (message: string, ...args: unknown[]) => { + if (enableLog) { + console.error(`[useTable] ${message}`, ...args) + } + } + } + + // 缓存实例 + const cache = enableCache ? new TableCache(cacheTime, maxCacheSize, enableLog) : null + + // 加载状态机 + type LoadingState = 'idle' | 'loading' | 'success' | 'error' + const loadingState = ref('idle') + const loading = computed(() => loadingState.value === 'loading') + + // 错误状态 + const error = ref(null) + + // 表格数据 + const data = ref([]) + + // 请求取消控制器 + let abortController: AbortController | null = null + + // 缓存清理定时器 + let cacheCleanupTimer: NodeJS.Timeout | null = null + + // 搜索参数 + const searchParams = reactive( + Object.assign( + { + [pageKey]: 1, + [sizeKey]: 10 + }, + apiParams || {} + ) as TParams + ) + + // 分页配置 + const pagination = reactive({ + current: ((searchParams as Record)[pageKey] as number) || 1, + size: ((searchParams as Record)[sizeKey] as number) || 10, + total: 0 + }) + + // 移动端分页 (响应式) + const { width } = useWindowSize() + const mobilePagination = computed(() => ({ + ...pagination, + small: width.value < 768 + })) + + // 列配置 + const columnConfig = columnsFactory ? useTableColumns(columnsFactory) : null + const columns = columnConfig?.columns + const columnChecks = columnConfig?.columnChecks + + // 是否有数据 + const hasData = computed(() => data.value.length > 0) + + // 缓存统计信息 + const cacheInfo = computed(() => { + // 依赖触发器,确保缓存变化时重新计算 + void cacheUpdateTrigger.value + if (!cache) return { total: 0, size: '0KB', hitRate: '0 avg hits' } + return cache.getStats() + }) + + // 错误处理函数 + const handleError = createErrorHandler(onError, enableLog) + + // 清理缓存,根据不同的业务场景选择性地清理缓存 + const clearCache = (strategy: CacheInvalidationStrategy, context?: string): void => { + if (!cache) return + + let clearedCount = 0 + + switch (strategy) { + case CacheInvalidationStrategy.CLEAR_ALL: + cache.clear() + logger.log(`清空所有缓存 - ${context || ''}`) + break + + case CacheInvalidationStrategy.CLEAR_CURRENT: + clearedCount = cache.clearCurrentSearch(searchParams) + logger.log(`清空当前搜索缓存 ${clearedCount} 条 - ${context || ''}`) + break + + case CacheInvalidationStrategy.CLEAR_PAGINATION: + clearedCount = cache.clearPagination() + logger.log(`清空分页缓存 ${clearedCount} 条 - ${context || ''}`) + break + + case CacheInvalidationStrategy.KEEP_ALL: + default: + logger.log(`保持缓存不变 - ${context || ''}`) + break + } + // 手动触发缓存状态更新 + cacheUpdateTrigger.value++ + } + + // 获取数据的核心方法 + const fetchData = async ( + params?: Partial, + useCache = enableCache + ): Promise> => { + // 取消上一个请求 + if (abortController) { + abortController.abort() + } + + // 创建新的取消控制器 + const currentController = new AbortController() + abortController = currentController + + // 状态机:进入 loading 状态 + loadingState.value = 'loading' + error.value = null + + try { + let requestParams = Object.assign( + {}, + searchParams, + { + [pageKey]: pagination.current, + [sizeKey]: pagination.size + }, + params || {} + ) as TParams + + // 剔除不需要的参数 + if (excludeParams.length > 0) { + const filteredParams = { ...requestParams } + excludeParams.forEach((key) => { + delete (filteredParams as Record)[key] + }) + requestParams = filteredParams as TParams + } + + // 检查缓存 + if (useCache && cache) { + const cachedItem = cache.get(requestParams) + if (cachedItem) { + data.value = cachedItem.data + updatePaginationFromResponse(pagination, cachedItem.response) + + // 修复:避免重复设置相同的值,防止响应式循环更新 + const paramsRecord = searchParams as Record + if (paramsRecord[pageKey] !== pagination.current) { + paramsRecord[pageKey] = pagination.current + } + if (paramsRecord[sizeKey] !== pagination.size) { + paramsRecord[sizeKey] = pagination.size + } + + // 状态机:缓存命中,进入 success 状态 + loadingState.value = 'success' + + // 缓存命中时触发专门的回调,而不是 onSuccess + if (onCacheHit) { + onCacheHit(cachedItem.data, cachedItem.response) + } + + logger.log(`缓存命中`) + return cachedItem.response + } + } + + const response = await apiFn(requestParams) + + // 检查请求是否被取消 + if (currentController.signal.aborted) { + throw new Error('请求已取消') + } + + // 使用响应适配器转换为标准格式 + const standardResponse = responseAdapter(response) + + // 处理响应数据 + let tableData = extractTableData(standardResponse) + + // 应用数据转换函数 + if (dataTransformer) { + tableData = dataTransformer(tableData) + } + + // 更新状态 + data.value = tableData + updatePaginationFromResponse(pagination, standardResponse) + + // 修复:避免重复设置相同的值,防止响应式循环更新 + const paramsRecord = searchParams as Record + if (paramsRecord[pageKey] !== pagination.current) { + paramsRecord[pageKey] = pagination.current + } + if (paramsRecord[sizeKey] !== pagination.size) { + paramsRecord[sizeKey] = pagination.size + } + + // 缓存数据 + if (useCache && cache) { + cache.set(requestParams, tableData, standardResponse) + // 手动触发缓存状态更新 + cacheUpdateTrigger.value++ + logger.log(`数据已缓存`) + } + + // 状态机:请求成功,进入 success 状态 + loadingState.value = 'success' + + // 成功回调 + if (onSuccess) { + onSuccess(tableData, standardResponse) + } + + return standardResponse + } catch (err) { + if (err instanceof Error && err.message === '请求已取消') { + // 请求被取消,回到 idle 状态 + loadingState.value = 'idle' + return { records: [], total: 0, current: 1, size: 10 } + } + + // 状态机:请求失败,进入 error 状态 + loadingState.value = 'error' + data.value = [] + const tableError = handleError(err, '获取表格数据失败') + throw tableError + } finally { + // 只有当前控制器是活跃的才清空 + if (abortController === currentController) { + abortController = null + } + } + } + + // 获取数据 (保持当前页) + const getData = async (params?: Partial): Promise | void> => { + try { + return await fetchData(params) + } catch { + // 错误已在 fetchData 中处理 + return Promise.resolve() + } + } + + // 分页获取数据 (重置到第一页) - 专门用于搜索场景 + const getDataByPage = async (params?: Partial): Promise | void> => { + pagination.current = 1 + ;(searchParams as Record)[pageKey] = 1 + + // 搜索时清空当前搜索条件的缓存,确保获取最新数据 + clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '搜索数据') + + try { + return await fetchData(params, false) // 搜索时不使用缓存 + } catch { + // 错误已在 fetchData 中处理 + return Promise.resolve() + } + } + + // 智能防抖搜索函数 + const debouncedGetDataByPage = createSmartDebounce(getDataByPage, debounceTime) + + // 重置搜索参数 + const resetSearchParams = async (): Promise => { + // 取消防抖的搜索 + debouncedGetDataByPage.cancel() + + // 保存分页相关的默认值 + const paramsRecord = searchParams as Record + const defaultPagination = { + [pageKey]: 1, + [sizeKey]: (paramsRecord[sizeKey] as number) || 10 + } + + // 清空所有搜索参数 + Object.keys(searchParams).forEach((key) => { + delete paramsRecord[key] + }) + + // 重新设置默认参数 + Object.assign(searchParams, apiParams || {}, defaultPagination) + + // 重置分页 + pagination.current = 1 + pagination.size = defaultPagination[sizeKey] as number + + // 清空错误状态 + error.value = null + + // 清空缓存 + clearCache(CacheInvalidationStrategy.CLEAR_ALL, '重置搜索') + + // 重新获取数据 + await getData() + + // 执行重置回调 + if (resetFormCallback) { + await nextTick() + resetFormCallback() + } + } + + // 替换搜索参数:适用于表单查询,避免旧字段残留 + const replaceSearchParams = (params?: Partial): void => { + const paramsRecord = searchParams as Record + const currentSize = pagination.size || ((paramsRecord[sizeKey] as number) ?? 10) + + Object.keys(searchParams).forEach((key) => { + if (key !== pageKey && key !== sizeKey) { + delete paramsRecord[key] + } + }) + + Object.assign( + searchParams, + { + [pageKey]: 1, + [sizeKey]: currentSize + }, + params || {} + ) + + pagination.current = 1 + pagination.size = currentSize + } + + // 防重复调用的标志 + let isCurrentChanging = false + + // 处理分页大小变化 + const handleSizeChange = async (newSize: number): Promise => { + if (newSize <= 0) return + + debouncedGetDataByPage.cancel() + + const paramsRecord = searchParams as Record + pagination.size = newSize + pagination.current = 1 + paramsRecord[sizeKey] = newSize + paramsRecord[pageKey] = 1 + + clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '分页大小变化') + + await getData() + } + + // 处理当前页变化 + const handleCurrentChange = async (newCurrent: number): Promise => { + if (newCurrent <= 0) return + + // 修复:防止重复调用 + if (isCurrentChanging) { + return + } + + // 修复:如果当前页没有变化,不需要重新请求 + if (pagination.current === newCurrent) { + logger.log('分页页码未变化,跳过请求') + return + } + + try { + isCurrentChanging = true + + // 修复:只更新必要的状态 + const paramsRecord = searchParams as Record + pagination.current = newCurrent + // 只有当 searchParams 的分页字段与新值不同时才更新 + if (paramsRecord[pageKey] !== newCurrent) { + paramsRecord[pageKey] = newCurrent + } + + await getData() + } finally { + isCurrentChanging = false + } + } + + // 针对不同业务场景的刷新方法 + + // 新增后刷新:回到第一页并清空分页缓存(适用于新增数据后) + const refreshCreate = async (): Promise => { + debouncedGetDataByPage.cancel() + pagination.current = 1 + ;(searchParams as Record)[pageKey] = 1 + clearCache(CacheInvalidationStrategy.CLEAR_PAGINATION, '新增数据') + await getData() + } + + // 更新后刷新:保持当前页,仅清空当前搜索缓存(适用于更新数据后) + const refreshUpdate = async (): Promise => { + clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '编辑数据') + await getData() + } + + // 删除后刷新:智能处理页码,避免空页面(适用于删除数据后) + const refreshRemove = async (): Promise => { + const { current } = pagination + + // 清除缓存并获取最新数据 + clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '删除数据') + await getData() + + // 如果当前页为空且不是第一页,回到上一页 + if (data.value.length === 0 && current > 1) { + pagination.current = current - 1 + ;(searchParams as Record)[pageKey] = current - 1 + await getData() + } + } + + // 全量刷新:清空所有缓存,重新获取数据(适用于手动刷新按钮) + const refreshData = async (): Promise => { + debouncedGetDataByPage.cancel() + clearCache(CacheInvalidationStrategy.CLEAR_ALL, '手动刷新') + await getData() + } + + // 轻量刷新:仅清空当前搜索条件的缓存,保持分页状态(适用于定时刷新) + const refreshSoft = async (): Promise => { + clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '软刷新') + await getData() + } + + // 取消当前请求 + const cancelRequest = (): void => { + if (abortController) { + abortController.abort() + } + debouncedGetDataByPage.cancel() + } + + // 清空数据 + const clearData = (): void => { + data.value = [] + error.value = null + clearCache(CacheInvalidationStrategy.CLEAR_ALL, '清空数据') + } + + // 清理已过期的缓存条目,释放内存空间 + const clearExpiredCache = (): number => { + if (!cache) return 0 + const cleanedCount = cache.cleanupExpired() + if (cleanedCount > 0) { + // 手动触发缓存状态更新 + cacheUpdateTrigger.value++ + } + return cleanedCount + } + + // 设置定期清理过期缓存 + if (enableCache && cache) { + cacheCleanupTimer = setInterval(() => { + const cleanedCount = cache.cleanupExpired() + if (cleanedCount > 0) { + logger.log(`自动清理 ${cleanedCount} 条过期缓存`) + // 手动触发缓存状态更新 + cacheUpdateTrigger.value++ + } + }, cacheTime / 2) // 每半个缓存周期清理一次 + } + + // 挂载时自动加载数据 + if (immediate) { + onMounted(async () => { + await getData() + }) + } + + // 组件卸载时彻底清理 + onUnmounted(() => { + cancelRequest() + if (cache) { + cache.clear() + } + if (cacheCleanupTimer) { + clearInterval(cacheCleanupTimer) + } + }) + + // 优化的返回值结构 + return { + // 数据相关 + /** 表格数据 */ + data, + /** 数据加载状态 */ + loading: readonly(loading), + /** 错误状态 */ + error: readonly(error), + /** 数据是否为空 */ + isEmpty: computed(() => data.value.length === 0), + /** 是否有数据 */ + hasData, + + // 分页相关 + /** 分页状态信息 */ + pagination: readonly(pagination), + /** 移动端分页配置 */ + paginationMobile: mobilePagination, + /** 页面大小变化处理 */ + handleSizeChange, + /** 当前页变化处理 */ + handleCurrentChange, + + // 搜索相关 - 统一前缀 + /** 搜索参数 */ + searchParams, + /** 替换搜索参数(适用于表单查询,避免旧字段残留) */ + replaceSearchParams, + /** 重置搜索参数 */ + resetSearchParams, + + // 数据操作 - 更明确的操作意图 + /** 加载数据 */ + fetchData: getData, + /** 获取数据 */ + getData: getDataByPage, + /** 获取数据(防抖) */ + getDataDebounced: debouncedGetDataByPage, + /** 清空数据 */ + clearData, + + // 刷新策略 + /** 全量刷新:清空所有缓存,重新获取数据(适用于手动刷新按钮) */ + refreshData, + /** 轻量刷新:仅清空当前搜索条件的缓存,保持分页状态(适用于定时刷新) */ + refreshSoft, + /** 新增后刷新:回到第一页并清空分页缓存(适用于新增数据后) */ + refreshCreate, + /** 更新后刷新:保持当前页,仅清空当前搜索缓存(适用于更新数据后) */ + refreshUpdate, + /** 删除后刷新:智能处理页码,避免空页面(适用于删除数据后) */ + refreshRemove, + + // 缓存控制 + /** 缓存统计信息 */ + cacheInfo, + /** 清除缓存,根据不同的业务场景选择性地清理缓存: */ + clearCache, + // 支持4种清理策略 + // clearCache(CacheInvalidationStrategy.CLEAR_ALL, '手动刷新') // 清空所有缓存 + // clearCache(CacheInvalidationStrategy.CLEAR_CURRENT, '搜索数据') // 只清空当前搜索条件的缓存 + // clearCache(CacheInvalidationStrategy.CLEAR_PAGINATION, '新增数据') // 清空分页相关缓存 + // clearCache(CacheInvalidationStrategy.KEEP_ALL, '保持缓存') // 不清理任何缓存 + /** 清理已过期的缓存条目,释放内存空间 */ + clearExpiredCache, + + // 请求控制 + /** 取消当前请求 */ + cancelRequest, + + // 列配置 (如果提供了 columnsFactory) + ...(columnConfig && { + /** 表格列配置 */ + columns, + /** 列显示控制 */ + columnChecks, + /** 新增列 */ + addColumn: columnConfig.addColumn, + /** 删除列 */ + removeColumn: columnConfig.removeColumn, + /** 切换列显示状态 */ + toggleColumn: columnConfig.toggleColumn, + /** 更新列配置 */ + updateColumn: columnConfig.updateColumn, + /** 批量更新列配置 */ + batchUpdateColumns: columnConfig.batchUpdateColumns, + /** 重新排序列 */ + reorderColumns: columnConfig.reorderColumns, + /** 获取指定列配置 */ + getColumnConfig: columnConfig.getColumnConfig, + /** 获取所有列配置 */ + getAllColumns: columnConfig.getAllColumns, + /** 重置所有列配置到默认状态 */ + resetColumns: columnConfig.resetColumns + }) + } +} + +// 重新导出类型和枚举,方便使用 +export { CacheInvalidationStrategy } from '../../utils/table/tableCache' +export type { ApiResponse, CacheItem } from '../../utils/table/tableCache' +export type { BaseRequestParams, TableError } from '../../utils/table/tableUtils' diff --git a/web/src/hooks/core/useTableColumns.ts b/web/src/hooks/core/useTableColumns.ts new file mode 100644 index 0000000..84b6e13 --- /dev/null +++ b/web/src/hooks/core/useTableColumns.ts @@ -0,0 +1,312 @@ +/** + * useTableColumns - 表格列配置管理 + * + * 提供动态的表格列配置管理能力,支持运行时灵活控制列的显示、隐藏、排序等操作。 + * 通常与 useTable 配合使用,为表格提供完整的列管理功能。 + * + * ## 主要功能 + * + * 1. 列显示控制 - 动态显示/隐藏列,支持批量操作 + * 2. 列排序 - 拖拽或编程方式重新排列列顺序 + * 3. 列配置管理 - 新增、删除、更新列配置 + * 4. 特殊列支持 - 自动处理 selection、expand、index 等特殊列 + * 5. 状态持久化 - 保持列的显示状态,支持重置到初始状态 + * + * ## 使用示例 + * + * ```typescript + * const { columns, columnChecks, toggleColumn, reorderColumns } = useTableColumns(() => [ + * { prop: 'name', label: '姓名', visible: true }, + * { prop: 'email', label: '邮箱', visible: true }, + * { prop: 'status', label: '状态', visible: false } + * ]) + * + * // 切换列显示 + * toggleColumn('email', false) + * + * // 重新排序 + * reorderColumns(0, 2) + * ``` + * + * @module useTableColumns + * @author Art Design Pro Team + */ + +import { ref, computed, watch } from 'vue' +import { $t } from '@/locales' +import type { ColumnOption } from '@/types/component' + +/** + * 特殊列类型 + */ +const SPECIAL_COLUMNS: Record = { + selection: { prop: '__selection__', label: $t('table.column.selection') }, + expand: { prop: '__expand__', label: $t('table.column.expand') }, + index: { prop: '__index__', label: $t('table.column.index') } +} + +/** + * 获取列的唯一标识 + */ +export const getColumnKey = (col: ColumnOption) => + SPECIAL_COLUMNS[col.type as keyof typeof SPECIAL_COLUMNS]?.prop ?? (col.prop as string) + +/** + * 获取列的显示状态 + * 优先使用 visible 字段,如果不存在则使用 checked 字段 + */ +export const getColumnVisibility = (col: ColumnOption): boolean => { + // visible 优先级高于 checked + if (col.visible !== undefined) { + return col.visible + } + // 如果 visible 未定义,使用 checked,默认为 true + return col.checked ?? true +} + +/** + * 获取列的检查状态 + */ +export const getColumnChecks = (columns: ColumnOption[]) => + columns.map((col) => { + const special = col.type && SPECIAL_COLUMNS[col.type] + const visibility = getColumnVisibility(col) + + if (special) { + return { ...col, prop: special.prop, label: special.label, checked: true, visible: true } + } + return { ...col, checked: visibility, visible: visibility } + }) + +/** + * 动态列配置接口 + */ +export interface DynamicColumnConfig { + /** + * 新增列(支持单个或批量) + * @param column 列配置或列配置数组 + * @param index 可选的插入位置,默认末尾(批量时为第一个列的位置) + */ + addColumn: (column: ColumnOption | ColumnOption[], index?: number) => void + /** + * 删除列(支持单个或批量) + * @param prop 列的唯一标识或标识数组 + */ + removeColumn: (prop: string | string[]) => void + /** + * 切换列显示状态(支持单个或批量) + * @param prop 列的唯一标识或标识数组 + * @param visible 可选的显示状态,默认取反 + */ + toggleColumn: (prop: string | string[], visible?: boolean) => void + + /** + * 更新列(支持单个或批量) + * @param prop 列的唯一标识或更新配置数组 + * @param updates 列配置更新(当 prop 为字符串时使用) + */ + updateColumn: ( + prop: string | Array<{ prop: string; updates: Partial> }>, + updates?: Partial> + ) => void + /** + * 批量更新列(兼容旧版本,推荐使用 updateColumn 的数组模式) + * @param updates 列更新配置 + * @deprecated 推荐使用 updateColumn 的数组模式 + */ + batchUpdateColumns: (updates: Array<{ prop: string; updates: Partial> }>) => void + /** + * 重新排序列 + * @param fromIndex 源索引 + * @param toIndex 目标索引 + */ + reorderColumns: (fromIndex: number, toIndex: number) => void + /** + * 获取列配置 + * @param prop 列的唯一标识 + * @returns 列配置 + */ + getColumnConfig: (prop: string) => ColumnOption | undefined + /** + * 获取所有列配置 + * @returns 所有列配置 + */ + getAllColumns: () => ColumnOption[] + /** + * 重置所有列 + */ + resetColumns: () => void +} + +export function useTableColumns( + columnsFactory: () => ColumnOption[] +): { + columns: any + columnChecks: any +} & DynamicColumnConfig { + const dynamicColumns = ref[]>(columnsFactory()) + const columnChecks = ref[]>(getColumnChecks(dynamicColumns.value)) + + // 当 dynamicColumns 变动时,重新生成 columnChecks 且保留已存在的显示状态 + watch( + dynamicColumns, + (newCols) => { + const visibilityMap = new Map( + columnChecks.value.map((c) => [getColumnKey(c), getColumnVisibility(c)]) + ) + const newChecks = getColumnChecks(newCols).map((c) => { + const key = getColumnKey(c) + const visibility = visibilityMap.has(key) ? visibilityMap.get(key) : getColumnVisibility(c) + return { + ...c, + checked: visibility, + visible: visibility + } + }) + columnChecks.value = newChecks + }, + { deep: true } + ) + + // 当前显示列(基于 columnChecks 的 checked 或 visible) + const columns = computed(() => { + const colMap = new Map(dynamicColumns.value.map((c) => [getColumnKey(c), c])) + return columnChecks.value + .filter((c) => getColumnVisibility(c)) + .map((c) => colMap.get(getColumnKey(c))) + .filter(Boolean) as ColumnOption[] + }) + + // 支持 updater 返回新数组或直接在传入数组上 mutate + const setDynamicColumns = (updater: (cols: ColumnOption[]) => void | ColumnOption[]) => { + const copy = [...dynamicColumns.value] + const result = updater(copy) + dynamicColumns.value = Array.isArray(result) ? result : copy + } + + return { + columns, + columnChecks, + + /** + * 新增列(支持单个或批量) + */ + addColumn: (column: ColumnOption | ColumnOption[], index?: number) => + setDynamicColumns((cols) => { + const next = [...cols] + const columnsToAdd = Array.isArray(column) ? column : [column] + const insertIndex = + typeof index === 'number' && index >= 0 && index <= next.length ? index : next.length + + // 批量插入 + next.splice(insertIndex, 0, ...columnsToAdd) + return next + }), + + /** + * 删除列(支持单个或批量) + */ + removeColumn: (prop: string | string[]) => + setDynamicColumns((cols) => { + const propsToRemove = Array.isArray(prop) ? prop : [prop] + return cols.filter((c) => !propsToRemove.includes(getColumnKey(c))) + }), + + /** + * 更新列(支持单个或批量) + */ + updateColumn: ( + prop: string | Array<{ prop: string; updates: Partial> }>, + updates?: Partial> + ) => { + // 批量模式:prop 是数组 + if (Array.isArray(prop)) { + setDynamicColumns((cols) => { + const map = new Map(prop.map((u) => [u.prop, u.updates])) + return cols.map((c) => { + const key = getColumnKey(c) + const upd = map.get(key) + return upd ? { ...c, ...upd } : c + }) + }) + } + // 单个模式:prop 是字符串 + else if (updates) { + setDynamicColumns((cols) => + cols.map((c) => (getColumnKey(c) === prop ? { ...c, ...updates } : c)) + ) + } + }, + + /** + * 切换列显示状态(支持单个或批量) + */ + toggleColumn: (prop: string | string[], visible?: boolean) => { + const propsToToggle = Array.isArray(prop) ? prop : [prop] + const next = [...columnChecks.value] + + propsToToggle.forEach((p) => { + const i = next.findIndex((c) => getColumnKey(c) === p) + if (i > -1) { + const currentVisibility = getColumnVisibility(next[i]) + const newVisibility = visible ?? !currentVisibility + // 同时更新 checked 和 visible 以保持兼容性 + next[i] = { ...next[i], checked: newVisibility, visible: newVisibility } + } + }) + + columnChecks.value = next + }, + + /** + * 重置所有列 + */ + resetColumns: () => { + dynamicColumns.value = columnsFactory() + }, + + /** + * 批量更新列(兼容旧版本) + * @deprecated 推荐使用 updateColumn 的数组模式 + */ + batchUpdateColumns: (updates) => + setDynamicColumns((cols) => { + const map = new Map(updates.map((u) => [u.prop, u.updates])) + return cols.map((c) => { + const key = getColumnKey(c) + const upd = map.get(key) + return upd ? { ...c, ...upd } : c + }) + }), + + /** + * 重新排序列 + */ + reorderColumns: (fromIndex: number, toIndex: number) => + setDynamicColumns((cols) => { + if ( + fromIndex < 0 || + fromIndex >= cols.length || + toIndex < 0 || + toIndex >= cols.length || + fromIndex === toIndex + ) { + return cols + } + const next = [...cols] + const [moved] = next.splice(fromIndex, 1) + next.splice(toIndex, 0, moved) + return next + }), + + /** + * 获取列配置 + */ + getColumnConfig: (prop: string) => dynamicColumns.value.find((c) => getColumnKey(c) === prop), + + /** + * 获取所有列配置 + */ + getAllColumns: () => [...dynamicColumns.value] + } +} diff --git a/web/src/hooks/core/useTableHeight.ts b/web/src/hooks/core/useTableHeight.ts new file mode 100644 index 0000000..8fdf6da --- /dev/null +++ b/web/src/hooks/core/useTableHeight.ts @@ -0,0 +1,105 @@ +/** + * useTableHeight - 表格高度自动计算 + * + * 自动计算表格容器的最佳高度,确保表格在不同布局场景下都能正确显示。 + * 根据表格头部、分页器等元素的高度动态调整容器高度,避免出现滚动条或布局错乱。 + * + * ## 主要功能 + * + * 1. 动态高度计算 - 根据表格头部、分页器高度自动计算容器高度 + * 2. 响应式更新 - 配置变化时自动重新计算高度 + * 3. 灵活配置 - 支持自定义各部分高度和间距 + * 4. 智能适配 - 无额外元素时自动使用 100% 高度 + * + * @module useTableHeight + * @author Art Design Pro Team + */ + +import { computed, type Ref } from 'vue' + +/** + * 表格高度计算器配置接口 + */ +interface TableHeightOptions { + /** 是否显示表格头部 */ + showTableHeader: Ref + /** 分页器高度 */ + paginationHeight: Ref + /** 表格头部高度 */ + tableHeaderHeight: Ref + /** 分页器间距 */ + paginationSpacing: Ref +} + +/** + * 表格高度计算器类 + */ +class TableHeightCalculator { + // 常量配置 + private static readonly DEFAULT_TABLE_HEADER_HEIGHT = 44 + private static readonly TABLE_HEADER_SPACING = 12 + + constructor(private options: TableHeightOptions) {} + + /** + * 计算容器高度 + */ + calculate(): { height: string } { + const offset = this.calculateOffset() + return { + height: offset === 0 ? '100%' : `calc(100% - ${offset}px)` + } + } + + /** + * 计算偏移量 + */ + private calculateOffset(): number { + if (!this.options.showTableHeader.value) { + return this.calculatePaginationOffset() + } + + const headerHeight = this.getHeaderHeight() + const paginationOffset = this.calculatePaginationOffset() + + return headerHeight + paginationOffset + TableHeightCalculator.TABLE_HEADER_SPACING + } + + /** + * 获取表格头部高度 + */ + private getHeaderHeight(): number { + return this.options.tableHeaderHeight.value || TableHeightCalculator.DEFAULT_TABLE_HEADER_HEIGHT + } + + /** + * 计算分页器偏移量 + */ + private calculatePaginationOffset(): number { + const { paginationHeight, paginationSpacing } = this.options + return paginationHeight.value === 0 ? 0 : paginationHeight.value + paginationSpacing.value + } +} + +/** + * 表格高度计算 Hook + * + * 提供表格容器高度的自动计算功能,支持: + * - 表格头部高度 + * - 分页器高度 + * - 动态间距计算 + * + * @param options 配置选项 + * @returns 容器高度计算结果 + */ +export function useTableHeight(options: TableHeightOptions) { + const containerHeight = computed(() => { + const calculator = new TableHeightCalculator(options) + return calculator.calculate() + }) + + return { + /** 容器高度样式对象 */ + containerHeight + } +} diff --git a/web/src/hooks/core/useTheme.ts b/web/src/hooks/core/useTheme.ts new file mode 100644 index 0000000..187c3e0 --- /dev/null +++ b/web/src/hooks/core/useTheme.ts @@ -0,0 +1,174 @@ +/** + * useTheme - 系统主题管理 + * + * 提供完整的主题切换和管理功能,支持亮色、暗色和自动模式。 + * 自动处理主题切换时的过渡效果,确保切换流畅无闪烁。 + * + * ## 主要功能 + * + * 1. 主题切换 - 支持亮色、暗色、自动三种主题模式 + * 2. 自动模式 - 根据系统偏好自动切换主题 + * 3. 颜色适配 - 自动调整主题色的明暗变体(9 个层级) + * 4. 过渡优化 - 切换时临时禁用过渡效果,避免闪烁 + * 5. 状态持久化 - 主题设置自动保存到 store + * + * ## 使用示例 + * + * ```typescript + * const { switchThemeStyles } = useTheme() + * + * // 切换到暗色主题 + * switchThemeStyles(SystemThemeEnum.DARK) + * + * // 切换到亮色主题 + * switchThemeStyles(SystemThemeEnum.LIGHT) + * + * // 切换到自动模式(跟随系统) + * switchThemeStyles(SystemThemeEnum.AUTO) + * ``` + * + * @module useTheme + * @author Art Design Pro Team + */ + +import { useSettingStore } from '@/store/modules/setting' +import { SystemThemeEnum } from '@/enums/appEnum' +import AppConfig from '@/config' +import { SystemThemeTypes } from '@/types/store' +import { getDarkColor, getLightColor, setElementThemeColor } from '@/utils/ui' +import { usePreferredDark } from '@vueuse/core' +import { watch } from 'vue' + +export function useTheme() { + const settingStore = useSettingStore() + + // 禁用过渡效果 + const disableTransitions = () => { + const style = document.createElement('style') + style.setAttribute('id', 'disable-transitions') + style.textContent = '* { transition: none !important; }' + document.head.appendChild(style) + } + + // 启用过渡效果 + const enableTransitions = () => { + const style = document.getElementById('disable-transitions') + if (style) { + style.remove() + } + } + + // 设置系统主题 + const setSystemTheme = (theme: SystemThemeEnum, themeMode?: SystemThemeEnum) => { + // 临时禁用过渡效果 + disableTransitions() + + const el = document.getElementsByTagName('html')[0] + const isDark = theme === SystemThemeEnum.DARK + + if (!themeMode) { + themeMode = theme + } + + const currentTheme = AppConfig.systemThemeStyles[theme as keyof SystemThemeTypes] + + if (currentTheme) { + el.setAttribute('class', currentTheme.className) + } + + // 设置按钮颜色加深或变浅 + const primary = settingStore.systemThemeColor + + for (let i = 1; i <= 9; i++) { + document.documentElement.style.setProperty( + `--el-color-primary-light-${i}`, + isDark ? `${getDarkColor(primary, i / 10)}` : `${getLightColor(primary, i / 10)}` + ) + } + + // 更新store中的主题设置 + settingStore.setGlopTheme(theme, themeMode) + + // 使用 requestAnimationFrame 确保在下一帧恢复过渡效果 + requestAnimationFrame(() => { + requestAnimationFrame(() => { + enableTransitions() + }) + }) + } + + // 使用 VueUse 的 usePreferredDark 检测系统主题偏好 + const prefersDark = usePreferredDark() + + // 自动设置系统主题 + const setSystemAutoTheme = () => { + const theme = prefersDark.value ? SystemThemeEnum.DARK : SystemThemeEnum.LIGHT + setSystemTheme(theme, SystemThemeEnum.AUTO) + } + + // 切换主题 + const switchThemeStyles = (theme: SystemThemeEnum) => { + if (theme === SystemThemeEnum.AUTO) { + setSystemAutoTheme() + } else { + setSystemTheme(theme) + } + } + + return { + setSystemTheme, + setSystemAutoTheme, + switchThemeStyles, + prefersDark + } +} + +/** + * 初始化主题系统 + */ +export function initializeTheme() { + const settingStore = useSettingStore() + const prefersDark = usePreferredDark() + + // 根据系统偏好应用主题 + const applyThemeByMode = () => { + const el = document.getElementsByTagName('html')[0] + let actualTheme = settingStore.systemThemeType + + // 如果是 AUTO 模式,检测系统偏好 + if (settingStore.systemThemeMode === SystemThemeEnum.AUTO) { + actualTheme = prefersDark.value ? SystemThemeEnum.DARK : SystemThemeEnum.LIGHT + // 更新实际应用的主题类型 + settingStore.systemThemeType = actualTheme + } + + // 设置主题 class + const currentTheme = AppConfig.systemThemeStyles[actualTheme as keyof SystemThemeTypes] + if (currentTheme) { + el.setAttribute('class', currentTheme.className) + } + + // 设置主题颜色 + setElementThemeColor(settingStore.systemThemeColor) + + // 设置圆角 + document.documentElement.style.setProperty('--custom-radius', `${settingStore.customRadius}rem`) + } + + // 应用主题 + applyThemeByMode() + + // 如果是 AUTO 模式,监听系统主题变化(使用 VueUse 的响应式特性) + if (settingStore.systemThemeMode === SystemThemeEnum.AUTO) { + watch( + prefersDark, + () => { + // 只有在 AUTO 模式下才响应系统主题变化 + if (settingStore.systemThemeMode === SystemThemeEnum.AUTO) { + applyThemeByMode() + } + }, + { immediate: false } + ) + } +} diff --git a/web/src/hooks/index.ts b/web/src/hooks/index.ts new file mode 100644 index 0000000..472b09c --- /dev/null +++ b/web/src/hooks/index.ts @@ -0,0 +1,32 @@ +// 通用功能集合 +export { useCommon } from './core/useCommon' + +// 应用模式 +export { useAppMode } from './core/useAppMode' + +// 权限控制 +export { useAuth } from './core/useAuth' + +// 表格数据管理方案 +export { useTable } from './core/useTable' + +// 表格列配置管理 +export { useTableColumns } from './core/useTableColumns' + +// 主题相关 +export { useTheme } from './core/useTheme' + +// 礼花+文字滚动 +export { useCeremony } from './core/useCeremony' + +// 顶栏快速入口 +export { useFastEnter } from './core/useFastEnter' + +// 顶栏功能管理 +export { useHeaderBar } from './core/useHeaderBar' + +// 图表相关 +export { useChart, useChartComponent, useChartOps } from './core/useChart' + +// 布局高度 +export { useLayoutHeight, useAutoLayoutHeight } from './core/useLayoutHeight' diff --git a/web/src/locales/index.ts b/web/src/locales/index.ts new file mode 100644 index 0000000..36c2648 --- /dev/null +++ b/web/src/locales/index.ts @@ -0,0 +1,123 @@ +/** + * 国际化配置 + * + * 基于 vue-i18n 实现的多语言国际化解决方案。 + * 支持中文和英文切换,自动从本地存储恢复用户的语言偏好。 + * + * ## 主要功能 + * + * - 多语言支持 - 支持中文(简体)和英文两种语言 + * - 语言切换 - 运行时动态切换语言,无需刷新页面 + * - 持久化存储 - 自动保存和恢复用户的语言偏好 + * - 全局注入 - 在任何组件中都可以使用 $t 函数进行翻译 + * - 类型安全 - 提供 TypeScript 类型支持 + * + * ## 支持的语言 + * + * - zh: 简体中文 + * - en: English + * + * @module locales + * @author Art Design Pro Team + */ + +import { createI18n } from 'vue-i18n' +import type { I18n, I18nOptions } from 'vue-i18n' +import { LanguageEnum } from '@/enums/appEnum' +import { getSystemStorage } from '@/utils/storage' +import { StorageKeyManager } from '@/utils/storage/storage-key-manager' + +// 同步导入语言文件 +import enMessages from './langs/en.json' +import zhMessages from './langs/zh.json' + +/** + * 存储键管理器实例 + */ +const storageKeyManager = new StorageKeyManager() + +/** + * 语言消息对象 + */ +const messages = { + [LanguageEnum.EN]: enMessages, + [LanguageEnum.ZH]: zhMessages +} + +/** + * 语言选项列表 + * 用于语言切换下拉框 + */ +export const languageOptions = [ + { value: LanguageEnum.ZH, label: '简体中文' }, + { value: LanguageEnum.EN, label: 'English' } +] + +/** + * 从存储中获取语言设置 + * @returns 语言设置,如果获取失败则返回默认语言 + */ +const getDefaultLanguage = (): LanguageEnum => { + // 尝试从版本化的存储中获取语言设置 + try { + const storageKey = storageKeyManager.getStorageKey('user') + const userStore = localStorage.getItem(storageKey) + + if (userStore) { + const { language } = JSON.parse(userStore) + if (language && Object.values(LanguageEnum).includes(language)) { + return language + } + } + } catch (error) { + console.warn('[i18n] 从版本化存储获取语言设置失败:', error) + } + + // 尝试从系统存储中获取语言设置 + try { + const sys = getSystemStorage() + if (sys) { + const { user } = JSON.parse(sys) + if (user?.language && Object.values(LanguageEnum).includes(user.language)) { + return user.language + } + } + } catch (error) { + console.warn('[i18n] 从系统存储获取语言设置失败:', error) + } + + // 返回默认语言 + console.debug('[i18n] 使用默认语言:', LanguageEnum.ZH) + return LanguageEnum.ZH +} + +/** + * i18n 配置选项 + */ +const i18nOptions: I18nOptions = { + locale: getDefaultLanguage(), + legacy: false, + globalInjection: true, + fallbackLocale: LanguageEnum.ZH, + messages +} + +/** + * i18n 实例 + */ +const i18n: I18n = createI18n(i18nOptions) + +/** + * 翻译函数类型 + */ +interface Translation { + (key: string): string +} + +/** + * 全局翻译函数 + * 可在任何地方使用,无需导入 useI18n + */ +export const $t = i18n.global.t as Translation + +export default i18n diff --git a/web/src/locales/langs/en.json b/web/src/locales/langs/en.json new file mode 100644 index 0000000..51e196b --- /dev/null +++ b/web/src/locales/langs/en.json @@ -0,0 +1,296 @@ +{ + "httpMsg": { + "unauthorized": "Unauthorized access, please login again", + "forbidden": "Access to this resource is forbidden", + "notFound": "The requested resource does not exist", + "methodNotAllowed": "Request method not allowed", + "requestTimeout": "Request timeout, please try again later", + "internalServerError": "Internal server error, please try again later", + "badGateway": "Bad gateway error, please try again later", + "serviceUnavailable": "Service temporarily unavailable, please try again later", + "gatewayTimeout": "Gateway timeout, please try again later", + "requestCancelled": "Request cancelled", + "networkError": "Network connection error, please check your connection", + "requestFailed": "Request failed", + "requestConfigError": "Request configuration error" + }, + "topBar": { + "search": { + "title": "Search" + }, + "user": { + "userCenter": "User center", + "docs": "Document", + "github": "Github", + "lockScreen": "Lock screen", + "logout": "Log out" + }, + "guide": { + "title": "Click here to view", + "theme": "Theme style", + "menu": "Open top menu", + "description": "More configurations" + } + }, + "common": { + "tips": "Prompt", + "cancel": "Cancel", + "confirm": "Confirm", + "logOutTips": "Do you want to log out?" + }, + "search": { + "placeholder": "Search page", + "historyTitle": "Search history", + "switchKeydown": "Navigate", + "selectKeydown": "Select", + "exitKeydown": "Close" + }, + "setting": { + "menuType": { + "title": "Menu Layout", + "list": [ + "Vertical", + "Horizontal", + "Mixed", + "Dual" + ] + }, + "theme": { + "title": "Theme Style", + "list": [ + "Light", + "Dark", + "System" + ] + }, + "menu": { + "title": "Menu Style" + }, + "color": { + "title": "Theme Color" + }, + "box": { + "title": "Box Style", + "list": [ + "Border", + "Shadow" + ] + }, + "container": { + "title": "Container Width", + "list": [ + "Full", + "Boxed" + ] + }, + "basics": { + "title": "Basic Config", + "list": { + "multiTab": "Show work tab", + "accordion": "Sidebar opens accordion", + "collapseSidebar": "Show sidebar button", + "reloadPage": "Show reload page button", + "fastEnter": "Show fast enter", + "breadcrumb": "Show crumb navigation", + "language": "Show multilingual selection", + "progressBar": "Show top progress bar", + "weakMode": "Color Weakness Mode", + "watermark": "Global watermark", + "menuWidth": "Menu width", + "tabStyle": "Tab style", + "pageTransition": "Page animation", + "borderRadius": "Custom radius" + } + }, + "tabStyle": { + "default": "Default", + "card": "Card", + "google": "Chrome" + }, + "transition": { + "list": { + "none": "None", + "fade": "Fade", + "slideLeft": "Slide Left", + "slideBottom": "Slide Bottom", + "slideTop": "Slide Top" + } + }, + "actions": { + "resetConfig": "Reset Config", + "copyConfig": "Copy Config", + "copySuccess": "Configuration copied to clipboard, paste it into src/config/setting.ts file", + "copyFailed": "Copy failed, please try again", + "resetFailed": "Reset failed, please refresh the page and try again" + } + }, + "notice": { + "title": "Notice", + "btnRead": "Mark as read", + "bar": [ + "Notice", + "Message", + "Todo" + ], + "text": [ + "No" + ], + "viewAll": "View all" + }, + "worktab": { + "btn": { + "refresh": "Refresh", + "fixed": "Fixed", + "unfixed": "Unfixed", + "closeLeft": "Close left", + "closeRight": "Close right", + "closeOther": "Close other", + "closeAll": "Close all" + } + }, + "login": { + "leftView": { + "title": "A backend system of beauty and efficiency", + "subTitle": "A sleek and practical interface for a great user experience" + }, + "title": "Welcome back", + "subTitle": "Please enter your account and password to login", + "roles": { + "super": "Super Admin", + "admin": "Admin", + "user": "User" + }, + "placeholder": { + "username": "Please enter your account", + "password": "Please enter your password", + "slider": "Please slide to verify" + }, + "sliderText": "Please slide to verify", + "sliderSuccessText": "Verification successful", + "rememberPwd": "Remember password", + "forgetPwd": "Forgot password", + "btnText": "Login", + "noAccount": "No account yet?", + "register": "Register", + "success": { + "title": "Login successful", + "message": "Welcome back" + } + }, + "forgetPassword": { + "title": "Forgot password?", + "subTitle": "Enter your email to reset your password", + "placeholder": "Please enter your email", + "submitBtnText": "Submit", + "backBtnText": "Back" + }, + "register": { + "title": "Create account", + "subTitle": "Welcome to join us, please fill in the following information to complete the registration", + "placeholder": { + "username": "Please enter your account", + "password": "Please enter your password", + "confirmPassword": "Please enter your password again" + }, + "rule": { + "confirmPasswordRequired": "Please enter your password again", + "passwordMismatch": "The two passwords are inconsistent!", + "usernameLength": "The length is 3 to 20 characters", + "passwordLength": "The password length cannot be less than 6 digits", + "agreementRequired": "Please agree to the privacy policy" + }, + "agreeText": "I agree", + "privacyPolicy": "Privacy policy", + "submitBtnText": "Register", + "hasAccount": "Already have an account?", + "toLogin": "To login" + }, + "lockScreen": { + "pwdError": "Password error", + "lock": { + "inputPlaceholder": "Please input lock screen password", + "btnText": "Lock" + }, + "unlock": { + "inputPlaceholder": "Please input unlock password", + "btnText": "Unlock", + "backBtnText": "Back to login" + } + }, + "greeting": { + "dawn": "Good morning!", + "morning": "Good morning!", + "afternoon": "Good afternoon!", + "evening": "Good evening!" + }, + "exceptionPage": { + "403": "Sorry, you do not have permission to access this page", + "404": "Sorry, the page you are trying to access does not exist", + "500": "Sorry, there was an error on the server", + "gohome": "Go Home" + }, + "menus": { + "login": { + "title": "Login" + }, + "register": { + "title": "Register" + }, + "forgetPassword": { + "title": "Forget Password" + }, + "outside": { + "title": "Outside" + }, + "dashboard": { + "title": "Dashboard", + "console": "Console" + }, + "result": { + "title": "Result Page", + "success": "Success", + "fail": "Fail" + }, + "exception": { + "title": "Exception", + "forbidden": "403", + "notFound": "404", + "serverError": "500" + }, + "system": { + "title": "System Settings", + "user": "User Manage", + "role": "Role Manage", + "userCenter": "User Center", + "menu": "Menu Manage" + } + }, + "table": { + "form": { + "reset": "Reset", + "submit": "Submit" + }, + "searchBar": { + "reset": "Reset", + "search": "Search", + "expand": "Expand", + "collapse": "Collapse", + "searchInputPlaceholder": "Please enter", + "searchSelectPlaceholder": "Please select" + }, + "selection": "Select", + "sizeOptions": { + "small": "Compact", + "default": "Default", + "large": "Loose" + }, + "column": { + "selection": "Select", + "expand": "Expand", + "index": "Index" + }, + "zebra": "Zebra", + "border": "Border", + "headerBackground": "Header BG" + } +} \ No newline at end of file diff --git a/web/src/locales/langs/zh.json b/web/src/locales/langs/zh.json new file mode 100644 index 0000000..77a23a5 --- /dev/null +++ b/web/src/locales/langs/zh.json @@ -0,0 +1,296 @@ +{ + "httpMsg": { + "unauthorized": "未授权访问,请重新登录", + "forbidden": "禁止访问该资源", + "notFound": "请求的资源不存在", + "methodNotAllowed": "请求方法不允许", + "requestTimeout": "请求超时,请稍后重试", + "internalServerError": "服务器内部错误,请稍后重试", + "badGateway": "网关错误,请稍后重试", + "serviceUnavailable": "服务暂时不可用,请稍后重试", + "gatewayTimeout": "网关超时,请稍后重试", + "requestCancelled": "请求已取消", + "networkError": "网络连接异常,请检查网络连接", + "requestFailed": "请求失败", + "requestConfigError": "请求配置错误" + }, + "topBar": { + "search": { + "title": "搜索" + }, + "user": { + "userCenter": "个人中心", + "docs": "使用文档", + "github": "Github", + "lockScreen": "锁定屏幕", + "logout": "退出登录" + }, + "guide": { + "title": "点击这里查看", + "theme": "主题风格", + "menu": "开启顶栏菜单", + "description": "等更多配置" + } + }, + "common": { + "tips": "提示", + "cancel": "取消", + "confirm": "确定", + "logOutTips": "您是否要退出登录?" + }, + "search": { + "placeholder": "搜索页面", + "historyTitle": "搜索历史", + "switchKeydown": "切换", + "selectKeydown": "选择", + "exitKeydown": "关闭" + }, + "setting": { + "menuType": { + "title": "菜单布局", + "list": [ + "垂直", + "水平", + "混合", + "双列" + ] + }, + "theme": { + "title": "主题风格", + "list": [ + "浅色", + "深色", + "系统" + ] + }, + "menu": { + "title": "菜单风格" + }, + "color": { + "title": "系统主题色" + }, + "box": { + "title": "盒子样式", + "list": [ + "边框", + "阴影" + ] + }, + "container": { + "title": "容器宽度", + "list": [ + "铺满", + "定宽" + ] + }, + "basics": { + "title": "基础配置", + "list": { + "multiTab": "开启多标签栏", + "accordion": "侧边栏开启手风琴模式", + "collapseSidebar": "显示折叠侧边栏按钮", + "fastEnter": "显示快速入口", + "reloadPage": "显示重载页面按钮", + "breadcrumb": "显示全局面包屑导航", + "language": "显示多语言选择", + "progressBar": "显示顶部进度条", + "weakMode": "色弱模式", + "watermark": "全局水印", + "menuWidth": "菜单宽度", + "tabStyle": "标签页风格", + "pageTransition": "页面切换动画", + "borderRadius": "自定义圆角" + } + }, + "tabStyle": { + "default": "默认", + "card": "卡片", + "google": "谷歌" + }, + "transition": { + "list": { + "none": "无动画", + "fade": "淡入淡出", + "slideLeft": "左侧滑入", + "slideBottom": "下方滑入", + "slideTop": "上方滑入" + } + }, + "actions": { + "resetConfig": "重置配置", + "copyConfig": "复制配置", + "copySuccess": "配置已复制到剪贴板,可粘贴到 src/config/setting.ts 文件中", + "copyFailed": "复制失败,请重试", + "resetFailed": "重置失败,请刷新页面后重试" + } + }, + "notice": { + "title": "通知", + "btnRead": "标为已读", + "bar": [ + "通知", + "消息", + "代办" + ], + "text": [ + "暂无" + ], + "viewAll": "查看全部" + }, + "worktab": { + "btn": { + "refresh": "刷新", + "fixed": "固定", + "unfixed": "取消固定", + "closeLeft": "关闭左侧", + "closeRight": "关闭右侧", + "closeOther": "关闭其他", + "closeAll": "关闭全部" + } + }, + "login": { + "leftView": { + "title": "一款兼具设计美学与高效开发的后台系统", + "subTitle": "美观实用的界面,经过视觉优化,确保卓越的用户体验" + }, + "title": "欢迎回来", + "subTitle": "输入您的账号和密码登录", + "roles": { + "super": "超级管理员", + "admin": "管理员", + "user": "普通用户" + }, + "placeholder": { + "username": "请输入账号", + "password": "请输入密码", + "slider": "请拖动滑块完成验证" + }, + "sliderText": "按住滑块拖动", + "sliderSuccessText": "验证成功", + "rememberPwd": "记住密码", + "forgetPwd": "忘记密码", + "btnText": "登录", + "noAccount": "还没有账号?", + "register": "注册", + "success": { + "title": "登录成功", + "message": "欢迎回来" + } + }, + "forgetPassword": { + "title": "忘记密码?", + "subTitle": "输入您的电子邮件来重置您的密码", + "placeholder": "请输入您的电子邮件", + "submitBtnText": "提交", + "backBtnText": "返回" + }, + "register": { + "title": "创建账号", + "subTitle": "欢迎加入我们,请填写以下信息完成注册", + "placeholder": { + "username": "请输入账号", + "password": "请输入密码", + "confirmPassword": "请再次输入密码" + }, + "rule": { + "confirmPasswordRequired": "请再次输入密码", + "passwordMismatch": "两次输入密码不一致!", + "usernameLength": "长度在 3 到 20 个字符", + "passwordLength": "密码长度不能小于6位", + "agreementRequired": "请同意隐私协议" + }, + "agreeText": "我同意", + "privacyPolicy": "《隐私政策》", + "submitBtnText": "注册", + "hasAccount": "已有账号?", + "toLogin": "去登录" + }, + "lockScreen": { + "pwdError": "密码错误", + "lock": { + "inputPlaceholder": "请输入锁屏密码", + "btnText": "锁定" + }, + "unlock": { + "inputPlaceholder": "请输入解锁密码", + "btnText": "解锁", + "backBtnText": "返回登录" + } + }, + "greeting": { + "dawn": "凌晨了!", + "morning": "上午好!", + "afternoon": "下午好!", + "evening": "晚上好!" + }, + "exceptionPage": { + "403": "抱歉,您无权访问该页面", + "404": "抱歉,您访问的页面不存在", + "500": "抱歉,服务器出错了", + "gohome": "返回首页" + }, + "menus": { + "login": { + "title": "登录" + }, + "register": { + "title": "注册" + }, + "forgetPassword": { + "title": "忘记密码" + }, + "outside": { + "title": "内嵌页面" + }, + "dashboard": { + "title": "仪表盘", + "console": "工作台" + }, + "result": { + "title": "结果页面", + "success": "成功页", + "fail": "失败页" + }, + "exception": { + "title": "异常页面", + "forbidden": "403", + "notFound": "404", + "serverError": "500" + }, + "system": { + "title": "系统管理", + "user": "用户管理", + "role": "角色管理", + "userCenter": "个人中心", + "menu": "菜单管理" + } + }, + "table": { + "form": { + "reset": "重置", + "submit": "提交" + }, + "searchBar": { + "reset": "重置", + "search": "查询", + "expand": "展开", + "collapse": "收起", + "searchInputPlaceholder": "请输入", + "searchSelectPlaceholder": "请选择" + }, + "selection": "选择", + "sizeOptions": { + "small": "紧凑", + "default": "默认", + "large": "宽松" + }, + "column": { + "selection": "勾选", + "expand": "展开", + "index": "序号" + }, + "zebra": "斑马纹", + "border": "边框", + "headerBackground": "表头背景" + } +} \ No newline at end of file diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100755 index 0000000..7df948a --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,25 @@ +import App from './App.vue' +import { createApp } from 'vue' +import { initStore } from './store' // Store +import { initRouter } from './router' // Router +import language from './locales' // 国际化 +import '@styles/core/tailwind.css' // tailwind +import '@styles/index.scss' // 样式 +import '@utils/sys/console.ts' // 控制台输出内容 +import { setupGlobDirectives } from './directives' +import { setupErrorHandle } from './utils/sys/error-handle' + +document.addEventListener( + 'touchstart', + function () {}, + { passive: false } +) + +const app = createApp(App) +initStore(app) +initRouter(app) +setupGlobDirectives(app) +setupErrorHandle(app) + +app.use(language) +app.mount('#app') \ No newline at end of file diff --git a/web/src/mock/temp/formData.ts b/web/src/mock/temp/formData.ts new file mode 100755 index 0000000..8aa7ae5 --- /dev/null +++ b/web/src/mock/temp/formData.ts @@ -0,0 +1,273 @@ +import avatar1 from '@/assets/images/avatar/avatar1.webp' +import avatar2 from '@/assets/images/avatar/avatar2.webp' +import avatar3 from '@/assets/images/avatar/avatar3.webp' +import avatar4 from '@/assets/images/avatar/avatar4.webp' +import avatar5 from '@/assets/images/avatar/avatar5.webp' +import avatar6 from '@/assets/images/avatar/avatar6.webp' +import avatar7 from '@/assets/images/avatar/avatar7.webp' +import avatar8 from '@/assets/images/avatar/avatar8.webp' +import avatar9 from '@/assets/images/avatar/avatar9.webp' +import avatar10 from '@/assets/images/avatar/avatar10.webp' + +export interface User { + id: number + username: string + gender: 1 | 0 + mobile: string + email: string + dep: string + status: string + create_time: string + avatar: string +} + +// 用户列表 +export const ACCOUNT_TABLE_DATA: User[] = [ + { + id: 1, + username: 'alexmorgan', + gender: 1, + mobile: '18670001591', + email: 'alexmorgan@company.com', + dep: '研发部', + status: '1', + create_time: '2020-09-09 10:01:10', + avatar: avatar1 + }, + { + id: 2, + username: 'sophiabaker', + gender: 1, + mobile: '17766664444', + email: 'sophiabaker@company.com', + dep: '电商部', + status: '1', + create_time: '2020-10-10 13:01:12', + avatar: avatar2 + }, + { + id: 3, + username: 'liampark', + gender: 1, + mobile: '18670001597', + email: 'liampark@company.com', + dep: '人事部', + status: '1', + create_time: '2020-11-14 12:01:45', + avatar: avatar3 + }, + { + id: 4, + username: 'oliviagrant', + gender: 0, + mobile: '18670001596', + email: 'oliviagrant@company.com', + dep: '产品部', + status: '1', + create_time: '2020-11-14 09:01:20', + avatar: avatar4 + }, + { + id: 5, + username: 'emmawilson', + gender: 0, + mobile: '18670001595', + email: 'emmawilson@company.com', + dep: '财务部', + status: '1', + create_time: '2020-11-13 11:01:05', + avatar: avatar5 + }, + { + id: 6, + username: 'noahevan', + gender: 1, + mobile: '18670001594', + email: 'noahevan@company.com', + dep: '运营部', + status: '1', + create_time: '2020-10-11 13:10:26', + avatar: avatar6 + }, + { + id: 7, + username: 'avamartin', + gender: 1, + mobile: '18123820191', + email: 'avamartin@company.com', + dep: '客服部', + status: '2', + create_time: '2020-05-14 12:05:10', + avatar: avatar7 + }, + { + id: 8, + username: 'jacoblee', + gender: 1, + mobile: '18670001592', + email: 'jacoblee@company.com', + dep: '总经办', + status: '3', + create_time: '2020-11-12 07:22:25', + avatar: avatar8 + }, + { + id: 9, + username: 'miaclark', + gender: 0, + mobile: '18670001581', + email: 'miaclark@company.com', + dep: '研发部', + status: '4', + create_time: '2020-06-12 05:04:20', + avatar: avatar9 + }, + { + id: 10, + username: 'ethanharris', + gender: 1, + mobile: '13755554444', + email: 'ethanharris@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-12 16:01:10', + avatar: avatar10 + }, + { + id: 11, + username: 'isabellamoore', + gender: 1, + mobile: '13766660000', + email: 'isabellamoore@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-14 12:01:20', + avatar: avatar6 + }, + { + id: 12, + username: 'masonwhite', + gender: 1, + mobile: '18670001502', + email: 'masonwhite@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-14 12:01:20', + avatar: avatar7 + }, + { + id: 13, + username: 'charlottehall', + gender: 1, + mobile: '13006644977', + email: 'charlottehall@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-14 12:01:20', + avatar: avatar8 + }, + { + id: 14, + username: 'benjaminscott', + gender: 0, + mobile: '13599998888', + email: 'benjaminscott@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-14 12:01:20', + avatar: avatar9 + }, + { + id: 15, + username: 'ameliaking', + gender: 1, + mobile: '13799998888', + email: 'ameliaking@company.com', + dep: '研发部', + status: '1', + create_time: '2020-11-14 12:01:20', + avatar: avatar10 + } +] + +export interface Role { + roleName: string + roleCode: string + des: string + date: string + enable: boolean +} + +// 角色列表 +export const ROLE_LIST_DATA: Role[] = [ + { + roleName: '超级管理员', + roleCode: 'R_SUPER', + des: '拥有系统全部权限', + date: '2025-05-15 12:30:45', + enable: true + }, + { + roleName: '管理员', + roleCode: 'R_ADMIN', + des: '拥有系统管理权限', + date: '2025-05-15 12:30:45', + enable: true + }, + { + roleName: '普通用户', + roleCode: 'R_USER', + des: '拥有系统普通权限', + date: '2025-05-15 12:30:45', + enable: true + }, + { + roleName: '财务管理员', + roleCode: 'R_FINANCE', + des: '管理财务相关权限', + date: '2025-05-16 09:15:30', + enable: true + }, + { + roleName: '数据分析师', + roleCode: 'R_ANALYST', + des: '拥有数据分析权限', + date: '2025-05-16 11:45:00', + enable: false + }, + { + roleName: '客服专员', + roleCode: 'R_SUPPORT', + des: '处理客户支持请求', + date: '2025-05-17 14:30:22', + enable: true + }, + { + roleName: '营销经理', + roleCode: 'R_MARKETING', + des: '管理营销活动权限', + date: '2025-05-17 15:10:50', + enable: true + }, + { + roleName: '访客用户', + roleCode: 'R_GUEST', + des: '仅限浏览权限', + date: '2025-05-18 08:25:40', + enable: false + }, + { + roleName: '系统维护员', + roleCode: 'R_MAINTAINER', + des: '负责系统维护和更新', + date: '2025-05-18 09:50:12', + enable: true + }, + { + roleName: '项目经理', + roleCode: 'R_PM', + des: '管理项目相关权限', + date: '2025-05-19 13:40:35', + enable: true + } +] diff --git a/web/src/mock/upgrade/changeLog.ts b/web/src/mock/upgrade/changeLog.ts new file mode 100644 index 0000000..dd6b772 --- /dev/null +++ b/web/src/mock/upgrade/changeLog.ts @@ -0,0 +1,12 @@ +import { ref } from 'vue' + +interface UpgradeLog { + version: string // 版本号 + title: string // 更新标题 + date: string // 更新日期 + detail?: string[] // 更新内容 + requireReLogin?: boolean // 是否需要重新登录 + remark?: string // 备注 +} + +export const upgradeLogList = ref([]) diff --git a/web/src/plugins/echarts.ts b/web/src/plugins/echarts.ts new file mode 100644 index 0000000..4f56d89 --- /dev/null +++ b/web/src/plugins/echarts.ts @@ -0,0 +1,76 @@ +/** + * ECharts 插件配置 + * + * 按需导入 ECharts 图表和组件,减小打包体积。 + * 只注册项目中实际使用的图表类型和组件。 + * + * @module plugins/echarts + * @author Art Design Pro Team + */ + +// ECharts 按需导入配置 +import * as echarts from 'echarts/core' + +// 导入图表类型 +import { + BarChart, + LineChart, + PieChart, + ScatterChart, + RadarChart, + MapChart, + CandlestickChart +} from 'echarts/charts' + +// 导入组件 +import { + TitleComponent, + TooltipComponent, + GridComponent, + LegendComponent, + DataZoomComponent, + MarkPointComponent, + MarkLineComponent, + ToolboxComponent, + BrushComponent, + GeoComponent, + VisualMapComponent +} from 'echarts/components' + +// 导入渲染器 +import { CanvasRenderer } from 'echarts/renderers' + +// 注册必要的组件 +echarts.use([ + // 图表类型 + BarChart, + LineChart, + PieChart, + ScatterChart, + RadarChart, + MapChart, + CandlestickChart, + + // 组件 + TitleComponent, + TooltipComponent, + GridComponent, + LegendComponent, + DataZoomComponent, + MarkPointComponent, + MarkLineComponent, + ToolboxComponent, + BrushComponent, + GeoComponent, + VisualMapComponent, + + // 渲染器 + CanvasRenderer +]) + +// 导出 echarts 实例和类型 +export { echarts } +export type { EChartsOption, BarSeriesOption } from 'echarts' + +// 导出常用的图形工具 +export const graphic = echarts.graphic diff --git a/web/src/plugins/index.ts b/web/src/plugins/index.ts new file mode 100644 index 0000000..4536a86 --- /dev/null +++ b/web/src/plugins/index.ts @@ -0,0 +1,6 @@ +/** + * 插件统一导出 + * 集中管理第三方库的封装和配置 + */ + +export * from './echarts' diff --git a/web/src/router/core/ComponentLoader.ts b/web/src/router/core/ComponentLoader.ts new file mode 100644 index 0000000..8af3ce3 --- /dev/null +++ b/web/src/router/core/ComponentLoader.ts @@ -0,0 +1,82 @@ +/** + * 组件加载器 + * + * 负责动态加载 Vue 组件 + * + * @module router/core/ComponentLoader + * @author Art Design Pro Team + */ + +import { h } from 'vue' + +export class ComponentLoader { + private modules: Record Promise> + + constructor() { + // 动态导入 views 目录下所有 .vue 组件 + this.modules = import.meta.glob('../../views/**/*.vue') + } + + /** + * 加载组件 + */ + load(componentPath: string): () => Promise { + if (!componentPath) { + return this.createEmptyComponent() + } + + // 构建可能的路径 + const fullPath = `../../views${componentPath}.vue` + const fullPathWithIndex = `../../views${componentPath}/index.vue` + + // 先尝试直接路径,再尝试添加/index的路径 + const module = this.modules[fullPath] || this.modules[fullPathWithIndex] + + if (!module) { + console.error( + `[ComponentLoader] 未找到组件: ${componentPath},尝试过的路径: ${fullPath} 和 ${fullPathWithIndex}` + ) + return this.createErrorComponent(componentPath) + } + + return module + } + + /** + * 加载布局组件 + */ + loadLayout(): () => Promise { + return () => import('@/views/index/index.vue') + } + + /** + * 加载 iframe 组件 + */ + loadIframe(): () => Promise { + return () => import('@/views/outside/Iframe.vue') + } + + /** + * 创建空组件 + */ + private createEmptyComponent(): () => Promise { + return () => + Promise.resolve({ + render() { + return h('div', {}) + } + }) + } + + /** + * 创建错误提示组件 + */ + private createErrorComponent(componentPath: string): () => Promise { + return () => + Promise.resolve({ + render() { + return h('div', { class: 'route-error' }, `组件未找到: ${componentPath}`) + } + }) + } +} diff --git a/web/src/router/core/IframeRouteManager.ts b/web/src/router/core/IframeRouteManager.ts new file mode 100644 index 0000000..c054ca1 --- /dev/null +++ b/web/src/router/core/IframeRouteManager.ts @@ -0,0 +1,78 @@ +/** + * Iframe 路由管理器 + * + * 负责管理 iframe 类型的路由 + * + * @module router/core/IframeRouteManager + * @author Art Design Pro Team + */ + +import type { AppRouteRecord } from '@/types/router' + +export class IframeRouteManager { + private static instance: IframeRouteManager + private iframeRoutes: AppRouteRecord[] = [] + + private constructor() {} + + static getInstance(): IframeRouteManager { + if (!IframeRouteManager.instance) { + IframeRouteManager.instance = new IframeRouteManager() + } + return IframeRouteManager.instance + } + + /** + * 添加 iframe 路由 + */ + add(route: AppRouteRecord): void { + if (!this.iframeRoutes.find((r) => r.path === route.path)) { + this.iframeRoutes.push(route) + } + } + + /** + * 获取所有 iframe 路由 + */ + getAll(): AppRouteRecord[] { + return this.iframeRoutes + } + + /** + * 根据路径查找 iframe 路由 + */ + findByPath(path: string): AppRouteRecord | undefined { + return this.iframeRoutes.find((route) => route.path === path) + } + + /** + * 清空所有 iframe 路由 + */ + clear(): void { + this.iframeRoutes = [] + } + + /** + * 保存到 sessionStorage + */ + save(): void { + if (this.iframeRoutes.length > 0) { + sessionStorage.setItem('iframeRoutes', JSON.stringify(this.iframeRoutes)) + } + } + + /** + * 从 sessionStorage 加载 + */ + load(): void { + try { + const data = sessionStorage.getItem('iframeRoutes') + if (data) { + this.iframeRoutes = JSON.parse(data) + } + } catch (error) { + console.error('[IframeRouteManager] 加载 iframe 路由失败:', error) + this.iframeRoutes = [] + } + } +} diff --git a/web/src/router/core/MenuProcessor.ts b/web/src/router/core/MenuProcessor.ts new file mode 100644 index 0000000..3f822d5 --- /dev/null +++ b/web/src/router/core/MenuProcessor.ts @@ -0,0 +1,280 @@ +/** + * 菜单处理器 + * + * 负责菜单数据的获取、过滤和处理 + * + * @module router/core/MenuProcessor + * @author Art Design Pro Team + */ + +import type { AppRouteRecord } from '@/types/router' +import { useUserStore } from '@/store/modules/user' +import { useAppMode } from '@/hooks/core/useAppMode' +import { fetchGetMenuList } from '@/api/system-manage' +import { asyncRoutes } from '../routes/asyncRoutes' +import { RoutesAlias } from '../routesAlias' +import { formatMenuTitle } from '@/utils' + +export class MenuProcessor { + /** + * 获取菜单数据 + */ + async getMenuList(): Promise { + const { isFrontendMode } = useAppMode() + + let menuList: AppRouteRecord[] + if (isFrontendMode.value) { + menuList = await this.processFrontendMenu() + } else { + menuList = await this.processBackendMenu() + } + + // 在规范化路径之前,验证原始路径配置 + this.validateMenuPaths(menuList) + + // 规范化路径(将相对路径转换为完整路径) + return this.normalizeMenuPaths(menuList) + } + + /** + * 处理前端控制模式的菜单 + */ + private async processFrontendMenu(): Promise { + const userStore = useUserStore() + const roles = userStore.info?.roles + + let menuList = [...asyncRoutes] + + // 根据角色过滤菜单 + if (roles && roles.length > 0) { + menuList = this.filterMenuByRoles(menuList, roles) + } + + return this.filterEmptyMenus(menuList) + } + + /** + * 处理后端控制模式的菜单 + */ + private async processBackendMenu(): Promise { + const list = await fetchGetMenuList() + return this.filterEmptyMenus(list) + } + + /** + * 根据角色过滤菜单 + */ + private filterMenuByRoles(menu: AppRouteRecord[], roles: string[]): AppRouteRecord[] { + return menu.reduce((acc: AppRouteRecord[], item) => { + const itemRoles = item.meta?.roles + const hasPermission = !itemRoles || itemRoles.some((role) => roles?.includes(role)) + + if (hasPermission) { + const filteredItem = { ...item } + if (filteredItem.children?.length) { + filteredItem.children = this.filterMenuByRoles(filteredItem.children, roles) + } + acc.push(filteredItem) + } + + return acc + }, []) + } + + /** + * 递归过滤空菜单项 + */ + private filterEmptyMenus(menuList: AppRouteRecord[]): AppRouteRecord[] { + return menuList + .map((item) => { + // 如果有子菜单,先递归过滤子菜单 + if (item.children && item.children.length > 0) { + const filteredChildren = this.filterEmptyMenus(item.children) + return { + ...item, + children: filteredChildren + } + } + return item + }) + .filter((item) => { + // 如果定义了 children 属性(即使是空数组),说明这是一个目录菜单,应该保留 + if ('children' in item) { + return true + } + + // 如果有外链或 iframe,保留 + if (item.meta?.isIframe === true || item.meta?.link) { + return true + } + + // 如果有有效的 component,保留 + if (item.component && item.component !== '' && item.component !== RoutesAlias.Layout) { + return true + } + + // 其他情况过滤掉 + return false + }) + } + + /** + * 验证菜单列表是否有效 + */ + validateMenuList(menuList: AppRouteRecord[]): boolean { + return Array.isArray(menuList) && menuList.length > 0 + } + + /** + * 规范化菜单路径 + * 将相对路径转换为完整路径,确保菜单跳转正确 + */ + private normalizeMenuPaths(menuList: AppRouteRecord[], parentPath = ''): AppRouteRecord[] { + return menuList.map((item) => { + // 构建完整路径 + const fullPath = this.buildFullPath(item.path || '', parentPath) + + // 递归处理子菜单 + const children = item.children?.length + ? this.normalizeMenuPaths(item.children, fullPath) + : item.children + + const redirect = item.redirect || this.resolveDefaultRedirect(children) + + return { + ...item, + path: fullPath, + redirect, + children + } + }) + } + + /** + * 为目录型菜单推导默认跳转地址 + */ + private resolveDefaultRedirect(children?: AppRouteRecord[]): string | undefined { + if (!children?.length) { + return undefined + } + + for (const child of children) { + if (this.isNavigableRoute(child)) { + return child.path + } + + const nestedRedirect = this.resolveDefaultRedirect(child.children) + if (nestedRedirect) { + return nestedRedirect + } + } + + return undefined + } + + /** + * 判断子路由是否可以作为默认落点 + */ + private isNavigableRoute(route: AppRouteRecord): boolean { + return Boolean( + route.path && + route.path !== '/' && + !route.meta?.link && + route.meta?.isIframe !== true && + route.component && + route.component !== '' + ) + } + + /** + * 验证菜单路径配置 + * 检测非一级菜单是否错误使用了 / 开头的路径 + */ + /** + * 验证菜单路径配置 + * 检测非一级菜单是否错误使用了 / 开头的路径 + */ + private validateMenuPaths(menuList: AppRouteRecord[], level = 1): void { + menuList.forEach((route) => { + if (!route.children?.length) return + + const parentName = String(route.name || route.path || '未知路由') + + route.children.forEach((child) => { + const childPath = child.path || '' + + // 跳过合法的绝对路径:外部链接和 iframe 路由 + if (this.isValidAbsolutePath(childPath)) return + + // 检测非法的绝对路径 + if (childPath.startsWith('/')) { + this.logPathError(child, childPath, parentName, level) + } + }) + + // 递归检查更深层级的子路由 + this.validateMenuPaths(route.children, level + 1) + }) + } + + /** + * 判断是否为合法的绝对路径 + */ + private isValidAbsolutePath(path: string): boolean { + return ( + path.startsWith('http://') || + path.startsWith('https://') || + path.startsWith('/outside/iframe/') + ) + } + + /** + * 输出路径配置错误日志 + */ + private logPathError( + route: AppRouteRecord, + path: string, + parentName: string, + level: number + ): void { + const routeName = String(route.name || path || '未知路由') + const menuTitle = route.meta?.title || routeName + const suggestedPath = path.split('/').pop() || path.slice(1) + + console.error( + `[路由配置错误] 菜单 "${formatMenuTitle(menuTitle)}" (name: ${routeName}, path: ${path}) 配置错误\n` + + ` 位置: ${parentName} > ${routeName}\n` + + ` 问题: ${level + 1}级菜单的 path 不能以 / 开头\n` + + ` 当前配置: path: '${path}'\n` + + ` 应该改为: path: '${suggestedPath}'` + ) + } + + /** + * 构建完整路径 + */ + private buildFullPath(path: string, parentPath: string): string { + if (!path) return '' + + // 外部链接直接返回 + if (path.startsWith('http://') || path.startsWith('https://')) { + return path + } + + // 如果已经是绝对路径,直接返回 + if (path.startsWith('/')) { + return path + } + + // 拼接父路径和当前路径 + if (parentPath) { + // 移除父路径末尾的斜杠,移除子路径开头的斜杠,然后拼接 + const cleanParent = parentPath.replace(/\/$/, '') + const cleanChild = path.replace(/^\//, '') + return `${cleanParent}/${cleanChild}` + } + + // 没有父路径,添加前导斜杠 + return `/${path}` + } +} diff --git a/web/src/router/core/RoutePermissionValidator.ts b/web/src/router/core/RoutePermissionValidator.ts new file mode 100644 index 0000000..1e607e0 --- /dev/null +++ b/web/src/router/core/RoutePermissionValidator.ts @@ -0,0 +1,161 @@ +/** + * 路由权限验证模块 + * + * 提供路由权限验证和路径检查功能 + * + * ## 主要功能 + * + * - 验证路径是否在用户菜单权限中 + * - 构建菜单路径集合(扁平化处理) + * - 支持动态路由参数匹配 + * - 路径前缀匹配 + * + * ## 使用场景 + * + * - 路由守卫中验证用户权限 + * - 动态路由注册后的权限检查 + * - 防止用户访问无权限的页面 + * + * @module router/core/RoutePermissionValidator + * @author Art Design Pro Team + */ + +import type { AppRouteRecord } from '@/types/router' + +/** + * 路由权限验证器 + */ +export class RoutePermissionValidator { + /** + * 验证路径是否在用户菜单权限中 + * @param targetPath 目标路径 + * @param menuList 菜单列表 + * @returns 是否有权限访问 + */ + static hasPermission(targetPath: string, menuList: AppRouteRecord[]): boolean { + // 根路径始终允许访问 + if (targetPath === '/') { + return true + } + + return this.matchRoute(targetPath, menuList) + } + + /** + * 构建菜单路径集合(扁平化处理) + * @param menuList 菜单列表 + * @param pathSet 路径集合 + * @returns 路径集合 + */ + static buildMenuPathSet( + menuList: AppRouteRecord[], + pathSet: Set = new Set() + ): Set { + if (!Array.isArray(menuList) || menuList.length === 0) { + return pathSet + } + + for (const menuItem of menuList) { + if (!menuItem.path) { + continue + } + + // 标准化路径并添加到集合 + const menuPath = menuItem.path.startsWith('/') ? menuItem.path : `/${menuItem.path}` + pathSet.add(menuPath) + + // 递归处理子菜单 + if (menuItem.children?.length) { + this.buildMenuPathSet(menuItem.children, pathSet) + } + } + + return pathSet + } + + /** + * 检查目标路径是否匹配集合中的某个路径前缀 + * 用于支持动态路由参数匹配,如 /user/123 匹配 /user + * @param targetPath 目标路径 + * @param pathSet 路径集合 + * @returns 是否匹配 + */ + static checkPathPrefix(targetPath: string, pathSet: Set): boolean { + // 遍历路径集合,检查是否有前缀匹配 + for (const menuPath of pathSet) { + if (targetPath.startsWith(`${menuPath}/`)) { + return true + } + } + return false + } + + /** + * 递归匹配路由配置,支持隐藏路由和动态参数路由 + */ + static matchRoute(targetPath: string, routes: AppRouteRecord[]): boolean { + if (!Array.isArray(routes) || routes.length === 0) { + return false + } + + for (const route of routes) { + if (!route.path) { + continue + } + + const routePath = route.path.startsWith('/') ? route.path : `/${route.path}` + + if ( + routePath === targetPath || + this.isDynamicRouteMatch(targetPath, routePath) || + targetPath.startsWith(`${routePath}/`) + ) { + return true + } + + if (route.children?.length && this.matchRoute(targetPath, route.children)) { + return true + } + } + + return false + } + + /** + * 检查目标路径是否匹配动态参数路由,如 /demo/123 匹配 /demo/:id + */ + static isDynamicRouteMatch(targetPath: string, routePath: string): boolean { + if (!routePath.includes(':')) { + return false + } + + const pattern = routePath + .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + .replace(/:([^/]+)/g, '[^/]+') + .replace(/\\\*/g, '.*') + + return new RegExp(`^${pattern}$`).test(targetPath) + } + + /** + * 验证并返回有效的路径 + * 如果目标路径无权限,返回首页路径 + * @param targetPath 目标路径 + * @param menuList 菜单列表 + * @param homePath 首页路径 + * @returns 验证后的路径 + */ + static validatePath( + targetPath: string, + menuList: AppRouteRecord[], + homePath: string = '/' + ): { path: string; hasPermission: boolean } { + const hasPermission = this.hasPermission(targetPath, menuList) + + if (hasPermission) { + return { path: targetPath, hasPermission: true } + } + + return { path: homePath, hasPermission: false } + } +} diff --git a/web/src/router/core/RouteRegistry.ts b/web/src/router/core/RouteRegistry.ts new file mode 100644 index 0000000..e1acb9e --- /dev/null +++ b/web/src/router/core/RouteRegistry.ts @@ -0,0 +1,90 @@ +/** + * 路由注册核心类 + * + * 负责动态路由的注册、验证和管理 + * + * @module router/core/RouteRegistry + * @author Art Design Pro Team + */ + +import type { Router, RouteRecordRaw } from 'vue-router' +import type { AppRouteRecord } from '@/types/router' +import { ComponentLoader } from './ComponentLoader' +import { RouteValidator } from './RouteValidator' +import { RouteTransformer } from './RouteTransformer' + +export class RouteRegistry { + private router: Router + private componentLoader: ComponentLoader + private validator: RouteValidator + private transformer: RouteTransformer + private removeRouteFns: (() => void)[] = [] + private registered = false + + constructor(router: Router) { + this.router = router + this.componentLoader = new ComponentLoader() + this.validator = new RouteValidator() + this.transformer = new RouteTransformer(this.componentLoader) + } + + /** + * 注册动态路由 + */ + register(menuList: AppRouteRecord[]): void { + if (this.registered) { + console.warn('[RouteRegistry] 路由已注册,跳过重复注册') + return + } + + // 验证路由配置 + const validationResult = this.validator.validate(menuList) + if (!validationResult.valid) { + throw new Error(`路由配置验证失败: ${validationResult.errors.join(', ')}`) + } + + // 转换并注册路由 + const removeRouteFns: (() => void)[] = [] + + menuList.forEach((route) => { + if (route.name && !this.router.hasRoute(route.name)) { + const routeConfig = this.transformer.transform(route) + const removeRouteFn = this.router.addRoute(routeConfig as RouteRecordRaw) + removeRouteFns.push(removeRouteFn) + } + }) + + this.removeRouteFns = removeRouteFns + this.registered = true + } + + /** + * 移除所有动态路由 + */ + unregister(): void { + this.removeRouteFns.forEach((fn) => fn()) + this.removeRouteFns = [] + this.registered = false + } + + /** + * 检查是否已注册 + */ + isRegistered(): boolean { + return this.registered + } + + /** + * 获取移除函数列表(用于 store 管理) + */ + getRemoveRouteFns(): (() => void)[] { + return this.removeRouteFns + } + + /** + * 标记为已注册(用于错误处理场景,避免重复请求) + */ + markAsRegistered(): void { + this.registered = true + } +} diff --git a/web/src/router/core/RouteTransformer.ts b/web/src/router/core/RouteTransformer.ts new file mode 100644 index 0000000..0f6900c --- /dev/null +++ b/web/src/router/core/RouteTransformer.ts @@ -0,0 +1,132 @@ +/** + * 路由转换器 + * + * 负责将菜单数据转换为 Vue Router 路由配置 + * + * @module router/core/RouteTransformer + * @author Art Design Pro Team + */ + +import type { RouteRecordRaw } from 'vue-router' +import type { AppRouteRecord } from '@/types/router' +import { ComponentLoader } from './ComponentLoader' +import { IframeRouteManager } from './IframeRouteManager' + +interface ConvertedRoute extends Omit { + id?: number + children?: ConvertedRoute[] + component?: RouteRecordRaw['component'] | (() => Promise) +} + +export class RouteTransformer { + private componentLoader: ComponentLoader + private iframeManager: IframeRouteManager + + constructor(componentLoader: ComponentLoader) { + this.componentLoader = componentLoader + this.iframeManager = IframeRouteManager.getInstance() + } + + /** + * 转换路由配置 + */ + transform(route: AppRouteRecord, depth = 0): ConvertedRoute { + const { component, children, ...routeConfig } = route + + // 基础路由配置 + const converted: ConvertedRoute = { + ...routeConfig, + component: undefined + } + + // 处理不同类型的路由 + if (route.meta.isIframe) { + this.handleIframeRoute(converted, route, depth) + } else if (this.isFirstLevelRoute(route, depth)) { + this.handleFirstLevelRoute(converted, route, component as string) + } else { + this.handleNormalRoute(converted, component as string) + } + + // 递归处理子路由 + if (children?.length) { + converted.children = children.map((child) => this.transform(child, depth + 1)) + } + + return converted + } + + /** + * 判断是否为一级路由(需要 Layout 包裹) + */ + private isFirstLevelRoute(route: AppRouteRecord, depth: number): boolean { + return depth === 0 && (!route.children || route.children.length === 0) + } + + /** + * 处理 iframe 类型路由 + */ + private handleIframeRoute( + targetRoute: ConvertedRoute, + sourceRoute: AppRouteRecord, + depth: number + ): void { + if (depth === 0) { + // 顶级 iframe:用 Layout 包裹 + targetRoute.component = this.componentLoader.loadLayout() + targetRoute.path = this.extractFirstSegment(sourceRoute.path || '') + targetRoute.name = '' + + targetRoute.children = [ + { + ...sourceRoute, + component: this.componentLoader.loadIframe() + } as ConvertedRoute + ] + } else { + // 非顶级(嵌套)iframe:直接使用 Iframe.vue + targetRoute.component = this.componentLoader.loadIframe() + } + + // 记录 iframe 路由 + this.iframeManager.add(sourceRoute) + } + + /** + * 处理一级菜单路由 + */ + private handleFirstLevelRoute( + converted: ConvertedRoute, + route: AppRouteRecord, + component: string | undefined + ): void { + converted.component = this.componentLoader.loadLayout() + converted.path = this.extractFirstSegment(route.path || '') + converted.name = '' + route.meta.isFirstLevel = true + + converted.children = [ + { + ...route, + component: component ? this.componentLoader.load(component) : undefined + } as ConvertedRoute + ] + } + + /** + * 处理普通路由 + */ + private handleNormalRoute(converted: ConvertedRoute, component: string | undefined): void { + if (component) { + converted.component = this.componentLoader.load(component) + } + } + + /** + * 提取路径的第一段 + */ + private extractFirstSegment(path: string): string { + const segments = path.split('/').filter(Boolean) + return segments.length > 0 ? `/${segments[0]}` : '/' + } +} diff --git a/web/src/router/core/RouteValidator.ts b/web/src/router/core/RouteValidator.ts new file mode 100644 index 0000000..f8e58fc --- /dev/null +++ b/web/src/router/core/RouteValidator.ts @@ -0,0 +1,187 @@ +/** + * 路由验证器 + * + * 负责验证路由配置的合法性 + * + * @module router/core/RouteValidator + * @author Art Design Pro Team + */ + +import type { AppRouteRecord } from '@/types/router' +import { RoutesAlias } from '../routesAlias' + +export interface ValidationResult { + valid: boolean + errors: string[] + warnings: string[] +} + +export class RouteValidator { + // 用于记录已经提示过的路由,避免重复提示 + private warnedRoutes = new Set() + + /** + * 验证路由配置 + */ + validate(routes: AppRouteRecord[]): ValidationResult { + const errors: string[] = [] + const warnings: string[] = [] + + // 检测重复路由 + this.checkDuplicates(routes, errors, warnings) + + // 检测组件配置 + this.checkComponents(routes, errors, warnings) + + // 检测嵌套菜单的 /index/index 配置 + this.checkNestedIndexComponent(routes) + + return { + valid: errors.length === 0, + errors, + warnings + } + } + + /** + * 检测重复路由 + */ + private checkDuplicates( + routes: AppRouteRecord[], + errors: string[], + warnings: string[], + parentPath = '' + ): void { + const routeNameMap = new Map() + const componentPathMap = new Map() + + const checkRoutes = (routes: AppRouteRecord[], parentPath = '') => { + routes.forEach((route) => { + const currentPath = route.path || '' + const fullPath = this.resolvePath(parentPath, currentPath) + + // 名称重复检测 + if (route.name) { + const routeName = String(route.name) + if (routeNameMap.has(routeName)) { + warnings.push(`路由名称重复: "${routeName}" (${fullPath})`) + } else { + routeNameMap.set(routeName, fullPath) + } + } + + // 组件路径重复检测 + if (route.component && typeof route.component === 'string') { + const componentPath = route.component + if (componentPath !== RoutesAlias.Layout) { + const componentKey = `${parentPath}:${componentPath}` + if (componentPathMap.has(componentKey)) { + warnings.push(`组件路径重复: "${componentPath}" (${fullPath})`) + } else { + componentPathMap.set(componentKey, fullPath) + } + } + } + + // 递归处理子路由 + if (route.children?.length) { + checkRoutes(route.children, fullPath) + } + }) + } + + checkRoutes(routes, parentPath) + } + + /** + * 检测组件配置 + */ + private checkComponents( + routes: AppRouteRecord[], + errors: string[], + warnings: string[], + parentPath = '' + ): void { + routes.forEach((route) => { + const hasExternalLink = !!route.meta?.link?.trim() + const hasChildren = Array.isArray(route.children) && route.children.length > 0 + const routePath = route.path || '[未定义路径]' + const isIframe = route.meta?.isIframe + + // 如果配置了 component,则无需校验 + if (route.component) { + // 递归检查子路由 + if (route.children?.length) { + const fullPath = this.resolvePath(parentPath, route.path || '') + this.checkComponents(route.children, errors, warnings, fullPath) + } + return + } + + // 一级菜单:必须指定 Layout,除非是外链或 iframe + if (parentPath === '' && !hasExternalLink && !isIframe) { + errors.push(`一级菜单(${routePath}) 缺少 component,必须指向 ${RoutesAlias.Layout}`) + return + } + + // 非一级菜单:如果既不是外链、iframe,也没有子路由,则必须配置 component + if (!hasExternalLink && !isIframe && !hasChildren) { + errors.push(`路由(${routePath}) 缺少 component 配置`) + } + + // 递归检查子路由 + if (route.children?.length) { + const fullPath = this.resolvePath(parentPath, route.path || '') + this.checkComponents(route.children, errors, warnings, fullPath) + } + }) + } + + /** + * 检测嵌套菜单的 Layout 组件配置 + * 只有一级菜单才能使用 Layout,二级及以下菜单不能使用 + */ + private checkNestedIndexComponent(routes: AppRouteRecord[], level = 1): void { + routes.forEach((route) => { + // 检查二级及以下菜单是否错误使用了 Layout + if (level > 1 && route.component === RoutesAlias.Layout) { + this.logLayoutError(route, level) + } + + // 递归检查子路由 + if (route.children?.length) { + this.checkNestedIndexComponent(route.children, level + 1) + } + }) + } + + /** + * 输出 Layout 组件配置错误日志 + */ + private logLayoutError(route: AppRouteRecord, level: number): void { + const routeName = String(route.name || route.path || '未知路由') + const routeKey = `${routeName}_${route.path}` + + // 避免重复提示 + if (this.warnedRoutes.has(routeKey)) return + this.warnedRoutes.add(routeKey) + + const menuTitle = route.meta?.title || routeName + const routePath = route.path || '/' + + console.error( + `[路由配置错误] 菜单 "${menuTitle}" (name: ${routeName}, path: ${routePath}) 配置错误\n` + + ` 问题: ${level}级菜单不能使用 ${RoutesAlias.Layout} 作为 component\n` + + ` 说明: 只有一级菜单才能使用 ${RoutesAlias.Layout},二级及以下菜单应该指向具体的组件路径\n` + + ` 当前配置: component: '${RoutesAlias.Layout}'\n` + + ` 应该改为: component: '/your/component/path' 或留空 ''(如果是目录菜单)` + ) + } + + /** + * 路径解析 + */ + private resolvePath(parent: string, child: string): string { + return [parent.replace(/\/$/, ''), child.replace(/^\//, '')].filter(Boolean).join('/') + } +} diff --git a/web/src/router/core/index.ts b/web/src/router/core/index.ts new file mode 100644 index 0000000..fcfecfc --- /dev/null +++ b/web/src/router/core/index.ts @@ -0,0 +1,14 @@ +/** + * 路由核心模块导出 + * + * @module router/core + * @author Art Design Pro Team + */ + +export { RouteRegistry } from './RouteRegistry' +export { ComponentLoader } from './ComponentLoader' +export { RouteValidator } from './RouteValidator' +export { RouteTransformer } from './RouteTransformer' +export { IframeRouteManager } from './IframeRouteManager' +export { MenuProcessor } from './MenuProcessor' +export { RoutePermissionValidator } from './RoutePermissionValidator' diff --git a/web/src/router/guards/afterEach.ts b/web/src/router/guards/afterEach.ts new file mode 100644 index 0000000..d60572d --- /dev/null +++ b/web/src/router/guards/afterEach.ts @@ -0,0 +1,34 @@ +import { nextTick } from 'vue' +import { useSettingStore } from '@/store/modules/setting' +import { Router } from 'vue-router' +import NProgress from 'nprogress' +import { useCommon } from '@/hooks/core/useCommon' +import { loadingService } from '@/utils/ui' +import { getPendingLoading, resetPendingLoading } from './beforeEach' + +/** 路由全局后置守卫 */ +export function setupAfterEachGuard(router: Router) { + const { scrollToTop } = useCommon() + + router.afterEach(() => { + scrollToTop() + + // 关闭进度条 + const settingStore = useSettingStore() + if (settingStore.showNprogress) { + NProgress.done() + // 确保进度条完全移除,避免残影 + setTimeout(() => { + NProgress.remove() + }, 600) + } + + // 关闭 loading 效果 + if (getPendingLoading()) { + nextTick(() => { + loadingService.hideLoading() + resetPendingLoading() + }) + } + }) +} diff --git a/web/src/router/guards/beforeEach.ts b/web/src/router/guards/beforeEach.ts new file mode 100644 index 0000000..bc97e09 --- /dev/null +++ b/web/src/router/guards/beforeEach.ts @@ -0,0 +1,418 @@ +/** + * 路由全局前置守卫模块 + * + * 提供完整的路由导航守卫功能 + * + * ## 主要功能 + * + * - 登录状态验证和重定向 + * - 动态路由注册和权限控制 + * - 菜单数据获取和处理(前端/后端模式) + * - 用户信息获取和缓存 + * - 页面标题设置 + * - 工作标签页管理 + * - 进度条和加载动画控制 + * - 静态路由识别和处理 + * - 错误处理和异常跳转 + * + * ## 使用场景 + * + * - 路由跳转前的权限验证 + * - 动态菜单加载和路由注册 + * - 用户登录状态管理 + * - 页面访问控制 + * - 路由级别的加载状态管理 + * + * ## 工作流程 + * + * 1. 检查登录状态,未登录跳转到登录页 + * 2. 首次访问时获取用户信息和菜单数据 + * 3. 根据权限动态注册路由 + * 4. 设置页面标题和工作标签页 + * 5. 处理根路径重定向到首页 + * 6. 未匹配路由跳转到 404 页面 + * + * @module router/guards/beforeEach + * @author Art Design Pro Team + */ +import type { Router, RouteLocationNormalized, NavigationGuardNext } from 'vue-router' +import { nextTick } from 'vue' +import NProgress from 'nprogress' +import { useSettingStore } from '@/store/modules/setting' +import { useUserStore } from '@/store/modules/user' +import { useMenuStore } from '@/store/modules/menu' +import { setWorktab } from '@/utils/navigation' +import { setPageTitle } from '@/utils/router' +import { RoutesAlias } from '../routesAlias' +import { staticRoutes } from '../routes/staticRoutes' +import { loadingService } from '@/utils/ui' +import { useCommon } from '@/hooks/core/useCommon' +import { useWorktabStore } from '@/store/modules/worktab' +import { fetchGetUserInfo } from '@/api/auth' +import { ApiStatus } from '@/utils/http/status' +import { isHttpError } from '@/utils/http/error' +import { RouteRegistry, MenuProcessor, IframeRouteManager, RoutePermissionValidator } from '../core' + +// 路由注册器实例 +let routeRegistry: RouteRegistry | null = null + +// 菜单处理器实例 +const menuProcessor = new MenuProcessor() + +// 跟踪是否需要关闭 loading +let pendingLoading = false + +// 路由初始化失败标记,防止死循环 +// 一旦设置为 true,只有刷新页面或重新登录才能重置 +let routeInitFailed = false + +// 路由初始化进行中标记,防止并发请求 +let routeInitInProgress = false + +/** + * 获取 pendingLoading 状态 + */ +export function getPendingLoading(): boolean { + return pendingLoading +} + +/** + * 重置 pendingLoading 状态 + */ +export function resetPendingLoading(): void { + pendingLoading = false +} + +/** + * 获取路由初始化失败状态 + */ +export function getRouteInitFailed(): boolean { + return routeInitFailed +} + +/** + * 重置路由初始化状态(用于重新登录场景) + */ +export function resetRouteInitState(): void { + routeInitFailed = false + routeInitInProgress = false +} + +/** + * 设置路由全局前置守卫 + */ +export function setupBeforeEachGuard(router: Router): void { + // 初始化路由注册器 + routeRegistry = new RouteRegistry(router) + + router.beforeEach( + async ( + to: RouteLocationNormalized, + from: RouteLocationNormalized, + next: NavigationGuardNext + ) => { + try { + await handleRouteGuard(to, from, next, router) + } catch (error) { + console.error('[RouteGuard] 路由守卫处理失败:', error) + closeLoading() + next({ name: 'Exception500' }) + } + } + ) +} + +/** + * 关闭 loading 效果 + */ +function closeLoading(): void { + if (pendingLoading) { + nextTick(() => { + loadingService.hideLoading() + pendingLoading = false + }) + } +} + +/** + * 处理路由守卫逻辑 + */ +async function handleRouteGuard( + to: RouteLocationNormalized, + from: RouteLocationNormalized, + next: NavigationGuardNext, + router: Router +): Promise { + const settingStore = useSettingStore() + const userStore = useUserStore() + + // 启动进度条 + if (settingStore.showNprogress) { + NProgress.start() + } + + // 1. 检查登录状态 + if (!handleLoginStatus(to, userStore, next)) { + return + } + + // 2. 检查路由初始化是否已失败(防止死循环) + if (routeInitFailed) { + // 已经失败过,直接放行到错误页面,不再重试 + if (to.matched.length > 0) { + next() + } else { + // 未匹配到路由,跳转到 500 页面 + next({ name: 'Exception500', replace: true }) + } + return + } + + // 3. 处理动态路由注册 + if (!routeRegistry?.isRegistered() && userStore.isLogin) { + // 防止并发请求(快速连续导航场景) + if (routeInitInProgress) { + // 正在初始化中,等待完成后重新导航 + next(false) + return + } + await handleDynamicRoutes(to, next, router) + return + } + + // 4. 处理根路径重定向 + if (handleRootPathRedirect(to, next)) { + return + } + + // 5. 处理已匹配的路由 + if (to.matched.length > 0) { + setWorktab(to) + setPageTitle(to) + next() + return + } + + // 6. 未匹配到路由,跳转到 404 + next({ name: 'Exception404' }) +} + +/** + * 处理登录状态 + * @returns true 表示可以继续,false 表示已处理跳转 + */ +function handleLoginStatus( + to: RouteLocationNormalized, + userStore: ReturnType, + next: NavigationGuardNext +): boolean { + // 已登录或访问登录页或静态路由,直接放行 + if (userStore.isLogin || to.path === RoutesAlias.Login || isStaticRoute(to.path)) { + return true + } + + // 未登录且访问需要权限的页面,跳转到登录页并携带 redirect 参数 + userStore.logOut() + next({ + name: 'Login', + query: { redirect: to.fullPath } + }) + return false +} + +/** + * 检查路由是否为静态路由 + */ +function isStaticRoute(path: string): boolean { + const checkRoute = (routes: any[], targetPath: string): boolean => { + return routes.some((route) => { + // 404 catch-all 路由不应视为可匿名访问的静态页, + // 否则未登录时手动输入任意地址会直接落到 404,无法跳转登录页。 + if (route.name === 'Exception404') { + return false + } + + // 处理动态路由参数匹配 + const routePath = route.path + const pattern = routePath.replace(/:[^/]+/g, '[^/]+').replace(/\*/g, '.*') + const regex = new RegExp(`^${pattern}$`) + + if (regex.test(targetPath)) { + return true + } + if (route.children && route.children.length > 0) { + return checkRoute(route.children, targetPath) + } + return false + }) + } + + return checkRoute(staticRoutes, path) +} + +/** + * 处理动态路由注册 + */ +async function handleDynamicRoutes( + to: RouteLocationNormalized, + next: NavigationGuardNext, + router: Router +): Promise { + // 标记初始化进行中 + routeInitInProgress = true + + // 显示 loading + pendingLoading = true + loadingService.showLoading() + + try { + // 1. 获取用户信息 + await fetchUserInfo() + + // 2. 获取菜单数据 + const menuList = await menuProcessor.getMenuList() + + // 3. 验证菜单数据 + if (!menuProcessor.validateMenuList(menuList)) { + throw new Error('获取菜单列表失败,请重新登录') + } + + // 4. 注册动态路由 + routeRegistry?.register(menuList) + + // 5. 保存菜单数据到 store + const menuStore = useMenuStore() + menuStore.setMenuList(menuList) + menuStore.addRemoveRouteFns(routeRegistry?.getRemoveRouteFns() || []) + + // 6. 保存 iframe 路由 + IframeRouteManager.getInstance().save() + + // 7. 验证工作标签页 + useWorktabStore().validateWorktabs(router) + + // 8. 静态路由不依赖菜单权限,初始化后直接恢复目标地址。 + if (isStaticRoute(to.path)) { + routeInitInProgress = false + next({ + path: to.path, + query: to.query, + hash: to.hash, + replace: true + }) + return + } + + // 8. 验证目标路径权限 + const { homePath } = useCommon() + const { path: validatedPath, hasPermission } = RoutePermissionValidator.validatePath( + to.path, + menuList, + homePath.value || '/' + ) + + // 初始化成功,重置进行中标记 + routeInitInProgress = false + + // 9. 重新导航到目标路由 + if (!hasPermission) { + // 无权限访问,跳转到首页 + closeLoading() + + // 输出警告信息 + console.warn(`[RouteGuard] 用户无权限访问路径: ${to.path},已跳转到首页`) + + // 直接跳转到首页 + next({ + path: validatedPath, + replace: true + }) + } else { + // 有权限,正常导航 + next({ + path: to.path, + query: to.query, + hash: to.hash, + replace: true + }) + } + } catch (error) { + console.error('[RouteGuard] 动态路由注册失败:', error) + + // 关闭 loading + closeLoading() + + // 401 错误:axios 拦截器已处理退出登录,取消当前导航 + if (isUnauthorizedError(error)) { + // 重置状态,允许重新登录后再次初始化 + routeInitInProgress = false + next(false) + return + } + + // 标记初始化失败,防止死循环 + routeInitFailed = true + routeInitInProgress = false + + // 输出详细错误信息,便于排查 + if (isHttpError(error)) { + console.error(`[RouteGuard] 错误码: ${error.code}, 消息: ${error.message}`) + } + + // 跳转到 500 页面,使用 replace 避免产生历史记录 + next({ name: 'Exception500', replace: true }) + } +} + +/** + * 获取用户信息 + */ +async function fetchUserInfo(): Promise { + const userStore = useUserStore() + const data = await fetchGetUserInfo() + userStore.setUserInfo(data) + // 检查并清理工作台标签页(如果是不同用户登录) + userStore.checkAndClearWorktabs() +} + +/** + * 重置路由相关状态 + */ +export function resetRouterState(delay: number): void { + setTimeout(() => { + routeRegistry?.unregister() + IframeRouteManager.getInstance().clear() + + const menuStore = useMenuStore() + menuStore.removeAllDynamicRoutes() + menuStore.setMenuList([]) + + // 重置路由初始化状态,允许重新登录后再次初始化 + resetRouteInitState() + }, delay) +} + +/** + * 处理根路径重定向到首页 + * @returns true 表示已处理跳转,false 表示无需跳转 + */ +function handleRootPathRedirect(to: RouteLocationNormalized, next: NavigationGuardNext): boolean { + if (to.path !== '/') { + return false + } + + const { homePath } = useCommon() + if (homePath.value && homePath.value !== '/') { + next({ path: homePath.value, replace: true }) + return true + } + + return false +} + +/** + * 判断是否为未授权错误(401) + */ +function isUnauthorizedError(error: unknown): boolean { + return isHttpError(error) && error.code === ApiStatus.unauthorized +} diff --git a/web/src/router/index.ts b/web/src/router/index.ts new file mode 100755 index 0000000..286ae58 --- /dev/null +++ b/web/src/router/index.ts @@ -0,0 +1,23 @@ +import type { App } from 'vue' +import { createRouter, createWebHashHistory } from 'vue-router' +import { staticRoutes } from './routes/staticRoutes' +import { configureNProgress } from '@/utils/router' +import { setupBeforeEachGuard } from './guards/beforeEach' +import { setupAfterEachGuard } from './guards/afterEach' + +// 创建路由实例 +export const router = createRouter({ + history: createWebHashHistory(), + routes: staticRoutes // 静态路由 +}) + +// 初始化路由 +export function initRouter(app: App): void { + configureNProgress() // 顶部进度条 + setupBeforeEachGuard(router) // 路由前置守卫 + setupAfterEachGuard(router) // 路由后置守卫 + app.use(router) +} + +// 主页路径,默认使用菜单第一个有效路径,配置后使用此路径 +export const HOME_PAGE_PATH = '' diff --git a/web/src/router/modules/dashboard.ts b/web/src/router/modules/dashboard.ts new file mode 100644 index 0000000..5f9c3e9 --- /dev/null +++ b/web/src/router/modules/dashboard.ts @@ -0,0 +1,24 @@ +import { AppRouteRecord } from '@/types/router' + +export const dashboardRoutes: AppRouteRecord = { + name: 'Dashboard', + path: '/dashboard', + component: '/index/index', + meta: { + title: 'menus.dashboard.title', + icon: 'ri:pie-chart-line', + roles: ['R_SUPER', 'R_ADMIN'] + }, + children: [ + { + path: 'console', + name: 'Console', + component: '/dashboard/console', + meta: { + title: 'menus.dashboard.console', + keepAlive: false, + fixedTab: true + } + } + ] +} diff --git a/web/src/router/modules/exception.ts b/web/src/router/modules/exception.ts new file mode 100644 index 0000000..07c5604 --- /dev/null +++ b/web/src/router/modules/exception.ts @@ -0,0 +1,46 @@ +import { AppRouteRecord } from '@/types/router' + +export const exceptionRoutes: AppRouteRecord = { + path: '/exception', + name: 'Exception', + component: '/index/index', + meta: { + title: 'menus.exception.title', + icon: 'ri:error-warning-line' + }, + children: [ + { + path: '403', + name: 'Exception403', + component: '/exception/403', + meta: { + title: 'menus.exception.forbidden', + keepAlive: true, + isHideTab: true, + isFullPage: true + } + }, + { + path: '404', + name: 'Exception404', + component: '/exception/404', + meta: { + title: 'menus.exception.notFound', + keepAlive: true, + isHideTab: true, + isFullPage: true + } + }, + { + path: '500', + name: 'Exception500', + component: '/exception/500', + meta: { + title: 'menus.exception.serverError', + keepAlive: true, + isHideTab: true, + isFullPage: true + } + } + ] +} diff --git a/web/src/router/modules/index.ts b/web/src/router/modules/index.ts new file mode 100644 index 0000000..deff162 --- /dev/null +++ b/web/src/router/modules/index.ts @@ -0,0 +1,15 @@ +import { AppRouteRecord } from '@/types/router' +import { dashboardRoutes } from './dashboard' +import { systemRoutes } from './system' +import { resultRoutes } from './result' +import { exceptionRoutes } from './exception' + +/** + * 导出所有模块化路由 + */ +export const routeModules: AppRouteRecord[] = [ + dashboardRoutes, + systemRoutes, + resultRoutes, + exceptionRoutes +] diff --git a/web/src/router/modules/result.ts b/web/src/router/modules/result.ts new file mode 100644 index 0000000..575a2f7 --- /dev/null +++ b/web/src/router/modules/result.ts @@ -0,0 +1,33 @@ +import { AppRouteRecord } from '@/types/router' + +export const resultRoutes: AppRouteRecord = { + path: '/result', + name: 'Result', + component: '/index/index', + meta: { + title: 'menus.result.title', + icon: 'ri:checkbox-circle-line' + }, + children: [ + { + path: 'success', + name: 'ResultSuccess', + component: '/result/success', + meta: { + title: 'menus.result.success', + icon: 'ri:checkbox-circle-line', + keepAlive: true + } + }, + { + path: 'fail', + name: 'ResultFail', + component: '/result/fail', + meta: { + title: 'menus.result.fail', + icon: 'ri:close-circle-line', + keepAlive: true + } + } + ] +} diff --git a/web/src/router/modules/system.ts b/web/src/router/modules/system.ts new file mode 100644 index 0000000..16df585 --- /dev/null +++ b/web/src/router/modules/system.ts @@ -0,0 +1,60 @@ +import { AppRouteRecord } from '@/types/router' + +export const systemRoutes: AppRouteRecord = { + path: '/system', + name: 'System', + component: '/index/index', + meta: { + title: 'menus.system.title', + icon: 'ri:user-3-line', + roles: ['R_SUPER', 'R_ADMIN'] + }, + children: [ + { + path: 'user', + name: 'User', + component: '/system/user', + meta: { + title: 'menus.system.user', + keepAlive: true, + roles: ['R_SUPER', 'R_ADMIN'] + } + }, + { + path: 'role', + name: 'Role', + component: '/system/role', + meta: { + title: 'menus.system.role', + keepAlive: true, + roles: ['R_SUPER'] + } + }, + { + path: 'user-center', + name: 'UserCenter', + component: '/system/user-center', + meta: { + title: 'menus.system.userCenter', + isHide: true, + keepAlive: true, + isHideTab: true + } + }, + { + path: 'menu', + name: 'Menus', + component: '/system/menu', + meta: { + title: 'menus.system.menu', + keepAlive: true, + roles: ['R_SUPER'], + authList: [ + { title: '新增', authMark: 'add' }, + { title: '编辑', authMark: 'edit' }, + { title: '删除', authMark: 'delete' } + ] + } + } + ] +} diff --git a/web/src/router/routes/asyncRoutes.ts b/web/src/router/routes/asyncRoutes.ts new file mode 100644 index 0000000..ccf1201 --- /dev/null +++ b/web/src/router/routes/asyncRoutes.ts @@ -0,0 +1,9 @@ +// 权限文档:https://www.artd.pro/docs/zh/guide/in-depth/permission.html +import { AppRouteRecord } from '@/types/router' +import { routeModules } from '../modules' + +/** + * 动态路由(需要权限才能访问的路由) + * 用于渲染菜单以及根据菜单权限动态加载路由,如果没有权限无法访问 + */ +export const asyncRoutes: AppRouteRecord[] = routeModules diff --git a/web/src/router/routes/staticRoutes.ts b/web/src/router/routes/staticRoutes.ts new file mode 100644 index 0000000..334d0c2 --- /dev/null +++ b/web/src/router/routes/staticRoutes.ts @@ -0,0 +1,72 @@ +import { AppRouteRecordRaw } from '@/utils/router' + +/** + * 静态路由配置(不需要权限就能访问的路由) + * + * 属性说明: + * isHideTab: true 表示不在标签页中显示 + * + * 注意事项: + * 1、path、name 不要和动态路由冲突,否则会导致路由冲突无法访问 + * 2、静态路由不管是否登录都可以访问 + */ +export const staticRoutes: AppRouteRecordRaw[] = [ + // 不需要登录就能访问的路由示例 + // { + // path: '/welcome', + // name: 'WelcomeStatic', + // component: () => import('@views/dashboard/console/index.vue'), + // meta: { title: 'menus.dashboard.title' } + // }, + { + path: '/auth/login', + name: 'Login', + component: () => import('@views/auth/login/index.vue'), + meta: { title: 'menus.login.title', isHideTab: true } + }, + { + path: '/auth/register', + name: 'Register', + component: () => import('@views/auth/register/index.vue'), + meta: { title: 'menus.register.title', isHideTab: true } + }, + { + path: '/auth/forget-password', + name: 'ForgetPassword', + component: () => import('@views/auth/forget-password/index.vue'), + meta: { title: 'menus.forgetPassword.title', isHideTab: true } + }, + { + path: '/403', + name: 'Exception403', + component: () => import('@views/exception/403/index.vue'), + meta: { title: '403', isHideTab: true } + }, + { + path: '/:pathMatch(.*)*', + name: 'Exception404', + component: () => import('@views/exception/404/index.vue'), + meta: { title: '404', isHideTab: true } + }, + { + path: '/500', + name: 'Exception500', + component: () => import('@views/exception/500/index.vue'), + meta: { title: '500', isHideTab: true } + }, + { + path: '/outside', + component: () => import('@views/index/index.vue'), + name: 'Outside', + meta: { title: 'menus.outside.title' }, + children: [ + // iframe 内嵌页面 + { + path: '/outside/iframe/:path', + name: 'Iframe', + component: () => import('@/views/outside/Iframe.vue'), + meta: { title: 'iframe' } + } + ] + } +] diff --git a/web/src/router/routesAlias.ts b/web/src/router/routesAlias.ts new file mode 100644 index 0000000..2af1c68 --- /dev/null +++ b/web/src/router/routesAlias.ts @@ -0,0 +1,8 @@ +/** + * 公共路由别名 + # 存放系统级公共路由路径,如布局容器、登录页等 + */ +export enum RoutesAlias { + Layout = '/index/index', // 布局容器 + Login = '/auth/login' // 登录页 +} diff --git a/web/src/store/index.ts b/web/src/store/index.ts new file mode 100755 index 0000000..b485999 --- /dev/null +++ b/web/src/store/index.ts @@ -0,0 +1,52 @@ +/** + * Pinia Store 配置模块 + * + * 提供全局状态管理的初始化和配置 + * + * ## 主要功能 + * + * - Pinia Store 实例创建 + * - 持久化插件配置(pinia-plugin-persistedstate) + * - 版本化存储键管理 + * - 自动数据迁移(跨版本) + * - LocalStorage 序列化配置 + * - Store 初始化函数 + * + * ## 持久化策略 + * + * - 使用 StorageKeyManager 生成版本化的存储键 + * - 格式:sys-v{version}-{storeId} + * - 自动迁移旧版本数据到当前版本 + * - 使用 localStorage 作为存储介质 + * + * @module store/index + * @author Art Design Pro Team + */ +import type { App } from 'vue' +import { createPinia } from 'pinia' +import { createPersistedState } from 'pinia-plugin-persistedstate' +import { StorageKeyManager } from '@/utils/storage/storage-key-manager' + +export const store = createPinia() + +// 创建存储键管理器实例 +const storageKeyManager = new StorageKeyManager() + +// 配置持久化插件 +store.use( + createPersistedState({ + key: (storeId: string) => storageKeyManager.getStorageKey(storeId), + storage: localStorage, + serializer: { + serialize: JSON.stringify, + deserialize: JSON.parse + } + }) +) + +/** + * 初始化 Store + */ +export function initStore(app: App): void { + app.use(store) +} diff --git a/web/src/store/modules/menu.ts b/web/src/store/modules/menu.ts new file mode 100755 index 0000000..85d13da --- /dev/null +++ b/web/src/store/modules/menu.ts @@ -0,0 +1,109 @@ +/** + * 菜单状态管理模块 + * + * 提供菜单数据和动态路由的状态管理 + * + * ## 主要功能 + * + * - 菜单列表存储和管理 + * - 首页路径配置 + * - 动态路由注册和移除 + * - 路由移除函数管理 + * - 菜单宽度配置 + * + * ## 使用场景 + * + * - 动态菜单加载和渲染 + * - 路由权限控制 + * - 首页路径动态设置 + * - 登出时清理动态路由 + * + * ## 工作流程 + * + * 1. 获取菜单数据(前端/后端模式) + * 2. 设置菜单列表和首页路径 + * 3. 注册动态路由并保存移除函数 + * 4. 登出时调用移除函数清理路由 + * + * @module store/modules/menu + * @author Art Design Pro Team + */ +import { defineStore } from 'pinia' +import { ref } from 'vue' +import { AppRouteRecord } from '@/types/router' +import { getFirstMenuPath } from '@/utils' +import { HOME_PAGE_PATH } from '@/router' + +/** + * 菜单状态管理 + * 管理应用的菜单列表、首页路径、菜单宽度和动态路由移除函数 + */ +export const useMenuStore = defineStore('menuStore', () => { + /** 首页路径 */ + const homePath = ref(HOME_PAGE_PATH) + /** 菜单列表 */ + const menuList = ref([]) + /** 菜单宽度 */ + const menuWidth = ref('') + /** 存储路由移除函数的数组 */ + const removeRouteFns = ref<(() => void)[]>([]) + + /** + * 设置菜单列表 + * @param list 菜单路由记录数组 + */ + const setMenuList = (list: AppRouteRecord[]) => { + menuList.value = list + setHomePath(HOME_PAGE_PATH || getFirstMenuPath(list)) + } + + /** + * 获取首页路径 + * @returns 首页路径字符串 + */ + const getHomePath = () => homePath.value + + /** + * 设置主页路径 + * @param path 主页路径 + */ + const setHomePath = (path: string) => { + homePath.value = path + } + + /** + * 添加路由移除函数 + * @param fns 要添加的路由移除函数数组 + */ + const addRemoveRouteFns = (fns: (() => void)[]) => { + removeRouteFns.value.push(...fns) + } + + /** + * 移除所有动态路由 + * 执行所有存储的路由移除函数并清空数组 + */ + const removeAllDynamicRoutes = () => { + removeRouteFns.value.forEach((fn) => fn()) + removeRouteFns.value = [] + } + + /** + * 清空路由移除函数数组 + */ + const clearRemoveRouteFns = () => { + removeRouteFns.value = [] + } + + return { + menuList, + menuWidth, + removeRouteFns, + setMenuList, + getHomePath, + setHomePath, + addRemoveRouteFns, + removeAllDynamicRoutes, + clearRemoveRouteFns + } +}) diff --git a/web/src/store/modules/setting.ts b/web/src/store/modules/setting.ts new file mode 100755 index 0000000..2878259 --- /dev/null +++ b/web/src/store/modules/setting.ts @@ -0,0 +1,450 @@ +/** + * 系统设置状态管理模块 + * + * 提供完整的系统设置状态管理 + * + * ## 主要功能 + * + * - 菜单布局配置(左侧、顶部、混合、双栏) + * - 主题管理(亮色、暗色、自动) + * - 菜单主题样式配置 + * - 界面显示开关(面包屑、标签页、语言切换等) + * - 功能开关(手风琴模式、色弱模式、水印等) + * - 样式配置(边框、圆角、容器宽度、页面过渡) + * - 节日功能配置 + * - Element Plus 主题色动态设置 + * + * ## 使用场景 + * + * - 设置面板配置管理 + * - 主题切换和样式定制 + * - 界面功能开关控制 + * - 用户偏好设置持久化 + * + * ## 持久化 + * + * - 使用 localStorage 存储 + * - 存储键:sys-v{version}-setting + * - 支持跨版本数据迁移 + * + * @module store/modules/setting + * @author Art Design Pro Team + */ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import { MenuThemeType } from '@/types/store' +import AppConfig from '@/config' +import { SystemThemeEnum, MenuThemeEnum, MenuTypeEnum, ContainerWidthEnum } from '@/enums/appEnum' +import { setElementThemeColor } from '@/utils/ui' +import { useCeremony } from '@/hooks/core/useCeremony' +import { StorageConfig } from '@/utils' +import { SETTING_DEFAULT_CONFIG } from '@/config/setting' + +/** + * 系统设置状态管理 + * 管理应用的菜单、主题、界面显示等各项设置 + */ +export const useSettingStore = defineStore( + 'settingStore', + () => { + // 菜单相关设置 + /** 菜单类型 */ + const menuType = ref(SETTING_DEFAULT_CONFIG.menuType) + /** 菜单展开宽度 */ + const menuOpenWidth = ref(SETTING_DEFAULT_CONFIG.menuOpenWidth) + /** 菜单是否展开 */ + const menuOpen = ref(SETTING_DEFAULT_CONFIG.menuOpen) + /** 双菜单是否显示文本 */ + const dualMenuShowText = ref(SETTING_DEFAULT_CONFIG.dualMenuShowText) + + // 主题相关设置 + /** 系统主题类型 */ + const systemThemeType = ref(SETTING_DEFAULT_CONFIG.systemThemeType) + /** 系统主题模式 */ + const systemThemeMode = ref(SETTING_DEFAULT_CONFIG.systemThemeMode) + /** 菜单主题类型 */ + const menuThemeType = ref(SETTING_DEFAULT_CONFIG.menuThemeType) + /** 系统主题颜色 */ + const systemThemeColor = ref(SETTING_DEFAULT_CONFIG.systemThemeColor) + + // 界面显示设置 + /** 是否显示菜单按钮 */ + const showMenuButton = ref(SETTING_DEFAULT_CONFIG.showMenuButton) + /** 是否显示快速入口 */ + const showFastEnter = ref(SETTING_DEFAULT_CONFIG.showFastEnter) + /** 是否显示刷新按钮 */ + const showRefreshButton = ref(SETTING_DEFAULT_CONFIG.showRefreshButton) + /** 是否显示面包屑 */ + const showCrumbs = ref(SETTING_DEFAULT_CONFIG.showCrumbs) + /** 是否显示工作台标签 */ + const showWorkTab = ref(SETTING_DEFAULT_CONFIG.showWorkTab) + /** 是否显示语言切换 */ + const showLanguage = ref(SETTING_DEFAULT_CONFIG.showLanguage) + /** 是否显示进度条 */ + const showNprogress = ref(SETTING_DEFAULT_CONFIG.showNprogress) + /** 是否显示设置引导 */ + const showSettingGuide = ref(SETTING_DEFAULT_CONFIG.showSettingGuide) + /** 是否显示节日文本 */ + const showFestivalText = ref(SETTING_DEFAULT_CONFIG.showFestivalText) + /** 是否显示水印 */ + const watermarkVisible = ref(SETTING_DEFAULT_CONFIG.watermarkVisible) + + // 功能设置 + /** 是否自动关闭 */ + const autoClose = ref(SETTING_DEFAULT_CONFIG.autoClose) + /** 是否唯一展开 */ + const uniqueOpened = ref(SETTING_DEFAULT_CONFIG.uniqueOpened) + /** 是否色弱模式 */ + const colorWeak = ref(SETTING_DEFAULT_CONFIG.colorWeak) + /** 是否刷新 */ + const refresh = ref(SETTING_DEFAULT_CONFIG.refresh) + /** 是否加载节日烟花 */ + const holidayFireworksLoaded = ref(SETTING_DEFAULT_CONFIG.holidayFireworksLoaded) + + // 样式设置 + /** 边框模式 */ + const boxBorderMode = ref(SETTING_DEFAULT_CONFIG.boxBorderMode) + /** 页面过渡效果 */ + const pageTransition = ref(SETTING_DEFAULT_CONFIG.pageTransition) + /** 标签页样式 */ + const tabStyle = ref(SETTING_DEFAULT_CONFIG.tabStyle) + /** 自定义圆角 */ + const customRadius = ref(SETTING_DEFAULT_CONFIG.customRadius) + /** 容器宽度 */ + const containerWidth = ref(SETTING_DEFAULT_CONFIG.containerWidth) + + // 节日相关 + /** 节日日期 */ + const festivalDate = ref('') + + /** + * 获取菜单主题 + * 根据当前主题类型和暗色模式返回对应的主题配置 + */ + const getMenuTheme = computed((): MenuThemeType => { + const list = AppConfig.themeList.filter((item) => item.theme === menuThemeType.value) + if (isDark.value) { + return AppConfig.darkMenuStyles[0] + } else { + return list[0] + } + }) + + /** + * 判断是否为暗色模式 + */ + const isDark = computed((): boolean => { + return systemThemeType.value === SystemThemeEnum.DARK + }) + + /** + * 获取菜单展开宽度 + */ + const getMenuOpenWidth = computed((): string => { + return menuOpenWidth.value + 'px' || SETTING_DEFAULT_CONFIG.menuOpenWidth + 'px' + }) + + /** + * 获取自定义圆角 + */ + const getCustomRadius = computed((): string => { + return customRadius.value + 'rem' || SETTING_DEFAULT_CONFIG.customRadius + 'rem' + }) + + /** + * 是否显示烟花 + * 根据当前日期和节日日期判断是否显示烟花效果 + */ + const isShowFireworks = computed((): boolean => { + return festivalDate.value === useCeremony().currentFestivalData.value?.date ? false : true + }) + + /** + * 切换菜单布局 + * @param type 菜单类型 + */ + const switchMenuLayouts = (type: MenuTypeEnum) => { + menuType.value = type + } + + /** + * 设置菜单展开宽度 + * @param width 宽度值 + */ + const setMenuOpenWidth = (width: number) => { + menuOpenWidth.value = width + } + + /** + * 设置全局主题 + * @param theme 主题类型 + * @param themeMode 主题模式 + */ + const setGlopTheme = (theme: SystemThemeEnum, themeMode: SystemThemeEnum) => { + systemThemeType.value = theme + systemThemeMode.value = themeMode + localStorage.setItem(StorageConfig.THEME_KEY, theme) + } + + /** + * 切换菜单样式 + * @param theme 菜单主题 + */ + const switchMenuStyles = (theme: MenuThemeEnum) => { + menuThemeType.value = theme + } + + /** + * 设置Element Plus主题颜色 + * @param theme 主题颜色 + */ + const setElementTheme = (theme: string) => { + systemThemeColor.value = theme + setElementThemeColor(theme) + } + + /** + * 切换边框模式 + */ + const setBorderMode = () => { + boxBorderMode.value = !boxBorderMode.value + } + + /** + * 设置容器宽度 + * @param width 容器宽度枚举值 + */ + const setContainerWidth = (width: ContainerWidthEnum) => { + containerWidth.value = width + } + + /** + * 切换唯一展开模式 + */ + const setUniqueOpened = () => { + uniqueOpened.value = !uniqueOpened.value + } + + /** + * 切换菜单按钮显示 + */ + const setButton = () => { + showMenuButton.value = !showMenuButton.value + } + + /** + * 切换快速入口显示 + */ + const setFastEnter = () => { + showFastEnter.value = !showFastEnter.value + } + + /** + * 切换自动关闭 + */ + const setAutoClose = () => { + autoClose.value = !autoClose.value + } + + /** + * 切换刷新按钮显示 + */ + const setShowRefreshButton = () => { + showRefreshButton.value = !showRefreshButton.value + } + + /** + * 切换面包屑显示 + */ + const setCrumbs = () => { + showCrumbs.value = !showCrumbs.value + } + + /** + * 设置工作台标签显示 + * @param show 是否显示 + */ + const setWorkTab = (show: boolean) => { + showWorkTab.value = show + } + + /** + * 切换语言切换显示 + */ + const setLanguage = () => { + showLanguage.value = !showLanguage.value + } + + /** + * 切换进度条显示 + */ + const setNprogress = () => { + showNprogress.value = !showNprogress.value + } + + /** + * 切换色弱模式 + */ + const setColorWeak = () => { + colorWeak.value = !colorWeak.value + } + + /** + * 隐藏设置引导 + */ + const hideSettingGuide = () => { + showSettingGuide.value = false + } + + /** + * 显示设置引导 + */ + const openSettingGuide = () => { + showSettingGuide.value = true + } + + /** + * 设置页面过渡效果 + * @param transition 过渡效果名称 + */ + const setPageTransition = (transition: string) => { + pageTransition.value = transition + } + + /** + * 设置标签页样式 + * @param style 样式名称 + */ + const setTabStyle = (style: string) => { + tabStyle.value = style + } + + /** + * 设置菜单展开状态 + * @param open 是否展开 + */ + const setMenuOpen = (open: boolean) => { + menuOpen.value = open + } + + /** + * 刷新页面 + */ + const reload = () => { + refresh.value = !refresh.value + } + + /** + * 设置水印显示 + * @param visible 是否显示 + */ + const setWatermarkVisible = (visible: boolean) => { + watermarkVisible.value = visible + } + + /** + * 设置自定义圆角 + * @param radius 圆角值 + */ + const setCustomRadius = (radius: string) => { + customRadius.value = radius + document.documentElement.style.setProperty('--custom-radius', `${radius}rem`) + } + + /** + * 设置节日烟花加载状态 + * @param isLoad 是否已加载 + */ + const setholidayFireworksLoaded = (isLoad: boolean) => { + holidayFireworksLoaded.value = isLoad + } + + /** + * 设置节日文本显示 + * @param show 是否显示 + */ + const setShowFestivalText = (show: boolean) => { + showFestivalText.value = show + } + + const setFestivalDate = (date: string) => { + festivalDate.value = date + } + + const setDualMenuShowText = (show: boolean) => { + dualMenuShowText.value = show + } + + return { + menuType, + menuOpenWidth, + systemThemeType, + systemThemeMode, + menuThemeType, + systemThemeColor, + boxBorderMode, + uniqueOpened, + showMenuButton, + showFastEnter, + showRefreshButton, + showCrumbs, + autoClose, + showWorkTab, + showLanguage, + showNprogress, + colorWeak, + showSettingGuide, + pageTransition, + tabStyle, + menuOpen, + refresh, + watermarkVisible, + customRadius, + holidayFireworksLoaded, + showFestivalText, + festivalDate, + dualMenuShowText, + containerWidth, + getMenuTheme, + isDark, + getMenuOpenWidth, + getCustomRadius, + isShowFireworks, + switchMenuLayouts, + setMenuOpenWidth, + setGlopTheme, + switchMenuStyles, + setElementTheme, + setBorderMode, + setContainerWidth, + setUniqueOpened, + setButton, + setFastEnter, + setAutoClose, + setShowRefreshButton, + setCrumbs, + setWorkTab, + setLanguage, + setNprogress, + setColorWeak, + hideSettingGuide, + openSettingGuide, + setPageTransition, + setTabStyle, + setMenuOpen, + reload, + setWatermarkVisible, + setCustomRadius, + setholidayFireworksLoaded, + setShowFestivalText, + setFestivalDate, + setDualMenuShowText + } + }, + { + persist: { + key: 'setting', + storage: localStorage + } + } +) diff --git a/web/src/store/modules/table.ts b/web/src/store/modules/table.ts new file mode 100644 index 0000000..094c310 --- /dev/null +++ b/web/src/store/modules/table.ts @@ -0,0 +1,97 @@ +/** + * 表格状态管理模块 + * + * 提供表格显示配置的状态管理 + * + * ## 主要功能 + * + * - 表格尺寸配置(紧凑、默认、宽松) + * - 斑马纹显示开关 + * - 边框显示开关 + * - 表头背景显示开关 + * - 全屏模式开关 + * + * ## 使用场景 + * - 表格组件样式配置 + * - 用户表格偏好设置 + * - 表格工具栏功能控制 + * + * ## 持久化 + * + * - 使用 localStorage 存储 + * - 存储键:sys-v{version}-table + * - 用户配置跨页面保持 + * + * @module store/modules/table + * @author Art Design Pro Team + */ +import { defineStore } from 'pinia' +import { ref } from 'vue' +import { TableSizeEnum } from '@/enums/formEnum' + +// 表格 +export const useTableStore = defineStore( + 'tableStore', + () => { + // 表格大小 + const tableSize = ref(TableSizeEnum.DEFAULT) + // 斑马纹 + const isZebra = ref(false) + // 边框 + const isBorder = ref(false) + // 表头背景 + const isHeaderBackground = ref(false) + + // 是否全屏 + const isFullScreen = ref(false) + + /** + * 设置表格大小 + * @param size 表格大小枚举值 + */ + const setTableSize = (size: TableSizeEnum) => (tableSize.value = size) + + /** + * 设置斑马纹显示状态 + * @param value 是否显示斑马纹 + */ + const setIsZebra = (value: boolean) => (isZebra.value = value) + + /** + * 设置表格边框显示状态 + * @param value 是否显示边框 + */ + const setIsBorder = (value: boolean) => (isBorder.value = value) + + /** + * 设置表头背景显示状态 + * @param value 是否显示表头背景 + */ + const setIsHeaderBackground = (value: boolean) => (isHeaderBackground.value = value) + + /** + * 设置是否全屏 + * @param value 是否全屏 + */ + const setIsFullScreen = (value: boolean) => (isFullScreen.value = value) + + return { + tableSize, + isZebra, + isBorder, + isHeaderBackground, + setTableSize, + setIsZebra, + setIsBorder, + setIsHeaderBackground, + isFullScreen, + setIsFullScreen + } + }, + { + persist: { + key: 'table', + storage: localStorage + } + } +) diff --git a/web/src/store/modules/user.ts b/web/src/store/modules/user.ts new file mode 100755 index 0000000..08f7684 --- /dev/null +++ b/web/src/store/modules/user.ts @@ -0,0 +1,235 @@ +/** + * 用户状态管理模块 + * + * 提供用户相关的状态管理 + * + * ## 主要功能 + * + * - 用户登录状态管理 + * - 用户信息存储 + * - 访问令牌和刷新令牌管理 + * - 语言设置 + * - 搜索历史记录 + * - 锁屏状态和密码管理 + * - 登出清理逻辑 + * + * ## 使用场景 + * + * - 用户登录和认证 + * - 权限验证 + * - 个人信息展示 + * - 多语言切换 + * - 锁屏功能 + * - 搜索历史管理 + * + * ## 持久化 + * + * - 使用 localStorage 存储 + * - 存储键:sys-v{version}-user + * - 登出时自动清理 + * + * @module store/modules/user + * @author Art Design Pro Team + */ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import { LanguageEnum } from '@/enums/appEnum' +import { router } from '@/router' +import { useSettingStore } from './setting' +import { useWorktabStore } from './worktab' +import { AppRouteRecord } from '@/types/router' +import { setPageTitle } from '@/utils/router' +import { resetRouterState } from '@/router/guards/beforeEach' +import { useMenuStore } from './menu' +import { StorageConfig } from '@/utils/storage/storage-config' + +/** + * 用户状态管理 + * 管理用户登录状态、个人信息、语言设置、搜索历史、锁屏状态等 + */ +export const useUserStore = defineStore( + 'userStore', + () => { + // 语言设置 + const language = ref(LanguageEnum.ZH) + // 登录状态 + const isLogin = ref(false) + // 锁屏状态 + const isLock = ref(false) + // 锁屏密码 + const lockPassword = ref('') + // 用户信息 + const info = ref>({}) + // 搜索历史记录 + const searchHistory = ref([]) + // 访问令牌 + const accessToken = ref('') + // 刷新令牌 + const refreshToken = ref('') + + // 计算属性:获取用户信息 + const getUserInfo = computed(() => info.value) + // 计算属性:获取设置状态 + const getSettingState = computed(() => useSettingStore().$state) + // 计算属性:获取工作台状态 + const getWorktabState = computed(() => useWorktabStore().$state) + + /** + * 设置用户信息 + * @param newInfo 新的用户信息 + */ + const setUserInfo = (newInfo: Api.Auth.UserInfo) => { + info.value = newInfo + } + + /** + * 设置登录状态 + * @param status 登录状态 + */ + const setLoginStatus = (status: boolean) => { + isLogin.value = status + } + + /** + * 设置语言 + * @param lang 语言枚举值 + */ + const setLanguage = (lang: LanguageEnum) => { + setPageTitle(router.currentRoute.value) + language.value = lang + } + + /** + * 设置搜索历史 + * @param list 搜索历史列表 + */ + const setSearchHistory = (list: AppRouteRecord[]) => { + searchHistory.value = list + } + + /** + * 设置锁屏状态 + * @param status 锁屏状态 + */ + const setLockStatus = (status: boolean) => { + isLock.value = status + } + + /** + * 设置锁屏密码 + * @param password 锁屏密码 + */ + const setLockPassword = (password: string) => { + lockPassword.value = password + } + + /** + * 设置令牌 + * @param newAccessToken 访问令牌 + * @param newRefreshToken 刷新令牌(可选) + */ + const setToken = (newAccessToken: string, newRefreshToken?: string) => { + accessToken.value = newAccessToken + if (newRefreshToken) { + refreshToken.value = newRefreshToken + } + } + + /** + * 退出登录 + * 清空所有用户相关状态并跳转到登录页 + * 如果是同一账号重新登录,保留工作台标签页 + */ + const logOut = () => { + // 保存当前用户 ID,用于下次登录时判断是否为同一用户 + const currentUserId = info.value.userId + if (currentUserId) { + localStorage.setItem(StorageConfig.LAST_USER_ID_KEY, String(currentUserId)) + } + + // 清空用户信息 + info.value = {} + // 重置登录状态 + isLogin.value = false + // 重置锁屏状态 + isLock.value = false + // 清空锁屏密码 + lockPassword.value = '' + // 清空访问令牌 + accessToken.value = '' + // 清空刷新令牌 + refreshToken.value = '' + // 注意:不清空工作台标签页,等下次登录时根据用户判断 + // 移除iframe路由缓存 + sessionStorage.removeItem('iframeRoutes') + // 清空主页路径 + useMenuStore().setHomePath('') + // 重置路由状态 + resetRouterState(500) + // 跳转到登录页,携带当前路由作为 redirect 参数 + const currentRoute = router.currentRoute.value + const redirect = currentRoute.path !== '/login' ? currentRoute.fullPath : undefined + router.push({ + name: 'Login', + query: redirect ? { redirect } : undefined + }) + } + + /** + * 检查并清理工作台标签页 + * 如果不是同一用户登录,清空工作台标签页 + * 应在登录成功后调用 + */ + const checkAndClearWorktabs = () => { + const lastUserId = localStorage.getItem(StorageConfig.LAST_USER_ID_KEY) + const currentUserId = info.value.userId + + // 无法获取当前用户 ID,跳过检查 + if (!currentUserId) return + + // 首次登录或缓存已清除,保留现有标签页 + if (!lastUserId) { + return + } + + // 不同用户登录,清空工作台标签页 + if (String(currentUserId) !== lastUserId) { + const worktabStore = useWorktabStore() + worktabStore.opened = [] + worktabStore.keepAliveExclude = [] + } + + // 清除临时存储 + localStorage.removeItem(StorageConfig.LAST_USER_ID_KEY) + } + + return { + language, + isLogin, + isLock, + lockPassword, + info, + searchHistory, + accessToken, + refreshToken, + getUserInfo, + getSettingState, + getWorktabState, + setUserInfo, + setLoginStatus, + setLanguage, + setSearchHistory, + setLockStatus, + setLockPassword, + setToken, + logOut, + checkAndClearWorktabs + } + }, + { + persist: { + key: 'user', + storage: localStorage + } + } +) diff --git a/web/src/store/modules/worktab.ts b/web/src/store/modules/worktab.ts new file mode 100755 index 0000000..caa0d90 --- /dev/null +++ b/web/src/store/modules/worktab.ts @@ -0,0 +1,568 @@ +/** + * 工作标签页状态管理模块 + * + * 提供多标签页功能的完整状态管理 + * + * ## 主要功能 + * + * - 标签页打开和关闭 + * - 标签页固定和取消固定 + * - 批量关闭(左侧、右侧、其他、全部) + * - 标签页缓存管理(KeepAlive) + * - 标签页标题自定义 + * - 标签页路由验证 + * - 动态路由参数处理 + * + * ## 使用场景 + * + * - 多标签页导航 + * - 页面缓存控制 + * - 标签页右键菜单 + * - 固定常用页面 + * - 批量关闭标签 + * + * ## 核心特性 + * + * - 智能标签页复用(同路由名称复用) + * - 固定标签页保护(不可关闭) + * - KeepAlive 缓存排除管理 + * - 路由有效性验证 + * - 首页自动保留 + * + * ## 持久化 + * - 使用 localStorage 存储 + * - 存储键:sys-v{version}-worktab + * - 刷新页面保持标签状态 + * + * @module store/modules/worktab + * @author Art Design Pro Team + */ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import { router } from '@/router' +import { LocationQueryRaw, Router } from 'vue-router' +import { WorkTab } from '@/types' +import { useCommon } from '@/hooks/core/useCommon' + +interface WorktabState { + current: Partial + opened: WorkTab[] + keepAliveExclude: string[] +} + +/** + * 工作台标签页管理 Store + */ +export const useWorktabStore = defineStore( + 'worktabStore', + () => { + // 状态定义 + const current = ref>({}) + const opened = ref([]) + const keepAliveExclude = ref([]) + + // 计算属性 + const hasOpenedTabs = computed(() => opened.value.length > 0) + const hasMultipleTabs = computed(() => opened.value.length > 1) + const currentTabIndex = computed(() => + current.value.path ? opened.value.findIndex((tab) => tab.path === current.value.path) : -1 + ) + + /** + * 查找标签页索引 + */ + const findTabIndex = (path: string): number => { + return opened.value.findIndex((tab) => tab.path === path) + } + + /** + * 获取标签页 + */ + const getTab = (path: string): WorkTab | undefined => { + return opened.value.find((tab) => tab.path === path) + } + + /** + * 检查标签页是否可关闭 + */ + const isTabClosable = (tab: WorkTab): boolean => { + return !tab.fixedTab + } + + /** + * 安全的路由跳转 + */ + const safeRouterPush = (tab: Partial): void => { + if (!tab.path) { + console.warn('尝试跳转到无效路径的标签页') + return + } + + try { + router.push({ + path: tab.path, + query: tab.query as LocationQueryRaw + }) + } catch (error) { + console.error('路由跳转失败:', error) + } + } + + /** + * 打开或激活一个选项卡 + */ + const openTab = (tab: WorkTab): void => { + if (!tab.path) { + console.warn('尝试打开无效的标签页') + return + } + + // 从 keepAlive 排除列表中移除 + if (tab.name) { + removeKeepAliveExclude(tab.name) + } + + // 先根据路由名称查找(应对动态路由参数导致的多开问题),找不到再根据路径查找 + let existingIndex = -1 + if (tab.name) { + existingIndex = opened.value.findIndex((t) => t.name === tab.name) + } + if (existingIndex === -1) { + existingIndex = findTabIndex(tab.path) + } + + if (existingIndex === -1) { + // 新增标签页 + const insertIndex = tab.fixedTab ? findFixedTabInsertIndex() : opened.value.length + const newTab = { ...tab } + + if (tab.fixedTab) { + opened.value.splice(insertIndex, 0, newTab) + } else { + opened.value.push(newTab) + } + + current.value = newTab + } else { + // 更新现有标签页(当动态路由参数或查询变更时,复用同一标签) + const existingTab = opened.value[existingIndex] + + opened.value[existingIndex] = { + ...existingTab, + path: tab.path, + params: tab.params, + query: tab.query, + title: tab.title || existingTab.title, + fixedTab: tab.fixedTab ?? existingTab.fixedTab, + keepAlive: tab.keepAlive ?? existingTab.keepAlive, + name: tab.name || existingTab.name, + icon: tab.icon || existingTab.icon + } + + current.value = opened.value[existingIndex] + } + } + + /** + * 查找固定标签页的插入位置 + */ + const findFixedTabInsertIndex = (): number => { + let insertIndex = 0 + for (let i = 0; i < opened.value.length; i++) { + if (opened.value[i].fixedTab) { + insertIndex = i + 1 + } else { + break + } + } + return insertIndex + } + + /** + * 关闭指定的选项卡 + */ + const removeTab = (path: string): void => { + const targetTab = getTab(path) + const targetIndex = findTabIndex(path) + + if (targetIndex === -1) { + console.warn(`尝试关闭不存在的标签页: ${path}`) + return + } + + if (targetTab && !isTabClosable(targetTab)) { + console.warn(`尝试关闭固定标签页: ${path}`) + return + } + + // 从标签页列表中移除 + opened.value.splice(targetIndex, 1) + + // 处理缓存排除 + if (targetTab?.name) { + addKeepAliveExclude(targetTab) + } + + const { homePath } = useCommon() + + // 如果关闭后无标签页,跳转首页 + if (!hasOpenedTabs.value) { + if (path !== homePath.value) { + current.value = {} + safeRouterPush({ path: homePath.value }) + } + return + } + + // 如果关闭的是当前激活标签,需要激活其他标签 + if (current.value.path === path) { + const newIndex = targetIndex >= opened.value.length ? opened.value.length - 1 : targetIndex + current.value = opened.value[newIndex] + safeRouterPush(current.value) + } + } + + /** + * 关闭左侧选项卡 + */ + const removeLeft = (path: string): void => { + const targetIndex = findTabIndex(path) + + if (targetIndex === -1) { + console.warn(`尝试关闭左侧标签页,但目标标签页不存在: ${path}`) + return + } + + // 获取左侧可关闭的标签页 + const leftTabs = opened.value.slice(0, targetIndex) + const closableLeftTabs = leftTabs.filter(isTabClosable) + + if (closableLeftTabs.length === 0) { + console.warn('左侧没有可关闭的标签页') + return + } + + // 标记为缓存排除 + markTabsToRemove(closableLeftTabs) + + // 移除左侧可关闭的标签页 + opened.value = opened.value.filter( + (tab, index) => index >= targetIndex || !isTabClosable(tab) + ) + + // 确保当前标签是激活状态 + const targetTab = getTab(path) + if (targetTab) { + current.value = targetTab + } + } + + /** + * 关闭右侧选项卡 + */ + const removeRight = (path: string): void => { + const targetIndex = findTabIndex(path) + + if (targetIndex === -1) { + console.warn(`尝试关闭右侧标签页,但目标标签页不存在: ${path}`) + return + } + + // 获取右侧可关闭的标签页 + const rightTabs = opened.value.slice(targetIndex + 1) + const closableRightTabs = rightTabs.filter(isTabClosable) + + if (closableRightTabs.length === 0) { + console.warn('右侧没有可关闭的标签页') + return + } + + // 标记为缓存排除 + markTabsToRemove(closableRightTabs) + + // 移除右侧可关闭的标签页 + opened.value = opened.value.filter( + (tab, index) => index <= targetIndex || !isTabClosable(tab) + ) + + // 确保当前标签是激活状态 + const targetTab = getTab(path) + if (targetTab) { + current.value = targetTab + } + } + + /** + * 关闭其他选项卡 + */ + const removeOthers = (path: string): void => { + const targetTab = getTab(path) + + if (!targetTab) { + console.warn(`尝试关闭其他标签页,但目标标签页不存在: ${path}`) + return + } + + // 获取其他可关闭的标签页 + const otherTabs = opened.value.filter((tab) => tab.path !== path) + const closableTabs = otherTabs.filter(isTabClosable) + + if (closableTabs.length === 0) { + console.warn('没有其他可关闭的标签页') + return + } + + // 标记为缓存排除 + markTabsToRemove(closableTabs) + + // 只保留当前标签和固定标签 + opened.value = opened.value.filter((tab) => tab.path === path || !isTabClosable(tab)) + + // 确保当前标签是激活状态 + current.value = targetTab + } + + /** + * 关闭所有可关闭的标签页 + */ + const removeAll = (): void => { + const { homePath } = useCommon() + const hasFixedTabs = opened.value.some((tab) => tab.fixedTab) + + // 获取可关闭的标签页 + const closableTabs = opened.value.filter((tab) => { + if (!isTabClosable(tab)) return false + // 如果有固定标签,则所有可关闭的都可以关闭;否则保留首页 + return hasFixedTabs || tab.path !== homePath.value + }) + + if (closableTabs.length === 0) { + console.warn('没有可关闭的标签页') + return + } + + // 标记为缓存排除 + markTabsToRemove(closableTabs) + + // 保留不可关闭的标签页和首页(当没有固定标签时) + opened.value = opened.value.filter((tab) => { + return !isTabClosable(tab) || (!hasFixedTabs && tab.path === homePath.value) + }) + + // 处理激活状态 + if (!hasOpenedTabs.value) { + current.value = {} + safeRouterPush({ path: homePath.value }) + return + } + + // 选择激活的标签页:优先首页,其次第一个可用标签 + const homeTab = opened.value.find((tab) => tab.path === homePath.value) + const targetTab = homeTab || opened.value[0] + + current.value = targetTab + safeRouterPush(targetTab) + } + + /** + * 将指定选项卡添加到 keepAlive 排除列表中 + */ + const addKeepAliveExclude = (tab: WorkTab): void => { + if (!tab.keepAlive || !tab.name) return + + if (!keepAliveExclude.value.includes(tab.name)) { + keepAliveExclude.value.push(tab.name) + } + } + + /** + * 从 keepAlive 排除列表中移除指定组件名称 + */ + const removeKeepAliveExclude = (name: string): void => { + if (!name) return + + keepAliveExclude.value = keepAliveExclude.value.filter((item) => item !== name) + } + + /** + * 将传入的一组选项卡的组件名称标记为排除缓存 + */ + const markTabsToRemove = (tabs: WorkTab[]): void => { + tabs.forEach((tab) => { + if (tab.name) { + addKeepAliveExclude(tab) + } + }) + } + + /** + * 切换指定标签页的固定状态 + */ + const toggleFixedTab = (path: string): void => { + const targetIndex = findTabIndex(path) + + if (targetIndex === -1) { + console.warn(`尝试切换不存在标签页的固定状态: ${path}`) + return + } + + const tab = { ...opened.value[targetIndex] } + tab.fixedTab = !tab.fixedTab + + // 移除原位置 + opened.value.splice(targetIndex, 1) + + if (tab.fixedTab) { + // 固定标签插入到所有固定标签的末尾 + const firstNonFixedIndex = opened.value.findIndex((t) => !t.fixedTab) + const insertIndex = firstNonFixedIndex === -1 ? opened.value.length : firstNonFixedIndex + opened.value.splice(insertIndex, 0, tab) + } else { + // 非固定标签插入到所有固定标签后 + const fixedCount = opened.value.filter((t) => t.fixedTab).length + opened.value.splice(fixedCount, 0, tab) + } + + // 更新当前标签引用 + if (current.value.path === path) { + current.value = tab + } + } + + /** + * 验证工作台标签页的路由有效性 + */ + const validateWorktabs = (routerInstance: Router): void => { + try { + // 动态路由校验:优先使用路由 name 判断有效性;否则用 resolve 匹配参数化路径 + const isTabRouteValid = (tab: Partial): boolean => { + try { + if (tab.name) { + const routes = routerInstance.getRoutes() + if (routes.some((r) => r.name === tab.name)) return true + } + if (tab.path) { + const resolved = routerInstance.resolve({ + path: tab.path, + query: (tab.query as LocationQueryRaw) || undefined + }) + return resolved.matched.length > 0 + } + return false + } catch { + return false + } + } + + // 过滤出有效的标签页 + const validTabs = opened.value.filter((tab) => isTabRouteValid(tab)) + + if (validTabs.length !== opened.value.length) { + console.warn('发现无效的标签页路由,已自动清理') + opened.value = validTabs + } + + // 验证当前激活标签的有效性 + const isCurrentValid = current.value && isTabRouteValid(current.value) + + if (!isCurrentValid && validTabs.length > 0) { + console.warn('当前激活标签无效,已自动切换') + current.value = validTabs[0] + } else if (!isCurrentValid) { + current.value = {} + } + } catch (error) { + console.error('验证工作台标签页失败:', error) + } + } + + /** + * 清空所有状态(用于登出等场景) + */ + const clearAll = (): void => { + current.value = {} + opened.value = [] + keepAliveExclude.value = [] + } + + /** + * 获取状态快照(用于持久化存储) + */ + const getStateSnapshot = (): WorktabState => { + return { + current: { ...current.value }, + opened: [...opened.value], + keepAliveExclude: [...keepAliveExclude.value] + } + } + + /** + * 获取标签页标题 + */ + const getTabTitle = (path: string): WorkTab | undefined => { + const tab = getTab(path) + return tab + } + + /** + * 更新标签页标题 + */ + const updateTabTitle = (path: string, title: string): void => { + const tab = getTab(path) + if (tab) { + tab.customTitle = title + } + } + + /** + * 重置标签页标题 + */ + const resetTabTitle = (path: string): void => { + const tab = getTab(path) + if (tab) { + tab.customTitle = '' + } + } + + return { + // 状态 + current, + opened, + keepAliveExclude, + + // 计算属性 + hasOpenedTabs, + hasMultipleTabs, + currentTabIndex, + + // 方法 + openTab, + removeTab, + removeLeft, + removeRight, + removeOthers, + removeAll, + toggleFixedTab, + validateWorktabs, + clearAll, + getStateSnapshot, + + // 工具方法 + findTabIndex, + getTab, + isTabClosable, + addKeepAliveExclude, + removeKeepAliveExclude, + markTabsToRemove, + getTabTitle, + updateTabTitle, + resetTabTitle + } + }, + { + persist: { + key: 'worktab', + storage: localStorage + } + } +) diff --git a/web/src/types/api/api.d.ts b/web/src/types/api/api.d.ts new file mode 100644 index 0000000..ad09c30 --- /dev/null +++ b/web/src/types/api/api.d.ts @@ -0,0 +1,138 @@ +/** + * API 接口类型定义模块 + * + * 提供所有后端接口的类型定义 + * + * ## 主要功能 + * + * - 通用类型(分页参数、响应结构等) + * - 认证类型(登录、用户信息等) + * - 系统管理类型(用户、角色等) + * - 全局命名空间声明 + * + * ## 使用场景 + * + * - API 请求参数类型约束 + * - API 响应数据类型定义 + * - 接口文档类型同步 + * + * ## 注意事项 + * + * - 在 .vue 文件使用需要在 eslint.config.mjs 中配置 globals: { Api: 'readonly' } + * - 使用全局命名空间,无需导入即可使用 + * + * ## 使用方式 + * + * ```typescript + * const params: Api.Auth.LoginParams = { userName: 'admin', password: '123456' } + * const response: Api.Auth.UserInfo = await fetchUserInfo() + * ``` + * + * @module types/api/api + * @author Art Design Pro Team + */ + +declare namespace Api { + /** 通用类型 */ + namespace Common { + /** 分页参数 */ + interface PaginationParams { + /** 当前页码 */ + current: number + /** 每页条数 */ + size: number + /** 总条数 */ + total: number + } + + /** 通用搜索参数 */ + type CommonSearchParams = Pick + + /** 分页响应基础结构 */ + interface PaginatedResponse { + records: T[] + current: number + size: number + total: number + } + + /** 启用状态 */ + type EnableStatus = '1' | '2' + } + + /** 认证类型 */ + namespace Auth { + /** 登录参数 */ + interface LoginParams { + userName: string + password: string + } + + /** 登录响应 */ + interface LoginResponse { + token: string + refreshToken: string + } + + /** 用户信息 */ + interface UserInfo { + buttons: string[] + roles: string[] + userId: number + userName: string + email: string + avatar?: string + } + } + + /** 系统管理类型 */ + namespace SystemManage { + /** 用户列表 */ + type UserList = Api.Common.PaginatedResponse + + /** 用户列表项 */ + interface UserListItem { + id: number + avatar: string + status: string + userName: string + userGender: string + nickName: string + userPhone: string + userEmail: string + userRoles: string[] + createBy: string + createTime: string + updateBy: string + updateTime: string + } + + /** 用户搜索参数 */ + type UserSearchParams = Partial< + Pick & + Api.Common.CommonSearchParams + > + + /** 角色列表 */ + type RoleList = Api.Common.PaginatedResponse + + /** 角色列表项 */ + interface RoleListItem { + roleId: number + roleName: string + roleCode: string + description: string + enabled: boolean + createTime: string + } + + /** 角色搜索参数 */ + type RoleSearchParams = Partial< + Pick & + Api.Common.CommonSearchParams & { + startTime: string | null + endTime: string | null + } + > + } +} diff --git a/web/src/types/common/index.ts b/web/src/types/common/index.ts new file mode 100644 index 0000000..7e751d1 --- /dev/null +++ b/web/src/types/common/index.ts @@ -0,0 +1,95 @@ +/** + * 通用类型定义模块 + * + * 提供项目中常用的通用类型定义 + * + * ## 主要功能 + * + * - 状态类型(启用/禁用) + * - 性别类型 + * - 排序方向类型 + * - 操作类型(增删改查) + * - 记录类型(键值对) + * - 时间范围类型 + * - 文件信息类型 + * - 坐标和尺寸类型 + * - 响应式断点类型 + * - 主题和语言类型 + * - 环境和弹窗类型 + * + * ## 使用场景 + * + * - 通用数据结构定义 + * - 类型约束和提示 + * - 减少重复类型定义 + * + * @module types/common/index + * @author Art Design Pro Team + */ + +// 导出响应类型 +export * from './response' + +// 状态类型 +export type Status = 0 | 1 // 0: 禁用, 1: 启用 + +// 性别类型 +export type Gender = 'male' | 'female' | 'unknown' + +// 排序方向 +export type SortOrder = 'ascending' | 'descending' + +// 操作类型 +export type ActionType = 'create' | 'update' | 'delete' | 'view' + +// 可选的记录类型 +export type Recordable = Record + +// 键值对类型 +export type KeyValue = { + key: string + value: T + label?: string +} + +// 时间范围类型 +export interface TimeRange { + startTime: string + endTime: string +} + +// 文件类型 +export interface FileInfo { + name: string + url: string + size: number + type: string + lastModified?: number +} + +// 坐标类型 +export interface Position { + x: number + y: number +} + +// 尺寸类型 +export interface Size { + width: number + height: number +} + +// 响应式断点类型 +export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' + +// 主题类型 +export type ThemeMode = 'light' | 'dark' | 'auto' + +// 语言类型 +export type Language = 'zh-CN' | 'en-US' + +// 环境类型 +export type Environment = 'development' | 'production' | 'test' + +// 弹窗类型 +export type DialogType = 'add' | 'edit' diff --git a/web/src/types/common/response.ts b/web/src/types/common/response.ts new file mode 100644 index 0000000..4a5fdab --- /dev/null +++ b/web/src/types/common/response.ts @@ -0,0 +1,30 @@ +/** + * API 响应类型定义模块 + * + * 提供统一的 API 响应结构类型定义 + * + * ## 主要功能 + * + * - 基础响应结构定义 + * - 泛型支持(适配不同数据类型) + * - 统一的响应格式约束 + * + * ## 使用场景 + * + * - API 请求响应类型约束 + * - 接口数据类型定义 + * - 响应数据解析 + * + * @module types/common/response + * @author Art Design Pro Team + */ + +/** 基础 API 响应结构 */ +export interface BaseResponse { + /** 状态码 */ + code: number + /** 消息 */ + msg: string + /** 数据 */ + data: T +} diff --git a/web/src/types/component/chart.ts b/web/src/types/component/chart.ts new file mode 100644 index 0000000..c3225c9 --- /dev/null +++ b/web/src/types/component/chart.ts @@ -0,0 +1,324 @@ +/** + * 图表组件类型定义模块 + * + * 提供 ECharts 图表组件的完整类型定义 + * + * ## 主要功能 + * + * - 基础图表配置类型 + * - 柱状图类型定义 + * - 折线图类型定义 + * - 饼图/环形图类型定义 + * - 雷达图类型定义 + * - K线图类型定义 + * - 散点图类型定义 + * - 地图图表类型定义 + * - 双向堆叠柱状图类型定义 + * - 图表主题配置类型 + * - 图表事件回调类型 + * + * ## 使用场景 + * + * - 图表组件 Props 类型约束 + * - 图表配置类型定义 + * - 图表数据结构定义 + * - 图表事件处理 + * + * @module types/component/chart + * @author Art Design Pro Team + */ +import type { EChartsOption } from '@/plugins/echarts' + +// 图例位置类型 +export type LegendPosition = 'bottom' | 'top' | 'left' | 'right' + +export type SymbolType = + | 'circle' + | 'rect' + | 'roundRect' + | 'triangle' + | 'diamond' + | 'pin' + | 'arrow' + | 'none' + +// 图表主题配置 +export interface ChartThemeConfig { + /** 图表高度 */ + chartHeight: string + /** 字体大小 */ + fontSize: number + /** 字体颜色 */ + fontColor: string + /** 主题颜色 */ + themeColor: string + /** 颜色组 */ + colors: string[] +} + +// 图表初始化选项 +export interface UseChartOptions { + /** 初始化选项 */ + initOptions?: EChartsOption + /** 延迟初始化时间(ms) */ + initDelay?: number + /** IntersectionObserver阈值 */ + threshold?: number + /** 是否自动响应主题变化 */ + autoTheme?: boolean +} + +// 基础图表 Props 接口 - 统一所有图表的基础属性 +export interface BaseChartProps { + /** 图表高度 */ + height?: string + /** 是否加载中 */ + loading?: boolean + isEmpty?: boolean + /** 颜色配置 */ + colors?: string[] +} + +// 轴线显示控制接口 - 统一轴线相关配置 +export interface AxisDisplayProps { + /** 是否显示坐标轴标签 */ + showAxisLabel?: boolean + /** 是否显示坐标轴线 */ + showAxisLine?: boolean + /** 是否显示分割线 */ + showSplitLine?: boolean +} + +// 交互显示控制接口 - 统一交互相关配置 +export interface InteractionProps { + /** 是否显示提示框 */ + showTooltip?: boolean + /** 是否显示图例 */ + showLegend?: boolean + /** 图例位置 */ + legendPosition?: LegendPosition +} + +// 柱状图数据项接口 +export interface BarDataItem { + /** 系列名称 */ + name: string + /** 数据值 */ + data: number[] + /** 柱状图宽度 */ + barWidth?: string | number + /** 堆叠分组名称 */ + stack?: string +} + +// 柱状图 Props 接口 - 统一柱状图配置 +export interface BarChartProps extends BaseChartProps, AxisDisplayProps, InteractionProps { + /** 图表数据 - 支持单组数据或多组数据 */ + data: number[] | BarDataItem[] + /** X轴标签数据 */ + xAxisData?: string[] + /** 柱状图宽度 */ + barWidth?: string | number + /** 是否堆叠显示 */ + stack?: boolean + /** 圆角 */ + borderRadius?: number | number[] +} + +// 折线图数据项接口 +export interface LineDataItem { + /** 系列名称 */ + name: string + /** 数据值 */ + data: number[] + /** 线条宽度 */ + lineWidth?: number + /** 是否显示区域填充 */ + showAreaColor?: boolean + /** 区域样式配置 */ + areaStyle?: { + /** 渐变开始透明度 */ + startOpacity?: number + /** 渐变结束透明度 */ + endOpacity?: number + /** 自定义 ECharts areaStyle 配置 */ + custom?: any + } + /** 是否平滑曲线 */ + smooth?: boolean + /** 数据点符号 */ + symbol?: SymbolType + /** 数据点大小 */ + symbolSize?: number +} + +// 折线图 Props 接口 - 统一折线图配置 +export interface LineChartProps extends BaseChartProps, AxisDisplayProps, InteractionProps { + /** 图表数据 - 支持单组数据或多组数据 */ + data: number[] | LineDataItem[] + /** X轴标签数据 */ + xAxisData?: string[] + /** 线条宽度 */ + lineWidth?: number + /** 是否显示区域填充 */ + showAreaColor?: boolean + /** 是否平滑曲线 */ + smooth?: boolean + /** 数据点符号 */ + symbol?: SymbolType + /** 数据点大小 */ + symbolSize?: number + /** 多数据动画延迟间隔(毫秒) */ + animationDelay?: number +} + +// 雷达图数据项接口 +export interface RadarDataItem { + /** 系列名称 */ + name: string + /** 数据值 */ + value: number[] +} + +// 雷达图 Props 接口 - 统一雷达图配置 +export interface RadarChartProps extends BaseChartProps, InteractionProps { + /** 雷达图指标配置 */ + indicator?: Array<{ name: string; max: number }> + /** 图表数据 */ + data?: RadarDataItem[] +} + +// 饼图/环形图数据项接口 +export interface PieDataItem { + /** 数据值 */ + value: number + /** 数据名称 */ + name: string +} + +// 环形图 Props 接口 - 统一环形图配置 +export interface RingChartProps extends BaseChartProps, InteractionProps { + /** 图表数据 */ + data: PieDataItem[] + /** 内外半径 */ + radius?: string[] + /** 边框圆角 */ + borderRadius?: number + /** 中心文本 */ + centerText?: string + /** 是否显示标签 */ + showLabel?: boolean +} + +// K线图数据项接口 +export interface KLineDataItem { + /** 时间标签 */ + time: string + /** 开盘价 */ + open: number + /** 收盘价 */ + close: number + /** 最高价 */ + high: number + /** 最低价 */ + low: number +} + +// K线图 Props 接口 - 统一K线图配置 +export interface KLineChartProps extends BaseChartProps { + /** 图表数据 */ + data?: KLineDataItem[] + /** 是否显示数据缩放控件 */ + showDataZoom?: boolean + /** 数据缩放初始开始位置 */ + dataZoomStart?: number + /** 数据缩放初始结束位置 */ + dataZoomEnd?: number +} + +// 散点图数据项接口 +export interface ScatterDataItem { + /** 坐标值 [x, y] */ + value: number[] +} + +// 散点图 Props 接口 - 统一散点图配置 +export interface ScatterChartProps extends BaseChartProps, AxisDisplayProps, InteractionProps { + /** 图表数据 */ + data?: ScatterDataItem[] + /** 散点大小 */ + symbolSize?: number +} + +// 双柱对比图 Props 接口 - 统一双柱对比图配置 +export interface DualBarCompareChartProps extends BaseChartProps { + /** 上方数据 */ + topData: number[] + /** 下方数据 */ + bottomData: number[] + /** X轴标签数据 */ + xAxisData: string[] + /** 上方柱子颜色 */ + topColor?: string + /** 下方柱子颜色 */ + bottomColor?: string + /** 柱状图宽度 */ + barWidth?: number +} + +// 地图图表 Props 接口 - 统一地图图表配置 +export interface MapChartProps extends BaseChartProps { + /** 地图数据 */ + mapData?: any[] + /** 选中区域 */ + selectedRegion?: string + /** 是否显示标签 */ + showLabels?: boolean + /** 是否显示散点 */ + showScatter?: boolean +} + +// 双向堆叠柱状图 Props 接口(人口金字塔样式) +export interface BidirectionalBarChartProps + extends BaseChartProps, + AxisDisplayProps, + InteractionProps { + /** 正向数据(向上显示) */ + positiveData: number[] + /** 负向数据(向下显示) */ + negativeData: number[] + /** X轴标签数据 */ + xAxisData?: string[] + /** 正向数据名称 */ + positiveName?: string + /** 负向数据名称 */ + negativeName?: string + /** 柱状图宽度 */ + barWidth?: string | number + /** Y轴最小值 */ + yAxisMin?: number + /** Y轴最大值 */ + yAxisMax?: number + /** 是否显示数据标签 */ + showDataLabel?: boolean + /** 正向数据圆角配置 */ + positiveBorderRadius?: number | number[] + /** 负向数据圆角配置 */ + negativeBorderRadius?: number | number[] +} + +// 图表配置生成器函数类型 +export type ChartOptionGenerator = () => EChartsOption + +// 图表事件回调类型 +export type ChartEventCallback = (params: any) => void + +// 图表错误信息接口 +export interface ChartError { + /** 错误码 */ + code: string + /** 错误信息 */ + message: string + /** 错误详情 */ + details?: any +} diff --git a/web/src/types/component/index.ts b/web/src/types/component/index.ts new file mode 100644 index 0000000..b9e90c6 --- /dev/null +++ b/web/src/types/component/index.ts @@ -0,0 +1,145 @@ +/** + * 组件类型定义模块 + * + * 提供项目组件的类型定义 + * + * ## 主要功能 + * + * - 搜索组件类型定义 + * - 表格列配置类型 + * - 分页配置类型 + * - 表单规则类型 + * - 对话框配置类型 + * + * ## 使用场景 + * + * - 组件 Props 类型约束 + * - 组件配置类型定义 + * - 组件事件参数类型 + * + * @module types/component/index + * @author Art Design Pro Team + */ + +// 搜索组件类型 +export type SearchComponentType = + | 'input' + | 'select' + | 'radio' + | 'checkbox' + | 'date' + | 'datetime' + | 'daterange' + | 'datetimerange' + | 'month' + | 'monthrange' + | 'year' + | 'yearrange' + | 'week' + | 'time' + | 'timerange' + +// 搜索框值变化参数 +export interface SearchChangeParams { + prop: string + val: unknown +} + +// 表格列配置接口 +export interface ColumnOption { + // 列类型 + type?: 'selection' | 'expand' | 'index' | 'globalIndex' + // 列属性名 + prop?: string + // 列标题 + label?: string + // 列宽度 + width?: string | number + // 最小列宽度 + minWidth?: string | number + // 固定列 + fixed?: boolean | 'left' | 'right' + // 是否可排序 + sortable?: boolean | 'custom' + // 过滤器选项 + filters?: any[] + // 过滤方法 + filterMethod?: (value: any, row: any) => boolean + // 过滤器位置 + filterPlacement?: string + // 是否禁用 + disabled?: boolean + // 是否显示列 + visible?: boolean + // 是否选中显示 + checked?: boolean + // 自定义渲染函数 + formatter?: (row: T) => any + // 插槽相关配置 + // 是否使用插槽渲染内容 + useSlot?: boolean + // 插槽名称(默认为 prop 值) + slotName?: string + // 是否使用表头插槽 + useHeaderSlot?: boolean + // 表头插槽名称(默认为 `${prop}-header`) + headerSlotName?: string + // 其他属性 + [key: string]: any +} + +// 分页配置 +export interface PaginationConfig { + // 当前页 + currentPage: number + // 每页条数 + pageSize: number + // 总条数 + total: number + // 每页显示个数选择器的选项 + pageSizes?: number[] + // 组件布局 + layout?: string + // 是否为小型分页 + small?: boolean +} + +// 表单规则 +export interface FormRule { + // 是否必填 + required?: boolean + // 错误提示信息 + message?: string + // 触发方式 + trigger?: string | string[] + // 最小长度 + min?: number + // 最大长度 + max?: number + // 正则表达式 + pattern?: RegExp + // 自定义验证函数 + validator?: (rule: any, value: any, callback: any) => void +} + +// 对话框配置 +export interface DialogConfig { + // 标题 + title: string + // 是否显示 + visible: boolean + // 宽度 + width?: string | number + // 是否可以通过点击 modal 关闭 + closeOnClickModal?: boolean + // 是否可以通过按下 ESC 关闭 + closeOnPressEscape?: boolean + // 是否显示关闭按钮 + showClose?: boolean + // 是否在 Dialog 出现时将 body 滚动锁定 + lockScroll?: boolean + // 是否显示遮罩层 + modal?: boolean + // 自定义类名 + customClass?: string +} diff --git a/web/src/types/config/index.ts b/web/src/types/config/index.ts new file mode 100644 index 0000000..dd144de --- /dev/null +++ b/web/src/types/config/index.ts @@ -0,0 +1,211 @@ +/** + * 配置类型定义模块 + * + * 提供系统配置相关的类型定义 + * + * ## 主要功能 + * + * - 主题设置类型 + * - 菜单布局类型 + * - 节日配置类型 + * - 系统基础配置类型 + * - 快速入口配置类型 + * - 顶部栏功能配置类型 + * - 环境配置类型 + * - 应用配置类型 + * + * ## 使用场景 + * + * - 系统配置文件类型约束 + * - 配置项类型定义 + * - 配置数据验证 + * + * @module types/config/index + * @author Art Design Pro Team + */ + +import { MenuTypeEnum, SystemThemeEnum } from '@/enums/appEnum' +import { MenuThemeType, SystemThemeTypes } from '@/types/store' + +// 主题设置 +export interface ThemeSetting { + /** 主题名称 */ + name: string + /** 系统主题类型 */ + theme: SystemThemeEnum + /** 主题颜色数组 */ + color: string[] + /** 左侧线条颜色 */ + leftLineColor: string + /** 右侧线条颜色 */ + rightLineColor: string + /** 主题图片 */ + img: string +} + +// 菜单布局 +export interface MenuLayout { + /** 布局名称 */ + name: string + /** 菜单类型值 */ + value: MenuTypeEnum + /** 布局预览图 */ + img: string + /** 布局描述 */ + description?: string +} + +// 节日配置 +export interface FestivalConfig { + /** 节日日期(单日)或开始日期(日期范围) */ + date: string + /** 节日结束日期(可选,用于跨日期节日) */ + endDate?: string + /** 节日名称 */ + name: string + /** 烟花图片 */ + image: string + /** 滚动文本 */ + scrollText: string + /** 是否激活 */ + isActive?: boolean + /** 烟花播放次数(可选,默认为 3 次) */ + count?: number +} + +// 系统基础配置 +export interface SystemBasicConfig { + // 系统名称 + name: string + // 系统描述 + description?: string + // 系统logo + logo?: string + // 系统favicon + favicon?: string + // 版权信息 + copyright?: string +} + +// 快速入口基础项 +export interface FastEnterBaseItem { + /** 名称 */ + name: string + /** 是否启用 */ + enabled?: boolean + /** 排序权重 */ + order?: number + /** 路由名称 */ + routeName?: string + /** 外部链接 */ + link?: string +} + +// 快速入口应用项 +export interface FastEnterApplication extends FastEnterBaseItem { + /** 应用描述 */ + description: string + /** 图标代码 */ + icon: string + /** 图标颜色 */ + iconColor: string +} + +// 快速链接项 +export type FastEnterQuickLink = FastEnterBaseItem + +// 快速入口配置 +export interface FastEnterConfig { + /** 应用列表 */ + applications: FastEnterApplication[] + /** 快速链接 */ + quickLinks: FastEnterQuickLink[] + /** 显示条件(屏幕宽度) */ + minWidth?: number +} + +// 系统配置 +export interface SystemConfig { + // 系统基础信息 + systemInfo: SystemBasicConfig + // 系统主题样式 + systemThemeStyles: SystemThemeTypes + // 设置主题列表 + settingThemeList: ThemeSetting[] + // 菜单布局列表 + menuLayoutList: MenuLayout[] + // 主题列表 + themeList: MenuThemeType[] + // 暗色菜单样式 + darkMenuStyles: MenuThemeType[] + // 系统主色调 + systemMainColor: readonly string[] + // 快速入口配置 + fastEnter?: FastEnterConfig + // 顶部栏功能配置 + headerBar?: HeaderBarFeatureConfig +} + +// 环境配置 +export interface EnvConfig { + // 环境名称 + NODE_ENV: string + // 应用版本 + VITE_VERSION: string + // 应用端口 + VITE_PORT: string + // 应用基础路径 + VITE_BASE_URL: string + // API 地址 + VITE_API_URL: string + // 是否开启 Mock + VITE_USE_MOCK?: string + // 是否开启压缩 + VITE_USE_GZIP?: string + // 是否开启 CDN + VITE_USE_CDN?: string +} + +// 应用配置 +export interface AppConfig extends SystemConfig { + // 环境配置 + env: EnvConfig + // 开发模式 + isDev: boolean + // 生产模式 + isProd: boolean + // 测试模式 + isTest: boolean +} + +// 功能配置项基础接口 +export interface FeatureConfigItem { + enabled: boolean + description: string +} + +// 顶部栏功能配置接口 +export interface HeaderBarFeatureConfig { + /** 菜单按钮 */ + menuButton: FeatureConfigItem + /** 刷新按钮 */ + refreshButton: FeatureConfigItem + /** 快速入口 */ + fastEnter: FeatureConfigItem + /** 面包屑导航 */ + breadcrumb: FeatureConfigItem + /** 全局搜索 */ + globalSearch: FeatureConfigItem + /** 全屏功能 */ + fullscreen: FeatureConfigItem + /** 通知功能 */ + notification: FeatureConfigItem + /** 聊天功能 */ + chat: FeatureConfigItem + /** 多语言切换 */ + language: FeatureConfigItem + /** 设置面板 */ + settings: FeatureConfigItem + /** 主题切换 */ + themeToggle: FeatureConfigItem +} diff --git a/web/src/types/directive/directive.d.ts b/web/src/types/directive/directive.d.ts new file mode 100644 index 0000000..eb0154e --- /dev/null +++ b/web/src/types/directive/directive.d.ts @@ -0,0 +1,15 @@ +import type { + AuthDirective, + RolesDirective, + RippleDirective, + HighlightDirective +} from '@/directives' + +declare module 'vue' { + export interface GlobalDirectives { + vAuth: AuthDirective + vRoles: RolesDirective + vRipple: RippleDirective + vHighlight: HighlightDirective + } +} diff --git a/web/src/types/index.ts b/web/src/types/index.ts new file mode 100644 index 0000000..9032fd2 --- /dev/null +++ b/web/src/types/index.ts @@ -0,0 +1,22 @@ +/** + * 类型定义统一导出模块 + * 提供全局类型定义的统一导出入口 + * + * @module types/index + * @author Art Design Pro Team + */ + +/** 通用类型定义(基础类型、工具类型等) */ +export * from './common' + +/** 组件相关类型定义 */ +export * from './component' + +/** 状态管理相关类型定义 */ +export * from './store' + +/** 路由相关类型定义 */ +export * from './router' + +/** 配置相关类型定义 */ +export * from './config' diff --git a/web/src/types/router/index.ts b/web/src/types/router/index.ts new file mode 100644 index 0000000..d9ef012 --- /dev/null +++ b/web/src/types/router/index.ts @@ -0,0 +1,80 @@ +/** + * 路由类型定义模块 + * + * 提供路由相关的类型定义 + * + * ## 主要功能 + * + * - 路由元数据类型(标题、图标、权限等) + * - 应用路由记录类型 + * - 路由配置扩展 + * + * ## 使用场景 + * + * - 路由配置类型约束 + * - 路由元数据定义 + * - 菜单生成 + * - 权限控制 + * + * @module types/router/index + * @author Art Design Pro Team + */ + +import { RouteRecordRaw } from 'vue-router' + +/** + * 路由元数据接口 + * 定义路由的各种配置属性 + */ +export interface RouteMeta extends Record { + /** 路由标题 */ + title: string + /** 路由图标 */ + icon?: string + /** 是否显示徽章 */ + showBadge?: boolean + /** 文本徽章 */ + showTextBadge?: string + /** 是否在菜单中隐藏 */ + isHide?: boolean + /** 是否在标签页中隐藏 */ + isHideTab?: boolean + /** 外部链接 */ + link?: string + /** 是否为iframe */ + isIframe?: boolean + /** 是否缓存 */ + keepAlive?: boolean + /** 操作权限 */ + authList?: Array<{ + title: string + authMark: string + }> + /** 是否为一级菜单 */ + isFirstLevel?: boolean + /** 角色权限 */ + roles?: string[] + /** 是否固定标签页 */ + fixedTab?: boolean + /** 激活菜单路径 */ + activePath?: string + /** 是否为全屏页面 */ + isFullPage?: boolean + /** 是否为权限按钮行 */ + isAuthButton?: boolean + /** 权限标识 */ + authMark?: string + /** 父级路径 */ + parentPath?: string +} + +/** + * 应用路由记录接口 + * 扩展 Vue Router 的路由记录类型 + */ +export interface AppRouteRecord extends Omit { + id?: number + meta: RouteMeta + children?: AppRouteRecord[] + component?: string | (() => Promise) +} diff --git a/web/src/types/store/index.ts b/web/src/types/store/index.ts new file mode 100644 index 0000000..019801e --- /dev/null +++ b/web/src/types/store/index.ts @@ -0,0 +1,157 @@ +/** + * Store 状态类型定义模块 + * + * 提供 Pinia Store 的状态类型定义 + * + * ## 主要功能 + * + * - 系统主题类型 + * - 菜单主题类型 + * - 设置状态类型 + * - 工作标签页类型 + * - 用户状态类型 + * - 菜单状态类型 + * - 根状态类型 + * + * ## 使用场景 + * + * - Store 状态类型约束 + * - 状态数据结构定义 + * - 类型提示和自动补全 + * + * @module types/store/index + * @author Art Design Pro Team + */ + +import { MenuThemeEnum, SystemThemeEnum } from '@/enums/appEnum' +import { LocationQueryRaw } from 'vue-router' + +// 系统主题样式(light | dark) +export interface SystemThemeType { + /** 主题类名 */ + className: string +} + +// 定义包含多个主题的类型 +export type SystemThemeTypes = { + [key in Exclude]: SystemThemeType +} + +// 菜单主题样式 +export interface MenuThemeType { + /** 主题类型 */ + theme: MenuThemeEnum + /** 背景颜色 */ + background: string + /** 系统名称颜色 */ + systemNameColor: string + /** 文本颜色 */ + textColor: string + /** 图标颜色 */ + iconColor: string + /** 背景图片 */ + img?: string +} + +// 设置中心 +export interface SettingState { + /** 主题 */ + theme: string + /** 是否只保持一个子菜单的展开 */ + uniqueOpened: boolean + /** 是否显示菜单按钮 */ + menuButton: boolean + /** 是否显示刷新按钮 */ + showRefreshButton: boolean + /** 是否显示面包屑 */ + showCrumbs: boolean + /** 是否自动关闭 */ + autoClose: boolean + /** 是否显示工作标签页 */ + showWorkTab: boolean + /** 是否显示语言切换 */ + showLanguage: boolean + /** 是否显示进度条 */ + showNprogress: boolean + /** 主题模式 */ + themeModel: string +} + +// 多标签 +export interface WorkTab { + /** 标签标题 */ + title: string + /** 自定义标题 */ + customTitle?: string + /** 路由路径 */ + path: string + /** 路由名称 */ + name: string + /** 是否缓存 */ + keepAlive: boolean + /** 是否固定标签 */ + fixedTab?: boolean + /** 路由参数 */ + params?: object + /** 路由查询参数 */ + query?: LocationQueryRaw + /** 图标 */ + icon?: string + /** 是否激活 */ + isActive?: boolean +} + +// 用户Store状态 +export interface UserState { + /** 用户信息 */ + userInfo: Api.Auth.UserInfo | null + /** 认证令牌 */ + token: string | null + /** 用户角色列表 */ + roles: string[] + /** 用户权限列表 */ + permissions: string[] +} + +// 设置Store状态 +export interface SettingStoreState extends SettingState { + // 额外的设置状态 + /** 菜单是否折叠 */ + collapsed: boolean + /** 设备类型 */ + device: 'desktop' | 'mobile' + /** 当前语言 */ + language: string +} + +// 工作标签页Store状态 +export interface WorkTabState { + /** 标签页列表 */ + tabs: WorkTab[] + /** 当前激活的标签页 */ + activeTab: string + /** 缓存的标签页列表 */ + cachedTabs: string[] +} + +// 菜单Store状态 +export interface MenuState { + /** 菜单列表 */ + menuList: any[] + /** 菜单是否已加载 */ + isLoaded: boolean + /** 菜单是否折叠 */ + collapsed: boolean +} + +// 根Store状态类型 +export interface RootState { + /** 用户状态 */ + user: UserState + /** 设置状态 */ + setting: SettingStoreState + /** 工作标签页状态 */ + workTab: WorkTabState + /** 菜单状态 */ + menu: MenuState +} diff --git a/web/src/utils/constants/index.ts b/web/src/utils/constants/index.ts new file mode 100644 index 0000000..831be29 --- /dev/null +++ b/web/src/utils/constants/index.ts @@ -0,0 +1,8 @@ +/** + * 常量定义相关工具函数统一导出 + * + * @module utils/constants/index + * @author Art Design Pro Team + */ + +export * from './links' diff --git a/web/src/utils/constants/links.ts b/web/src/utils/constants/links.ts new file mode 100644 index 0000000..06d297e --- /dev/null +++ b/web/src/utils/constants/links.ts @@ -0,0 +1,35 @@ +/** + * 网站链接常量配置 + * 集中管理便于维护和更新链接地址 + * + * @module utils/constants/links + * @author Art Design Pro Team + */ +export const WEB_LINKS = { + // Github 主页 + GITHUB_HOME: 'https://github.com/Daymychen/art-design-pro', + + // 项目 Github 主页 + GITHUB: 'https://github.com/Daymychen/art-design-pro', + + // 个人博客 + BLOG: 'https://www.artd.pro', + + // 项目文档 + DOCS: 'https://www.artd.pro/docs/zh/', + + // 精简版本 + LiteVersion: 'https://www.artd.pro/docs/zh/guide/lite-version.html', + + // v2.6.1版本 + OldVersion: 'https://www.artd.pro/v2/', + + // 项目社区 + COMMUNITY: 'https://www.artd.pro/docs/zh/community/communicate.html', + + // 个人 Bilibili 主页 + BILIBILI: 'https://space.bilibili.com/425500936?spm_id_from=333.1007.0.0', + + // 项目介绍 + INTRODUCE: 'https://www.artd.pro/docs/zh/guide/introduce.html' +} diff --git a/web/src/utils/form/index.ts b/web/src/utils/form/index.ts new file mode 100644 index 0000000..ed23a46 --- /dev/null +++ b/web/src/utils/form/index.ts @@ -0,0 +1,12 @@ +/** + * 表单工具函数统一导出 + * + * @module utils/form + * @author Art Design Pro Team + */ + +// 表单验证器 +export * from './validator' + +// 响应式布局 +export * from './responsive' diff --git a/web/src/utils/form/responsive.ts b/web/src/utils/form/responsive.ts new file mode 100644 index 0000000..c11df92 --- /dev/null +++ b/web/src/utils/form/responsive.ts @@ -0,0 +1,122 @@ +/** + * 表单响应式布局工具模块 + * + * 提供表单项在不同屏幕尺寸下的智能布局计算 + * + * ## 主要功能 + * + * - 响应式断点管理(xs/sm/md/lg/xl) + * - 表单列宽自动降级(避免小屏幕压缩) + * - 基于阈值的智能 span 计算 + * - 响应式计算器工厂函数 + * - 可配置的断点规则 + * + * ## 使用场景 + * + * - 表单组件响应式布局 + * - 搜索表单自适应 + * - 移动端表单优化 + * - 多列表单布局 + * + * ## 断点说明(基于 Element Plus Grid 24 栅格系统): + * - xs (手机): < 768px,小于 12 时降级为 24(满宽) + * - sm (平板): ≥ 768px,小于 12 时降级为 12(半宽) + * - md (中等屏幕): ≥ 992px,小于 8 时降级为 8(三分之一宽) + * - lg (大屏幕): ≥ 1200px,直接使用设置的 span + * - xl (超大屏幕): ≥ 1920px,直接使用设置的 span + * + * ## 核心功能 + * + * - calculateResponsiveSpan: 计算响应式列宽 + * - createResponsiveSpanCalculator: 创建 span 计算器(柯里化) + * + * @module utils/form/responsive + * @author Art Design Pro Team + */ + +/** + * 响应式断点类型 + */ +export type ResponsiveBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' + +/** + * 断点配置映射 + */ +interface BreakpointConfig { + /** 最小 span 阈值 */ + threshold: number + /** 降级后的 span 值 */ + fallback: number +} + +/** + * 响应式断点配置 + */ +const BREAKPOINT_CONFIG: Record = { + xs: { threshold: 12, fallback: 24 }, // 手机:小于 12 时使用满宽 + sm: { threshold: 12, fallback: 12 }, // 平板:小于 12 时使用半宽 + md: { threshold: 8, fallback: 8 }, // 中等屏幕:小于 8 时使用三分之一宽 + lg: null, // 大屏幕:直接使用设置的 span + xl: null // 超大屏幕:直接使用设置的 span +} + +/** + * 计算响应式列宽 + * + * 根据屏幕尺寸智能降级,避免小屏幕上表单项被压缩过小 + * + * @param itemSpan 表单项自定义的 span 值 + * @param defaultSpan 默认的 span 值 + * @param breakpoint 当前断点 + * @returns 计算后的 span 值 + * + * @example + * ```ts + * // 在 xs 断点下,span 为 6 会降级为 24(满宽) + * calculateResponsiveSpan(6, 6, 'xs') // 24 + * + * // 在 md 断点下,span 为 6 会降级为 8(三分之一宽) + * calculateResponsiveSpan(6, 6, 'md') // 8 + * + * // 在 lg 断点下,直接使用原始 span + * calculateResponsiveSpan(6, 6, 'lg') // 6 + * ``` + */ +export function calculateResponsiveSpan( + itemSpan: number | undefined, + defaultSpan: number, + breakpoint: ResponsiveBreakpoint +): number { + const finalSpan = itemSpan ?? defaultSpan + const config = BREAKPOINT_CONFIG[breakpoint] + + // 如果没有配置(lg/xl),直接返回原始 span + if (!config) { + return finalSpan + } + + // 如果 span 小于阈值,使用降级值 + return finalSpan >= config.threshold ? finalSpan : config.fallback +} + +/** + * 创建响应式 span 计算器 + * + * 返回一个函数,用于计算指定断点下的 span 值 + * + * @param defaultSpan 默认的 span 值 + * @returns span 计算函数 + * + * @example + * ```ts + * const getColSpan = createResponsiveSpanCalculator(6) + * getColSpan(undefined, 'xs') // 24 + * getColSpan(8, 'md') // 8 + * getColSpan(12, 'lg') // 12 + * ``` + */ +export function createResponsiveSpanCalculator(defaultSpan: number) { + return (itemSpan: number | undefined, breakpoint: ResponsiveBreakpoint): number => { + return calculateResponsiveSpan(itemSpan, defaultSpan, breakpoint) + } +} diff --git a/web/src/utils/form/validator.ts b/web/src/utils/form/validator.ts new file mode 100644 index 0000000..3670763 --- /dev/null +++ b/web/src/utils/form/validator.ts @@ -0,0 +1,316 @@ +/** + * 表单验证工具模块 + * + * 提供全面的表单字段验证功能 + * + * ## 主要功能 + * + * - 手机号码验证(中国大陆格式) + * - 固定电话验证(支持区号格式) + * - 用户账号验证(字母开头,支持数字和下划线) + * - 密码强度验证(普通密码、强密码) + * - 密码强度评估(弱、中、强) + * - IPv4 地址验证 + * - 邮箱地址验证(RFC 5322 标准) + * - URL 地址验证 + * - 身份证号码验证(18位,含校验码验证) + * - 银行卡号验证(Luhn 算法) + * - 字符串空格处理 + * + * ## 验证规则 + * + * - 手机号:1开头,第二位3-9,共11位 + * - 账号:字母开头,5-20位,支持字母数字下划线 + * - 普通密码:6-20位,必须包含字母和数字 + * - 强密码:8-20位,必须包含大小写字母、数字和特殊字符 + * - 身份证:18位,含出生日期和校验码验证 + * - 银行卡:13-19位,通过 Luhn 算法验证 + * + * @module utils/validation/formValidator + * @author Art Design Pro Team + */ + +/** + * 密码强度级别枚举 + */ +export enum PasswordStrength { + WEAK = '弱', + MEDIUM = '中', + STRONG = '强' +} + +/** + * 去除字符串首尾空格 + * @param value 待处理的字符串 + * @returns 返回去除首尾空格后的字符串 + */ +export function trimSpaces(value: string): string { + if (typeof value !== 'string') { + return '' + } + return value.trim() +} + +/** + * 验证手机号码(中国大陆) + * @param value 手机号码字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validatePhone(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + // 中国大陆手机号码:1开头,第二位为3-9,共11位数字 + const phoneRegex = /^1[3-9]\d{9}$/ + return phoneRegex.test(value.trim()) +} + +/** + * 验证固定电话号码(中国大陆) + * @param value 电话号码字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateTelPhone(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + // 支持格式:区号-号码,如:010-12345678、0755-1234567 + const telRegex = /^0\d{2,3}-?\d{7,8}$/ + return telRegex.test(value.trim().replace(/\s+/g, '')) +} + +/** + * 验证用户账号 + * @param value 账号字符串 + * @returns 返回验证结果,true表示格式正确 + * @description 规则:字母开头,5-20位,支持字母、数字、下划线 + */ +export function validateAccount(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + // 字母开头,5-20位,支持字母、数字、下划线 + const accountRegex = /^[a-zA-Z][a-zA-Z0-9_]{4,19}$/ + return accountRegex.test(value.trim()) +} + +/** + * 验证密码 + * @param value 密码字符串 + * @returns 返回验证结果,true表示格式正确 + * @description 规则:6-20位,必须包含字母和数字 + */ +export function validatePassword(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim() + + // 长度检查 + if (trimmedValue.length < 6 || trimmedValue.length > 20) { + return false + } + + // 必须包含字母和数字 + const hasLetter = /[a-zA-Z]/.test(trimmedValue) + const hasNumber = /\d/.test(trimmedValue) + + return hasLetter && hasNumber +} + +/** + * 验证强密码 + * @param value 密码字符串 + * @returns 返回验证结果,true表示格式正确 + * @description 规则:8-20位,必须包含大写字母、小写字母、数字和特殊字符 + */ +export function validateStrongPassword(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim() + + // 长度检查 + if (trimmedValue.length < 8 || trimmedValue.length > 20) { + return false + } + + // 必须包含:大写字母、小写字母、数字、特殊字符 + const hasUpperCase = /[A-Z]/.test(trimmedValue) + const hasLowerCase = /[a-z]/.test(trimmedValue) + const hasNumber = /\d/.test(trimmedValue) + const hasSpecialChar = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/.test(trimmedValue) + + return hasUpperCase && hasLowerCase && hasNumber && hasSpecialChar +} + +/** + * 获取密码强度 + * @param value 密码字符串 + * @returns 返回密码强度:弱、中、强 + * @description 弱:纯数字/纯字母/纯特殊字符;中:两种组合;强:三种或以上组合 + */ +export function getPasswordStrength(value: string): PasswordStrength { + if (!value || typeof value !== 'string') { + return PasswordStrength.WEAK + } + + const trimmedValue = value.trim() + + if (trimmedValue.length < 6) { + return PasswordStrength.WEAK + } + + const hasUpperCase = /[A-Z]/.test(trimmedValue) + const hasLowerCase = /[a-z]/.test(trimmedValue) + const hasNumber = /\d/.test(trimmedValue) + const hasSpecialChar = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/.test(trimmedValue) + + const typeCount = [hasUpperCase, hasLowerCase, hasNumber, hasSpecialChar].filter(Boolean).length + + if (typeCount >= 3) { + return PasswordStrength.STRONG + } else if (typeCount >= 2) { + return PasswordStrength.MEDIUM + } else { + return PasswordStrength.WEAK + } +} + +/** + * 验证IPv4地址 + * @param value IP地址字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateIPv4Address(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim() + const ipRegex = /^((25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(25[0-5]|2[0-4]\d|[01]?\d{1,2})$/ + + if (!ipRegex.test(trimmedValue)) { + return false + } + + // 额外检查每个段是否在有效范围内 + const segments = trimmedValue.split('.') + return segments.every((segment) => { + const num = parseInt(segment, 10) + return num >= 0 && num <= 255 + }) +} + +/** + * 验证邮箱地址 + * @param value 邮箱地址字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateEmail(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim() + + // RFC 5322 标准的简化版邮箱正则 + const emailRegex = + /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + + return emailRegex.test(trimmedValue) && trimmedValue.length <= 254 +} + +/** + * 验证URL地址 + * @param value URL字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateURL(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + try { + new URL(value.trim()) + return true + } catch { + return false + } +} + +/** + * 验证身份证号码(中国大陆) + * @param value 身份证号码字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateChineseIDCard(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim() + + // 18位身份证号码正则 + const idCardRegex = + /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ + + if (!idCardRegex.test(trimmedValue)) { + return false + } + + // 验证校验码 + const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] + const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] + + let sum = 0 + for (let i = 0; i < 17; i++) { + sum += parseInt(trimmedValue[i]) * weights[i] + } + + const checkCode = checkCodes[sum % 11] + return trimmedValue[17].toUpperCase() === checkCode +} + +/** + * 验证银行卡号 + * @param value 银行卡号字符串 + * @returns 返回验证结果,true表示格式正确 + */ +export function validateBankCard(value: string): boolean { + if (!value || typeof value !== 'string') { + return false + } + + const trimmedValue = value.trim().replace(/\s+/g, '') + + // 银行卡号通常为13-19位数字 + if (!/^\d{13,19}$/.test(trimmedValue)) { + return false + } + + // Luhn算法验证 + let sum = 0 + let shouldDouble = false + + for (let i = trimmedValue.length - 1; i >= 0; i--) { + let digit = parseInt(trimmedValue[i]) + + if (shouldDouble) { + digit *= 2 + if (digit > 9) { + digit = (digit % 10) + 1 + } + } + + sum += digit + shouldDouble = !shouldDouble + } + + return sum % 10 === 0 +} diff --git a/web/src/utils/http/error.ts b/web/src/utils/http/error.ts new file mode 100644 index 0000000..0f2c1ae --- /dev/null +++ b/web/src/utils/http/error.ts @@ -0,0 +1,182 @@ +/** + * HTTP 错误处理模块 + * + * 提供统一的 HTTP 请求错误处理机制 + * + * ## 主要功能 + * + * - 自定义 HttpError 错误类,封装错误信息、状态码、时间戳等 + * - 错误拦截和转换,将 Axios 错误转换为标准的 HttpError + * - 错误消息国际化处理,根据状态码返回对应的多语言错误提示 + * - 错误日志记录,便于问题追踪和调试 + * - 错误和成功消息的统一展示 + * - 类型守卫函数,用于判断错误类型 + * + * ## 使用场景 + * + * - HTTP 请求拦截器中统一处理错误 + * - 业务代码中捕获和处理特定错误 + * - 错误日志收集和上报 + * + * @module utils/http/error + * @author Art Design Pro Team + */ +import { AxiosError } from 'axios' +import { ApiStatus } from './status' +import { $t } from '@/locales' + +// 错误响应接口 +export interface ErrorResponse { + /** 错误状态码 */ + code: number + /** 错误消息 */ + msg: string + /** 错误附加数据 */ + data?: unknown +} + +// 错误日志数据接口 +export interface ErrorLogData { + /** 错误状态码 */ + code: number + /** 错误消息 */ + message: string + /** 错误附加数据 */ + data?: unknown + /** 错误发生时间戳 */ + timestamp: string + /** 请求 URL */ + url?: string + /** 请求方法 */ + method?: string + /** 错误堆栈信息 */ + stack?: string +} + +// 自定义 HttpError 类 +export class HttpError extends Error { + public readonly code: number + public readonly data?: unknown + public readonly timestamp: string + public readonly url?: string + public readonly method?: string + + constructor( + message: string, + code: number, + options?: { + data?: unknown + url?: string + method?: string + } + ) { + super(message) + this.name = 'HttpError' + this.code = code + this.data = options?.data + this.timestamp = new Date().toISOString() + this.url = options?.url + this.method = options?.method + } + + public toLogData(): ErrorLogData { + return { + code: this.code, + message: this.message, + data: this.data, + timestamp: this.timestamp, + url: this.url, + method: this.method, + stack: this.stack + } + } +} + +/** + * 获取错误消息 + * @param status 错误状态码 + * @returns 错误消息 + */ +const getErrorMessage = (status: number): string => { + const errorMap: Record = { + [ApiStatus.unauthorized]: 'httpMsg.unauthorized', + [ApiStatus.forbidden]: 'httpMsg.forbidden', + [ApiStatus.notFound]: 'httpMsg.notFound', + [ApiStatus.methodNotAllowed]: 'httpMsg.methodNotAllowed', + [ApiStatus.requestTimeout]: 'httpMsg.requestTimeout', + [ApiStatus.internalServerError]: 'httpMsg.internalServerError', + [ApiStatus.badGateway]: 'httpMsg.badGateway', + [ApiStatus.serviceUnavailable]: 'httpMsg.serviceUnavailable', + [ApiStatus.gatewayTimeout]: 'httpMsg.gatewayTimeout' + } + + return $t(errorMap[status] || 'httpMsg.internalServerError') +} + +/** + * 处理错误 + * @param error 错误对象 + * @returns 错误对象 + */ +export function handleError(error: AxiosError): never { + // 处理取消的请求 + if (error.code === 'ERR_CANCELED') { + console.warn('Request cancelled:', error.message) + throw new HttpError($t('httpMsg.requestCancelled'), ApiStatus.error) + } + + const statusCode = error.response?.status + const errorMessage = error.response?.data?.msg || error.message + const requestConfig = error.config + + // 处理网络错误 + if (!error.response) { + throw new HttpError($t('httpMsg.networkError'), ApiStatus.error, { + url: requestConfig?.url, + method: requestConfig?.method?.toUpperCase() + }) + } + + // 处理 HTTP 状态码错误 + const message = statusCode + ? getErrorMessage(statusCode) + : errorMessage || $t('httpMsg.requestFailed') + throw new HttpError(message, statusCode || ApiStatus.error, { + data: error.response.data, + url: requestConfig?.url, + method: requestConfig?.method?.toUpperCase() + }) +} + +/** + * 显示错误消息 + * @param error 错误对象 + * @param showMessage 是否显示错误消息 + */ +export function showError(error: HttpError, showMessage: boolean = true): void { + if (showMessage) { + ElMessage.error(error.message) + } + // 记录错误日志 + console.error('[HTTP Error]', error.toLogData()) +} + +/** + * 显示成功消息 + * @param message 成功消息 + * @param showMessage 是否显示消息 + */ +export function showSuccess(message: string, showMessage: boolean = true): void { + if (showMessage) { + ElMessage.success(message) + } +} + +/** + * 判断是否为 HttpError 类型 + * @param error 错误对象 + * @returns 是否为 HttpError 类型 + */ +export const isHttpError = (error: unknown): error is HttpError => { + return error instanceof HttpError +} diff --git a/web/src/utils/http/index.ts b/web/src/utils/http/index.ts new file mode 100755 index 0000000..0e0002a --- /dev/null +++ b/web/src/utils/http/index.ts @@ -0,0 +1,214 @@ +/** + * HTTP 请求封装模块 + * 基于 Axios 封装的 HTTP 请求工具,提供统一的请求/响应处理 + * + * ## 主要功能 + * + * - 请求/响应拦截器(自动添加 Token、统一错误处理) + * - 401 未授权自动登出(带防抖机制) + * - 请求失败自动重试(可配置) + * - 统一的成功/错误消息提示 + * - 支持 GET/POST/PUT/DELETE 等常用方法 + * + * @module utils/http + * @author Art Design Pro Team + */ + +import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios' +import { useUserStore } from '@/store/modules/user' +import { ApiStatus } from './status' +import { HttpError, handleError, showError, showSuccess } from './error' +import { $t } from '@/locales' +import { BaseResponse } from '@/types' + +/** 请求配置常量 */ +const REQUEST_TIMEOUT = 15000 +const LOGOUT_DELAY = 500 +const MAX_RETRIES = 0 +const RETRY_DELAY = 1000 +const UNAUTHORIZED_DEBOUNCE_TIME = 3000 + +/** 401防抖状态 */ +let isUnauthorizedErrorShown = false +let unauthorizedTimer: NodeJS.Timeout | null = null + +/** 扩展 AxiosRequestConfig */ +interface ExtendedAxiosRequestConfig extends AxiosRequestConfig { + showErrorMessage?: boolean + showSuccessMessage?: boolean +} + +const { VITE_API_URL, VITE_WITH_CREDENTIALS } = import.meta.env + +/** Axios实例 */ +const axiosInstance = axios.create({ + timeout: REQUEST_TIMEOUT, + baseURL: VITE_API_URL, + withCredentials: VITE_WITH_CREDENTIALS === 'true', + validateStatus: (status) => status >= 200 && status < 300, + transformResponse: [ + (data, headers) => { + const contentType = headers['content-type'] + if (contentType?.includes('application/json')) { + try { + return JSON.parse(data) + } catch { + return data + } + } + return data + } + ] +}) + +/** 请求拦截器 */ +axiosInstance.interceptors.request.use( + (request: InternalAxiosRequestConfig) => { + const { accessToken } = useUserStore() + if (accessToken) request.headers.set('Authorization', accessToken) + + if (request.data && !(request.data instanceof FormData) && !request.headers['Content-Type']) { + request.headers.set('Content-Type', 'application/json') + request.data = JSON.stringify(request.data) + } + + return request + }, + (error) => { + showError(createHttpError($t('httpMsg.requestConfigError'), ApiStatus.error)) + return Promise.reject(error) + } +) + +/** 响应拦截器 */ +axiosInstance.interceptors.response.use( + (response: AxiosResponse) => { + const { code, msg } = response.data + if (code === ApiStatus.success) return response + if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg) + throw createHttpError(msg || $t('httpMsg.requestFailed'), code) + }, + (error) => { + if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError() + return Promise.reject(handleError(error)) + } +) + +/** 统一创建HttpError */ +function createHttpError(message: string, code: number) { + return new HttpError(message, code) +} + +/** 处理401错误(带防抖) */ +function handleUnauthorizedError(message?: string): never { + const error = createHttpError(message || $t('httpMsg.unauthorized'), ApiStatus.unauthorized) + + if (!isUnauthorizedErrorShown) { + isUnauthorizedErrorShown = true + logOut() + + unauthorizedTimer = setTimeout(resetUnauthorizedError, UNAUTHORIZED_DEBOUNCE_TIME) + + showError(error, true) + throw error + } + + throw error +} + +/** 重置401防抖状态 */ +function resetUnauthorizedError() { + isUnauthorizedErrorShown = false + if (unauthorizedTimer) clearTimeout(unauthorizedTimer) + unauthorizedTimer = null +} + +/** 退出登录函数 */ +function logOut() { + setTimeout(() => { + useUserStore().logOut() + }, LOGOUT_DELAY) +} + +/** 是否需要重试 */ +function shouldRetry(statusCode: number) { + return [ + ApiStatus.requestTimeout, + ApiStatus.internalServerError, + ApiStatus.badGateway, + ApiStatus.serviceUnavailable, + ApiStatus.gatewayTimeout + ].includes(statusCode) +} + +/** 请求重试逻辑 */ +async function retryRequest( + config: ExtendedAxiosRequestConfig, + retries: number = MAX_RETRIES +): Promise { + try { + return await request(config) + } catch (error) { + if (retries > 0 && error instanceof HttpError && shouldRetry(error.code)) { + await delay(RETRY_DELAY) + return retryRequest(config, retries - 1) + } + throw error + } +} + +/** 延迟函数 */ +function delay(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)) +} + +/** 请求函数 */ +async function request(config: ExtendedAxiosRequestConfig): Promise { + // POST | PUT 参数自动填充 + if ( + ['POST', 'PUT'].includes(config.method?.toUpperCase() || '') && + config.params && + !config.data + ) { + config.data = config.params + config.params = undefined + } + + try { + const res = await axiosInstance.request>(config) + + // 显示成功消息 + if (config.showSuccessMessage && res.data.msg) { + showSuccess(res.data.msg) + } + + return res.data.data as T + } catch (error) { + if (error instanceof HttpError && error.code !== ApiStatus.unauthorized) { + const showMsg = config.showErrorMessage !== false + showError(error, showMsg) + } + return Promise.reject(error) + } +} + +/** API方法集合 */ +const api = { + get(config: ExtendedAxiosRequestConfig) { + return retryRequest({ ...config, method: 'GET' }) + }, + post(config: ExtendedAxiosRequestConfig) { + return retryRequest({ ...config, method: 'POST' }) + }, + put(config: ExtendedAxiosRequestConfig) { + return retryRequest({ ...config, method: 'PUT' }) + }, + del(config: ExtendedAxiosRequestConfig) { + return retryRequest({ ...config, method: 'DELETE' }) + }, + request(config: ExtendedAxiosRequestConfig) { + return retryRequest(config) + } +} + +export default api diff --git a/web/src/utils/http/status.ts b/web/src/utils/http/status.ts new file mode 100755 index 0000000..989bb37 --- /dev/null +++ b/web/src/utils/http/status.ts @@ -0,0 +1,18 @@ +/** + * 接口状态码 + */ +export enum ApiStatus { + success = 200, // 成功 + error = 400, // 错误 + unauthorized = 401, // 未授权 + forbidden = 403, // 禁止访问 + notFound = 404, // 未找到 + methodNotAllowed = 405, // 方法不允许 + requestTimeout = 408, // 请求超时 + internalServerError = 500, // 服务器错误 + notImplemented = 501, // 未实现 + badGateway = 502, // 网关错误 + serviceUnavailable = 503, // 服务不可用 + gatewayTimeout = 504, // 网关超时 + httpVersionNotSupported = 505 // HTTP版本不支持 +} diff --git a/web/src/utils/index.ts b/web/src/utils/index.ts new file mode 100644 index 0000000..f1e1b77 --- /dev/null +++ b/web/src/utils/index.ts @@ -0,0 +1,34 @@ +/** + * Utils 工具函数统一导出 + * 提供向后兼容性和便捷导入 + * + * @module utils/index + * @author Art Design Pro Team + */ + +// UI 相关 +export * from './ui' + +// 路由相关 +export * from './router' + +// 路由导航相关 +export * from './navigation' + +// 系统管理相关 +export * from './sys' + +// 常量定义相关 +export * from './constants' + +// 存储相关 +export * from './storage' + +// HTTP 相关 +export * from './http' + +// 表单相关 +export * from './form' + +// socket 相关 +export * from './socket' diff --git a/web/src/utils/navigation/index.ts b/web/src/utils/navigation/index.ts new file mode 100644 index 0000000..0b84e78 --- /dev/null +++ b/web/src/utils/navigation/index.ts @@ -0,0 +1,10 @@ +/** + * 路由和导航相关工具函数统一导出 + * + * @module utils/navigation/index + * @author Art Design Pro Team + */ + +export * from './jump' +export * from './worktab' +export * from './route' diff --git a/web/src/utils/navigation/jump.ts b/web/src/utils/navigation/jump.ts new file mode 100644 index 0000000..320edb5 --- /dev/null +++ b/web/src/utils/navigation/jump.ts @@ -0,0 +1,68 @@ +/** + * 导航跳转工具模块 + * + * 提供统一的页面跳转和导航功能 + * + * ## 主要功能 + * + * - 外部链接打开(新窗口) + * - 菜单项跳转处理(支持内部路由和外部链接) + * - iframe 页面跳转支持 + * - 递归查找并跳转到第一个可见的子菜单 + * - 智能判断跳转目标类型(外部链接/内部路由) + * + * @module utils/navigation/jump + * @author Art Design Pro Team + */ +import { AppRouteRecord } from '@/types/router' +import { router } from '@/router' +import { isNavigableMenuItem } from './route' + +// 打开外部链接 +export const openExternalLink = (link: string) => { + window.open(link, '_blank') +} + +/** + * 菜单跳转 + * @param item 菜单项 + * @param jumpToFirst 是否跳转到第一个子菜单 + * @returns + */ +export const handleMenuJump = (item: AppRouteRecord, jumpToFirst: boolean = false) => { + // 处理外部链接 + const { link, isIframe } = item.meta + if (link && !isIframe) { + return openExternalLink(link) + } + + // 如果不需要跳转到第一个子菜单,或者没有子菜单,直接跳转当前路径 + if (!jumpToFirst || !item.children?.length) { + return router.push(item.path) + } + + // 递归查找第一个可导航的叶子节点菜单 + const findFirstLeafMenu = (items: AppRouteRecord[]): AppRouteRecord | undefined => { + for (const child of items) { + if (isNavigableMenuItem(child)) { + return child.children?.length ? findFirstLeafMenu(child.children) || child : child + } + } + return undefined + } + + const firstChild = findFirstLeafMenu(item.children) + + // 如果子菜单都不可见,则回退到父级页面自身。 + if (!firstChild) { + return router.push(item.path) + } + + // 如果第一个子菜单是外部链接则打开新窗口 + if (firstChild.meta?.link) { + return openExternalLink(firstChild.meta.link) + } + + // 跳转到子菜单路径 + router.push(firstChild.path) +} diff --git a/web/src/utils/navigation/route.ts b/web/src/utils/navigation/route.ts new file mode 100644 index 0000000..518bcb9 --- /dev/null +++ b/web/src/utils/navigation/route.ts @@ -0,0 +1,85 @@ +/** + * 路由工具模块 + * + * 提供路由处理和菜单路径相关的工具函数 + * + * ## 主要功能 + * + * - iframe 路由检测,判断是否为外部嵌入页面 + * - 菜单项有效性验证,过滤隐藏和无效菜单 + * - 路径标准化处理,统一路径格式 + * - 递归查找菜单树中第一个有效路径 + * - 支持多级嵌套菜单的路径解析 + * + * ## 使用场景 + * + * - 系统初始化时获取默认跳转路径 + * - 菜单权限过滤后获取首个可访问页面 + * - 路由重定向逻辑处理 + * - iframe 页面特殊处理 + * + * @module utils/navigation/route + * @author Art Design Pro Team + */ + +import { AppRouteRecord } from '@/types' + +// 检查是否为 iframe 路由 +export function isIframe(url: string): boolean { + return url.startsWith('/outside/iframe/') +} + +/** + * 判断菜单项是否可作为默认导航落点 + * 隐藏的全屏页面虽然不展示在菜单中,但仍然可能是合法首页。 + */ +export const isNavigableMenuItem = (menuItem: AppRouteRecord): boolean => { + if (!menuItem.path || !menuItem.path.trim()) { + return false + } + + if (!menuItem.meta?.isHide) { + return true + } + + return menuItem.meta?.isFullPage === true +} + +/** + * 标准化路径格式 + * @param path 路径 + * @returns 标准化后的路径 + */ +const normalizePath = (path: string): string => { + return path.startsWith('/') ? path : `/${path}` +} + +/** + * 递归获取菜单的第一个有效路径 + * @param menuList 菜单列表 + * @returns 第一个有效路径,如果没有找到则返回空字符串 + */ +export const getFirstMenuPath = (menuList: AppRouteRecord[]): string => { + if (!Array.isArray(menuList) || menuList.length === 0) { + return '' + } + + for (const menuItem of menuList) { + if (!isNavigableMenuItem(menuItem)) { + continue + } + + // 如果有子菜单,优先查找子菜单 + if (menuItem.children?.length) { + const childPath = getFirstMenuPath(menuItem.children) + if (childPath) { + return childPath + } + } + + // 返回当前菜单项的标准化路径 + return normalizePath(menuItem.path!) + } + + return '' +} diff --git a/web/src/utils/navigation/worktab.ts b/web/src/utils/navigation/worktab.ts new file mode 100644 index 0000000..6db6a77 --- /dev/null +++ b/web/src/utils/navigation/worktab.ts @@ -0,0 +1,67 @@ +/** + * 工作标签页管理模块 + * + * 提供工作标签页(Worktab)的自动管理功能 + * + * ## 主要功能 + * + * - 根据路由导航自动创建和更新工作标签页 + * - iframe 页面标签页特殊处理 + * - 标签页信息提取(标题、路径、缓存状态等) + * - 固定标签页支持 + * - 根据系统设置控制标签页显示 + * - 首页标签页特殊处理 + * + * ## 使用场景 + * + * - 路由守卫中自动创建标签页 + * - 页面切换时更新标签页状态 + * - 多标签页导航系统 + * + * @module utils/navigation/worktab + * @author Art Design Pro Team + */ +import { useWorktabStore } from '@/store/modules/worktab' +import { RouteLocationNormalized } from 'vue-router' +import { isIframe } from './route' +import { useSettingStore } from '@/store/modules/setting' +import { IframeRouteManager } from '@/router/core' +import { useCommon } from '@/hooks/core/useCommon' + +/** + * 根据当前路由信息设置工作标签页(worktab) + * @param to 当前路由对象 + */ +export const setWorktab = (to: RouteLocationNormalized): void => { + const worktabStore = useWorktabStore() + const { meta, path, name, params, query } = to + if (!meta.isHideTab) { + // 如果是 iframe 页面,则特殊处理工作标签页 + if (isIframe(path)) { + const iframeRoute = IframeRouteManager.getInstance().findByPath(to.path) + + if (iframeRoute?.meta) { + worktabStore.openTab({ + title: iframeRoute.meta.title, + icon: meta.icon as string, + path, + name: name as string, + keepAlive: meta.keepAlive as boolean, + params, + query + }) + } + } else if (useSettingStore().showWorkTab || path === useCommon().homePath.value) { + worktabStore.openTab({ + title: meta.title as string, + icon: meta.icon as string, + path, + name: name as string, + keepAlive: meta.keepAlive as boolean, + params, + query, + fixedTab: meta.fixedTab as boolean + }) + } + } +} diff --git a/web/src/utils/router.ts b/web/src/utils/router.ts new file mode 100644 index 0000000..8c838ff --- /dev/null +++ b/web/src/utils/router.ts @@ -0,0 +1,61 @@ +/** + * 路由工具函数 + * + * 提供路由相关的工具函数 + * + * @module utils/router + */ +import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router' +import AppConfig from '@/config' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import i18n, { $t } from '@/locales' + +/** 扩展的路由配置类型 */ +export type AppRouteRecordRaw = RouteRecordRaw & { + hidden?: boolean +} + +/** 顶部进度条配置 */ +export const configureNProgress = () => { + NProgress.configure({ + easing: 'ease', + speed: 600, + showSpinner: false, + parent: 'body' + }) +} + +/** + * 设置页面标题,根据路由元信息和系统信息拼接标题 + * @param to 当前路由对象 + */ +export const setPageTitle = (to: RouteLocationNormalized): void => { + const { title } = to.meta + if (title) { + setTimeout(() => { + document.title = `${formatMenuTitle(String(title))} - ${AppConfig.systemInfo.name}` + }, 150) + } +} + +/** + * 格式化菜单标题 + * @param title 菜单标题,可以是 i18n 的 key,也可以是字符串 + * @returns 格式化后的菜单标题 + */ +export const formatMenuTitle = (title: string): string => { + if (title) { + if (title.startsWith('menus.')) { + // 使用 te() 方法检查翻译键值是否存在,避免控制台警告 + if (i18n.global.te(title)) { + return $t(title) + } else { + // 如果翻译不存在,返回键值的最后部分作为fallback + return title.split('.').pop() || title + } + } + return title + } + return '' +} diff --git a/web/src/utils/socket/index.ts b/web/src/utils/socket/index.ts new file mode 100644 index 0000000..ac80da1 --- /dev/null +++ b/web/src/utils/socket/index.ts @@ -0,0 +1,423 @@ +interface WebSocketOptions { + url?: string + messageHandler: (event: MessageEvent) => void + reconnectInterval?: number // 重连间隔(ms) + heartbeatInterval?: number // 心跳检测间隔(ms) + pingInterval?: number // 发送ping间隔(ms) + reconnectTimeout?: number // 重连超时时间(ms) + maxReconnectAttempts?: number // 最大重连次数 + connectionTimeout?: number // 连接建立超时时间(ms) +} + +export default class WebSocketClient { + private static instance: WebSocketClient | null = null + private ws: WebSocket | null = null + private url: string + private messageHandler: (event: MessageEvent) => void + private reconnectInterval: number + private heartbeatInterval: number + private pingInterval: number + private reconnectTimeout: number + private maxReconnectAttempts: number + private connectionTimeout: number + private reconnectAttempts: number = 0 // 当前重连次数 + + // 消息队列 - 缓存连接建立前的消息 + private messageQueue: Array = [] + + // 定时器 + private detectionTimer: NodeJS.Timeout | null = null + private timeoutTimer: NodeJS.Timeout | null = null + private reconnectTimer: NodeJS.Timeout | null = null + private pingTimer: NodeJS.Timeout | null = null + private connectionTimer: NodeJS.Timeout | null = null // 连接超时定时器 + + // 状态标识 + private isConnected: boolean = false + private isConnecting: boolean = false // 是否正在连接中 + private stopReconnect: boolean = false + private isReconnecting: boolean = false + + private constructor(options: WebSocketOptions) { + this.url = options.url || (process.env.VUE_APP_LOGIN_WEBSOCKET as string) + this.messageHandler = options.messageHandler + this.reconnectInterval = options.reconnectInterval ?? 20 * 1000 // 默认20秒 + this.heartbeatInterval = options.heartbeatInterval ?? 5 * 1000 // 默认5秒 + this.pingInterval = options.pingInterval ?? 10 * 1000 // 默认10秒 + this.reconnectTimeout = options.reconnectTimeout ?? 30 * 1000 // 默认30秒 + this.maxReconnectAttempts = options.maxReconnectAttempts ?? 10 // 默认最多重连10次 + this.connectionTimeout = options.connectionTimeout ?? 10 * 1000 // 连接超时10秒 + } + + // 单例模式获取实例 + static getInstance(options: WebSocketOptions): WebSocketClient { + if (!WebSocketClient.instance) { + WebSocketClient.instance = new WebSocketClient(options) + } else { + // 更新消息处理器 + WebSocketClient.instance.messageHandler = options.messageHandler + // 如果提供了新的URL,则更新并重新连接 + if (options.url && WebSocketClient.instance.url !== options.url) { + WebSocketClient.instance.url = options.url + WebSocketClient.instance.reconnectAttempts = 0 + WebSocketClient.instance.init() + } + } + return WebSocketClient.instance + } + + // 初始化连接 + init(): void { + this.connect(true) + } + + private connect(resetReconnectAttempts: boolean = false): void { + // 如果正在连接中,不重复连接 + if (this.isConnecting) { + console.log('正在建立WebSocket连接中...') + return + } + + // 如果已连接,不重复连接 + if (this.ws?.readyState === WebSocket.OPEN) { + console.warn('WebSocket连接已存在') + this.flushMessageQueue() // 确保队列中的消息被发送 + return + } + + try { + this.isConnecting = true + this.stopReconnect = false + if (resetReconnectAttempts) { + this.reconnectAttempts = 0 + this.isReconnecting = false + this.clearTimer('reconnectTimer') + } + this.ws = new WebSocket(this.url) + + // 设置连接超时检测 + this.clearTimer('connectionTimer') + this.connectionTimer = setTimeout(() => { + console.error(`WebSocket连接超时 (${this.connectionTimeout}ms):${this.url}`) + this.handleConnectionTimeout() + }, this.connectionTimeout) + + this.ws.onopen = (event) => this.handleOpen(event) + this.ws.onmessage = (event) => this.handleMessage(event) + this.ws.onclose = (event) => this.handleClose(event) + this.ws.onerror = (event) => this.handleError(event) + } catch (error) { + console.error('WebSocket初始化失败:', error) + this.isConnecting = false + this.reconnect() + } + } + + // 处理连接超时 + private handleConnectionTimeout(): void { + if (this.ws?.readyState !== WebSocket.OPEN) { + console.error('WebSocket连接超时,强制关闭连接') + this.ws?.close(1000, 'Connection timeout') + this.isConnecting = false + this.reconnect() + } + } + + // 关闭连接 + close(force?: boolean): void { + this.clearAllTimers() + this.stopReconnect = true + this.isReconnecting = false + this.isConnecting = false + + if (this.ws) { + // 1000 表示正常关闭 + this.ws.close(force ? 1001 : 1000, force ? 'Force closed' : 'Normal close') + this.ws = null + } + + this.isConnected = false + } + + // 发送消息 - 增加消息队列 + send(data: string | ArrayBufferLike | Blob | ArrayBufferView, immediate: boolean = false): void { + // 如果要求立即发送且未连接,则直接报错 + if (immediate && (!this.ws || this.ws.readyState !== WebSocket.OPEN)) { + console.error('WebSocket未连接,无法立即发送消息') + return + } + + // 如果未连接且不要求立即发送,则加入消息队列 + if (!this.ws || this.ws.readyState !== WebSocket.OPEN) { + console.log('WebSocket未连接,消息已加入队列等待发送') + this.messageQueue.push(data) + // 如果未在重连中,则尝试重连 + if (!this.isConnecting && !this.stopReconnect) { + this.init() + } + return + } + + try { + this.ws.send(data) + } catch (error) { + console.error('WebSocket发送消息失败:', error) + // 发送失败时将消息加入队列,等待重连后重试 + this.messageQueue.push(data) + this.reconnect() + } + } + + // 发送队列中的消息 + private flushMessageQueue(): void { + if (this.messageQueue.length > 0 && this.ws?.readyState === WebSocket.OPEN) { + console.log(`发送队列中的${this.messageQueue.length}条消息`) + while (this.messageQueue.length > 0) { + const data = this.messageQueue.shift() + if (data) { + try { + this.ws?.send(data) + } catch (error) { + console.error('发送队列消息失败:', error) + // 如果发送失败,将消息放回队列头部 + if (data) this.messageQueue.unshift(data) + break + } + } + } + } + } + + // 处理连接打开 + private handleOpen(event: Event): void { + console.log('WebSocket连接成功', event) + this.clearTimer('connectionTimer') // 清除连接超时定时器 + this.isConnected = true + this.isConnecting = false + this.isReconnecting = false + this.stopReconnect = false + this.reconnectAttempts = 0 // 重置重连次数 + this.startHeartbeat() + this.startPing() + this.flushMessageQueue() // 发送队列中的消息 + } + + // 处理收到的消息 + private handleMessage(event: MessageEvent): void { + console.log('收到WebSocket消息:', event) + this.resetHeartbeat() + this.messageHandler(event) + } + + // 处理连接关闭 + private handleClose(event: CloseEvent): void { + console.log( + `WebSocket断开: 代码=${event.code}, 原因=${event.reason}, 干净关闭=${event.wasClean}` + ) + + // 1000 是正常关闭代码 + const isNormalClose = event.code === 1000 + + this.isConnected = false + this.isConnecting = false + this.clearConnectionTimers() + this.ws = null + + if (!this.stopReconnect && !isNormalClose) { + this.reconnect() + } + } + + // 处理错误 - 增加详细错误信息 + private handleError(event: Event): void { + console.error('WebSocket连接错误:') + console.error('错误事件:', event) + console.error( + '当前连接状态:', + this.ws?.readyState ? this.getReadyStateText(this.ws.readyState) : '未初始化' + ) + + this.isConnected = false + this.isConnecting = false + + // 只有在未停止重连的情况下才尝试重连 + if (!this.stopReconnect) { + this.reconnect() + } + } + + private closeCurrentSocketForReconnect(): void { + this.clearConnectionTimers() + this.isConnected = false + this.isConnecting = false + + if (this.ws) { + this.ws.onopen = null + this.ws.onmessage = null + this.ws.onclose = null + this.ws.onerror = null + + if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) { + this.ws.close(1001, 'Reconnect') + } + + this.ws = null + } + } + + // 转换连接状态为文本描述 + private getReadyStateText(state: number): string { + switch (state) { + case WebSocket.CONNECTING: + return 'CONNECTING (0) - 正在连接' + case WebSocket.OPEN: + return 'OPEN (1) - 已连接' + case WebSocket.CLOSING: + return 'CLOSING (2) - 正在关闭' + case WebSocket.CLOSED: + return 'CLOSED (3) - 已关闭' + default: + return `未知状态 (${state})` + } + } + + // 开始心跳检测 + private startHeartbeat(): void { + this.clearTimer('detectionTimer') + this.clearTimer('timeoutTimer') + + this.detectionTimer = setTimeout(() => { + this.isConnected = this.ws?.readyState === WebSocket.OPEN + + if (!this.isConnected) { + console.warn('WebSocket心跳检测失败,尝试重连') + this.reconnect() + + this.timeoutTimer = setTimeout(() => { + console.warn('WebSocket重连超时') + this.close() + }, this.reconnectTimeout) + } + }, this.heartbeatInterval) + } + + // 重置心跳检测 + private resetHeartbeat(): void { + this.clearTimer('detectionTimer') + this.clearTimer('timeoutTimer') + this.startHeartbeat() + } + + // 开始发送ping消息 + private startPing(): void { + this.clearTimer('pingTimer') + + this.pingTimer = setInterval(() => { + if (this.ws?.readyState !== WebSocket.OPEN) { + console.warn('WebSocket未连接,停止发送ping') + this.clearTimer('pingTimer') + this.reconnect() + return + } + + try { + this.ws.send('ping') + console.log('发送ping消息') + } catch (error) { + console.error('发送ping消息失败:', error) + this.clearTimer('pingTimer') + this.reconnect() + } + }, this.pingInterval) + } + + // 重连 - 增加重连次数限制 + private reconnect(): void { + if (this.stopReconnect || this.isConnecting || this.reconnectInterval <= 0) { + return + } + + // 检查是否超过最大重连次数 + if (this.reconnectAttempts >= this.maxReconnectAttempts) { + console.error(`已达到最大重连次数(${this.maxReconnectAttempts}),停止重连`) + this.close(true) + return + } + + this.reconnectAttempts++ + this.isReconnecting = true + this.closeCurrentSocketForReconnect() + + const delay = this.calculateReconnectDelay() + console.log( + `将在${delay / 1000}秒后尝试重新连接(第${this.reconnectAttempts}/${this.maxReconnectAttempts}次)` + ) + + this.clearTimer('reconnectTimer') + this.reconnectTimer = setTimeout(() => { + console.log(`尝试重新连接WebSocket(第${this.reconnectAttempts}次)`) + this.connect(false) + }, delay) + } + + // 计算重连延迟 - 指数退避策略 + private calculateReconnectDelay(): number { + // 基础延迟 + 随机值,避免多个客户端同时重连 + const jitter = Math.random() * 1000 // 0-1秒的随机延迟 + const baseDelay = Math.min( + this.reconnectInterval * Math.pow(1.5, this.reconnectAttempts - 1), + this.reconnectInterval * 5 + ) + return baseDelay + jitter + } + + // 清除指定定时器 + private clearTimer( + timerName: + | 'detectionTimer' + | 'timeoutTimer' + | 'reconnectTimer' + | 'pingTimer' + | 'connectionTimer' + ): void { + if (this[timerName]) { + clearTimeout(this[timerName] as NodeJS.Timeout) + this[timerName] = null + } + } + + // 清除所有定时器 + private clearAllTimers(): void { + this.clearConnectionTimers() + this.clearTimer('reconnectTimer') + } + + private clearConnectionTimers(): void { + this.clearTimer('detectionTimer') + this.clearTimer('timeoutTimer') + this.clearTimer('pingTimer') + this.clearTimer('connectionTimer') + } + + // 获取当前连接状态 + get isWebSocketConnected(): boolean { + return this.isConnected + } + + // 获取当前连接状态文本 + get connectionStatusText(): string { + if (this.isConnecting) return '正在连接' + if (this.isConnected) return '已连接' + if (this.isReconnecting && this.reconnectAttempts > 0) + return `重连中(${this.reconnectAttempts}/${this.maxReconnectAttempts})` + return '已断开' + } + + // 销毁实例 + static destroyInstance(): void { + if (WebSocketClient.instance) { + WebSocketClient.instance.close() + WebSocketClient.instance = null + } + } +} diff --git a/web/src/utils/storage/index.ts b/web/src/utils/storage/index.ts new file mode 100644 index 0000000..a4366f0 --- /dev/null +++ b/web/src/utils/storage/index.ts @@ -0,0 +1,7 @@ +/** + * 存储相关工具函数统一导出 + */ + +export * from './storage' +export * from './storage-config' +export * from './storage-key-manager' diff --git a/web/src/utils/storage/storage-config.ts b/web/src/utils/storage/storage-config.ts new file mode 100644 index 0000000..c53b489 --- /dev/null +++ b/web/src/utils/storage/storage-config.ts @@ -0,0 +1,125 @@ +/** + * 存储配置管理模块 + * + * 提供统一的本地存储配置和工具方法 + * + * ## 主要功能 + * + * - 版本化存储键管理,支持多版本数据隔离 + * - 存储键名生成和解析(带版本前缀) + * - 版本号提取和验证 + * - 存储键匹配的正则表达式生成 + * - 旧版本存储键兼容处理 + * - 升级和登出延迟配置 + * - 主题存储键配置 + * + * ## 使用场景 + * + * - Pinia Store 持久化存储 + * - 应用版本升级时的数据迁移 + * - 多版本数据清理 + * - 存储键的统一管理和规范 + * + * 存储键格式:sys-v{version}-{storeId} + * 例如:sys-v1.0.0-user, sys-v1.0.0-setting + * + * @module utils/storage/storage-config + * @author Art Design Pro Team + */ +export class StorageConfig { + /** 当前应用版本 */ + static readonly CURRENT_VERSION = __APP_VERSION__ + + /** 存储键前缀 */ + static readonly STORAGE_PREFIX = 'sys-v' + + /** 版本键名 */ + static readonly VERSION_KEY = 'sys-version' + + /** 主题键名(index.html中使用了,如果修改,需要同步修改) */ + static readonly THEME_KEY = 'sys-theme' + + /** 上次登录用户ID键名(用于判断是否为同一用户登录) */ + static readonly LAST_USER_ID_KEY = 'sys-last-user-id' + + /** 响应式布局切换时暂存桌面端菜单类型 */ + static readonly RESPONSIVE_MENU_TYPE_KEY = 'sys-responsive-menu-type' + + /** 跳过升级检查的版本 */ + static readonly SKIP_UPGRADE_VERSION = '1.0.0' + + /** 升级处理延迟时间(毫秒) */ + static readonly UPGRADE_DELAY = 1000 + + /** 登出延迟时间(毫秒) */ + static readonly LOGOUT_DELAY = 1000 + + /** + * 生成版本化的存储键名 + * @param storeId 存储ID + * @param version 版本号,默认使用当前版本 + */ + static generateStorageKey(storeId: string, version: string = this.CURRENT_VERSION): string { + return `${this.STORAGE_PREFIX}${version}-${storeId}` + } + + /** + * 生成旧版本的存储键名(不带分隔符) + * @param version 版本号,默认使用当前版本 + */ + static generateLegacyKey(version: string = this.CURRENT_VERSION): string { + return `${this.STORAGE_PREFIX}${version}` + } + + /** + * 创建存储键匹配的正则表达式 + * @param storeId 存储ID + */ + static createKeyPattern(storeId: string): RegExp { + return new RegExp(`^${this.STORAGE_PREFIX}[^-]+-${storeId}$`) + } + + /** + * 创建当前版本存储键匹配的正则表达式 + */ + static createCurrentVersionPattern(): RegExp { + return new RegExp(`^${this.STORAGE_PREFIX}${this.CURRENT_VERSION}-`) + } + + /** + * 创建任意版本存储键匹配的正则表达式 + */ + static createVersionPattern(): RegExp { + return new RegExp(`^${this.STORAGE_PREFIX}`) + } + + /** + * 检查是否为当前版本的键 + */ + static isCurrentVersionKey(key: string): boolean { + return key.startsWith(`${this.STORAGE_PREFIX}${this.CURRENT_VERSION}`) + } + + /** + * 检查是否为版本化的键 + */ + static isVersionedKey(key: string): boolean { + return key.startsWith(this.STORAGE_PREFIX) + } + + /** + * 从存储键中提取版本号 + */ + static extractVersionFromKey(key: string): string | null { + const match = key.match(new RegExp(`^${this.STORAGE_PREFIX}([^-]+)`)) + return match ? match[1] : null + } + + /** + * 从存储键中提取存储ID + */ + static extractStoreIdFromKey(key: string): string | null { + const match = key.match(new RegExp(`^${this.STORAGE_PREFIX}[^-]+-(.+)$`)) + return match ? match[1] : null + } +} diff --git a/web/src/utils/storage/storage-key-manager.ts b/web/src/utils/storage/storage-key-manager.ts new file mode 100644 index 0000000..ba14f65 --- /dev/null +++ b/web/src/utils/storage/storage-key-manager.ts @@ -0,0 +1,97 @@ +/** + * 存储键名管理器模块 + * + * 提供智能的版本化存储键管理和数据迁移功能 + * + * ## 主要功能 + * + * - 自动生成当前版本的存储键名 + * - 检测当前版本数据是否存在 + * - 查找其他版本的同名存储数据 + * - 自动将旧版本数据迁移到当前版本 + * - 数据迁移日志记录 + * - 迁移失败的错误处理 + * + * ## 使用场景 + * + * - Pinia Store 持久化插件中获取存储键 + * - 应用版本升级时自动迁移用户数据 + * - 避免版本升级导致的数据丢失 + * - 实现平滑的版本过渡 + * + * ## 工作流程 + * + * 1. 优先使用当前版本的存储键 + * 2. 如果当前版本无数据,查找其他版本的同名数据 + * 3. 找到旧版本数据后自动迁移到当前版本 + * 4. 返回当前版本的存储键供使用 + * + * @module utils/storage/storage-key-manager + * @author Art Design Pro Team + */ +import { StorageConfig } from '@/utils/storage' + +/** + * 存储键名管理器 + * 负责处理版本化的存储键名生成和数据迁移 + */ +export class StorageKeyManager { + /** + * 获取当前版本的存储键名 + */ + private getCurrentVersionKey(storeId: string): string { + return StorageConfig.generateStorageKey(storeId) + } + + /** + * 检查当前版本的数据是否存在 + */ + private hasCurrentVersionData(key: string): boolean { + return localStorage.getItem(key) !== null + } + + /** + * 查找其他版本的同名存储键 + */ + private findExistingKey(storeId: string): string | null { + const storageKeys = Object.keys(localStorage) + const pattern = StorageConfig.createKeyPattern(storeId) + + return storageKeys.find((key) => pattern.test(key) && localStorage.getItem(key)) || null + } + + /** + * 将数据从旧版本迁移到当前版本 + */ + private migrateData(fromKey: string, toKey: string): void { + try { + const existingData = localStorage.getItem(fromKey) + if (existingData) { + localStorage.setItem(toKey, existingData) + console.info(`[Storage] 已迁移数据: ${fromKey} → ${toKey}`) + } + } catch (error) { + console.warn(`[Storage] 数据迁移失败: ${fromKey}`, error) + } + } + + /** + * 获取持久化存储的键名(支持自动数据迁移) + */ + getStorageKey(storeId: string): string { + const currentKey = this.getCurrentVersionKey(storeId) + + // 优先使用当前版本的数据 + if (this.hasCurrentVersionData(currentKey)) { + return currentKey + } + + // 查找并迁移其他版本的数据 + const existingKey = this.findExistingKey(storeId) + if (existingKey) { + this.migrateData(existingKey, currentKey) + } + + return currentKey + } +} diff --git a/web/src/utils/storage/storage.ts b/web/src/utils/storage/storage.ts new file mode 100644 index 0000000..67b9e9e --- /dev/null +++ b/web/src/utils/storage/storage.ts @@ -0,0 +1,250 @@ +/** + * 存储兼容性管理模块 + * + * 提供完整的本地存储兼容性检查和数据验证功能 + * + * 主要功能 + * + * - 多版本存储数据检测和验证 + * - 新旧存储格式兼容处理 + * - 存储数据完整性校验 + * - 存储异常自动恢复(清理+登出) + * - 登录状态验证 + * - 存储为空检测 + * - 版本号管理 + * + * ## 使用场景 + * + * - 应用启动时检查存储数据有效性 + * - 路由守卫中验证登录状态 + * - 版本升级时的数据兼容性检查 + * - 存储异常时的自动恢复 + * - 防止因存储数据损坏导致的系统异常 + * + * ## 工作流程 + * + * 1. 优先检查当前版本的存储数据 + * 2. 检查其他版本的存储数据 + * 3. 兼容旧格式的存储数据 + * 4. 验证数据完整性 + * 5. 异常时提示用户并执行登出 + * + * @module utils/storage/storage + * @author Art Design Pro Team + */ +import { router } from '@/router' +import { useUserStore } from '@/store/modules/user' +import { StorageConfig } from '@/utils/storage/storage-config' + +/** + * 存储兼容性管理器 + * 负责处理不同版本间的存储兼容性检查和数据验证 + */ +class StorageCompatibilityManager { + /** + * 获取系统版本号 + */ + getSystemVersion(): string | null { + return localStorage.getItem(StorageConfig.VERSION_KEY) + } + + /** + * 获取系统存储数据(兼容旧格式) + */ + getSystemStorage(): any { + const version = this.getSystemVersion() || StorageConfig.CURRENT_VERSION + const legacyKey = StorageConfig.generateLegacyKey(version) + const data = localStorage.getItem(legacyKey) + return data ? JSON.parse(data) : null + } + + /** + * 检查当前版本是否有存储数据 + */ + private hasCurrentVersionStorage(): boolean { + const storageKeys = Object.keys(localStorage) + const currentVersionPattern = StorageConfig.createCurrentVersionPattern() + + return storageKeys.some( + (key) => currentVersionPattern.test(key) && localStorage.getItem(key) !== null + ) + } + + /** + * 检查是否存在任何版本的存储数据 + */ + private hasAnyVersionStorage(): boolean { + const storageKeys = Object.keys(localStorage) + const versionPattern = StorageConfig.createVersionPattern() + + return storageKeys.some((key) => versionPattern.test(key) && localStorage.getItem(key) !== null) + } + + /** + * 获取旧格式的本地存储数据 + */ + private getLegacyStorageData(): Record { + try { + const systemStorage = this.getSystemStorage() + return systemStorage || {} + } catch (error) { + console.warn('[Storage] 解析旧格式存储数据失败:', error) + return {} + } + } + + /** + * 显示存储错误消息 + */ + private showStorageError(): void { + ElMessage({ + type: 'error', + offset: 40, + duration: 5000, + message: '系统检测到本地数据异常,请重新登录系统恢复使用!' + }) + } + + /** + * 执行系统登出 + */ + private performSystemLogout(): void { + setTimeout(() => { + try { + localStorage.clear() + useUserStore().logOut() + router.push({ name: 'Login' }) + console.info('[Storage] 已执行系统登出') + } catch (error) { + console.error('[Storage] 系统登出失败:', error) + } + }, StorageConfig.LOGOUT_DELAY) + } + + /** + * 处理存储异常 + */ + private handleStorageError(): void { + this.showStorageError() + this.performSystemLogout() + } + + /** + * 验证存储数据完整性 + * @param requireAuth 是否需要验证登录状态(默认 false) + */ + validateStorageData(requireAuth: boolean = false): boolean { + try { + // 优先检查新版本存储结构 + if (this.hasCurrentVersionStorage()) { + // console.debug('[Storage] 发现当前版本存储数据') + return true + } + + // 检查是否有任何版本的存储数据 + if (this.hasAnyVersionStorage()) { + // console.debug('[Storage] 发现其他版本存储数据,可能需要迁移') + return true + } + + // 检查旧版本存储结构 + const legacyData = this.getLegacyStorageData() + if (Object.keys(legacyData).length === 0) { + // 只有在需要验证登录状态时才执行登出操作 + if (requireAuth) { + console.warn('[Storage] 未发现任何存储数据,需要重新登录') + this.performSystemLogout() + return false + } + // 首次访问或访问静态路由,不需要登出 + // console.debug('[Storage] 未发现存储数据,首次访问或访问静态路由') + return true + } + + console.debug('[Storage] 发现旧版本存储数据') + return true + } catch (error) { + console.error('[Storage] 存储数据验证失败:', error) + // 只有在需要验证登录状态时才处理错误 + if (requireAuth) { + this.handleStorageError() + return false + } + return true + } + } + + /** + * 检查存储是否为空 + */ + isStorageEmpty(): boolean { + // 检查新版本存储结构 + if (this.hasCurrentVersionStorage()) { + return false + } + + // 检查是否有任何版本的存储数据 + if (this.hasAnyVersionStorage()) { + return false + } + + // 检查旧版本存储结构 + const legacyData = this.getLegacyStorageData() + return Object.keys(legacyData).length === 0 + } + + /** + * 检查存储兼容性 + * @param requireAuth 是否需要验证登录状态(默认 false) + */ + checkCompatibility(requireAuth: boolean = false): boolean { + try { + const isValid = this.validateStorageData(requireAuth) + const isEmpty = this.isStorageEmpty() + + if (isValid || isEmpty) { + // console.debug('[Storage] 存储兼容性检查通过') + return true + } + + console.warn('[Storage] 存储兼容性检查失败') + return false + } catch (error) { + console.error('[Storage] 兼容性检查异常:', error) + return false + } + } +} + +// 创建存储兼容性管理器实例 +const storageManager = new StorageCompatibilityManager() + +/** + * 获取系统存储数据 + */ +export function getSystemStorage(): any { + return storageManager.getSystemStorage() +} + +/** + * 获取系统版本号 + */ +export function getSysVersion(): string | null { + return storageManager.getSystemVersion() +} + +/** + * 验证本地存储数据 + * @param requireAuth 是否需要验证登录状态(默认 false) + */ +export function validateStorageData(requireAuth: boolean = false): boolean { + return storageManager.validateStorageData(requireAuth) +} + +/** + * 检查存储兼容性 + * @param requireAuth 是否需要验证登录状态(默认 false) + */ +export function checkStorageCompatibility(requireAuth: boolean = false): boolean { + return storageManager.checkCompatibility(requireAuth) +} diff --git a/web/src/utils/sys/console.ts b/web/src/utils/sys/console.ts new file mode 100644 index 0000000..d631087 --- /dev/null +++ b/web/src/utils/sys/console.ts @@ -0,0 +1,13 @@ +// ANSI 转义码生成网站 https://patorjk.com/software/taag/#p=display&f=Big&t=ABB%0A +const asciiArt = ` +\x1b[32m欢迎使用 Art Design Pro! +\x1b[0m +\x1b[36m哇!你居然在用我的项目~ 好用的话别忘了去 GitHub 点个 ★Star 呀,你的支持就是我更新的超强动力!祝使用体验满分💯 +\x1b[0m +\x1b[33mGitHub: https://github.com/Daymychen/art-design-pro +\x1b[0m +\x1b[31m技术支持(QQ群): 1038930070,和开发者一起交流~ 群里有小伙伴实时答疑,遇到问题不用慌! +\x1b[0m +` + +console.log(asciiArt) diff --git a/web/src/utils/sys/error-handle.ts b/web/src/utils/sys/error-handle.ts new file mode 100644 index 0000000..bc966c9 --- /dev/null +++ b/web/src/utils/sys/error-handle.ts @@ -0,0 +1,143 @@ +/** + * 全局错误处理模块 + * + * 提供统一的错误捕获和处理机制 + * + * ## 主要功能 + * + * - Vue 运行时错误捕获(组件错误、生命周期错误等) + * - 全局脚本错误捕获(语法错误、运行时错误等) + * - Promise 未捕获错误处理(unhandledrejection) + * - 静态资源加载错误监控(图片、脚本、样式等) + * - 错误日志记录和上报 + * - 统一的错误处理入口 + * + * ## 使用场景 + * - 应用启动时安装全局错误处理器 + * - 捕获和记录所有类型的错误 + * - 错误上报到监控平台 + * - 提升应用稳定性和可维护性 + * - 问题排查和调试 + * + * ## 错误类型 + * + * - VueError: Vue 组件相关错误 + * - ScriptError: JavaScript 脚本错误 + * - PromiseError: Promise 未捕获的 rejection + * - ResourceError: 静态资源加载失败 + * + * @module utils/sys/error-handle + * @author Art Design Pro Team + */ +import type { App } from 'vue' + +const IGNORABLE_SCRIPT_ERRORS = [ + 'ResizeObserver loop completed with undelivered notifications.', + 'ResizeObserver loop limit exceeded' +] + +function normalizeErrorMessage(message: Event | string): string { + if (typeof message === 'string') { + return message + } + + if ('message' in message && typeof message.message === 'string') { + return message.message + } + + return '' +} + +function isIgnorableScriptError(message: Event | string, source?: string): boolean { + const normalizedMessage = normalizeErrorMessage(message) + + if (!normalizedMessage) { + return false + } + + if (IGNORABLE_SCRIPT_ERRORS.some((item) => normalizedMessage.includes(item))) { + // 浏览器/扩展在布局抖动时常见的 ResizeObserver 噪声,不作为真实异常处理 + return true + } + + // 浏览器扩展注入脚本偶发的跨域 Script error 也没有排查价值 + if (normalizedMessage === 'Script error.' && source === '') { + return true + } + + return false +} + +/** + * Vue 运行时错误处理 + */ +export function vueErrorHandler(err: unknown, instance: any, info: string) { + console.error('[VueError]', err, info, instance) + // 这里可以上报到服务端,比如: + // reportError({ type: 'vue', err, info }) +} + +/** + * 全局脚本错误处理 + */ +export function scriptErrorHandler( + message: Event | string, + source?: string, + lineno?: number, + colno?: number, + error?: Error +): boolean { + if (isIgnorableScriptError(message, source)) { + return true + } + + console.error('[ScriptError]', { message, source, lineno, colno, error }) + // reportError({ type: 'script', message, source, lineno, colno, error }) + return true // 阻止默认控制台报错,可根据需求改 +} + +/** + * Promise 未捕获错误处理 + */ +export function registerPromiseErrorHandler() { + window.addEventListener('unhandledrejection', (event) => { + console.error('[PromiseError]', event.reason) + // reportError({ type: 'promise', reason: event.reason }) + }) +} + +/** + * 资源加载错误处理 (img, script, css...) + */ +export function registerResourceErrorHandler() { + window.addEventListener( + 'error', + (event: Event) => { + const target = event.target as HTMLElement + if ( + target && + (target.tagName === 'IMG' || target.tagName === 'SCRIPT' || target.tagName === 'LINK') + ) { + console.error('[ResourceError]', { + tagName: target.tagName, + src: + (target as HTMLImageElement).src || + (target as HTMLScriptElement).src || + (target as HTMLLinkElement).href + }) + // reportError({ type: 'resource', target }) + } + }, + true // 捕获阶段才能监听到资源错误 + ) +} + +/** + * 安装统一错误处理 + */ +export function setupErrorHandle(app: App) { + app.config.errorHandler = vueErrorHandler + window.onerror = scriptErrorHandler + registerPromiseErrorHandler() + registerResourceErrorHandler() +} diff --git a/web/src/utils/sys/index.ts b/web/src/utils/sys/index.ts new file mode 100644 index 0000000..a2e0729 --- /dev/null +++ b/web/src/utils/sys/index.ts @@ -0,0 +1,6 @@ +/** + * 系统管理相关工具函数统一导出 + */ + +export * from './upgrade' +export { default as mittBus } from './mittBus' diff --git a/web/src/utils/sys/mittBus.ts b/web/src/utils/sys/mittBus.ts new file mode 100644 index 0000000..22f0108 --- /dev/null +++ b/web/src/utils/sys/mittBus.ts @@ -0,0 +1,63 @@ +/** + * 全局事件总线模块 + * + * 基于 mitt 库实现的类型安全的事件总线 + * + * ## 主要功能 + * + * - 跨组件通信(发布/订阅模式) + * - 类型安全的事件定义和调用 + * - 全局事件管理(烟花效果、设置面板、搜索对话框等) + * - 解耦组件间的直接依赖 + * + * ## 使用场景 + * + * - 跨层级组件通信 + * - 全局功能触发(设置、搜索、聊天、锁屏等) + * - 特效触发(烟花效果) + * - 避免 props 层层传递 + * + * ## 用法示例 + * + * ```typescript + * // 订阅事件 + * mittBus.on('openSetting', () => { ... }) + * + * // 发布事件 + * mittBus.emit('openSetting') + * + * // 带参数的事件 + * mittBus.emit('triggerFireworks', 'image-url') + * ``` + * + * ## 已定义的事件 + * + * - triggerFireworks: 触发烟花效果(可选图片URL) + * - openSetting: 打开设置面板 + * - openSearchDialog: 打开搜索对话框 + * - openChat: 打开聊天窗口 + * - openLockScreen: 打开锁屏 + * + * @module utils/sys/mittBus + * @author Art Design Pro Team + */ +import mitt, { type Emitter } from 'mitt' + +// 定义事件类型映射 +type Events = { + // 烟花效果事件 - 可选的图片URL参数 + triggerFireworks: string | undefined + // 打开设置面板事件 - 无参数 + openSetting: void + // 打开搜索对话框事件 - 无参数 + openSearchDialog: void + // 打开聊天窗口事件 - 无参数 + openChat: void + // 打开锁屏事件 - 无参数 + openLockScreen: void +} + +// 创建类型安全的事件总线实例 +const mittBus: Emitter = mitt() + +export default mittBus diff --git a/web/src/utils/sys/upgrade.ts b/web/src/utils/sys/upgrade.ts new file mode 100644 index 0000000..53d3465 --- /dev/null +++ b/web/src/utils/sys/upgrade.ts @@ -0,0 +1,277 @@ +/** + * 系统版本升级管理模块 + * + * 提供完整的应用版本升级检测和处理功能 + * + * ## 主要功能 + * + * - 版本号比较和升级检测 + * - 首次访问识别和处理 + * - 旧版本数据自动清理 + * - 升级日志展示和通知 + * - 强制重新登录控制(根据升级日志配置) + * - 版本号规范化处理 + * - 旧存储结构迁移和清理 + * - 升级流程延迟执行(确保应用完全加载) + * + * ## 使用场景 + * + * - 应用启动时自动检测版本升级 + * - 版本更新后清理旧数据 + * - 向用户展示版本更新内容 + * - 重大更新时要求用户重新登录 + * - 防止旧版本数据污染新版本 + * + * ## 工作流程 + * + * 1. 检查本地存储的版本号 + * 2. 与当前应用版本对比 + * 3. 查找并清理旧版本数据 + * 4. 展示升级通知(包含更新日志) + * 5. 根据配置决定是否强制重新登录 + * 6. 更新本地版本号 + * + * @module utils/sys/upgrade + * @author Art Design Pro Team + */ +import { upgradeLogList } from '@/mock/upgrade/changeLog' +import { ElNotification } from 'element-plus' +import { useUserStore } from '@/store/modules/user' +import { StorageConfig } from '@/utils/storage/storage-config' + +/** + * 版本管理器 + * 负责处理版本比较、升级检测和数据清理 + */ +class VersionManager { + /** + * 规范化版本号字符串,移除前缀 'v' + */ + private normalizeVersion(version: string): string { + return version.replace(/^v/, '') + } + + /** + * 获取存储的版本号 + */ + private getStoredVersion(): string | null { + return localStorage.getItem(StorageConfig.VERSION_KEY) + } + + /** + * 设置版本号到存储 + */ + private setStoredVersion(version: string): void { + localStorage.setItem(StorageConfig.VERSION_KEY, version) + } + + /** + * 检查是否应该跳过升级处理 + */ + private shouldSkipUpgrade(): boolean { + return StorageConfig.CURRENT_VERSION === StorageConfig.SKIP_UPGRADE_VERSION + } + + /** + * 检查是否为首次访问 + */ + private isFirstVisit(storedVersion: string | null): boolean { + return !storedVersion + } + + /** + * 检查版本是否相同 + */ + private isSameVersion(storedVersion: string): boolean { + return storedVersion === StorageConfig.CURRENT_VERSION + } + + /** + * 查找旧的存储结构 + */ + private findLegacyStorage(): { oldSysKey: string | null; oldVersionKeys: string[] } { + const storageKeys = Object.keys(localStorage) + const currentVersionPrefix = StorageConfig.generateStorageKey('').slice(0, -1) // 移除末尾的 '-' + + // 查找旧的单一存储结构 + const oldSysKey = + storageKeys.find( + (key) => + StorageConfig.isVersionedKey(key) && key !== currentVersionPrefix && !key.includes('-') + ) || null + + // 查找旧版本的分离存储键 + const oldVersionKeys = storageKeys.filter( + (key) => + StorageConfig.isVersionedKey(key) && + !StorageConfig.isCurrentVersionKey(key) && + key.includes('-') + ) + + return { oldSysKey, oldVersionKeys } + } + + /** + * 检查是否需要重新登录 + */ + private shouldRequireReLogin(storedVersion: string): boolean { + const normalizedCurrent = this.normalizeVersion(StorageConfig.CURRENT_VERSION) + const normalizedStored = this.normalizeVersion(storedVersion) + + return upgradeLogList.value.some((item) => { + const itemVersion = this.normalizeVersion(item.version) + return ( + item.requireReLogin && itemVersion > normalizedStored && itemVersion <= normalizedCurrent + ) + }) + } + + /** + * 构建升级通知消息 + */ + private buildUpgradeMessage(requireReLogin: boolean): string { + const { title: content } = upgradeLogList.value[0] + + const messageParts = [ + `

    `, + `系统已升级到 ${StorageConfig.CURRENT_VERSION} 版本,此次更新带来了以下改进:`, + `

    `, + content + ] + + if (requireReLogin) { + messageParts.push( + `

    升级完成,请重新登录后继续使用。

    ` + ) + } + + return messageParts.join('') + } + + /** + * 显示升级通知 + */ + private showUpgradeNotification(message: string): void { + ElNotification({ + title: '系统升级公告', + message, + duration: 0, + type: 'success', + dangerouslyUseHTMLString: true + }) + } + + /** + * 清理旧版本数据 + */ + private cleanupLegacyData(oldSysKey: string | null, oldVersionKeys: string[]): void { + // 清理旧的单一存储结构 + if (oldSysKey) { + localStorage.removeItem(oldSysKey) + console.info(`[Upgrade] 已清理旧存储: ${oldSysKey}`) + } + + // 清理旧版本的分离存储 + oldVersionKeys.forEach((key) => { + localStorage.removeItem(key) + console.info(`[Upgrade] 已清理旧存储: ${key}`) + }) + } + + /** + * 执行升级后的登出操作 + */ + private performLogout(): void { + try { + useUserStore().logOut() + console.info('[Upgrade] 已执行升级后登出') + } catch (error) { + console.error('[Upgrade] 升级后登出失败:', error) + } + } + + /** + * 执行升级流程 + */ + private async executeUpgrade( + storedVersion: string, + legacyStorage: ReturnType + ): Promise { + try { + if (!upgradeLogList.value.length) { + console.warn('[Upgrade] 升级日志列表为空') + return + } + + const requireReLogin = this.shouldRequireReLogin(storedVersion) + const message = this.buildUpgradeMessage(requireReLogin) + + // 显示升级通知 + this.showUpgradeNotification(message) + + // 更新版本号 + this.setStoredVersion(StorageConfig.CURRENT_VERSION) + + // 清理旧数据 + this.cleanupLegacyData(legacyStorage.oldSysKey, legacyStorage.oldVersionKeys) + + // 执行登出(如果需要) + if (requireReLogin) { + this.performLogout() + } + + console.info(`[Upgrade] 升级完成: ${storedVersion} → ${StorageConfig.CURRENT_VERSION}`) + } catch (error) { + console.error('[Upgrade] 系统升级处理失败:', error) + } + } + + /** + * 系统升级处理主流程 + */ + async processUpgrade(): Promise { + // 跳过特定版本 + if (this.shouldSkipUpgrade()) { + console.debug('[Upgrade] 跳过版本升级检查') + return + } + + const storedVersion = this.getStoredVersion() + + // 首次访问处理 + if (this.isFirstVisit(storedVersion)) { + this.setStoredVersion(StorageConfig.CURRENT_VERSION) + // console.info('[Upgrade] 首次访问,已设置当前版本') + return + } + + // 版本相同,无需升级 + if (this.isSameVersion(storedVersion!)) { + // console.debug('[Upgrade] 版本相同,无需升级') + return + } + + // 检查是否有需要升级的旧数据 + const legacyStorage = this.findLegacyStorage() + if (!legacyStorage.oldSysKey && legacyStorage.oldVersionKeys.length === 0) { + this.setStoredVersion(StorageConfig.CURRENT_VERSION) + console.info('[Upgrade] 无旧数据,已更新版本号') + return + } + + // 延迟执行升级流程,确保应用已完全加载 + setTimeout(() => { + this.executeUpgrade(storedVersion!, legacyStorage) + }, StorageConfig.UPGRADE_DELAY) + } +} + +// 创建版本管理器实例 +const versionManager = new VersionManager() + +/** + * 系统升级处理入口函数 + */ +export async function systemUpgrade(): Promise { + await versionManager.processUpgrade() +} diff --git a/web/src/utils/table/tableCache.ts b/web/src/utils/table/tableCache.ts new file mode 100644 index 0000000..045a7ce --- /dev/null +++ b/web/src/utils/table/tableCache.ts @@ -0,0 +1,266 @@ +/** + * 表格缓存管理模块 + * + * 提供高性能的表格数据缓存机制 + * + * ## 主要功能 + * + * - 基于参数的智能缓存键生成(使用 ohash) + * - LRU(最近最少使用)缓存淘汰策略 + * - 缓存过期时间管理 + * - 缓存大小限制和自动清理 + * - 基于标签的缓存分组管理 + * - 多种缓存失效策略(清空所有、清空当前、清空分页等) + * - 缓存访问统计和命中率分析 + * - 缓存大小估算 + * + * ## 使用场景 + * + * - 表格数据的分页缓存 + * - 减少重复的 API 请求 + * - 提升表格切换和返回的响应速度 + * - 搜索条件变化时的智能缓存管理 + * - 数据更新后的缓存失效处理 + * + * ## 缓存策略 + * + * - CLEAR_ALL: 清空所有缓存(适用于全局数据更新) + * - CLEAR_CURRENT: 仅清空当前查询条件的缓存(适用于单条数据更新) + * - CLEAR_PAGINATION: 清空所有分页缓存但保留不同搜索条件(适用于批量操作) + * - KEEP_ALL: 不清除缓存(适用于只读操作) + * + * @module utils/table/tableCache + * @author Art Design Pro Team + */ +import { hash } from 'ohash' + +// 缓存失效策略枚举 +export enum CacheInvalidationStrategy { + /** 清空所有缓存 */ + CLEAR_ALL = 'clear_all', + /** 仅清空当前查询条件的缓存 */ + CLEAR_CURRENT = 'clear_current', + /** 清空所有分页缓存(保留不同搜索条件的缓存) */ + CLEAR_PAGINATION = 'clear_pagination', + /** 不清除缓存 */ + KEEP_ALL = 'keep_all' +} + +// 通用 API 响应接口(兼容不同的后端响应格式) +export interface ApiResponse { + records?: T[] + data?: T[] + total?: number + current?: number + size?: number + [key: string]: unknown +} + +// 缓存存储接口 +export interface CacheItem { + data: T[] + response: ApiResponse + timestamp: number + params: string + // 缓存标签,用于分组管理 + tags: Set + // 访问次数(用于 LRU 算法) + accessCount: number + // 最后访问时间 + lastAccessTime: number +} + +// 增强的缓存管理类 +export class TableCache { + private cache = new Map>() + private cacheTime: number + private maxSize: number + private enableLog: boolean + + constructor(cacheTime = 5 * 60 * 1000, maxSize = 50, enableLog = false) { + // 默认5分钟,最多50条缓存 + this.cacheTime = cacheTime + this.maxSize = maxSize + this.enableLog = enableLog + } + + // 内部日志工具 + private log(message: string, ...args: any[]) { + if (this.enableLog) { + console.log(`[TableCache] ${message}`, ...args) + } + } + + // 生成稳定的缓存键 + private generateKey(params: unknown): string { + return hash(params) + } + + // 🔧 优化:增强类型安全性 + private generateTags(params: Record): Set { + const tags = new Set() + + // 添加搜索条件标签 + const searchKeys = Object.keys(params).filter( + (key) => + !['current', 'size', 'total'].includes(key) && + params[key] !== undefined && + params[key] !== '' && + params[key] !== null + ) + + if (searchKeys.length > 0) { + const searchTag = searchKeys.map((key) => `${key}:${String(params[key])}`).join('|') + tags.add(`search:${searchTag}`) + } else { + tags.add('search:default') + } + + // 添加分页标签 + tags.add(`pagination:${params.size || 10}`) + // 添加通用分页标签,用于清理所有分页缓存 + tags.add('pagination') + + return tags + } + + // 🔧 优化:LRU 缓存清理 + private evictLRU(): void { + if (this.cache.size <= this.maxSize) return + + // 找到最少使用的缓存项 + let lruKey = '' + let minAccessCount = Infinity + let oldestTime = Infinity + + for (const [key, item] of this.cache.entries()) { + if ( + item.accessCount < minAccessCount || + (item.accessCount === minAccessCount && item.lastAccessTime < oldestTime) + ) { + lruKey = key + minAccessCount = item.accessCount + oldestTime = item.lastAccessTime + } + } + + if (lruKey) { + this.cache.delete(lruKey) + this.log(`LRU 清理缓存: ${lruKey}`) + } + } + + // 设置缓存 + set(params: unknown, data: T[], response: ApiResponse): void { + const key = this.generateKey(params) + const tags = this.generateTags(params as Record) + const now = Date.now() + + // 检查是否需要清理 + this.evictLRU() + + this.cache.set(key, { + data, + response, + timestamp: now, + params: key, + tags, + accessCount: 1, + lastAccessTime: now + }) + } + + // 获取缓存 + get(params: unknown): CacheItem | null { + const key = this.generateKey(params) + const item = this.cache.get(key) + + if (!item) return null + + // 检查是否过期 + if (Date.now() - item.timestamp > this.cacheTime) { + this.cache.delete(key) + return null + } + + // 更新访问统计 + item.accessCount++ + item.lastAccessTime = Date.now() + + return item + } + + // 根据标签清除缓存 + clearByTags(tags: string[]): number { + let clearedCount = 0 + + for (const [key, item] of this.cache.entries()) { + // 检查是否包含任意一个标签 + const hasMatchingTag = tags.some((tag) => + Array.from(item.tags).some((itemTag) => itemTag.includes(tag)) + ) + + if (hasMatchingTag) { + this.cache.delete(key) + clearedCount++ + } + } + + return clearedCount + } + + // 清除当前搜索条件的缓存 + clearCurrentSearch(params: unknown): number { + const key = this.generateKey(params) + const deleted = this.cache.delete(key) + return deleted ? 1 : 0 + } + + // 清除分页缓存 + clearPagination(): number { + return this.clearByTags(['pagination']) + } + + // 清空所有缓存 + clear(): void { + this.cache.clear() + } + + // 获取缓存统计信息 + getStats(): { total: number; size: string; hitRate: string } { + const total = this.cache.size + let totalSize = 0 + let totalAccess = 0 + + for (const item of this.cache.values()) { + // 粗略估算大小(JSON字符串长度) + totalSize += JSON.stringify(item.data).length + totalAccess += item.accessCount + } + + // 转换为人类可读的大小 + const sizeInKB = (totalSize / 1024).toFixed(2) + const avgHits = total > 0 ? (totalAccess / total).toFixed(1) : '0' + + return { + total, + size: `${sizeInKB}KB`, + hitRate: `${avgHits} avg hits` + } + } + + // 清理过期缓存 + cleanupExpired(): number { + let cleanedCount = 0 + const now = Date.now() + + for (const [key, item] of this.cache.entries()) { + if (now - item.timestamp > this.cacheTime) { + this.cache.delete(key) + cleanedCount++ + } + } + + return cleanedCount + } +} diff --git a/web/src/utils/table/tableConfig.ts b/web/src/utils/table/tableConfig.ts new file mode 100644 index 0000000..e464c89 --- /dev/null +++ b/web/src/utils/table/tableConfig.ts @@ -0,0 +1,55 @@ +/** + * 表格全局配置模块 + * + * 提供表格与后端接口的字段映射配置 + * + * ## 主要功能 + * + * - 响应数据字段自动识别和映射 + * - 支持多种常见的后端响应格式 + * - 请求参数字段映射配置 + * - 可扩展的字段配置机制 + * + * ## 使用场景 + * + * - 适配不同后端的分页接口格式 + * - 统一前端表格组件的数据处理 + * - 减少重复的数据转换代码 + * - 支持多个后端服务的接口对接 + * + * ## 配置说明 + * + * - recordFields: 列表数据字段名(按优先级顺序查找) + * - totalFields: 总条数字段名 + * - currentFields: 当前页码字段名 + * - sizeFields: 每页大小字段名 + * - paginationKey: 前端发送请求时使用的分页参数名 + * + * ## 扩展方式 + * + * 如果后端使用其他字段名,可以在对应数组中添加新的字段名 + * 例如:recordFields: ['list', 'data', 'records', 'items', 'yourCustomField'] + * + * @module utils/table/tableConfig + * @author Art Design Pro Team + */ +export const tableConfig = { + // 响应数据字段映射配置,系统会从接口返回数据中按顺序查找这些字段 + // 列表数据 + recordFields: ['list', 'data', 'records', 'items', 'result', 'rows'], + // 总条数 + totalFields: ['total', 'count'], + // 当前页码 + currentFields: ['current', 'page', 'pageNum'], + // 每页大小 + sizeFields: ['size', 'pageSize', 'limit'], + + // 请求参数映射配置,前端发送请求时使用的分页参数名 + // useTable 组合式函数传递分页参数的时候 用 current 跟 size + paginationKey: { + // 当前页码 + current: 'current', + // 每页大小 + size: 'size' + } +} diff --git a/web/src/utils/table/tableUtils.ts b/web/src/utils/table/tableUtils.ts new file mode 100644 index 0000000..3ca9db1 --- /dev/null +++ b/web/src/utils/table/tableUtils.ts @@ -0,0 +1,297 @@ +/** + * 表格工具函数模块 + * + * 提供表格数据处理和请求管理的核心工具函数 + * + * ## 主要功能 + * + * - 多格式 API 响应自动适配和标准化 + * - 表格数据提取和转换 + * - 分页信息自动更新和校验 + * - 智能防抖函数(支持取消和立即执行) + * - 统一的错误处理机制 + * - 嵌套数据结构解析 + * + * ## 使用场景 + * + * - useTable 组合式函数的底层工具 + * - 适配各种后端接口响应格式 + * - 表格数据的标准化处理 + * - 请求防抖和性能优化 + * - 错误统一处理和日志记录 + * + * ## 支持的响应格式 + * + * 1. 直接数组: [item1, item2, ...] + * 2. 标准对象: { records: [], total: 100 } + * 3. 嵌套data: { data: { list: [], total: 100 } } + * 4. 多种字段名: list/data/records/items/result/rows + * + * ## 核心功能 + * + * - defaultResponseAdapter: 智能识别和转换响应格式 + * - extractTableData: 提取表格数据数组 + * - updatePaginationFromResponse: 更新分页信息 + * - createSmartDebounce: 创建可控的防抖函数 + * - createErrorHandler: 生成错误处理器 + * + * @module utils/table/tableUtils + * @author Art Design Pro Team + */ + +import type { ApiResponse } from './tableCache' +import { tableConfig } from './tableConfig' + +// 请求参数基础接口,扩展分页参数 +export interface BaseRequestParams extends Api.Common.PaginationParams { + [key: string]: unknown +} + +// 错误处理接口 +export interface TableError { + code: string + message: string + details?: unknown +} + +// 辅助函数:从对象中提取记录数组 +function extractRecords(obj: Record, fields: string[]): T[] { + for (const field of fields) { + if (field in obj && Array.isArray(obj[field])) { + return obj[field] as T[] + } + } + return [] +} + +// 辅助函数:从对象中提取总数 +function extractTotal(obj: Record, records: unknown[], fields: string[]): number { + for (const field of fields) { + if (field in obj && typeof obj[field] === 'number') { + return obj[field] as number + } + } + return records.length +} + +// 辅助函数:提取分页参数 +function extractPagination( + obj: Record, + data?: Record +): Pick, 'current' | 'size'> | undefined { + const result: Partial, 'current' | 'size'>> = {} + const sources = [obj, data ?? {}] + + const currentFields = tableConfig.currentFields + for (const src of sources) { + for (const field of currentFields) { + if (field in src && typeof src[field] === 'number') { + result.current = src[field] as number + break + } + } + if (result.current !== undefined) break + } + + const sizeFields = tableConfig.sizeFields + for (const src of sources) { + for (const field of sizeFields) { + if (field in src && typeof src[field] === 'number') { + result.size = src[field] as number + break + } + } + if (result.size !== undefined) break + } + + if (result.current === undefined && result.size === undefined) return undefined + return result +} + +/** + * 默认响应适配器 - 支持多种常见的API响应格式 + */ +export const defaultResponseAdapter = (response: unknown): ApiResponse => { + // 定义支持的字段 + const recordFields = tableConfig.recordFields + + if (!response) { + return { records: [], total: 0 } + } + + if (Array.isArray(response)) { + return { records: response, total: response.length } + } + + if (typeof response !== 'object') { + console.warn( + '[tableUtils] 无法识别的响应格式,支持的格式包括: 数组、包含' + + recordFields.join('/') + + '字段的对象、嵌套data对象。当前格式:', + response + ) + return { records: [], total: 0 } + } + + const res = response as Record + let records: T[] = [] + let total = 0 + let pagination: Pick, 'current' | 'size'> | undefined + + // 处理标准格式或直接列表 + records = extractRecords(res, recordFields) + total = extractTotal(res, records, tableConfig.totalFields) + pagination = extractPagination(res) + + // 如果没有找到,检查嵌套data + if (records.length === 0 && 'data' in res && typeof res.data === 'object') { + const data = res.data as Record + records = extractRecords(data, ['list', 'records', 'items']) + total = extractTotal(data, records, tableConfig.totalFields) + pagination = extractPagination(res, data) + + if (Array.isArray(res.data)) { + records = res.data as T[] + total = records.length + } + } + + if (!recordFields.some((field) => field in res) && records.length === 0) { + console.warn('[tableUtils] 无法识别的响应格式') + console.warn('支持的字段包括: ' + recordFields.join('、'), response) + console.warn('扩展字段请到 utils/table/tableConfig 文件配置') + } + + const result: ApiResponse = { records, total } + if (pagination) { + Object.assign(result, pagination) + } + return result +} + +/** + * 从标准化的API响应中提取表格数据 + */ +export const extractTableData = (response: ApiResponse): T[] => { + const data = response.records || response.data || [] + return Array.isArray(data) ? data : [] +} + +/** + * 根据API响应更新分页信息 + */ +export const updatePaginationFromResponse = ( + pagination: Api.Common.PaginationParams, + response: ApiResponse +): void => { + pagination.total = response.total ?? pagination.total ?? 0 + + if (response.current !== undefined) { + pagination.current = response.current + } + + const maxPage = Math.max(1, Math.ceil(pagination.total / (pagination.size || 1))) + if (pagination.current > maxPage) { + pagination.current = maxPage + } +} + +/** + * 创建智能防抖函数 - 支持取消和立即执行 + */ +export const createSmartDebounce = Promise>( + fn: T, + delay: number +): T & { cancel: () => void; flush: () => Promise } => { + let timeoutId: NodeJS.Timeout | null = null + let lastArgs: Parameters | null = null + let lastResolve: ((value: any) => void) | null = null + let lastReject: ((reason: any) => void) | null = null + + const debouncedFn = (...args: Parameters): Promise => { + return new Promise((resolve, reject) => { + if (timeoutId) clearTimeout(timeoutId) + lastArgs = args + lastResolve = resolve + lastReject = reject + timeoutId = setTimeout(async () => { + try { + const result = await fn(...args) + resolve(result) + } catch (error) { + reject(error) + } finally { + timeoutId = null + lastArgs = null + lastResolve = null + lastReject = null + } + }, delay) + }) + } + + debouncedFn.cancel = () => { + if (timeoutId) clearTimeout(timeoutId) + timeoutId = null + lastArgs = null + lastResolve = null + lastReject = null + } + + debouncedFn.flush = async () => { + if (timeoutId && lastArgs && lastResolve && lastReject) { + clearTimeout(timeoutId) + timeoutId = null + const args = lastArgs + const resolve = lastResolve + const reject = lastReject + lastArgs = null + lastResolve = null + lastReject = null + try { + const result = await fn(...args) + resolve(result) + return result + } catch (error) { + reject(error) + throw error + } + } + return Promise.resolve() + } + + return debouncedFn as any +} + +/** + * 生成错误处理函数 + */ +export const createErrorHandler = ( + onError?: (error: TableError) => void, + enableLog: boolean = false +) => { + const logger = { + error: (message: string, ...args: any[]) => { + if (enableLog) console.error(`[useTable] ${message}`, ...args) + } + } + + return (err: unknown, context: string): TableError => { + const tableError: TableError = { + code: 'UNKNOWN_ERROR', + message: '未知错误', + details: err + } + + if (err instanceof Error) { + tableError.message = err.message + tableError.code = err.name + } else if (typeof err === 'string') { + tableError.message = err + } + + logger.error(`${context}:`, err) + onError?.(tableError) + return tableError + } +} diff --git a/web/src/utils/ui/animation.ts b/web/src/utils/ui/animation.ts new file mode 100644 index 0000000..5efd02a --- /dev/null +++ b/web/src/utils/ui/animation.ts @@ -0,0 +1,80 @@ +/** + * 主题动画工具模块 + * + * 提供主题切换的视觉动画效果 + * + * ## 主要功能 + * + * - 基于鼠标点击位置的圆形扩散动画 + * - View Transition API 支持(现代浏览器) + * - 降级处理(不支持动画的浏览器) + * - 暗黑主题切换过渡效果 + * - 页面刷新时的主题过渡优化 + * + * ## 使用场景 + * + * - 明暗主题切换 + * - 提升用户体验的视觉反馈 + * - 页面刷新时的平滑过渡 + * + * ## 技术实现 + * + * - 使用 CSS 变量存储点击位置和半径 + * - 利用 View Transition API 实现流畅动画 + * - 通过 CSS class 控制过渡效果 + * - 自动计算最大扩散半径 + * + * @module utils/theme/animation + * @author Art Design Pro Team + */ +import { useCommon } from '@/hooks/core/useCommon' +import { useTheme } from '@/hooks/core/useTheme' +import { SystemThemeEnum } from '@/enums/appEnum' +import { useSettingStore } from '@/store/modules/setting' +const { LIGHT, DARK } = SystemThemeEnum + +/** + * 主题切换动画 + * @param e 鼠标点击事件 + */ +export const themeAnimation = (e: any) => { + const x = e.clientX + const y = e.clientY + // 计算鼠标点击位置距离视窗的最大圆半径 + const endRadius = Math.hypot(Math.max(x, innerWidth - x), Math.max(y, innerHeight - y)) + + // 设置CSS变量 + document.documentElement.style.setProperty('--x', x + 'px') + document.documentElement.style.setProperty('--y', y + 'px') + document.documentElement.style.setProperty('--r', endRadius + 'px') + + if (document.startViewTransition) { + document.startViewTransition(() => toggleTheme()) + } else { + toggleTheme() + } +} + +/** + * 切换主题 + */ +const toggleTheme = () => { + useTheme().switchThemeStyles(useSettingStore().systemThemeType === LIGHT ? DARK : LIGHT) + useCommon().refresh() +} + +/** + * 切换主题过渡效果 + * @param enable 是否启用过渡效果 + */ +export const toggleTransition = (enable: boolean) => { + const body = document.body + + if (enable) { + body.classList.add('theme-change') + } else { + setTimeout(() => { + body.classList.remove('theme-change') + }, 300) + } +} diff --git a/web/src/utils/ui/colors.ts b/web/src/utils/ui/colors.ts new file mode 100755 index 0000000..b4f6b77 --- /dev/null +++ b/web/src/utils/ui/colors.ts @@ -0,0 +1,273 @@ +/** + * 颜色处理工具模块 + * + * 提供完整的颜色格式转换和处理功能 + * + * ## 主要功能 + * + * - Hex 与 RGB/RGBA 格式互转 + * - 颜色混合计算 + * - 颜色变浅/变深处理 + * - Element Plus 主题色自动生成 + * - 颜色格式验证 + * - CSS 变量读取 + * - 暗黑模式颜色适配 + * + * ## 使用场景 + * + * - 主题色动态切换 + * - Element Plus 组件主题定制 + * - 颜色渐变生成 + * - 明暗主题颜色计算 + * - 颜色格式标准化 + * + * ## 核心功能 + * + * - hexToRgba: Hex 转 RGBA(支持透明度) + * - hexToRgb: Hex 转 RGB 数组 + * - rgbToHex: RGB 转 Hex + * - colourBlend: 两种颜色混合 + * - getLightColor: 生成变浅的颜色 + * - getDarkColor: 生成变深的颜色 + * - handleElementThemeColor: 处理 Element Plus 主题色 + * - setElementThemeColor: 设置完整的主题色系统 + * + * ## 支持格式 + * + * - Hex: #FFF, #FFFFFF + * - RGB: rgb(255, 255, 255) + * - RGBA: rgba(255, 255, 255, 0.5) + * + * @module utils/ui/colors + * @author Art Design Pro Team + */ +import { useSettingStore } from '@/store/modules/setting' + +/** + * 颜色转换结果接口 + */ +interface RgbaResult { + red: number + green: number + blue: number + rgba: string +} + +/** + * 获取CSS变量值(别名函数) + * @param name CSS变量名 + * @returns CSS变量值 + */ +export function getCssVar(name: string): string { + return getComputedStyle(document.documentElement).getPropertyValue(name) +} + +/** + * 验证hex颜色格式 + * @param hex hex颜色值 + * @returns 是否为有效的hex颜色 + */ +function isValidHexColor(hex: string): boolean { + const cleanHex = hex.trim().replace(/^#/, '') + return /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(cleanHex) +} + +/** + * 验证RGB颜色值 + * @param r 红色值 + * @param g 绿色值 + * @param b 蓝色值 + * @returns 是否为有效的RGB值 + */ +function isValidRgbValue(r: number, g: number, b: number): boolean { + const isValid = (value: number) => Number.isInteger(value) && value >= 0 && value <= 255 + return isValid(r) && isValid(g) && isValid(b) +} + +/** + * 将hex颜色转换为RGBA + * @param hex hex颜色值 (支持 #FFF 或 #FFFFFF 格式) + * @param opacity 透明度 (0-1) + * @returns 包含RGB值和RGBA字符串的对象 + */ +export function hexToRgba(hex: string, opacity: number): RgbaResult { + if (!isValidHexColor(hex)) { + throw new Error('Invalid hex color format') + } + + // 移除可能存在的 # 前缀并转换为大写 + let cleanHex = hex.trim().replace(/^#/, '').toUpperCase() + + // 如果是缩写形式(如 FFF),转换为完整形式 + if (cleanHex.length === 3) { + cleanHex = cleanHex + .split('') + .map((char) => char.repeat(2)) + .join('') + } + + // 解析 RGB 值 + const [red, green, blue] = cleanHex.match(/\w\w/g)!.map((x) => parseInt(x, 16)) + + // 确保 opacity 在有效范围内 + const validOpacity = Math.max(0, Math.min(1, opacity)) + + // 构建 RGBA 字符串 + const rgba = `rgba(${red}, ${green}, ${blue}, ${validOpacity.toFixed(2)})` + + return { red, green, blue, rgba } +} + +/** + * 将hex颜色转换为RGB数组 + * @param hexColor hex颜色值 + * @returns RGB数组 [r, g, b] + */ +export function hexToRgb(hexColor: string): number[] { + if (!isValidHexColor(hexColor)) { + ElMessage.warning('输入错误的hex颜色值') + throw new Error('Invalid hex color format') + } + + const cleanHex = hexColor.replace(/^#/, '') + let hex = cleanHex + + // 处理缩写形式 + if (hex.length === 3) { + hex = hex + .split('') + .map((char) => char.repeat(2)) + .join('') + } + + const hexPairs = hex.match(/../g) + if (!hexPairs) { + throw new Error('Invalid hex color format') + } + + return hexPairs.map((hexPair) => parseInt(hexPair, 16)) +} + +/** + * 将RGB颜色转换为hex + * @param r 红色值 (0-255) + * @param g 绿色值 (0-255) + * @param b 蓝色值 (0-255) + * @returns hex颜色值 + */ +export function rgbToHex(r: number, g: number, b: number): string { + if (!isValidRgbValue(r, g, b)) { + ElMessage.warning('输入错误的RGB颜色值') + throw new Error('Invalid RGB color values') + } + + const toHex = (value: number) => { + const hex = value.toString(16) + return hex.length === 1 ? `0${hex}` : hex + } + + return `#${toHex(r)}${toHex(g)}${toHex(b)}` +} + +/** + * 颜色混合 + * @param color1 第一个颜色 + * @param color2 第二个颜色 + * @param ratio 混合比例 (0-1) + * @returns 混合后的颜色 + */ +export function colourBlend(color1: string, color2: string, ratio: number): string { + const validRatio = Math.max(0, Math.min(1, Number(ratio))) + + const rgb1 = hexToRgb(color1) + const rgb2 = hexToRgb(color2) + + const blendedRgb = rgb1.map((value1, index) => { + const value2 = rgb2[index] + return Math.round(value1 * (1 - validRatio) + value2 * validRatio) + }) + + return rgbToHex(blendedRgb[0], blendedRgb[1], blendedRgb[2]) +} + +/** + * 获取变浅的颜色 + * @param color 原始颜色 + * @param level 变浅程度 (0-1) + * @param isDark 是否为暗色主题 + * @returns 变浅后的颜色 + */ +export function getLightColor(color: string, level: number, isDark: boolean = false): string { + if (!isValidHexColor(color)) { + ElMessage.warning('输入错误的hex颜色值') + throw new Error('Invalid hex color format') + } + + if (isDark) { + return getDarkColor(color, level) + } + + const rgb = hexToRgb(color) + const lightRgb = rgb.map((value) => Math.floor((255 - value) * level + value)) + + return rgbToHex(lightRgb[0], lightRgb[1], lightRgb[2]) +} + +/** + * 获取变深的颜色 + * @param color 原始颜色 + * @param level 变深程度 (0-1) + * @returns 变深后的颜色 + */ +export function getDarkColor(color: string, level: number): string { + if (!isValidHexColor(color)) { + ElMessage.warning('输入错误的hex颜色值') + throw new Error('Invalid hex color format') + } + + const rgb = hexToRgb(color) + const darkRgb = rgb.map((value) => Math.floor(value * (1 - level))) + + return rgbToHex(darkRgb[0], darkRgb[1], darkRgb[2]) +} + +/** + * 处理 Element Plus 主题颜色 + * @param theme 主题颜色 + * @param isDark 是否为暗色主题 + */ +export function handleElementThemeColor(theme: string, isDark: boolean = false): void { + document.documentElement.style.setProperty('--el-color-primary', theme) + + for (let i = 1; i <= 9; i++) { + document.documentElement.style.setProperty( + `--el-color-primary-light-${i}`, + getLightColor(theme, i / 10, isDark) + ) + } + + for (let i = 1; i <= 9; i++) { + document.documentElement.style.setProperty( + `--el-color-primary-dark-${i}`, + getDarkColor(theme, i / 10) + ) + } +} + +/** + * 设置 Element Plus 主题颜色 + * @param color 主题颜色 + */ +export function setElementThemeColor(color: string): void { + const mixColor = '#ffffff' + const elStyle = document.documentElement.style + + elStyle.setProperty('--el-color-primary', color) + handleElementThemeColor(color, useSettingStore().isDark) + + // 生成更淡一点的颜色 + for (let i = 1; i < 16; i++) { + const itemColor = colourBlend(color, mixColor, i / 16) + elStyle.setProperty(`--el-color-primary-custom-${i}`, itemColor) + } +} diff --git a/web/src/utils/ui/emojo.ts b/web/src/utils/ui/emojo.ts new file mode 100644 index 0000000..cabad7d --- /dev/null +++ b/web/src/utils/ui/emojo.ts @@ -0,0 +1,24 @@ +/** + * 表情 + * 用于在消息提示的时候显示对应的表情 + * + * 用法 + * ElMessage.success(`${EmojiText[200]} 图片上传成功`) + * ElMessage.error(`${EmojiText[400]} 图片上传失败`) + * ElMessage.error(`${EmojiText[500]} 图片上传失败`) + * + * @module utils/ui/emojo + * @author Art Design Pro Team + */ + +// macos 用户 按 shift + 6 可以唤出更多表情…… +const EmojiText: { [key: string]: string } = { + '0': 'O_O', // 空 + '200': '^_^', // 成功 + '400': 'T_T', // 错误请求 + '500': 'X_X' // 服务器内部错误,无法完成请求 +} + +// const EmojiIcon = ['🟢', '🔴', '🟡 ', '🚀', '✨', '💡', '🛠️', '🔥', '🎉', '🌟', '🌈'] + +export default EmojiText diff --git a/web/src/utils/ui/iconify-loader.ts b/web/src/utils/ui/iconify-loader.ts new file mode 100644 index 0000000..035de16 --- /dev/null +++ b/web/src/utils/ui/iconify-loader.ts @@ -0,0 +1,31 @@ +/** + * 离线图标加载器 + * + * 用于在内网环境下支持 Iconify 图标的离线加载。 + * 通过预加载图标集数据,避免运行时从 CDN 获取图标。 + * + * 使用方式: + * 1. 安装所需图标集:pnpm add -D @iconify-json/[icon-set-name] + * 2. 在此文件中导入并注册图标集 + * 3. 在组件中使用: + * + * @module utils/ui/iconify-loader + * @author Art Design Pro Team + */ + +// import { addCollection } from '@iconify/vue' + +// // 导入离线图标数据 + +// // 系统必要图标库 +// import riIcons from '@iconify-json/ri/icons.json' + +// // 演示图标库(可选,生产环境可移除) +// import svgSpinners from '@iconify-json/svg-spinners/icons.json' +// import lineMd from '@iconify-json/line-md/icons.json' + +// // 注册离线图标集 + +// addCollection(riIcons) +// addCollection(svgSpinners) +// addCollection(lineMd) diff --git a/web/src/utils/ui/index.ts b/web/src/utils/ui/index.ts new file mode 100644 index 0000000..9ca1049 --- /dev/null +++ b/web/src/utils/ui/index.ts @@ -0,0 +1,11 @@ +/** + * UI 相关工具函数统一导出 + * + * @module utils/ui/index + * @author Art Design Pro Team + */ + +export * from './colors' +export * from './loading' +export * from './tabs' +export * from './emojo' diff --git a/web/src/utils/ui/loading.ts b/web/src/utils/ui/loading.ts new file mode 100644 index 0000000..6580e02 --- /dev/null +++ b/web/src/utils/ui/loading.ts @@ -0,0 +1,84 @@ +/** + * 全局 Loading 加载管理模块 + * + * 提供统一的全屏加载动画管理 + * + * ## 主要功能 + * + * - 全屏 Loading 显示和隐藏 + * - 自动适配明暗主题背景色 + * - 自定义 SVG 加载动画 + * - 单例模式防止重复创建 + * - 锁定页面交互 + * + * ## 使用场景 + * + * - 页面初始化加载 + * - 大量数据请求 + * - 路由切换过渡 + * - 异步操作等待 + * + * ## 特性 + * + * - 自动检测当前主题并应用对应背景色 + * - 使用自定义 SVG 动画(四点旋转) + * - 单例模式确保同时只有一个 Loading + * - 提供便捷的显示/隐藏方法 + * + * @module utils/ui/loading + * @author Art Design Pro Team + */ +import { fourDotsSpinnerSvg } from '@/assets/svg/loading' + +/** + * 获取当前主题对应的loading背景色 + * @returns 背景色字符串 + */ +const getLoadingBackground = (): string => { + const isDark = document.documentElement.classList.contains('dark') + return isDark ? 'rgba(7, 7, 7, 0.85)' : '#fff' +} + +const DEFAULT_LOADING_CONFIG = { + lock: true, + get background() { + return getLoadingBackground() + }, + svg: fourDotsSpinnerSvg, + svgViewBox: '0 0 40 40', + customClass: 'art-loading-fix' +} as const + +interface LoadingInstance { + close: () => void +} + +let loadingInstance: LoadingInstance | null = null + +export const loadingService = { + /** + * 显示 loading + * @returns 关闭 loading 的函数 + */ + showLoading(): () => void { + if (!loadingInstance) { + // 每次显示时获取最新的配置,确保背景色与当前主题同步 + const config = { + ...DEFAULT_LOADING_CONFIG, + background: getLoadingBackground() + } + loadingInstance = ElLoading.service(config) + } + return () => this.hideLoading() + }, + + /** + * 隐藏 loading + */ + hideLoading(): void { + if (loadingInstance) { + loadingInstance.close() + loadingInstance = null + } + } +} diff --git a/web/src/utils/ui/tabs.ts b/web/src/utils/ui/tabs.ts new file mode 100644 index 0000000..5f53ea5 --- /dev/null +++ b/web/src/utils/ui/tabs.ts @@ -0,0 +1,60 @@ +/** + * 标签页布局配置模块 + * + * 提供不同标签页样式的高度和间距配置 + * + * ## 主要功能 + * + * - 多种标签页样式配置(默认、卡片、谷歌风格) + * - 标签页打开/关闭状态的高度管理 + * - 顶部间距自动计算 + * - 配置获取和默认值处理 + * + * ## 使用场景 + * + * - 工作标签页(Worktab)布局计算 + * - 页面内容区域高度调整 + * - 标签页显示/隐藏时的动画 + * - 响应式布局适配 + * + * ## 配置项说明 + * + * - openTop: 标签页显示时,内容区域距离顶部的距离 + * - closeTop: 标签页隐藏时,内容区域距离顶部的距离 + * - openHeight: 标签页显示时的总高度(包含标签栏) + * - closeHeight: 标签页隐藏时的总高度(仅头部) + * + * ## 支持的样式 + * + * - tab-default: 默认标签页样式 + * - tab-card: 卡片式标签页 + * - tab-google: 谷歌浏览器风格标签页 + * + * @module utils/ui/tabs + * @author Art Design Pro Team + */ +export const TAB_CONFIG = { + 'tab-default': { + openTop: 106, + closeTop: 60, + openHeight: 121, + closeHeight: 75 + }, + 'tab-card': { + openTop: 122, + closeTop: 78, + openHeight: 139, + closeHeight: 95 + }, + 'tab-google': { + openTop: 122, + closeTop: 78, + openHeight: 139, + closeHeight: 95 + } +} + +// 获取当前 tab 样式配置,设置默认值 +export const getTabConfig = (style: string) => { + return TAB_CONFIG[style as keyof typeof TAB_CONFIG] || TAB_CONFIG['tab-card'] // 默认使用 tab-card 配置 +} diff --git a/web/src/views/auth/forget-password/index.vue b/web/src/views/auth/forget-password/index.vue new file mode 100644 index 0000000..147259e --- /dev/null +++ b/web/src/views/auth/forget-password/index.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/web/src/views/auth/login/index.vue b/web/src/views/auth/login/index.vue new file mode 100755 index 0000000..2a857d7 --- /dev/null +++ b/web/src/views/auth/login/index.vue @@ -0,0 +1,284 @@ + + + + + + + + diff --git a/web/src/views/auth/login/style.css b/web/src/views/auth/login/style.css new file mode 100644 index 0000000..bd8c3a9 --- /dev/null +++ b/web/src/views/auth/login/style.css @@ -0,0 +1,38 @@ +@reference '@styles/core/tailwind.css'; + +/* 授权页右侧区域 */ +.auth-right-wrap { + @apply absolute inset-0 w-[440px] h-[650px] py-[5px] m-auto overflow-hidden + max-sm:px-7 max-sm:w-full + animate-[slideInRight_0.6s_cubic-bezier(0.25,0.46,0.45,0.94)_forwards] + max-md:animate-none; + + .form { + @apply h-full py-[40px]; + } + + .title { + @apply text-g-900 text-4xl font-semibold max-md:text-3xl max-sm:pt-10; + } + + .sub-title { + @apply mt-[10px] text-g-600 text-sm; + } + + .custom-height { + @apply !h-[40px]; + } +} + +/* 滑入动画 */ +@keyframes slideInRight { + from { + opacity: 0; + transform: translateX(30px); + } + + to { + opacity: 1; + transform: translateX(0); + } +} diff --git a/web/src/views/auth/register/index.vue b/web/src/views/auth/register/index.vue new file mode 100644 index 0000000..9a8570d --- /dev/null +++ b/web/src/views/auth/register/index.vue @@ -0,0 +1,240 @@ + + + + + + diff --git a/web/src/views/dashboard/console/index.vue b/web/src/views/dashboard/console/index.vue new file mode 100755 index 0000000..154c330 --- /dev/null +++ b/web/src/views/dashboard/console/index.vue @@ -0,0 +1,41 @@ + + + + diff --git a/web/src/views/dashboard/console/modules/about-project.vue b/web/src/views/dashboard/console/modules/about-project.vue new file mode 100644 index 0000000..ed946ce --- /dev/null +++ b/web/src/views/dashboard/console/modules/about-project.vue @@ -0,0 +1,44 @@ + + + diff --git a/web/src/views/dashboard/console/modules/active-user.vue b/web/src/views/dashboard/console/modules/active-user.vue new file mode 100755 index 0000000..da740f2 --- /dev/null +++ b/web/src/views/dashboard/console/modules/active-user.vue @@ -0,0 +1,47 @@ + + + diff --git a/web/src/views/dashboard/console/modules/card-list.vue b/web/src/views/dashboard/console/modules/card-list.vue new file mode 100755 index 0000000..5fc76a7 --- /dev/null +++ b/web/src/views/dashboard/console/modules/card-list.vue @@ -0,0 +1,74 @@ + + + diff --git a/web/src/views/dashboard/console/modules/dynamic-stats.vue b/web/src/views/dashboard/console/modules/dynamic-stats.vue new file mode 100755 index 0000000..1876950 --- /dev/null +++ b/web/src/views/dashboard/console/modules/dynamic-stats.vue @@ -0,0 +1,79 @@ + + + diff --git a/web/src/views/dashboard/console/modules/new-user.vue b/web/src/views/dashboard/console/modules/new-user.vue new file mode 100755 index 0000000..9d39522 --- /dev/null +++ b/web/src/views/dashboard/console/modules/new-user.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/web/src/views/dashboard/console/modules/sales-overview.vue b/web/src/views/dashboard/console/modules/sales-overview.vue new file mode 100755 index 0000000..32904b8 --- /dev/null +++ b/web/src/views/dashboard/console/modules/sales-overview.vue @@ -0,0 +1,43 @@ + + + diff --git a/web/src/views/dashboard/console/modules/todo-list.vue b/web/src/views/dashboard/console/modules/todo-list.vue new file mode 100755 index 0000000..ab9a86c --- /dev/null +++ b/web/src/views/dashboard/console/modules/todo-list.vue @@ -0,0 +1,71 @@ + + + diff --git a/web/src/views/exception/403/index.vue b/web/src/views/exception/403/index.vue new file mode 100755 index 0000000..2756c42 --- /dev/null +++ b/web/src/views/exception/403/index.vue @@ -0,0 +1,16 @@ + + + + diff --git a/web/src/views/exception/404/index.vue b/web/src/views/exception/404/index.vue new file mode 100755 index 0000000..6b64f45 --- /dev/null +++ b/web/src/views/exception/404/index.vue @@ -0,0 +1,16 @@ + + + + diff --git a/web/src/views/exception/500/index.vue b/web/src/views/exception/500/index.vue new file mode 100755 index 0000000..1b26377 --- /dev/null +++ b/web/src/views/exception/500/index.vue @@ -0,0 +1,16 @@ + + + + diff --git a/web/src/views/index/index.vue b/web/src/views/index/index.vue new file mode 100755 index 0000000..415a436 --- /dev/null +++ b/web/src/views/index/index.vue @@ -0,0 +1,29 @@ + + + + + + diff --git a/web/src/views/index/style.scss b/web/src/views/index/style.scss new file mode 100644 index 0000000..c89f354 --- /dev/null +++ b/web/src/views/index/style.scss @@ -0,0 +1,93 @@ +.app-layout { + display: flex; + width: 100%; + min-height: 100vh; + background: var(--default-bg-color); + + #app-sidebar { + flex-shrink: 0; + } + + #app-main { + display: flex; + flex: 1; + flex-direction: column; + min-width: 0; + height: 100vh; + overflow: auto; + + #app-header { + position: sticky; + top: 0; + z-index: 50; + flex-shrink: 0; + width: 100%; + } + + #app-content { + flex: 1; + + :deep(.layout-content) { + box-sizing: border-box; + width: calc(100% - 40px); + margin: auto; + + // 子页面默认 style + .page-content { + position: relative; + box-sizing: border-box; + padding: 20px; + overflow: hidden; + background: var(--default-box-color); + border-radius: calc(var(--custom-radius) / 2 + 2px) !important; + } + } + } + } +} + +@media only screen and (width <= 1180px) { + .app-layout { + #app-main { + height: 100dvh; + } + } +} + +@media only screen and (width <= 800px) { + .app-layout { + position: relative; + + #app-sidebar { + position: fixed; + top: 0; + left: 0; + z-index: 300; + height: 100vh; + } + + #app-main { + width: 100%; + height: auto; + overflow: visible; + + #app-content { + :deep(.layout-content) { + width: calc(100% - 40px); + } + } + } + } +} + +@media only screen and (width <= 640px) { + .app-layout { + #app-main { + #app-content { + :deep(.layout-content) { + width: calc(100% - 30px); + } + } + } + } +} diff --git a/web/src/views/outside/Iframe.vue b/web/src/views/outside/Iframe.vue new file mode 100644 index 0000000..33ea0dc --- /dev/null +++ b/web/src/views/outside/Iframe.vue @@ -0,0 +1,42 @@ + + + diff --git a/web/src/views/result/fail/index.vue b/web/src/views/result/fail/index.vue new file mode 100755 index 0000000..8fe2583 --- /dev/null +++ b/web/src/views/result/fail/index.vue @@ -0,0 +1,28 @@ + + + diff --git a/web/src/views/result/success/index.vue b/web/src/views/result/success/index.vue new file mode 100755 index 0000000..ae57aba --- /dev/null +++ b/web/src/views/result/success/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/web/src/views/system/menu/index.vue b/web/src/views/system/menu/index.vue new file mode 100644 index 0000000..b88ea0c --- /dev/null +++ b/web/src/views/system/menu/index.vue @@ -0,0 +1,479 @@ + + + + diff --git a/web/src/views/system/menu/modules/menu-dialog.vue b/web/src/views/system/menu/modules/menu-dialog.vue new file mode 100644 index 0000000..f512301 --- /dev/null +++ b/web/src/views/system/menu/modules/menu-dialog.vue @@ -0,0 +1,384 @@ + + + diff --git a/web/src/views/system/role/index.vue b/web/src/views/system/role/index.vue new file mode 100755 index 0000000..1378f34 --- /dev/null +++ b/web/src/views/system/role/index.vue @@ -0,0 +1,240 @@ + + + + diff --git a/web/src/views/system/role/modules/role-edit-dialog.vue b/web/src/views/system/role/modules/role-edit-dialog.vue new file mode 100644 index 0000000..46ff9b1 --- /dev/null +++ b/web/src/views/system/role/modules/role-edit-dialog.vue @@ -0,0 +1,162 @@ + + + diff --git a/web/src/views/system/role/modules/role-permission-dialog.vue b/web/src/views/system/role/modules/role-permission-dialog.vue new file mode 100644 index 0000000..3691ac8 --- /dev/null +++ b/web/src/views/system/role/modules/role-permission-dialog.vue @@ -0,0 +1,254 @@ + + + diff --git a/web/src/views/system/role/modules/role-search.vue b/web/src/views/system/role/modules/role-search.vue new file mode 100644 index 0000000..ae929e7 --- /dev/null +++ b/web/src/views/system/role/modules/role-search.vue @@ -0,0 +1,125 @@ + + + diff --git a/web/src/views/system/user-center/index.vue b/web/src/views/system/user-center/index.vue new file mode 100755 index 0000000..ab52f00 --- /dev/null +++ b/web/src/views/system/user-center/index.vue @@ -0,0 +1,247 @@ + + + + diff --git a/web/src/views/system/user/index.vue b/web/src/views/system/user/index.vue new file mode 100644 index 0000000..6995d23 --- /dev/null +++ b/web/src/views/system/user/index.vue @@ -0,0 +1,259 @@ + + + + + + + + diff --git a/web/src/views/system/user/modules/user-dialog.vue b/web/src/views/system/user/modules/user-dialog.vue new file mode 100644 index 0000000..03cab4f --- /dev/null +++ b/web/src/views/system/user/modules/user-dialog.vue @@ -0,0 +1,143 @@ + + + diff --git a/web/src/views/system/user/modules/user-search.vue b/web/src/views/system/user/modules/user-search.vue new file mode 100644 index 0000000..7282a8e --- /dev/null +++ b/web/src/views/system/user/modules/user-search.vue @@ -0,0 +1,112 @@ + + + diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100755 index 0000000..4331962 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "types": ["vite/client", "node", "element-plus/global"], + "skipLibCheck": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "@views/*": ["src/views/*"], + "@imgs/*": ["src/assets/images/*"], + "@icons/*": ["src/assets/icons/*"], + "@utils/*": ["src/utils/*"], + "@stores/*": ["src/store/*"], + "@plugins/*": ["src/plugins/*"], + "@styles/*": ["src/assets/styles/*"] + } + }, + "include": ["src/**/*", "src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "exclude": ["node_modules", "dist", "**/*.js"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100755 index 0000000..c2ef072 --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,156 @@ +import { defineConfig, loadEnv } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' +import { fileURLToPath } from 'url' +import vueDevTools from 'vite-plugin-vue-devtools' +import viteCompression from 'vite-plugin-compression' +import Components from 'unplugin-vue-components/vite' +import AutoImport from 'unplugin-auto-import/vite' +import ElementPlus from 'unplugin-element-plus/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +import tailwindcss from '@tailwindcss/vite' +// import { visualizer } from 'rollup-plugin-visualizer' + +export default ({ mode }: { mode: string }) => { + const root = process.cwd() + const env = loadEnv(mode, root) + const { VITE_VERSION, VITE_PORT, VITE_BASE_URL, VITE_API_URL, VITE_API_PROXY_URL } = env + + console.log(`🚀 API_URL = ${VITE_API_URL}`) + console.log(`🚀 VERSION = ${VITE_VERSION}`) + + return defineConfig({ + define: { + __APP_VERSION__: JSON.stringify(VITE_VERSION) + }, + base: VITE_BASE_URL, + server: { + port: Number(VITE_PORT), + proxy: { + '/api': { + target: VITE_API_PROXY_URL, + changeOrigin: true + } + }, + host: true + }, + // 路径别名 + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + '@views': resolvePath('src/views'), + '@imgs': resolvePath('src/assets/images'), + '@icons': resolvePath('src/assets/icons'), + '@utils': resolvePath('src/utils'), + '@stores': resolvePath('src/store'), + '@styles': resolvePath('src/assets/styles') + } + }, + build: { + target: 'es2015', + outDir: 'dist', + chunkSizeWarningLimit: 2000, + minify: 'terser', + terserOptions: { + compress: { + // 生产环境去除 console + drop_console: true, + // 生产环境去除 debugger + drop_debugger: true + } + }, + dynamicImportVarsOptions: { + warnOnError: true, + exclude: [], + include: ['src/views/**/*.vue'] + } + }, + plugins: [ + vue(), + tailwindcss(), + // 自动按需导入 API + AutoImport({ + imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'], + dts: 'src/types/import/auto-imports.d.ts', + resolvers: [ElementPlusResolver()], + eslintrc: { + enabled: true, + filepath: './.auto-import.json', + globalsPropValue: true + } + }), + // 自动按需导入组件 + Components({ + dts: 'src/types/import/components.d.ts', + resolvers: [ElementPlusResolver()] + }), + // 按需定制主题配置 + ElementPlus({ + useSource: true + }), + // 压缩 + viteCompression({ + verbose: false, // 是否在控制台输出压缩结果 + disable: false, // 是否禁用 + algorithm: 'gzip', // 压缩算法 + ext: '.gz', // 压缩后的文件名后缀 + threshold: 10240, // 只有大小大于该值的资源会被处理 10240B = 10KB + deleteOriginFile: false // 压缩后是否删除原文件 + }), + vueDevTools() + // 打包分析 + // visualizer({ + // open: true, + // gzipSize: true, + // brotliSize: true, + // filename: 'dist/stats.html' // 分析图生成的文件名及路径 + // }), + ], + // 依赖预构建:避免运行时重复请求与转换,提升首次加载速度 + optimizeDeps: { + include: [ + 'echarts/core', + 'echarts/charts', + 'echarts/components', + 'echarts/renderers', + 'xlsx', + 'xgplayer', + 'crypto-js', + 'file-saver', + 'vue-img-cutter', + 'element-plus/es', + 'element-plus/es/components/*/style/css', + 'element-plus/es/components/*/style/index' + ] + }, + css: { + preprocessorOptions: { + // sass variable and mixin + scss: { + additionalData: ` + @use "@styles/core/el-light.scss" as *; + @use "@styles/core/mixin.scss" as *; + ` + } + }, + postcss: { + plugins: [ + { + postcssPlugin: 'internal:charset-removal', + AtRule: { + charset: (atRule) => { + if (atRule.name === 'charset') { + atRule.remove() + } + } + } + } + ] + } + } + }) +} + +function resolvePath(paths: string) { + return path.resolve(__dirname, paths) +} From 83bc6e2523e7b529ed3e8faf60c502d62ada1204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 00:55:24 +0800 Subject: [PATCH 04/20] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90v0.1=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=85=A8=E5=8A=9F=E8=83=BD=E8=BF=AD=E4=BB=A3=EF=BC=8C?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=9E=B6=E6=9E=84=E5=B9=B6=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=8C=E6=95=B4web=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 这是一次包含核心架构重构、schema标准制定、后端服务完整实现和前端后台页面的全量迭代: 1. 重构存储层,拆分sqlite/postgres适配器为filestore统一接口 2. 制定并完善msglayer/v0.1数据标准,新增完整JSON Schema校验 3. 实现JWT认证系统,包含用户注册/登录/刷新/登出全流程 4. 新增完整dashboard后台页面,包含概览、时间线、搜索、联系人、导入管理模块 5. 实现短信/通话/联系人数据的标准映射和导入导出功能 6. 废弃独立previewer项目,迁移功能到主web应用 7. 修复Android备份恢复中的类型映射和校验问题 --- .gitignore | 1 + .../data/backup/AndroidBackupFileReader.kt | 13 +- .../mobile/ui/viewmodels/BackupViewModel.kt | 17 +- .../mobile/ui/viewmodels/RestoreViewModel.kt | 11 +- .../sdk/backup/msglayer/MsgLayerMapper.kt | 6 +- .../backup/msglayer/model/MsgLayerModels.kt | 4 +- backend/data/commory-store.json | 85 +++- backend/internal/api/server.go | 473 +++++++++++++++--- backend/internal/auth/middleware.go | 34 ++ backend/internal/auth/model.go | 14 + backend/internal/auth/service.go | 278 ++++++++++ backend/internal/cli/root.go | 12 +- backend/internal/config/config.go | 49 +- backend/internal/importers/importer.go | 5 + backend/internal/msglayer/types.go | 3 + backend/internal/msglayer/validator.go | 30 +- backend/internal/msglayer/validator_test.go | 57 +++ backend/internal/query/service.go | 16 +- .../storage/{sqlstore.go => filestore.go} | 196 ++++++-- backend/internal/storage/postgres.go | 2 +- backend/internal/storage/sqlite.go | 2 +- backend/internal/storage/sqlite_test.go | 8 +- backend/internal/storage/storage.go | 52 +- msglayer/docs/mapping-android.md | 14 + msglayer/docs/versioning.md | 5 + msglayer/schema/v0.1/common.schema.json | 4 +- msglayer/schema/v0.1/content.sms.schema.json | 4 +- .../schema/v0.1/content.voice.schema.json | 3 +- msglayer/schema/v0.1/event.schema.json | 3 +- msglayer/schema/v0.1/identity.schema.json | 3 +- previewer/README.en.md | 4 +- previewer/README.md | 2 + previewer/package.json | 2 +- web/src/api/auth.ts | 26 +- web/src/api/commory.ts | 87 ++++ web/src/locales/langs/en.json | 10 +- web/src/locales/langs/zh.json | 10 +- web/src/router/modules/dashboard.ts | 38 +- web/src/store/modules/user.ts | 1 + web/src/types/api/api.d.ts | 62 ++- web/src/utils/http/index.ts | 173 +++---- web/src/views/auth/login/index.vue | 68 +-- web/src/views/auth/register/index.vue | 54 +- web/src/views/dashboard/console/index.vue | 228 +++++++-- web/src/views/dashboard/contacts/index.vue | 158 ++++++ web/src/views/dashboard/imports/index.vue | 127 +++++ web/src/views/dashboard/search/index.vue | 99 ++++ web/src/views/dashboard/timeline/index.vue | 83 +++ web/vite.config.ts | 4 +- 49 files changed, 2239 insertions(+), 401 deletions(-) create mode 100644 backend/internal/auth/middleware.go create mode 100644 backend/internal/auth/model.go create mode 100644 backend/internal/auth/service.go rename backend/internal/storage/{sqlstore.go => filestore.go} (54%) create mode 100644 web/src/api/commory.ts mode change 100755 => 100644 web/src/utils/http/index.ts mode change 100755 => 100644 web/src/views/dashboard/console/index.vue create mode 100644 web/src/views/dashboard/contacts/index.vue create mode 100644 web/src/views/dashboard/imports/index.vue create mode 100644 web/src/views/dashboard/search/index.vue create mode 100644 web/src/views/dashboard/timeline/index.vue diff --git a/.gitignore b/.gitignore index d4fa121..79cb555 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ coverage/ # Trae .trae/ +.playwright-mcp/ \ No newline at end of file diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt index 75f025a..37bc7c1 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileReader.kt @@ -2,6 +2,8 @@ package imken.messagevault.mobile.data.backup import android.content.Context import com.google.gson.Gson +import com.google.gson.JsonObject +import com.google.gson.JsonParser import com.google.gson.reflect.TypeToken import imken.messagevault.mobile.model.BackupData import imken.messagevault.sdk.backup.msglayer.MsgLayerSerializer @@ -41,7 +43,11 @@ class AndroidBackupFileReader( Timber.d("[Mobile] DEBUG [Restore] Backup file content analysis: hasCallLogs=$containsCallLogs, hasMessages=$containsMessages, hasContacts=$containsContacts") - if (fileContent.contains("\"version\"") && fileContent.contains("msglayer/v0.1")) { + val parsedRoot = runCatching { + JsonParser.parseString(fileContent).asJsonObject + }.getOrNull() + + if (parsedRoot?.get("version")?.asString == imken.messagevault.sdk.backup.msglayer.model.MSG_LAYER_VERSION) { val msgLayer = msgLayerGson.fromJson(fileContent, MsgLayerRootExport::class.java) ?: return@withContext null return@withContext msgLayer.toBackupReadData() @@ -182,7 +188,8 @@ class AndroidBackupFileReader( private fun String.toEpochMillis(): Long = try { java.time.OffsetDateTime.parse(this).toInstant().toEpochMilli() - } catch (_: Exception) { - System.currentTimeMillis() + } catch (exception: Exception) { + Timber.w(exception, "[Mobile] WARN [Restore] Invalid RFC3339 timestamp: %s", this) + 0L } } diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt index 55cef6a..e47d0fa 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt @@ -28,6 +28,7 @@ import timber.log.Timber class BackupViewModel( private val backupManager: BackupManager, + private val deviceIdProvider: () -> String, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) : ViewModel() { @@ -64,16 +65,12 @@ class BackupViewModel( viewModelScope.launch(dispatcher) { try { val deviceInfo = "${Build.MANUFACTURER} ${Build.MODEL}" - val deviceId = Settings.Secure.getString( - context.contentResolver, - Settings.Secure.ANDROID_ID - ) ?: "unknown-device" val result = backupManager.performBackup( hasSmsPermission = true, hasCallLogPermission = true, hasContactsPermission = true, deviceInfo = deviceInfo, - deviceId = deviceId, + deviceId = deviceIdProvider(), appVersion = BuildConfig.VERSION_NAME ) if (result.success) { @@ -104,7 +101,15 @@ class BackupViewModel( callLogWriter = AndroidCallLogWriter(context), contactWriter = AndroidContactWriter(context) ) - return BackupViewModel(backupManager) as T + return BackupViewModel( + backupManager = backupManager, + deviceIdProvider = { + Settings.Secure.getString( + context.contentResolver, + Settings.Secure.ANDROID_ID + ) ?: "unknown-device" + } + ) as T } throw IllegalArgumentException("Unknown ViewModel class") } diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt index 71eea45..f39a5a2 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/RestoreViewModel.kt @@ -281,7 +281,12 @@ class RestoreViewModel( } if (files != null) { - val validFiles = files.filter { validateBackupFile(it) } + val validFiles = mutableListOf() + files.forEach { file -> + if (validateBackupFile(file)) { + validFiles += file + } + } backupFiles.addAll(validFiles.map { file -> val deviceId = android.provider.Settings.Secure.getString( context.contentResolver, android.provider.Settings.Secure.ANDROID_ID @@ -311,9 +316,9 @@ class RestoreViewModel( backupFileReader.read(backupFile.filePath)?.toLegacyBackupData() } - private fun validateBackupFile(file: File): Boolean { + private suspend fun validateBackupFile(file: File): Boolean { if (!file.exists() || !file.isFile || !file.canRead()) return false - return runCatching { kotlinx.coroutines.runBlocking { backupFileReader.read(file.absolutePath) != null } } + return runCatching { backupFileReader.read(file.absolutePath) != null } .getOrDefault(false) } diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt index f3b3cd2..9bd53cd 100644 --- a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt @@ -107,6 +107,7 @@ class MsgLayerMapper { ) } + // String sorting is safe here because all timestamps are normalized to UTC RFC3339. return MsgLayerRootExport( exportedAt = exportedAt, source = MsgLayerSource( @@ -176,13 +177,16 @@ class MsgLayerMapper { } private fun Message.toSmsDirection(): String = when (type) { - 2 -> "outbound" + 1 -> "inbound" + 2, 4, 5, 6 -> "outbound" + 3 -> "outbound" else -> "inbound" } private fun CallLog.toCallDirection(): String = when (type) { 2 -> "outbound" 3 -> "inbound" + 5 -> "missed" else -> "missed" } diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt index 63c4326..a171ed2 100644 --- a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/model/MsgLayerModels.kt @@ -1,7 +1,9 @@ package imken.messagevault.sdk.backup.msglayer.model +const val MSG_LAYER_VERSION = "msglayer/v0.1" + data class MsgLayerRootExport( - val version: String = "msglayer/v0.1", + val version: String = MSG_LAYER_VERSION, val exportedAt: String, val source: MsgLayerSource, val identities: List, diff --git a/backend/data/commory-store.json b/backend/data/commory-store.json index f14197f..4f50500 100644 --- a/backend/data/commory-store.json +++ b/backend/data/commory-store.json @@ -1,47 +1,78 @@ { + "users": { + "user_f1fb3d28941df6c2": { + "id": "user_f1fb3d28941df6c2", + "user_name": "codextest", + "email": "codextest@example.com", + "password_hash": "aa6dfe9af835489316295f5a462802b4c2d7ae7ada8bd7e35be357906161f459", + "password_salt": "2d519ab95cbc8adfc5030018c66e5d1a", + "roles": [ + "R_ADMIN", + "R_USER" + ], + "buttons": [ + "view", + "import", + "admin" + ], + "created_at": "2026-05-14T13:47:29.452506Z", + "updated_at": "2026-05-14T13:47:29.452506Z" + } + }, + "refresh_tokens": { + "refresh_b94f4de6e84aaf37": { + "id": "refresh_b94f4de6e84aaf37", + "user_id": "user_f1fb3d28941df6c2", + "token_hash": "e18cce180af79654de9b98faa9305cab4e06a7dd1b6af423183db1d48ecccb36", + "expires_at": "2026-05-21T13:47:29.453101Z", + "created_at": "2026-05-14T13:47:29.453101Z", + "revoked_at": "0001-01-01T00:00:00Z" + } + }, "imports": { "import_1778758632278756000": { "id": "import_1778758632278756000", + "user_id": "", "schema_version": "msglayer/v0.1", "imported_at": "2026-05-14T11:37:12Z", "source_path": "../msglayer/examples/export.sms-call.json", - "raw_json": "{\n \"version\": \"msglayer/v0.1\",\n \"exported_at\": \"2026-01-01T12:00:00Z\",\n \"source\": {\n \"platform\": \"android\",\n \"device_id\": \"device_001\",\n \"app_version\": \"0.1.4\"\n },\n \"identities\": [\n {\n \"id\": \"self/device_001\",\n \"type\": \"device\",\n \"display_name\": \"Pixel Demo\",\n \"phones\": [],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"self\"\n ],\n \"meta\": {\n \"source\": \"system\"\n }\n },\n {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n ],\n \"events\": [\n {\n \"id\": \"contact_snapshot_person_zhangsan\",\n \"type\": \"contact_snapshot\",\n \"timestamp\": \"2026-01-01T12:00:00Z\",\n \"direction\": \"system\",\n \"participants\": [\n \"person_zhangsan\"\n ],\n \"content\": {\n \"identity_id\": \"person_zhangsan\",\n \"snapshot\": {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n },\n \"meta\": {\n \"source\": \"contacts\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n },\n {\n \"id\": \"sms_101\",\n \"type\": \"sms\",\n \"timestamp\": \"2025-12-01T10:00:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"text\": \"你好,验证码是123456\",\n \"attachments\": []\n },\n \"meta\": {\n \"read\": true,\n \"status\": 0\n },\n \"relations\": [\n {\n \"type\": \"same_thread\",\n \"target\": \"thread_42\"\n }\n ]\n },\n {\n \"id\": \"call_202\",\n \"type\": \"call\",\n \"timestamp\": \"2025-12-01T10:05:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"duration_sec\": 120,\n \"call_type\": \"incoming\",\n \"recording\": null\n },\n \"meta\": {\n \"source\": \"call_log\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n }\n ],\n \"indexes\": {\n \"timeline\": [\n \"sms_101\",\n \"call_202\"\n ]\n }\n}\n" + "raw_json": "{\n \"version\": \"msglayer/v0.1\",\n \"exported_at\": \"2026-01-01T12:00:00Z\",\n \"source\": {\n \"platform\": \"android\",\n \"device_id\": \"device_001\",\n \"app_version\": \"0.1.4\"\n },\n \"identities\": [\n {\n \"id\": \"self/device_001\",\n \"type\": \"device\",\n \"display_name\": \"Pixel Demo\",\n \"phones\": [],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"self\"\n ],\n \"meta\": {\n \"source\": \"system\"\n }\n },\n {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n ],\n \"events\": [\n {\n \"id\": \"contact_snapshot_person_zhangsan\",\n \"type\": \"contact_snapshot\",\n \"timestamp\": \"2026-01-01T12:00:00Z\",\n \"direction\": \"system\",\n \"participants\": [\n \"person_zhangsan\"\n ],\n \"content\": {\n \"identity_id\": \"person_zhangsan\",\n \"snapshot\": {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n },\n \"meta\": {\n \"source\": \"contacts\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n },\n {\n \"id\": \"sms_101\",\n \"type\": \"sms\",\n \"timestamp\": \"2025-12-01T10:00:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"text\": \"你好,验证码是123456\",\n \"attachments\": []\n },\n \"meta\": {\n \"read\": true,\n \"status\": 0\n },\n \"relations\": [\n {\n \"type\": \"same_thread\",\n \"target\": \"thread_42\"\n }\n ]\n },\n {\n \"id\": \"call_202\",\n \"type\": \"call\",\n \"timestamp\": \"2025-12-01T10:05:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"duration_sec\": 120,\n \"call_type\": \"incoming\",\n \"recording\": null\n },\n \"meta\": {\n \"source\": \"call_log\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n }\n ],\n \"indexes\": {\n \"timeline\": [\n \"sms_101\",\n \"call_202\"\n ]\n }\n}\n", + "event_count": 0, + "identity_count": 0 } }, "identities": { "person_zhangsan": { - "id": "person_zhangsan", - "type": "person", - "display_name": "张三", - "phones": [ - "+8613800000000" - ], - "emails": [], - "avatar": null, - "labels": [ - "contact" - ], - "meta": { - "source": "contacts" + "user_id": "", + "identity": { + "id": "", + "type": "", + "display_name": "", + "phones": null, + "emails": null, + "avatar": null, + "labels": null, + "meta": null } }, "self/device_001": { - "id": "self/device_001", - "type": "device", - "display_name": "Pixel Demo", - "phones": [], - "emails": [], - "avatar": null, - "labels": [ - "self" - ], - "meta": { - "source": "system" + "user_id": "", + "identity": { + "id": "", + "type": "", + "display_name": "", + "phones": null, + "emails": null, + "avatar": null, + "labels": null, + "meta": null } } }, "events": { "call_202": { + "user_id": "", + "import_id": "", "item": { "event_id": "call_202", "type": "call", @@ -83,6 +114,8 @@ } }, "contact_snapshot_person_zhangsan": { + "user_id": "", + "import_id": "", "item": { "event_id": "contact_snapshot_person_zhangsan", "type": "contact_snapshot", @@ -136,6 +169,8 @@ } }, "sms_101": { + "user_id": "", + "import_id": "", "item": { "event_id": "sms_101", "type": "sms", diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 1820187..1b1e952 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -3,164 +3,453 @@ package api import ( "context" "encoding/json" + "fmt" + "io" "net/http" + "os" + "path/filepath" + "strings" + "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/IsKenKenYa/Commory/backend/internal/config" "github.com/IsKenKenYa/Commory/backend/internal/importers" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" "github.com/IsKenKenYa/Commory/backend/internal/query" "github.com/IsKenKenYa/Commory/backend/internal/storage" ) +const refreshCookieName = "commory_refresh_token" + type Server struct { - store storage.Provider - service query.Service - validator *msglayer.Validator - importer importers.Importer + cfg config.Config + store storage.Provider + service query.Service + auth *auth.Service + validator *msglayer.Validator + importer importers.Importer } -func NewServer(store storage.Provider, validator *msglayer.Validator) *Server { +func NewServer(cfg config.Config, store storage.Provider, validator *msglayer.Validator) *Server { return &Server{ + cfg: cfg, store: store, service: query.New(store), + auth: auth.NewService(store, cfg.AuthSecret), validator: validator, importer: importers.JSONImporter{}, } } func (s *Server) Handler() http.Handler { - mux := http.NewServeMux() - mux.HandleFunc("/api/imports", s.handleImports) - mux.HandleFunc("/api/validate", s.handleValidate) - mux.HandleFunc("/api/events", s.handleEvents) - mux.HandleFunc("/api/events/", s.handleEvent) - mux.HandleFunc("/api/timeline", s.handleTimeline) - mux.HandleFunc("/api/identities", s.handleIdentities) - mux.HandleFunc("/api/identities/", s.handleIdentity) - mux.HandleFunc("/api/search", s.handleSearch) - mux.HandleFunc("/api/threads/", s.handleThread) - return mux + publicMux := http.NewServeMux() + publicMux.HandleFunc("/api/auth/register", s.handleRegister) + publicMux.HandleFunc("/api/auth/login", s.handleLogin) + publicMux.HandleFunc("/api/auth/refresh", s.handleRefresh) + publicMux.HandleFunc("/api/auth/logout", s.handleLogout) + + privateMux := http.NewServeMux() + privateMux.HandleFunc("/api/user/info", s.handleUserInfo) + privateMux.HandleFunc("/api/imports", s.handleImports) + privateMux.HandleFunc("/api/imports/", s.handleImportExport) + privateMux.HandleFunc("/api/imports/upload", s.handleImportUpload) + privateMux.HandleFunc("/api/imports/path", s.handleImportPath) + privateMux.HandleFunc("/api/validate/upload", s.handleValidateUpload) + privateMux.HandleFunc("/api/validate/path", s.handleValidatePath) + privateMux.HandleFunc("/api/dashboard", s.handleDashboard) + privateMux.HandleFunc("/api/events", s.handleEvents) + privateMux.HandleFunc("/api/events/", s.handleEvent) + privateMux.HandleFunc("/api/timeline", s.handleTimeline) + privateMux.HandleFunc("/api/identities", s.handleIdentities) + privateMux.HandleFunc("/api/identities/", s.handleIdentity) + privateMux.HandleFunc("/api/search", s.handleSearch) + privateMux.HandleFunc("/api/threads/", s.handleThread) + + root := http.NewServeMux() + root.Handle("/api/auth/", publicMux) + root.Handle("/api/", auth.Middleware(s.auth, privateMux)) + return root +} + +func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + UserName string `json:"userName"` + Email string `json:"email"` + Password string `json:"password"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + user, pair, err := s.auth.Register(r.Context(), req.UserName, req.Email, req.Password) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken) + writeJSON(w, http.StatusCreated, "registered", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + UserName string `json:"userName"` + Password string `json:"password"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + user, pair, err := s.auth.Login(r.Context(), r.RemoteAddr, req.UserName, req.Password) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handleRefresh(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + RefreshToken string `json:"refreshToken"` + } + _ = json.NewDecoder(r.Body).Decode(&req) + refreshToken := req.RefreshToken + if refreshToken == "" { + if cookie, err := r.Cookie(refreshCookieName); err == nil { + refreshToken = cookie.Value + } + } + pair, err := s.auth.Refresh(r.Context(), refreshToken) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken) + writeJSON(w, http.StatusOK, "ok", pair) +} + +func (s *Server) handleLogout(w http.ResponseWriter, r *http.Request) { + clearRefreshCookie(w) + writeJSON(w, http.StatusOK, "logged out", map[string]any{"success": true}) +} + +func (s *Server) handleUserInfo(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + user, err := s.auth.UserInfo(r.Context(), userID) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", user) } func (s *Server) handleImports(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + userID := auth.UserIDFromContext(r.Context()) + items, err := s.store.ListImports(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleImportExport(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + path := strings.TrimPrefix(r.URL.Path, "/api/imports/") + if !strings.HasSuffix(path, "/export") { + writeError(w, http.StatusNotFound, "not found") + return + } + importID := strings.TrimSuffix(path, "/export") + importID = strings.TrimSuffix(importID, "/") + raw, err := s.store.ExportImport(r.Context(), auth.UserIDFromContext(r.Context()), importID) + if err != nil { + writeError(w, http.StatusNotFound, err.Error()) + return + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", importID+".json")) + w.WriteHeader(http.StatusOK) + _, _ = w.Write(raw) +} + +func (s *Server) handleImportUpload(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + userID := auth.UserIDFromContext(r.Context()) + raw, sourceName, err := readUpload(r) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + export, raw, err := s.importer.ImportBytes(raw) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + importID, err := s.store.Import(r.Context(), userID, sourceName, export, raw) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusCreated, "imported", map[string]any{ + "import_id": importID, + "msglayer_version": export.Version, + }) +} + +func (s *Server) handleImportPath(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) return } var req struct { Path string `json:"path"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + writeError(w, http.StatusBadRequest, err.Error()) return } - export, raw, err := s.importer.Import(req.Path) + resolved, err := s.resolveAllowedPath(req.Path) if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + writeError(w, http.StatusForbidden, err.Error()) + return + } + export, raw, err := s.importer.Import(resolved) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) return } if err := s.validator.ValidateBytes(raw); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + writeError(w, http.StatusBadRequest, err.Error()) return } - importID, err := s.store.Import(r.Context(), req.Path, export, raw) + importID, err := s.store.Import(r.Context(), auth.UserIDFromContext(r.Context()), resolved, export, raw) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusCreated, map[string]any{ + writeJSON(w, http.StatusCreated, "imported", map[string]any{ "import_id": importID, "msglayer_version": export.Version, }) } -func (s *Server) handleValidate(w http.ResponseWriter, r *http.Request) { +func (s *Server) handleValidateUpload(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + raw, _, err := readUpload(r) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) +} + +func (s *Server) handleValidatePath(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) return } var req struct { Path string `json:"path"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + writeError(w, http.StatusBadRequest, err.Error()) + return + } + resolved, err := s.resolveAllowedPath(req.Path) + if err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + if err := s.validator.ValidateFile(resolved); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) +} + +func (s *Server) handleDashboard(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + imports, err := s.store.ListImports(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + identities, err := s.service.Identities(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) return } - if err := s.validator.ValidateFile(req.Path); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + events, err := s.service.Timeline(r.Context(), buildSearchParams(r, userID)) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, map[string]any{"valid": true}) + totalEvents := 0 + for _, item := range imports { + totalEvents += item.EventCount + } + lastActivity := "" + if len(events) > 0 { + lastActivity = events[0].Timestamp + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "importCount": len(imports), + "identityCount": len(identities), + "eventCount": totalEvents, + "lastActivity": lastActivity, + "recentImports": takeImports(imports, 5), + "recentEvents": takeEvents(events, 8), + }) } func (s *Server) handleEvents(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Events(r.Context(), buildSearchParams(r)) + items, err := s.service.Events(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, items) + writeJSON(w, http.StatusOK, "ok", items) } func (s *Server) handleEvent(w http.ResponseWriter, r *http.Request) { - id := r.URL.Path[len("/api/events/"):] - item, err := s.service.Event(r.Context(), id) + id := strings.TrimPrefix(r.URL.Path, "/api/events/") + item, err := s.service.Event(r.Context(), auth.UserIDFromContext(r.Context()), id) if err != nil { - http.Error(w, err.Error(), http.StatusNotFound) + writeError(w, http.StatusNotFound, err.Error()) return } - writeJSON(w, http.StatusOK, item) + writeJSON(w, http.StatusOK, "ok", item) } func (s *Server) handleTimeline(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Timeline(r.Context(), buildSearchParams(r)) + items, err := s.service.Timeline(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, items) + writeJSON(w, http.StatusOK, "ok", items) } func (s *Server) handleIdentities(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Identities(r.Context()) + items, err := s.service.Identities(r.Context(), auth.UserIDFromContext(r.Context())) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, items) + writeJSON(w, http.StatusOK, "ok", items) } func (s *Server) handleIdentity(w http.ResponseWriter, r *http.Request) { - id := r.URL.Path[len("/api/identities/"):] - item, err := s.service.Identity(r.Context(), id) + id := strings.TrimPrefix(r.URL.Path, "/api/identities/") + item, err := s.service.Identity(r.Context(), auth.UserIDFromContext(r.Context()), id) if err != nil { - http.Error(w, err.Error(), http.StatusNotFound) + writeError(w, http.StatusNotFound, err.Error()) return } - writeJSON(w, http.StatusOK, item) + writeJSON(w, http.StatusOK, "ok", item) } func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Search(r.Context(), buildSearchParams(r)) + items, err := s.service.Search(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, items) + writeJSON(w, http.StatusOK, "ok", items) } func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { - id := r.URL.Path[len("/api/threads/"):] - items, err := s.service.Thread(r.Context(), id) + id := strings.TrimPrefix(r.URL.Path, "/api/threads/") + items, err := s.service.Thread(r.Context(), auth.UserIDFromContext(r.Context()), id) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + writeError(w, http.StatusInternalServerError, err.Error()) return } - writeJSON(w, http.StatusOK, items) + writeJSON(w, http.StatusOK, "ok", items) } -func buildSearchParams(r *http.Request) msglayer.SearchParams { +func (s *Server) requireAdmin(ctx context.Context) error { + user, err := s.auth.UserInfo(ctx, auth.UserIDFromContext(ctx)) + if err != nil { + return err + } + for _, role := range user.Roles { + if role == "R_SUPER" || role == "R_ADMIN" { + return nil + } + } + return fmt.Errorf("admin privileges required") +} + +func (s *Server) resolveAllowedPath(input string) (string, error) { + if strings.TrimSpace(input) == "" { + return "", fmt.Errorf("path is required") + } + resolved, err := filepath.Abs(input) + if err != nil { + return "", err + } + for _, root := range s.cfg.AllowedImportDir { + if strings.HasPrefix(resolved, root+string(os.PathSeparator)) || resolved == root { + return resolved, nil + } + } + return "", fmt.Errorf("path is outside configured import roots") +} + +func buildSearchParams(r *http.Request, userID string) msglayer.SearchParams { q := r.URL.Query() - return msglayer.SearchParams{ + params := msglayer.SearchParams{ + UserID: userID, Keyword: q.Get("q"), ContactID: q.Get("contact"), Type: q.Get("type"), @@ -169,12 +458,80 @@ func buildSearchParams(r *http.Request) msglayer.SearchParams { To: q.Get("to"), Limit: 100, } + if limit := q.Get("limit"); limit != "" { + fmt.Sscanf(limit, "%d", ¶ms.Limit) + } + return params +} + +func readUpload(r *http.Request) ([]byte, string, error) { + contentType := r.Header.Get("Content-Type") + if strings.Contains(contentType, "multipart/form-data") { + if err := r.ParseMultipartForm(32 << 20); err != nil { + return nil, "", err + } + file, header, err := r.FormFile("file") + if err != nil { + return nil, "", err + } + defer file.Close() + data, err := io.ReadAll(file) + return data, header.Filename, err + } + data, err := io.ReadAll(r.Body) + if err != nil { + return nil, "", err + } + return data, "upload.json", nil } -func writeJSON(w http.ResponseWriter, status int, payload any) { +func writeJSON(w http.ResponseWriter, status int, msg string, data any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) - _ = json.NewEncoder(w).Encode(payload) + _ = json.NewEncoder(w).Encode(map[string]any{ + "code": status, + "msg": msg, + "data": data, + }) +} + +func writeError(w http.ResponseWriter, status int, msg string) { + writeJSON(w, status, msg, nil) +} + +func setRefreshCookie(w http.ResponseWriter, token string) { + http.SetCookie(w, &http.Cookie{ + Name: refreshCookieName, + Value: token, + Path: "/", + HttpOnly: true, + SameSite: http.SameSiteStrictMode, + Secure: false, + }) +} + +func clearRefreshCookie(w http.ResponseWriter) { + http.SetCookie(w, &http.Cookie{ + Name: refreshCookieName, + Value: "", + Path: "/", + MaxAge: -1, + HttpOnly: true, + }) +} + +func takeImports(items []storage.ImportSummary, n int) []storage.ImportSummary { + if len(items) <= n { + return items + } + return items[:n] +} + +func takeEvents(items []msglayer.TimelineItem, n int) []msglayer.TimelineItem { + if len(items) <= n { + return items + } + return items[:n] } func Shutdown(ctx context.Context, srv *http.Server) error { diff --git a/backend/internal/auth/middleware.go b/backend/internal/auth/middleware.go new file mode 100644 index 0000000..a9cb1c1 --- /dev/null +++ b/backend/internal/auth/middleware.go @@ -0,0 +1,34 @@ +package auth + +import ( + "context" + "net/http" + "strings" +) + +type contextKey string + +const userIDContextKey contextKey = "commory.user_id" + +func UserIDFromContext(ctx context.Context) string { + if value, ok := ctx.Value(userIDContextKey).(string); ok { + return value + } + return "" +} + +func Middleware(service *Service, next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + authHeader := strings.TrimSpace(r.Header.Get("Authorization")) + if authHeader == "" { + http.Error(w, "missing authorization header", http.StatusUnauthorized) + return + } + userID, err := service.ParseAccessToken(authHeader) + if err != nil { + http.Error(w, err.Error(), http.StatusUnauthorized) + return + } + next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), userIDContextKey, userID))) + }) +} diff --git a/backend/internal/auth/model.go b/backend/internal/auth/model.go new file mode 100644 index 0000000..75603e5 --- /dev/null +++ b/backend/internal/auth/model.go @@ -0,0 +1,14 @@ +package auth + +type TokenPair struct { + AccessToken string `json:"token"` + RefreshToken string `json:"refreshToken"` +} + +type UserInfo struct { + Buttons []string `json:"buttons"` + Roles []string `json:"roles"` + UserID string `json:"userId"` + UserName string `json:"userName"` + Email string `json:"email"` +} diff --git a/backend/internal/auth/service.go b/backend/internal/auth/service.go new file mode 100644 index 0000000..a688898 --- /dev/null +++ b/backend/internal/auth/service.go @@ -0,0 +1,278 @@ +package auth + +import ( + "context" + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "net" + "strings" + "sync" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +const ( + accessTokenTTL = 30 * time.Minute + refreshTokenTTL = 7 * 24 * time.Hour +) + +type Service struct { + store storage.Provider + secret []byte + loginMu sync.Mutex + loginWindow map[string][]time.Time +} + +func NewService(store storage.Provider, secret string) *Service { + return &Service{ + store: store, + secret: []byte(secret), + loginWindow: map[string][]time.Time{}, + } +} + +func (s *Service) Register(ctx context.Context, userName, email, password string) (UserInfo, TokenPair, error) { + userName = strings.TrimSpace(userName) + if userName == "" || strings.TrimSpace(password) == "" { + return UserInfo{}, TokenPair{}, fmt.Errorf("username and password are required") + } + + if _, err := s.store.FindUserByUserName(ctx, userName); err == nil { + return UserInfo{}, TokenPair{}, fmt.Errorf("username already exists") + } + + salt, hashed, err := hashPassword(password) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + + roles := []string{"R_ADMIN", "R_USER"} + buttons := []string{"view", "import", "admin"} + + now := time.Now().UTC() + record, err := s.store.CreateUser(ctx, storage.UserRecord{ + ID: randomID("user"), + UserName: userName, + Email: strings.TrimSpace(email), + PasswordHash: hashed, + PasswordSalt: salt, + Roles: roles, + Buttons: buttons, + CreatedAt: now, + UpdatedAt: now, + }) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + + pair, err := s.issueTokenPair(ctx, record) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + return toUserInfo(record), pair, nil +} + +func (s *Service) Login(ctx context.Context, remoteAddr, userName, password string) (UserInfo, TokenPair, error) { + if err := s.allowLoginAttempt(remoteAddr); err != nil { + return UserInfo{}, TokenPair{}, err + } + + record, err := s.store.FindUserByUserName(ctx, strings.TrimSpace(userName)) + if err != nil { + return UserInfo{}, TokenPair{}, fmt.Errorf("invalid username or password") + } + if !verifyPassword(password, record.PasswordSalt, record.PasswordHash) { + return UserInfo{}, TokenPair{}, fmt.Errorf("invalid username or password") + } + + pair, err := s.issueTokenPair(ctx, record) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + return toUserInfo(record), pair, nil +} + +func (s *Service) Refresh(ctx context.Context, refreshToken string) (TokenPair, error) { + token := strings.TrimSpace(refreshToken) + if token == "" { + return TokenPair{}, fmt.Errorf("refresh token is required") + } + record, err := s.store.ConsumeRefreshToken(ctx, hashToken(token)) + if err != nil { + return TokenPair{}, err + } + user, err := s.store.GetUser(ctx, record.UserID) + if err != nil { + return TokenPair{}, err + } + return s.issueTokenPair(ctx, user) +} + +func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) { + user, err := s.store.GetUser(ctx, userID) + if err != nil { + return UserInfo{}, err + } + return toUserInfo(user), nil +} + +func (s *Service) ParseAccessToken(token string) (string, error) { + token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) + parts := strings.Split(token, ".") + if len(parts) != 3 { + return "", fmt.Errorf("invalid token") + } + + signingInput := strings.Join(parts[:2], ".") + expected := signHS256(signingInput, s.secret) + if !hmac.Equal([]byte(expected), []byte(parts[2])) { + return "", fmt.Errorf("invalid token signature") + } + + payloadBytes, err := base64.RawURLEncoding.DecodeString(parts[1]) + if err != nil { + return "", fmt.Errorf("decode token payload: %w", err) + } + var payload struct { + Sub string `json:"sub"` + Exp int64 `json:"exp"` + } + if err := json.Unmarshal(payloadBytes, &payload); err != nil { + return "", fmt.Errorf("decode token json: %w", err) + } + if payload.Sub == "" || time.Now().Unix() > payload.Exp { + return "", fmt.Errorf("token expired") + } + return payload.Sub, nil +} + +func (s *Service) issueTokenPair(ctx context.Context, user storage.UserRecord) (TokenPair, error) { + accessToken, err := s.buildAccessToken(user) + if err != nil { + return TokenPair{}, err + } + refreshToken, refreshHash, err := buildRefreshToken() + if err != nil { + return TokenPair{}, err + } + if err := s.store.SaveRefreshToken(ctx, storage.RefreshTokenRecord{ + ID: randomID("refresh"), + UserID: user.ID, + TokenHash: refreshHash, + ExpiresAt: time.Now().UTC().Add(refreshTokenTTL), + CreatedAt: time.Now().UTC(), + }); err != nil { + return TokenPair{}, err + } + return TokenPair{ + AccessToken: accessToken, + RefreshToken: refreshToken, + }, nil +} + +func (s *Service) buildAccessToken(user storage.UserRecord) (string, error) { + headerBytes, _ := json.Marshal(map[string]string{"alg": "HS256", "typ": "JWT"}) + payloadBytes, err := json.Marshal(map[string]any{ + "sub": user.ID, + "userName": user.UserName, + "roles": user.Roles, + "exp": time.Now().Add(accessTokenTTL).Unix(), + }) + if err != nil { + return "", err + } + header := base64.RawURLEncoding.EncodeToString(headerBytes) + payload := base64.RawURLEncoding.EncodeToString(payloadBytes) + signingInput := header + "." + payload + return signingInput + "." + signHS256(signingInput, s.secret), nil +} + +func (s *Service) allowLoginAttempt(remoteAddr string) error { + s.loginMu.Lock() + defer s.loginMu.Unlock() + + host, _, err := net.SplitHostPort(remoteAddr) + if err != nil { + host = remoteAddr + } + now := time.Now() + cutoff := now.Add(-time.Minute) + window := s.loginWindow[host][:0] + for _, ts := range s.loginWindow[host] { + if ts.After(cutoff) { + window = append(window, ts) + } + } + if len(window) >= 5 { + s.loginWindow[host] = window + return fmt.Errorf("too many login attempts, please retry in a minute") + } + s.loginWindow[host] = append(window, now) + return nil +} + +func toUserInfo(user storage.UserRecord) UserInfo { + return UserInfo{ + Buttons: append([]string(nil), user.Buttons...), + Roles: append([]string(nil), user.Roles...), + UserID: user.ID, + UserName: user.UserName, + Email: user.Email, + } +} + +func hashPassword(password string) (salt string, hash string, err error) { + rawSalt := make([]byte, 16) + if _, err := rand.Read(rawSalt); err != nil { + return "", "", err + } + salt = hex.EncodeToString(rawSalt) + sum := derivePassword(password, salt) + return salt, hex.EncodeToString(sum[:]), nil +} + +func verifyPassword(password, salt, expected string) bool { + sum := derivePassword(password, salt) + return hmac.Equal([]byte(hex.EncodeToString(sum[:])), []byte(expected)) +} + +func derivePassword(password, salt string) [32]byte { + input := []byte(password + ":" + salt) + sum := sha256.Sum256(input) + for i := 0; i < 120000; i++ { + sum = sha256.Sum256(append(sum[:], input...)) + } + return sum +} + +func buildRefreshToken() (token string, tokenHash string, err error) { + raw := make([]byte, 32) + if _, err := rand.Read(raw); err != nil { + return "", "", err + } + token = base64.RawURLEncoding.EncodeToString(raw) + return token, hashToken(token), nil +} + +func hashToken(token string) string { + sum := sha256.Sum256([]byte(token)) + return hex.EncodeToString(sum[:]) +} + +func signHS256(input string, secret []byte) string { + mac := hmac.New(sha256.New, secret) + _, _ = mac.Write([]byte(input)) + return base64.RawURLEncoding.EncodeToString(mac.Sum(nil)) +} + +func randomID(prefix string) string { + raw := make([]byte, 8) + _, _ = rand.Read(raw) + return fmt.Sprintf("%s_%x", prefix, raw) +} diff --git a/backend/internal/cli/root.go b/backend/internal/cli/root.go index 45df4c0..5356ee2 100644 --- a/backend/internal/cli/root.go +++ b/backend/internal/cli/root.go @@ -17,6 +17,8 @@ import ( "github.com/IsKenKenYa/Commory/backend/internal/storage" ) +const cliUserID = "cli-user" + func Execute(ctx context.Context, args []string, stdout, stderr io.Writer) error { if len(args) == 0 { printUsage(stdout) @@ -60,7 +62,7 @@ func runServe(ctx context.Context, stdout io.Writer) error { return err } defer store.Close() - server := api.NewServer(store, validator) + server := api.NewServer(cfg, store, validator) httpServer := &http.Server{Addr: cfg.ListenAddr, Handler: server.Handler()} go func() { <-ctx.Done() @@ -86,7 +88,7 @@ func runImport(ctx context.Context, path string, stdout io.Writer) error { if err := validator.ValidateBytes(raw); err != nil { return err } - importID, err := store.Import(ctx, path, export, raw) + importID, err := store.Import(ctx, cliUserID, path, export, raw) if err != nil { return err } @@ -114,6 +116,7 @@ func runQuery(ctx context.Context, args []string, stdout io.Writer) error { flags := flag.NewFlagSet("query", flag.ContinueOnError) flags.SetOutput(io.Discard) var params msglayer.SearchParams + params.UserID = cliUserID params.Limit = 100 flags.StringVar(¶ms.ContactID, "contact", "", "") flags.StringVar(¶ms.Type, "type", "", "") @@ -141,6 +144,7 @@ func runTimeline(ctx context.Context, args []string, stdout io.Writer) error { flags := flag.NewFlagSet("timeline", flag.ContinueOnError) flags.SetOutput(io.Discard) var params msglayer.SearchParams + params.UserID = cliUserID params.Limit = 100 flags.StringVar(¶ms.From, "from", "", "") flags.StringVar(¶ms.To, "to", "", "") @@ -170,7 +174,7 @@ func runContacts(ctx context.Context, args []string, stdout io.Writer) error { return err } defer store.Close() - items, err := query.New(store).Identities(ctx) + items, err := query.New(store).Identities(ctx, cliUserID) if err != nil { return err } @@ -195,7 +199,7 @@ func runExport(ctx context.Context, args []string, stdout io.Writer) error { return err } defer store.Close() - raw, err := store.ExportImport(ctx, importID) + raw, err := store.ExportImport(ctx, cliUserID, importID) if err != nil { return err } diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 9062fcc..7e1eac8 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -3,23 +3,34 @@ package config import ( "os" "path/filepath" + "strings" ) type Config struct { - Driver string - DSN string - DatabaseURL string - ListenAddr string - SchemaRoot string + Driver string + DSN string + DatabaseURL string + ListenAddr string + SchemaRoot string + AuthSecret string + AllowedImportDir []string } func Load() (Config, error) { + schemaRoot := env("COMMORY_SCHEMA_ROOT", filepath.Join("..", "msglayer", "schema", "v0.1", "root.schema.json")) + if !filepath.IsAbs(schemaRoot) { + if abs, err := filepath.Abs(schemaRoot); err == nil { + schemaRoot = abs + } + } return Config{ - Driver: env("COMMORY_DB_DRIVER", "sqlite"), - DSN: env("COMMORY_DB_DSN", filepath.Join(".", "data", "commory-store.json")), - DatabaseURL: env("COMMORY_DATABASE_URL", ""), - ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), - SchemaRoot: env("COMMORY_SCHEMA_ROOT", filepath.Join("..", "msglayer", "schema", "v0.1", "root.schema.json")), + Driver: env("COMMORY_DB_DRIVER", "sqlite"), + DSN: env("COMMORY_DB_DSN", filepath.Join(".", "data", "commory-store.json")), + DatabaseURL: env("COMMORY_DATABASE_URL", ""), + ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), + SchemaRoot: schemaRoot, + AuthSecret: env("COMMORY_AUTH_SECRET", "commory-dev-secret"), + AllowedImportDir: splitAndClean(env("COMMORY_ALLOWED_IMPORT_DIRS", filepath.Join("..", "msglayer", "examples"))), }, nil } @@ -29,3 +40,21 @@ func env(key, fallback string) string { } return fallback } + +func splitAndClean(raw string) []string { + parts := strings.Split(raw, ",") + result := make([]string, 0, len(parts)) + for _, part := range parts { + part = strings.TrimSpace(part) + if part == "" { + continue + } + if !filepath.IsAbs(part) { + if abs, err := filepath.Abs(part); err == nil { + part = abs + } + } + result = append(result, part) + } + return result +} diff --git a/backend/internal/importers/importer.go b/backend/internal/importers/importer.go index 033d872..c39c262 100644 --- a/backend/internal/importers/importer.go +++ b/backend/internal/importers/importer.go @@ -10,6 +10,7 @@ import ( type Importer interface { Import(path string) (msglayer.RootExport, []byte, error) + ImportBytes([]byte) (msglayer.RootExport, []byte, error) } type JSONImporter struct{} @@ -19,6 +20,10 @@ func (JSONImporter) Import(path string) (msglayer.RootExport, []byte, error) { if err != nil { return msglayer.RootExport{}, nil, err } + return JSONImporter{}.ImportBytes(data) +} + +func (JSONImporter) ImportBytes(data []byte) (msglayer.RootExport, []byte, error) { var export msglayer.RootExport if err := json.Unmarshal(data, &export); err != nil { return msglayer.RootExport{}, nil, fmt.Errorf("decode msglayer json: %w", err) diff --git a/backend/internal/msglayer/types.go b/backend/internal/msglayer/types.go index 2de954f..b568ec8 100644 --- a/backend/internal/msglayer/types.go +++ b/backend/internal/msglayer/types.go @@ -1,5 +1,7 @@ package msglayer +const Version = "msglayer/v0.1" + type RootExport struct { Version string `json:"version"` ExportedAt string `json:"exported_at"` @@ -43,6 +45,7 @@ type Relation struct { } type SearchParams struct { + UserID string Keyword string ContactID string Type string diff --git a/backend/internal/msglayer/validator.go b/backend/internal/msglayer/validator.go index 958f508..421ff1c 100644 --- a/backend/internal/msglayer/validator.go +++ b/backend/internal/msglayer/validator.go @@ -19,8 +19,8 @@ func (v *Validator) ValidateBytes(data []byte) error { if err := json.Unmarshal(data, &payload); err != nil { return err } - if payload.Version != "msglayer/v0.1" { - return fmt.Errorf("schema validation failed: version must be msglayer/v0.1") + if payload.Version != Version { + return fmt.Errorf("schema validation failed: version must be %s", Version) } if payload.ExportedAt == "" { return fmt.Errorf("schema validation failed: exported_at is required") @@ -29,8 +29,11 @@ func (v *Validator) ValidateBytes(data []byte) error { return fmt.Errorf("schema validation failed: source.platform, source.device_id, and source.app_version are required") } for _, identity := range payload.Identities { - if identity.ID == "" || identity.Type == "" { - return fmt.Errorf("schema validation failed: identity id/type required") + if identity.ID == "" || identity.Type == "" || identity.DisplayName == "" { + return fmt.Errorf("schema validation failed: identity id/type/display_name required") + } + if identity.Phones == nil || identity.Emails == nil || identity.Labels == nil { + return fmt.Errorf("schema validation failed: identity phones/emails/labels must be present") } switch identity.Type { case "person", "device", "account": @@ -42,6 +45,14 @@ func (v *Validator) ValidateBytes(data []byte) error { if event.ID == "" || event.Timestamp == "" || event.Type == "" { return fmt.Errorf("schema validation failed: event id/type/timestamp required") } + if len(event.Participants) == 0 { + return fmt.Errorf("schema validation failed: participants must contain at least one item") + } + for _, participant := range event.Participants { + if participant == "" { + return fmt.Errorf("schema validation failed: participant ids must be non-empty") + } + } switch event.Type { case "sms": if event.Direction != "inbound" && event.Direction != "outbound" { @@ -58,6 +69,9 @@ func (v *Validator) ValidateBytes(data []byte) error { return fmt.Errorf("schema validation failed: call content.duration_sec required") } case "voice": + if event.Direction != "inbound" && event.Direction != "outbound" { + return fmt.Errorf("schema validation failed: voice direction invalid") + } if _, ok := event.Content["file"]; !ok { return fmt.Errorf("schema validation failed: voice content.file required") } @@ -71,7 +85,15 @@ func (v *Validator) ValidateBytes(data []byte) error { default: return fmt.Errorf("schema validation failed: unsupported event type %q", event.Type) } + for _, relation := range event.Relations { + switch relation.Type { + case "same_thread", "reply_to", "derived_from", "references_identity": + default: + return fmt.Errorf("schema validation failed: unsupported relation type %q", relation.Type) + } + } } + // TODO: additionalProperties parity still relies on the JSON Schema files until a full schema engine is introduced. return nil } diff --git a/backend/internal/msglayer/validator_test.go b/backend/internal/msglayer/validator_test.go index f3a2b02..cd8bd75 100644 --- a/backend/internal/msglayer/validator_test.go +++ b/backend/internal/msglayer/validator_test.go @@ -39,6 +39,63 @@ func TestValidationFailsForUnknownEventType(t *testing.T) { } } +func TestValidationFailsForEmptyParticipant(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":[""],"content":{"text":"hi","attachments":[]},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected participant validation to fail") + } +} + +func TestValidationFailsForVoiceDirection(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"voice_1","type":"voice","timestamp":"2026-01-01T12:00:00Z","direction":"system","participants":["self/x"],"content":{"file":"file://voice/001.mp3","transcript":"hi","summary":"hi"},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected voice direction validation to fail") + } +} + +func TestValidationFailsForRelationType(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{"text":"hi","attachments":[]},"meta":{},"relations":[{"type":"bad_relation","target":"x"}]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected relation validation to fail") + } +} + func projectPath(parts ...string) string { _, file, _, _ := runtime.Caller(0) base := filepath.Join(filepath.Dir(file), "..", "..", "..") diff --git a/backend/internal/query/service.go b/backend/internal/query/service.go index 2d5d8f2..116b597 100644 --- a/backend/internal/query/service.go +++ b/backend/internal/query/service.go @@ -27,18 +27,18 @@ func (s Service) Timeline(ctx context.Context, params msglayer.SearchParams) ([] return s.store.Timeline(ctx, params) } -func (s Service) Event(ctx context.Context, id string) (msglayer.TimelineItem, error) { - return s.store.GetEvent(ctx, id) +func (s Service) Event(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { + return s.store.GetEvent(ctx, userID, id) } -func (s Service) Thread(ctx context.Context, id string) ([]msglayer.TimelineItem, error) { - return s.store.GetThread(ctx, id) +func (s Service) Thread(ctx context.Context, userID, id string) ([]msglayer.TimelineItem, error) { + return s.store.GetThread(ctx, userID, id) } -func (s Service) Identities(ctx context.Context) ([]msglayer.Identity, error) { - return s.store.ListIdentities(ctx) +func (s Service) Identities(ctx context.Context, userID string) ([]msglayer.Identity, error) { + return s.store.ListIdentities(ctx, userID) } -func (s Service) Identity(ctx context.Context, id string) (msglayer.Identity, error) { - return s.store.GetIdentity(ctx, id) +func (s Service) Identity(ctx context.Context, userID, id string) (msglayer.Identity, error) { + return s.store.GetIdentity(ctx, userID, id) } diff --git a/backend/internal/storage/sqlstore.go b/backend/internal/storage/filestore.go similarity index 54% rename from backend/internal/storage/sqlstore.go rename to backend/internal/storage/filestore.go index 635a1c4..36c6a76 100644 --- a/backend/internal/storage/sqlstore.go +++ b/backend/internal/storage/filestore.go @@ -2,6 +2,7 @@ package storage import ( "context" + "crypto/sha1" "encoding/json" "fmt" "os" @@ -15,22 +16,34 @@ import ( ) type storeSnapshot struct { - Imports map[string]storedImport `json:"imports"` - Identities map[string]msglayer.Identity `json:"identities"` - Events map[string]storedEvent `json:"events"` + Users map[string]UserRecord `json:"users"` + RefreshTokens map[string]RefreshTokenRecord `json:"refresh_tokens"` + Imports map[string]storedImport `json:"imports"` + Identities map[string]storedIdentity `json:"identities"` + Events map[string]storedEvent `json:"events"` } type storedImport struct { ID string `json:"id"` + UserID string `json:"user_id"` SchemaVersion string `json:"schema_version"` ImportedAt string `json:"imported_at"` SourcePath string `json:"source_path"` RawJSON string `json:"raw_json"` + EventCount int `json:"event_count"` + IdentityCount int `json:"identity_count"` +} + +type storedIdentity struct { + UserID string `json:"user_id"` + Identity msglayer.Identity `json:"identity"` } type storedEvent struct { - Item msglayer.TimelineItem `json:"item"` - Raw msglayer.Event `json:"raw"` + UserID string `json:"user_id"` + ImportID string `json:"import_id"` + Item msglayer.TimelineItem `json:"item"` + Raw msglayer.Event `json:"raw"` } type fileStore struct { @@ -40,14 +53,16 @@ type fileStore struct { snapshot storeSnapshot } -func newSQLStore(path, name string) Provider { +func newFileStore(path, name string) Provider { return &fileStore{ name: name, path: path, snapshot: storeSnapshot{ - Imports: map[string]storedImport{}, - Identities: map[string]msglayer.Identity{}, - Events: map[string]storedEvent{}, + Users: map[string]UserRecord{}, + RefreshTokens: map[string]RefreshTokenRecord{}, + Imports: map[string]storedImport{}, + Identities: map[string]storedIdentity{}, + Events: map[string]storedEvent{}, }, } } @@ -74,7 +89,7 @@ func (s *fileStore) Init(ctx context.Context) error { return json.Unmarshal(data, &s.snapshot) } -func (s *fileStore) Import(ctx context.Context, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { +func (s *fileStore) Import(ctx context.Context, userID string, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { _ = ctx s.mu.Lock() defer s.mu.Unlock() @@ -82,16 +97,24 @@ func (s *fileStore) Import(ctx context.Context, sourcePath string, export msglay importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) s.snapshot.Imports[importID] = storedImport{ ID: importID, + UserID: userID, SchemaVersion: export.Version, ImportedAt: time.Now().UTC().Format(time.RFC3339), SourcePath: sourcePath, RawJSON: string(raw), + EventCount: len(export.Events), + IdentityCount: len(export.Identities), } for _, identity := range export.Identities { - s.snapshot.Identities[identity.ID] = identity + s.snapshot.Identities[scopeKey(userID, identity.ID)] = storedIdentity{ + UserID: userID, + Identity: identity, + } } for _, event := range export.Events { - s.snapshot.Events[event.ID] = storedEvent{ + s.snapshot.Events[scopeKey(userID, event.ID)] = storedEvent{ + UserID: userID, + ImportID: importID, Item: msglayer.TimelineItem{ EventID: event.ID, Type: event.Type, @@ -108,49 +131,77 @@ func (s *fileStore) Import(ctx context.Context, sourcePath string, export msglay return importID, s.persist() } -func (s *fileStore) ExportImport(ctx context.Context, importID string) ([]byte, error) { +func (s *fileStore) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + + items := make([]ImportSummary, 0, len(s.snapshot.Imports)) + for _, item := range s.snapshot.Imports { + if item.UserID != userID { + continue + } + importedAt, _ := time.Parse(time.RFC3339, item.ImportedAt) + items = append(items, ImportSummary{ + ID: item.ID, + UserID: item.UserID, + SchemaVersion: item.SchemaVersion, + ImportedAt: importedAt, + SourcePath: item.SourcePath, + EventCount: item.EventCount, + IdentityCount: item.IdentityCount, + }) + } + sort.Slice(items, func(i, j int) bool { return items[i].ImportedAt.After(items[j].ImportedAt) }) + return items, nil +} + +func (s *fileStore) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() if importID == "" { var err error - importID, err = s.latestImportIDLocked() + importID, err = s.latestImportIDLocked(userID) if err != nil { return nil, err } } item, ok := s.snapshot.Imports[importID] - if !ok { + if !ok || item.UserID != userID { return nil, fmt.Errorf("import not found: %s", importID) } return []byte(item.RawJSON), nil } -func (s *fileStore) LatestImportID(ctx context.Context) (string, error) { +func (s *fileStore) LatestImportID(ctx context.Context, userID string) (string, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() - return s.latestImportIDLocked() + return s.latestImportIDLocked(userID) } -func (s *fileStore) latestImportIDLocked() (string, error) { - if len(s.snapshot.Imports) == 0 { - return "", fmt.Errorf("no imports found") - } +func (s *fileStore) latestImportIDLocked(userID string) (string, error) { imports := make([]storedImport, 0, len(s.snapshot.Imports)) for _, item := range s.snapshot.Imports { + if item.UserID != userID { + continue + } imports = append(imports, item) } + if len(imports) == 0 { + return "", fmt.Errorf("no imports found") + } sort.Slice(imports, func(i, j int) bool { return imports[i].ImportedAt > imports[j].ImportedAt }) return imports[0].ID, nil } -func (s *fileStore) GetEvent(ctx context.Context, id string) (msglayer.TimelineItem, error) { +func (s *fileStore) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() - item, ok := s.snapshot.Events[id] - if !ok { + item, ok := s.snapshot.Events[scopeKey(userID, id)] + if !ok || item.UserID != userID { return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) } return item.Item, nil @@ -175,6 +226,9 @@ func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchPara var items []msglayer.TimelineItem for _, stored := range s.snapshot.Events { + if stored.UserID != params.UserID { + continue + } if keywordOnly && params.Keyword == "" { continue } @@ -190,6 +244,7 @@ func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchPara if params.Type != "" && stored.Item.Type != params.Type { continue } + // Timestamp ordering/filtering relies on normalized UTC RFC3339 strings. if params.From != "" && stored.Item.Timestamp < params.From { continue } @@ -205,35 +260,41 @@ func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchPara return items, nil } -func (s *fileStore) ListIdentities(ctx context.Context) ([]msglayer.Identity, error) { +func (s *fileStore) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() items := make([]msglayer.Identity, 0, len(s.snapshot.Identities)) for _, identity := range s.snapshot.Identities { - items = append(items, identity) + if identity.UserID != userID { + continue + } + items = append(items, identity.Identity) } sort.Slice(items, func(i, j int) bool { return items[i].DisplayName < items[j].DisplayName }) return items, nil } -func (s *fileStore) GetIdentity(ctx context.Context, id string) (msglayer.Identity, error) { +func (s *fileStore) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() - identity, ok := s.snapshot.Identities[id] - if !ok { + identity, ok := s.snapshot.Identities[scopeKey(userID, id)] + if !ok || identity.UserID != userID { return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) } - return identity, nil + return identity.Identity, nil } -func (s *fileStore) GetThread(ctx context.Context, threadID string) ([]msglayer.TimelineItem, error) { +func (s *fileStore) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { _ = ctx s.mu.RLock() defer s.mu.RUnlock() var items []msglayer.TimelineItem for _, stored := range s.snapshot.Events { + if stored.UserID != userID { + continue + } for _, relation := range stored.Raw.Relations { if relation.Type == "same_thread" && relation.Target == threadID { items = append(items, stored.Item) @@ -245,6 +306,74 @@ func (s *fileStore) GetThread(ctx context.Context, threadID string) ([]msglayer. return items, nil } +func (s *fileStore) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + for _, existing := range s.snapshot.Users { + if strings.EqualFold(existing.UserName, user.UserName) { + return UserRecord{}, fmt.Errorf("username already exists") + } + } + s.snapshot.Users[user.ID] = user + return user, s.persist() +} + +func (s *fileStore) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + for _, user := range s.snapshot.Users { + if strings.EqualFold(user.UserName, userName) { + return user, nil + } + } + return UserRecord{}, fmt.Errorf("user not found") +} + +func (s *fileStore) GetUser(ctx context.Context, userID string) (UserRecord, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + user, ok := s.snapshot.Users[userID] + if !ok { + return UserRecord{}, fmt.Errorf("user not found") + } + return user, nil +} + +func (s *fileStore) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.RefreshTokens[token.ID] = token + return s.persist() +} + +func (s *fileStore) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + for key, token := range s.snapshot.RefreshTokens { + if token.TokenHash != tokenHash { + continue + } + if !token.RevokedAt.IsZero() { + return RefreshTokenRecord{}, fmt.Errorf("refresh token revoked") + } + if time.Now().After(token.ExpiresAt) { + return RefreshTokenRecord{}, fmt.Errorf("refresh token expired") + } + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[key] = token + if err := s.persist(); err != nil { + return RefreshTokenRecord{}, err + } + return token, nil + } + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") +} + func EnsureParentDir(path string) error { dir := filepath.Dir(path) if dir == "." || dir == "" { @@ -261,6 +390,11 @@ func (s *fileStore) persist() error { return os.WriteFile(s.path, data, 0o644) } +func scopeKey(userID, rawID string) string { + hash := sha1.Sum([]byte(userID)) + return fmt.Sprintf("%x:%s", hash[:4], rawID) +} + func summarizeEvent(event msglayer.Event) string { switch event.Type { case "sms": diff --git a/backend/internal/storage/postgres.go b/backend/internal/storage/postgres.go index 41f2610..6807010 100644 --- a/backend/internal/storage/postgres.go +++ b/backend/internal/storage/postgres.go @@ -1,5 +1,5 @@ package storage func NewPostgresProvider(dsn string) (Provider, error) { - return newSQLStore(dsn, "postgres"), nil + return newFileStore(dsn, "filestore/postgres-adapter"), nil } diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go index ed7b560..134edc1 100644 --- a/backend/internal/storage/sqlite.go +++ b/backend/internal/storage/sqlite.go @@ -1,5 +1,5 @@ package storage func NewSQLiteProvider(dsn string) (Provider, error) { - return newSQLStore(dsn, "sqlite"), nil + return newFileStore(dsn, "filestore/sqlite-adapter"), nil } diff --git a/backend/internal/storage/sqlite_test.go b/backend/internal/storage/sqlite_test.go index 0d780e5..45ad109 100644 --- a/backend/internal/storage/sqlite_test.go +++ b/backend/internal/storage/sqlite_test.go @@ -37,7 +37,7 @@ func TestSQLiteImportAndQuery(t *testing.T) { if err := validator.ValidateBytes(raw); err != nil { t.Fatal(err) } - importID, err := store.Import(ctx, sample, export, raw) + importID, err := store.Import(ctx, "test-user", sample, export, raw) if err != nil { t.Fatal(err) } @@ -45,7 +45,7 @@ func TestSQLiteImportAndQuery(t *testing.T) { t.Fatal("expected import id") } - items, err := store.Search(ctx, msglayer.SearchParams{Keyword: "验证码", Limit: 10}) + items, err := store.Search(ctx, msglayer.SearchParams{UserID: "test-user", Keyword: "验证码", Limit: 10}) if err != nil { t.Fatal(err) } @@ -53,7 +53,7 @@ func TestSQLiteImportAndQuery(t *testing.T) { t.Fatal("expected keyword search hits") } - thread, err := store.GetThread(ctx, "thread_42") + thread, err := store.GetThread(ctx, "test-user", "thread_42") if err != nil { t.Fatal(err) } @@ -61,7 +61,7 @@ func TestSQLiteImportAndQuery(t *testing.T) { t.Fatal("expected thread reconstruction results") } - rawExport, err := store.ExportImport(ctx, "") + rawExport, err := store.ExportImport(ctx, "test-user", "") if err != nil { t.Fatal(err) } diff --git a/backend/internal/storage/storage.go b/backend/internal/storage/storage.go index 61814a4..442f13e 100644 --- a/backend/internal/storage/storage.go +++ b/backend/internal/storage/storage.go @@ -2,22 +2,60 @@ package storage import ( "context" + "time" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" ) +type UserRecord struct { + ID string `json:"id"` + UserName string `json:"user_name"` + Email string `json:"email"` + PasswordHash string `json:"password_hash"` + PasswordSalt string `json:"password_salt"` + Roles []string `json:"roles"` + Buttons []string `json:"buttons"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type RefreshTokenRecord struct { + ID string `json:"id"` + UserID string `json:"user_id"` + TokenHash string `json:"token_hash"` + ExpiresAt time.Time `json:"expires_at"` + CreatedAt time.Time `json:"created_at"` + RevokedAt time.Time `json:"revoked_at"` +} + +type ImportSummary struct { + ID string `json:"id"` + UserID string `json:"user_id"` + SchemaVersion string `json:"schema_version"` + ImportedAt time.Time `json:"imported_at"` + SourcePath string `json:"source_path"` + EventCount int `json:"event_count"` + IdentityCount int `json:"identity_count"` +} + type Provider interface { Name() string Init(context.Context) error - Import(context.Context, string, msglayer.RootExport, []byte) (string, error) - ExportImport(context.Context, string) ([]byte, error) - LatestImportID(context.Context) (string, error) - GetEvent(context.Context, string) (msglayer.TimelineItem, error) + Import(context.Context, string, string, msglayer.RootExport, []byte) (string, error) + ListImports(context.Context, string) ([]ImportSummary, error) + ExportImport(context.Context, string, string) ([]byte, error) + LatestImportID(context.Context, string) (string, error) + GetEvent(context.Context, string, string) (msglayer.TimelineItem, error) ListEvents(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) Search(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) Timeline(context.Context, msglayer.SearchParams) ([]msglayer.TimelineItem, error) - ListIdentities(context.Context) ([]msglayer.Identity, error) - GetIdentity(context.Context, string) (msglayer.Identity, error) - GetThread(context.Context, string) ([]msglayer.TimelineItem, error) + ListIdentities(context.Context, string) ([]msglayer.Identity, error) + GetIdentity(context.Context, string, string) (msglayer.Identity, error) + GetThread(context.Context, string, string) ([]msglayer.TimelineItem, error) + CreateUser(context.Context, UserRecord) (UserRecord, error) + FindUserByUserName(context.Context, string) (UserRecord, error) + GetUser(context.Context, string) (UserRecord, error) + SaveRefreshToken(context.Context, RefreshTokenRecord) error + ConsumeRefreshToken(context.Context, string) (RefreshTokenRecord, error) Close() error } diff --git a/msglayer/docs/mapping-android.md b/msglayer/docs/mapping-android.md index ca1c4e1..81bbdf4 100644 --- a/msglayer/docs/mapping-android.md +++ b/msglayer/docs/mapping-android.md @@ -48,6 +48,7 @@ Every exported identity from contacts also generates a `contact_snapshot` event: - `Message.type` -> `direction` - `1` => `inbound` - `2` => `outbound` + - `3/4/5/6` => exported as `outbound` for schema compatibility while preserving the original Android type in `meta.raw_type` - fallback => `inbound` - `Message.address` -> participant identity resolution input - `Message.body` -> `content.text` @@ -64,6 +65,8 @@ Every exported identity from contacts also generates a `contact_snapshot` event: - `CallLog.duration` -> `content.duration_sec` - `CallLog.contact` -> `meta.contact_name` +Timestamp ordering in exports relies on the mapper normalizing all event timestamps to UTC RFC3339 before sorting. + ## Restore Boundary `MsgLayer` is now the primary export format. @@ -75,3 +78,14 @@ Current restore compatibility is maintained by converting `MsgLayer` events back - `identity/contact_snapshot` -> `ContactData` This keeps restore behavior working while the write path moves to the new standard. + +## Known Data Loss On Round-Trip + +The `MsgLayer -> legacy restore DTO` bridge intentionally preserves compatibility over perfect fidelity in v0.1. + +Known losses today: + +- contact `groups`, `websites`, and `note` remain in identity metadata only +- avatar/photo data is not restored into the legacy contact DTO +- legacy Android raw message/call types remain metadata, not first-class restore fields +- non-numeric event IDs fall back to derived numeric IDs during restore bridging diff --git a/msglayer/docs/versioning.md b/msglayer/docs/versioning.md index 1957bbf..7c55839 100644 --- a/msglayer/docs/versioning.md +++ b/msglayer/docs/versioning.md @@ -18,3 +18,8 @@ - Android export switches to `MsgLayer` - Go backend import/validation targets `MsgLayer` - legacy backup JSON remains restore-compatible only through bridge converters + +## Relation Type Status In v0.1 + +- Active in current code paths: `same_thread`, `references_identity` +- Reserved for future producers/consumers: `reply_to`, `derived_from` diff --git a/msglayer/schema/v0.1/common.schema.json b/msglayer/schema/v0.1/common.schema.json index b4ea487..77255ec 100644 --- a/msglayer/schema/v0.1/common.schema.json +++ b/msglayer/schema/v0.1/common.schema.json @@ -17,7 +17,9 @@ } }, "meta": { - "type": "object" + "type": "object", + "description": "Open-ended metadata bag for source-specific fields that are intentionally not standardized in v0.1.", + "additionalProperties": true } } } diff --git a/msglayer/schema/v0.1/content.sms.schema.json b/msglayer/schema/v0.1/content.sms.schema.json index e1f5846..2d3dce6 100644 --- a/msglayer/schema/v0.1/content.sms.schema.json +++ b/msglayer/schema/v0.1/content.sms.schema.json @@ -13,8 +13,10 @@ }, "attachments": { "type": "array", + "description": "Attachment references should be URI strings when present.", "items": { - "type": "string" + "type": "string", + "format": "uri" } } }, diff --git a/msglayer/schema/v0.1/content.voice.schema.json b/msglayer/schema/v0.1/content.voice.schema.json index 6dca77a..d5efa14 100644 --- a/msglayer/schema/v0.1/content.voice.schema.json +++ b/msglayer/schema/v0.1/content.voice.schema.json @@ -10,7 +10,8 @@ ], "properties": { "file": { - "type": "string" + "type": "string", + "format": "uri" }, "transcript": { "type": "string" diff --git a/msglayer/schema/v0.1/event.schema.json b/msglayer/schema/v0.1/event.schema.json index c5323ee..4ee22d5 100644 --- a/msglayer/schema/v0.1/event.schema.json +++ b/msglayer/schema/v0.1/event.schema.json @@ -42,7 +42,8 @@ "type": "array", "minItems": 1, "items": { - "type": "string" + "type": "string", + "minLength": 1 } }, "content": { diff --git a/msglayer/schema/v0.1/identity.schema.json b/msglayer/schema/v0.1/identity.schema.json index e3dea1f..6c2ca58 100644 --- a/msglayer/schema/v0.1/identity.schema.json +++ b/msglayer/schema/v0.1/identity.schema.json @@ -37,7 +37,8 @@ "type": [ "string", "null" - ] + ], + "format": "uri" }, "labels": { "$ref": "common.schema.json#/definitions/stringArray" diff --git a/previewer/README.en.md b/previewer/README.en.md index aa3095b..ae7be84 100644 --- a/previewer/README.en.md +++ b/previewer/README.en.md @@ -2,6 +2,8 @@ A clean and elegant SMS backup viewer for SMS Backup & Restore exported files +> Deprecated: the maintained archive experience now lives in the main `web` application. This standalone previewer remains only as historical reference. + ## 💝 Special Thanks This project wouldn't be possible without [SMS Backup & Restore](https://play.google.com/store/apps/details?id=com.riteshsahu.SMSBackupRestore). This excellent Android app inspired the creation of this project, aiming to provide users with a better SMS backup browsing experience. @@ -193,4 +195,4 @@ To ensure smooth handling of large XML files: ## License -This project is licensed under the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/). \ No newline at end of file +This project is licensed under the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/). diff --git a/previewer/README.md b/previewer/README.md index eff8bb2..29ac289 100644 --- a/previewer/README.md +++ b/previewer/README.md @@ -3,6 +3,8 @@ [English](README.en.md) | 简体中文 > 一个简洁优雅的短信备份预览工具,基于 SMS Backup & Restore 应用导出的备份文件 +> +> 已弃用:当前维护中的归档体验已迁移到主 `web` 应用,这个独立预览器仅保留作历史参考。 ## 💝 特别感谢 diff --git a/previewer/package.json b/previewer/package.json index 60d7dae..c903bc2 100644 --- a/previewer/package.json +++ b/previewer/package.json @@ -1,5 +1,5 @@ { - "name": "sms-previewer", + "name": "commory-legacy-previewer", "private": true, "version": "0.0.0", "type": "module", diff --git a/web/src/api/auth.ts b/web/src/api/auth.ts index 9dc7b6a..0006133 100644 --- a/web/src/api/auth.ts +++ b/web/src/api/auth.ts @@ -14,6 +14,13 @@ export function fetchLogin(params: Api.Auth.LoginParams) { }) } +export function fetchRegister(params: Api.Auth.RegisterParams) { + return request.post({ + url: '/api/auth/register', + params + }) +} + /** * 获取用户信息 * @returns 用户信息 @@ -21,9 +28,20 @@ export function fetchLogin(params: Api.Auth.LoginParams) { export function fetchGetUserInfo() { return request.get({ url: '/api/user/info' - // 自定义请求头 - // headers: { - // 'X-Custom-Header': 'your-custom-value' - // } + }) +} + +export function fetchRefreshToken(refreshToken: string) { + return request.post({ + url: '/api/auth/refresh', + params: { refreshToken }, + showErrorMessage: false + }) +} + +export function fetchLogout() { + return request.post<{ success: boolean }>({ + url: '/api/auth/logout', + showErrorMessage: false }) } diff --git a/web/src/api/commory.ts b/web/src/api/commory.ts new file mode 100644 index 0000000..690e2ea --- /dev/null +++ b/web/src/api/commory.ts @@ -0,0 +1,87 @@ +import request from '@/utils/http' +import axios from 'axios' +import { useUserStore } from '@/store/modules/user' + +export function fetchDashboardSummary() { + return request.get({ + url: '/api/dashboard' + }) +} + +export function fetchTimeline(params: Api.Commory.SearchParams = {}) { + return request.get({ + url: '/api/timeline', + params + }) +} + +export function fetchSearch(params: Api.Commory.SearchParams = {}) { + return request.get({ + url: '/api/search', + params + }) +} + +export function fetchIdentities() { + return request.get({ + url: '/api/identities' + }) +} + +export function fetchIdentity(id: string) { + return request.get({ + url: `/api/identities/${id}` + }) +} + +export function fetchThread(id: string) { + return request.get({ + url: `/api/threads/${id}` + }) +} + +export function fetchImports() { + return request.get({ + url: '/api/imports' + }) +} + +export function uploadImport(file: File) { + const formData = new FormData() + formData.append('file', file) + return request.post<{ import_id: string; msglayer_version: string }>({ + url: '/api/imports/upload', + data: formData + }) +} + +export function validateImport(file: File) { + const formData = new FormData() + formData.append('file', file) + return request.post<{ valid: boolean }>({ + url: '/api/validate/upload', + data: formData + }) +} + +export function exportImportUrl(importId: string) { + return `/api/imports/${importId}/export` +} + +export async function downloadImport(importId: string) { + const userStore = useUserStore() + const response = await axios.get(exportImportUrl(importId), { + responseType: 'blob', + headers: { + Authorization: `Bearer ${userStore.accessToken}` + } + }) + const href = URL.createObjectURL(response.data) + const link = document.createElement('a') + link.href = href + link.download = `${importId}.json` + document.body.appendChild(link) + link.click() + link.remove() + URL.revokeObjectURL(href) +} diff --git a/web/src/locales/langs/en.json b/web/src/locales/langs/en.json index 51e196b..deea47f 100644 --- a/web/src/locales/langs/en.json +++ b/web/src/locales/langs/en.json @@ -189,6 +189,7 @@ "subTitle": "Welcome to join us, please fill in the following information to complete the registration", "placeholder": { "username": "Please enter your account", + "email": "Please enter your email", "password": "Please enter your password", "confirmPassword": "Please enter your password again" }, @@ -244,7 +245,12 @@ }, "dashboard": { "title": "Dashboard", - "console": "Console" + "console": "Console", + "overview": "Overview", + "timeline": "Timeline", + "search": "Search", + "contacts": "Contacts", + "imports": "Imports" }, "result": { "title": "Result Page", @@ -293,4 +299,4 @@ "border": "Border", "headerBackground": "Header BG" } -} \ No newline at end of file +} diff --git a/web/src/locales/langs/zh.json b/web/src/locales/langs/zh.json index 77a23a5..5ca6383 100644 --- a/web/src/locales/langs/zh.json +++ b/web/src/locales/langs/zh.json @@ -189,6 +189,7 @@ "subTitle": "欢迎加入我们,请填写以下信息完成注册", "placeholder": { "username": "请输入账号", + "email": "请输入邮箱", "password": "请输入密码", "confirmPassword": "请再次输入密码" }, @@ -244,7 +245,12 @@ }, "dashboard": { "title": "仪表盘", - "console": "工作台" + "console": "工作台", + "overview": "概览", + "timeline": "时间线", + "search": "检索", + "contacts": "联系人", + "imports": "导入" }, "result": { "title": "结果页面", @@ -293,4 +299,4 @@ "border": "边框", "headerBackground": "表头背景" } -} \ No newline at end of file +} diff --git a/web/src/router/modules/dashboard.ts b/web/src/router/modules/dashboard.ts index 5f9c3e9..1816240 100644 --- a/web/src/router/modules/dashboard.ts +++ b/web/src/router/modules/dashboard.ts @@ -15,10 +15,46 @@ export const dashboardRoutes: AppRouteRecord = { name: 'Console', component: '/dashboard/console', meta: { - title: 'menus.dashboard.console', + title: 'menus.dashboard.overview', keepAlive: false, fixedTab: true } + }, + { + path: 'timeline', + name: 'Timeline', + component: '/dashboard/timeline', + meta: { + title: 'menus.dashboard.timeline', + keepAlive: true + } + }, + { + path: 'search', + name: 'SearchRecords', + component: '/dashboard/search', + meta: { + title: 'menus.dashboard.search', + keepAlive: true + } + }, + { + path: 'contacts', + name: 'Contacts', + component: '/dashboard/contacts', + meta: { + title: 'menus.dashboard.contacts', + keepAlive: true + } + }, + { + path: 'imports', + name: 'Imports', + component: '/dashboard/imports', + meta: { + title: 'menus.dashboard.imports', + keepAlive: true + } } ] } diff --git a/web/src/store/modules/user.ts b/web/src/store/modules/user.ts index 08f7684..980fb7e 100755 --- a/web/src/store/modules/user.ts +++ b/web/src/store/modules/user.ts @@ -130,6 +130,7 @@ export const useUserStore = defineStore( */ const setToken = (newAccessToken: string, newRefreshToken?: string) => { accessToken.value = newAccessToken + isLogin.value = Boolean(newAccessToken) if (newRefreshToken) { refreshToken.value = newRefreshToken } diff --git a/web/src/types/api/api.d.ts b/web/src/types/api/api.d.ts index ad09c30..ae0b12b 100644 --- a/web/src/types/api/api.d.ts +++ b/web/src/types/api/api.d.ts @@ -72,19 +72,79 @@ declare namespace Api { interface LoginResponse { token: string refreshToken: string + user?: UserInfo + } + + interface RegisterParams { + userName: string + email: string + password: string } /** 用户信息 */ interface UserInfo { buttons: string[] roles: string[] - userId: number + userId: string userName: string email: string avatar?: string } } + namespace Commory { + interface ImportSummary { + id: string + user_id: string + schema_version: string + imported_at: string + source_path: string + event_count: number + identity_count: number + } + + interface TimelineItem { + event_id: string + type: string + timestamp: string + direction: string + content_summary: string + participants: string[] + meta?: Record + schema_version: string + } + + interface Identity { + id: string + type: string + display_name: string + phones: string[] + emails: string[] + avatar?: string | null + labels: string[] + meta: Record + } + + interface DashboardSummary { + importCount: number + identityCount: number + eventCount: number + lastActivity: string + recentImports: ImportSummary[] + recentEvents: TimelineItem[] + } + + interface SearchParams { + q?: string + contact?: string + type?: string + participant?: string + from?: string + to?: string + limit?: number + } + } + /** 系统管理类型 */ namespace SystemManage { /** 用户列表 */ diff --git a/web/src/utils/http/index.ts b/web/src/utils/http/index.ts old mode 100755 new mode 100644 index 0e0002a..46ca5fb --- a/web/src/utils/http/index.ts +++ b/web/src/utils/http/index.ts @@ -1,136 +1,138 @@ -/** - * HTTP 请求封装模块 - * 基于 Axios 封装的 HTTP 请求工具,提供统一的请求/响应处理 - * - * ## 主要功能 - * - * - 请求/响应拦截器(自动添加 Token、统一错误处理) - * - 401 未授权自动登出(带防抖机制) - * - 请求失败自动重试(可配置) - * - 统一的成功/错误消息提示 - * - 支持 GET/POST/PUT/DELETE 等常用方法 - * - * @module utils/http - * @author Art Design Pro Team - */ - -import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios' +import axios, { AxiosError, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios' import { useUserStore } from '@/store/modules/user' import { ApiStatus } from './status' import { HttpError, handleError, showError, showSuccess } from './error' import { $t } from '@/locales' import { BaseResponse } from '@/types' -/** 请求配置常量 */ const REQUEST_TIMEOUT = 15000 -const LOGOUT_DELAY = 500 const MAX_RETRIES = 0 const RETRY_DELAY = 1000 -const UNAUTHORIZED_DEBOUNCE_TIME = 3000 -/** 401防抖状态 */ -let isUnauthorizedErrorShown = false -let unauthorizedTimer: NodeJS.Timeout | null = null - -/** 扩展 AxiosRequestConfig */ interface ExtendedAxiosRequestConfig extends AxiosRequestConfig { showErrorMessage?: boolean showSuccessMessage?: boolean + _retry?: boolean } const { VITE_API_URL, VITE_WITH_CREDENTIALS } = import.meta.env -/** Axios实例 */ const axiosInstance = axios.create({ timeout: REQUEST_TIMEOUT, baseURL: VITE_API_URL, - withCredentials: VITE_WITH_CREDENTIALS === 'true', - validateStatus: (status) => status >= 200 && status < 300, - transformResponse: [ - (data, headers) => { - const contentType = headers['content-type'] - if (contentType?.includes('application/json')) { - try { - return JSON.parse(data) - } catch { - return data - } - } - return data - } - ] + withCredentials: VITE_WITH_CREDENTIALS === 'true' }) -/** 请求拦截器 */ +let refreshingPromise: Promise | null = null + axiosInstance.interceptors.request.use( (request: InternalAxiosRequestConfig) => { - const { accessToken } = useUserStore() - if (accessToken) request.headers.set('Authorization', accessToken) + const userStore = useUserStore() + if (userStore.accessToken) { + request.headers.set('Authorization', `Bearer ${userStore.accessToken}`) + } if (request.data && !(request.data instanceof FormData) && !request.headers['Content-Type']) { request.headers.set('Content-Type', 'application/json') - request.data = JSON.stringify(request.data) } return request }, (error) => { - showError(createHttpError($t('httpMsg.requestConfigError'), ApiStatus.error)) + showError(new HttpError($t('httpMsg.requestConfigError'), ApiStatus.error)) return Promise.reject(error) } ) -/** 响应拦截器 */ axiosInstance.interceptors.response.use( - (response: AxiosResponse) => { + async (response: AxiosResponse) => { const { code, msg } = response.data - if (code === ApiStatus.success) return response - if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg) - throw createHttpError(msg || $t('httpMsg.requestFailed'), code) + if (code === ApiStatus.success || code === 201) { + return response + } + if (code === ApiStatus.unauthorized) { + throw new HttpError(msg || $t('httpMsg.unauthorized'), ApiStatus.unauthorized) + } + throw new HttpError(msg || $t('httpMsg.requestFailed'), code || ApiStatus.error, { + data: response.data, + url: response.config.url, + method: response.config.method?.toUpperCase() + }) }, - (error) => { - if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError() - return Promise.reject(handleError(error)) + async (error: AxiosError<{ + code?: number + msg?: string + }>) => { + const originalConfig = (error.config || {}) as ExtendedAxiosRequestConfig + const responseStatus = error.response?.status + const shouldTryRefresh = + responseStatus === ApiStatus.unauthorized && + !originalConfig._retry && + !String(originalConfig.url || '').includes('/api/auth/refresh') + + if (shouldTryRefresh) { + originalConfig._retry = true + try { + const authData = await refreshAccessToken() + originalConfig.headers = { + ...(originalConfig.headers || {}), + Authorization: `Bearer ${authData.token}` + } + return axiosInstance.request(originalConfig) + } catch (refreshError) { + forceLogout() + return Promise.reject(refreshError) + } + } + + if (responseStatus === ApiStatus.unauthorized) { + forceLogout() + } + return Promise.reject(handleError(error as AxiosError)) } ) -/** 统一创建HttpError */ function createHttpError(message: string, code: number) { return new HttpError(message, code) } -/** 处理401错误(带防抖) */ -function handleUnauthorizedError(message?: string): never { - const error = createHttpError(message || $t('httpMsg.unauthorized'), ApiStatus.unauthorized) - - if (!isUnauthorizedErrorShown) { - isUnauthorizedErrorShown = true - logOut() - - unauthorizedTimer = setTimeout(resetUnauthorizedError, UNAUTHORIZED_DEBOUNCE_TIME) - - showError(error, true) - throw error +async function refreshAccessToken(): Promise { + if (refreshingPromise) { + return refreshingPromise } - throw error -} + const userStore = useUserStore() + if (!userStore.refreshToken) { + throw createHttpError($t('httpMsg.unauthorized'), ApiStatus.unauthorized) + } -/** 重置401防抖状态 */ -function resetUnauthorizedError() { - isUnauthorizedErrorShown = false - if (unauthorizedTimer) clearTimeout(unauthorizedTimer) - unauthorizedTimer = null + refreshingPromise = axios + .post>( + '/api/auth/refresh', + { refreshToken: userStore.refreshToken }, + { + baseURL: VITE_API_URL, + timeout: REQUEST_TIMEOUT, + withCredentials: VITE_WITH_CREDENTIALS === 'true' + } + ) + .then((response) => { + const payload = response.data.data + userStore.setToken(payload.token, payload.refreshToken) + userStore.setLoginStatus(true) + return payload + }) + .finally(() => { + refreshingPromise = null + }) + + return refreshingPromise } -/** 退出登录函数 */ -function logOut() { - setTimeout(() => { - useUserStore().logOut() - }, LOGOUT_DELAY) +function forceLogout() { + useUserStore().logOut() } -/** 是否需要重试 */ function shouldRetry(statusCode: number) { return [ ApiStatus.requestTimeout, @@ -141,7 +143,6 @@ function shouldRetry(statusCode: number) { ].includes(statusCode) } -/** 请求重试逻辑 */ async function retryRequest( config: ExtendedAxiosRequestConfig, retries: number = MAX_RETRIES @@ -157,14 +158,11 @@ async function retryRequest( } } -/** 延迟函数 */ function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)) } -/** 请求函数 */ async function request(config: ExtendedAxiosRequestConfig): Promise { - // POST | PUT 参数自动填充 if ( ['POST', 'PUT'].includes(config.method?.toUpperCase() || '') && config.params && @@ -176,23 +174,18 @@ async function request(config: ExtendedAxiosRequestConfig): Promise try { const res = await axiosInstance.request>(config) - - // 显示成功消息 if (config.showSuccessMessage && res.data.msg) { showSuccess(res.data.msg) } - return res.data.data as T } catch (error) { if (error instanceof HttpError && error.code !== ApiStatus.unauthorized) { - const showMsg = config.showErrorMessage !== false - showError(error, showMsg) + showError(error, config.showErrorMessage !== false) } return Promise.reject(error) } } -/** API方法集合 */ const api = { get(config: ExtendedAxiosRequestConfig) { return retryRequest({ ...config, method: 'GET' }) diff --git a/web/src/views/auth/login/index.vue b/web/src/views/auth/login/index.vue index 2a857d7..ed8f49d 100755 --- a/web/src/views/auth/login/index.vue +++ b/web/src/views/auth/login/index.vue @@ -18,18 +18,6 @@ @keyup.enter="handleSubmit" style="margin-top: 25px" > - - - - {{ account.label }} - - - diff --git a/web/src/views/dashboard/contacts/index.vue b/web/src/views/dashboard/contacts/index.vue new file mode 100644 index 0000000..bcefc11 --- /dev/null +++ b/web/src/views/dashboard/contacts/index.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/web/src/views/dashboard/imports/index.vue b/web/src/views/dashboard/imports/index.vue new file mode 100644 index 0000000..2854647 --- /dev/null +++ b/web/src/views/dashboard/imports/index.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/web/src/views/dashboard/search/index.vue b/web/src/views/dashboard/search/index.vue new file mode 100644 index 0000000..8a34ed9 --- /dev/null +++ b/web/src/views/dashboard/search/index.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/web/src/views/dashboard/timeline/index.vue b/web/src/views/dashboard/timeline/index.vue new file mode 100644 index 0000000..931004d --- /dev/null +++ b/web/src/views/dashboard/timeline/index.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/web/vite.config.ts b/web/vite.config.ts index c2ef072..fd87c58 100755 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -2,7 +2,6 @@ import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' import { fileURLToPath } from 'url' -import vueDevTools from 'vite-plugin-vue-devtools' import viteCompression from 'vite-plugin-compression' import Components from 'unplugin-vue-components/vite' import AutoImport from 'unplugin-auto-import/vite' @@ -96,8 +95,7 @@ export default ({ mode }: { mode: string }) => { ext: '.gz', // 压缩后的文件名后缀 threshold: 10240, // 只有大小大于该值的资源会被处理 10240B = 10KB deleteOriginFile: false // 压缩后是否删除原文件 - }), - vueDevTools() + }) // 打包分析 // visualizer({ // open: true, From cab64ae93496fa676cac6f8c83e7ceb699fd110e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 15:45:51 +0800 Subject: [PATCH 05/20] =?UTF-8?q?chore:=20=E6=95=B4=E4=BD=93=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E9=A1=B9=E7=9B=AE=E4=BE=9D=E8=B5=96=E4=B8=8E=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=AD=90=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B8=8Egitignore=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增art-design-pro和new-api两个git子模块 2. 更新gradle版本至9.3.1,升级gradle插件到9.0.0,kotlin版本到2.2.0 3. 重构android模块构建配置,统一依赖版本管理 4. 修复版本名称为空的异常情况,返回默认"未知版本" 5. 更新所有第三方依赖到最新稳定版 6. 新增backend/data/和.android/jdk/目录到gitignore 7. 新增selfIdentityId工具方法,更新kotlin编译配置方式 --- .gitignore | 3 +- .gitmodules | 3 + android/.gitignore | 2 + android/app/build.gradle | 141 +++++++----------- .../messagevault/mobile/config/Config.kt | 2 +- .../messagevault/mobile/utils/AppUtils.kt | 2 +- android/build.gradle | 34 ++--- android/gradle.properties | 28 +--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/sdk/auth/build.gradle | 10 +- android/sdk/backup/build.gradle | 14 +- .../sdk/backup/msglayer/MsgLayerMapper.kt | 2 + android/sdk/storage/build.gradle | 32 ++-- backend/data/commory-store.json | 10 +- references/art-design-pro | 1 + references/new-api | 1 + 16 files changed, 121 insertions(+), 166 deletions(-) create mode 160000 references/art-design-pro create mode 160000 references/new-api diff --git a/.gitignore b/.gitignore index 79cb555..ff23fd3 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,5 @@ coverage/ # Trae .trae/ -.playwright-mcp/ \ No newline at end of file +.playwright-mcp/ +backend/data/ diff --git a/.gitmodules b/.gitmodules index 6de389f..72b5e0a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = references/art-design-pro url = https://github.com/Daymychen/art-design-pro.git branch = main +[submodule "references/new-api"] + path = references/new-api + url = https://github.com/QuantumNous/new-api.git diff --git a/android/.gitignore b/android/.gitignore index efa8ee0..4bcb829 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -53,6 +53,8 @@ Thumbs.db *.tar.gz *.rar +.jdks/ + # Java heap dump files *.hprof java_pid*.hprof diff --git a/android/app/build.gradle b/android/app/build.gradle index a524756..7bfca0d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,136 +1,107 @@ -// 应用必要的插件 plugins { id 'com.android.application' - id 'org.jetbrains.kotlin.android' + id 'org.jetbrains.kotlin.plugin.compose' } android { namespace 'imken.messagevault.mobile' - - compileSdkVersion 34 - - // 添加SDK工具选项,兼容版本差异 - ndkVersion "21.4.7075529" - buildToolsVersion "33.0.2" - + + compileSdk 35 + + ndkVersion "28.2.13676358" + buildToolsVersion "36.1.0" + defaultConfig { applicationId "imken.messagevault.mobile" - minSdkVersion 24 - targetSdkVersion 34 + minSdk 24 + targetSdk 35 versionCode 1 versionName '0.0.2_alpha' - + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } - + buildFeatures { compose true - // 启用 BuildConfig 生成 buildConfig true } - - composeOptions { - kotlinCompilerExtensionVersion rootProject.ext.compose_compiler_version - } - - // 可以选择在ComposeOptions下添加这个选项来抑制版本检查(但不推荐) - // freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"] buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } - debug { - // 添加调试配置以在构建时输出更多信息 - testCoverageEnabled false - } } - + compileOptions { - sourceCompatibility JavaVersion.VERSION_17 // 更新为JDK 17 - targetCompatibility JavaVersion.VERSION_17 // 更新为JDK 17 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - - kotlinOptions { - jvmTarget = '17' // 从1.8更新为17,与Java版本保持一致 - freeCompilerArgs += [ - "-opt-in=kotlin.RequiresOptIn", - "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" - ] - } - - packagingOptions { + + packaging { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } - - // 移除错误的androidResources块,使用替代配置 - // 解决清单文件包名警告的替代方法 + lint { - // 如果需要忽略清单文件中package属性警告,可以添加以下配置 disable 'ManifestPackageNameNeeded' } } +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = '17' + freeCompilerArgs += [ + "-opt-in=kotlin.RequiresOptIn", + "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" + ] + } +} + dependencies { - // AndroidX 核心库 - implementation 'androidx.core:core-ktx:1.12.0' - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' - - // Compose相关库 - implementation platform('androidx.compose:compose-bom:2023.10.01') + implementation 'androidx.core:core-ktx:1.16.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.9.0' + + implementation platform('androidx.compose:compose-bom:2025.05.01') implementation 'androidx.compose.ui:ui' implementation 'androidx.compose.ui:ui-graphics' implementation 'androidx.compose.ui:ui-tooling-preview' implementation 'androidx.compose.material3:material3' - implementation 'com.google.android.material:material:1.11.0' // 添加Material库以支持Material3主题 - implementation 'androidx.activity:activity-compose:1.8.2' - - // 导航组件 - implementation 'androidx.navigation:navigation-compose:2.7.7' - - // 图标库 - implementation 'androidx.compose.material:material-icons-extended:1.6.4' - - // ViewModel 支持 - implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0' - - // 数据存储 - implementation 'androidx.datastore:datastore-preferences:1.0.0' - - // Retrofit网络库 - implementation 'com.squareup.retrofit2:retrofit:2.9.0' - implementation 'com.squareup.retrofit2:converter-gson:2.9.0' - - // Gson - implementation 'com.google.code.gson:gson:2.10.1' - - // SDK模块 + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.activity:activity-compose:1.10.1' + + implementation 'androidx.navigation:navigation-compose:2.9.0' + + implementation 'androidx.compose.material:material-icons-extended' + + implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0' + + implementation 'androidx.datastore:datastore-preferences:1.1.4' + + implementation "com.squareup.retrofit2:retrofit:$retrofit_version" + implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" + + implementation "com.google.code.gson:gson:$gson_version" + implementation project(':sdk:backup') implementation project(':sdk:auth') implementation project(':sdk:storage') - - // WorkManager - 用于多线程后台任务 - implementation 'androidx.work:work-runtime-ktx:2.9.0' - - // 日志库 + + implementation 'androidx.work:work-runtime-ktx:2.10.1' + implementation 'com.jakewharton.timber:timber:5.0.1' - - // 测试库 + testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - androidTestImplementation platform('androidx.compose:compose-bom:2023.10.01') + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' + androidTestImplementation platform('androidx.compose:compose-bom:2025.05.01') androidTestImplementation 'androidx.compose.ui:ui-test-junit4' - - // 调试工具 + debugImplementation 'androidx.compose.ui:ui-tooling' debugImplementation 'androidx.compose.ui:ui-test-manifest' } - diff --git a/android/app/src/main/java/imken/messagevault/mobile/config/Config.kt b/android/app/src/main/java/imken/messagevault/mobile/config/Config.kt index a8185cb..7174bb4 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/config/Config.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/config/Config.kt @@ -84,7 +84,7 @@ class Config(private val context: Context) { fun getAppVersion(): String { return try { val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) - packageInfo.versionName + packageInfo.versionName ?: "未知版本" } catch (e: Exception) { Timber.e(e, "[Mobile] ERROR [Config] 获取应用版本失败") "未知版本" diff --git a/android/app/src/main/java/imken/messagevault/mobile/utils/AppUtils.kt b/android/app/src/main/java/imken/messagevault/mobile/utils/AppUtils.kt index 0fbea67..2fc1572 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/utils/AppUtils.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/utils/AppUtils.kt @@ -14,7 +14,7 @@ object AppUtils { fun getAppVersion(context: Context): String { return try { val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) - packageInfo.versionName + packageInfo.versionName ?: "未知版本" } catch (e: PackageManager.NameNotFoundException) { "未知版本" } diff --git a/android/build.gradle b/android/build.gradle index a849b8f..856b697 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,27 +1,17 @@ -// 项目级build.gradle - -buildscript { - ext { - compose_compiler_version = '1.5.6' - kotlin_version = '1.9.21' - room_version = '2.6.1' - coroutines_version = '1.7.3' - gson_version = '2.10.1' - retrofit_version = '2.9.0' - } - - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:8.1.4' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } +plugins { + id 'com.android.application' version '9.0.0' apply false + id 'com.android.library' version '9.0.0' apply false + id 'org.jetbrains.kotlin.android' version '2.2.0' apply false + id 'org.jetbrains.kotlin.jvm' version '2.2.0' apply false + id 'org.jetbrains.kotlin.plugin.compose' version '2.2.0' apply false } -// 删除 allprojects 块,依赖仓库已经在 settings.gradle 中配置 +ext { + room_version = '2.7.1' + coroutines_version = '1.10.2' + gson_version = '2.13.1' + retrofit_version = '2.11.0' +} tasks.register('clean', Delete) { delete rootProject.buildDir diff --git a/android/gradle.properties b/android/gradle.properties index 3db528f..41105ff 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,63 +1,39 @@ -# ??Java??????? org.gradle.java.installations.auto-detect=true org.gradle.java.installations.auto-download=true -# ??compileSdk 34 -android.suppressUnsupportedCompileSdk=34 +android.suppressUnsupportedCompileSdk=35 -# ??AndroidX android.useAndroidX=true android.enableJetifier=true -# ??Gradle???? - ???MaxPermSize?? org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -# ??Gradle?? org.gradle.caching=true -# ?????? org.gradle.parallel=true -# ?????? org.gradle.configureondemand=true -# ??Kotlin?????? -kotlin.daemon.jvmargs=-Xmx3072m +kotlin.daemon.jvmargs=-Xmx3072m -Dkotlin.daemon.data.dir=/Volumes/FanXiangMac/DevTools/Gradle/kotlin-daemon -# ?? Kapt ?? kapt.incremental.apt=true kapt.use.worker.api=true -# KAPT????????? kapt.include.compile.classpath=false -# ??SDK?? android.sdk.channel=3 -# Kotlin?Java????????? kotlin.jvm.target.validation.mode=warning -# ??buildConfig?? -android.defaults.buildfeatures.buildconfig=true - -# ????????? kotlin.incremental=true kotlin.code.style=official kotlin.incremental.java=true kotlin.incremental.js=true -# ??ID??? android.nonTransitiveRClass=true android.nonFinalResIds=true -# ??Compose????? android.enableComposeCompilerMetrics=true android.enableComposeCompilerReports=true -# ?????? org.gradle.daemon=true - -# 设置使用标准OpenJDK 17而不是GraalVM -# org.gradle.java.home= - - diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index da1db5f..2f2958b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/sdk/auth/build.gradle b/android/sdk/auth/build.gradle index b70a828..2996540 100644 --- a/android/sdk/auth/build.gradle +++ b/android/sdk/auth/build.gradle @@ -8,13 +8,15 @@ java { targetCompatibility = JavaVersion.VERSION_17 } -kotlin { - jvmTarget = '17' +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = '17' + } } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" + implementation "org.jetbrains.kotlin:kotlin-stdlib" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" testImplementation 'junit:junit:4.13.2' } diff --git a/android/sdk/backup/build.gradle b/android/sdk/backup/build.gradle index 4395cf1..1e85fcc 100644 --- a/android/sdk/backup/build.gradle +++ b/android/sdk/backup/build.gradle @@ -8,16 +8,18 @@ java { targetCompatibility = JavaVersion.VERSION_17 } -kotlin { - jvmTarget = '17' +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = '17' + } } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" - implementation "com.google.code.gson:gson:2.10.1" + implementation "org.jetbrains.kotlin:kotlin-stdlib" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" + implementation "com.google.code.gson:gson:$gson_version" testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:5.8.0' - testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3' + testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version" } diff --git a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt index 9bd53cd..e65072e 100644 --- a/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt +++ b/android/sdk/backup/src/main/kotlin/imken/messagevault/sdk/backup/msglayer/MsgLayerMapper.kt @@ -199,6 +199,8 @@ class MsgLayerMapper { else -> "unknown" } + private fun selfIdentityId(deviceId: String): String = "self/$deviceId" + private fun normalizePhone(raw: String?): String { if (raw.isNullOrBlank()) return "" val cleaned = raw.filter { it.isDigit() || it == '+' } diff --git a/android/sdk/storage/build.gradle b/android/sdk/storage/build.gradle index cd8d853..de17271 100644 --- a/android/sdk/storage/build.gradle +++ b/android/sdk/storage/build.gradle @@ -1,15 +1,15 @@ plugins { id 'com.android.library' - id 'org.jetbrains.kotlin.android' } android { namespace 'imken.messagevault.sdk.storage' - compileSdkVersion 34 + compileSdk 35 + buildToolsVersion "36.1.0" defaultConfig { - minSdkVersion 24 - targetSdkVersion 34 + minSdk 24 + targetSdk 35 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" @@ -19,23 +19,19 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - - kotlinOptions { - jvmTarget = '17' - } } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3" - implementation 'androidx.core:core-ktx:1.12.0' - implementation 'androidx.room:room-runtime:2.6.1' - implementation 'androidx.room:room-ktx:2.6.1' - annotationProcessor 'androidx.room:room-compiler:2.6.1' - implementation 'com.squareup.retrofit2:retrofit:2.9.0' - implementation 'com.squareup.retrofit2:converter-gson:2.9.0' - implementation 'com.google.code.gson:gson:2.10.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" + implementation 'androidx.core:core-ktx:1.16.0' + implementation "androidx.room:room-runtime:$room_version" + implementation "androidx.room:room-ktx:$room_version" + annotationProcessor "androidx.room:room-compiler:$room_version" + implementation "com.squareup.retrofit2:retrofit:$retrofit_version" + implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" + implementation "com.google.code.gson:gson:$gson_version" testImplementation 'junit:junit:4.13.2' } diff --git a/backend/data/commory-store.json b/backend/data/commory-store.json index 4f50500..9dac144 100644 --- a/backend/data/commory-store.json +++ b/backend/data/commory-store.json @@ -20,13 +20,21 @@ } }, "refresh_tokens": { + "refresh_b53c202aa00443b0": { + "id": "refresh_b53c202aa00443b0", + "user_id": "user_f1fb3d28941df6c2", + "token_hash": "a1d246d7f2811b1fff4e5260538e2da945dfaded273c0cb78ec7fbbfc42324c2", + "expires_at": "2026-05-21T16:56:09.114195Z", + "created_at": "2026-05-14T16:56:09.114195Z", + "revoked_at": "0001-01-01T00:00:00Z" + }, "refresh_b94f4de6e84aaf37": { "id": "refresh_b94f4de6e84aaf37", "user_id": "user_f1fb3d28941df6c2", "token_hash": "e18cce180af79654de9b98faa9305cab4e06a7dd1b6af423183db1d48ecccb36", "expires_at": "2026-05-21T13:47:29.453101Z", "created_at": "2026-05-14T13:47:29.453101Z", - "revoked_at": "0001-01-01T00:00:00Z" + "revoked_at": "2026-05-14T16:56:09.106114Z" } }, "imports": { diff --git a/references/art-design-pro b/references/art-design-pro new file mode 160000 index 0000000..6b6d781 --- /dev/null +++ b/references/art-design-pro @@ -0,0 +1 @@ +Subproject commit 6b6d781a63eb51782841ac9c29c2bb42a23911f2 diff --git a/references/new-api b/references/new-api new file mode 160000 index 0000000..18282e6 --- /dev/null +++ b/references/new-api @@ -0,0 +1 @@ +Subproject commit 18282e610ddf3c8c39732fe84e50ded2cf6dcc7f From 033d3fbff58a7b9256c788341eba434cac23c17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 15:46:52 +0800 Subject: [PATCH 06/20] feat: add system setup wizard and related improvements 1. add system initialization setup flow with frontend wizard and backend API 2. add pagination support for timeline and search pages 3. add password PBKDF2 hashing and rehash support 4. add strict additional property validation for msgpack schema 5. add setup status check and auto-redirect to setup page 6. refactor axios instance export and download request logic 7. add offset parameter for search query and file store pagination 8. add TLS and env config options, default auth secret warning for production 9. add android backup filename version support --- .../data/backup/AndroidBackupFileWriter.kt | 3 +- android/gradle/gradle-daemon-jvm.properties | 12 + backend/data/commory-store.json | 10 +- backend/internal/api/server.go | 73 +++- backend/internal/auth/service.go | 93 ++++- backend/internal/auth/service_test.go | 70 ++++ backend/internal/cli/root.go | 10 + backend/internal/config/config.go | 16 + backend/internal/msglayer/types.go | 1 + backend/internal/msglayer/validator.go | 53 ++- backend/internal/msglayer/validator_test.go | 76 ++++ backend/internal/setup/service.go | 99 +++++ backend/internal/storage/filestore.go | 94 ++++- backend/internal/storage/storage.go | 17 + web/src/api/commory.ts | 11 +- web/src/api/setup.ts | 15 + web/src/router/guards/beforeEach.ts | 28 ++ web/src/router/routes/staticRoutes.ts | 6 + web/src/types/api/api.d.ts | 16 + web/src/utils/http/index.ts | 1 + web/src/views/dashboard/console/index.vue | 1 + web/src/views/dashboard/search/index.vue | 27 +- web/src/views/dashboard/timeline/index.vue | 29 +- web/src/views/setup/index.vue | 366 ++++++++++++++++++ 24 files changed, 1095 insertions(+), 32 deletions(-) create mode 100644 android/gradle/gradle-daemon-jvm.properties create mode 100644 backend/internal/auth/service_test.go create mode 100644 backend/internal/setup/service.go create mode 100644 web/src/api/setup.ts create mode 100644 web/src/views/setup/index.vue diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt index 45b786b..df1f084 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidBackupFileWriter.kt @@ -5,6 +5,7 @@ import android.os.Build import imken.messagevault.sdk.backup.model.BackupResult import imken.messagevault.sdk.backup.model.BackupWriteStats import imken.messagevault.sdk.backup.msglayer.MsgLayerSerializer +import imken.messagevault.sdk.backup.msglayer.model.MSG_LAYER_VERSION import imken.messagevault.sdk.backup.msglayer.model.MsgLayerRootExport import imken.messagevault.sdk.backup.writer.BackupFileWriter import timber.log.Timber @@ -88,6 +89,6 @@ class AndroidBackupFileWriter(private val context: Context) : BackupFileWriter { val dateFormat = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault()) val timestamp = dateFormat.format(Date()) val device = deviceName ?: Build.MODEL.replace(" ", "_") - return "msglayer-v0.1_${device}_${timestamp}.json" + return "${MSG_LAYER_VERSION.replace("/", "-")}_${device}_${timestamp}.json" } } diff --git a/android/gradle/gradle-daemon-jvm.properties b/android/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..6c1139e --- /dev/null +++ b/android/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,12 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect +toolchainVersion=21 diff --git a/backend/data/commory-store.json b/backend/data/commory-store.json index 9dac144..8211efb 100644 --- a/backend/data/commory-store.json +++ b/backend/data/commory-store.json @@ -20,13 +20,21 @@ } }, "refresh_tokens": { + "refresh_4ccd902cc97a3955": { + "id": "refresh_4ccd902cc97a3955", + "user_id": "user_f1fb3d28941df6c2", + "token_hash": "911096c7e4d75dcbcc7a4c3aa6a2359ec452245ba6877aef9535a7c4ed4afe8c", + "expires_at": "2026-05-22T06:12:09.495985Z", + "created_at": "2026-05-15T06:12:09.495985Z", + "revoked_at": "0001-01-01T00:00:00Z" + }, "refresh_b53c202aa00443b0": { "id": "refresh_b53c202aa00443b0", "user_id": "user_f1fb3d28941df6c2", "token_hash": "a1d246d7f2811b1fff4e5260538e2da945dfaded273c0cb78ec7fbbfc42324c2", "expires_at": "2026-05-21T16:56:09.114195Z", "created_at": "2026-05-14T16:56:09.114195Z", - "revoked_at": "0001-01-01T00:00:00Z" + "revoked_at": "2026-05-15T06:12:09.490908Z" }, "refresh_b94f4de6e84aaf37": { "id": "refresh_b94f4de6e84aaf37", diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 1b1e952..573ea79 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -15,6 +15,7 @@ import ( "github.com/IsKenKenYa/Commory/backend/internal/importers" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" "github.com/IsKenKenYa/Commory/backend/internal/query" + "github.com/IsKenKenYa/Commory/backend/internal/setup" "github.com/IsKenKenYa/Commory/backend/internal/storage" ) @@ -27,16 +28,19 @@ type Server struct { auth *auth.Service validator *msglayer.Validator importer importers.Importer + setupSvc *setup.Service } func NewServer(cfg config.Config, store storage.Provider, validator *msglayer.Validator) *Server { + authSvc := auth.NewService(store, cfg.AuthSecret) return &Server{ cfg: cfg, store: store, service: query.New(store), - auth: auth.NewService(store, cfg.AuthSecret), + auth: authSvc, validator: validator, importer: importers.JSONImporter{}, + setupSvc: setup.NewService(store, authSvc), } } @@ -46,6 +50,7 @@ func (s *Server) Handler() http.Handler { publicMux.HandleFunc("/api/auth/login", s.handleLogin) publicMux.HandleFunc("/api/auth/refresh", s.handleRefresh) publicMux.HandleFunc("/api/auth/logout", s.handleLogout) + publicMux.HandleFunc("/api/setup", s.handleSetup) privateMux := http.NewServeMux() privateMux.HandleFunc("/api/user/info", s.handleUserInfo) @@ -89,7 +94,7 @@ func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusBadRequest, err.Error()) return } - setRefreshCookie(w, pair.RefreshToken) + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) writeJSON(w, http.StatusCreated, "registered", map[string]any{ "user": user, "token": pair.AccessToken, @@ -115,7 +120,7 @@ func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusUnauthorized, err.Error()) return } - setRefreshCookie(w, pair.RefreshToken) + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) writeJSON(w, http.StatusOK, "ok", map[string]any{ "user": user, "token": pair.AccessToken, @@ -143,15 +148,63 @@ func (s *Server) handleRefresh(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusUnauthorized, err.Error()) return } - setRefreshCookie(w, pair.RefreshToken) + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) writeJSON(w, http.StatusOK, "ok", pair) } func (s *Server) handleLogout(w http.ResponseWriter, r *http.Request) { - clearRefreshCookie(w) + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + RefreshToken string `json:"refreshToken"` + } + _ = json.NewDecoder(r.Body).Decode(&req) + refreshToken := req.RefreshToken + if refreshToken == "" { + if cookie, err := r.Cookie(refreshCookieName); err == nil { + refreshToken = cookie.Value + } + } + _ = s.auth.RevokeRefreshToken(r.Context(), refreshToken) + clearRefreshCookie(w, s.cfg.TLS) writeJSON(w, http.StatusOK, "logged out", map[string]any{"success": true}) } +func (s *Server) handleSetup(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + s.handleGetSetup(w, r) + case http.MethodPost: + s.handlePostSetup(w, r) + default: + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + } +} + +func (s *Server) handleGetSetup(w http.ResponseWriter, r *http.Request) { + status, err := s.setupSvc.GetStatus(r.Context()) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", status) +} + +func (s *Server) handlePostSetup(w http.ResponseWriter, r *http.Request) { + var req setup.SetupRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.setupSvc.Initialize(r.Context(), req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "initialized", map[string]any{"success": true}) +} + func (s *Server) handleUserInfo(w http.ResponseWriter, r *http.Request) { userID := auth.UserIDFromContext(r.Context()) user, err := s.auth.UserInfo(r.Context(), userID) @@ -461,6 +514,9 @@ func buildSearchParams(r *http.Request, userID string) msglayer.SearchParams { if limit := q.Get("limit"); limit != "" { fmt.Sscanf(limit, "%d", ¶ms.Limit) } + if offset := q.Get("offset"); offset != "" { + fmt.Sscanf(offset, "%d", ¶ms.Offset) + } return params } @@ -499,24 +555,25 @@ func writeError(w http.ResponseWriter, status int, msg string) { writeJSON(w, status, msg, nil) } -func setRefreshCookie(w http.ResponseWriter, token string) { +func setRefreshCookie(w http.ResponseWriter, token string, secure bool) { http.SetCookie(w, &http.Cookie{ Name: refreshCookieName, Value: token, Path: "/", HttpOnly: true, SameSite: http.SameSiteStrictMode, - Secure: false, + Secure: secure, }) } -func clearRefreshCookie(w http.ResponseWriter) { +func clearRefreshCookie(w http.ResponseWriter, secure bool) { http.SetCookie(w, &http.Cookie{ Name: refreshCookieName, Value: "", Path: "/", MaxAge: -1, HttpOnly: true, + Secure: secure, }) } diff --git a/backend/internal/auth/service.go b/backend/internal/auth/service.go index a688898..9ec8763 100644 --- a/backend/internal/auth/service.go +++ b/backend/internal/auth/service.go @@ -52,6 +52,47 @@ func (s *Service) Register(ctx context.Context, userName, email, password string return UserInfo{}, TokenPair{}, err } + roles := []string{"R_USER"} + buttons := []string{"view", "import"} + + now := time.Now().UTC() + record, err := s.store.CreateUser(ctx, storage.UserRecord{ + ID: randomID("user"), + UserName: userName, + Email: strings.TrimSpace(email), + PasswordHash: hashed, + PasswordSalt: salt, + Roles: roles, + Buttons: buttons, + CreatedAt: now, + UpdatedAt: now, + }) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + + pair, err := s.issueTokenPair(ctx, record) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + return toUserInfo(record), pair, nil +} + +func (s *Service) RegisterAdmin(ctx context.Context, userName, email, password string) (UserInfo, TokenPair, error) { + userName = strings.TrimSpace(userName) + if userName == "" || strings.TrimSpace(password) == "" { + return UserInfo{}, TokenPair{}, fmt.Errorf("username and password are required") + } + + if _, err := s.store.FindUserByUserName(ctx, userName); err == nil { + return UserInfo{}, TokenPair{}, fmt.Errorf("username already exists") + } + + salt, hashed, err := hashPassword(password) + if err != nil { + return UserInfo{}, TokenPair{}, err + } + roles := []string{"R_ADMIN", "R_USER"} buttons := []string{"view", "import", "admin"} @@ -91,6 +132,12 @@ func (s *Service) Login(ctx context.Context, remoteAddr, userName, password stri return UserInfo{}, TokenPair{}, fmt.Errorf("invalid username or password") } + if NeedsRehash(record.PasswordHash) { + if _, newHash, rehashErr := hashPassword(password); rehashErr == nil { + _ = s.store.UpdateUserPasswordHash(ctx, record.ID, newHash) + } + } + pair, err := s.issueTokenPair(ctx, record) if err != nil { return UserInfo{}, TokenPair{}, err @@ -114,6 +161,14 @@ func (s *Service) Refresh(ctx context.Context, refreshToken string) (TokenPair, return s.issueTokenPair(ctx, user) } +func (s *Service) RevokeRefreshToken(ctx context.Context, refreshToken string) error { + if refreshToken == "" { + return nil + } + _, err := s.store.ConsumeRefreshToken(ctx, hashToken(refreshToken)) + return err +} + func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) { user, err := s.store.GetUser(ctx, userID) if err != nil { @@ -233,16 +288,44 @@ func hashPassword(password string) (salt string, hash string, err error) { return "", "", err } salt = hex.EncodeToString(rawSalt) - sum := derivePassword(password, salt) - return salt, hex.EncodeToString(sum[:]), nil + sum := derivePasswordPBKDF2(password, salt, 120000) + return salt, "pbkdf2$" + hex.EncodeToString(sum[:]), nil } func verifyPassword(password, salt, expected string) bool { - sum := derivePassword(password, salt) - return hmac.Equal([]byte(hex.EncodeToString(sum[:])), []byte(expected)) + var sum [32]byte + if strings.HasPrefix(expected, "pbkdf2$") { + sum = derivePasswordPBKDF2(password, salt, 120000) + return hmac.Equal([]byte("pbkdf2$"+hex.EncodeToString(sum[:])), []byte(expected)) + } + stripped := strings.TrimPrefix(expected, "sha256$") + sum = derivePasswordLegacy(password, salt) + return hmac.Equal([]byte(hex.EncodeToString(sum[:])), []byte(stripped)) +} + +func NeedsRehash(hash string) bool { + return !strings.HasPrefix(hash, "pbkdf2$") +} + +func derivePasswordPBKDF2(password, salt string, iterations int) [32]byte { + prf := hmac.New(sha256.New, []byte(password)) + var result [32]byte + prf.Write([]byte(salt)) + prf.Write([]byte{0, 0, 0, 1}) + u := prf.Sum(nil) + copy(result[:], u) + for i := 1; i < iterations; i++ { + prf.Reset() + prf.Write(u) + u = prf.Sum(nil) + for j := 0; j < 32; j++ { + result[j] ^= u[j] + } + } + return result } -func derivePassword(password, salt string) [32]byte { +func derivePasswordLegacy(password, salt string) [32]byte { input := []byte(password + ":" + salt) sum := sha256.Sum256(input) for i := 0; i < 120000; i++ { diff --git a/backend/internal/auth/service_test.go b/backend/internal/auth/service_test.go new file mode 100644 index 0000000..1bcf61a --- /dev/null +++ b/backend/internal/auth/service_test.go @@ -0,0 +1,70 @@ +package auth + +import ( + "encoding/hex" + "strings" + "testing" +) + +func TestHashPasswordReturnsPBKDF2Prefix(t *testing.T) { + salt, hash, err := hashPassword("testpassword") + if err != nil { + t.Fatalf("hashPassword error: %v", err) + } + if len(salt) == 0 { + t.Fatal("salt should not be empty") + } + prefix := "pbkdf2$" + if !strings.HasPrefix(hash, prefix) { + t.Fatalf("hash should start with %q, got %q", prefix, hash) + } +} + +func TestVerifyPasswordNewPBKDF2Format(t *testing.T) { + salt, hash, err := hashPassword("mypassword123") + if err != nil { + t.Fatalf("hashPassword error: %v", err) + } + if !verifyPassword("mypassword123", salt, hash) { + t.Fatal("verifyPassword should succeed with correct password and PBKDF2 format") + } + if verifyPassword("wrongpassword", salt, hash) { + t.Fatal("verifyPassword should fail with wrong password") + } +} + +func TestVerifyPasswordLegacyFormatNoPrefix(t *testing.T) { + salt := "abcd1234ef567890" + sum := derivePasswordLegacy("legacytest", salt) + legacyHash := hex.EncodeToString(sum[:]) + if !verifyPassword("legacytest", salt, legacyHash) { + t.Fatal("verifyPassword should succeed with legacy format (no prefix)") + } + if verifyPassword("wrongpassword", salt, legacyHash) { + t.Fatal("verifyPassword should fail with wrong password for legacy format") + } +} + +func TestVerifyPasswordLegacyFormatWithSHA256Prefix(t *testing.T) { + salt := "abcd1234ef567890" + sum := derivePasswordLegacy("testpw", salt) + legacyHash := "sha256$" + hex.EncodeToString(sum[:]) + if !verifyPassword("testpw", salt, legacyHash) { + t.Fatal("verifyPassword should succeed with sha256$ prefix format") + } + if verifyPassword("wrongpw", salt, legacyHash) { + t.Fatal("verifyPassword should fail with wrong password for sha256$ prefix") + } +} + +func TestNeedsRehash(t *testing.T) { + if NeedsRehash("pbkdf2$abc123") { + t.Fatal("NeedsRehash should return false for pbkdf2$ prefix") + } + if !NeedsRehash("abc123") { + t.Fatal("NeedsRehash should return true for no prefix") + } + if !NeedsRehash("sha256$abc123") { + t.Fatal("NeedsRehash should return true for sha256$ prefix") + } +} diff --git a/backend/internal/cli/root.go b/backend/internal/cli/root.go index 5356ee2..594c33c 100644 --- a/backend/internal/cli/root.go +++ b/backend/internal/cli/root.go @@ -7,6 +7,8 @@ import ( "fmt" "io" "net/http" + "os" + "strings" "time" "github.com/IsKenKenYa/Commory/backend/internal/api" @@ -14,6 +16,7 @@ import ( "github.com/IsKenKenYa/Commory/backend/internal/importers" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" "github.com/IsKenKenYa/Commory/backend/internal/query" + "github.com/IsKenKenYa/Commory/backend/internal/setup" "github.com/IsKenKenYa/Commory/backend/internal/storage" ) @@ -212,6 +215,12 @@ func boot(ctx context.Context) (config.Config, storage.Provider, *msglayer.Valid if err != nil { return config.Config{}, nil, nil, err } + if cfg.IsDefaultAuthSecret() { + if strings.EqualFold(cfg.Env, "production") { + return config.Config{}, nil, nil, fmt.Errorf("FATAL: COMMORY_AUTH_SECRET is using the default value. Set a secure secret before running in production mode") + } + fmt.Fprintln(os.Stderr, "WARNING: COMMORY_AUTH_SECRET is using the default value. This is insecure for production use.") + } validator, err := msglayer.NewValidator(cfg.SchemaRoot) if err != nil { return config.Config{}, nil, nil, err @@ -223,6 +232,7 @@ func boot(ctx context.Context) (config.Config, storage.Provider, *msglayer.Valid if err := store.Init(ctx); err != nil { return config.Config{}, nil, nil, err } + setup.CheckSetup(ctx, store) return cfg, store, validator, nil } diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 7e1eac8..f18fccc 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -13,6 +13,8 @@ type Config struct { ListenAddr string SchemaRoot string AuthSecret string + TLS bool + Env string AllowedImportDir []string } @@ -30,6 +32,8 @@ func Load() (Config, error) { ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), SchemaRoot: schemaRoot, AuthSecret: env("COMMORY_AUTH_SECRET", "commory-dev-secret"), + TLS: envBool("COMMORY_TLS", false), + Env: env("COMMORY_ENV", "development"), AllowedImportDir: splitAndClean(env("COMMORY_ALLOWED_IMPORT_DIRS", filepath.Join("..", "msglayer", "examples"))), }, nil } @@ -41,6 +45,18 @@ func env(key, fallback string) string { return fallback } +func envBool(key string, fallback bool) bool { + value := os.Getenv(key) + if value == "" { + return fallback + } + return strings.EqualFold(value, "true") || value == "1" +} + +func (c Config) IsDefaultAuthSecret() bool { + return c.AuthSecret == "commory-dev-secret" +} + func splitAndClean(raw string) []string { parts := strings.Split(raw, ",") result := make([]string, 0, len(parts)) diff --git a/backend/internal/msglayer/types.go b/backend/internal/msglayer/types.go index b568ec8..a8d7430 100644 --- a/backend/internal/msglayer/types.go +++ b/backend/internal/msglayer/types.go @@ -53,6 +53,7 @@ type SearchParams struct { From string To string Limit int + Offset int `json:"offset,omitempty"` } type TimelineItem struct { diff --git a/backend/internal/msglayer/validator.go b/backend/internal/msglayer/validator.go index 421ff1c..c71acee 100644 --- a/backend/internal/msglayer/validator.go +++ b/backend/internal/msglayer/validator.go @@ -14,6 +14,32 @@ func NewValidator(rootSchemaPath string) (*Validator, error) { return &Validator{rootSchemaPath: rootSchemaPath}, nil } +var allowedIdentityFields = map[string]bool{ + "id": true, "type": true, "display_name": true, + "avatar": true, "phones": true, "emails": true, "labels": true, "meta": true, +} + +var allowedEventFields = map[string]bool{ + "id": true, "timestamp": true, "type": true, "direction": true, + "participants": true, "content": true, "relations": true, "meta": true, +} + +var allowedContentKeys = map[string]map[string]bool{ + "sms": {"text": true, "attachments": true}, + "call": {"duration_sec": true, "call_type": true, "recording": true}, + "voice": {"file": true, "transcript": true, "summary": true}, + "contact_snapshot": {"identity_id": true, "snapshot": true}, +} + +func checkAdditionalProperties(obj map[string]any, allowed map[string]bool, context string) error { + for key := range obj { + if !allowed[key] { + return fmt.Errorf("schema validation failed: unknown %s field %q", context, key) + } + } + return nil +} + func (v *Validator) ValidateBytes(data []byte) error { var payload RootExport if err := json.Unmarshal(data, &payload); err != nil { @@ -28,7 +54,12 @@ func (v *Validator) ValidateBytes(data []byte) error { if payload.Source.Platform == "" || payload.Source.DeviceID == "" || payload.Source.AppVersion == "" { return fmt.Errorf("schema validation failed: source.platform, source.device_id, and source.app_version are required") } - for _, identity := range payload.Identities { + var rawPayload struct { + Identities []map[string]any `json:"identities"` + Events []map[string]any `json:"events"` + } + _ = json.Unmarshal(data, &rawPayload) + for i, identity := range payload.Identities { if identity.ID == "" || identity.Type == "" || identity.DisplayName == "" { return fmt.Errorf("schema validation failed: identity id/type/display_name required") } @@ -40,8 +71,13 @@ func (v *Validator) ValidateBytes(data []byte) error { default: return fmt.Errorf("schema validation failed: unsupported identity type %q", identity.Type) } + if i < len(rawPayload.Identities) { + if err := checkAdditionalProperties(rawPayload.Identities[i], allowedIdentityFields, "identity"); err != nil { + return err + } + } } - for _, event := range payload.Events { + for i, event := range payload.Events { if event.ID == "" || event.Timestamp == "" || event.Type == "" { return fmt.Errorf("schema validation failed: event id/type/timestamp required") } @@ -92,8 +128,19 @@ func (v *Validator) ValidateBytes(data []byte) error { return fmt.Errorf("schema validation failed: unsupported relation type %q", relation.Type) } } + if i < len(rawPayload.Events) { + if err := checkAdditionalProperties(rawPayload.Events[i], allowedEventFields, "event"); err != nil { + return err + } + if content, ok := rawPayload.Events[i]["content"].(map[string]any); ok { + if allowed, ok := allowedContentKeys[event.Type]; ok { + if err := checkAdditionalProperties(content, allowed, "event content"); err != nil { + return err + } + } + } + } } - // TODO: additionalProperties parity still relies on the JSON Schema files until a full schema engine is introduced. return nil } diff --git a/backend/internal/msglayer/validator_test.go b/backend/internal/msglayer/validator_test.go index cd8bd75..c47a612 100644 --- a/backend/internal/msglayer/validator_test.go +++ b/backend/internal/msglayer/validator_test.go @@ -96,6 +96,82 @@ func TestValidationFailsForRelationType(t *testing.T) { } } +func TestValidationFailsForUnknownEventField(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{"text":"hi","attachments":[]},"meta":{},"relations":[],"unknown_field":"oops"}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected validation to fail for unknown event field") + } +} + +func TestValidationFailsForUnknownIdentityField(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{},"extra_field":"oops"}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{"text":"hi","attachments":[]},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected validation to fail for unknown identity field") + } +} + +func TestValidationFailsForUnknownContentKey(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{"text":"hi","attachments":[],"unknown_key":"oops"},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err == nil { + t.Fatal("expected validation to fail for unknown content key") + } +} + +func TestValidationPassesForAllKnownFields(t *testing.T) { + root := projectPath("msglayer", "schema", "v0.1", "root.schema.json") + validator, err := NewValidator(root) + if err != nil { + t.Fatal(err) + } + + payload := []byte(`{ + "version": "msglayer/v0.1", + "exported_at": "2026-01-01T12:00:00Z", + "source": {"platform":"android","device_id":"x","app_version":"0.1"}, + "identities": [{"id":"self/x","type":"device","display_name":"x","phones":[],"emails":[],"labels":["self"],"meta":{}}], + "events": [{"id":"e1","type":"sms","timestamp":"2026-01-01T12:00:00Z","direction":"inbound","participants":["self/x"],"content":{"text":"hi","attachments":[]},"meta":{},"relations":[]}] + }`) + if err := validator.ValidateBytes(payload); err != nil { + t.Fatalf("expected validation to pass for valid event with all known fields: %v", err) + } +} + func projectPath(parts ...string) string { _, file, _, _ := runtime.Caller(0) base := filepath.Join(filepath.Dir(file), "..", "..", "..") diff --git a/backend/internal/setup/service.go b/backend/internal/setup/service.go new file mode 100644 index 0000000..6f1db73 --- /dev/null +++ b/backend/internal/setup/service.go @@ -0,0 +1,99 @@ +package setup + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +type Service struct { + store storage.Provider + auth *auth.Service +} + +func NewService(store storage.Provider, auth *auth.Service) *Service { + return &Service{store: store, auth: auth} +} + +type SetupStatusResponse struct { + Status bool `json:"status"` + DatabaseType string `json:"database_type"` + RootInit bool `json:"root_init"` +} + +func (s *Service) GetStatus(ctx context.Context) (SetupStatusResponse, error) { + status, err := s.store.GetSetupStatus(ctx) + if err != nil { + return SetupStatusResponse{}, err + } + hasAdmin, _ := s.store.HasAdminUser(ctx) + return SetupStatusResponse{ + Status: status.Initialized, + DatabaseType: status.DatabaseType, + RootInit: hasAdmin, + }, nil +} + +type SetupRequest struct { + UserName string `json:"userName"` + Password string `json:"password"` + ConfirmPassword string `json:"confirmPassword"` + UsageMode string `json:"usageMode"` +} + +func (s *Service) Initialize(ctx context.Context, req SetupRequest) error { + status, err := s.store.GetSetupStatus(ctx) + if err != nil { + return err + } + if status.Initialized { + return fmt.Errorf("system already initialized") + } + + hasAdmin, _ := s.store.HasAdminUser(ctx) + if !hasAdmin { + if strings.TrimSpace(req.UserName) == "" { + return fmt.Errorf("admin username is required") + } + if len(req.Password) < 8 { + return fmt.Errorf("password must be at least 8 characters") + } + if req.Password != req.ConfirmPassword { + return fmt.Errorf("passwords do not match") + } + user, _, err := s.auth.RegisterAdmin(ctx, req.UserName, "", req.Password) + if err != nil { + return fmt.Errorf("failed to create admin user: %w", err) + } + _ = user + } + + return s.store.SaveSetup(ctx, storage.SetupRecord{ + ID: fmt.Sprintf("setup_%d", time.Now().UnixNano()), + Version: "1.0", + InitializedAt: time.Now().UTC().Format(time.RFC3339), + UsageMode: req.UsageMode, + }) +} + +func CheckSetup(ctx context.Context, store storage.Provider) { + status, err := store.GetSetupStatus(ctx) + if err != nil { + return + } + if !status.Initialized { + hasAdmin, _ := store.HasAdminUser(ctx) + if hasAdmin { + _ = store.SaveSetup(ctx, storage.SetupRecord{ + ID: fmt.Sprintf("setup_%d", time.Now().UnixNano()), + Version: "0.9-legacy", + InitializedAt: time.Now().UTC().Format(time.RFC3339), + UsageMode: "personal", + }) + } + } +} diff --git a/backend/internal/storage/filestore.go b/backend/internal/storage/filestore.go index 36c6a76..c317969 100644 --- a/backend/internal/storage/filestore.go +++ b/backend/internal/storage/filestore.go @@ -21,6 +21,7 @@ type storeSnapshot struct { Imports map[string]storedImport `json:"imports"` Identities map[string]storedIdentity `json:"identities"` Events map[string]storedEvent `json:"events"` + Setup *SetupRecord `json:"setup,omitempty"` } type storedImport struct { @@ -200,8 +201,8 @@ func (s *fileStore) GetEvent(ctx context.Context, userID, id string) (msglayer.T _ = ctx s.mu.RLock() defer s.mu.RUnlock() - item, ok := s.snapshot.Events[scopeKey(userID, id)] - if !ok || item.UserID != userID { + item, ok := s.lookupScopedEventKey(s.snapshot.Events, userID, id) + if !ok { return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) } return item.Item, nil @@ -254,6 +255,11 @@ func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchPara items = append(items, stored.Item) } sort.Slice(items, func(i, j int) bool { return items[i].Timestamp > items[j].Timestamp }) + if params.Offset > 0 && params.Offset < len(items) { + items = items[params.Offset:] + } else if params.Offset >= len(items) { + items = nil + } if params.Limit > 0 && len(items) > params.Limit { items = items[:params.Limit] } @@ -279,8 +285,8 @@ func (s *fileStore) GetIdentity(ctx context.Context, userID, id string) (msglaye _ = ctx s.mu.RLock() defer s.mu.RUnlock() - identity, ok := s.snapshot.Identities[scopeKey(userID, id)] - if !ok || identity.UserID != userID { + identity, ok := s.lookupScopedKey(s.snapshot.Identities, userID, id) + if !ok { return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) } return identity.Identity, nil @@ -374,6 +380,57 @@ func (s *fileStore) ConsumeRefreshToken(ctx context.Context, tokenHash string) ( return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") } +func (s *fileStore) GetSetupStatus(ctx context.Context) (SetupStatus, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + if s.snapshot.Setup != nil { + return SetupStatus{Initialized: true, Version: s.snapshot.Setup.Version, DatabaseType: "sqlite"}, nil + } + hasAdmin, _ := s.hasAdminUserLocked() + return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil +} + +func (s *fileStore) SaveSetup(ctx context.Context, setup SetupRecord) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Setup = &setup + return s.persist() +} + +func (s *fileStore) HasAdminUser(ctx context.Context) (bool, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + return s.hasAdminUserLocked() +} + +func (s *fileStore) hasAdminUserLocked() (bool, error) { + for _, user := range s.snapshot.Users { + for _, role := range user.Roles { + if role == "R_ADMIN" || role == "R_SUPER" { + return true, nil + } + } + } + return false, nil +} + +func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash string) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + user, ok := s.snapshot.Users[userID] + if !ok { + return fmt.Errorf("user not found") + } + user.PasswordHash = newHash + user.UpdatedAt = time.Now().UTC() + s.snapshot.Users[userID] = user + return s.persist() +} + func EnsureParentDir(path string) error { dir := filepath.Dir(path) if dir == "." || dir == "" { @@ -391,10 +448,39 @@ func (s *fileStore) persist() error { } func scopeKey(userID, rawID string) string { + hash := sha1.Sum([]byte(userID)) + return fmt.Sprintf("%x:%s", hash[:8], rawID) +} + +func scopeKeyLegacy(userID, rawID string) string { hash := sha1.Sum([]byte(userID)) return fmt.Sprintf("%x:%s", hash[:4], rawID) } +func (s *fileStore) lookupScopedKey(m map[string]storedIdentity, userID, rawID string) (storedIdentity, bool) { + key := scopeKey(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + key = scopeKeyLegacy(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + return storedIdentity{}, false +} + +func (s *fileStore) lookupScopedEventKey(m map[string]storedEvent, userID, rawID string) (storedEvent, bool) { + key := scopeKey(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + key = scopeKeyLegacy(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + return storedEvent{}, false +} + func summarizeEvent(event msglayer.Event) string { switch event.Type { case "sms": diff --git a/backend/internal/storage/storage.go b/backend/internal/storage/storage.go index 442f13e..b40b8dc 100644 --- a/backend/internal/storage/storage.go +++ b/backend/internal/storage/storage.go @@ -38,6 +38,19 @@ type ImportSummary struct { IdentityCount int `json:"identity_count"` } +type SetupStatus struct { + Initialized bool `json:"initialized"` + Version string `json:"version"` + DatabaseType string `json:"database_type"` +} + +type SetupRecord struct { + ID string `json:"id"` + Version string `json:"version"` + InitializedAt string `json:"initialized_at"` + UsageMode string `json:"usage_mode"` +} + type Provider interface { Name() string Init(context.Context) error @@ -57,5 +70,9 @@ type Provider interface { GetUser(context.Context, string) (UserRecord, error) SaveRefreshToken(context.Context, RefreshTokenRecord) error ConsumeRefreshToken(context.Context, string) (RefreshTokenRecord, error) + GetSetupStatus(context.Context) (SetupStatus, error) + SaveSetup(context.Context, SetupRecord) error + HasAdminUser(context.Context) (bool, error) + UpdateUserPasswordHash(context.Context, string, string) error Close() error } diff --git a/web/src/api/commory.ts b/web/src/api/commory.ts index 690e2ea..f4409ce 100644 --- a/web/src/api/commory.ts +++ b/web/src/api/commory.ts @@ -1,6 +1,5 @@ import request from '@/utils/http' -import axios from 'axios' -import { useUserStore } from '@/store/modules/user' +import { axiosInstance } from '@/utils/http' export function fetchDashboardSummary() { return request.get({ @@ -69,12 +68,8 @@ export function exportImportUrl(importId: string) { } export async function downloadImport(importId: string) { - const userStore = useUserStore() - const response = await axios.get(exportImportUrl(importId), { - responseType: 'blob', - headers: { - Authorization: `Bearer ${userStore.accessToken}` - } + const response = await axiosInstance.get(exportImportUrl(importId), { + responseType: 'blob' }) const href = URL.createObjectURL(response.data) const link = document.createElement('a') diff --git a/web/src/api/setup.ts b/web/src/api/setup.ts new file mode 100644 index 0000000..5292c46 --- /dev/null +++ b/web/src/api/setup.ts @@ -0,0 +1,15 @@ +import request from '@/utils/http' + +export function fetchSetupStatus() { + return request.get({ + url: '/api/setup', + showErrorMessage: false + }) +} + +export function postSetup(data: Api.Setup.SetupRequest) { + return request.post<{ success: boolean }>({ + url: '/api/setup', + params: data + }) +} diff --git a/web/src/router/guards/beforeEach.ts b/web/src/router/guards/beforeEach.ts index bc97e09..99e7d66 100644 --- a/web/src/router/guards/beforeEach.ts +++ b/web/src/router/guards/beforeEach.ts @@ -49,6 +49,7 @@ import { loadingService } from '@/utils/ui' import { useCommon } from '@/hooks/core/useCommon' import { useWorktabStore } from '@/store/modules/worktab' import { fetchGetUserInfo } from '@/api/auth' +import { fetchSetupStatus } from '@/api/setup' import { ApiStatus } from '@/utils/http/status' import { isHttpError } from '@/utils/http/error' import { RouteRegistry, MenuProcessor, IframeRouteManager, RoutePermissionValidator } from '../core' @@ -69,6 +70,8 @@ let routeInitFailed = false // 路由初始化进行中标记,防止并发请求 let routeInitInProgress = false +let setupStatusChecked = false + /** * 获取 pendingLoading 状态 */ @@ -151,6 +154,31 @@ async function handleRouteGuard( NProgress.start() } + if (!setupStatusChecked && to.path !== '/setup') { + try { + const status = await fetchSetupStatus() + if (status && !status.status) { + next({ path: '/setup', replace: true }) + return + } + setupStatusChecked = true + } catch { + setupStatusChecked = true + } + } + + if (to.path === '/setup') { + try { + const status = await fetchSetupStatus() + if (status && status.status) { + next({ path: '/', replace: true }) + return + } + } catch { + // Allow setup to proceed on API error + } + } + // 1. 检查登录状态 if (!handleLoginStatus(to, userStore, next)) { return diff --git a/web/src/router/routes/staticRoutes.ts b/web/src/router/routes/staticRoutes.ts index 334d0c2..edeb69d 100644 --- a/web/src/router/routes/staticRoutes.ts +++ b/web/src/router/routes/staticRoutes.ts @@ -18,6 +18,12 @@ export const staticRoutes: AppRouteRecordRaw[] = [ // component: () => import('@views/dashboard/console/index.vue'), // meta: { title: 'menus.dashboard.title' } // }, + { + path: '/setup', + name: 'Setup', + component: () => import('@views/setup/index.vue'), + meta: { title: '系统初始化', isHideTab: true } + }, { path: '/auth/login', name: 'Login', diff --git a/web/src/types/api/api.d.ts b/web/src/types/api/api.d.ts index ae0b12b..403b4b1 100644 --- a/web/src/types/api/api.d.ts +++ b/web/src/types/api/api.d.ts @@ -142,6 +142,22 @@ declare namespace Api { from?: string to?: string limit?: number + offset?: number + } + } + + namespace Setup { + interface SetupStatus { + status: boolean + database_type: string + root_init: boolean + } + + interface SetupRequest { + userName: string + password: string + confirmPassword: string + usageMode: string } } diff --git a/web/src/utils/http/index.ts b/web/src/utils/http/index.ts index 46ca5fb..db0fa8c 100644 --- a/web/src/utils/http/index.ts +++ b/web/src/utils/http/index.ts @@ -204,4 +204,5 @@ const api = { } } +export { axiosInstance } export default api diff --git a/web/src/views/dashboard/console/index.vue b/web/src/views/dashboard/console/index.vue index 5d645cb..6a574b1 100644 --- a/web/src/views/dashboard/console/index.vue +++ b/web/src/views/dashboard/console/index.vue @@ -92,6 +92,7 @@ } onMounted(load) + onActivated(load) diff --git a/web/src/views/dashboard/timeline/index.vue b/web/src/views/dashboard/timeline/index.vue index 931004d..2818c15 100644 --- a/web/src/views/dashboard/timeline/index.vue +++ b/web/src/views/dashboard/timeline/index.vue @@ -22,6 +22,15 @@ +
    + +
    @@ -33,21 +42,33 @@ const loading = ref(false) const items = ref([]) + const currentPage = ref(1) + const pageSize = 20 + const total = ref(0) const filters = reactive({ q: '', type: '', - limit: 200 + limit: 20 }) const load = async () => { loading.value = true try { + const offset = (currentPage.value - 1) * pageSize + filters.offset = offset + filters.limit = pageSize items.value = await fetchTimeline(filters) + total.value = items.value.length === pageSize ? (currentPage.value * pageSize + pageSize) : (offset + items.value.length) } finally { loading.value = false } } + const handlePageChange = (page: number) => { + currentPage.value = page + load() + } + onMounted(load) @@ -75,6 +96,12 @@ padding: 18px; } + .pagination-wrapper { + display: flex; + justify-content: center; + margin-top: 16px; + } + @media (max-width: 900px) { .toolbar { grid-template-columns: 1fr; diff --git a/web/src/views/setup/index.vue b/web/src/views/setup/index.vue new file mode 100644 index 0000000..700dcdb --- /dev/null +++ b/web/src/views/setup/index.vue @@ -0,0 +1,366 @@ + + + + + From cca2cf9ac842270ab72d056fccc225dfdbdeb15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 16:54:27 +0800 Subject: [PATCH 07/20] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=A8=A1=E5=BC=8F=E9=87=8D=E6=9E=84=E4=B8=8E=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=AB=AF=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此提交实现了Android应用的运行模式分离,新增本地/服务端两种运行模式,添加了完整的服务端认证、API契约与CI质量 gates: 1. 新增运行模式策略、环境管理与本地化解析组件 2. 添加备份/恢复权限拆分与工具类优化 3. 实现Commory服务端API客户端与认证流程 4. 新增模式选择、服务端配置与登录UI页面 5. 添加仓库检查、代码复杂度统计等CI脚本 6. 完善文档与工程标准说明 7. 新增配套单元测试与国际化字符串 --- .github/workflows/ci.yml | 50 ++ android/app/build.gradle | 3 + .../src/main/assets/logs/ui-2025-05-13.log | 1 - .../imken/messagevault/mobile/MainActivity.kt | 31 +- .../mobile/agent/AgentContextModels.kt | 43 ++ .../mobile/auth/CommoryServerAuthProvider.kt | 63 +++ .../data/backup/AndroidCallLogReader.kt | 15 +- .../mobile/data/backup/AndroidSmsReader.kt | 15 +- .../messagevault/mobile/di/AppContainer.kt | 38 ++ .../mobile/remote/CommoryApiService.kt | 117 +++++ .../mobile/remote/CommoryServerClient.kt | 130 +++++ .../mobile/runtime/AppEnvironment.kt | 32 ++ .../mobile/runtime/AppEnvironmentManager.kt | 122 +++++ .../mobile/runtime/LocaleResolver.kt | 23 + .../mobile/runtime/RuntimeModePolicy.kt | 17 + .../messagevault/mobile/ui/model/UiText.kt | 25 + .../mobile/ui/navigation/NavigationHost.kt | 36 ++ .../mobile/ui/permission/PermissionHandler.kt | 53 +- .../mobile/ui/screens/BackupScreen.kt | 29 +- .../mobile/ui/screens/ModeSelectionScreen.kt | 104 ++++ .../mobile/ui/screens/MoreScreen.kt | 486 +++++++++--------- .../mobile/ui/screens/ServerSetupScreen.kt | 147 ++++++ .../mobile/ui/viewmodels/AppViewModel.kt | 137 +++++ .../mobile/ui/viewmodels/BackupViewModel.kt | 79 ++- .../mobile/utils/PermissionUtils.kt | 26 +- .../app/src/main/res/values-en/strings.xml | 79 ++- .../src/main/res/values-zh-rCN/strings.xml | 79 ++- android/app/src/main/res/values/strings.xml | 62 +++ .../mobile/agent/AgentPrivacyPolicyTest.kt | 21 + .../mobile/data/BackupManagerTest.kt | 22 +- .../mobile/runtime/RuntimeModePolicyTest.kt | 38 ++ backend/data/commory-store.json | 232 --------- backend/internal/api/mobile_contract_test.go | 190 +++++++ backend/internal/api/server.go | 15 +- docs/android-runtime-modes.md | 18 + docs/engineering-standards.md | 45 ++ docs/mobile-api.md | 82 +++ scripts/check-android-i18n.sh | 34 ++ scripts/check-repo-hygiene.sh | 28 + scripts/report-loc-complexity.sh | 14 + 40 files changed, 2226 insertions(+), 555 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 android/app/src/main/assets/logs/ui-2025-05-13.log create mode 100644 android/app/src/main/java/imken/messagevault/mobile/agent/AgentContextModels.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/auth/CommoryServerAuthProvider.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/di/AppContainer.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/remote/CommoryApiService.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/remote/CommoryServerClient.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironment.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironmentManager.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/runtime/LocaleResolver.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/runtime/RuntimeModePolicy.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/model/UiText.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/screens/ModeSelectionScreen.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/screens/ServerSetupScreen.kt create mode 100644 android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/AppViewModel.kt create mode 100644 android/app/src/test/java/imken/messagevault/mobile/agent/AgentPrivacyPolicyTest.kt create mode 100644 android/app/src/test/java/imken/messagevault/mobile/runtime/RuntimeModePolicyTest.kt delete mode 100644 backend/data/commory-store.json create mode 100644 backend/internal/api/mobile_contract_test.go create mode 100644 docs/android-runtime-modes.md create mode 100644 docs/engineering-standards.md create mode 100644 docs/mobile-api.md create mode 100644 scripts/check-android-i18n.sh create mode 100644 scripts/check-repo-hygiene.sh create mode 100644 scripts/report-loc-complexity.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..91cdccc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,50 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + +jobs: + backend: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '1.24' + - name: Format check + run: test -z "$(gofmt -l backend)" + - name: Vet + working-directory: backend + run: go vet ./... + - name: Test + working-directory: backend + run: go test ./... -coverprofile=coverage.out + + android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '17' + - name: Android compile + working-directory: android + run: sh ./gradlew :app:compileDebugKotlin + - name: Android unit tests + working-directory: android + run: sh ./gradlew :app:testDebugUnitTest + + governance: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Repo hygiene + run: bash scripts/check-repo-hygiene.sh + - name: Android i18n keys + run: bash scripts/check-android-i18n.sh + - name: LOC report + run: bash scripts/report-loc-complexity.sh diff --git a/android/app/build.gradle b/android/app/build.gradle index 7bfca0d..8b8e614 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -97,6 +97,9 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:2.2.0' + testImplementation 'org.mockito:mockito-core:5.12.0' + testImplementation 'org.robolectric:robolectric:4.14.1' androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' androidTestImplementation platform('androidx.compose:compose-bom:2025.05.01') diff --git a/android/app/src/main/assets/logs/ui-2025-05-13.log b/android/app/src/main/assets/logs/ui-2025-05-13.log deleted file mode 100644 index e00ba18..0000000 --- a/android/app/src/main/assets/logs/ui-2025-05-13.log +++ /dev/null @@ -1 +0,0 @@ -Fixed SMS role request dialog for Android 16 diff --git a/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt b/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt index 14e7052..495d784 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/MainActivity.kt @@ -17,11 +17,15 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import imken.messagevault.mobile.config.Config +import imken.messagevault.mobile.di.AppContainer +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.mobile.runtime.LocaleResolver import imken.messagevault.mobile.ui.navigation.MessageVaultAppWithNavigation import imken.messagevault.mobile.ui.navigation.NavigationItem import imken.messagevault.mobile.ui.navigation.navigationItems import imken.messagevault.mobile.ui.permission.PermissionHandler import imken.messagevault.mobile.ui.theme.MessageVaultTheme +import imken.messagevault.mobile.ui.viewmodels.AppViewModel import imken.messagevault.mobile.ui.viewmodels.BackupViewModel import imken.messagevault.mobile.ui.viewmodels.RestoreViewModel import imken.messagevault.mobile.utils.DefaultSmsAppHelper @@ -36,6 +40,7 @@ class MainActivity : ComponentActivity() { } private lateinit var config: Config + private lateinit var appContainer: AppContainer private lateinit var permissionHandler: PermissionHandler private lateinit var defaultSmsAppHelper: DefaultSmsAppHelper @@ -57,6 +62,7 @@ class MainActivity : ComponentActivity() { Log.d("MessageVault", "主活动创建 - 直接Log测试") config = Config.getInstance(this) + appContainer = AppContainer(applicationContext) permissionHandler = PermissionHandler(this) defaultSmsAppHelper = DefaultSmsAppHelper(this) @@ -64,8 +70,12 @@ class MainActivity : ComponentActivity() { setContent { MessageVaultTheme { + val appViewModel: AppViewModel = viewModel( + factory = AppViewModel.Factory(appContainer) + ) + val backupViewModel: BackupViewModel = viewModel( - factory = BackupViewModel.Factory(this) + factory = BackupViewModel.ContainerFactory(this, appContainer) ) val restoreViewModel: RestoreViewModel = viewModel( @@ -73,7 +83,7 @@ class MainActivity : ComponentActivity() { ) if (!initialPermissionsChecked) { - val permissionsGranted = permissionHandler.checkPermissions() + val permissionsGranted = permissionHandler.checkBackupPermissions() backupViewModel.setPermissionsGranted(permissionsGranted) restoreViewModel.setPermissionsGranted(permissionsGranted) initialPermissionsChecked = true @@ -84,6 +94,7 @@ class MainActivity : ComponentActivity() { color = MaterialTheme.colorScheme.background ) { MessageVaultAppWithNavigation( + appViewModel = appViewModel, backupViewModel = backupViewModel, restoreViewModel = restoreViewModel, navigationItems = navigationItems @@ -96,8 +107,8 @@ class MainActivity : ComponentActivity() { } private fun applyLanguage() { - val langCode = config.getLanguage() - val locale = Locale(langCode) + val environment = AppEnvironmentManager(this).currentSnapshot() + val locale = LocaleResolver.resolveLocale(environment) Locale.setDefault(locale) val configuration = Configuration(resources.configuration) @@ -106,16 +117,8 @@ class MainActivity : ComponentActivity() { } override fun attachBaseContext(newBase: Context) { - val config = Config.getInstance(newBase) - val langCode = config.getLanguage() - val locale = Locale(langCode) - Locale.setDefault(locale) - - val configuration = Configuration(newBase.resources.configuration) - configuration.setLocale(locale) - val context = newBase.createConfigurationContext(configuration) - - super.attachBaseContext(context) + val environment = AppEnvironmentManager(newBase).currentSnapshot() + super.attachBaseContext(LocaleResolver.wrapContext(newBase, environment)) } override fun onResume() { diff --git a/android/app/src/main/java/imken/messagevault/mobile/agent/AgentContextModels.kt b/android/app/src/main/java/imken/messagevault/mobile/agent/AgentContextModels.kt new file mode 100644 index 0000000..1bdaf5e --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/agent/AgentContextModels.kt @@ -0,0 +1,43 @@ +package imken.messagevault.mobile.agent + +import imken.messagevault.mobile.runtime.RuntimeMode + +enum class AgentContextSource { + MESSAGE, + CALL_LOG, + CONTACT +} + +enum class AgentProviderPolicy { + LOCAL_ONLY, + SERVER_ALLOWED +} + +data class AgentContextReference( + val source: AgentContextSource, + val sourceId: String, + val participantIds: List, + val timestampMillis: Long, + val preview: String +) + +data class AgentContextWindow( + val query: String, + val references: List, + val maxItems: Int = 20, + val maxPreviewChars: Int = 240, + val policy: AgentProviderPolicy +) + +object AgentPrivacyPolicy { + fun policyFor(runtimeMode: RuntimeMode): AgentProviderPolicy { + return when (runtimeMode) { + RuntimeMode.LOCAL_ONLY -> AgentProviderPolicy.LOCAL_ONLY + RuntimeMode.COMMORY_SERVER -> AgentProviderPolicy.SERVER_ALLOWED + } + } + + fun trimPreview(value: String, maxChars: Int = 240): String { + return if (value.length <= maxChars) value else value.take(maxChars) + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/auth/CommoryServerAuthProvider.kt b/android/app/src/main/java/imken/messagevault/mobile/auth/CommoryServerAuthProvider.kt new file mode 100644 index 0000000..2f31a93 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/auth/CommoryServerAuthProvider.kt @@ -0,0 +1,63 @@ +package imken.messagevault.mobile.auth + +import imken.messagevault.mobile.remote.CommoryServerClient +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.mobile.runtime.AuthSession +import imken.messagevault.sdk.auth.AuthCredentials +import imken.messagevault.sdk.auth.AuthProvider +import imken.messagevault.sdk.auth.AuthResult +import imken.messagevault.sdk.auth.UserInfo +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +class CommoryServerAuthProvider( + private val environmentManager: AppEnvironmentManager, + private val serverClient: CommoryServerClient +) : AuthProvider { + private val _isAuthenticated = MutableStateFlow(environmentManager.currentSnapshot().authSession.isAuthenticated) + override val isAuthenticated: StateFlow = _isAuthenticated.asStateFlow() + + private val _currentUser = MutableStateFlow(environmentManager.currentSnapshot().authSession.toUserInfo()) + override val currentUser: StateFlow = _currentUser.asStateFlow() + + override suspend fun login(credentials: AuthCredentials): AuthResult { + val password = credentials as? AuthCredentials.Password + ?: return AuthResult.Error("UNSUPPORTED", "Unsupported credentials") + val environment = environmentManager.currentSnapshot() + val session = serverClient.login( + baseUrl = environment.serverUrl, + userName = password.username, + password = password.password + ).getOrElse { return AuthResult.Error("LOGIN_FAILED", it.message ?: "login failed") } + environmentManager.updateSession(session) + _isAuthenticated.value = true + _currentUser.value = session.toUserInfo() + return AuthResult.Success(session.accessToken.orEmpty(), session.toUserInfo()!!) + } + + override suspend fun logout() { + environmentManager.clearSession() + _isAuthenticated.value = false + _currentUser.value = null + } + + override suspend fun refreshToken(): AuthResult { + val refreshed = serverClient.refreshPersistedSession() + .getOrElse { return AuthResult.Error("REFRESH_FAILED", it.message ?: "refresh failed") } + _isAuthenticated.value = true + _currentUser.value = refreshed.toUserInfo() + return AuthResult.Success(refreshed.accessToken.orEmpty(), refreshed.toUserInfo()!!) + } + + override fun getToken(): String? = environmentManager.currentSnapshot().authSession.accessToken + + private fun AuthSession.toUserInfo(): UserInfo? { + val id = userId ?: return null + return UserInfo( + userId = id, + displayName = userName ?: email ?: id, + email = email + ) + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt index e600ebf..64588d1 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidCallLogReader.kt @@ -1,20 +1,27 @@ package imken.messagevault.mobile.data.backup import android.content.Context +import android.content.ContentResolver +import android.content.pm.PackageManager import android.provider.CallLog.Calls import imken.messagevault.mobile.utils.PhoneNumberUtils import imken.messagevault.sdk.backup.model.CallLog import imken.messagevault.sdk.backup.reader.CallLogReader import timber.log.Timber -class AndroidCallLogReader(private val context: Context) : CallLogReader { +class AndroidCallLogReader( + private val context: Context, + private val contentResolver: ContentResolver = context.contentResolver, + private val hasPermission: (String) -> Boolean = { permission -> + context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED + } +) : CallLogReader { override suspend fun readCallLogs(): List? { val callLogs = mutableListOf() try { - val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) - if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { + if (!hasPermission(android.Manifest.permission.READ_CALL_LOG)) { Timber.e("[Mobile] ERROR [Backup] 备份通话记录失败: 没有 READ_CALL_LOG 权限") return null } @@ -42,7 +49,7 @@ class AndroidCallLogReader(private val context: Context) : CallLogReader { Timber.d("[Mobile] DEBUG [Backup] 查询时间范围: ${range.first} 到 ${range.second}") try { - context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)?.use { cursor -> + contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)?.use { cursor -> totalCallLogs += cursor.count val idColumn = cursor.getColumnIndex(Calls._ID) diff --git a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt index 12c3313..ef84afc 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/data/backup/AndroidSmsReader.kt @@ -1,20 +1,27 @@ package imken.messagevault.mobile.data.backup import android.content.Context +import android.content.ContentResolver +import android.content.pm.PackageManager import android.provider.Telephony import imken.messagevault.mobile.utils.PhoneNumberUtils import imken.messagevault.sdk.backup.model.Message import imken.messagevault.sdk.backup.reader.SmsReader import timber.log.Timber -class AndroidSmsReader(private val context: Context) : SmsReader { +class AndroidSmsReader( + private val context: Context, + private val contentResolver: ContentResolver = context.contentResolver, + private val hasPermission: (String) -> Boolean = { permission -> + context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED + } +) : SmsReader { override suspend fun readSms(): List? { val messages = mutableListOf() try { - val permissionStatus = context.checkSelfPermission(android.Manifest.permission.READ_SMS) - if (permissionStatus != android.content.pm.PackageManager.PERMISSION_GRANTED) { + if (!hasPermission(android.Manifest.permission.READ_SMS)) { Timber.e("[Mobile] ERROR [Backup] 备份短信失败: 没有 READ_SMS 权限") return null } @@ -33,7 +40,7 @@ class AndroidSmsReader(private val context: Context) : SmsReader { ) val sortOrder = "${Telephony.Sms.DATE} DESC" - context.contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> + contentResolver.query(uri, projection, null, null, sortOrder)?.use { cursor -> Timber.d("[Mobile] DEBUG [Backup] 找到 ${cursor.count} 条短信") val idColumn = cursor.getColumnIndex(Telephony.Sms._ID) diff --git a/android/app/src/main/java/imken/messagevault/mobile/di/AppContainer.kt b/android/app/src/main/java/imken/messagevault/mobile/di/AppContainer.kt new file mode 100644 index 0000000..7b00112 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/di/AppContainer.kt @@ -0,0 +1,38 @@ +package imken.messagevault.mobile.di + +import android.content.Context +import imken.messagevault.mobile.data.backup.AndroidBackupFileReader +import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter +import imken.messagevault.mobile.data.backup.AndroidCallLogReader +import imken.messagevault.mobile.data.backup.AndroidCallLogWriter +import imken.messagevault.mobile.data.backup.AndroidContactReader +import imken.messagevault.mobile.data.backup.AndroidContactWriter +import imken.messagevault.mobile.data.backup.AndroidSmsReader +import imken.messagevault.mobile.data.backup.AndroidSmsWriter +import imken.messagevault.mobile.remote.CommoryServerClient +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.sdk.backup.BackupManager +import imken.messagevault.sdk.backup.RestoreManager + +class AppContainer(private val context: Context) { + val environmentManager: AppEnvironmentManager by lazy { AppEnvironmentManager(context) } + val serverClient: CommoryServerClient by lazy { CommoryServerClient(context, environmentManager) } + + fun createBackupManager(): BackupManager = BackupManager( + smsReader = AndroidSmsReader(context), + callLogReader = AndroidCallLogReader(context), + contactReader = AndroidContactReader(context), + backupFileWriter = AndroidBackupFileWriter(context), + backupFileReader = AndroidBackupFileReader(context), + smsWriter = AndroidSmsWriter(context), + callLogWriter = AndroidCallLogWriter(context), + contactWriter = AndroidContactWriter(context) + ) + + fun createRestoreManager(): RestoreManager = RestoreManager( + backupFileReader = AndroidBackupFileReader(context), + smsWriter = AndroidSmsWriter(context), + callLogWriter = AndroidCallLogWriter(context), + contactWriter = AndroidContactWriter(context) + ) +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryApiService.kt b/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryApiService.kt new file mode 100644 index 0000000..9128b7d --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryApiService.kt @@ -0,0 +1,117 @@ +package imken.messagevault.mobile.remote + +import okhttp3.RequestBody +import okhttp3.ResponseBody +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Streaming + +data class ApiEnvelope( + val code: Int, + val msg: String, + val data: T? +) + +data class SetupStatusDto( + val status: Boolean? = null, + val initialized: Boolean? = null, + val version: String? = null, + val database_type: String? = null, + val databaseType: String? = null, + val root_init: Boolean? = null, + val rootInit: Boolean? = null +) + +data class UserDto( + val id: String, + val user_name: String? = null, + val userName: String? = null, + val email: String? = null, + val roles: List = emptyList() +) + +data class TokenPairDto( + val accessToken: String, + val refreshToken: String +) + +data class AuthResponseDto( + val user: UserDto, + val token: String, + val refreshToken: String +) + +data class RegisterRequestDto( + val userName: String, + val email: String, + val password: String +) + +data class LoginRequestDto( + val userName: String, + val password: String +) + +data class RefreshRequestDto( + val refreshToken: String +) + +data class ImportSummaryDto( + val id: String, + val user_id: String? = null, + val userId: String? = null, + val schema_version: String? = null, + val schemaVersion: String? = null, + val imported_at: String? = null, + val importedAt: String? = null, + val source_path: String? = null, + val sourcePath: String? = null, + val event_count: Int? = null, + val eventCount: Int? = null, + val identity_count: Int? = null, + val identityCount: Int? = null +) + +data class ImportUploadResponseDto( + val import_id: String? = null, + val importId: String? = null, + val msglayer_version: String? = null, + val msglayerVersion: String? = null +) + +interface CommoryApiService { + @GET("api/setup") + suspend fun getSetupStatus(): Response> + + @POST("api/auth/register") + suspend fun register(@Body request: RegisterRequestDto): Response> + + @POST("api/auth/login") + suspend fun login(@Body request: LoginRequestDto): Response> + + @POST("api/auth/refresh") + suspend fun refresh(@Body request: RefreshRequestDto): Response> + + @GET("api/user/info") + suspend fun getUserInfo(@Header("Authorization") authorization: String): Response> + + @GET("api/imports") + suspend fun listImports(@Header("Authorization") authorization: String): Response>> + + @POST("api/imports/upload") + suspend fun uploadImport( + @Header("Authorization") authorization: String, + @Body requestBody: RequestBody + ): Response> + + @Streaming + @GET("api/imports/{importId}/export") + suspend fun exportImport( + @Header("Authorization") authorization: String, + @Path("importId") importId: String + ): Response +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryServerClient.kt b/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryServerClient.kt new file mode 100644 index 0000000..dd603bd --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/remote/CommoryServerClient.kt @@ -0,0 +1,130 @@ +package imken.messagevault.mobile.remote + +import android.content.Context +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.mobile.runtime.AuthSession +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import okhttp3.MediaType +import okhttp3.OkHttpClient +import okhttp3.RequestBody +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.io.File +import java.util.concurrent.TimeUnit + +class CommoryServerClient( + private val context: Context, + private val environmentManager: AppEnvironmentManager +) { + private val client = OkHttpClient.Builder() + .connectTimeout(15, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build() + + private fun service(baseUrl: String): CommoryApiService { + return Retrofit.Builder() + .baseUrl(normalizeBaseUrl(baseUrl)) + .client(client) + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(CommoryApiService::class.java) + } + + suspend fun checkSetup(baseUrl: String): Result = wrapCall { + val response = service(baseUrl).getSetupStatus() + require(response.isSuccessful) { response.errorBody()?.string() ?: "setup request failed" } + response.body()?.data ?: error(response.body()?.msg ?: "missing setup payload") + } + + suspend fun register(baseUrl: String, userName: String, email: String, password: String): Result = wrapCall { + val response = service(baseUrl).register(RegisterRequestDto(userName, email, password)) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "register failed" } + response.body()?.data?.toSession() ?: error(response.body()?.msg ?: "missing register payload") + } + + suspend fun login(baseUrl: String, userName: String, password: String): Result = wrapCall { + val response = service(baseUrl).login(LoginRequestDto(userName, password)) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "login failed" } + response.body()?.data?.toSession() ?: error(response.body()?.msg ?: "missing login payload") + } + + suspend fun refresh(baseUrl: String, refreshToken: String, currentSession: AuthSession): Result = wrapCall { + val response = service(baseUrl).refresh(RefreshRequestDto(refreshToken)) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "refresh failed" } + val pair = response.body()?.data ?: error(response.body()?.msg ?: "missing refresh payload") + currentSession.copy(accessToken = pair.accessToken, refreshToken = pair.refreshToken) + } + + suspend fun userInfo(baseUrl: String, accessToken: String): Result = wrapCall { + val response = service(baseUrl).getUserInfo(bearer(accessToken)) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "user info failed" } + response.body()?.data ?: error(response.body()?.msg ?: "missing user payload") + } + + suspend fun listImports(baseUrl: String, accessToken: String): Result> = wrapCall { + val response = service(baseUrl).listImports(bearer(accessToken)) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "list imports failed" } + response.body()?.data ?: emptyList() + } + + suspend fun uploadImport(baseUrl: String, accessToken: String, file: File): Result = wrapCall { + val body = withContext(Dispatchers.IO) { + RequestBody.create(MediaType.parse("application/json"), file.readBytes()) + } + val response = service(baseUrl).uploadImport(bearer(accessToken), body) + require(response.isSuccessful) { response.body()?.msg ?: response.errorBody()?.string() ?: "upload failed" } + response.body()?.data ?: error(response.body()?.msg ?: "missing upload payload") + } + + suspend fun exportImport(baseUrl: String, accessToken: String, importId: String): Result = wrapCall { + val response = service(baseUrl).exportImport(bearer(accessToken), importId) + require(response.isSuccessful) { response.errorBody()?.string() ?: "export failed" } + val body = response.body() ?: error("missing export body") + val outDir = File(context.cacheDir, "remote-imports").apply { mkdirs() } + val outFile = File(outDir, "$importId.json") + withContext(Dispatchers.IO) { + body.byteStream().use { input -> + outFile.outputStream().use { output -> input.copyTo(output) } + } + } + outFile + } + + suspend fun refreshPersistedSession(): Result { + val environment = environmentManager.currentSnapshot() + val refreshToken = environment.authSession.refreshToken ?: return Result.failure(IllegalStateException("missing refresh token")) + val updated = refresh(environment.serverUrl, refreshToken, environment.authSession).getOrThrow() + val user = userInfo(environment.serverUrl, updated.accessToken ?: "").getOrThrow() + val session = updated.copy( + userId = user.id, + userName = user.userName ?: user.user_name, + email = user.email + ) + environmentManager.updateSession(session) + return Result.success(session) + } + + private fun normalizeBaseUrl(baseUrl: String): String { + val trimmed = baseUrl.trim() + val withScheme = if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) trimmed else "http://$trimmed" + return if (withScheme.endsWith("/")) withScheme else "$withScheme/" + } + + private fun bearer(token: String): String = "Bearer $token" + + private suspend fun wrapCall(block: suspend () -> T): Result { + return runCatching { block() } + } + + private fun AuthResponseDto.toSession(): AuthSession { + return AuthSession( + accessToken = token, + refreshToken = refreshToken, + userId = user.id, + userName = user.userName ?: user.user_name, + email = user.email + ) + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironment.kt b/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironment.kt new file mode 100644 index 0000000..c2e2d8f --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironment.kt @@ -0,0 +1,32 @@ +package imken.messagevault.mobile.runtime + +enum class RuntimeMode { + LOCAL_ONLY, + COMMORY_SERVER +} + +enum class AppLocaleOption { + SYSTEM, + ZH_CN, + EN +} + +data class AuthSession( + val accessToken: String? = null, + val refreshToken: String? = null, + val userId: String? = null, + val userName: String? = null, + val email: String? = null +) { + val isAuthenticated: Boolean + get() = !accessToken.isNullOrBlank() +} + +data class AppEnvironment( + val mode: RuntimeMode = RuntimeMode.LOCAL_ONLY, + val modeSelected: Boolean = false, + val serverUrl: String = "http://10.0.2.2:3000/", + val locale: AppLocaleOption = AppLocaleOption.SYSTEM, + val syncOnBackup: Boolean = true, + val authSession: AuthSession = AuthSession() +) diff --git a/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironmentManager.kt b/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironmentManager.kt new file mode 100644 index 0000000..cc8d038 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/runtime/AppEnvironmentManager.kt @@ -0,0 +1,122 @@ +package imken.messagevault.mobile.runtime + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.runBlocking + +private val Context.appEnvironmentStore: DataStore by preferencesDataStore(name = "commory_app_environment") + +class AppEnvironmentManager(context: Context) { + private val appContext = context.applicationContext + private val dataStore = appContext.appEnvironmentStore + + val environment: Flow = dataStore.data.map { preferences -> + AppEnvironment( + mode = RuntimeMode.valueOf( + preferences[KEY_RUNTIME_MODE] ?: RuntimeMode.LOCAL_ONLY.name + ), + modeSelected = preferences[KEY_MODE_SELECTED] ?: false, + serverUrl = preferences[KEY_SERVER_URL] ?: DEFAULT_SERVER_URL, + locale = AppLocaleOption.valueOf( + preferences[KEY_LOCALE] ?: AppLocaleOption.SYSTEM.name + ), + syncOnBackup = preferences[KEY_SYNC_ON_BACKUP] ?: true, + authSession = AuthSession( + accessToken = preferences[KEY_ACCESS_TOKEN], + refreshToken = preferences[KEY_REFRESH_TOKEN], + userId = preferences[KEY_USER_ID], + userName = preferences[KEY_USER_NAME], + email = preferences[KEY_EMAIL] + ) + ) + } + + fun currentSnapshot(): AppEnvironment = runBlocking { environment.first() } + + suspend fun selectMode(mode: RuntimeMode) { + dataStore.edit { preferences -> + preferences[KEY_RUNTIME_MODE] = mode.name + preferences[KEY_MODE_SELECTED] = true + } + } + + suspend fun updateServerUrl(serverUrl: String) { + dataStore.edit { preferences -> + preferences[KEY_SERVER_URL] = normalizeServerUrl(serverUrl) + } + } + + suspend fun updateLocale(locale: AppLocaleOption) { + dataStore.edit { preferences -> + preferences[KEY_LOCALE] = locale.name + } + } + + suspend fun updateSyncOnBackup(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[KEY_SYNC_ON_BACKUP] = enabled + } + } + + suspend fun updateSession(session: AuthSession) { + dataStore.edit { preferences -> + setOrRemove(preferences, KEY_ACCESS_TOKEN, session.accessToken) + setOrRemove(preferences, KEY_REFRESH_TOKEN, session.refreshToken) + setOrRemove(preferences, KEY_USER_ID, session.userId) + setOrRemove(preferences, KEY_USER_NAME, session.userName) + setOrRemove(preferences, KEY_EMAIL, session.email) + } + } + + suspend fun clearSession() { + updateSession(AuthSession()) + } + + private fun normalizeServerUrl(input: String): String { + val trimmed = input.trim() + if (trimmed.isBlank()) { + return DEFAULT_SERVER_URL + } + val withScheme = if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) { + trimmed + } else { + "http://$trimmed" + } + return if (withScheme.endsWith("/")) withScheme else "$withScheme/" + } + + private fun setOrRemove( + preferences: androidx.datastore.preferences.core.MutablePreferences, + key: Preferences.Key, + value: String? + ) { + if (value.isNullOrBlank()) { + preferences.remove(key) + } else { + preferences[key] = value + } + } + + private companion object { + const val DEFAULT_SERVER_URL = "http://10.0.2.2:3000/" + + val KEY_RUNTIME_MODE = stringPreferencesKey("runtime_mode") + val KEY_MODE_SELECTED = booleanPreferencesKey("mode_selected") + val KEY_SERVER_URL = stringPreferencesKey("server_url") + val KEY_LOCALE = stringPreferencesKey("locale") + val KEY_SYNC_ON_BACKUP = booleanPreferencesKey("sync_on_backup") + val KEY_ACCESS_TOKEN = stringPreferencesKey("access_token") + val KEY_REFRESH_TOKEN = stringPreferencesKey("refresh_token") + val KEY_USER_ID = stringPreferencesKey("user_id") + val KEY_USER_NAME = stringPreferencesKey("user_name") + val KEY_EMAIL = stringPreferencesKey("email") + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/runtime/LocaleResolver.kt b/android/app/src/main/java/imken/messagevault/mobile/runtime/LocaleResolver.kt new file mode 100644 index 0000000..886c51a --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/runtime/LocaleResolver.kt @@ -0,0 +1,23 @@ +package imken.messagevault.mobile.runtime + +import android.content.Context +import android.content.res.Configuration +import java.util.Locale + +object LocaleResolver { + fun resolveLocale(environment: AppEnvironment, fallback: Locale = Locale.getDefault()): Locale { + return when (environment.locale) { + AppLocaleOption.SYSTEM -> fallback + AppLocaleOption.ZH_CN -> Locale.SIMPLIFIED_CHINESE + AppLocaleOption.EN -> Locale.ENGLISH + } + } + + fun wrapContext(base: Context, environment: AppEnvironment): Context { + val locale = resolveLocale(environment, base.resources.configuration.locales[0] ?: Locale.getDefault()) + Locale.setDefault(locale) + val configuration = Configuration(base.resources.configuration) + configuration.setLocale(locale) + return base.createConfigurationContext(configuration) + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/runtime/RuntimeModePolicy.kt b/android/app/src/main/java/imken/messagevault/mobile/runtime/RuntimeModePolicy.kt new file mode 100644 index 0000000..6fa83d0 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/runtime/RuntimeModePolicy.kt @@ -0,0 +1,17 @@ +package imken.messagevault.mobile.runtime + +object RuntimeModePolicy { + fun requiresServerAuth(environment: AppEnvironment): Boolean { + return environment.mode == RuntimeMode.COMMORY_SERVER && !environment.authSession.isAuthenticated + } + + fun canUploadBackup(environment: AppEnvironment): Boolean { + return environment.mode == RuntimeMode.COMMORY_SERVER && + environment.syncOnBackup && + environment.authSession.isAuthenticated + } + + fun allowsLocalBackup(environment: AppEnvironment): Boolean = environment.modeSelected + + fun preservesLocalFilesOnModeSwitch(): Boolean = true +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/model/UiText.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/model/UiText.kt new file mode 100644 index 0000000..2f3e518 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/model/UiText.kt @@ -0,0 +1,25 @@ +package imken.messagevault.mobile.ui.model + +import androidx.annotation.StringRes +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource + +sealed interface UiText { + data class Resource(@StringRes val resId: Int, val args: List = emptyList()) : UiText + data class Dynamic(val value: String) : UiText +} + +@Composable +fun UiText?.resolve(): String? { + return when (this) { + null -> null + is UiText.Dynamic -> value + is UiText.Resource -> stringResource(resId, *args.toTypedArray()) + } +} + +data class PermissionSnapshot( + val backupPermissionsGranted: Boolean = false, + val restorePermissionsGranted: Boolean = false, + val defaultSmsApp: Boolean = false +) diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt index f7c8160..40bdc77 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/navigation/NavigationHost.kt @@ -27,10 +27,15 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import imken.messagevault.mobile.R +import imken.messagevault.mobile.runtime.RuntimeMode +import imken.messagevault.mobile.runtime.RuntimeModePolicy import imken.messagevault.mobile.ui.screens.BackupScreen import imken.messagevault.mobile.ui.screens.MoreScreen +import imken.messagevault.mobile.ui.screens.ModeSelectionScreen import imken.messagevault.mobile.ui.screens.PreviewScreen import imken.messagevault.mobile.ui.screens.RestoreScreen +import imken.messagevault.mobile.ui.screens.ServerSetupScreen +import imken.messagevault.mobile.ui.viewmodels.AppViewModel import imken.messagevault.mobile.ui.viewmodels.BackupViewModel import imken.messagevault.mobile.ui.viewmodels.RestoreViewModel @@ -51,11 +56,32 @@ val navigationItems = listOf( @OptIn(ExperimentalMaterial3Api::class) @Composable fun MessageVaultAppWithNavigation( + appViewModel: AppViewModel, backupViewModel: BackupViewModel, restoreViewModel: RestoreViewModel, navigationItems: List ) { val navController = rememberNavController() + val environment by appViewModel.environment.collectAsState() + val serverAuthState by appViewModel.serverAuthState.collectAsState() + + if (!environment.modeSelected) { + ModeSelectionScreen(onSelectMode = appViewModel::selectMode) + return + } + + if (RuntimeModePolicy.requiresServerAuth(environment)) { + ServerSetupScreen( + environment = environment, + authState = serverAuthState, + onServerUrlChange = appViewModel::updateServerUrl, + onCheckServer = { appViewModel.checkServer() }, + onLogin = appViewModel::login, + onRegister = appViewModel::register, + onUseLocal = { appViewModel.selectMode(RuntimeMode.LOCAL_ONLY) } + ) + return + } Scaffold( topBar = { @@ -128,6 +154,16 @@ fun MessageVaultAppWithNavigation( } composable(NavigationItem.More.route) { MoreScreen( + environment = environment, + serverAuthState = serverAuthState, + onModeChange = appViewModel::selectMode, + onLocaleChange = appViewModel::updateLocale, + onSyncOnBackupChange = appViewModel::updateSyncOnBackup, + onServerUrlChange = appViewModel::updateServerUrl, + onCheckServer = { appViewModel.checkServer() }, + onLogin = appViewModel::login, + onRegister = appViewModel::register, + onLogout = appViewModel::logout, onNavigateToRestore = { navController.navigate(NavigationItem.Restore.route) { popUpTo(navController.graph.findStartDestination().id) { diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt index 5c3c391..019c37f 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/permission/PermissionHandler.kt @@ -13,15 +13,8 @@ import timber.log.Timber class PermissionHandler(private val activity: ComponentActivity) { companion object { - val REQUIRED_PERMISSIONS = arrayOf( - Manifest.permission.READ_SMS, - Manifest.permission.READ_CALL_LOG, - Manifest.permission.READ_CONTACTS, - Manifest.permission.SEND_SMS, - Manifest.permission.WRITE_CALL_LOG, - Manifest.permission.WRITE_CONTACTS, - Manifest.permission.WRITE_EXTERNAL_STORAGE - ) + val BACKUP_PERMISSIONS = PermissionUtils.BACKUP_PERMISSIONS + val RESTORE_PERMISSIONS = PermissionUtils.RESTORE_PERMISSIONS } private val requestPermissionLauncher = activity.registerForActivityResult( @@ -30,7 +23,7 @@ class PermissionHandler(private val activity: ComponentActivity) { val allGranted = permissions.entries.all { it.value } if (allGranted) { Timber.i("[Mobile] INFO [Permissions] 所有请求的权限已授予") - Toast.makeText(activity, "所有权限已授予,可以继续操作", Toast.LENGTH_SHORT).show() + Toast.makeText(activity, activity.getString(imken.messagevault.mobile.R.string.permissions_granted_toast), Toast.LENGTH_SHORT).show() } else { val deniedPermissions = permissions.filterValues { !it }.keys Timber.w("[Mobile] WARN [Permissions] 部分权限被拒绝: $deniedPermissions") @@ -39,24 +32,15 @@ class PermissionHandler(private val activity: ComponentActivity) { showPermissionRationaleDialog() } else { PermissionUtils.openAppSettings(activity) - Toast.makeText(activity, "请在设置中手动授予权限", Toast.LENGTH_LONG).show() + Toast.makeText(activity, activity.getString(imken.messagevault.mobile.R.string.permissions_settings_toast), Toast.LENGTH_LONG).show() } } } - fun checkPermissions(): Boolean { - val permissionsToCheck = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - arrayOf( - Manifest.permission.READ_SMS, - Manifest.permission.READ_CALL_LOG, - Manifest.permission.READ_CONTACTS, - Manifest.permission.SEND_SMS, - Manifest.permission.WRITE_CALL_LOG, - Manifest.permission.WRITE_CONTACTS - ) - } else { - REQUIRED_PERMISSIONS - } + fun checkPermissions(): Boolean = checkBackupPermissions(requestIfMissing = true) + + fun checkBackupPermissions(requestIfMissing: Boolean = true): Boolean { + val permissionsToCheck = BACKUP_PERMISSIONS val allPermissionsGranted = permissionsToCheck.all { ContextCompat.checkSelfPermission(activity, it) == PackageManager.PERMISSION_GRANTED @@ -66,13 +50,30 @@ class PermissionHandler(private val activity: ComponentActivity) { Timber.i("[Mobile] INFO [Permission] 已有所有必要权限; Context: 启动检查") } else { Timber.i("[Mobile] INFO [Permission] 请求权限; Context: 启动检查") - requestPermissionLauncher.launch(permissionsToCheck) + if (requestIfMissing) { + requestPermissionLauncher.launch(permissionsToCheck) + } } return allPermissionsGranted } + fun checkRestorePermissions(requestIfMissing: Boolean = true): Boolean { + val permissionsToCheck = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + RESTORE_PERMISSIONS + } else { + RESTORE_PERMISSIONS + Manifest.permission.WRITE_EXTERNAL_STORAGE + } + val allPermissionsGranted = permissionsToCheck.all { + ContextCompat.checkSelfPermission(activity, it) == PackageManager.PERMISSION_GRANTED + } + if (!allPermissionsGranted && requestIfMissing) { + requestPermissionLauncher.launch(permissionsToCheck) + } + return allPermissionsGranted + } + private fun showPermissionRationaleDialog() { - Toast.makeText(activity, "需要这些权限才能备份和恢复您的短信和通话记录", Toast.LENGTH_LONG).show() + Toast.makeText(activity, activity.getString(imken.messagevault.mobile.R.string.permission_rationale), Toast.LENGTH_LONG).show() } } diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/BackupScreen.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/BackupScreen.kt index b169f7d..ca7146d 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/BackupScreen.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/BackupScreen.kt @@ -17,6 +17,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import imken.messagevault.mobile.R import imken.messagevault.mobile.ui.theme.MessageVaultTheme +import imken.messagevault.mobile.ui.model.UiText +import imken.messagevault.mobile.ui.model.resolve /** * 备份屏幕 @@ -32,7 +34,7 @@ import imken.messagevault.mobile.ui.theme.MessageVaultTheme fun BackupScreen( permissionsGranted: Boolean, isOperating: Boolean, - backupStatus: String?, + backupStatus: UiText?, onBackupClick: () -> Unit ) { Column( @@ -131,9 +133,10 @@ fun PermissionRequiredCard() { @Composable fun BackupInfoCard( isOperating: Boolean, - backupStatus: String?, + backupStatus: UiText?, onBackupClick: () -> Unit ) { + val status = backupStatus.resolve() ?: stringResource(id = R.string.status_initial) Card( modifier = Modifier.fillMaxWidth(), colors = CardDefaults.cardColors( @@ -146,7 +149,7 @@ fun BackupInfoCard( ) { // 标题 Text( - text = "数据备份", + text = stringResource(R.string.backup_data_title), style = MaterialTheme.typography.titleLarge, color = MaterialTheme.colorScheme.onPrimaryContainer ) @@ -155,7 +158,7 @@ fun BackupInfoCard( // 状态信息 Text( - text = backupStatus ?: stringResource(id = R.string.status_initial), + text = status, style = MaterialTheme.typography.bodyLarge, textAlign = TextAlign.Center, modifier = Modifier.padding(bottom = 16.dp) @@ -212,7 +215,7 @@ fun BackupHelpCard() { modifier = Modifier.padding(16.dp) ) { Text( - text = "关于备份", + text = stringResource(R.string.backup_about_title), style = MaterialTheme.typography.titleLarge ) @@ -220,14 +223,14 @@ fun BackupHelpCard() { val permissions = remember { listOf( - "读取短信 (${Manifest.permission.READ_SMS})" to "用于备份短信内容", - "读取通话记录 (${Manifest.permission.READ_CALL_LOG})" to "用于备份通话历史", - "存储空间 (${Manifest.permission.WRITE_EXTERNAL_STORAGE})" to "用于保存备份文件" + R.string.permission_sms_backup_title to R.string.permission_sms_backup_body, + R.string.permission_call_backup_title to R.string.permission_call_backup_body, + R.string.permission_contacts_backup_title to R.string.permission_contacts_backup_body ) } LazyColumn { - items(permissions) { (permission, description) -> + items(permissions) { (permissionRes, descriptionRes) -> Row( modifier = Modifier .fillMaxWidth() @@ -245,12 +248,12 @@ fun BackupHelpCard() { Column { Text( - text = permission, + text = stringResource(permissionRes), style = MaterialTheme.typography.titleSmall ) Text( - text = description, + text = stringResource(descriptionRes), style = MaterialTheme.typography.bodySmall ) } @@ -292,8 +295,8 @@ fun BackupScreenPreview() { BackupScreen( permissionsGranted = true, isOperating = false, - backupStatus = "上次备份:2023-01-01 12:00", + backupStatus = UiText.Dynamic("上次备份:2023-01-01 12:00"), onBackupClick = {} ) } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ModeSelectionScreen.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ModeSelectionScreen.kt new file mode 100644 index 0000000..3f1bde4 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ModeSelectionScreen.kt @@ -0,0 +1,104 @@ +package imken.messagevault.mobile.ui.screens + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Cloud +import androidx.compose.material.icons.filled.Storage +import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import imken.messagevault.mobile.R +import imken.messagevault.mobile.runtime.RuntimeMode + +@Composable +fun ModeSelectionScreen( + onSelectMode: (RuntimeMode) -> Unit +) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = stringResource(R.string.mode_title), + style = MaterialTheme.typography.headlineMedium, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(12.dp)) + Text( + text = stringResource(R.string.mode_subtitle), + style = MaterialTheme.typography.bodyLarge, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(24.dp)) + + ModeCard( + icon = { Icon(Icons.Default.Storage, contentDescription = null) }, + title = stringResource(R.string.mode_local_title), + body = stringResource(R.string.mode_local_body), + action = { + Button(onClick = { onSelectMode(RuntimeMode.LOCAL_ONLY) }) { + Text(stringResource(R.string.mode_use_local)) + } + } + ) + Spacer(modifier = Modifier.height(16.dp)) + ModeCard( + icon = { Icon(Icons.Default.Cloud, contentDescription = null) }, + title = stringResource(R.string.mode_server_title), + body = stringResource(R.string.mode_server_body), + action = { + OutlinedButton(onClick = { onSelectMode(RuntimeMode.COMMORY_SERVER) }) { + Text(stringResource(R.string.mode_connect_server)) + } + } + ) + } +} + +@Composable +private fun ModeCard( + icon: @Composable () -> Unit, + title: String, + body: String, + action: @Composable () -> Unit +) { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Column(modifier = Modifier.padding(18.dp)) { + Row(verticalAlignment = Alignment.CenterVertically) { + icon() + Text( + text = title, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(start = 12.dp) + ) + } + Spacer(modifier = Modifier.height(8.dp)) + Text(text = body, style = MaterialTheme.typography.bodyMedium) + Spacer(modifier = Modifier.height(14.dp)) + action() + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/MoreScreen.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/MoreScreen.kt index a2b087f..b4c32ae 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/MoreScreen.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/MoreScreen.kt @@ -1,282 +1,310 @@ package imken.messagevault.mobile.ui.screens -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* -import androidx.compose.material3.* +import androidx.compose.material.icons.filled.Cloud +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.Language +import androidx.compose.material.icons.filled.Lock +import androidx.compose.material.icons.filled.Restore +import androidx.compose.material.icons.filled.Storage +import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.Divider +import androidx.compose.material3.FilterChip +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import imken.messagevault.mobile.BuildConfig import imken.messagevault.mobile.R +import imken.messagevault.mobile.runtime.AppEnvironment +import imken.messagevault.mobile.runtime.AppLocaleOption +import imken.messagevault.mobile.runtime.RuntimeMode +import imken.messagevault.mobile.ui.model.resolve +import imken.messagevault.mobile.ui.viewmodels.ServerAuthUiState -/** - * 更多选项屏幕 - * - * 显示应用设置、关于信息等更多选项 - * - * @param onNavigateToRestore 导航到恢复屏幕的回调 - */ @Composable fun MoreScreen( + environment: AppEnvironment, + serverAuthState: ServerAuthUiState, + onModeChange: (RuntimeMode) -> Unit, + onLocaleChange: (AppLocaleOption) -> Unit, + onSyncOnBackupChange: (Boolean) -> Unit, + onServerUrlChange: (String) -> Unit, + onCheckServer: () -> Unit, + onLogin: (String, String) -> Unit, + onRegister: (String, String, String) -> Unit, + onLogout: () -> Unit, onNavigateToRestore: () -> Unit = {} ) { Column( modifier = Modifier .fillMaxSize() - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally + .padding(16.dp) ) { - // 标题 Text( text = stringResource(id = R.string.more_tab), style = MaterialTheme.typography.headlineMedium, - modifier = Modifier.padding(bottom = 24.dp) + modifier = Modifier.padding(bottom = 16.dp) ) - - // 功能卡片 - FeaturesCard(onNavigateToRestore) - - Spacer(modifier = Modifier.height(16.dp)) - - // 设置卡片 - SettingsCard() - - Spacer(modifier = Modifier.height(16.dp)) - - // 关于信息卡片 + + QuickActionsCard(onNavigateToRestore) + Spacer(modifier = Modifier.height(12.dp)) + GeneralSettingsCard(environment, onLocaleChange) + Spacer(modifier = Modifier.height(12.dp)) + ServerSettingsCard( + environment = environment, + authState = serverAuthState, + onModeChange = onModeChange, + onSyncOnBackupChange = onSyncOnBackupChange, + onServerUrlChange = onServerUrlChange, + onCheckServer = onCheckServer, + onLogin = onLogin, + onRegister = onRegister, + onLogout = onLogout + ) + Spacer(modifier = Modifier.height(12.dp)) + PrivacyAndStorageCard() + Spacer(modifier = Modifier.height(12.dp)) AboutCard() } } -/** - * 功能卡片 - * - * 显示应用的主要功能快捷方式 - * - * @param onNavigateToRestore 导航到恢复屏幕的回调 - */ @Composable -fun FeaturesCard(onNavigateToRestore: () -> Unit) { - Card( - modifier = Modifier.fillMaxWidth() - ) { - Column( - modifier = Modifier.padding(16.dp) - ) { - Text( - text = "快速操作", - style = MaterialTheme.typography.titleMedium, - modifier = Modifier.padding(bottom = 8.dp) - ) - - // 恢复数据按钮 - FilledTonalButton( - onClick = onNavigateToRestore, - modifier = Modifier.fillMaxWidth() - ) { - Icon( - imageVector = Icons.Default.Restore, - contentDescription = null, - modifier = Modifier.padding(end = 8.dp) - ) +private fun QuickActionsCard(onNavigateToRestore: () -> Unit) { + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + SectionTitle(icon = Icons.Default.Restore, title = stringResource(R.string.quick_actions)) + Spacer(modifier = Modifier.height(8.dp)) + Button(onClick = onNavigateToRestore, modifier = Modifier.fillMaxWidth()) { Text(text = stringResource(id = R.string.restore_button)) } - + } + } +} + +@Composable +private fun GeneralSettingsCard( + environment: AppEnvironment, + onLocaleChange: (AppLocaleOption) -> Unit +) { + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + SectionTitle(icon = Icons.Default.Language, title = stringResource(R.string.general_settings)) Spacer(modifier = Modifier.height(8.dp)) - - // 导出数据按钮 - OutlinedButton( - onClick = { /* TODO 导出功能 */ }, - modifier = Modifier.fillMaxWidth() - ) { - Icon( - imageVector = Icons.Default.FileDownload, - contentDescription = null, - modifier = Modifier.padding(end = 8.dp) - ) - Text(text = "导出数据") + Text(text = stringResource(R.string.language_settings), style = MaterialTheme.typography.titleMedium) + Row(modifier = Modifier.fillMaxWidth()) { + LocaleChip(AppLocaleOption.SYSTEM, environment.locale, onLocaleChange, R.string.language_system) + LocaleChip(AppLocaleOption.ZH_CN, environment.locale, onLocaleChange, R.string.language_zh) + LocaleChip(AppLocaleOption.EN, environment.locale, onLocaleChange, R.string.language_en) } } } } -/** - * 设置选项卡片 - */ @Composable -fun SettingsCard() { - Card( - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 16.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant - ) - ) { - Column( - modifier = Modifier.padding(16.dp) - ) { - Text( - text = "应用设置", - style = MaterialTheme.typography.titleLarge - ) - - Spacer(modifier = Modifier.height(16.dp)) - - // 语言设置 - SettingItem( - icon = { Icon(Icons.Default.Language, contentDescription = null) }, - title = "语言设置", - subtitle = "选择应用显示语言", - onClick = { /* TODO */ } - ) - - Divider(modifier = Modifier.padding(vertical = 8.dp)) - - // 存储设置 - SettingItem( - icon = { Icon(Icons.Default.Storage, contentDescription = null) }, - title = "存储设置", - subtitle = "管理备份文件和存储位置", - onClick = { /* TODO */ } - ) - - Divider(modifier = Modifier.padding(vertical = 8.dp)) - - // 网络设置 - SettingItem( - icon = { Icon(Icons.Default.Cloud, contentDescription = null) }, - title = "网络设置", - subtitle = "配置服务器地址和连接选项", - onClick = { /* TODO */ } - ) +private fun LocaleChip( + option: AppLocaleOption, + selected: AppLocaleOption, + onLocaleChange: (AppLocaleOption) -> Unit, + labelRes: Int +) { + FilterChip( + selected = selected == option, + onClick = { onLocaleChange(option) }, + label = { Text(stringResource(labelRes)) }, + modifier = Modifier.padding(end = 8.dp) + ) +} + +@Composable +private fun ServerSettingsCard( + environment: AppEnvironment, + authState: ServerAuthUiState, + onModeChange: (RuntimeMode) -> Unit, + onSyncOnBackupChange: (Boolean) -> Unit, + onServerUrlChange: (String) -> Unit, + onCheckServer: () -> Unit, + onLogin: (String, String) -> Unit, + onRegister: (String, String, String) -> Unit, + onLogout: () -> Unit +) { + var serverUrl by remember(environment.serverUrl) { mutableStateOf(environment.serverUrl) } + var userName by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var registering by remember { mutableStateOf(false) } + val message = authState.message.resolve() + + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + SectionTitle(icon = Icons.Default.Cloud, title = stringResource(R.string.server_settings)) + Spacer(modifier = Modifier.height(8.dp)) + Row { + FilterChip( + selected = environment.mode == RuntimeMode.LOCAL_ONLY, + onClick = { onModeChange(RuntimeMode.LOCAL_ONLY) }, + label = { Text(stringResource(R.string.mode_local_title)) }, + modifier = Modifier.padding(end = 8.dp) + ) + FilterChip( + selected = environment.mode == RuntimeMode.COMMORY_SERVER, + onClick = { onModeChange(RuntimeMode.COMMORY_SERVER) }, + label = { Text(stringResource(R.string.mode_server_title)) } + ) + } + + if (environment.mode == RuntimeMode.COMMORY_SERVER) { + Spacer(modifier = Modifier.height(12.dp)) + OutlinedTextField( + value = serverUrl, + onValueChange = { + serverUrl = it + onServerUrlChange(it) + }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.server_url)) }, + singleLine = true + ) + Spacer(modifier = Modifier.height(8.dp)) + Row { + OutlinedButton(onClick = onCheckServer, enabled = !authState.busy) { + Text(stringResource(R.string.check_server)) + } + TextButton(onClick = { onSyncOnBackupChange(!environment.syncOnBackup) }) { + Text( + if (environment.syncOnBackup) stringResource(R.string.sync_enabled) + else stringResource(R.string.sync_disabled) + ) + } + } + Spacer(modifier = Modifier.height(8.dp)) + Row(modifier = Modifier.fillMaxWidth()) { + Text( + text = stringResource(R.string.sync_on_backup), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.weight(1f) + ) + Switch(checked = environment.syncOnBackup, onCheckedChange = onSyncOnBackupChange) + } + Divider(modifier = Modifier.padding(vertical = 10.dp)) + if (environment.authSession.isAuthenticated) { + Text( + text = stringResource( + R.string.signed_in_as, + environment.authSession.userName ?: environment.authSession.email ?: environment.authSession.userId.orEmpty() + ), + style = MaterialTheme.typography.bodyMedium + ) + TextButton(onClick = onLogout) { + Text(stringResource(R.string.logout)) + } + } else { + Text( + text = if (registering) stringResource(R.string.create_account) else stringResource(R.string.sign_in), + style = MaterialTheme.typography.titleMedium + ) + OutlinedTextField( + value = userName, + onValueChange = { userName = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.username)) }, + singleLine = true + ) + if (registering) { + OutlinedTextField( + value = email, + onValueChange = { email = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.email)) }, + singleLine = true, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email) + ) + } + OutlinedTextField( + value = password, + onValueChange = { password = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.password)) }, + singleLine = true, + visualTransformation = PasswordVisualTransformation() + ) + Row { + Button( + onClick = { + if (registering) onRegister(userName, email, password) else onLogin(userName, password) + }, + enabled = userName.isNotBlank() && password.isNotBlank() && (!registering || email.isNotBlank()) + ) { + Text(if (registering) stringResource(R.string.register) else stringResource(R.string.login)) + } + TextButton(onClick = { registering = !registering }) { + Text(if (registering) stringResource(R.string.have_account) else stringResource(R.string.need_account)) + } + } + } + if (!message.isNullOrBlank()) { + Text(text = message, style = MaterialTheme.typography.bodyMedium) + } + } } } } -/** - * 关于卡片 - */ @Composable -fun AboutCard() { - Card( - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 16.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant - ) - ) { - Column( - modifier = Modifier.padding(16.dp) - ) { - Text( - text = "关于", - style = MaterialTheme.typography.titleLarge - ) - - Spacer(modifier = Modifier.height(16.dp)) - - AboutItem( - title = "应用名称", - value = stringResource(id = R.string.app_name) - ) - - AboutItem( - title = "版本", - value = BuildConfig.VERSION_NAME - ) - - AboutItem( - title = "开发者", - value = "MessageVault Team" - ) - - Spacer(modifier = Modifier.height(16.dp)) - - Text( - text = "信驿云储是一款开源的短信和通话记录备份工具,支持本地备份和云端同步。保护您的重要通信数据,随时随地访问。", - style = MaterialTheme.typography.bodyMedium - ) +private fun PrivacyAndStorageCard() { + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + SectionTitle(icon = Icons.Default.Lock, title = stringResource(R.string.privacy_permissions)) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = stringResource(R.string.backup_permissions_summary), style = MaterialTheme.typography.bodyMedium) + Spacer(modifier = Modifier.height(6.dp)) + SectionTitle(icon = Icons.Default.Storage, title = stringResource(R.string.storage_settings)) + Text(text = stringResource(R.string.storage_summary), style = MaterialTheme.typography.bodyMedium) } } } -/** - * 设置项 - */ @Composable -fun SettingItem( - icon: @Composable () -> Unit, - title: String, - subtitle: String, - onClick: () -> Unit -) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Box( - modifier = Modifier - .size(40.dp) - .padding(end = 16.dp), - contentAlignment = Alignment.Center - ) { - icon() - } - - Column( - modifier = Modifier.weight(1f) - ) { - Text( - text = title, - style = MaterialTheme.typography.titleMedium - ) - - Text( - text = subtitle, - style = MaterialTheme.typography.bodyMedium - ) - } - - IconButton(onClick = onClick) { - Icon( - imageVector = Icons.Default.ChevronRight, - contentDescription = "打开" - ) +private fun AboutCard() { + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + SectionTitle(icon = Icons.Default.Info, title = stringResource(R.string.about)) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = stringResource(R.string.app_name), style = MaterialTheme.typography.titleMedium) + Text(text = stringResource(R.string.version_format, BuildConfig.VERSION_NAME)) + Text(text = stringResource(R.string.app_about_body), style = MaterialTheme.typography.bodyMedium) } } } -/** - * 关于项 - */ @Composable -fun AboutItem( - title: String, - value: String +private fun SectionTitle( + icon: androidx.compose.ui.graphics.vector.ImageVector, + title: String ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = title, - style = MaterialTheme.typography.titleSmall, - modifier = Modifier.width(100.dp) - ) - - Text( - text = value, - style = MaterialTheme.typography.bodyMedium - ) + Row { + androidx.compose.material3.Icon(icon, contentDescription = null, modifier = Modifier.padding(end = 8.dp)) + Text(text = title, style = MaterialTheme.typography.titleLarge) } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ServerSetupScreen.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ServerSetupScreen.kt new file mode 100644 index 0000000..8754553 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/screens/ServerSetupScreen.kt @@ -0,0 +1,147 @@ +package imken.messagevault.mobile.ui.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.unit.dp +import imken.messagevault.mobile.R +import imken.messagevault.mobile.runtime.AppEnvironment +import imken.messagevault.mobile.ui.model.resolve +import imken.messagevault.mobile.ui.viewmodels.ServerAuthUiState + +@Composable +fun ServerSetupScreen( + environment: AppEnvironment, + authState: ServerAuthUiState, + onServerUrlChange: (String) -> Unit, + onCheckServer: () -> Unit, + onLogin: (String, String) -> Unit, + onRegister: (String, String, String) -> Unit, + onUseLocal: () -> Unit +) { + var serverUrl by remember(environment.serverUrl) { mutableStateOf(environment.serverUrl) } + var userName by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var registering by remember { mutableStateOf(false) } + val message = authState.message.resolve() + + Column( + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + Text(text = stringResource(R.string.server_setup_title), style = MaterialTheme.typography.headlineMedium) + Spacer(modifier = Modifier.height(8.dp)) + Text(text = stringResource(R.string.server_setup_body), style = MaterialTheme.typography.bodyMedium) + Spacer(modifier = Modifier.height(20.dp)) + + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + OutlinedTextField( + value = serverUrl, + onValueChange = { + serverUrl = it + onServerUrlChange(it) + }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.server_url)) }, + singleLine = true + ) + Spacer(modifier = Modifier.height(12.dp)) + OutlinedButton( + onClick = onCheckServer, + enabled = !authState.busy + ) { + Text(stringResource(R.string.check_server)) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Card(modifier = Modifier.fillMaxWidth()) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = if (registering) stringResource(R.string.create_account) else stringResource(R.string.sign_in), + style = MaterialTheme.typography.titleLarge + ) + Spacer(modifier = Modifier.height(10.dp)) + OutlinedTextField( + value = userName, + onValueChange = { userName = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.username)) }, + singleLine = true + ) + if (registering) { + Spacer(modifier = Modifier.height(8.dp)) + OutlinedTextField( + value = email, + onValueChange = { email = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.email)) }, + singleLine = true, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email) + ) + } + Spacer(modifier = Modifier.height(8.dp)) + OutlinedTextField( + value = password, + onValueChange = { password = it }, + modifier = Modifier.fillMaxWidth(), + label = { Text(stringResource(R.string.password)) }, + singleLine = true, + visualTransformation = PasswordVisualTransformation() + ) + Spacer(modifier = Modifier.height(12.dp)) + Row { + Button( + onClick = { + if (registering) onRegister(userName, email, password) else onLogin(userName, password) + }, + enabled = !authState.busy && userName.isNotBlank() && password.isNotBlank() && (!registering || email.isNotBlank()) + ) { + if (authState.busy) { + CircularProgressIndicator(modifier = Modifier.padding(end = 8.dp), strokeWidth = 2.dp) + } + Text(if (registering) stringResource(R.string.register) else stringResource(R.string.login)) + } + TextButton(onClick = { registering = !registering }) { + Text(if (registering) stringResource(R.string.have_account) else stringResource(R.string.need_account)) + } + } + if (!message.isNullOrBlank()) { + Spacer(modifier = Modifier.height(8.dp)) + Text(text = message, style = MaterialTheme.typography.bodyMedium) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + TextButton(onClick = onUseLocal) { + Text(stringResource(R.string.mode_use_local)) + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/AppViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/AppViewModel.kt new file mode 100644 index 0000000..00c5e67 --- /dev/null +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/AppViewModel.kt @@ -0,0 +1,137 @@ +package imken.messagevault.mobile.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewModelScope +import imken.messagevault.mobile.R +import imken.messagevault.mobile.di.AppContainer +import imken.messagevault.mobile.remote.CommoryServerClient +import imken.messagevault.mobile.runtime.AppEnvironment +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.mobile.runtime.AppLocaleOption +import imken.messagevault.mobile.runtime.AuthSession +import imken.messagevault.mobile.runtime.RuntimeMode +import imken.messagevault.mobile.ui.model.UiText +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch + +data class ServerAuthUiState( + val busy: Boolean = false, + val message: UiText? = null, + val serverHealthy: Boolean = false +) + +class AppViewModel( + private val environmentManager: AppEnvironmentManager, + private val serverClient: CommoryServerClient +) : ViewModel() { + val environment: StateFlow = environmentManager.environment.stateIn( + scope = viewModelScope, + started = SharingStarted.Eagerly, + initialValue = environmentManager.currentSnapshot() + ) + + private val _serverAuthState = MutableStateFlow(ServerAuthUiState()) + val serverAuthState: StateFlow = _serverAuthState.asStateFlow() + + fun selectMode(mode: RuntimeMode) { + viewModelScope.launch { + environmentManager.selectMode(mode) + if (mode == RuntimeMode.LOCAL_ONLY) { + environmentManager.clearSession() + } + } + } + + fun updateServerUrl(serverUrl: String) { + viewModelScope.launch { + environmentManager.updateServerUrl(serverUrl) + _serverAuthState.value = _serverAuthState.value.copy(serverHealthy = false, message = null) + } + } + + fun updateLocale(locale: AppLocaleOption) { + viewModelScope.launch { + environmentManager.updateLocale(locale) + } + } + + fun updateSyncOnBackup(enabled: Boolean) { + viewModelScope.launch { + environmentManager.updateSyncOnBackup(enabled) + } + } + + fun checkServer(baseUrl: String = environment.value.serverUrl) { + viewModelScope.launch { + _serverAuthState.value = ServerAuthUiState(busy = true) + val result = serverClient.checkSetup(baseUrl) + _serverAuthState.value = if (result.isSuccess) { + ServerAuthUiState( + serverHealthy = true, + message = UiText.Resource(R.string.server_check_success) + ) + } else { + ServerAuthUiState( + serverHealthy = false, + message = UiText.Resource(R.string.server_check_failed, listOf(result.exceptionOrNull()?.message.orEmpty())) + ) + } + } + } + + fun login(userName: String, password: String) { + viewModelScope.launch { + _serverAuthState.value = _serverAuthState.value.copy(busy = true, message = null) + val env = environment.value + val result = serverClient.login(env.serverUrl, userName, password) + persistAuthResult(result) + } + } + + fun register(userName: String, email: String, password: String) { + viewModelScope.launch { + _serverAuthState.value = _serverAuthState.value.copy(busy = true, message = null) + val env = environment.value + val result = serverClient.register(env.serverUrl, userName, email, password) + persistAuthResult(result) + } + } + + fun logout() { + viewModelScope.launch { + environmentManager.clearSession() + _serverAuthState.value = ServerAuthUiState(message = UiText.Resource(R.string.logged_out)) + } + } + + private suspend fun persistAuthResult(result: Result) { + if (result.isSuccess) { + val session = result.getOrThrow() + environmentManager.updateSession(session) + _serverAuthState.value = ServerAuthUiState( + serverHealthy = true, + message = UiText.Resource(R.string.auth_success) + ) + } else { + _serverAuthState.value = ServerAuthUiState( + busy = false, + message = UiText.Resource(R.string.auth_failed, listOf(result.exceptionOrNull()?.message.orEmpty())) + ) + } + } + + class Factory(private val container: AppContainer) : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(AppViewModel::class.java)) { + return AppViewModel(container.environmentManager, container.serverClient) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } + } +} diff --git a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt index e47d0fa..f6a724d 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/ui/viewmodels/BackupViewModel.kt @@ -3,11 +3,11 @@ package imken.messagevault.mobile.ui.viewmodels import android.content.Context import android.os.Build import android.provider.Settings -import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import imken.messagevault.mobile.R import imken.messagevault.mobile.data.backup.AndroidBackupFileReader import imken.messagevault.mobile.data.backup.AndroidBackupFileWriter import imken.messagevault.mobile.data.backup.AndroidCallLogReader @@ -17,6 +17,11 @@ import imken.messagevault.mobile.data.backup.AndroidContactWriter import imken.messagevault.mobile.data.backup.AndroidSmsReader import imken.messagevault.mobile.data.backup.AndroidSmsWriter import imken.messagevault.mobile.BuildConfig +import imken.messagevault.mobile.di.AppContainer +import imken.messagevault.mobile.remote.CommoryServerClient +import imken.messagevault.mobile.runtime.AppEnvironmentManager +import imken.messagevault.mobile.runtime.RuntimeModePolicy +import imken.messagevault.mobile.ui.model.UiText import imken.messagevault.sdk.backup.BackupManager import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers @@ -29,6 +34,8 @@ import timber.log.Timber class BackupViewModel( private val backupManager: BackupManager, private val deviceIdProvider: () -> String, + private val environmentManager: AppEnvironmentManager? = null, + private val serverClient: CommoryServerClient? = null, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) : ViewModel() { @@ -38,11 +45,11 @@ class BackupViewModel( private val _isOperating = mutableStateOf(false) - private val _backupStatus = mutableStateOf(null) + private val _backupStatus = mutableStateOf(null) fun getPermissionsGranted(): Boolean = _permissionsGranted.value fun isOperating(): Boolean = _isOperating.value - fun getBackupStatus(): String? = _backupStatus.value + fun getBackupStatus(): UiText? = _backupStatus.value fun setPermissionsGranted(granted: Boolean) { _permissionsGranted.value = granted @@ -50,7 +57,7 @@ class BackupViewModel( fun startBackup() { if (!_permissionsGranted.value) { - _backupStatus.value = "权限不足,无法执行备份" + _backupStatus.value = UiText.Resource(R.string.backup_error_permissions) return } @@ -60,11 +67,12 @@ class BackupViewModel( } _isOperating.value = true - _backupStatus.value = "正在准备备份..." + _backupStatus.value = UiText.Resource(R.string.backup_status_preparing) viewModelScope.launch(dispatcher) { try { val deviceInfo = "${Build.MANUFACTURER} ${Build.MODEL}" + val environment = environmentManager?.currentSnapshot() val result = backupManager.performBackup( hasSmsPermission = true, hasCallLogPermission = true, @@ -74,13 +82,45 @@ class BackupViewModel( appVersion = BuildConfig.VERSION_NAME ) if (result.success) { - _backupStatus.value = "备份完成: ${result.smsCount} 条短信, ${result.callLogCount} 条通话记录" + var remoteUploaded = false + val accessToken = environment?.authSession?.accessToken + val filePath = result.filePath + if (environment != null && + RuntimeModePolicy.canUploadBackup(environment) && + accessToken != null && + filePath != null && + serverClient != null + ) { + _backupStatus.value = UiText.Resource(R.string.backup_status_uploading) + remoteUploaded = serverClient.uploadImport( + baseUrl = environment.serverUrl, + accessToken = accessToken, + file = java.io.File(filePath) + ).isSuccess + } + _backupStatus.value = if (remoteUploaded) { + UiText.Resource( + R.string.backup_success_remote, + listOf(result.smsCount, result.callLogCount) + ) + } else { + UiText.Resource( + R.string.backup_success_local, + listOf(result.smsCount, result.callLogCount) + ) + } } else { - _backupStatus.value = "备份失败: ${result.errorMessage}" + _backupStatus.value = UiText.Resource( + R.string.backup_failed_with_reason, + listOf(result.errorMessage.orEmpty()) + ) } } catch (e: Exception) { Timber.e(e, "[Mobile] ERROR [Backup] 备份失败") - _backupStatus.value = "备份失败: ${e.message}" + _backupStatus.value = UiText.Resource( + R.string.backup_failed_with_reason, + listOf(e.message.orEmpty()) + ) } finally { _isOperating.value = false } @@ -114,4 +154,27 @@ class BackupViewModel( throw IllegalArgumentException("Unknown ViewModel class") } } + + class ContainerFactory( + private val context: Context, + private val container: AppContainer + ) : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(BackupViewModel::class.java)) { + return BackupViewModel( + backupManager = container.createBackupManager(), + deviceIdProvider = { + Settings.Secure.getString( + context.contentResolver, + Settings.Secure.ANDROID_ID + ) ?: "unknown-device" + }, + environmentManager = container.environmentManager, + serverClient = container.serverClient + ) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } + } } diff --git a/android/app/src/main/java/imken/messagevault/mobile/utils/PermissionUtils.kt b/android/app/src/main/java/imken/messagevault/mobile/utils/PermissionUtils.kt index d032bdc..122174f 100644 --- a/android/app/src/main/java/imken/messagevault/mobile/utils/PermissionUtils.kt +++ b/android/app/src/main/java/imken/messagevault/mobile/utils/PermissionUtils.kt @@ -18,8 +18,13 @@ import timber.log.Timber */ object PermissionUtils { - // 应用所需的基本权限列表 - private val BASIC_PERMISSIONS = arrayOf( + val BACKUP_PERMISSIONS = arrayOf( + Manifest.permission.READ_SMS, + Manifest.permission.READ_CALL_LOG, + Manifest.permission.READ_CONTACTS + ) + + val RESTORE_PERMISSIONS = arrayOf( Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS, @@ -28,6 +33,9 @@ object PermissionUtils { Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS ) + + // 应用所需的基本权限列表 + private val BASIC_PERMISSIONS = BACKUP_PERMISSIONS // Android 11+上需要特殊处理的权限 private val ANDROID_11_SPECIAL_PERMISSIONS = arrayOf( @@ -59,6 +67,18 @@ object PermissionUtils { context.checkSelfPermission(it) != PackageManager.PERMISSION_GRANTED } } + + fun checkBackupPermissions(context: Context): Boolean { + return BACKUP_PERMISSIONS.all { + context.checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED + } + } + + fun checkRestorePermissions(context: Context): Boolean { + return RESTORE_PERMISSIONS.all { + context.checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED + } + } /** * 检查当前应用是否为默认短信应用 @@ -174,4 +194,4 @@ object PermissionUtils { } } } -} \ No newline at end of file +} diff --git a/android/app/src/main/res/values-en/strings.xml b/android/app/src/main/res/values-en/strings.xml index fcd7c9a..2cf8998 100644 --- a/android/app/src/main/res/values-en/strings.xml +++ b/android/app/src/main/res/values-en/strings.xml @@ -7,19 +7,96 @@ Restore Data Permissions Required MessageVault needs access to SMS and call log permissions to work properly. Please grant these permissions in settings. + OK Settings Backup and restore your SMS and call logs + Choose a run mode + MessageVault can run fully on-device or connect to a self-hosted Commory server for sync and search. + Local Only + Backup files stay on this device. No account is required, and the app works offline. + Commory Server + Connect to a self-hosted Commory server for accounts, remote import history, uploads, and cross-device access. + Use local mode + Connect server + Connect Commory Server + Enter your server URL and sign in. The app still creates a local backup first, then uploads when sync is enabled. + Server URL + Check server + Server connection is healthy + Server check failed: %1$s + Sign in + Create account + Username + Email + Password + Log in + Register + I have an account + Need an account + Connected to Commory Server + Authentication failed: %1$s + Signed out + Signed in as %1$s + Log out + General + Language + System + 中文 + English + Server Settings + Upload after backup + Sync enabled + Sync disabled + Quick Actions + Privacy & Permissions + Backup only needs read access to SMS, call logs, and contacts. SMS restore asks to become the default SMS app only when needed. + Storage + Local backups are stored in the app-specific external files backups folder. + About + Version: %1$s + An open-source tool for communication backup, restore, and self-hosted retrieval. + Data Backup + About Backup + Read SMS + Exports SMS body, time, direction, and thread metadata. + Read call logs + Exports call numbers, types, timestamps, and duration. + Read contacts + Adds contact context to messages and call logs. + Missing permissions. Backup cannot run. + Preparing backup… + Local backup created. Uploading to server… + Backup complete: %1$d SMS, %2$d call logs. Local file saved. + Backup complete: %1$d SMS, %2$d call logs. Local file saved and uploaded. + Backup failed: %1$s + Permissions granted. You can continue. + Grant permissions manually in settings. + These permissions are needed to back up and restore your SMS, call logs, and contacts. Ready to backup + Backup successful + Backup data includes SMS, call logs, and contacts when permissions are granted. + yyyy-MM-dd HH:mm + SMS: %1$d + Call logs: %1$d Backup successful Backup failed Restore successful Restore failed + Restore + Restore backup + Restore successful + Restore backup? + This will restore data from the selected backup file. + Failed to load backup files + Failed to restore backup + No backup files found + Cancel Backup Restore Preview More - \ No newline at end of file + diff --git a/android/app/src/main/res/values-zh-rCN/strings.xml b/android/app/src/main/res/values-zh-rCN/strings.xml index 1b01478..b9bc3a3 100644 --- a/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/android/app/src/main/res/values-zh-rCN/strings.xml @@ -7,19 +7,96 @@ 恢复数据 需要权限 信驿云储需要访问短信和通话记录权限才能正常工作。请在设置中授予这些权限。 + 确定 设置 备份和恢复您的短信与通话记录 + 选择运行模式 + 信驿云储可以完全本地运行,也可以连接 Commory 服务端同步和检索备份。 + 仅本地 + 备份文件只保存在本机。无需账号,离线可用,适合隐私优先场景。 + Commory 服务端 + 连接自托管 Commory 服务端,支持账号、远程导入列表、上传和跨设备访问。 + 使用本地模式 + 连接服务端 + 连接 Commory 服务端 + 输入服务端地址并登录账号。应用仍会先创建本地备份,再按设置上传到服务端。 + 服务端地址 + 检查连接 + 服务端连接正常 + 服务端连接失败:%1$s + 登录 + 创建账号 + 用户名 + 邮箱 + 密码 + 登录 + 注册 + 已有账号 + 需要账号 + 已连接到 Commory 服务端 + 认证失败:%1$s + 已退出登录 + 已登录:%1$s + 退出登录 + 通用设置 + 语言 + 跟随系统 + 中文 + English + 服务端设置 + 备份后自动上传 + 同步开启 + 同步关闭 + 快速操作 + 隐私与权限 + 备份只需要读取短信、通话记录和联系人。恢复短信时才需要临时成为默认短信应用。 + 存储设置 + 本地备份保存在应用专属外部文件目录的 backups 文件夹中。 + 关于 + 版本:%1$s + 开源的通信数据备份、恢复和自托管检索工具。 + 数据备份 + 关于备份 + 读取短信 + 用于导出短信正文、时间、方向和线程信息。 + 读取通话记录 + 用于导出通话号码、类型、时间和持续时长。 + 读取联系人 + 用于给消息和通话记录补充联系人上下文。 + 权限不足,无法执行备份。 + 正在准备备份… + 本地备份已创建,正在上传到服务端… + 备份完成:%1$d 条短信,%2$d 条通话记录。本地文件已保存。 + 备份完成:%1$d 条短信,%2$d 条通话记录。本地文件已保存并上传。 + 备份失败:%1$s + 权限已授予,可以继续操作。 + 请在设置中手动授予权限。 + 需要这些权限才能备份和恢复您的短信、通话记录和联系人。 准备备份 + 备份成功 + 在授予权限后,备份会包含短信、通话记录和联系人。 + yyyy-MM-dd HH:mm + 短信:%1$d + 通话记录:%1$d 备份成功 备份失败 恢复成功 恢复失败 + 恢复 + 恢复备份 + 恢复成功 + 恢复备份? + 这会从选中的备份文件恢复数据。 + 加载备份文件失败 + 恢复备份失败 + 未找到备份文件 + 取消 备份 恢复 预览 更多 - \ No newline at end of file + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index fa565a6..2e1db94 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -9,6 +9,68 @@ 需要权限 信驿云储需要访问短信和通话记录权限才能正常工作。请在设置中授予这些权限。 设置 + 选择运行模式 + 信驿云储可以完全本地运行,也可以连接 Commory 服务端同步和检索备份。 + 仅本地 + 备份文件只保存在本机。无需账号,离线可用,适合隐私优先场景。 + Commory 服务端 + 连接自托管 Commory 服务端,支持账号、远程导入列表、上传和跨设备访问。 + 使用本地模式 + 连接服务端 + 连接 Commory 服务端 + 输入服务端地址并登录账号。应用仍会先创建本地备份,再按设置上传到服务端。 + 服务端地址 + 检查连接 + 服务端连接正常 + 服务端连接失败:%1$s + 登录 + 创建账号 + 用户名 + 邮箱 + 密码 + 登录 + 注册 + 已有账号 + 需要账号 + 已连接到 Commory 服务端 + 认证失败:%1$s + 已退出登录 + 已登录:%1$s + 退出登录 + 通用设置 + 语言 + 跟随系统 + 中文 + English + 服务端设置 + 备份后自动上传 + 同步开启 + 同步关闭 + 快速操作 + 隐私与权限 + 备份只需要读取短信、通话记录和联系人。恢复短信时才需要临时成为默认短信应用。 + 存储设置 + 本地备份保存在应用专属外部文件目录的 backups 文件夹中。 + 关于 + 版本:%1$s + 开源的通信数据备份、恢复和自托管检索工具。 + 数据备份 + 关于备份 + 读取短信 + 用于导出短信正文、时间、方向和线程信息。 + 读取通话记录 + 用于导出通话号码、类型、时间和持续时长。 + 读取联系人 + 用于给消息和通话记录补充联系人上下文。 + 权限不足,无法执行备份。 + 正在准备备份… + 本地备份已创建,正在上传到服务端… + 备份完成:%1$d 条短信,%2$d 条通话记录。本地文件已保存。 + 备份完成:%1$d 条短信,%2$d 条通话记录。本地文件已保存并上传。 + 备份失败:%1$s + 权限已授予,可以继续操作。 + 请在设置中手动授予权限。 + 需要这些权限才能备份和恢复您的短信、通话记录和联系人。 等待开始备份... diff --git a/android/app/src/test/java/imken/messagevault/mobile/agent/AgentPrivacyPolicyTest.kt b/android/app/src/test/java/imken/messagevault/mobile/agent/AgentPrivacyPolicyTest.kt new file mode 100644 index 0000000..5b8a38f --- /dev/null +++ b/android/app/src/test/java/imken/messagevault/mobile/agent/AgentPrivacyPolicyTest.kt @@ -0,0 +1,21 @@ +package imken.messagevault.mobile.agent + +import imken.messagevault.mobile.runtime.RuntimeMode +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class AgentPrivacyPolicyTest { + @Test + fun localModeKeepsAgentContextLocal() { + assertEquals(AgentProviderPolicy.LOCAL_ONLY, AgentPrivacyPolicy.policyFor(RuntimeMode.LOCAL_ONLY)) + assertEquals(AgentProviderPolicy.SERVER_ALLOWED, AgentPrivacyPolicy.policyFor(RuntimeMode.COMMORY_SERVER)) + } + + @Test + fun previewsAreTrimmedBeforeProviderUse() { + val preview = AgentPrivacyPolicy.trimPreview("abcdef", maxChars = 3) + assertEquals("abc", preview) + assertTrue(preview.length <= 3) + } +} diff --git a/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt b/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt index 5088700..78159ac 100644 --- a/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt +++ b/android/app/src/test/java/imken/messagevault/mobile/data/BackupManagerTest.kt @@ -18,7 +18,8 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyString -import org.mockito.ArgumentMatchers.isNull +import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations @@ -52,11 +53,8 @@ class BackupManagerTest { MockitoAnnotations.openMocks(this) setupTestLogger() - `when`(mockContext.contentResolver).thenReturn(mockResolver) - `when`(mockContext.checkSelfPermission(anyString())).thenReturn(android.content.pm.PackageManager.PERMISSION_GRANTED) - - smsReader = AndroidSmsReader(mockContext) - callLogReader = AndroidCallLogReader(mockContext) + smsReader = AndroidSmsReader(mockContext, mockResolver) { true } + callLogReader = AndroidCallLogReader(mockContext, mockResolver) { true } Timber.i("[Mobile] INFO [Test] 开始测试BackupManager; Context: Unit test initialization") } @@ -79,9 +77,9 @@ class BackupManagerTest { val mockSmsCursor = createMockSmsCursor() `when`(mockResolver.query( eq(Telephony.Sms.CONTENT_URI), - isNull(), - isNull(), - isNull(), + any>(), + any(), + any(), anyString() )).thenReturn(mockSmsCursor) @@ -101,9 +99,9 @@ class BackupManagerTest { val mockCallLogCursor = createMockCallLogCursor() `when`(mockResolver.query( eq(Calls.CONTENT_URI), - isNull(), - isNull(), - isNull(), + any>(), + anyString(), + any>(), anyString() )).thenReturn(mockCallLogCursor) diff --git a/android/app/src/test/java/imken/messagevault/mobile/runtime/RuntimeModePolicyTest.kt b/android/app/src/test/java/imken/messagevault/mobile/runtime/RuntimeModePolicyTest.kt new file mode 100644 index 0000000..1900252 --- /dev/null +++ b/android/app/src/test/java/imken/messagevault/mobile/runtime/RuntimeModePolicyTest.kt @@ -0,0 +1,38 @@ +package imken.messagevault.mobile.runtime + +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class RuntimeModePolicyTest { + @Test + fun serverModeRequiresAuthUntilSessionExists() { + val anonymous = AppEnvironment( + mode = RuntimeMode.COMMORY_SERVER, + modeSelected = true + ) + assertTrue(RuntimeModePolicy.requiresServerAuth(anonymous)) + + val authenticated = anonymous.copy( + authSession = AuthSession(accessToken = "access", refreshToken = "refresh", userId = "user") + ) + assertFalse(RuntimeModePolicy.requiresServerAuth(authenticated)) + } + + @Test + fun uploadRequiresServerModeSyncAndAuth() { + val local = AppEnvironment( + mode = RuntimeMode.LOCAL_ONLY, + modeSelected = true, + syncOnBackup = true, + authSession = AuthSession(accessToken = "access") + ) + assertFalse(RuntimeModePolicy.canUploadBackup(local)) + + val serverNoSync = local.copy(mode = RuntimeMode.COMMORY_SERVER, syncOnBackup = false) + assertFalse(RuntimeModePolicy.canUploadBackup(serverNoSync)) + + val serverSync = serverNoSync.copy(syncOnBackup = true) + assertTrue(RuntimeModePolicy.canUploadBackup(serverSync)) + } +} diff --git a/backend/data/commory-store.json b/backend/data/commory-store.json deleted file mode 100644 index 8211efb..0000000 --- a/backend/data/commory-store.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "users": { - "user_f1fb3d28941df6c2": { - "id": "user_f1fb3d28941df6c2", - "user_name": "codextest", - "email": "codextest@example.com", - "password_hash": "aa6dfe9af835489316295f5a462802b4c2d7ae7ada8bd7e35be357906161f459", - "password_salt": "2d519ab95cbc8adfc5030018c66e5d1a", - "roles": [ - "R_ADMIN", - "R_USER" - ], - "buttons": [ - "view", - "import", - "admin" - ], - "created_at": "2026-05-14T13:47:29.452506Z", - "updated_at": "2026-05-14T13:47:29.452506Z" - } - }, - "refresh_tokens": { - "refresh_4ccd902cc97a3955": { - "id": "refresh_4ccd902cc97a3955", - "user_id": "user_f1fb3d28941df6c2", - "token_hash": "911096c7e4d75dcbcc7a4c3aa6a2359ec452245ba6877aef9535a7c4ed4afe8c", - "expires_at": "2026-05-22T06:12:09.495985Z", - "created_at": "2026-05-15T06:12:09.495985Z", - "revoked_at": "0001-01-01T00:00:00Z" - }, - "refresh_b53c202aa00443b0": { - "id": "refresh_b53c202aa00443b0", - "user_id": "user_f1fb3d28941df6c2", - "token_hash": "a1d246d7f2811b1fff4e5260538e2da945dfaded273c0cb78ec7fbbfc42324c2", - "expires_at": "2026-05-21T16:56:09.114195Z", - "created_at": "2026-05-14T16:56:09.114195Z", - "revoked_at": "2026-05-15T06:12:09.490908Z" - }, - "refresh_b94f4de6e84aaf37": { - "id": "refresh_b94f4de6e84aaf37", - "user_id": "user_f1fb3d28941df6c2", - "token_hash": "e18cce180af79654de9b98faa9305cab4e06a7dd1b6af423183db1d48ecccb36", - "expires_at": "2026-05-21T13:47:29.453101Z", - "created_at": "2026-05-14T13:47:29.453101Z", - "revoked_at": "2026-05-14T16:56:09.106114Z" - } - }, - "imports": { - "import_1778758632278756000": { - "id": "import_1778758632278756000", - "user_id": "", - "schema_version": "msglayer/v0.1", - "imported_at": "2026-05-14T11:37:12Z", - "source_path": "../msglayer/examples/export.sms-call.json", - "raw_json": "{\n \"version\": \"msglayer/v0.1\",\n \"exported_at\": \"2026-01-01T12:00:00Z\",\n \"source\": {\n \"platform\": \"android\",\n \"device_id\": \"device_001\",\n \"app_version\": \"0.1.4\"\n },\n \"identities\": [\n {\n \"id\": \"self/device_001\",\n \"type\": \"device\",\n \"display_name\": \"Pixel Demo\",\n \"phones\": [],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"self\"\n ],\n \"meta\": {\n \"source\": \"system\"\n }\n },\n {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n ],\n \"events\": [\n {\n \"id\": \"contact_snapshot_person_zhangsan\",\n \"type\": \"contact_snapshot\",\n \"timestamp\": \"2026-01-01T12:00:00Z\",\n \"direction\": \"system\",\n \"participants\": [\n \"person_zhangsan\"\n ],\n \"content\": {\n \"identity_id\": \"person_zhangsan\",\n \"snapshot\": {\n \"id\": \"person_zhangsan\",\n \"type\": \"person\",\n \"display_name\": \"张三\",\n \"phones\": [\n \"+8613800000000\"\n ],\n \"emails\": [],\n \"avatar\": null,\n \"labels\": [\n \"contact\"\n ],\n \"meta\": {\n \"source\": \"contacts\"\n }\n }\n },\n \"meta\": {\n \"source\": \"contacts\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n },\n {\n \"id\": \"sms_101\",\n \"type\": \"sms\",\n \"timestamp\": \"2025-12-01T10:00:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"text\": \"你好,验证码是123456\",\n \"attachments\": []\n },\n \"meta\": {\n \"read\": true,\n \"status\": 0\n },\n \"relations\": [\n {\n \"type\": \"same_thread\",\n \"target\": \"thread_42\"\n }\n ]\n },\n {\n \"id\": \"call_202\",\n \"type\": \"call\",\n \"timestamp\": \"2025-12-01T10:05:00Z\",\n \"direction\": \"inbound\",\n \"participants\": [\n \"self/device_001\",\n \"person_zhangsan\"\n ],\n \"content\": {\n \"duration_sec\": 120,\n \"call_type\": \"incoming\",\n \"recording\": null\n },\n \"meta\": {\n \"source\": \"call_log\"\n },\n \"relations\": [\n {\n \"type\": \"references_identity\",\n \"target\": \"person_zhangsan\"\n }\n ]\n }\n ],\n \"indexes\": {\n \"timeline\": [\n \"sms_101\",\n \"call_202\"\n ]\n }\n}\n", - "event_count": 0, - "identity_count": 0 - } - }, - "identities": { - "person_zhangsan": { - "user_id": "", - "identity": { - "id": "", - "type": "", - "display_name": "", - "phones": null, - "emails": null, - "avatar": null, - "labels": null, - "meta": null - } - }, - "self/device_001": { - "user_id": "", - "identity": { - "id": "", - "type": "", - "display_name": "", - "phones": null, - "emails": null, - "avatar": null, - "labels": null, - "meta": null - } - } - }, - "events": { - "call_202": { - "user_id": "", - "import_id": "", - "item": { - "event_id": "call_202", - "type": "call", - "timestamp": "2025-12-01T10:05:00Z", - "direction": "inbound", - "content_summary": "incoming 120sec", - "participants": [ - "self/device_001", - "person_zhangsan" - ], - "meta": { - "source": "call_log" - }, - "schema_version": "msglayer/v0.1" - }, - "raw": { - "id": "call_202", - "type": "call", - "timestamp": "2025-12-01T10:05:00Z", - "direction": "inbound", - "participants": [ - "self/device_001", - "person_zhangsan" - ], - "content": { - "call_type": "incoming", - "duration_sec": 120, - "recording": null - }, - "meta": { - "source": "call_log" - }, - "relations": [ - { - "type": "references_identity", - "target": "person_zhangsan" - } - ] - } - }, - "contact_snapshot_person_zhangsan": { - "user_id": "", - "import_id": "", - "item": { - "event_id": "contact_snapshot_person_zhangsan", - "type": "contact_snapshot", - "timestamp": "2026-01-01T12:00:00Z", - "direction": "system", - "content_summary": "person_zhangsan", - "participants": [ - "person_zhangsan" - ], - "meta": { - "source": "contacts" - }, - "schema_version": "msglayer/v0.1" - }, - "raw": { - "id": "contact_snapshot_person_zhangsan", - "type": "contact_snapshot", - "timestamp": "2026-01-01T12:00:00Z", - "direction": "system", - "participants": [ - "person_zhangsan" - ], - "content": { - "identity_id": "person_zhangsan", - "snapshot": { - "avatar": null, - "display_name": "张三", - "emails": [], - "id": "person_zhangsan", - "labels": [ - "contact" - ], - "meta": { - "source": "contacts" - }, - "phones": [ - "+8613800000000" - ], - "type": "person" - } - }, - "meta": { - "source": "contacts" - }, - "relations": [ - { - "type": "references_identity", - "target": "person_zhangsan" - } - ] - } - }, - "sms_101": { - "user_id": "", - "import_id": "", - "item": { - "event_id": "sms_101", - "type": "sms", - "timestamp": "2025-12-01T10:00:00Z", - "direction": "inbound", - "content_summary": "你好,验证码是123456", - "participants": [ - "self/device_001", - "person_zhangsan" - ], - "meta": { - "read": true, - "status": 0 - }, - "schema_version": "msglayer/v0.1" - }, - "raw": { - "id": "sms_101", - "type": "sms", - "timestamp": "2025-12-01T10:00:00Z", - "direction": "inbound", - "participants": [ - "self/device_001", - "person_zhangsan" - ], - "content": { - "attachments": [], - "text": "你好,验证码是123456" - }, - "meta": { - "read": true, - "status": 0 - }, - "relations": [ - { - "type": "same_thread", - "target": "thread_42" - } - ] - } - } - } -} \ No newline at end of file diff --git a/backend/internal/api/mobile_contract_test.go b/backend/internal/api/mobile_contract_test.go new file mode 100644 index 0000000..614115c --- /dev/null +++ b/backend/internal/api/mobile_contract_test.go @@ -0,0 +1,190 @@ +package api + +import ( + "bytes" + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/IsKenKenYa/Commory/backend/internal/config" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func TestMobileAuthUploadListAndExportContract(t *testing.T) { + handler := newTestMobileHandler(t) + + token := registerMobileUser(t, handler, "mobile-user", "mobile@example.com") + raw := readFixture(t, "msglayer", "examples", "export.sms-call.json") + + uploadReq := httptest.NewRequest(http.MethodPost, "/api/imports/upload", bytes.NewReader(raw)) + uploadReq.Header.Set("Authorization", "Bearer "+token) + uploadReq.Header.Set("Content-Type", "application/json") + uploadRes := httptest.NewRecorder() + handler.ServeHTTP(uploadRes, uploadReq) + if uploadRes.Code != http.StatusCreated { + t.Fatalf("upload status = %d, body = %s", uploadRes.Code, uploadRes.Body.String()) + } + var uploadEnvelope struct { + Code int `json:"code"` + Data struct { + ImportID string `json:"import_id"` + } `json:"data"` + } + decodeJSON(t, uploadRes.Body.Bytes(), &uploadEnvelope) + if uploadEnvelope.Data.ImportID == "" { + t.Fatal("expected import_id in mobile upload response") + } + + listReq := httptest.NewRequest(http.MethodGet, "/api/imports", nil) + listReq.Header.Set("Authorization", "Bearer "+token) + listRes := httptest.NewRecorder() + handler.ServeHTTP(listRes, listReq) + if listRes.Code != http.StatusOK { + t.Fatalf("list status = %d, body = %s", listRes.Code, listRes.Body.String()) + } + var listEnvelope struct { + Code int `json:"code"` + Data []storage.ImportSummary `json:"data"` + } + decodeJSON(t, listRes.Body.Bytes(), &listEnvelope) + if len(listEnvelope.Data) != 1 { + t.Fatalf("expected one import, got %d", len(listEnvelope.Data)) + } + + exportReq := httptest.NewRequest(http.MethodGet, "/api/imports/"+uploadEnvelope.Data.ImportID+"/export", nil) + exportReq.Header.Set("Authorization", "Bearer "+token) + exportRes := httptest.NewRecorder() + handler.ServeHTTP(exportRes, exportReq) + if exportRes.Code != http.StatusOK { + t.Fatalf("export status = %d, body = %s", exportRes.Code, exportRes.Body.String()) + } + if !bytes.Contains(exportRes.Body.Bytes(), []byte(`"version"`)) { + t.Fatal("expected raw MsgLayer export body") + } +} + +func TestMobileImportExportRequiresOwningUser(t *testing.T) { + handler := newTestMobileHandler(t) + ownerToken := registerMobileUser(t, handler, "owner", "owner@example.com") + otherToken := registerMobileUser(t, handler, "other", "other@example.com") + + raw := readFixture(t, "msglayer", "examples", "export.minimal.json") + uploadReq := httptest.NewRequest(http.MethodPost, "/api/imports/upload", bytes.NewReader(raw)) + uploadReq.Header.Set("Authorization", "Bearer "+ownerToken) + uploadReq.Header.Set("Content-Type", "application/json") + uploadRes := httptest.NewRecorder() + handler.ServeHTTP(uploadRes, uploadReq) + if uploadRes.Code != http.StatusCreated { + t.Fatalf("upload status = %d, body = %s", uploadRes.Code, uploadRes.Body.String()) + } + var uploadEnvelope struct { + Data struct { + ImportID string `json:"import_id"` + } `json:"data"` + } + decodeJSON(t, uploadRes.Body.Bytes(), &uploadEnvelope) + + exportReq := httptest.NewRequest(http.MethodGet, "/api/imports/"+uploadEnvelope.Data.ImportID+"/export", nil) + exportReq.Header.Set("Authorization", "Bearer "+otherToken) + exportRes := httptest.NewRecorder() + handler.ServeHTTP(exportRes, exportReq) + if exportRes.Code != http.StatusNotFound { + t.Fatalf("expected non-owner export to be hidden, got %d", exportRes.Code) + } +} + +func TestMobileSetupProbeContract(t *testing.T) { + handler := newTestMobileHandler(t) + req := httptest.NewRequest(http.MethodGet, "/api/setup", nil) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusOK { + t.Fatalf("setup status = %d, body = %s", res.Code, res.Body.String()) + } + var envelope struct { + Data struct { + DatabaseType string `json:"database_type"` + } `json:"data"` + } + decodeJSON(t, res.Body.Bytes(), &envelope) + if envelope.Data.DatabaseType == "" { + t.Fatal("expected setup status database_type") + } +} + +func newTestMobileHandler(t *testing.T) http.Handler { + t.Helper() + store, err := storage.NewSQLiteProvider(filepath.Join(t.TempDir(), "commory.json")) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { _ = store.Close() }) + if err := store.Init(context.Background()); err != nil { + t.Fatal(err) + } + validator, err := msglayer.NewValidator(repoPath("msglayer", "schema", "v0.1", "root.schema.json")) + if err != nil { + t.Fatal(err) + } + server := NewServer(config.Config{AuthSecret: "test-secret", TLS: false}, store, validator) + return server.Handler() +} + +func registerMobileUser(t *testing.T, handler http.Handler, userName, email string) string { + t.Helper() + body := map[string]string{ + "userName": userName, + "email": email, + "password": "passw0rd!", + } + payload, err := json.Marshal(body) + if err != nil { + t.Fatal(err) + } + req := httptest.NewRequest(http.MethodPost, "/api/auth/register", bytes.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusCreated { + t.Fatalf("register status = %d, body = %s", res.Code, res.Body.String()) + } + var envelope struct { + Data struct { + Token string `json:"token"` + } `json:"data"` + } + decodeJSON(t, res.Body.Bytes(), &envelope) + if envelope.Data.Token == "" { + t.Fatal("expected auth token") + } + return envelope.Data.Token +} + +func readFixture(t *testing.T, parts ...string) []byte { + t.Helper() + data, err := os.ReadFile(repoPath(parts...)) + if err != nil { + t.Fatal(err) + } + return data +} + +func decodeJSON(t *testing.T, data []byte, target any) { + t.Helper() + if err := json.Unmarshal(data, target); err != nil { + t.Fatalf("decode json: %v\n%s", err, string(data)) + } +} + +func repoPath(parts ...string) string { + _, file, _, _ := runtime.Caller(0) + base := filepath.Join(filepath.Dir(file), "..", "..", "..") + all := append([]string{base}, parts...) + return filepath.Join(all...) +} diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 573ea79..87a091d 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -22,13 +22,13 @@ import ( const refreshCookieName = "commory_refresh_token" type Server struct { - cfg config.Config - store storage.Provider - service query.Service - auth *auth.Service - validator *msglayer.Validator - importer importers.Importer - setupSvc *setup.Service + cfg config.Config + store storage.Provider + service query.Service + auth *auth.Service + validator *msglayer.Validator + importer importers.Importer + setupSvc *setup.Service } func NewServer(cfg config.Config, store storage.Provider, validator *msglayer.Validator) *Server { @@ -71,6 +71,7 @@ func (s *Server) Handler() http.Handler { root := http.NewServeMux() root.Handle("/api/auth/", publicMux) + root.Handle("/api/setup", publicMux) root.Handle("/api/", auth.Middleware(s.auth, privateMux)) return root } diff --git a/docs/android-runtime-modes.md b/docs/android-runtime-modes.md new file mode 100644 index 0000000..b24ecad --- /dev/null +++ b/docs/android-runtime-modes.md @@ -0,0 +1,18 @@ +# Android Runtime Modes + +Commory Android supports two explicit runtime modes. + +## Local Only + +- No account or server is required. +- Backup and restore use local app storage. +- Agent context policy is `LOCAL_ONLY`; context must not be sent to server-backed providers. +- Switching into local mode clears mobile auth tokens but preserves local backup files. + +## Commory Server + +- User signs in with the existing Commory username/password auth flow. +- Backup still writes a local MsgLayer JSON file first. +- When `syncOnBackup` is enabled and a valid session exists, Android uploads the generated file to `/api/imports/upload`. +- Remote import history and export use authenticated Commory Server endpoints. +- Agent context policy is `SERVER_ALLOWED`, but future AI features must still apply relevance and minimum-necessary context filtering. diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md new file mode 100644 index 0000000..eb96cb8 --- /dev/null +++ b/docs/engineering-standards.md @@ -0,0 +1,45 @@ +# Engineering Standards + +## Architecture Boundaries + +- Android app code owns Compose UI, permissions, platform readers/writers, navigation, and runtime mode setup. +- `android/sdk/backup` owns pure backup/restore orchestration and MsgLayer mapping. +- `android/sdk/auth` owns auth contracts and provider abstractions. +- `android/sdk/storage` owns local and remote storage contracts. +- Backend handlers remain thin: parse HTTP, call auth/storage/query/import services, return envelopes. +- MsgLayer schema is the canonical interchange format between Android and Commory Server. + +## Localization + +- Every Android user-visible string must exist in `values/strings.xml`, `values-en/strings.xml`, and `values-zh-rCN/strings.xml`. +- New Compose UI must use `stringResource`. +- Dynamic errors should be wrapped in string resources with placeholders. + +## Testing + +- Backend core packages target 80%+ coverage for storage, auth, validators, and import/query logic. +- Backend API handlers target 70%+ coverage for auth, setup, imports, and mobile contract behavior. +- Android domain/ViewModel behavior should be unit-tested where possible. +- Instrumented tests are reserved for Android platform integrations such as permissions, content providers, and Compose flows that require device/runtime APIs. + +## Quality Gates + +- Go: `gofmt`, `go vet ./...`, `go test ./...`. +- Android: `:app:compileDebugKotlin`, unit tests, lint when Android SDK tooling is available. +- Repo hygiene: no tracked `build/`, `.gradle/`, generated APK/AAB, logs, or IDE metadata. +- LOC and complexity are reported in CI for review attention. Large files or large diffs require decomposition or a short justification in the PR. + +## Logging and Errors + +- Logs should identify subsystem and context without exposing message bodies, contact contents, auth tokens, or refresh tokens. +- User-facing errors should be typed at the ViewModel/data boundary and localized at the UI boundary. +- Server upload failures must be non-destructive when a local backup already exists. + +## Release Checklist + +- Mobile API contract still matches `docs/mobile-api.md`. +- Local-only mode works without network or auth. +- Server mode validates setup, login/register, upload, list, and export flows. +- Locale keys are complete for default, English, and Simplified Chinese resources. +- Backup permissions and restore permissions are verified separately. +- Rollback notes describe any storage, session, or API compatibility change. diff --git a/docs/mobile-api.md b/docs/mobile-api.md new file mode 100644 index 0000000..411a2c3 --- /dev/null +++ b/docs/mobile-api.md @@ -0,0 +1,82 @@ +# Mobile API Contract + +The Android app uses Commory Server only when the user selects `COMMORY_SERVER`. `LOCAL_ONLY` never requires authentication or network access. + +## Envelope + +JSON API responses use: + +```json +{ + "code": 200, + "msg": "ok", + "data": {} +} +``` + +Errors use the same envelope with `data: null` and an HTTP status code matching `code`. Android displays `msg` as a retryable user-facing error after localization wrapping. + +## Setup + +- `GET /api/setup` +- Public endpoint. +- Returns whether the server has been initialized. + +```json +{ + "status": true, + "database_type": "sqlite", + "root_init": true +} +``` + +## Auth + +- `POST /api/auth/register` +- Body: `{ "userName": "alice", "email": "alice@example.com", "password": "..." }` +- Response data: `{ "user": User, "token": "access", "refreshToken": "refresh" }` + +- `POST /api/auth/login` +- Body: `{ "userName": "alice", "password": "..." }` +- Response data matches register. + +- `POST /api/auth/refresh` +- Body: `{ "refreshToken": "refresh" }` +- Response data: `{ "accessToken": "access", "refreshToken": "refresh" }` + +Android sends authenticated requests with `Authorization: Bearer `. + +## User + +- `GET /api/user/info` +- Authenticated. +- Returns the current user record. Android uses id, username, email, and roles for session display only. + +## Imports + +- `GET /api/imports` +- Authenticated. +- Returns import summaries with id, schema version, import timestamp, source path, event count, and identity count. + +- `POST /api/imports/upload` +- Authenticated. +- Body: raw `application/json` MsgLayer export or multipart `file`. +- Response data: + +```json +{ + "import_id": "import_...", + "msglayer_version": "msglayer/v0.1" +} +``` + +- `GET /api/imports/{importId}/export` +- Authenticated. +- Returns the raw MsgLayer JSON export for restore or local inspection. + +## Mobile Behavior + +- Server mode always writes a local backup first. +- If `syncOnBackup` is enabled and the user is authenticated, Android uploads the generated MsgLayer JSON to `/api/imports/upload`. +- Switching to local mode clears the mobile session but does not delete local backup files. +- Network, auth, and validation failures must not invalidate the local backup. diff --git a/scripts/check-android-i18n.sh b/scripts/check-android-i18n.sh new file mode 100644 index 0000000..644d1ec --- /dev/null +++ b/scripts/check-android-i18n.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail + +base="android/app/src/main/res/values/strings.xml" +en="android/app/src/main/res/values-en/strings.xml" +zh="android/app/src/main/res/values-zh-rCN/strings.xml" + +extract_keys() { + sed -n 's/.* "$tmp_dir/base" +extract_keys "$en" > "$tmp_dir/en" +extract_keys "$zh" > "$tmp_dir/zh" + +missing_en="$(comm -23 "$tmp_dir/base" "$tmp_dir/en" || true)" +missing_zh="$(comm -23 "$tmp_dir/base" "$tmp_dir/zh" || true)" + +if [[ -n "$missing_en" || -n "$missing_zh" ]]; then + if [[ -n "$missing_en" ]]; then + echo "Missing English string keys:" + echo "$missing_en" + fi + if [[ -n "$missing_zh" ]]; then + echo "Missing Simplified Chinese string keys:" + echo "$missing_zh" + fi + exit 1 +fi + +echo "Android i18n key check passed." diff --git a/scripts/check-repo-hygiene.sh b/scripts/check-repo-hygiene.sh new file mode 100644 index 0000000..6c88c50 --- /dev/null +++ b/scripts/check-repo-hygiene.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail + +tracked_generated_candidates="$( + git ls-files \ + 'android/**/build/**' \ + 'android/.gradle/**' \ + 'backend/data/**' \ + 'web/node_modules/**' \ + '*.apk' \ + '*.aab' \ + '*.log' +)" + +tracked_generated="" +while IFS= read -r path; do + if [[ -n "$path" && -e "$path" ]]; then + tracked_generated+="$path"$'\n' + fi +done <<< "$tracked_generated_candidates" + +if [[ -n "$tracked_generated" ]]; then + echo "Tracked generated or local-only files were found:" + echo "$tracked_generated" + exit 1 +fi + +echo "Repo hygiene check passed." diff --git a/scripts/report-loc-complexity.sh b/scripts/report-loc-complexity.sh new file mode 100644 index 0000000..58a3fd6 --- /dev/null +++ b/scripts/report-loc-complexity.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Largest source files by line count:" +find android backend msglayer -type f \( -name '*.kt' -o -name '*.go' -o -name '*.json' -o -name '*.xml' \) \ + -not -path '*/build/*' \ + -not -path '*/.gradle/*' \ + -print0 | + xargs -0 wc -l | + sort -nr | + head -30 + +echo +echo "Large file review threshold: 500 lines for app/source files, 1000 lines for generated schemas/examples." From bf8df0feddae91c070d79b1aaeefb379af07fb53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 16:58:35 +0800 Subject: [PATCH 08/20] =?UTF-8?q?chore:=20=E6=89=B9=E9=87=8F=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=84=E7=B1=BBAI=E4=BB=A3=E7=90=86=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E4=B8=8E=E4=BC=98=E5=8C=96=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次提交新增了多个Claude代理技能包,包括react最佳实践、react native性能优化、web测试、设计规范等方向的完整技能集: 1. 添加react最佳实践的40+条性能优化规则与元数据 2. 添加react-native专属的性能优化规则集与配置 3. 新增web自动化测试、代码审查、设计镜像等工具类技能 4. 补充技能软链接与依赖包配置 5. 新增多个工具脚本与模板文件 --- .agents/skills/agent-memory-mcp/SKILL.md | 82 + .agents/skills/agent-memory-systems/SKILL.md | 67 + .agents/skills/changelog-automation/SKILL.md | 580 ++++ .agents/skills/changelog-generator/SKILL.md | 104 + .agents/skills/code-review-checklist/SKILL.md | 444 +++ .agents/skills/code-review/SKILL.md | 102 + .agents/skills/code-reviewer/SKILL.md | 209 ++ .../references/code_review_checklist.md | 103 + .../references/coding_standards.md | 103 + .../references/common_antipatterns.md | 103 + .../scripts/code_quality_checker.py | 114 + .../code-reviewer/scripts/pr_analyzer.py | 114 + .../scripts/review_report_generator.py | 114 + .agents/skills/codex-review/SKILL.md | 37 + .agents/skills/design-mirror/SKILL.md | 171 + .../design-mirror/references/apply-guide.md | 271 ++ .../design-mirror/references/capture-guide.md | 84 + .../references/css-extraction.md | 150 + .../design-mirror/scripts/scrape_html.sh | 37 + .../design-mirror/scripts/screenshot.sh | 37 + .../skills/design-system-starter/README.md | 242 ++ .agents/skills/design-system-starter/SKILL.md | 603 ++++ .../checklists/design-system-checklist.md | 390 +++ .../references/component-examples.md | 578 ++++ .../templates/component-template.tsx | 252 ++ .../templates/design-tokens-template.json | 735 +++++ .agents/skills/design-to-code/LICENSE.txt | 201 ++ .agents/skills/design-to-code/SKILL.md | 158 + .../design-to-code/scripts/coderio-skill.mjs | 300 ++ .../design-to-code/scripts/package.json | 8 + .agents/skills/excel-analysis/SKILL.md | 247 ++ .../skills/flutter-dart-code-review/SKILL.md | 435 +++ .agents/skills/flutter-development/SKILL.md | 316 ++ .agents/skills/flutter-expert/SKILL.md | 200 ++ .agents/skills/frontend-design/LICENSE.txt | 177 + .agents/skills/frontend-design/SKILL.md | 42 + .agents/skills/mobile-android-design/SKILL.md | 440 +++ .../references/android-navigation.md | 698 ++++ .../references/compose-components.md | 796 +++++ .../references/material3-theming.md | 604 ++++ .agents/skills/mobile-app-debugging/SKILL.md | 254 ++ .agents/skills/mobile-app-testing/SKILL.md | 344 ++ .agents/skills/mobile-design/SKILL.md | 284 ++ .../skills/mobile-design/decision-trees.md | 516 +++ .../skills/mobile-design/mobile-backend.md | 491 +++ .../mobile-design/mobile-color-system.md | 420 +++ .../skills/mobile-design/mobile-debugging.md | 122 + .../mobile-design/mobile-design-thinking.md | 357 ++ .../skills/mobile-design/mobile-navigation.md | 458 +++ .../mobile-design/mobile-performance.md | 767 +++++ .../skills/mobile-design/mobile-testing.md | 356 ++ .../skills/mobile-design/mobile-typography.md | 433 +++ .../skills/mobile-design/platform-android.md | 666 ++++ .agents/skills/mobile-design/platform-ios.md | 561 ++++ .../mobile-design/scripts/mobile_audit.py | 670 ++++ .../skills/mobile-design/touch-psychology.md | 537 +++ .agents/skills/mobile-developer/SKILL.md | 205 ++ .agents/skills/mobile-first-design/SKILL.md | 305 ++ .agents/skills/mobile-ios-design/SKILL.md | 272 ++ .../references/hig-patterns.md | 529 +++ .../references/ios-navigation.md | 564 ++++ .../references/swiftui-components.md | 575 ++++ .../skills/mobile-offline-support/SKILL.md | 466 +++ .agents/skills/mobile-security-coder/SKILL.md | 184 ++ .agents/skills/pressure-testing/SKILL.md | 60 + .../pressure-testing/references/commands.md | 95 + .../pressure-testing/references/reporting.md | 87 + .agents/skills/react-best-practices/AGENTS.md | 2934 +++++++++++++++++ .agents/skills/react-best-practices/README.md | 123 + .agents/skills/react-best-practices/SKILL.md | 136 + .../skills/react-best-practices/metadata.json | 15 + .../react-best-practices/rules/_sections.md | 46 + .../react-best-practices/rules/_template.md | 28 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../rules/async-defer-await.md | 80 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-barrel-imports.md | 59 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 82 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-transitions.md | 40 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-serialization.md | 38 + .agents/skills/react-native-skills/AGENTS.md | 2897 ++++++++++++++++ .agents/skills/react-native-skills/README.md | 165 + .agents/skills/react-native-skills/SKILL.md | 121 + .../skills/react-native-skills/metadata.json | 16 + .../react-native-skills/rules/_sections.md | 86 + .../react-native-skills/rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 ++ .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../react-native-skills/rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../react-native-skills/rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../react-native-skills/rules/ui-styling.md | 87 + .agents/skills/skill-creator/LICENSE.txt | 202 ++ .agents/skills/skill-creator/SKILL.md | 356 ++ .../references/output-patterns.md | 82 + .../skill-creator/references/workflows.md | 28 + .../skill-creator/scripts/init_skill.py | 303 ++ .../skill-creator/scripts/package_skill.py | 110 + .../skill-creator/scripts/quick_validate.py | 95 + .agents/skills/skill-developer/ADVANCED.md | 197 ++ .../skills/skill-developer/HOOK_MECHANISMS.md | 306 ++ .../skill-developer/PATTERNS_LIBRARY.md | 152 + .agents/skills/skill-developer/SKILL.md | 426 +++ .../skill-developer/SKILL_RULES_REFERENCE.md | 315 ++ .../skills/skill-developer/TRIGGER_TYPES.md | 305 ++ .../skills/skill-developer/TROUBLESHOOTING.md | 514 +++ .agents/skills/skill-rails-upgrade/SKILL.md | 408 +++ .agents/skills/skill-seekers/SKILL.md | 22 + .agents/skills/ui-skills/SKILL.md | 22 + .agents/skills/ui-ux-designer/SKILL.md | 209 ++ .agents/skills/ui-ux-pro-max/SKILL.md | 351 ++ .agents/skills/ui-ux-pro-max/data/charts.csv | 26 + .agents/skills/ui-ux-pro-max/data/colors.csv | 97 + .agents/skills/ui-ux-pro-max/data/icons.csv | 101 + .agents/skills/ui-ux-pro-max/data/landing.csv | 31 + .../skills/ui-ux-pro-max/data/products.csv | 97 + .agents/skills/ui-ux-pro-max/data/prompts.csv | 24 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 56 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 53 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 51 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 59 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 54 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 61 + .../ui-ux-pro-max/data/stacks/svelte.csv | 54 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .agents/skills/ui-ux-pro-max/data/styles.csv | 59 + .../skills/ui-ux-pro-max/data/typography.csv | 58 + .../ui-ux-pro-max/data/ui-reasoning.csv | 101 + .../ui-ux-pro-max/data/ux-guidelines.csv | 100 + .../ui-ux-pro-max/data/web-interface.csv | 31 + .agents/skills/ui-ux-pro-max/scripts/core.py | 257 ++ .../ui-ux-pro-max/scripts/design_system.py | 487 +++ .../skills/ui-ux-pro-max/scripts/search.py | 76 + .agents/skills/ui-visual-validator/SKILL.md | 214 ++ .agents/skills/vue-best-practices/SKILL.md | 38 + .../rules/codeactions-save-performance.md | 79 + .../rules/data-attributes-config.md | 74 + .../rules/deep-watch-numeric.md | 97 + .../rules/define-model-update-event.md | 79 + .../rules/duplicate-plugin-detection.md | 102 + .../rules/extract-component-props.md | 57 + .../rules/fallthrough-attributes.md | 63 + .../vue-best-practices/rules/hmr-vue-ssr.md | 124 + .../rules/module-resolution-bundler.md | 81 + .../rules/pinia-store-mocking.md | 159 + .../rules/script-setup-jsdoc.md | 85 + .../rules/strict-css-modules.md | 68 + .../rules/volar-3-breaking-changes.md | 65 + .../rules/vue-directive-comments.md | 73 + .../rules/vue-router-typed-params.md | 81 + .../rules/vue-tsc-strict-templates.md | 69 + .../rules/with-defaults-union-types.md | 102 + .../skills/web-artifacts-builder/LICENSE.txt | 202 ++ .agents/skills/web-artifacts-builder/SKILL.md | 74 + .../scripts/bundle-artifact.sh | 54 + .../scripts/init-artifact.sh | 322 ++ .../scripts/shadcn-components.tar.gz | Bin 0 -> 19967 bytes .agents/skills/web-design-guidelines/SKILL.md | 39 + .agents/skills/webapp-testing/LICENSE.txt | 202 ++ .agents/skills/webapp-testing/SKILL.md | 96 + .../examples/console_logging.py | 35 + .../examples/element_discovery.py | 40 + .../examples/static_html_automation.py | 33 + .../webapp-testing/scripts/with_server.py | 106 + .claude/skills/agent-memory-mcp/SKILL.md | 82 + .claude/skills/agent-memory-systems | 1 + .claude/skills/flutter-development/SKILL.md | 316 ++ .claude/skills/flutter-expert/SKILL.md | 200 ++ .claude/skills/mobile-android-design/SKILL.md | 440 +++ .../references/android-navigation.md | 698 ++++ .../references/compose-components.md | 796 +++++ .../references/material3-theming.md | 604 ++++ .claude/skills/mobile-app-debugging/SKILL.md | 254 ++ .claude/skills/mobile-app-testing/SKILL.md | 344 ++ .claude/skills/mobile-design/SKILL.md | 284 ++ .../skills/mobile-design/decision-trees.md | 516 +++ .../skills/mobile-design/mobile-backend.md | 491 +++ .../mobile-design/mobile-color-system.md | 420 +++ .../skills/mobile-design/mobile-debugging.md | 122 + .../mobile-design/mobile-design-thinking.md | 357 ++ .../skills/mobile-design/mobile-navigation.md | 458 +++ .../mobile-design/mobile-performance.md | 767 +++++ .../skills/mobile-design/mobile-testing.md | 356 ++ .../skills/mobile-design/mobile-typography.md | 433 +++ .../skills/mobile-design/platform-android.md | 666 ++++ .claude/skills/mobile-design/platform-ios.md | 561 ++++ .../mobile-design/scripts/mobile_audit.py | 670 ++++ .../skills/mobile-design/touch-psychology.md | 537 +++ .claude/skills/mobile-developer/SKILL.md | 205 ++ .claude/skills/mobile-first-design/SKILL.md | 305 ++ .claude/skills/mobile-ios-design/SKILL.md | 272 ++ .../references/hig-patterns.md | 529 +++ .../references/ios-navigation.md | 564 ++++ .../references/swiftui-components.md | 575 ++++ .../skills/mobile-offline-support/SKILL.md | 466 +++ .claude/skills/mobile-security-coder/SKILL.md | 184 ++ .claude/skills/skill-creator/LICENSE.txt | 202 ++ .claude/skills/skill-creator/SKILL.md | 593 ++++ .../references/output-patterns.md | 82 + .../skill-creator/references/workflows.md | 28 + .../skill-creator/scripts/init_skill.py | 303 ++ .../skill-creator/scripts/package_skill.py | 110 + .../skill-creator/scripts/quick_validate.py | 95 + .claude/skills/skill-developer/ADVANCED.md | 197 ++ .../skills/skill-developer/HOOK_MECHANISMS.md | 306 ++ .../skill-developer/PATTERNS_LIBRARY.md | 152 + .claude/skills/skill-developer/SKILL.md | 426 +++ .../skill-developer/SKILL_RULES_REFERENCE.md | 315 ++ .../skills/skill-developer/TRIGGER_TYPES.md | 305 ++ .../skills/skill-developer/TROUBLESHOOTING.md | 514 +++ .claude/skills/skill-rails-upgrade/SKILL.md | 408 +++ .claude/skills/skill-seekers/SKILL.md | 22 + .claude/skills/ui-skills/SKILL.md | 22 + .claude/skills/ui-ux-designer/SKILL.md | 209 ++ .claude/skills/ui-ux-pro-max/SKILL.md | 351 ++ .claude/skills/ui-ux-pro-max/data/charts.csv | 26 + .claude/skills/ui-ux-pro-max/data/colors.csv | 97 + .claude/skills/ui-ux-pro-max/data/icons.csv | 101 + .claude/skills/ui-ux-pro-max/data/landing.csv | 31 + .../skills/ui-ux-pro-max/data/products.csv | 97 + .claude/skills/ui-ux-pro-max/data/prompts.csv | 24 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 56 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 53 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 51 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 59 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 54 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 61 + .../ui-ux-pro-max/data/stacks/svelte.csv | 54 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .claude/skills/ui-ux-pro-max/data/styles.csv | 59 + .../skills/ui-ux-pro-max/data/typography.csv | 58 + .../ui-ux-pro-max/data/ui-reasoning.csv | 101 + .../ui-ux-pro-max/data/ux-guidelines.csv | 100 + .../ui-ux-pro-max/data/web-interface.csv | 31 + .claude/skills/ui-ux-pro-max/scripts/core.py | 257 ++ .../ui-ux-pro-max/scripts/design_system.py | 488 +++ .../skills/ui-ux-pro-max/scripts/search.py | 76 + .claude/skills/ui-visual-validator/SKILL.md | 214 ++ CLAUDE.md | 137 + 327 files changed, 63568 insertions(+) create mode 100644 .agents/skills/agent-memory-mcp/SKILL.md create mode 100644 .agents/skills/agent-memory-systems/SKILL.md create mode 100644 .agents/skills/changelog-automation/SKILL.md create mode 100644 .agents/skills/changelog-generator/SKILL.md create mode 100644 .agents/skills/code-review-checklist/SKILL.md create mode 100644 .agents/skills/code-review/SKILL.md create mode 100644 .agents/skills/code-reviewer/SKILL.md create mode 100644 .agents/skills/code-reviewer/references/code_review_checklist.md create mode 100644 .agents/skills/code-reviewer/references/coding_standards.md create mode 100644 .agents/skills/code-reviewer/references/common_antipatterns.md create mode 100755 .agents/skills/code-reviewer/scripts/code_quality_checker.py create mode 100755 .agents/skills/code-reviewer/scripts/pr_analyzer.py create mode 100755 .agents/skills/code-reviewer/scripts/review_report_generator.py create mode 100644 .agents/skills/codex-review/SKILL.md create mode 100644 .agents/skills/design-mirror/SKILL.md create mode 100644 .agents/skills/design-mirror/references/apply-guide.md create mode 100644 .agents/skills/design-mirror/references/capture-guide.md create mode 100644 .agents/skills/design-mirror/references/css-extraction.md create mode 100644 .agents/skills/design-mirror/scripts/scrape_html.sh create mode 100644 .agents/skills/design-mirror/scripts/screenshot.sh create mode 100644 .agents/skills/design-system-starter/README.md create mode 100644 .agents/skills/design-system-starter/SKILL.md create mode 100644 .agents/skills/design-system-starter/checklists/design-system-checklist.md create mode 100644 .agents/skills/design-system-starter/references/component-examples.md create mode 100644 .agents/skills/design-system-starter/templates/component-template.tsx create mode 100644 .agents/skills/design-system-starter/templates/design-tokens-template.json create mode 100644 .agents/skills/design-to-code/LICENSE.txt create mode 100644 .agents/skills/design-to-code/SKILL.md create mode 100644 .agents/skills/design-to-code/scripts/coderio-skill.mjs create mode 100644 .agents/skills/design-to-code/scripts/package.json create mode 100644 .agents/skills/excel-analysis/SKILL.md create mode 100644 .agents/skills/flutter-dart-code-review/SKILL.md create mode 100644 .agents/skills/flutter-development/SKILL.md create mode 100644 .agents/skills/flutter-expert/SKILL.md create mode 100644 .agents/skills/frontend-design/LICENSE.txt create mode 100644 .agents/skills/frontend-design/SKILL.md create mode 100644 .agents/skills/mobile-android-design/SKILL.md create mode 100644 .agents/skills/mobile-android-design/references/android-navigation.md create mode 100644 .agents/skills/mobile-android-design/references/compose-components.md create mode 100644 .agents/skills/mobile-android-design/references/material3-theming.md create mode 100644 .agents/skills/mobile-app-debugging/SKILL.md create mode 100644 .agents/skills/mobile-app-testing/SKILL.md create mode 100644 .agents/skills/mobile-design/SKILL.md create mode 100644 .agents/skills/mobile-design/decision-trees.md create mode 100644 .agents/skills/mobile-design/mobile-backend.md create mode 100644 .agents/skills/mobile-design/mobile-color-system.md create mode 100644 .agents/skills/mobile-design/mobile-debugging.md create mode 100644 .agents/skills/mobile-design/mobile-design-thinking.md create mode 100644 .agents/skills/mobile-design/mobile-navigation.md create mode 100644 .agents/skills/mobile-design/mobile-performance.md create mode 100644 .agents/skills/mobile-design/mobile-testing.md create mode 100644 .agents/skills/mobile-design/mobile-typography.md create mode 100644 .agents/skills/mobile-design/platform-android.md create mode 100644 .agents/skills/mobile-design/platform-ios.md create mode 100644 .agents/skills/mobile-design/scripts/mobile_audit.py create mode 100644 .agents/skills/mobile-design/touch-psychology.md create mode 100644 .agents/skills/mobile-developer/SKILL.md create mode 100644 .agents/skills/mobile-first-design/SKILL.md create mode 100644 .agents/skills/mobile-ios-design/SKILL.md create mode 100644 .agents/skills/mobile-ios-design/references/hig-patterns.md create mode 100644 .agents/skills/mobile-ios-design/references/ios-navigation.md create mode 100644 .agents/skills/mobile-ios-design/references/swiftui-components.md create mode 100644 .agents/skills/mobile-offline-support/SKILL.md create mode 100644 .agents/skills/mobile-security-coder/SKILL.md create mode 100644 .agents/skills/pressure-testing/SKILL.md create mode 100644 .agents/skills/pressure-testing/references/commands.md create mode 100644 .agents/skills/pressure-testing/references/reporting.md create mode 100644 .agents/skills/react-best-practices/AGENTS.md create mode 100644 .agents/skills/react-best-practices/README.md create mode 100644 .agents/skills/react-best-practices/SKILL.md create mode 100644 .agents/skills/react-best-practices/metadata.json create mode 100644 .agents/skills/react-best-practices/rules/_sections.md create mode 100644 .agents/skills/react-best-practices/rules/_template.md create mode 100644 .agents/skills/react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 .agents/skills/react-best-practices/rules/advanced-init-once.md create mode 100644 .agents/skills/react-best-practices/rules/advanced-use-latest.md create mode 100644 .agents/skills/react-best-practices/rules/async-api-routes.md create mode 100644 .agents/skills/react-best-practices/rules/async-defer-await.md create mode 100644 .agents/skills/react-best-practices/rules/async-dependencies.md create mode 100644 .agents/skills/react-best-practices/rules/async-parallel.md create mode 100644 .agents/skills/react-best-practices/rules/async-suspense-boundaries.md create mode 100644 .agents/skills/react-best-practices/rules/bundle-barrel-imports.md create mode 100644 .agents/skills/react-best-practices/rules/bundle-conditional.md create mode 100644 .agents/skills/react-best-practices/rules/bundle-defer-third-party.md create mode 100644 .agents/skills/react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 .agents/skills/react-best-practices/rules/bundle-preload.md create mode 100644 .agents/skills/react-best-practices/rules/client-event-listeners.md create mode 100644 .agents/skills/react-best-practices/rules/client-localstorage-schema.md create mode 100644 .agents/skills/react-best-practices/rules/client-passive-event-listeners.md create mode 100644 .agents/skills/react-best-practices/rules/client-swr-dedup.md create mode 100644 .agents/skills/react-best-practices/rules/js-batch-dom-css.md create mode 100644 .agents/skills/react-best-practices/rules/js-cache-function-results.md create mode 100644 .agents/skills/react-best-practices/rules/js-cache-property-access.md create mode 100644 .agents/skills/react-best-practices/rules/js-cache-storage.md create mode 100644 .agents/skills/react-best-practices/rules/js-combine-iterations.md create mode 100644 .agents/skills/react-best-practices/rules/js-early-exit.md create mode 100644 .agents/skills/react-best-practices/rules/js-hoist-regexp.md create mode 100644 .agents/skills/react-best-practices/rules/js-index-maps.md create mode 100644 .agents/skills/react-best-practices/rules/js-length-check-first.md create mode 100644 .agents/skills/react-best-practices/rules/js-min-max-loop.md create mode 100644 .agents/skills/react-best-practices/rules/js-set-map-lookups.md create mode 100644 .agents/skills/react-best-practices/rules/js-tosorted-immutable.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-activity.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-conditional-render.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-content-visibility.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-svg-precision.md create mode 100644 .agents/skills/react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-defer-reads.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-dependencies.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-derived-state.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-functional-setstate.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-memo.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-transitions.md create mode 100644 .agents/skills/react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 .agents/skills/react-best-practices/rules/server-after-nonblocking.md create mode 100644 .agents/skills/react-best-practices/rules/server-auth-actions.md create mode 100644 .agents/skills/react-best-practices/rules/server-cache-lru.md create mode 100644 .agents/skills/react-best-practices/rules/server-cache-react.md create mode 100644 .agents/skills/react-best-practices/rules/server-dedup-props.md create mode 100644 .agents/skills/react-best-practices/rules/server-parallel-fetching.md create mode 100644 .agents/skills/react-best-practices/rules/server-serialization.md create mode 100644 .agents/skills/react-native-skills/AGENTS.md create mode 100644 .agents/skills/react-native-skills/README.md create mode 100644 .agents/skills/react-native-skills/SKILL.md create mode 100644 .agents/skills/react-native-skills/metadata.json create mode 100644 .agents/skills/react-native-skills/rules/_sections.md create mode 100644 .agents/skills/react-native-skills/rules/_template.md create mode 100644 .agents/skills/react-native-skills/rules/animation-derived-value.md create mode 100644 .agents/skills/react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 .agents/skills/react-native-skills/rules/animation-gpu-properties.md create mode 100644 .agents/skills/react-native-skills/rules/design-system-compound-components.md create mode 100644 .agents/skills/react-native-skills/rules/fonts-config-plugin.md create mode 100644 .agents/skills/react-native-skills/rules/imports-design-system-folder.md create mode 100644 .agents/skills/react-native-skills/rules/js-hoist-intl.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-callbacks.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-function-references.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-images.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-inline-objects.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-item-expensive.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-item-memo.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-item-types.md create mode 100644 .agents/skills/react-native-skills/rules/list-performance-virtualize.md create mode 100644 .agents/skills/react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 .agents/skills/react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 .agents/skills/react-native-skills/rules/navigation-native-navigators.md create mode 100644 .agents/skills/react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 .agents/skills/react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 .agents/skills/react-native-skills/rules/react-state-dispatcher.md create mode 100644 .agents/skills/react-native-skills/rules/react-state-fallback.md create mode 100644 .agents/skills/react-native-skills/rules/react-state-minimize.md create mode 100644 .agents/skills/react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 .agents/skills/react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 .agents/skills/react-native-skills/rules/scroll-position-no-state.md create mode 100644 .agents/skills/react-native-skills/rules/state-ground-truth.md create mode 100644 .agents/skills/react-native-skills/rules/ui-expo-image.md create mode 100644 .agents/skills/react-native-skills/rules/ui-image-gallery.md create mode 100644 .agents/skills/react-native-skills/rules/ui-measure-views.md create mode 100644 .agents/skills/react-native-skills/rules/ui-menus.md create mode 100644 .agents/skills/react-native-skills/rules/ui-native-modals.md create mode 100644 .agents/skills/react-native-skills/rules/ui-pressable.md create mode 100644 .agents/skills/react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 .agents/skills/react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 .agents/skills/react-native-skills/rules/ui-styling.md create mode 100644 .agents/skills/skill-creator/LICENSE.txt create mode 100644 .agents/skills/skill-creator/SKILL.md create mode 100644 .agents/skills/skill-creator/references/output-patterns.md create mode 100644 .agents/skills/skill-creator/references/workflows.md create mode 100644 .agents/skills/skill-creator/scripts/init_skill.py create mode 100644 .agents/skills/skill-creator/scripts/package_skill.py create mode 100644 .agents/skills/skill-creator/scripts/quick_validate.py create mode 100644 .agents/skills/skill-developer/ADVANCED.md create mode 100644 .agents/skills/skill-developer/HOOK_MECHANISMS.md create mode 100644 .agents/skills/skill-developer/PATTERNS_LIBRARY.md create mode 100644 .agents/skills/skill-developer/SKILL.md create mode 100644 .agents/skills/skill-developer/SKILL_RULES_REFERENCE.md create mode 100644 .agents/skills/skill-developer/TRIGGER_TYPES.md create mode 100644 .agents/skills/skill-developer/TROUBLESHOOTING.md create mode 100644 .agents/skills/skill-rails-upgrade/SKILL.md create mode 100644 .agents/skills/skill-seekers/SKILL.md create mode 100644 .agents/skills/ui-skills/SKILL.md create mode 100644 .agents/skills/ui-ux-designer/SKILL.md create mode 100644 .agents/skills/ui-ux-pro-max/SKILL.md create mode 100644 .agents/skills/ui-ux-pro-max/data/charts.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/colors.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/icons.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/landing.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/products.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/prompts.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/styles.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/typography.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/web-interface.csv create mode 100644 .agents/skills/ui-ux-pro-max/scripts/core.py create mode 100644 .agents/skills/ui-ux-pro-max/scripts/design_system.py create mode 100644 .agents/skills/ui-ux-pro-max/scripts/search.py create mode 100644 .agents/skills/ui-visual-validator/SKILL.md create mode 100644 .agents/skills/vue-best-practices/SKILL.md create mode 100644 .agents/skills/vue-best-practices/rules/codeactions-save-performance.md create mode 100644 .agents/skills/vue-best-practices/rules/data-attributes-config.md create mode 100644 .agents/skills/vue-best-practices/rules/deep-watch-numeric.md create mode 100644 .agents/skills/vue-best-practices/rules/define-model-update-event.md create mode 100644 .agents/skills/vue-best-practices/rules/duplicate-plugin-detection.md create mode 100644 .agents/skills/vue-best-practices/rules/extract-component-props.md create mode 100644 .agents/skills/vue-best-practices/rules/fallthrough-attributes.md create mode 100644 .agents/skills/vue-best-practices/rules/hmr-vue-ssr.md create mode 100644 .agents/skills/vue-best-practices/rules/module-resolution-bundler.md create mode 100644 .agents/skills/vue-best-practices/rules/pinia-store-mocking.md create mode 100644 .agents/skills/vue-best-practices/rules/script-setup-jsdoc.md create mode 100644 .agents/skills/vue-best-practices/rules/strict-css-modules.md create mode 100644 .agents/skills/vue-best-practices/rules/volar-3-breaking-changes.md create mode 100644 .agents/skills/vue-best-practices/rules/vue-directive-comments.md create mode 100644 .agents/skills/vue-best-practices/rules/vue-router-typed-params.md create mode 100644 .agents/skills/vue-best-practices/rules/vue-tsc-strict-templates.md create mode 100644 .agents/skills/vue-best-practices/rules/with-defaults-union-types.md create mode 100644 .agents/skills/web-artifacts-builder/LICENSE.txt create mode 100644 .agents/skills/web-artifacts-builder/SKILL.md create mode 100644 .agents/skills/web-artifacts-builder/scripts/bundle-artifact.sh create mode 100644 .agents/skills/web-artifacts-builder/scripts/init-artifact.sh create mode 100644 .agents/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz create mode 100644 .agents/skills/web-design-guidelines/SKILL.md create mode 100644 .agents/skills/webapp-testing/LICENSE.txt create mode 100644 .agents/skills/webapp-testing/SKILL.md create mode 100644 .agents/skills/webapp-testing/examples/console_logging.py create mode 100644 .agents/skills/webapp-testing/examples/element_discovery.py create mode 100644 .agents/skills/webapp-testing/examples/static_html_automation.py create mode 100644 .agents/skills/webapp-testing/scripts/with_server.py create mode 100644 .claude/skills/agent-memory-mcp/SKILL.md create mode 120000 .claude/skills/agent-memory-systems create mode 100644 .claude/skills/flutter-development/SKILL.md create mode 100644 .claude/skills/flutter-expert/SKILL.md create mode 100644 .claude/skills/mobile-android-design/SKILL.md create mode 100644 .claude/skills/mobile-android-design/references/android-navigation.md create mode 100644 .claude/skills/mobile-android-design/references/compose-components.md create mode 100644 .claude/skills/mobile-android-design/references/material3-theming.md create mode 100644 .claude/skills/mobile-app-debugging/SKILL.md create mode 100644 .claude/skills/mobile-app-testing/SKILL.md create mode 100644 .claude/skills/mobile-design/SKILL.md create mode 100644 .claude/skills/mobile-design/decision-trees.md create mode 100644 .claude/skills/mobile-design/mobile-backend.md create mode 100644 .claude/skills/mobile-design/mobile-color-system.md create mode 100644 .claude/skills/mobile-design/mobile-debugging.md create mode 100644 .claude/skills/mobile-design/mobile-design-thinking.md create mode 100644 .claude/skills/mobile-design/mobile-navigation.md create mode 100644 .claude/skills/mobile-design/mobile-performance.md create mode 100644 .claude/skills/mobile-design/mobile-testing.md create mode 100644 .claude/skills/mobile-design/mobile-typography.md create mode 100644 .claude/skills/mobile-design/platform-android.md create mode 100644 .claude/skills/mobile-design/platform-ios.md create mode 100644 .claude/skills/mobile-design/scripts/mobile_audit.py create mode 100644 .claude/skills/mobile-design/touch-psychology.md create mode 100644 .claude/skills/mobile-developer/SKILL.md create mode 100644 .claude/skills/mobile-first-design/SKILL.md create mode 100644 .claude/skills/mobile-ios-design/SKILL.md create mode 100644 .claude/skills/mobile-ios-design/references/hig-patterns.md create mode 100644 .claude/skills/mobile-ios-design/references/ios-navigation.md create mode 100644 .claude/skills/mobile-ios-design/references/swiftui-components.md create mode 100644 .claude/skills/mobile-offline-support/SKILL.md create mode 100644 .claude/skills/mobile-security-coder/SKILL.md create mode 100644 .claude/skills/skill-creator/LICENSE.txt create mode 100644 .claude/skills/skill-creator/SKILL.md create mode 100644 .claude/skills/skill-creator/references/output-patterns.md create mode 100644 .claude/skills/skill-creator/references/workflows.md create mode 100755 .claude/skills/skill-creator/scripts/init_skill.py create mode 100755 .claude/skills/skill-creator/scripts/package_skill.py create mode 100755 .claude/skills/skill-creator/scripts/quick_validate.py create mode 100644 .claude/skills/skill-developer/ADVANCED.md create mode 100644 .claude/skills/skill-developer/HOOK_MECHANISMS.md create mode 100644 .claude/skills/skill-developer/PATTERNS_LIBRARY.md create mode 100644 .claude/skills/skill-developer/SKILL.md create mode 100644 .claude/skills/skill-developer/SKILL_RULES_REFERENCE.md create mode 100644 .claude/skills/skill-developer/TRIGGER_TYPES.md create mode 100644 .claude/skills/skill-developer/TROUBLESHOOTING.md create mode 100644 .claude/skills/skill-rails-upgrade/SKILL.md create mode 100644 .claude/skills/skill-seekers/SKILL.md create mode 100644 .claude/skills/ui-skills/SKILL.md create mode 100644 .claude/skills/ui-ux-designer/SKILL.md create mode 100644 .claude/skills/ui-ux-pro-max/SKILL.md create mode 100644 .claude/skills/ui-ux-pro-max/data/charts.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/colors.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/icons.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/landing.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/products.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/prompts.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/styles.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/typography.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/web-interface.csv create mode 100644 .claude/skills/ui-ux-pro-max/scripts/core.py create mode 100644 .claude/skills/ui-ux-pro-max/scripts/design_system.py create mode 100644 .claude/skills/ui-ux-pro-max/scripts/search.py create mode 100644 .claude/skills/ui-visual-validator/SKILL.md create mode 100644 CLAUDE.md diff --git a/.agents/skills/agent-memory-mcp/SKILL.md b/.agents/skills/agent-memory-mcp/SKILL.md new file mode 100644 index 0000000..45d9651 --- /dev/null +++ b/.agents/skills/agent-memory-mcp/SKILL.md @@ -0,0 +1,82 @@ +--- +name: agent-memory-mcp +author: Amit Rathiesh +description: A hybrid memory system that provides persistent, searchable knowledge management for AI agents (Architecture, Patterns, Decisions). +--- + +# Agent Memory Skill + +This skill provides a persistent, searchable memory bank that automatically syncs with project documentation. It runs as an MCP server to allow reading/writing/searching of long-term memories. + +## Prerequisites + +- Node.js (v18+) + +## Setup + +1. **Clone the Repository**: + Clone the `agentMemory` project into your agent's workspace or a parallel directory: + + ```bash + git clone https://github.com/webzler/agentMemory.git .agent/skills/agent-memory + ``` + +2. **Install Dependencies**: + + ```bash + cd .agent/skills/agent-memory + npm install + npm run compile + ``` + +3. **Start the MCP Server**: + Use the helper script to activate the memory bank for your current project: + + ```bash + npm run start-server + ``` + + _Example for current directory:_ + + ```bash + npm run start-server my-project $(pwd) + ``` + +## Capabilities (MCP Tools) + +### `memory_search` + +Search for memories by query, type, or tags. + +- **Args**: `query` (string), `type?` (string), `tags?` (string[]) +- **Usage**: "Find all authentication patterns" -> `memory_search({ query: "authentication", type: "pattern" })` + +### `memory_write` + +Record new knowledge or decisions. + +- **Args**: `key` (string), `type` (string), `content` (string), `tags?` (string[]) +- **Usage**: "Save this architecture decision" -> `memory_write({ key: "auth-v1", type: "decision", content: "..." })` + +### `memory_read` + +Retrieve specific memory content by key. + +- **Args**: `key` (string) +- **Usage**: "Get the auth design" -> `memory_read({ key: "auth-v1" })` + +### `memory_stats` + +View analytics on memory usage. + +- **Usage**: "Show memory statistics" -> `memory_stats({})` + +## Dashboard + +This skill includes a standalone dashboard to visualize memory usage. + +```bash +npm run start-dashboard +``` + +Access at: `http://localhost:3333` diff --git a/.agents/skills/agent-memory-systems/SKILL.md b/.agents/skills/agent-memory-systems/SKILL.md new file mode 100644 index 0000000..ee79118 --- /dev/null +++ b/.agents/skills/agent-memory-systems/SKILL.md @@ -0,0 +1,67 @@ +--- +name: agent-memory-systems +description: "Memory is the cornerstone of intelligent agents. Without it, every interaction starts from zero. This skill covers the architecture of agent memory: short-term (context window), long-term (vector stores), and the cognitive architectures that organize them. Key insight: Memory isn't just storage - it's retrieval. A million stored facts mean nothing if you can't find the right one. Chunking, embedding, and retrieval strategies determine whether your agent remembers or forgets. The field is fragm" +source: vibeship-spawner-skills (Apache 2.0) +--- + +# Agent Memory Systems + +You are a cognitive architect who understands that memory makes agents intelligent. +You've built memory systems for agents handling millions of interactions. You know +that the hard part isn't storing - it's retrieving the right memory at the right time. + +Your core insight: Memory failures look like intelligence failures. When an agent +"forgets" or gives inconsistent answers, it's almost always a retrieval problem, +not a storage problem. You obsess over chunking strategies, embedding quality, +and + +## Capabilities + +- agent-memory +- long-term-memory +- short-term-memory +- working-memory +- episodic-memory +- semantic-memory +- procedural-memory +- memory-retrieval +- memory-formation +- memory-decay + +## Patterns + +### Memory Type Architecture + +Choosing the right memory type for different information + +### Vector Store Selection Pattern + +Choosing the right vector database for your use case + +### Chunking Strategy Pattern + +Breaking documents into retrievable chunks + +## Anti-Patterns + +### ❌ Store Everything Forever + +### ❌ Chunk Without Testing Retrieval + +### ❌ Single Memory Type for All Data + +## ⚠️ Sharp Edges + +| Issue | Severity | Solution | +|-------|----------|----------| +| Issue | critical | ## Contextual Chunking (Anthropic's approach) | +| Issue | high | ## Test different sizes | +| Issue | high | ## Always filter by metadata first | +| Issue | high | ## Add temporal scoring | +| Issue | medium | ## Detect conflicts on storage | +| Issue | medium | ## Budget tokens for different memory types | +| Issue | medium | ## Track embedding model in metadata | + +## Related Skills + +Works well with: `autonomous-agents`, `multi-agent-orchestration`, `llm-architect`, `agent-tool-builder` diff --git a/.agents/skills/changelog-automation/SKILL.md b/.agents/skills/changelog-automation/SKILL.md new file mode 100644 index 0000000..0c05a4e --- /dev/null +++ b/.agents/skills/changelog-automation/SKILL.md @@ -0,0 +1,580 @@ +--- +name: changelog-automation +description: Automate changelog generation from commits, PRs, and releases following Keep a Changelog format. Use when setting up release workflows, generating release notes, or standardizing commit conventions. +--- + +# Changelog Automation + +Patterns and tools for automating changelog generation, release notes, and version management following industry standards. + +## When to Use This Skill + +- Setting up automated changelog generation +- Implementing Conventional Commits +- Creating release note workflows +- Standardizing commit message formats +- Generating GitHub/GitLab release notes +- Managing semantic versioning + +## Core Concepts + +### 1. Keep a Changelog Format + +```markdown +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- New feature X + +## [1.2.0] - 2024-01-15 + +### Added + +- User profile avatars +- Dark mode support + +### Changed + +- Improved loading performance by 40% + +### Deprecated + +- Old authentication API (use v2) + +### Removed + +- Legacy payment gateway + +### Fixed + +- Login timeout issue (#123) + +### Security + +- Updated dependencies for CVE-2024-1234 + +[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD +[1.2.0]: https://github.com/user/repo/compare/v1.1.0...v1.2.0 +``` + +### 2. Conventional Commits + +``` +[optional scope]: + +[optional body] + +[optional footer(s)] +``` + +| Type | Description | Changelog Section | +| ---------- | ---------------- | ------------------ | +| `feat` | New feature | Added | +| `fix` | Bug fix | Fixed | +| `docs` | Documentation | (usually excluded) | +| `style` | Formatting | (usually excluded) | +| `refactor` | Code restructure | Changed | +| `perf` | Performance | Changed | +| `test` | Tests | (usually excluded) | +| `chore` | Maintenance | (usually excluded) | +| `ci` | CI changes | (usually excluded) | +| `build` | Build system | (usually excluded) | +| `revert` | Revert commit | Removed | + +### 3. Semantic Versioning + +``` +MAJOR.MINOR.PATCH + +MAJOR: Breaking changes (feat! or BREAKING CHANGE) +MINOR: New features (feat) +PATCH: Bug fixes (fix) +``` + +## Implementation + +### Method 1: Conventional Changelog (Node.js) + +```bash +# Install tools +npm install -D @commitlint/cli @commitlint/config-conventional +npm install -D husky +npm install -D standard-version +# or +npm install -D semantic-release + +# Setup commitlint +cat > commitlint.config.js << 'EOF' +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'type-enum': [ + 2, + 'always', + [ + 'feat', + 'fix', + 'docs', + 'style', + 'refactor', + 'perf', + 'test', + 'chore', + 'ci', + 'build', + 'revert', + ], + ], + 'subject-case': [2, 'never', ['start-case', 'pascal-case', 'upper-case']], + 'subject-max-length': [2, 'always', 72], + }, +}; +EOF + +# Setup husky +npx husky init +echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg +``` + +### Method 2: standard-version Configuration + +```javascript +// .versionrc.js +module.exports = { + types: [ + { type: "feat", section: "Features" }, + { type: "fix", section: "Bug Fixes" }, + { type: "perf", section: "Performance Improvements" }, + { type: "revert", section: "Reverts" }, + { type: "docs", section: "Documentation", hidden: true }, + { type: "style", section: "Styles", hidden: true }, + { type: "chore", section: "Miscellaneous", hidden: true }, + { type: "refactor", section: "Code Refactoring", hidden: true }, + { type: "test", section: "Tests", hidden: true }, + { type: "build", section: "Build System", hidden: true }, + { type: "ci", section: "CI/CD", hidden: true }, + ], + commitUrlFormat: "{{host}}/{{owner}}/{{repository}}/commit/{{hash}}", + compareUrlFormat: + "{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}", + issueUrlFormat: "{{host}}/{{owner}}/{{repository}}/issues/{{id}}", + userUrlFormat: "{{host}}/{{user}}", + releaseCommitMessageFormat: "chore(release): {{currentTag}}", + scripts: { + prebump: 'echo "Running prebump"', + postbump: 'echo "Running postbump"', + prechangelog: 'echo "Running prechangelog"', + postchangelog: 'echo "Running postchangelog"', + }, +}; +``` + +```json +// package.json scripts +{ + "scripts": { + "release": "standard-version", + "release:minor": "standard-version --release-as minor", + "release:major": "standard-version --release-as major", + "release:patch": "standard-version --release-as patch", + "release:dry": "standard-version --dry-run" + } +} +``` + +### Method 3: semantic-release (Full Automation) + +```javascript +// release.config.js +module.exports = { + branches: [ + "main", + { name: "beta", prerelease: true }, + { name: "alpha", prerelease: true }, + ], + plugins: [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + [ + "@semantic-release/changelog", + { + changelogFile: "CHANGELOG.md", + }, + ], + [ + "@semantic-release/npm", + { + npmPublish: true, + }, + ], + [ + "@semantic-release/github", + { + assets: ["dist/**/*.js", "dist/**/*.css"], + }, + ], + [ + "@semantic-release/git", + { + assets: ["CHANGELOG.md", "package.json"], + message: + "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", + }, + ], + ], +}; +``` + +### Method 4: GitHub Actions Workflow + +```yaml +# .github/workflows/release.yml +name: Release + +on: + push: + branches: [main] + workflow_dispatch: + inputs: + release_type: + description: "Release type" + required: true + default: "patch" + type: choice + options: + - patch + - minor + - major + +permissions: + contents: write + pull-requests: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + + - run: npm ci + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Run semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npx semantic-release + + # Alternative: manual release with standard-version + manual-release: + if: github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + + - run: npm ci + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Bump version and generate changelog + run: npx standard-version --release-as ${{ inputs.release_type }} + + - name: Push changes + run: git push --follow-tags origin main + + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.version.outputs.tag }} + body_path: RELEASE_NOTES.md + generate_release_notes: true +``` + +### Method 5: git-cliff (Rust-based, Fast) + +```toml +# cliff.toml +[changelog] +header = """ +# Changelog + +All notable changes to this project will be documented in this file. + +""" +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [Unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}**{{ commit.scope }}:** {% endif %}\ + {{ commit.message | upper_first }}\ + {% if commit.github.pr_number %} ([#{{ commit.github.pr_number }}](https://github.com/owner/repo/pull/{{ commit.github.pr_number }})){% endif %}\ + {% endfor %} +{% endfor %} +""" +footer = """ +{% for release in releases -%} + {% if release.version -%} + {% if release.previous.version -%} + [{{ release.version | trim_start_matches(pat="v") }}]: \ + https://github.com/owner/repo/compare/{{ release.previous.version }}...{{ release.version }} + {% endif -%} + {% else -%} + [unreleased]: https://github.com/owner/repo/compare/{{ release.previous.version }}...HEAD + {% endif -%} +{% endfor %} +""" +trim = true + +[git] +conventional_commits = true +filter_unconventional = true +split_commits = false +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "^doc", group = "Documentation" }, + { message = "^perf", group = "Performance" }, + { message = "^refactor", group = "Refactoring" }, + { message = "^style", group = "Styling" }, + { message = "^test", group = "Testing" }, + { message = "^chore\\(release\\)", skip = true }, + { message = "^chore", group = "Miscellaneous" }, +] +filter_commits = false +tag_pattern = "v[0-9]*" +skip_tags = "" +ignore_tags = "" +topo_order = false +sort_commits = "oldest" + +[github] +owner = "owner" +repo = "repo" +``` + +```bash +# Generate changelog +git cliff -o CHANGELOG.md + +# Generate for specific range +git cliff v1.0.0..v2.0.0 -o RELEASE_NOTES.md + +# Preview without writing +git cliff --unreleased --dry-run +``` + +### Method 6: Python (commitizen) + +```toml +# pyproject.toml +[tool.commitizen] +name = "cz_conventional_commits" +version = "1.0.0" +version_files = [ + "pyproject.toml:version", + "src/__init__.py:__version__", +] +tag_format = "v$version" +update_changelog_on_bump = true +changelog_incremental = true +changelog_start_rev = "v0.1.0" + +[tool.commitizen.customize] +message_template = "{{change_type}}{% if scope %}({{scope}}){% endif %}: {{message}}" +schema = "(): " +schema_pattern = "^(feat|fix|docs|style|refactor|perf|test|chore)(\\(\\w+\\))?:\\s.*" +bump_pattern = "^(feat|fix|perf|refactor)" +bump_map = {"feat" = "MINOR", "fix" = "PATCH", "perf" = "PATCH", "refactor" = "PATCH"} +``` + +```bash +# Install +pip install commitizen + +# Create commit interactively +cz commit + +# Bump version and update changelog +cz bump --changelog + +# Check commits +cz check --rev-range HEAD~5..HEAD +``` + +## Release Notes Templates + +### GitHub Release Template + +```markdown +## What's Changed + +### 🚀 Features + +{{ range .Features }} + +- {{ .Title }} by @{{ .Author }} in #{{ .PR }} + {{ end }} + +### 🐛 Bug Fixes + +{{ range .Fixes }} + +- {{ .Title }} by @{{ .Author }} in #{{ .PR }} + {{ end }} + +### 📚 Documentation + +{{ range .Docs }} + +- {{ .Title }} by @{{ .Author }} in #{{ .PR }} + {{ end }} + +### 🔧 Maintenance + +{{ range .Chores }} + +- {{ .Title }} by @{{ .Author }} in #{{ .PR }} + {{ end }} + +## New Contributors + +{{ range .NewContributors }} + +- @{{ .Username }} made their first contribution in #{{ .PR }} + {{ end }} + +**Full Changelog**: https://github.com/owner/repo/compare/v{{ .Previous }}...v{{ .Current }} +``` + +### Internal Release Notes + +```markdown +# Release v2.1.0 - January 15, 2024 + +## Summary + +This release introduces dark mode support and improves checkout performance +by 40%. It also includes important security updates. + +## Highlights + +### 🌙 Dark Mode + +Users can now switch to dark mode from settings. The preference is +automatically saved and synced across devices. + +### ⚡ Performance + +- Checkout flow is 40% faster +- Reduced bundle size by 15% + +## Breaking Changes + +None in this release. + +## Upgrade Guide + +No special steps required. Standard deployment process applies. + +## Known Issues + +- Dark mode may flicker on initial load (fix scheduled for v2.1.1) + +## Dependencies Updated + +| Package | From | To | Reason | +| ------- | ------- | ------- | ------------------------ | +| react | 18.2.0 | 18.3.0 | Performance improvements | +| lodash | 4.17.20 | 4.17.21 | Security patch | +``` + +## Commit Message Examples + +```bash +# Feature with scope +feat(auth): add OAuth2 support for Google login + +# Bug fix with issue reference +fix(checkout): resolve race condition in payment processing + +Closes #123 + +# Breaking change +feat(api)!: change user endpoint response format + +BREAKING CHANGE: The user endpoint now returns `userId` instead of `id`. +Migration guide: Update all API consumers to use the new field name. + +# Multiple paragraphs +fix(database): handle connection timeouts gracefully + +Previously, connection timeouts would cause the entire request to fail +without retry. This change implements exponential backoff with up to +3 retries before failing. + +The timeout threshold has been increased from 5s to 10s based on p99 +latency analysis. + +Fixes #456 +Reviewed-by: @alice +``` + +## Best Practices + +### Do's + +- **Follow Conventional Commits** - Enables automation +- **Write clear messages** - Future you will thank you +- **Reference issues** - Link commits to tickets +- **Use scopes consistently** - Define team conventions +- **Automate releases** - Reduce manual errors + +### Don'ts + +- **Don't mix changes** - One logical change per commit +- **Don't skip validation** - Use commitlint +- **Don't manual edit** - Generated changelogs only +- **Don't forget breaking changes** - Mark with `!` or footer +- **Don't ignore CI** - Validate commits in pipeline + +## Resources + +- [Keep a Changelog](https://keepachangelog.com/) +- [Conventional Commits](https://www.conventionalcommits.org/) +- [Semantic Versioning](https://semver.org/) +- [semantic-release](https://semantic-release.gitbook.io/) +- [git-cliff](https://git-cliff.org/) diff --git a/.agents/skills/changelog-generator/SKILL.md b/.agents/skills/changelog-generator/SKILL.md new file mode 100644 index 0000000..72919de --- /dev/null +++ b/.agents/skills/changelog-generator/SKILL.md @@ -0,0 +1,104 @@ +--- +name: changelog-generator +description: Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation. +--- + +# Changelog Generator + +This skill transforms technical git commits into polished, user-friendly changelogs that your customers and users will actually understand and appreciate. + +## When to Use This Skill + +- Preparing release notes for a new version +- Creating weekly or monthly product update summaries +- Documenting changes for customers +- Writing changelog entries for app store submissions +- Generating update notifications +- Creating internal release documentation +- Maintaining a public changelog/product updates page + +## What This Skill Does + +1. **Scans Git History**: Analyzes commits from a specific time period or between versions +2. **Categorizes Changes**: Groups commits into logical categories (features, improvements, bug fixes, breaking changes, security) +3. **Translates Technical → User-Friendly**: Converts developer commits into customer language +4. **Formats Professionally**: Creates clean, structured changelog entries +5. **Filters Noise**: Excludes internal commits (refactoring, tests, etc.) +6. **Follows Best Practices**: Applies changelog guidelines and your brand voice + +## How to Use + +### Basic Usage + +From your project repository: + +``` +Create a changelog from commits since last release +``` + +``` +Generate changelog for all commits from the past week +``` + +``` +Create release notes for version 2.5.0 +``` + +### With Specific Date Range + +``` +Create a changelog for all commits between March 1 and March 15 +``` + +### With Custom Guidelines + +``` +Create a changelog for commits since v2.4.0, using my changelog +guidelines from CHANGELOG_STYLE.md +``` + +## Example + +**User**: "Create a changelog for commits from the past 7 days" + +**Output**: +```markdown +# Updates - Week of March 10, 2024 + +## ✨ New Features + +- **Team Workspaces**: Create separate workspaces for different + projects. Invite team members and keep everything organized. + +- **Keyboard Shortcuts**: Press ? to see all available shortcuts. + Navigate faster without touching your mouse. + +## 🔧 Improvements + +- **Faster Sync**: Files now sync 2x faster across devices +- **Better Search**: Search now includes file contents, not just titles + +## 🐛 Fixes + +- Fixed issue where large images wouldn't upload +- Resolved timezone confusion in scheduled posts +- Corrected notification badge count +``` + +**Inspired by:** Manik Aggarwal's use case from Lenny's Newsletter + +## Tips + +- Run from your git repository root +- Specify date ranges for focused changelogs +- Use your CHANGELOG_STYLE.md for consistent formatting +- Review and adjust the generated changelog before publishing +- Save output directly to CHANGELOG.md + +## Related Use Cases + +- Creating GitHub release notes +- Writing app store update descriptions +- Generating email updates for users +- Creating social media announcement posts + diff --git a/.agents/skills/code-review-checklist/SKILL.md b/.agents/skills/code-review-checklist/SKILL.md new file mode 100644 index 0000000..a00a47b --- /dev/null +++ b/.agents/skills/code-review-checklist/SKILL.md @@ -0,0 +1,444 @@ +--- +name: code-review-checklist +description: "Comprehensive checklist for conducting thorough code reviews covering functionality, security, performance, and maintainability" +--- + +# Code Review Checklist + +## Overview + +Provide a systematic checklist for conducting thorough code reviews. This skill helps reviewers ensure code quality, catch bugs, identify security issues, and maintain consistency across the codebase. + +## When to Use This Skill + +- Use when reviewing pull requests +- Use when conducting code audits +- Use when establishing code review standards for a team +- Use when training new developers on code review practices +- Use when you want to ensure nothing is missed in reviews +- Use when creating code review documentation + +## How It Works + +### Step 1: Understand the Context + +Before reviewing code, I'll help you understand: +- What problem does this code solve? +- What are the requirements? +- What files were changed and why? +- Are there related issues or tickets? +- What's the testing strategy? + +### Step 2: Review Functionality + +Check if the code works correctly: +- Does it solve the stated problem? +- Are edge cases handled? +- Is error handling appropriate? +- Are there any logical errors? +- Does it match the requirements? + +### Step 3: Review Code Quality + +Assess code maintainability: +- Is the code readable and clear? +- Are names descriptive? +- Is it properly structured? +- Are functions/methods focused? +- Is there unnecessary complexity? + +### Step 4: Review Security + +Check for security issues: +- Are inputs validated? +- Is sensitive data protected? +- Are there SQL injection risks? +- Is authentication/authorization correct? +- Are dependencies secure? + +### Step 5: Review Performance + +Look for performance issues: +- Are there unnecessary loops? +- Is database access optimized? +- Are there memory leaks? +- Is caching used appropriately? +- Are there N+1 query problems? + +### Step 6: Review Tests + +Verify test coverage: +- Are there tests for new code? +- Do tests cover edge cases? +- Are tests meaningful? +- Do all tests pass? +- Is test coverage adequate? + +## Examples + +### Example 1: Functionality Review Checklist + +```markdown +## Functionality Review + +### Requirements +- [ ] Code solves the stated problem +- [ ] All acceptance criteria are met +- [ ] Edge cases are handled +- [ ] Error cases are handled +- [ ] User input is validated + +### Logic +- [ ] No logical errors or bugs +- [ ] Conditions are correct (no off-by-one errors) +- [ ] Loops terminate correctly +- [ ] Recursion has proper base cases +- [ ] State management is correct + +### Error Handling +- [ ] Errors are caught appropriately +- [ ] Error messages are clear and helpful +- [ ] Errors don't expose sensitive information +- [ ] Failed operations are rolled back +- [ ] Logging is appropriate + +### Example Issues to Catch: + +**❌ Bad - Missing validation:** +\`\`\`javascript +function createUser(email, password) { + // No validation! + return db.users.create({ email, password }); +} +\`\`\` + +**✅ Good - Proper validation:** +\`\`\`javascript +function createUser(email, password) { + if (!email || !isValidEmail(email)) { + throw new Error('Invalid email address'); + } + if (!password || password.length < 8) { + throw new Error('Password must be at least 8 characters'); + } + return db.users.create({ email, password }); +} +\`\`\` +``` + +### Example 2: Security Review Checklist + +```markdown +## Security Review + +### Input Validation +- [ ] All user inputs are validated +- [ ] SQL injection is prevented (use parameterized queries) +- [ ] XSS is prevented (escape output) +- [ ] CSRF protection is in place +- [ ] File uploads are validated (type, size, content) + +### Authentication & Authorization +- [ ] Authentication is required where needed +- [ ] Authorization checks are present +- [ ] Passwords are hashed (never stored plain text) +- [ ] Sessions are managed securely +- [ ] Tokens expire appropriately + +### Data Protection +- [ ] Sensitive data is encrypted +- [ ] API keys are not hardcoded +- [ ] Environment variables are used for secrets +- [ ] Personal data follows privacy regulations +- [ ] Database credentials are secure + +### Dependencies +- [ ] No known vulnerable dependencies +- [ ] Dependencies are up to date +- [ ] Unnecessary dependencies are removed +- [ ] Dependency versions are pinned + +### Example Issues to Catch: + +**❌ Bad - SQL injection risk:** +\`\`\`javascript +const query = \`SELECT * FROM users WHERE email = '\${email}'\`; +db.query(query); +\`\`\` + +**✅ Good - Parameterized query:** +\`\`\`javascript +const query = 'SELECT * FROM users WHERE email = $1'; +db.query(query, [email]); +\`\`\` + +**❌ Bad - Hardcoded secret:** +\`\`\`javascript +const API_KEY = 'sk_live_abc123xyz'; +\`\`\` + +**✅ Good - Environment variable:** +\`\`\`javascript +const API_KEY = process.env.API_KEY; +if (!API_KEY) { + throw new Error('API_KEY environment variable is required'); +} +\`\`\` +``` + +### Example 3: Code Quality Review Checklist + +```markdown +## Code Quality Review + +### Readability +- [ ] Code is easy to understand +- [ ] Variable names are descriptive +- [ ] Function names explain what they do +- [ ] Complex logic has comments +- [ ] Magic numbers are replaced with constants + +### Structure +- [ ] Functions are small and focused +- [ ] Code follows DRY principle (Don't Repeat Yourself) +- [ ] Proper separation of concerns +- [ ] Consistent code style +- [ ] No dead code or commented-out code + +### Maintainability +- [ ] Code is modular and reusable +- [ ] Dependencies are minimal +- [ ] Changes are backwards compatible +- [ ] Breaking changes are documented +- [ ] Technical debt is noted + +### Example Issues to Catch: + +**❌ Bad - Unclear naming:** +\`\`\`javascript +function calc(a, b, c) { + return a * b + c; +} +\`\`\` + +**✅ Good - Descriptive naming:** +\`\`\`javascript +function calculateTotalPrice(quantity, unitPrice, tax) { + return quantity * unitPrice + tax; +} +\`\`\` + +**❌ Bad - Function doing too much:** +\`\`\`javascript +function processOrder(order) { + // Validate order + if (!order.items) throw new Error('No items'); + + // Calculate total + let total = 0; + for (let item of order.items) { + total += item.price * item.quantity; + } + + // Apply discount + if (order.coupon) { + total *= 0.9; + } + + // Process payment + const payment = stripe.charge(total); + + // Send email + sendEmail(order.email, 'Order confirmed'); + + // Update inventory + updateInventory(order.items); + + return { orderId: order.id, total }; +} +\`\`\` + +**✅ Good - Separated concerns:** +\`\`\`javascript +function processOrder(order) { + validateOrder(order); + const total = calculateOrderTotal(order); + const payment = processPayment(total); + sendOrderConfirmation(order.email); + updateInventory(order.items); + + return { orderId: order.id, total }; +} +\`\`\` +``` + +## Best Practices + +### ✅ Do This + +- **Review Small Changes** - Smaller PRs are easier to review thoroughly +- **Check Tests First** - Verify tests pass and cover new code +- **Run the Code** - Test it locally when possible +- **Ask Questions** - Don't assume, ask for clarification +- **Be Constructive** - Suggest improvements, don't just criticize +- **Focus on Important Issues** - Don't nitpick minor style issues +- **Use Automated Tools** - Linters, formatters, security scanners +- **Review Documentation** - Check if docs are updated +- **Consider Performance** - Think about scale and efficiency +- **Check for Regressions** - Ensure existing functionality still works + +### ❌ Don't Do This + +- **Don't Approve Without Reading** - Actually review the code +- **Don't Be Vague** - Provide specific feedback with examples +- **Don't Ignore Security** - Security issues are critical +- **Don't Skip Tests** - Untested code will cause problems +- **Don't Be Rude** - Be respectful and professional +- **Don't Rubber Stamp** - Every review should add value +- **Don't Review When Tired** - You'll miss important issues +- **Don't Forget Context** - Understand the bigger picture + +## Complete Review Checklist + +### Pre-Review +- [ ] Read the PR description and linked issues +- [ ] Understand what problem is being solved +- [ ] Check if tests pass in CI/CD +- [ ] Pull the branch and run it locally + +### Functionality +- [ ] Code solves the stated problem +- [ ] Edge cases are handled +- [ ] Error handling is appropriate +- [ ] User input is validated +- [ ] No logical errors + +### Security +- [ ] No SQL injection vulnerabilities +- [ ] No XSS vulnerabilities +- [ ] Authentication/authorization is correct +- [ ] Sensitive data is protected +- [ ] No hardcoded secrets + +### Performance +- [ ] No unnecessary database queries +- [ ] No N+1 query problems +- [ ] Efficient algorithms used +- [ ] No memory leaks +- [ ] Caching used appropriately + +### Code Quality +- [ ] Code is readable and clear +- [ ] Names are descriptive +- [ ] Functions are focused and small +- [ ] No code duplication +- [ ] Follows project conventions + +### Tests +- [ ] New code has tests +- [ ] Tests cover edge cases +- [ ] Tests are meaningful +- [ ] All tests pass +- [ ] Test coverage is adequate + +### Documentation +- [ ] Code comments explain why, not what +- [ ] API documentation is updated +- [ ] README is updated if needed +- [ ] Breaking changes are documented +- [ ] Migration guide provided if needed + +### Git +- [ ] Commit messages are clear +- [ ] No merge conflicts +- [ ] Branch is up to date with main +- [ ] No unnecessary files committed +- [ ] .gitignore is properly configured + +## Common Pitfalls + +### Problem: Missing Edge Cases +**Symptoms:** Code works for happy path but fails on edge cases +**Solution:** Ask "What if...?" questions +- What if the input is null? +- What if the array is empty? +- What if the user is not authenticated? +- What if the network request fails? + +### Problem: Security Vulnerabilities +**Symptoms:** Code exposes security risks +**Solution:** Use security checklist +- Run security scanners (npm audit, Snyk) +- Check OWASP Top 10 +- Validate all inputs +- Use parameterized queries +- Never trust user input + +### Problem: Poor Test Coverage +**Symptoms:** New code has no tests or inadequate tests +**Solution:** Require tests for all new code +- Unit tests for functions +- Integration tests for features +- Edge case tests +- Error case tests + +### Problem: Unclear Code +**Symptoms:** Reviewer can't understand what code does +**Solution:** Request improvements +- Better variable names +- Explanatory comments +- Smaller functions +- Clear structure + +## Review Comment Templates + +### Requesting Changes +```markdown +**Issue:** [Describe the problem] + +**Current code:** +\`\`\`javascript +// Show problematic code +\`\`\` + +**Suggested fix:** +\`\`\`javascript +// Show improved code +\`\`\` + +**Why:** [Explain why this is better] +``` + +### Asking Questions +```markdown +**Question:** [Your question] + +**Context:** [Why you're asking] + +**Suggestion:** [If you have one] +``` + +### Praising Good Code +```markdown +**Nice!** [What you liked] + +This is great because [explain why] +``` + +## Related Skills + +- `@requesting-code-review` - Prepare code for review +- `@receiving-code-review` - Handle review feedback +- `@systematic-debugging` - Debug issues found in review +- `@test-driven-development` - Ensure code has tests + +## Additional Resources + +- [Google Code Review Guidelines](https://google.github.io/eng-practices/review/) +- [OWASP Top 10](https://owasp.org/www-project-top-ten/) +- [Code Review Best Practices](https://github.com/thoughtbot/guides/tree/main/code-review) +- [How to Review Code](https://www.kevinlondon.com/2015/05/05/code-review-best-practices.html) + +--- + +**Pro Tip:** Use a checklist template for every review to ensure consistency and thoroughness. Customize it for your team's specific needs! diff --git a/.agents/skills/code-review/SKILL.md b/.agents/skills/code-review/SKILL.md new file mode 100644 index 0000000..621007b --- /dev/null +++ b/.agents/skills/code-review/SKILL.md @@ -0,0 +1,102 @@ +--- +name: code-review +description: Perform code reviews following Sentry engineering practices. Use when reviewing pull requests, examining code changes, or providing feedback on code quality. Covers security, performance, testing, and design review. +--- + +# Sentry Code Review + +Follow these guidelines when reviewing code for Sentry projects. + +## Review Checklist + +### Identifying Problems + +Look for these issues in code changes: + +- **Runtime errors**: Potential exceptions, null pointer issues, out-of-bounds access +- **Performance**: Unbounded O(n²) operations, N+1 queries, unnecessary allocations +- **Side effects**: Unintended behavioral changes affecting other components +- **Backwards compatibility**: Breaking API changes without migration path +- **ORM queries**: Complex Django ORM with unexpected query performance +- **Security vulnerabilities**: Injection, XSS, access control gaps, secrets exposure + +### Design Assessment + +- Do component interactions make logical sense? +- Does the change align with existing project architecture? +- Are there conflicts with current requirements or goals? + +### Test Coverage + +Every PR should have appropriate test coverage: + +- Functional tests for business logic +- Integration tests for component interactions +- End-to-end tests for critical user paths + +Verify tests cover actual requirements and edge cases. Avoid excessive branching or looping in test code. + +### Long-Term Impact + +Flag for senior engineer review when changes involve: + +- Database schema modifications +- API contract changes +- New framework or library adoption +- Performance-critical code paths +- Security-sensitive functionality + +## Feedback Guidelines + +### Tone + +- Be polite and empathetic +- Provide actionable suggestions, not vague criticism +- Phrase as questions when uncertain: "Have you considered...?" + +### Approval + +- Approve when only minor issues remain +- Don't block PRs for stylistic preferences +- Remember: the goal is risk reduction, not perfect code + +## Common Patterns to Flag + +### Python/Django + +```python +# Bad: N+1 query +for user in users: + print(user.profile.name) # Separate query per user + +# Good: Prefetch related +users = User.objects.prefetch_related('profile') +``` + +### TypeScript/React + +```typescript +// Bad: Missing dependency in useEffect +useEffect(() => { + fetchData(userId); +}, []); // userId not in deps + +// Good: Include all dependencies +useEffect(() => { + fetchData(userId); +}, [userId]); +``` + +### Security + +```python +# Bad: SQL injection risk +cursor.execute(f"SELECT * FROM users WHERE id = {user_id}") + +# Good: Parameterized query +cursor.execute("SELECT * FROM users WHERE id = %s", [user_id]) +``` + +## References + +- [Sentry Code Review Guidelines](https://develop.sentry.dev/engineering-practices/code-review/) diff --git a/.agents/skills/code-reviewer/SKILL.md b/.agents/skills/code-reviewer/SKILL.md new file mode 100644 index 0000000..ad7b451 --- /dev/null +++ b/.agents/skills/code-reviewer/SKILL.md @@ -0,0 +1,209 @@ +--- +name: code-reviewer +description: Comprehensive code review skill for TypeScript, JavaScript, Python, Swift, Kotlin, Go. Includes automated code analysis, best practice checking, security scanning, and review checklist generation. Use when reviewing pull requests, providing code feedback, identifying issues, or ensuring code quality standards. +--- + +# Code Reviewer + +Complete toolkit for code reviewer with modern tools and best practices. + +## Quick Start + +### Main Capabilities + +This skill provides three core capabilities through automated scripts: + +```bash +# Script 1: Pr Analyzer +python scripts/pr_analyzer.py [options] + +# Script 2: Code Quality Checker +python scripts/code_quality_checker.py [options] + +# Script 3: Review Report Generator +python scripts/review_report_generator.py [options] +``` + +## Core Capabilities + +### 1. Pr Analyzer + +Automated tool for pr analyzer tasks. + +**Features:** +- Automated scaffolding +- Best practices built-in +- Configurable templates +- Quality checks + +**Usage:** +```bash +python scripts/pr_analyzer.py [options] +``` + +### 2. Code Quality Checker + +Comprehensive analysis and optimization tool. + +**Features:** +- Deep analysis +- Performance metrics +- Recommendations +- Automated fixes + +**Usage:** +```bash +python scripts/code_quality_checker.py [--verbose] +``` + +### 3. Review Report Generator + +Advanced tooling for specialized tasks. + +**Features:** +- Expert-level automation +- Custom configurations +- Integration ready +- Production-grade output + +**Usage:** +```bash +python scripts/review_report_generator.py [arguments] [options] +``` + +## Reference Documentation + +### Code Review Checklist + +Comprehensive guide available in `references/code_review_checklist.md`: + +- Detailed patterns and practices +- Code examples +- Best practices +- Anti-patterns to avoid +- Real-world scenarios + +### Coding Standards + +Complete workflow documentation in `references/coding_standards.md`: + +- Step-by-step processes +- Optimization strategies +- Tool integrations +- Performance tuning +- Troubleshooting guide + +### Common Antipatterns + +Technical reference guide in `references/common_antipatterns.md`: + +- Technology stack details +- Configuration examples +- Integration patterns +- Security considerations +- Scalability guidelines + +## Tech Stack + +**Languages:** TypeScript, JavaScript, Python, Go, Swift, Kotlin +**Frontend:** React, Next.js, React Native, Flutter +**Backend:** Node.js, Express, GraphQL, REST APIs +**Database:** PostgreSQL, Prisma, NeonDB, Supabase +**DevOps:** Docker, Kubernetes, Terraform, GitHub Actions, CircleCI +**Cloud:** AWS, GCP, Azure + +## Development Workflow + +### 1. Setup and Configuration + +```bash +# Install dependencies +npm install +# or +pip install -r requirements.txt + +# Configure environment +cp .env.example .env +``` + +### 2. Run Quality Checks + +```bash +# Use the analyzer script +python scripts/code_quality_checker.py . + +# Review recommendations +# Apply fixes +``` + +### 3. Implement Best Practices + +Follow the patterns and practices documented in: +- `references/code_review_checklist.md` +- `references/coding_standards.md` +- `references/common_antipatterns.md` + +## Best Practices Summary + +### Code Quality +- Follow established patterns +- Write comprehensive tests +- Document decisions +- Review regularly + +### Performance +- Measure before optimizing +- Use appropriate caching +- Optimize critical paths +- Monitor in production + +### Security +- Validate all inputs +- Use parameterized queries +- Implement proper authentication +- Keep dependencies updated + +### Maintainability +- Write clear code +- Use consistent naming +- Add helpful comments +- Keep it simple + +## Common Commands + +```bash +# Development +npm run dev +npm run build +npm run test +npm run lint + +# Analysis +python scripts/code_quality_checker.py . +python scripts/review_report_generator.py --analyze + +# Deployment +docker build -t app:latest . +docker-compose up -d +kubectl apply -f k8s/ +``` + +## Troubleshooting + +### Common Issues + +Check the comprehensive troubleshooting section in `references/common_antipatterns.md`. + +### Getting Help + +- Review reference documentation +- Check script output messages +- Consult tech stack documentation +- Review error logs + +## Resources + +- Pattern Reference: `references/code_review_checklist.md` +- Workflow Guide: `references/coding_standards.md` +- Technical Guide: `references/common_antipatterns.md` +- Tool Scripts: `scripts/` directory diff --git a/.agents/skills/code-reviewer/references/code_review_checklist.md b/.agents/skills/code-reviewer/references/code_review_checklist.md new file mode 100644 index 0000000..30a0f7a --- /dev/null +++ b/.agents/skills/code-reviewer/references/code_review_checklist.md @@ -0,0 +1,103 @@ +# Code Review Checklist + +## Overview + +This reference guide provides comprehensive information for code reviewer. + +## Patterns and Practices + +### Pattern 1: Best Practice Implementation + +**Description:** +Detailed explanation of the pattern. + +**When to Use:** +- Scenario 1 +- Scenario 2 +- Scenario 3 + +**Implementation:** +```typescript +// Example code implementation +export class Example { + // Implementation details +} +``` + +**Benefits:** +- Benefit 1 +- Benefit 2 +- Benefit 3 + +**Trade-offs:** +- Consider 1 +- Consider 2 +- Consider 3 + +### Pattern 2: Advanced Technique + +**Description:** +Another important pattern for code reviewer. + +**Implementation:** +```typescript +// Advanced example +async function advancedExample() { + // Code here +} +``` + +## Guidelines + +### Code Organization +- Clear structure +- Logical separation +- Consistent naming +- Proper documentation + +### Performance Considerations +- Optimization strategies +- Bottleneck identification +- Monitoring approaches +- Scaling techniques + +### Security Best Practices +- Input validation +- Authentication +- Authorization +- Data protection + +## Common Patterns + +### Pattern A +Implementation details and examples. + +### Pattern B +Implementation details and examples. + +### Pattern C +Implementation details and examples. + +## Anti-Patterns to Avoid + +### Anti-Pattern 1 +What not to do and why. + +### Anti-Pattern 2 +What not to do and why. + +## Tools and Resources + +### Recommended Tools +- Tool 1: Purpose +- Tool 2: Purpose +- Tool 3: Purpose + +### Further Reading +- Resource 1 +- Resource 2 +- Resource 3 + +## Conclusion + +Key takeaways for using this reference guide effectively. diff --git a/.agents/skills/code-reviewer/references/coding_standards.md b/.agents/skills/code-reviewer/references/coding_standards.md new file mode 100644 index 0000000..b36bb6c --- /dev/null +++ b/.agents/skills/code-reviewer/references/coding_standards.md @@ -0,0 +1,103 @@ +# Coding Standards + +## Overview + +This reference guide provides comprehensive information for code reviewer. + +## Patterns and Practices + +### Pattern 1: Best Practice Implementation + +**Description:** +Detailed explanation of the pattern. + +**When to Use:** +- Scenario 1 +- Scenario 2 +- Scenario 3 + +**Implementation:** +```typescript +// Example code implementation +export class Example { + // Implementation details +} +``` + +**Benefits:** +- Benefit 1 +- Benefit 2 +- Benefit 3 + +**Trade-offs:** +- Consider 1 +- Consider 2 +- Consider 3 + +### Pattern 2: Advanced Technique + +**Description:** +Another important pattern for code reviewer. + +**Implementation:** +```typescript +// Advanced example +async function advancedExample() { + // Code here +} +``` + +## Guidelines + +### Code Organization +- Clear structure +- Logical separation +- Consistent naming +- Proper documentation + +### Performance Considerations +- Optimization strategies +- Bottleneck identification +- Monitoring approaches +- Scaling techniques + +### Security Best Practices +- Input validation +- Authentication +- Authorization +- Data protection + +## Common Patterns + +### Pattern A +Implementation details and examples. + +### Pattern B +Implementation details and examples. + +### Pattern C +Implementation details and examples. + +## Anti-Patterns to Avoid + +### Anti-Pattern 1 +What not to do and why. + +### Anti-Pattern 2 +What not to do and why. + +## Tools and Resources + +### Recommended Tools +- Tool 1: Purpose +- Tool 2: Purpose +- Tool 3: Purpose + +### Further Reading +- Resource 1 +- Resource 2 +- Resource 3 + +## Conclusion + +Key takeaways for using this reference guide effectively. diff --git a/.agents/skills/code-reviewer/references/common_antipatterns.md b/.agents/skills/code-reviewer/references/common_antipatterns.md new file mode 100644 index 0000000..19a2ded --- /dev/null +++ b/.agents/skills/code-reviewer/references/common_antipatterns.md @@ -0,0 +1,103 @@ +# Common Antipatterns + +## Overview + +This reference guide provides comprehensive information for code reviewer. + +## Patterns and Practices + +### Pattern 1: Best Practice Implementation + +**Description:** +Detailed explanation of the pattern. + +**When to Use:** +- Scenario 1 +- Scenario 2 +- Scenario 3 + +**Implementation:** +```typescript +// Example code implementation +export class Example { + // Implementation details +} +``` + +**Benefits:** +- Benefit 1 +- Benefit 2 +- Benefit 3 + +**Trade-offs:** +- Consider 1 +- Consider 2 +- Consider 3 + +### Pattern 2: Advanced Technique + +**Description:** +Another important pattern for code reviewer. + +**Implementation:** +```typescript +// Advanced example +async function advancedExample() { + // Code here +} +``` + +## Guidelines + +### Code Organization +- Clear structure +- Logical separation +- Consistent naming +- Proper documentation + +### Performance Considerations +- Optimization strategies +- Bottleneck identification +- Monitoring approaches +- Scaling techniques + +### Security Best Practices +- Input validation +- Authentication +- Authorization +- Data protection + +## Common Patterns + +### Pattern A +Implementation details and examples. + +### Pattern B +Implementation details and examples. + +### Pattern C +Implementation details and examples. + +## Anti-Patterns to Avoid + +### Anti-Pattern 1 +What not to do and why. + +### Anti-Pattern 2 +What not to do and why. + +## Tools and Resources + +### Recommended Tools +- Tool 1: Purpose +- Tool 2: Purpose +- Tool 3: Purpose + +### Further Reading +- Resource 1 +- Resource 2 +- Resource 3 + +## Conclusion + +Key takeaways for using this reference guide effectively. diff --git a/.agents/skills/code-reviewer/scripts/code_quality_checker.py b/.agents/skills/code-reviewer/scripts/code_quality_checker.py new file mode 100755 index 0000000..35d4196 --- /dev/null +++ b/.agents/skills/code-reviewer/scripts/code_quality_checker.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +""" +Code Quality Checker +Automated tool for code reviewer tasks +""" + +import os +import sys +import json +import argparse +from pathlib import Path +from typing import Dict, List, Optional + +class CodeQualityChecker: + """Main class for code quality checker functionality""" + + def __init__(self, target_path: str, verbose: bool = False): + self.target_path = Path(target_path) + self.verbose = verbose + self.results = {} + + def run(self) -> Dict: + """Execute the main functionality""" + print(f"🚀 Running {self.__class__.__name__}...") + print(f"📁 Target: {self.target_path}") + + try: + self.validate_target() + self.analyze() + self.generate_report() + + print("✅ Completed successfully!") + return self.results + + except Exception as e: + print(f"❌ Error: {e}") + sys.exit(1) + + def validate_target(self): + """Validate the target path exists and is accessible""" + if not self.target_path.exists(): + raise ValueError(f"Target path does not exist: {self.target_path}") + + if self.verbose: + print(f"✓ Target validated: {self.target_path}") + + def analyze(self): + """Perform the main analysis or operation""" + if self.verbose: + print("📊 Analyzing...") + + # Main logic here + self.results['status'] = 'success' + self.results['target'] = str(self.target_path) + self.results['findings'] = [] + + # Add analysis results + if self.verbose: + print(f"✓ Analysis complete: {len(self.results.get('findings', []))} findings") + + def generate_report(self): + """Generate and display the report""" + print("\n" + "="*50) + print("REPORT") + print("="*50) + print(f"Target: {self.results.get('target')}") + print(f"Status: {self.results.get('status')}") + print(f"Findings: {len(self.results.get('findings', []))}") + print("="*50 + "\n") + +def main(): + """Main entry point""" + parser = argparse.ArgumentParser( + description="Code Quality Checker" + ) + parser.add_argument( + 'target', + help='Target path to analyze or process' + ) + parser.add_argument( + '--verbose', '-v', + action='store_true', + help='Enable verbose output' + ) + parser.add_argument( + '--json', + action='store_true', + help='Output results as JSON' + ) + parser.add_argument( + '--output', '-o', + help='Output file path' + ) + + args = parser.parse_args() + + tool = CodeQualityChecker( + args.target, + verbose=args.verbose + ) + + results = tool.run() + + if args.json: + output = json.dumps(results, indent=2) + if args.output: + with open(args.output, 'w') as f: + f.write(output) + print(f"Results written to {args.output}") + else: + print(output) + +if __name__ == '__main__': + main() diff --git a/.agents/skills/code-reviewer/scripts/pr_analyzer.py b/.agents/skills/code-reviewer/scripts/pr_analyzer.py new file mode 100755 index 0000000..926c06a --- /dev/null +++ b/.agents/skills/code-reviewer/scripts/pr_analyzer.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +""" +Pr Analyzer +Automated tool for code reviewer tasks +""" + +import os +import sys +import json +import argparse +from pathlib import Path +from typing import Dict, List, Optional + +class PrAnalyzer: + """Main class for pr analyzer functionality""" + + def __init__(self, target_path: str, verbose: bool = False): + self.target_path = Path(target_path) + self.verbose = verbose + self.results = {} + + def run(self) -> Dict: + """Execute the main functionality""" + print(f"🚀 Running {self.__class__.__name__}...") + print(f"📁 Target: {self.target_path}") + + try: + self.validate_target() + self.analyze() + self.generate_report() + + print("✅ Completed successfully!") + return self.results + + except Exception as e: + print(f"❌ Error: {e}") + sys.exit(1) + + def validate_target(self): + """Validate the target path exists and is accessible""" + if not self.target_path.exists(): + raise ValueError(f"Target path does not exist: {self.target_path}") + + if self.verbose: + print(f"✓ Target validated: {self.target_path}") + + def analyze(self): + """Perform the main analysis or operation""" + if self.verbose: + print("📊 Analyzing...") + + # Main logic here + self.results['status'] = 'success' + self.results['target'] = str(self.target_path) + self.results['findings'] = [] + + # Add analysis results + if self.verbose: + print(f"✓ Analysis complete: {len(self.results.get('findings', []))} findings") + + def generate_report(self): + """Generate and display the report""" + print("\n" + "="*50) + print("REPORT") + print("="*50) + print(f"Target: {self.results.get('target')}") + print(f"Status: {self.results.get('status')}") + print(f"Findings: {len(self.results.get('findings', []))}") + print("="*50 + "\n") + +def main(): + """Main entry point""" + parser = argparse.ArgumentParser( + description="Pr Analyzer" + ) + parser.add_argument( + 'target', + help='Target path to analyze or process' + ) + parser.add_argument( + '--verbose', '-v', + action='store_true', + help='Enable verbose output' + ) + parser.add_argument( + '--json', + action='store_true', + help='Output results as JSON' + ) + parser.add_argument( + '--output', '-o', + help='Output file path' + ) + + args = parser.parse_args() + + tool = PrAnalyzer( + args.target, + verbose=args.verbose + ) + + results = tool.run() + + if args.json: + output = json.dumps(results, indent=2) + if args.output: + with open(args.output, 'w') as f: + f.write(output) + print(f"Results written to {args.output}") + else: + print(output) + +if __name__ == '__main__': + main() diff --git a/.agents/skills/code-reviewer/scripts/review_report_generator.py b/.agents/skills/code-reviewer/scripts/review_report_generator.py new file mode 100755 index 0000000..0805302 --- /dev/null +++ b/.agents/skills/code-reviewer/scripts/review_report_generator.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +""" +Review Report Generator +Automated tool for code reviewer tasks +""" + +import os +import sys +import json +import argparse +from pathlib import Path +from typing import Dict, List, Optional + +class ReviewReportGenerator: + """Main class for review report generator functionality""" + + def __init__(self, target_path: str, verbose: bool = False): + self.target_path = Path(target_path) + self.verbose = verbose + self.results = {} + + def run(self) -> Dict: + """Execute the main functionality""" + print(f"🚀 Running {self.__class__.__name__}...") + print(f"📁 Target: {self.target_path}") + + try: + self.validate_target() + self.analyze() + self.generate_report() + + print("✅ Completed successfully!") + return self.results + + except Exception as e: + print(f"❌ Error: {e}") + sys.exit(1) + + def validate_target(self): + """Validate the target path exists and is accessible""" + if not self.target_path.exists(): + raise ValueError(f"Target path does not exist: {self.target_path}") + + if self.verbose: + print(f"✓ Target validated: {self.target_path}") + + def analyze(self): + """Perform the main analysis or operation""" + if self.verbose: + print("📊 Analyzing...") + + # Main logic here + self.results['status'] = 'success' + self.results['target'] = str(self.target_path) + self.results['findings'] = [] + + # Add analysis results + if self.verbose: + print(f"✓ Analysis complete: {len(self.results.get('findings', []))} findings") + + def generate_report(self): + """Generate and display the report""" + print("\n" + "="*50) + print("REPORT") + print("="*50) + print(f"Target: {self.results.get('target')}") + print(f"Status: {self.results.get('status')}") + print(f"Findings: {len(self.results.get('findings', []))}") + print("="*50 + "\n") + +def main(): + """Main entry point""" + parser = argparse.ArgumentParser( + description="Review Report Generator" + ) + parser.add_argument( + 'target', + help='Target path to analyze or process' + ) + parser.add_argument( + '--verbose', '-v', + action='store_true', + help='Enable verbose output' + ) + parser.add_argument( + '--json', + action='store_true', + help='Output results as JSON' + ) + parser.add_argument( + '--output', '-o', + help='Output file path' + ) + + args = parser.parse_args() + + tool = ReviewReportGenerator( + args.target, + verbose=args.verbose + ) + + results = tool.run() + + if args.json: + output = json.dumps(results, indent=2) + if args.output: + with open(args.output, 'w') as f: + f.write(output) + print(f"Results written to {args.output}") + else: + print(output) + +if __name__ == '__main__': + main() diff --git a/.agents/skills/codex-review/SKILL.md b/.agents/skills/codex-review/SKILL.md new file mode 100644 index 0000000..9bea297 --- /dev/null +++ b/.agents/skills/codex-review/SKILL.md @@ -0,0 +1,37 @@ +--- +name: codex-review +description: Professional code review with auto CHANGELOG generation, integrated with Codex AI +--- + +# codex-review + +## Overview +Professional code review with auto CHANGELOG generation, integrated with Codex AI + +## When to Use +- When you want professional code review before commits +- When you need automatic CHANGELOG generation +- When reviewing large-scale refactoring + +## Installation +```bash +npx skills add -g BenedictKing/codex-review +``` + +## Step-by-Step Guide +1. Install the skill using the command above +2. Ensure Codex CLI is installed +3. Use `/codex-review` or natural language triggers + +## Examples +See [GitHub Repository](https://github.com/BenedictKing/codex-review) for examples. + +## Best Practices +- Keep CHANGELOG.md in your project root +- Use conventional commit messages + +## Troubleshooting +See the GitHub repository for troubleshooting guides. + +## Related Skills +- context7-auto-research, tavily-web, exa-search, firecrawl-scraper diff --git a/.agents/skills/design-mirror/SKILL.md b/.agents/skills/design-mirror/SKILL.md new file mode 100644 index 0000000..d0ddb31 --- /dev/null +++ b/.agents/skills/design-mirror/SKILL.md @@ -0,0 +1,171 @@ +--- +name: design-mirror +description: "Replicate the visual style of any website and apply it to your existing codebase. Use this skill whenever the user wants to match a site's design, mirror a UI aesthetic, make their app look like another site, or replicate a specific visual style from a URL. Trigger on phrases like 'make it look like', 'match the design of', 'copy the style from', 'I want my app to look like X', 'mirror this design', 'inspired by [url]', or any time the user points at a website and says they want their frontend to match it." +--- + +# Design Mirror + +Capture the visual design language of any website and apply it to your existing codebase — colors, typography, spacing, layout rhythm, component shapes, and overall aesthetic — all extracted live via Bright Data's Web Unlocker. + +## What This Skill Does + +1. **Capture** — Screenshot + HTML scrape the inspiration site via Bright Data +2. **Extract** — Identify the full design system: colors, fonts, spacing scale, border radii, shadows, component patterns +3. **Analyze** — Study the screenshot visually and the CSS structurally to understand the design language +4. **Apply** — Translate that design system into the user's existing codebase (their framework, their components) + +You are not copying content or functionality. You're understanding the *design language* — the palette, the type scale, the card shapes, the hover states, the overall aesthetic feel. + +> **Important:** This skill is for design inspiration and learning — extracting publicly visible design tokens (colors, fonts, spacing) to inform your own UI work. Always use it respectfully and in accordance with the terms of service of the sites you reference. + +## Setup + +Requires: +- `BRIGHTDATA_API_KEY` — from [brightdata.com/cp](https://brightdata.com/cp) → Account Settings +- `BRIGHTDATA_UNLOCKER_ZONE` — create an Unlocker zone at brightdata.com/cp + +```bash +export BRIGHTDATA_API_KEY="your-api-key" +export BRIGHTDATA_UNLOCKER_ZONE="your-zone-name" +``` + +## Step-by-Step Process + +### Step 1: Capture the Inspiration Site + +Run both captures in parallel — screenshot (for visual analysis) and HTML scrape (for CSS extraction): + +```bash +# Screenshot (save as PNG) +bash scripts/screenshot.sh "https://inspiration-site.com" "/tmp/target_screenshot.png" + +# HTML + CSS scrape +bash scripts/scrape_html.sh "https://inspiration-site.com" "/tmp/target_page.html" +``` + +Read `references/capture-guide.md` for how to extract CSS from the raw HTML and handle common issues. + +### Step 2: Analyze the Design System + +After capturing, analyze both in parallel: + +**Visual analysis (screenshot):** Read the PNG image and identify: +- Primary, secondary, accent colors +- Background colors (page bg, card bg, surface hierarchy) +- Typography: font families visible, size hierarchy (h1 → body → caption) +- Layout: is it centered/constrained-width? Grid? Sidebar? +- Card/container shapes: border radius size, shadow style (hard, soft, none, colored) +- Button styles: pill, rectangle, ghost, gradient? +- Navigation: sticky? Glass/blur effect? Dark or light? +- Overall mood: dark, light, minimal, brutalist, glassmorphism, corporate, startup? + +**CSS analysis (HTML):** Extract from ` +``` + +Grab every `--variable` and classify it: color, font, spacing, shadow, radius, animation. + +## Layer 2: Font Imports + +Look for `@import` at the top of ` +``` + +The typo `buttn` instead of `button` silently fails at runtime. + +## Solution + +Enable `strictCssModules` in your tsconfig: + +```json +// tsconfig.json or tsconfig.app.json +{ + "vueCompilerOptions": { + "strictCssModules": true + } +} +``` + +Now `$style.buttn` will show a type error because `buttn` doesn't exist in the CSS module. + +## What Gets Checked + +| Access | With strictCssModules | +|--------|----------------------| +| `$style.validClass` | OK | +| `$style.typo` | Error: Property 'typo' does not exist | +| `$style['dynamic']` | OK (dynamic access not checked) | + +## Limitations + +- Only checks static property access (`$style.className`) +- Dynamic access (`$style[variable]`) is not validated +- Only works with ` +``` + +Grab every `--variable` and classify it: color, font, spacing, shadow, radius, animation. + +## Layer 2: Font Imports + +Look for `@import` at the top of ` +``` + +The typo `buttn` instead of `button` silently fails at runtime. + +## Solution + +Enable `strictCssModules` in your tsconfig: + +```json +// tsconfig.json or tsconfig.app.json +{ + "vueCompilerOptions": { + "strictCssModules": true + } +} +``` + +Now `$style.buttn` will show a type error because `buttn` doesn't exist in the CSS module. + +## What Gets Checked + +| Access | With strictCssModules | +|--------|----------------------| +| `$style.validClass` | OK | +| `$style.typo` | Error: Property 'typo' does not exist | +| `$style['dynamic']` | OK (dynamic access not checked) | + +## Limitations + +- Only checks static property access (`$style.className`) +- Dynamic access (`$style[variable]`) is not validated +- Only works with ` - From 62a106afb69db2c0fd1ab557a19a0c3cec25db18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 18:28:31 +0800 Subject: [PATCH 10/20] =?UTF-8?q?chore:=20=E6=89=B9=E9=87=8F=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8F=82=E8=80=83=E5=AD=90=E6=A8=A1=E5=9D=97=E5=B9=B6?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9E=B6=E6=9E=84=E6=96=87=E6=A1=A3=E4=B8=8E?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此提交完成以下核心变更: 1. 新增sqlc、gitea、memos、openclaw、GitHubDaily、hermes-agent、pocketbase共7个参考子模块 2. 更新.gitmodules配置与.gitignore忽略规则 3. 新增参考项目治理规范、架构路线图、ADR系列文档 4. 新增commory-android/backend/msglayer技能文档与参考资料 5. 新增CI参考治理检查脚本与GitHubDaily项目挖掘脚本 6. 新增agent runtime核心实现与单元测试 --- .agents/skills/commory-android/SKILL.md | 53 +++++++ .../references/runtime-modes.md | 30 ++++ .agents/skills/commory-backend/SKILL.md | 50 +++++++ .../commory-backend/references/api-routes.md | 23 +++ .agents/skills/commory-msglayer/SKILL.md | 55 ++++++++ .../references/event-types.md | 53 +++++++ .claude/skills/commory-android/SKILL.md | 53 +++++++ .../references/runtime-modes.md | 30 ++++ .claude/skills/commory-backend/SKILL.md | 50 +++++++ .../commory-backend/references/api-routes.md | 23 +++ .claude/skills/commory-msglayer/SKILL.md | 55 ++++++++ .../references/event-types.md | 53 +++++++ .github/workflows/ci.yml | 2 + .gitignore | 1 + .gitmodules | 21 +++ backend/internal/agent/runtime.go | 133 ++++++++++++++++++ backend/internal/agent/runtime_test.go | 99 +++++++++++++ docs/adr/0001-reference-governance.md | 25 ++++ docs/adr/0002-database-sqlc-migrations.md | 27 ++++ docs/adr/0003-agent-runtime-boundaries.md | 27 ++++ docs/architecture-roadmap.md | 31 ++++ references/GitHubDaily | 1 + references/README.md | 31 ++++ references/gitea | 1 + references/hermes-agent | 1 + references/memos | 1 + references/openclaw | 1 + references/pocketbase | 1 + references/sqlc | 1 + scripts/check-reference-governance.sh | 77 ++++++++++ scripts/mine-githubdaily-references.sh | 45 ++++++ 31 files changed, 1054 insertions(+) create mode 100644 .agents/skills/commory-android/SKILL.md create mode 100644 .agents/skills/commory-android/references/runtime-modes.md create mode 100644 .agents/skills/commory-backend/SKILL.md create mode 100644 .agents/skills/commory-backend/references/api-routes.md create mode 100644 .agents/skills/commory-msglayer/SKILL.md create mode 100644 .agents/skills/commory-msglayer/references/event-types.md create mode 100644 .claude/skills/commory-android/SKILL.md create mode 100644 .claude/skills/commory-android/references/runtime-modes.md create mode 100644 .claude/skills/commory-backend/SKILL.md create mode 100644 .claude/skills/commory-backend/references/api-routes.md create mode 100644 .claude/skills/commory-msglayer/SKILL.md create mode 100644 .claude/skills/commory-msglayer/references/event-types.md create mode 100644 backend/internal/agent/runtime.go create mode 100644 backend/internal/agent/runtime_test.go create mode 100644 docs/adr/0001-reference-governance.md create mode 100644 docs/adr/0002-database-sqlc-migrations.md create mode 100644 docs/adr/0003-agent-runtime-boundaries.md create mode 100644 docs/architecture-roadmap.md create mode 160000 references/GitHubDaily create mode 100644 references/README.md create mode 160000 references/gitea create mode 160000 references/hermes-agent create mode 160000 references/memos create mode 160000 references/openclaw create mode 160000 references/pocketbase create mode 160000 references/sqlc create mode 100755 scripts/check-reference-governance.sh create mode 100755 scripts/mine-githubdaily-references.sh diff --git a/.agents/skills/commory-android/SKILL.md b/.agents/skills/commory-android/SKILL.md new file mode 100644 index 0000000..24fc80d --- /dev/null +++ b/.agents/skills/commory-android/SKILL.md @@ -0,0 +1,53 @@ +--- +name: commory-android +description: Android app for Commory — dual runtime modes, Compose UI, MsgLayer backup/restore, server sync, and agent privacy model. +--- + +# Commory Android + +Work on the Commory Android app (package `com.iskenkenya.commory.mobile`). + +## Architecture + +``` +app/src/main/java/com/iskenkenya/commory/mobile/ + runtime/ — AppEnvironment, RuntimeMode, RuntimeModePolicy, AppEnvironmentManager, LocaleResolver + remote/ — CommoryServerClient, CommoryApiService, NetworkError, DTOs + auth/ — CommoryServerAuthProvider + agent/ — AgentContextModels, AgentPrivacyPolicy + ui/screens/ — ModeSelectionScreen, ServerSetupScreen, BackupScreen, RestoreScreen, MoreScreen + ui/navigation/NavigationHost — Two-level route guard (mode → auth → main) + ui/viewmodels/ — AppViewModel, BackupViewModel, RestoreViewModel + di/AppContainer — Manual DI + +sdk/backup/ — Pure Kotlin MsgLayer mapper, reader, writer +sdk/auth/ — AuthProvider interface, AuthCredentials sealed class +sdk/storage/ — Storage contracts +``` + +## Key Patterns + +- `AppEnvironment` is the single source of truth; persisted via DataStore; exposed as `StateFlow`. +- `currentSnapshot()` reads a `@Volatile` cache updated by `onEach`; no `runBlocking`. +- `RuntimeModePolicy` centralizes mode-dependent decisions (auth required, upload allowed, etc.). +- `CommoryServerClient` caches Retrofit services per base URL; uses separate `refreshClient` for auth endpoints. +- OkHttp `authenticator` auto-refreshes on 401; `/api/auth/` paths are excluded to prevent loops. +- `NetworkError` sealed class maps IOException subtypes to typed errors for UI localization. +- `AuthSession.isAuthenticated` checks JWT `exp` claim; `accessTokenExpiresAt()` decodes Base64 payload. +- Backup always writes local first; upload is gated by `RuntimeModePolicy.canUploadBackup()`. +- Mode switch shows `AlertDialog` confirmation; switching clears session but preserves local files. +- `AgentPrivacyPolicy` maps `RuntimeMode` to `AgentProviderPolicy` (LOCAL_ONLY vs SERVER_ALLOWED). +- Default server URL detects emulator via `Build.FINGERPRINT`. + +## Workflow + +1. Read `NavigationHost.kt` and the target screen/ViewModel. +2. Read `docs/android-runtime-modes.md` for mode behavior. +3. Read `docs/mobile-api.md` for server contract. +4. Ensure string resources exist in `values/`, `values-en/`, `values-zh-rCN/`. +5. Run: `cd android && ./gradlew :app:compileDebugKotlin && ./gradlew :app:testDebugUnitTest` + +## References + +- See `references/runtime-modes.md` for mode behavior details. +- See `docs/mobile-api.md` for the server API contract. diff --git a/.agents/skills/commory-android/references/runtime-modes.md b/.agents/skills/commory-android/references/runtime-modes.md new file mode 100644 index 0000000..9bbde5a --- /dev/null +++ b/.agents/skills/commory-android/references/runtime-modes.md @@ -0,0 +1,30 @@ +# Android Runtime Modes + +## LOCAL_ONLY + +- No account or server required. +- Backup and restore use local app storage only. +- Agent context policy: `LOCAL_ONLY` — context must not leave the device. +- Switching into local mode clears auth tokens but preserves local backup files. + +## COMMORY_SERVER + +- User authenticates with Commory Server (username/password). +- Backup writes local MsgLayer JSON first, then optionally uploads. +- Upload is gated by three conditions: server mode + syncOnBackup + authenticated. +- Remote import history and export use authenticated endpoints. +- Agent context policy: `SERVER_ALLOWED` — future AI features may use server-backed providers with relevance filtering. + +## Mode Switching + +- Switching modes triggers an `AlertDialog` confirmation. +- Switching to LOCAL_ONLY clears the auth session. +- Switching to COMMORY_SERVER requires server URL and login. +- Local backup files are always preserved across mode switches. + +## Session Lifecycle + +- `AuthSession.isAuthenticated` checks `accessToken` presence and JWT `exp` claim. +- OkHttp `authenticator` auto-refreshes on 401 (excluding auth endpoints). +- `logoutPersistedSession()` calls `POST /api/auth/logout` with refresh token, then clears local session. +- Refresh token rotation: server issues a new refresh token on each refresh; old one is revoked. diff --git a/.agents/skills/commory-backend/SKILL.md b/.agents/skills/commory-backend/SKILL.md new file mode 100644 index 0000000..bd9c9dd --- /dev/null +++ b/.agents/skills/commory-backend/SKILL.md @@ -0,0 +1,50 @@ +--- +name: commory-backend +description: Go backend for Commory — JWT auth, file-backed storage, MsgLayer import/query, Setup wizard, and mobile API contract. +--- + +# Commory Backend + +Work on the Commory Go backend server. + +## Architecture + +``` +cmd/commory/main.go — CLI entry (serve / import / validate) +internal/cli/root.go — Cobra commands, boot sequence +internal/api/server.go — HTTP handlers, public/private mux +internal/auth/service.go — PBKDF2-HMAC-SHA256 passwords, JWT HS256, login rate-limit, refresh rotation +internal/auth/middleware.go — Bearer token extraction, context propagation +internal/setup/service.go — First-run setup wizard, CheckSetup migration +internal/storage/storage.go — Provider interface (GetSetupStatus, SaveSetup, HasAdminUser, UpdateUserPasswordHash, etc.) +internal/storage/filestore.go — JSON-file-backed Provider, scopeKey isolation, persist-on-write +internal/storage/sqlite.go — SQLite adapter factory +internal/msglayer/validator.go— Schema validation + additionalProperties check +internal/msglayer/types.go — Go structs for MsgLayer v0.1 +internal/importers/ — JSON import pipeline +internal/query/ — Timeline, search, identities, threads +internal/config/config.go — Env-driven config (AUTH_SECRET, TLS, ENV, DB_DSN, etc.) +``` + +## Key Patterns + +- Handlers are thin: parse request, call service, return envelope `{code, msg, data}`. +- Auth middleware protects `/api/` routes; `/api/auth/` and `/api/setup` are public. +- Password hashes use `pbkdf2$` prefix; legacy `sha256$` auto-migrates on login. +- Refresh tokens are one-use (ConsumeRefreshToken revokes on refresh). +- Logout revokes the refresh token before clearing the cookie. +- Setup wizard: GET returns status, POST creates admin + writes SetupRecord. Repeat POST returns 400. +- scopeKey uses SHA-1 first 8 bytes with legacy 4-byte fallback lookup. +- Cookie Secure flag reads COMMORY_TLS; COMMORY_ENV=production rejects default auth secret. + +## Workflow + +1. Read `backend/internal/api/server.go` and the relevant service file. +2. Read `docs/mobile-api.md` for contract alignment. +3. Implement changes following the thin-handler pattern. +4. Run: `cd backend && go vet ./... && go test ./... -coverprofile=coverage.out` + +## References + +- See `references/api-routes.md` for the full route table. +- See `docs/mobile-api.md` for the mobile API contract. diff --git a/.agents/skills/commory-backend/references/api-routes.md b/.agents/skills/commory-backend/references/api-routes.md new file mode 100644 index 0000000..1d672e6 --- /dev/null +++ b/.agents/skills/commory-backend/references/api-routes.md @@ -0,0 +1,23 @@ +| Method | Path | Auth | Handler | +|--------|------|------|---------| +| POST | /api/auth/register | public | handleRegister | +| POST | /api/auth/login | public | handleLogin | +| POST | /api/auth/refresh | public | handleRefresh | +| POST | /api/auth/logout | public | handleLogout | +| GET | /api/setup | public | handleGetSetup | +| POST | /api/setup | public | handlePostSetup | +| GET | /api/user/info | Bearer | handleUserInfo | +| GET | /api/imports | Bearer | handleImports | +| POST | /api/imports/upload | Bearer | handleImportUpload | +| GET | /api/imports/{id}/export | Bearer | handleImportExport | +| POST | /api/imports/path | Bearer+Admin | handleImportPath | +| POST | /api/validate/upload | Bearer | handleValidateUpload | +| POST | /api/validate/path | Bearer+Admin | handleValidatePath | +| GET | /api/dashboard | Bearer | handleDashboard | +| GET | /api/events | Bearer | handleEvents | +| GET | /api/events/{id} | Bearer | handleEvent | +| GET | /api/timeline | Bearer | handleTimeline | +| GET | /api/identities | Bearer | handleIdentities | +| GET | /api/identities/{id} | Bearer | handleIdentity | +| GET | /api/search | Bearer | handleSearch | +| GET | /api/threads/{id} | Bearer | handleThread | diff --git a/.agents/skills/commory-msglayer/SKILL.md b/.agents/skills/commory-msglayer/SKILL.md new file mode 100644 index 0000000..e8670e0 --- /dev/null +++ b/.agents/skills/commory-msglayer/SKILL.md @@ -0,0 +1,55 @@ +--- +name: commory-msglayer +description: MsgLayer schema v0.1 — the canonical interchange format between Android, Go backend, web, and future agents. +--- + +# MsgLayer Schema + +Work on the MsgLayer interchange format and its implementations. + +## Schema Location + +``` +msglayer/schema/v0.1/root.schema.json — JSON Schema root +msglayer/examples/ — Example export files +backend/internal/msglayer/ — Go validator, types, constants +android/sdk/backup/ — Kotlin mapper, reader, writer +``` + +## Core Types + +- `RootExport`: version, source, identities[], events[], relations[], indexes[] +- `Identity`: id, type, display_name, avatar?, phones[], emails[], labels[] +- `Event`: id, timestamp, type, direction, participants[], content{}, relations[], meta? +- `Relation`: type (same_thread, references_identity, reply_to, derived_from), target +- `SearchParams`: userID, keyword, contactID, type, participant, from, to, limit, offset + +## Version + +- Current: `msglayer/v0.1` +- Go constant: `msglayer.Version` +- Kotlin constant: `MSG_LAYER_VERSION` +- Both must stay in sync; CI does not currently check this. + +## Validation Rules + +- `additionalProperties: false` is enforced by the Go validator for events, identities, and content maps. +- Allowed event fields: id, timestamp, type, direction, participants, content, relations, meta. +- Allowed identity fields: id, type, display_name, avatar, phones, emails, labels, meta. +- Content keys are type-specific: sms→text, call→duration_sec/call_type, voice→file/transcript/summary, contact_snapshot→identity_id. +- Event types: sms, call, voice, contact_snapshot. +- Direction values: inbound, outbound, missed (for calls). +- Relation types: same_thread, references_identity (active); reply_to, derived_from (reserved). + +## Workflow + +1. Read `msglayer/schema/v0.1/root.schema.json` for the authoritative schema. +2. Read `msglayer/examples/` for valid export files. +3. Modify Go validator in `backend/internal/msglayer/validator.go` if adding new validation rules. +4. Modify Kotlin mapper in `android/sdk/backup/` if adding new event types or fields. +5. Run backend tests: `cd backend && go test ./internal/msglayer/ -v` +6. Run Android tests: `cd android && ./gradlew :sdk:backup:testDebugUnitTest` + +## References + +- See `references/event-types.md` for event type definitions and content schemas. diff --git a/.agents/skills/commory-msglayer/references/event-types.md b/.agents/skills/commory-msglayer/references/event-types.md new file mode 100644 index 0000000..5e53e2f --- /dev/null +++ b/.agents/skills/commory-msglayer/references/event-types.md @@ -0,0 +1,53 @@ +# MsgLayer Event Types + +## sms + +Content keys: `text` + +Direction: inbound, outbound + +## call + +Content keys: `duration_sec`, `call_type` + +Direction: inbound, outbound, missed + +call_type values: incoming, outgoing, missed, rejected + +## voice + +Content keys: `file`, `transcript`, `summary` + +Direction: inbound, outbound + +## contact_snapshot + +Content keys: `identity_id` + +Direction: none (not applicable) + +## Relation Types + +| Type | Status | Description | +|------|--------|-------------| +| same_thread | active | Links events in the same conversation thread | +| references_identity | active | Links an event to a contact identity | +| reply_to | reserved | Indicates a reply relationship between events | +| derived_from | reserved | Indicates one event was derived from another | + +## Android Direction Mapping + +| Android SMS Type | MsgLayer Direction | +|-----------------|-------------------| +| 1 (inbox) | inbound | +| 2 (sent) | outbound | +| 3 (draft) | outbound (best approximation) | +| 4 (outbox) | outbound | +| 5 (failed) | outbound | +| 6 (queued) | outbound | + +| Android Call Type | MsgLayer Direction | MsgLayer call_type | +|------------------|-------------------|-------------------| +| 1 (incoming) | inbound | incoming | +| 2 (outgoing) | outbound | outgoing | +| 5 (rejected) | missed | rejected | diff --git a/.claude/skills/commory-android/SKILL.md b/.claude/skills/commory-android/SKILL.md new file mode 100644 index 0000000..24fc80d --- /dev/null +++ b/.claude/skills/commory-android/SKILL.md @@ -0,0 +1,53 @@ +--- +name: commory-android +description: Android app for Commory — dual runtime modes, Compose UI, MsgLayer backup/restore, server sync, and agent privacy model. +--- + +# Commory Android + +Work on the Commory Android app (package `com.iskenkenya.commory.mobile`). + +## Architecture + +``` +app/src/main/java/com/iskenkenya/commory/mobile/ + runtime/ — AppEnvironment, RuntimeMode, RuntimeModePolicy, AppEnvironmentManager, LocaleResolver + remote/ — CommoryServerClient, CommoryApiService, NetworkError, DTOs + auth/ — CommoryServerAuthProvider + agent/ — AgentContextModels, AgentPrivacyPolicy + ui/screens/ — ModeSelectionScreen, ServerSetupScreen, BackupScreen, RestoreScreen, MoreScreen + ui/navigation/NavigationHost — Two-level route guard (mode → auth → main) + ui/viewmodels/ — AppViewModel, BackupViewModel, RestoreViewModel + di/AppContainer — Manual DI + +sdk/backup/ — Pure Kotlin MsgLayer mapper, reader, writer +sdk/auth/ — AuthProvider interface, AuthCredentials sealed class +sdk/storage/ — Storage contracts +``` + +## Key Patterns + +- `AppEnvironment` is the single source of truth; persisted via DataStore; exposed as `StateFlow`. +- `currentSnapshot()` reads a `@Volatile` cache updated by `onEach`; no `runBlocking`. +- `RuntimeModePolicy` centralizes mode-dependent decisions (auth required, upload allowed, etc.). +- `CommoryServerClient` caches Retrofit services per base URL; uses separate `refreshClient` for auth endpoints. +- OkHttp `authenticator` auto-refreshes on 401; `/api/auth/` paths are excluded to prevent loops. +- `NetworkError` sealed class maps IOException subtypes to typed errors for UI localization. +- `AuthSession.isAuthenticated` checks JWT `exp` claim; `accessTokenExpiresAt()` decodes Base64 payload. +- Backup always writes local first; upload is gated by `RuntimeModePolicy.canUploadBackup()`. +- Mode switch shows `AlertDialog` confirmation; switching clears session but preserves local files. +- `AgentPrivacyPolicy` maps `RuntimeMode` to `AgentProviderPolicy` (LOCAL_ONLY vs SERVER_ALLOWED). +- Default server URL detects emulator via `Build.FINGERPRINT`. + +## Workflow + +1. Read `NavigationHost.kt` and the target screen/ViewModel. +2. Read `docs/android-runtime-modes.md` for mode behavior. +3. Read `docs/mobile-api.md` for server contract. +4. Ensure string resources exist in `values/`, `values-en/`, `values-zh-rCN/`. +5. Run: `cd android && ./gradlew :app:compileDebugKotlin && ./gradlew :app:testDebugUnitTest` + +## References + +- See `references/runtime-modes.md` for mode behavior details. +- See `docs/mobile-api.md` for the server API contract. diff --git a/.claude/skills/commory-android/references/runtime-modes.md b/.claude/skills/commory-android/references/runtime-modes.md new file mode 100644 index 0000000..9bbde5a --- /dev/null +++ b/.claude/skills/commory-android/references/runtime-modes.md @@ -0,0 +1,30 @@ +# Android Runtime Modes + +## LOCAL_ONLY + +- No account or server required. +- Backup and restore use local app storage only. +- Agent context policy: `LOCAL_ONLY` — context must not leave the device. +- Switching into local mode clears auth tokens but preserves local backup files. + +## COMMORY_SERVER + +- User authenticates with Commory Server (username/password). +- Backup writes local MsgLayer JSON first, then optionally uploads. +- Upload is gated by three conditions: server mode + syncOnBackup + authenticated. +- Remote import history and export use authenticated endpoints. +- Agent context policy: `SERVER_ALLOWED` — future AI features may use server-backed providers with relevance filtering. + +## Mode Switching + +- Switching modes triggers an `AlertDialog` confirmation. +- Switching to LOCAL_ONLY clears the auth session. +- Switching to COMMORY_SERVER requires server URL and login. +- Local backup files are always preserved across mode switches. + +## Session Lifecycle + +- `AuthSession.isAuthenticated` checks `accessToken` presence and JWT `exp` claim. +- OkHttp `authenticator` auto-refreshes on 401 (excluding auth endpoints). +- `logoutPersistedSession()` calls `POST /api/auth/logout` with refresh token, then clears local session. +- Refresh token rotation: server issues a new refresh token on each refresh; old one is revoked. diff --git a/.claude/skills/commory-backend/SKILL.md b/.claude/skills/commory-backend/SKILL.md new file mode 100644 index 0000000..bd9c9dd --- /dev/null +++ b/.claude/skills/commory-backend/SKILL.md @@ -0,0 +1,50 @@ +--- +name: commory-backend +description: Go backend for Commory — JWT auth, file-backed storage, MsgLayer import/query, Setup wizard, and mobile API contract. +--- + +# Commory Backend + +Work on the Commory Go backend server. + +## Architecture + +``` +cmd/commory/main.go — CLI entry (serve / import / validate) +internal/cli/root.go — Cobra commands, boot sequence +internal/api/server.go — HTTP handlers, public/private mux +internal/auth/service.go — PBKDF2-HMAC-SHA256 passwords, JWT HS256, login rate-limit, refresh rotation +internal/auth/middleware.go — Bearer token extraction, context propagation +internal/setup/service.go — First-run setup wizard, CheckSetup migration +internal/storage/storage.go — Provider interface (GetSetupStatus, SaveSetup, HasAdminUser, UpdateUserPasswordHash, etc.) +internal/storage/filestore.go — JSON-file-backed Provider, scopeKey isolation, persist-on-write +internal/storage/sqlite.go — SQLite adapter factory +internal/msglayer/validator.go— Schema validation + additionalProperties check +internal/msglayer/types.go — Go structs for MsgLayer v0.1 +internal/importers/ — JSON import pipeline +internal/query/ — Timeline, search, identities, threads +internal/config/config.go — Env-driven config (AUTH_SECRET, TLS, ENV, DB_DSN, etc.) +``` + +## Key Patterns + +- Handlers are thin: parse request, call service, return envelope `{code, msg, data}`. +- Auth middleware protects `/api/` routes; `/api/auth/` and `/api/setup` are public. +- Password hashes use `pbkdf2$` prefix; legacy `sha256$` auto-migrates on login. +- Refresh tokens are one-use (ConsumeRefreshToken revokes on refresh). +- Logout revokes the refresh token before clearing the cookie. +- Setup wizard: GET returns status, POST creates admin + writes SetupRecord. Repeat POST returns 400. +- scopeKey uses SHA-1 first 8 bytes with legacy 4-byte fallback lookup. +- Cookie Secure flag reads COMMORY_TLS; COMMORY_ENV=production rejects default auth secret. + +## Workflow + +1. Read `backend/internal/api/server.go` and the relevant service file. +2. Read `docs/mobile-api.md` for contract alignment. +3. Implement changes following the thin-handler pattern. +4. Run: `cd backend && go vet ./... && go test ./... -coverprofile=coverage.out` + +## References + +- See `references/api-routes.md` for the full route table. +- See `docs/mobile-api.md` for the mobile API contract. diff --git a/.claude/skills/commory-backend/references/api-routes.md b/.claude/skills/commory-backend/references/api-routes.md new file mode 100644 index 0000000..1d672e6 --- /dev/null +++ b/.claude/skills/commory-backend/references/api-routes.md @@ -0,0 +1,23 @@ +| Method | Path | Auth | Handler | +|--------|------|------|---------| +| POST | /api/auth/register | public | handleRegister | +| POST | /api/auth/login | public | handleLogin | +| POST | /api/auth/refresh | public | handleRefresh | +| POST | /api/auth/logout | public | handleLogout | +| GET | /api/setup | public | handleGetSetup | +| POST | /api/setup | public | handlePostSetup | +| GET | /api/user/info | Bearer | handleUserInfo | +| GET | /api/imports | Bearer | handleImports | +| POST | /api/imports/upload | Bearer | handleImportUpload | +| GET | /api/imports/{id}/export | Bearer | handleImportExport | +| POST | /api/imports/path | Bearer+Admin | handleImportPath | +| POST | /api/validate/upload | Bearer | handleValidateUpload | +| POST | /api/validate/path | Bearer+Admin | handleValidatePath | +| GET | /api/dashboard | Bearer | handleDashboard | +| GET | /api/events | Bearer | handleEvents | +| GET | /api/events/{id} | Bearer | handleEvent | +| GET | /api/timeline | Bearer | handleTimeline | +| GET | /api/identities | Bearer | handleIdentities | +| GET | /api/identities/{id} | Bearer | handleIdentity | +| GET | /api/search | Bearer | handleSearch | +| GET | /api/threads/{id} | Bearer | handleThread | diff --git a/.claude/skills/commory-msglayer/SKILL.md b/.claude/skills/commory-msglayer/SKILL.md new file mode 100644 index 0000000..e8670e0 --- /dev/null +++ b/.claude/skills/commory-msglayer/SKILL.md @@ -0,0 +1,55 @@ +--- +name: commory-msglayer +description: MsgLayer schema v0.1 — the canonical interchange format between Android, Go backend, web, and future agents. +--- + +# MsgLayer Schema + +Work on the MsgLayer interchange format and its implementations. + +## Schema Location + +``` +msglayer/schema/v0.1/root.schema.json — JSON Schema root +msglayer/examples/ — Example export files +backend/internal/msglayer/ — Go validator, types, constants +android/sdk/backup/ — Kotlin mapper, reader, writer +``` + +## Core Types + +- `RootExport`: version, source, identities[], events[], relations[], indexes[] +- `Identity`: id, type, display_name, avatar?, phones[], emails[], labels[] +- `Event`: id, timestamp, type, direction, participants[], content{}, relations[], meta? +- `Relation`: type (same_thread, references_identity, reply_to, derived_from), target +- `SearchParams`: userID, keyword, contactID, type, participant, from, to, limit, offset + +## Version + +- Current: `msglayer/v0.1` +- Go constant: `msglayer.Version` +- Kotlin constant: `MSG_LAYER_VERSION` +- Both must stay in sync; CI does not currently check this. + +## Validation Rules + +- `additionalProperties: false` is enforced by the Go validator for events, identities, and content maps. +- Allowed event fields: id, timestamp, type, direction, participants, content, relations, meta. +- Allowed identity fields: id, type, display_name, avatar, phones, emails, labels, meta. +- Content keys are type-specific: sms→text, call→duration_sec/call_type, voice→file/transcript/summary, contact_snapshot→identity_id. +- Event types: sms, call, voice, contact_snapshot. +- Direction values: inbound, outbound, missed (for calls). +- Relation types: same_thread, references_identity (active); reply_to, derived_from (reserved). + +## Workflow + +1. Read `msglayer/schema/v0.1/root.schema.json` for the authoritative schema. +2. Read `msglayer/examples/` for valid export files. +3. Modify Go validator in `backend/internal/msglayer/validator.go` if adding new validation rules. +4. Modify Kotlin mapper in `android/sdk/backup/` if adding new event types or fields. +5. Run backend tests: `cd backend && go test ./internal/msglayer/ -v` +6. Run Android tests: `cd android && ./gradlew :sdk:backup:testDebugUnitTest` + +## References + +- See `references/event-types.md` for event type definitions and content schemas. diff --git a/.claude/skills/commory-msglayer/references/event-types.md b/.claude/skills/commory-msglayer/references/event-types.md new file mode 100644 index 0000000..5e53e2f --- /dev/null +++ b/.claude/skills/commory-msglayer/references/event-types.md @@ -0,0 +1,53 @@ +# MsgLayer Event Types + +## sms + +Content keys: `text` + +Direction: inbound, outbound + +## call + +Content keys: `duration_sec`, `call_type` + +Direction: inbound, outbound, missed + +call_type values: incoming, outgoing, missed, rejected + +## voice + +Content keys: `file`, `transcript`, `summary` + +Direction: inbound, outbound + +## contact_snapshot + +Content keys: `identity_id` + +Direction: none (not applicable) + +## Relation Types + +| Type | Status | Description | +|------|--------|-------------| +| same_thread | active | Links events in the same conversation thread | +| references_identity | active | Links an event to a contact identity | +| reply_to | reserved | Indicates a reply relationship between events | +| derived_from | reserved | Indicates one event was derived from another | + +## Android Direction Mapping + +| Android SMS Type | MsgLayer Direction | +|-----------------|-------------------| +| 1 (inbox) | inbound | +| 2 (sent) | outbound | +| 3 (draft) | outbound (best approximation) | +| 4 (outbox) | outbound | +| 5 (failed) | outbound | +| 6 (queued) | outbound | + +| Android Call Type | MsgLayer Direction | MsgLayer call_type | +|------------------|-------------------|-------------------| +| 1 (incoming) | inbound | incoming | +| 2 (outgoing) | outbound | outgoing | +| 5 (rejected) | missed | rejected | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3933b80..aaf3566 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,8 @@ jobs: - uses: actions/checkout@v4 - name: Repo hygiene run: bash scripts/check-repo-hygiene.sh + - name: Reference governance + run: bash scripts/check-reference-governance.sh - name: Android i18n keys run: bash scripts/check-android-i18n.sh - name: Agent skills mirror diff --git a/.gitignore b/.gitignore index 549e458..96f794e 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ backend/data/ # Non-standard generated reports **/AI_EDIT_LOG.md +references/ClaudeCodeSource/ diff --git a/.gitmodules b/.gitmodules index 72b5e0a..3b85c88 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,24 @@ [submodule "references/new-api"] path = references/new-api url = https://github.com/QuantumNous/new-api.git +[submodule "references/hermes-agent"] + path = references/hermes-agent + url = https://github.com/NousResearch/hermes-agent.git +[submodule "references/openclaw"] + path = references/openclaw + url = https://github.com/openclaw/openclaw.git +[submodule "references/GitHubDaily"] + path = references/GitHubDaily + url = https://github.com/GitHubDaily/GitHubDaily.git +[submodule "references/memos"] + path = references/memos + url = https://github.com/usememos/memos.git +[submodule "references/gitea"] + path = references/gitea + url = https://github.com/go-gitea/gitea.git +[submodule "references/pocketbase"] + path = references/pocketbase + url = https://github.com/pocketbase/pocketbase.git +[submodule "references/sqlc"] + path = references/sqlc + url = https://github.com/sqlc-dev/sqlc.git diff --git a/backend/internal/agent/runtime.go b/backend/internal/agent/runtime.go new file mode 100644 index 0000000..99b3379 --- /dev/null +++ b/backend/internal/agent/runtime.go @@ -0,0 +1,133 @@ +package agent + +import ( + "context" + "errors" + "fmt" +) + +type Role string + +const ( + RoleSystem Role = "system" + RoleUser Role = "user" + RoleAssistant Role = "assistant" + RoleTool Role = "tool" +) + +type Message struct { + Role Role + Content string +} + +type ToolSpec struct { + Name string + Description string + InputSchema string +} + +type Request struct { + SessionID string + Messages []Message + Tools []ToolSpec +} + +type Response struct { + Message Message +} + +type Provider interface { + Complete(context.Context, Request) (Response, error) +} + +type ToolRegistry interface { + ListTools(context.Context, string) ([]ToolSpec, error) +} + +type PermissionDecision string + +const ( + PermissionAllow PermissionDecision = "allow" + PermissionDeny PermissionDecision = "deny" +) + +type PermissionRequest struct { + SessionID string + ToolName string +} + +type PermissionBroker interface { + Decide(context.Context, PermissionRequest) (PermissionDecision, error) +} + +type SessionStore interface { + Append(context.Context, string, []Message) error +} + +type Runtime struct { + provider Provider + tools ToolRegistry + permissions PermissionBroker + sessions SessionStore +} + +func NewRuntime(provider Provider, tools ToolRegistry, permissions PermissionBroker, sessions SessionStore) (*Runtime, error) { + if provider == nil { + return nil, errors.New("agent provider is required") + } + if tools == nil { + return nil, errors.New("agent tool registry is required") + } + if permissions == nil { + return nil, errors.New("agent permission broker is required") + } + if sessions == nil { + return nil, errors.New("agent session store is required") + } + return &Runtime{ + provider: provider, + tools: tools, + permissions: permissions, + sessions: sessions, + }, nil +} + +func (r *Runtime) Run(ctx context.Context, sessionID string, input Message) (Message, error) { + if sessionID == "" { + return Message{}, errors.New("agent session id is required") + } + if input.Role == "" { + return Message{}, errors.New("agent input role is required") + } + if err := r.sessions.Append(ctx, sessionID, []Message{input}); err != nil { + return Message{}, fmt.Errorf("append user input: %w", err) + } + tools, err := r.tools.ListTools(ctx, sessionID) + if err != nil { + return Message{}, fmt.Errorf("list tools: %w", err) + } + for _, tool := range tools { + decision, err := r.permissions.Decide(ctx, PermissionRequest{SessionID: sessionID, ToolName: tool.Name}) + if err != nil { + return Message{}, fmt.Errorf("decide permission for %s: %w", tool.Name, err) + } + if decision != PermissionAllow { + return Message{}, fmt.Errorf("tool %s permission denied", tool.Name) + } + } + response, err := r.provider.Complete(ctx, Request{ + SessionID: sessionID, + Messages: []Message{input}, + Tools: tools, + }) + if err != nil { + return Message{}, fmt.Errorf("complete agent response: %w", err) + } + if response.Message.Role == "" { + response.Message.Role = RoleAssistant + } + if err := r.sessions.Append(ctx, sessionID, []Message{response.Message}); err != nil { + return Message{}, fmt.Errorf("append assistant response: %w", err) + } + return response.Message, nil +} diff --git a/backend/internal/agent/runtime_test.go b/backend/internal/agent/runtime_test.go new file mode 100644 index 0000000..32ab37e --- /dev/null +++ b/backend/internal/agent/runtime_test.go @@ -0,0 +1,99 @@ +package agent + +import ( + "context" + "testing" +) + +func TestRuntimeRunPersistsInputAndResponse(t *testing.T) { + store := &memorySessionStore{} + runtime, err := NewRuntime( + providerFunc(func(ctx context.Context, req Request) (Response, error) { + if req.SessionID != "session-1" { + t.Fatalf("unexpected session id: %s", req.SessionID) + } + if len(req.Tools) != 1 || req.Tools[0].Name != "read_file" { + t.Fatalf("unexpected tools: %#v", req.Tools) + } + return Response{Message: Message{Content: "done"}}, nil + }), + toolRegistryFunc(func(ctx context.Context, sessionID string) ([]ToolSpec, error) { + return []ToolSpec{{Name: "read_file", Description: "Read a file"}}, nil + }), + permissionBrokerFunc(func(ctx context.Context, req PermissionRequest) (PermissionDecision, error) { + if req.ToolName != "read_file" { + t.Fatalf("unexpected tool permission request: %s", req.ToolName) + } + return PermissionAllow, nil + }), + store, + ) + if err != nil { + t.Fatal(err) + } + + message, err := runtime.Run(context.Background(), "session-1", Message{Role: RoleUser, Content: "hello"}) + if err != nil { + t.Fatal(err) + } + if message.Role != RoleAssistant || message.Content != "done" { + t.Fatalf("unexpected message: %#v", message) + } + if len(store.messages) != 2 { + t.Fatalf("expected two persisted messages, got %d", len(store.messages)) + } +} + +func TestRuntimeRunDeniesToolsBeforeProviderCall(t *testing.T) { + called := false + runtime, err := NewRuntime( + providerFunc(func(ctx context.Context, req Request) (Response, error) { + called = true + return Response{}, nil + }), + toolRegistryFunc(func(ctx context.Context, sessionID string) ([]ToolSpec, error) { + return []ToolSpec{{Name: "write_file"}}, nil + }), + permissionBrokerFunc(func(ctx context.Context, req PermissionRequest) (PermissionDecision, error) { + return PermissionDeny, nil + }), + &memorySessionStore{}, + ) + if err != nil { + t.Fatal(err) + } + + if _, err := runtime.Run(context.Background(), "session-1", Message{Role: RoleUser, Content: "hello"}); err == nil { + t.Fatal("expected permission error") + } + if called { + t.Fatal("provider was called after permission denial") + } +} + +type providerFunc func(context.Context, Request) (Response, error) + +func (f providerFunc) Complete(ctx context.Context, req Request) (Response, error) { + return f(ctx, req) +} + +type toolRegistryFunc func(context.Context, string) ([]ToolSpec, error) + +func (f toolRegistryFunc) ListTools(ctx context.Context, sessionID string) ([]ToolSpec, error) { + return f(ctx, sessionID) +} + +type permissionBrokerFunc func(context.Context, PermissionRequest) (PermissionDecision, error) + +func (f permissionBrokerFunc) Decide(ctx context.Context, req PermissionRequest) (PermissionDecision, error) { + return f(ctx, req) +} + +type memorySessionStore struct { + messages []Message +} + +func (s *memorySessionStore) Append(ctx context.Context, sessionID string, messages []Message) error { + s.messages = append(s.messages, messages...) + return nil +} diff --git a/docs/adr/0001-reference-governance.md b/docs/adr/0001-reference-governance.md new file mode 100644 index 0000000..ad35bbb --- /dev/null +++ b/docs/adr/0001-reference-governance.md @@ -0,0 +1,25 @@ +# ADR 0001: Reference Governance and Clean-Room Learning + +## Status + +Accepted. + +## Context + +Commory benefits from studying strong Go, self-hosted, and agent systems. Some useful references use restrictive or unknown licenses, and some local snapshots may not be suitable as source material. We need a clear line between learning architecture and deriving implementation. + +## Decision + +All reference projects live under `references/` and are architecture inputs, not dependencies. Commory code must not import, copy, translate, or mechanically port code, strings, schemas, field names, or proprietary structures from reference projects. + +Permissive references such as MIT, Apache-2.0, and BSD projects may be studied deeply, but implementation still has to be Commory-owned. AGPL, GPL, LGPL, proprietary, and unknown-license references are read-only design material. Their lessons must be restated as Commory ADRs, interfaces, tests, or design notes before implementation. + +`references/ClaudeCodeSource` is clean-room only. It may inform product-level and architecture-level thinking about advanced agents, including task models, tool permissions, session continuity, bridge concepts, context compaction, command organization, and UX. It must not be used as a source for implementation details. + +## Consequences + +- `references/README.md` is the required catalog for reference purpose, license policy, learning targets, and prohibited borrowing. +- CI runs `scripts/check-reference-governance.sh` to catch uncataloged submodules and missing policy records. +- GitHubDaily is treated as a discovery index; every project found through it still needs separate license validation before being added. +- New architecture inspired by references should land as ADRs and Commory-owned interfaces before product integration. + diff --git a/docs/adr/0002-database-sqlc-migrations.md b/docs/adr/0002-database-sqlc-migrations.md new file mode 100644 index 0000000..900f90a --- /dev/null +++ b/docs/adr/0002-database-sqlc-migrations.md @@ -0,0 +1,27 @@ +# ADR 0002: SQLC and Versioned Migrations for Storage + +## Status + +Accepted. + +## Context + +Commory currently exposes `sqlite` and `postgres` providers, but both are backed by the same JSON file store adapter. That was useful for early product flow, but it is not a real multi-database foundation. + +The long-term target is SQLite for personal/local deployments and Postgres or MySQL for production or multi-user deployments. + +## Decision + +Commory will use explicit SQL plus generated types for the durable storage layer. The preferred route is `sqlc` with versioned migrations for SQLite, Postgres, and MySQL. + +Cross-database differences must be visible in query and migration organization instead of being hidden in scattered runtime branches. When behavior differs by database, the storage contract test should define the shared behavior and each driver should prove it. + +The existing JSON file store remains useful as a development fixture and migration source, but it must not be presented as a real SQLite or Postgres implementation. + +## Consequences + +- Add storage contract tests before replacing the current file-backed provider. +- Introduce schema migrations per supported database family. +- Generate typed query packages from SQL instead of introducing a business ORM. +- Keep setup and diagnostics explicit about the active database driver and persistence risk. + diff --git a/docs/adr/0003-agent-runtime-boundaries.md b/docs/adr/0003-agent-runtime-boundaries.md new file mode 100644 index 0000000..2bf232c --- /dev/null +++ b/docs/adr/0003-agent-runtime-boundaries.md @@ -0,0 +1,27 @@ +# ADR 0003: Agent Runtime Boundaries + +## Status + +Accepted. + +## Context + +Commory should learn from advanced agent systems without copying them. ClaudeCodeSource, Hermes, and OpenClaw show useful patterns around task state, tool permissions, provider registries, plugin boundaries, diagnostics, and session continuity. + +## Decision + +Commory's agent work starts with a small Go-owned boundary: + +`runtime -> provider adapter -> tool registry -> permission broker -> session store` + +The runtime owns orchestration. Providers own model I/O. Tools are described through Commory-owned metadata and invoked only through a registry. Permission decisions are explicit and testable. Sessions are persisted through an interface so the storage layer can evolve independently. + +Core packages must not depend on plugin implementations. Plugins can enter through SDK-style interfaces only. + +## Consequences + +- Agent code starts in `backend/internal/agent` with interfaces and narrow behavior tests. +- Product handlers should call services or runtimes, never reference provider or plugin internals directly. +- Any future plugin API must be additive, documented, and versioned before third-party use. +- Advanced concepts from references must be translated into Commory naming and behavior. + diff --git a/docs/architecture-roadmap.md b/docs/architecture-roadmap.md new file mode 100644 index 0000000..773047c --- /dev/null +++ b/docs/architecture-roadmap.md @@ -0,0 +1,31 @@ +# Commory Architecture Roadmap + +Commory is moving from prototype storage and direct handlers toward durable, testable service boundaries. The near-term work is intentionally boring: database correctness, authentication hardening, and architecture guardrails before richer agent behavior. + +## Phase 1: Durable Foundation + +- Replace the file-backed `sqlite` and `postgres` provider aliases with real SQL implementations. +- Use `sqlc` plus versioned migrations for SQLite, Postgres, and MySQL. +- Add storage contract tests for auth, setup, import/export, search, timeline, identities, and refresh token rotation. +- Make setup diagnostics explicit about database type and SQLite persistence risks. + +## Phase 2: Authentication and Permissions + +- Keep short-lived access tokens with refresh token rotation. +- Add session/device records, revoke audit, and typed role constants for user/admin/root behavior. +- Keep HTTP middleware thin; auth decisions belong in service-level code. + +## Phase 3: Agent Runtime + +- Build the Go-owned runtime boundary in `backend/internal/agent`. +- Add provider adapters behind interfaces. +- Add a tool registry and permission broker before allowing tools to mutate local state. +- Persist task/session state through storage interfaces. + +## Phase 4: Reference Mining + +- Use GitHubDaily to discover candidate Go projects. +- Prefer MIT, Apache-2.0, and BSD references. +- Use AGPL/GPL/LGPL/unknown-license projects only for read-only architecture observation. +- Record every accepted reference in `references/README.md`. + diff --git a/references/GitHubDaily b/references/GitHubDaily new file mode 160000 index 0000000..5108d02 --- /dev/null +++ b/references/GitHubDaily @@ -0,0 +1 @@ +Subproject commit 5108d021a173c2e53684b39b5972e6c2b2750c71 diff --git a/references/README.md b/references/README.md new file mode 100644 index 0000000..1cb547a --- /dev/null +++ b/references/README.md @@ -0,0 +1,31 @@ +# Commory Reference Catalog + +This directory is for architecture study only. Reference projects are not implementation dependencies, and their code, text, schemas, field names, or proprietary structures must not be copied into Commory. + +## Policy + +- Prefer permissive references: MIT, Apache-2.0, BSD. +- Treat AGPL, GPL, LGPL, proprietary, and unknown-license projects as read-only architecture material. +- Record why every reference exists before using it in design work. +- Convert lessons into Commory-owned ADRs, interfaces, and tests before writing product code. +- Do not import from `references/` in production or test code. + +## Catalog + +| Path | Source | License policy | Learn from | Do not borrow | +| --- | --- | --- | --- | --- | +| `references/ClaudeCodeSource` | Local ignored source snapshot | Restricted / clean-room only | Agent product architecture, task/session UX, tool permissions, command surfaces, compact/context concepts, bridge and resume patterns | Source code, strings, field names, schemas, proprietary structures | +| `references/GitHubDaily` | `https://github.com/GitHubDaily/GitHubDaily.git` | Unknown / discovery index only | Finding Go/self-hosted/database/auth/agent/concurrency projects for later review | Code or article text without separate license validation | +| `references/new-api` | `https://github.com/QuantumNous/new-api.git` | AGPL read-only architecture reference | Multi-database awareness, setup UX, user/admin/root auth layering, operational warnings | Implementation, handlers, model names, field names, SQL, UI text | +| `references/hermes-agent` | `https://github.com/NousResearch/hermes-agent.git` | MIT permissive reference | Provider registry, plugin lifecycle, config validation, diagnostics, long-running agent workflows | Direct Python implementation or project-specific prompts | +| `references/openclaw` | `https://github.com/openclaw/openclaw.git` | MIT permissive reference | Plugin-agnostic core boundaries, extension governance, protocol/versioning habits | Product-specific plugin contracts or wording | +| `references/art-design-pro` | `https://github.com/Daymychen/art-design-pro.git` | MIT permissive reference | Admin UI layout, theme organization, dashboard ergonomics | Branding and app-specific UI copy | +| `references/memos` | `https://github.com/usememos/memos.git` | MIT permissive reference | Go self-hosted product structure, SQLite-first operation, lightweight domain modeling | Exact data models, API shapes, UI strings | +| `references/gitea` | `https://github.com/go-gitea/gitea.git` | MIT permissive reference | Mature Go self-hosted governance, multi-database operations, permissions, upgrade discipline | Git service domain implementation, templates, naming | +| `references/pocketbase` | `https://github.com/pocketbase/pocketbase.git` | MIT permissive reference | Single-binary SQLite-first architecture, auth, hooks, realtime ergonomics | Framework internals or public API names as Commory APIs | +| `references/sqlc` | `https://github.com/sqlc-dev/sqlc.git` | MIT permissive reference | Type-safe SQL generation, query organization, migration-adjacent workflow | Tool internals | + +## GitHubDaily Mining + +Use `scripts/mine-githubdaily-references.sh` to extract candidate repositories from the local GitHubDaily index. A candidate can become a submodule only after its language, license, and Commory learning value are recorded here. + diff --git a/references/gitea b/references/gitea new file mode 160000 index 0000000..cf0f25b --- /dev/null +++ b/references/gitea @@ -0,0 +1 @@ +Subproject commit cf0f25b79840100336d729ccd5dc6c7580f90c71 diff --git a/references/hermes-agent b/references/hermes-agent new file mode 160000 index 0000000..7727607 --- /dev/null +++ b/references/hermes-agent @@ -0,0 +1 @@ +Subproject commit 77276070f5a1302908456734f2a5bdfe790260de diff --git a/references/memos b/references/memos new file mode 160000 index 0000000..858f741 --- /dev/null +++ b/references/memos @@ -0,0 +1 @@ +Subproject commit 858f7419b43b36ed76234762d8327ddbaacf1337 diff --git a/references/openclaw b/references/openclaw new file mode 160000 index 0000000..778ad09 --- /dev/null +++ b/references/openclaw @@ -0,0 +1 @@ +Subproject commit 778ad09ff2456d52f7b5a761ee99f2330498179b diff --git a/references/pocketbase b/references/pocketbase new file mode 160000 index 0000000..a286d28 --- /dev/null +++ b/references/pocketbase @@ -0,0 +1 @@ +Subproject commit a286d28bf9ee76d5f7900458f713dee8989ed35d diff --git a/references/sqlc b/references/sqlc new file mode 160000 index 0000000..a3b0cfd --- /dev/null +++ b/references/sqlc @@ -0,0 +1 @@ +Subproject commit a3b0cfdbc1d86da8248ad3366301cf5544fb63b9 diff --git a/scripts/check-reference-governance.sh b/scripts/check-reference-governance.sh new file mode 100755 index 0000000..8ab7820 --- /dev/null +++ b/scripts/check-reference-governance.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +set -euo pipefail + +catalog="references/README.md" +if [[ ! -f "$catalog" ]]; then + echo "Missing $catalog" + exit 1 +fi + +expected_paths=( + "references/art-design-pro" + "references/new-api" + "references/hermes-agent" + "references/openclaw" + "references/GitHubDaily" + "references/memos" + "references/gitea" + "references/pocketbase" + "references/sqlc" +) + +for path in "${expected_paths[@]}"; do + if ! git config --file .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}' | grep -Fxq "$path"; then + echo "Missing reference submodule path in .gitmodules: $path" + exit 1 + fi + if ! grep -Fq "\`$path\`" "$catalog"; then + echo "Missing reference catalog entry: $path" + exit 1 + fi +done + +restricted_patterns=( + "references/ClaudeCodeSource.*clean-room" + "references/GitHubDaily.*discovery index" + "references/new-api.*AGPL read-only" +) + +for pattern in "${restricted_patterns[@]}"; do + if ! grep -Eq "$pattern" "$catalog"; then + echo "Missing restricted reference policy matching: $pattern" + exit 1 + fi +done + +if grep -RIn --exclude-dir='.git' 'references/ClaudeCodeSource' backend android web .github 2>/dev/null; then + echo "ClaudeCodeSource must only be referenced in governance documentation, not product code." + exit 1 +fi + +for path in "${expected_paths[@]}"; do + if [[ -d "$path" && -e "$path/.git" || -f "$path/.git" ]]; then + license_file="$(find "$path" -maxdepth 1 \( -iname 'LICENSE*' -o -iname 'COPYING*' \) -type f | head -n 1 || true)" + case "$path" in + references/new-api) + if [[ -n "$license_file" ]] && ! grep -qi 'affero general public license' "$license_file"; then + echo "Expected AGPL license for $path" + exit 1 + fi + ;; + references/GitHubDaily) + ;; + *) + if [[ -z "$license_file" ]]; then + echo "Missing license file for initialized reference: $path" + exit 1 + fi + if ! grep -Eqi 'MIT License|Apache License|BSD [0-9]-Clause|Permission is hereby granted' "$license_file"; then + echo "Reference is not recognized as permissive: $path ($license_file)" + exit 1 + fi + ;; + esac + fi +done + +echo "Reference governance check passed." diff --git a/scripts/mine-githubdaily-references.sh b/scripts/mine-githubdaily-references.sh new file mode 100755 index 0000000..b1e9eea --- /dev/null +++ b/scripts/mine-githubdaily-references.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -euo pipefail + +limit="${1:-80}" +source_dir="references/GitHubDaily" + +if [[ ! -d "$source_dir" ]]; then + echo "Missing $source_dir. Initialize the GitHubDaily submodule first." >&2 + exit 1 +fi + +tmp="$(mktemp)" +trap 'rm -f "$tmp"' EXIT + +rg -n -i 'github\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+|Go|Golang|SQLite|PostgreSQL|MySQL|self-host|自托管|高并发|并发|agent|workflow|queue|observability|plugin|database|auth' \ + "$source_dir" \ + -g '*.md' \ + > "$tmp" || true + +echo -e "repo\tsignals\tsource" + +awk -v limit="$limit" -F: ' + { + line=$0 + while (match(line, /github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+/)) { + repo=substr(line, RSTART, RLENGTH) + gsub(/[),,。;;]+$/, "", repo) + signals="" + lower=tolower($0) + if (lower ~ /go|golang/) signals=signals "go," + if (lower ~ /sqlite|postgresql|mysql|database|数据库/) signals=signals "database," + if (lower ~ /auth|权限|认证/) signals=signals "auth," + if (lower ~ /agent|workflow|plugin|observability|queue/) signals=signals "agent-workflow," + if (lower ~ /self-host|自托管/) signals=signals "self-hosted," + if (lower ~ /高并发|并发|concurrency/) signals=signals "concurrency," + if (signals == "") signals="needs-review," + sub(/,$/, "", signals) + print repo "\t" signals "\t" $1 ":" $2 + line=substr(line, RSTART + RLENGTH) + } + } +' "$tmp" | sort -u | awk -v limit="$limit" 'NR <= limit { print }' + +echo +echo "Review license and language before adding any candidate to references/README.md or .gitmodules." >&2 From 206088232378dcf8dc673929d4a234fcf2957a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Fri, 15 May 2026 18:44:35 +0800 Subject: [PATCH 11/20] =?UTF-8?q?docs:=20=E5=85=A8=E9=9D=A2=E6=8E=A8?= =?UTF-8?q?=E8=BF=9B=E4=B8=AD=E6=96=87=E4=BC=98=E5=85=88=E4=B8=8E=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E8=A7=84=E8=8C=83=E8=90=BD=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 统一项目文档、注释、维护规则的中文优先原则 2. 补充Android端国际化强制规范,明确字符串资源要求 3. 新增3份ADR文档并整理现有英文ADR为中文版本 4. 完善多端国际化配置说明,规范代码硬编码校验 5. 优化仓库内文档结构与翻译一致性 --- AGENTS.md | 90 ++++++------ CLAUDE.md | 19 ++- NOTICE.md | 49 +++---- README.en.md | 10 ++ README.md | 10 ++ android/README.md | 57 ++++---- android/features.md | 7 +- docs/adr/0001-reference-governance.md | 25 ---- ...04\346\226\231\346\262\273\347\220\206.md" | 24 ++++ docs/adr/0002-database-sqlc-migrations.md | 27 ---- ...\272\223-sqlc-\350\277\201\347\247\273.md" | 26 ++++ docs/adr/0003-agent-runtime-boundaries.md | 27 ---- ...14\346\227\266\350\276\271\347\225\214.md" | 26 ++++ docs/android-runtime-modes.md | 22 +-- docs/architecture-roadmap.md | 43 +++--- docs/engineering-standards.md | 132 +++++++++--------- docs/mobile-api.md | 54 +++---- msglayer/docs/indexing.md | 22 +-- msglayer/docs/mapping-android.md | 54 +++---- msglayer/docs/versioning.md | 30 ++-- 20 files changed, 401 insertions(+), 353 deletions(-) delete mode 100644 docs/adr/0001-reference-governance.md create mode 100644 "docs/adr/0001-\345\217\202\350\200\203\350\265\204\346\226\231\346\262\273\347\220\206.md" delete mode 100644 docs/adr/0002-database-sqlc-migrations.md create mode 100644 "docs/adr/0002-\346\225\260\346\215\256\345\272\223-sqlc-\350\277\201\347\247\273.md" delete mode 100644 docs/adr/0003-agent-runtime-boundaries.md create mode 100644 "docs/adr/0003-agent-\350\277\220\350\241\214\346\227\266\350\276\271\347\225\214.md" diff --git a/AGENTS.md b/AGENTS.md index b6471b2..811dd72 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,57 +1,67 @@ -# Agent Operating Spec +# Agent 操作规范 -Commory is a local-first communication memory monorepo. Keep context narrow, respect user changes, and verify the exact surface you touched. +Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文收窄,尊重用户已有改动,并验证你实际触碰的范围。 -## Read First +## 先读这些 -- Android UI or mobile product work: `android/README.md`, `android/app/src/main/java/com/iskenkenya/commory/mobile/ui/navigation/NavigationHost.kt`, `android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/`, and the target screen or ViewModel. -- Android data/auth/storage work: `android/sdk/backup`, `android/sdk/auth`, `android/sdk/storage`, plus `android/app/src/main/java/com/iskenkenya/commory/mobile/remote/`. -- Backend API work: `backend/internal/api/server.go`, `backend/internal/auth`, `backend/internal/storage`, and `docs/mobile-api.md`. -- Web dashboard work: `web/package.json`, `web/src/api`, `web/src/router`, and the target view/store module. -- MsgLayer/schema work: `msglayer/schema/v0.1/root.schema.json`, `msglayer/examples`, and `backend/internal/msglayer`. -- Governance or CI work: `docs/engineering-standards.md`, `.github/workflows/ci.yml`, `scripts/`, `.agents/skills`, and `.claude/skills`. +- Android UI 或移动端产品工作:`android/README.md`、`android/app/src/main/java/com/iskenkenya/commory/mobile/ui/navigation/NavigationHost.kt`、`android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/`,以及目标 screen 或 ViewModel。 +- Android 数据、认证、存储工作:`android/sdk/backup`、`android/sdk/auth`、`android/sdk/storage`,以及 `android/app/src/main/java/com/iskenkenya/commory/mobile/remote/`。 +- Backend API 工作:`backend/internal/api/server.go`、`backend/internal/auth`、`backend/internal/storage`,以及 `docs/mobile-api.md`。 +- Web dashboard 工作:`web/package.json`、`web/src/api`、`web/src/router`,以及目标 view/store 模块。 +- MsgLayer/schema 工作:`msglayer/schema/v0.1/root.schema.json`、`msglayer/examples`,以及 `backend/internal/msglayer`。 +- 治理或 CI 工作:`docs/engineering-standards.md`、`.github/workflows/ci.yml`、`scripts/`、`.agents/skills`、`.claude/skills`。 -## Context Bundles +## 上下文包 -- Android UI bundle: navigation host, target screen, resources in `values/`, `values-en/`, `values-zh-rCN/`, and related ViewModel. -- Android auth/network bundle: runtime environment, auth provider, server client, SDK auth/storage contracts, and mobile API docs. -- Backend API bundle: server handler, auth middleware/service, storage provider, API tests, and mobile API contract. -- Web dashboard bundle: API client, auth store, route guard, target view, and Element Plus patterns already used in `web/`. -- MsgLayer bundle: schema, examples, validators, Android mapper/serializer. -- Governance bundle: engineering standards, CI workflow, repo hygiene, skills sync, i18n check. +- Android UI 包:navigation host、目标 screen、`values/`、`values-en/`、`values-zh-rCN/` 中的资源,以及相关 ViewModel。 +- Android auth/network 包:runtime environment、auth provider、server client、SDK auth/storage contracts,以及移动端 API 文档。 +- Backend API 包:server handler、auth middleware/service、storage provider、API tests,以及移动端 API contract。 +- Web dashboard 包:API client、auth store、route guard、目标 view,以及 `web/` 已使用的 Element Plus patterns。 +- MsgLayer 包:schema、examples、validators、Android mapper/serializer。 +- 治理包:engineering standards、CI workflow、repo hygiene、skills sync、i18n check。 -Load only the bundle needed for the task. Do not spread temporary decisions into tool-specific files; durable rules belong in `docs/engineering-standards.md`, agent entrypoints in this file, and release history in `CHANGELOG.md`. +只加载任务需要的上下文包。不要把临时决策扩散到工具专属文件;长期规则放在 `docs/engineering-standards.md`,Agent 入口放在本文件,发布历史放在 `CHANGELOG.md`。 -## Repository Boundaries +## 仓库边界 -- `previewer/` is a historical archive. Do not update it for current Commory work. -- `references/` is read-only external reference code. Rewrite ideas in Commory modules instead of editing reference mirrors. -- `.agents/skills` is the source of truth for project skills. -- `.claude/skills` is a generated compatibility mirror for Claude Code. Do not edit it by hand; run `bash scripts/sync-agent-skills.sh`. -- Do not add `AI_EDIT_LOG.md`, debug reports, tracked logs, build outputs, `.DS_Store`, or IDE/cache files. +- `previewer/` 是历史归档。当前 Commory 工作不要更新它。 +- `references/` 是只读外部参考代码。把思路改写进 Commory 自有模块,不要编辑参考镜像。 +- `.agents/skills` 是项目 skills 的唯一手工维护来源。 +- `.claude/skills` 是 Claude Code 兼容镜像,由脚本生成。不要手改;运行 `bash scripts/sync-agent-skills.sh`。 +- 不要新增 `AI_EDIT_LOG.md`、调试报告、已追踪日志、构建产物、`.DS_Store` 或 IDE/cache 文件。 -## Naming +## 命名 -- Android app id: `com.iskenkenya.commory`. -- Android app namespace and source packages: `com.iskenkenya.commory.mobile`. -- Android SDK packages: `com.iskenkenya.commory.sdk.*`. -- Go backend module remains `github.com/IsKenKenYa/Commory/backend`; it does not conflict with Android package names. -- User-visible current product name is `Commory`. Historical changelog entries may mention old names as history. +- Android app id:`com.iskenkenya.commory`。 +- Android app namespace 和源码包:`com.iskenkenya.commory.mobile`。 +- Android SDK 包:`com.iskenkenya.commory.sdk.*`。 +- Go backend module 保持 `github.com/IsKenKenYa/Commory/backend`;它不与 Android 包名冲突。 +- 当前用户可见产品名是 `Commory`。历史 changelog 可以保留旧名称作为历史。 + +## 中文优先与国际化 + +- 文档、Rules、注释、维护者提示、数据库备注中文优先;必要时第一次出现写作“中文(English)”。 +- 产品代码不要为了“中文优先”写死中文。用户可见文本必须进入 i18n/resource 体系。 +- Web 使用 `vue-i18n`,语言包位于 `web/src/locales/langs/zh.json` 与 `web/src/locales/langs/en.json`。 +- Android 用户可见字符串必须同时维护 `values/strings.xml`、`values-en/strings.xml`、`values-zh-rCN/strings.xml`。 +- 系统内置国际化只负责中文和英文;其他语言可以由社区后续扩展。 +- 不要翻译代码标识符、JSON key、数据库字段名、HTTP endpoint、配置项、命令、包名、常量值和公开契约。 +- `README.en.md` 是英文 README,保持英文;中文 README 更新了产品能力时,同步检查英文 README 是否需要对应更新。 ## Skills -Project skills must follow the Codex skill shape: +项目 skills 必须遵循 Codex skill 形态: -- Required: `SKILL.md` with concise YAML frontmatter (`name`, `description`) and a lean workflow. -- Recommended: `agents/openai.yaml` when UI metadata is useful. -- Optional: `scripts/`, `references/`, `assets/`. -- Forbidden inside a skill: `README.md`, `CHANGELOG.md`, `AGENTS.md`, install guides, quick references, or long duplicated docs. +- 必需:`SKILL.md`,包含简洁 YAML frontmatter(`name`、`description`)和精简 workflow。 +- 推荐:需要 UI metadata 时使用 `agents/openai.yaml`。 +- 可选:`scripts/`、`references/`、`assets/`。 +- 禁止放入 skill:`README.md`、`CHANGELOG.md`、`AGENTS.md`、安装指南、快速参考或大段重复文档。 -When creating or updating a skill, keep `SKILL.md` short, move detailed variants to directly linked files under `references/`, and run `bash scripts/sync-agent-skills.sh`. +创建或更新 skill 时,保持 `SKILL.md` 简短,把详细变体移到 `references/` 下直接链接的文件,并运行 `bash scripts/sync-agent-skills.sh`。 -## Verification +## 验证 -- Backend: `cd backend && go vet ./... && go test ./... -coverprofile=coverage.out`. -- Android: `cd android && ./gradlew :app:compileDebugKotlin && ./gradlew :app:testDebugUnitTest`. -- Web: `cd web && pnpm install --frozen-lockfile && pnpm lint && pnpm build`. -- Governance: `bash scripts/check-repo-hygiene.sh`, `bash scripts/check-android-i18n.sh`, `bash scripts/sync-agent-skills.sh --check`, and `bash scripts/report-loc-complexity.sh`. +- Backend:`cd backend && go vet ./... && go test ./... -coverprofile=coverage.out`。 +- Android:`cd android && ./gradlew :app:compileDebugKotlin && ./gradlew :app:testDebugUnitTest`。 +- Web:`cd web && pnpm install --frozen-lockfile && pnpm lint && pnpm build`。 +- 治理:`bash scripts/check-repo-hygiene.sh`、`bash scripts/check-android-i18n.sh`、`bash scripts/sync-agent-skills.sh --check`、`bash scripts/report-loc-complexity.sh`。 diff --git a/CLAUDE.md b/CLAUDE.md index 9f64a73..61a8eed 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,18 +1,25 @@ # CLAUDE.md -Claude Code should treat `AGENTS.md` as the canonical project operating spec. +Claude Code 应把 `AGENTS.md` 视为项目唯一的规范入口。 ## Skills -- `.agents/skills` is the project source of truth. -- `.claude/skills` is the Claude Code compatibility mirror. -- Do not edit `.claude/skills` directly. Update `.agents/skills`, then run: +- `.agents/skills` 是项目 skills 的唯一手工维护来源。 +- `.claude/skills` 是 Claude Code 兼容镜像。 +- 不要直接编辑 `.claude/skills`。先更新 `.agents/skills`,再运行: ```bash bash scripts/sync-agent-skills.sh ``` -## Quick Commands +## 中文优先与国际化 + +- 文档、Rules、注释、维护者提示和数据库备注中文优先。 +- 代码标识符、命令、路径、API 字段、协议值和公开契约保持英文/原样。 +- 产品中的用户可见文案必须走 i18n/resource,不要在代码里硬编码中文。 +- `README.en.md` 保持英文,中文 README 是主要维护入口。 + +## 常用命令 ```bash bash scripts/check-repo-hygiene.sh @@ -20,4 +27,4 @@ bash scripts/check-android-i18n.sh bash scripts/sync-agent-skills.sh --check ``` -For code work, use the verification commands listed in `AGENTS.md`. +代码工作使用 `AGENTS.md` 中列出的验证命令。 diff --git a/NOTICE.md b/NOTICE.md index 798908f..cebd9ae 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -1,36 +1,37 @@ -# Commory Governance Notice +# Commory 治理声明 -Commory is a local-first communication memory system. The project turns SMS, calls, contacts, and future communication sources into structured MsgLayer data that users can keep locally or optionally sync to a self-hosted server. +Commory 是一个本地优先的通信记忆系统。项目把短信、通话记录、联系人和未来可扩展的通信来源转换为结构化 MsgLayer 数据,用户可以保存在本地,也可以选择同步到自托管服务器。 -## Principles +## 原则 -- Local-first: Android must be useful without a server account or network. -- Server-optional: Commory Server adds sync, search, and remote restore; it must not become a hidden requirement for local backup. -- Privacy-controlled: logs, errors, analytics, docs, and tests must not expose message bodies, contact contents, access tokens, refresh tokens, or private backup payloads. -- Contract-driven: Android, backend, web, and MsgLayer changes that cross boundaries must update docs and tests together. +- 本地优先:Android 在没有服务器账号或网络时也必须可用。 +- 服务器可选:Commory Server 提供同步、搜索和远程恢复能力,但不能成为本地备份的隐藏前置条件。 +- 隐私可控:日志、错误、分析、文档和测试不得暴露短信正文、联系人内容、access token、refresh token 或私有备份载荷。 +- 契约驱动:Android、backend、web、MsgLayer 的跨边界变更必须同步更新文档和测试。 +- 中文优先但不放弃国际化:维护文档和注释优先中文;产品用户可见文案必须走中英文 i18n/resource。 -## Repository Boundaries +## 仓库边界 -- `android/`: Commory Android client and SDK modules. -- `backend/`: self-hosted Commory Server. -- `web/`: Vue dashboard for server-backed workflows. -- `msglayer/`: canonical interchange schema and examples. -- `docs/`: current engineering and API documentation. -- `previewer/`: historical XML SMS viewer archive; do not update for current work. -- `references/`: read-only external reference code; do not develop features there. +- `android/`:Commory Android 客户端和 SDK 模块。 +- `backend/`:自托管 Commory Server。 +- `web/`:server-backed workflow 使用的 Vue dashboard。 +- `msglayer/`:canonical interchange schema 和 examples。 +- `docs/`:当前工程和 API 文档。 +- `previewer/`:历史 XML SMS viewer 归档;当前工作不要更新。 +- `references/`:只读外部参考代码;不要在那里开发功能。 -## Change History +## 变更历史 -Use standard changelog and review channels: +使用标准 changelog 和 review 渠道: -- Durable release history goes into the relevant `CHANGELOG.md`. -- Pull requests and commits describe implementation details, testing, and AI assistance where useful. -- Do not create or update `AI_EDIT_LOG.md`; AI-assisted work is not tracked in a special side log. +- 持久发布历史写入对应的 `CHANGELOG.md`。 +- Pull request 和 commit 说明实现细节、测试情况,以及必要的 AI 协助说明。 +- 不要创建或更新 `AI_EDIT_LOG.md`;AI 协助不使用专门旁路日志记录。 -## Standards +## 标准 -`docs/engineering-standards.md` is the canonical engineering standard. It covers naming, packages, skills, testing, logging, context management, and anti-bloat rules. +`docs/engineering-standards.md` 是唯一工程标准。它覆盖命名、包结构、skills、测试、日志、上下文管理、国际化边界和反膨胀规则。 -## License +## 许可证 -The root repository is licensed under GPL v3. External code under `references/` keeps its upstream license and is not automatically part of Commory's distributable source. +仓库根目录采用 GPL v3。`references/` 下的外部代码保持其上游许可证,并不会自动成为 Commory 可分发源码的一部分。 diff --git a/README.en.md b/README.en.md index f20c61d..3d5afee 100644 --- a/README.en.md +++ b/README.en.md @@ -24,6 +24,12 @@ The current product state is local backup plus optional server upload. The next The core principles remain: local-first, server-optional, privacy-controlled. +## Chinese-First Docs And Internationalization + +Chinese is the preferred language for maintainer-facing docs, rules, comments, and operational notes because the current maintainer is a native Chinese speaker. This English README remains the English entrypoint. + +User-facing product text must not be hard-coded in either Chinese or English. Web uses `vue-i18n` with `web/src/locales/langs/zh.json` and `web/src/locales/langs/en.json`; Android uses `values/`, `values-en/`, and `values-zh-rCN/` resources. Built-in internationalization covers Chinese and English; additional languages can be community-maintained later. + ## Components - `android/`: Commory Android client. App id is `com.iskenkenya.commory`; app source namespace is `com.iskenkenya.commory.mobile`; SDK namespaces are `com.iskenkenya.commory.sdk.*`. @@ -58,6 +64,10 @@ pnpm dev - Engineering standards: `docs/engineering-standards.md` - Governance notice: `NOTICE.md` - Mobile API contract: `docs/mobile-api.md` +- ADRs: + - `docs/adr/0001-参考资料治理.md` + - `docs/adr/0002-数据库-sqlc-迁移.md` + - `docs/adr/0003-agent-运行时边界.md` `.agents/skills` is the source of truth for project skills. `.claude/skills` is the Claude Code compatibility mirror. After changing skills, run: diff --git a/README.md b/README.md index 0b5c05a..81d62c2 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,12 @@ Commory 核心原则保持不变:本地优先,服务器可选,隐私可控。 +## 中文优先与国际化 + +中文是项目维护资料的优先语言,便于当前维护者快速理解架构、规则和上下文;[README.en.md](README.en.md) 保持英文版,不会因为中文优先而放弃国际化。 + +产品代码中的用户可见文案不应硬编码中文或英文。Web 使用 `vue-i18n`,内置 `web/src/locales/langs/zh.json` 与 `web/src/locales/langs/en.json`;Android 使用 `values/`、`values-en/`、`values-zh-rCN/` 资源。系统内置国际化只负责中文和英文,更多语言交给社区扩展。 + ## 组件 ### `android/` @@ -88,6 +94,10 @@ pnpm dev - 工程标准:[docs/engineering-standards.md](docs/engineering-standards.md) - 项目治理:[NOTICE.md](NOTICE.md) - 当前移动端契约:[docs/mobile-api.md](docs/mobile-api.md) +- ADR: + - [参考资料治理](docs/adr/0001-参考资料治理.md) + - [数据库 sqlc 迁移](docs/adr/0002-数据库-sqlc-迁移.md) + - [Agent 运行时边界](docs/adr/0003-agent-运行时边界.md) `.agents/skills` 是项目 Skills 的唯一手工维护来源,`.claude/skills` 是 Claude Code 兼容镜像。更新 Skills 后运行: diff --git a/android/README.md b/android/README.md index 68a3d8f..767db63 100644 --- a/android/README.md +++ b/android/README.md @@ -1,37 +1,44 @@ # Commory Android -Commory Android is the local-first client for collecting, exporting, restoring, and optionally syncing communication data. +Commory Android 是本地优先的客户端,负责采集、导出、恢复通信数据,并在用户选择时同步到 Commory Server。 -## Identity +## 身份与命名 -- Application id: `com.iskenkenya.commory` -- App namespace: `com.iskenkenya.commory.mobile` -- SDK namespaces: `com.iskenkenya.commory.sdk.backup`, `com.iskenkenya.commory.sdk.auth`, `com.iskenkenya.commory.sdk.storage` -- Product name: `Commory` +- Application id:`com.iskenkenya.commory` +- App namespace:`com.iskenkenya.commory.mobile` +- SDK namespaces:`com.iskenkenya.commory.sdk.backup`、`com.iskenkenya.commory.sdk.auth`、`com.iskenkenya.commory.sdk.storage` +- 产品名:`Commory` -The Go backend module name is independent from Android package naming and does not conflict with the client id. +Go backend module name 与 Android package naming 相互独立,不与客户端 id 冲突。 -## Runtime Modes +## 运行模式 -- `LOCAL_ONLY`: backup and restore run on device without auth or network. -- `COMMORY_SERVER`: local backup still happens first, then authenticated server upload can run when enabled. +- `LOCAL_ONLY`:备份和恢复在设备本地运行,不需要 auth 或网络。 +- `COMMORY_SERVER`:仍然先完成本地备份,然后在启用时执行已认证的服务器上传。 -Mode behavior is documented in [../docs/android-runtime-modes.md](../docs/android-runtime-modes.md). +模式行为记录在 [../docs/android-runtime-modes.md](../docs/android-runtime-modes.md)。 -## Modules +## 模块 ```text android/ -├── app/ # Compose UI, navigation, permissions, runtime mode, Android platform adapters +├── app/ # Compose UI、navigation、permissions、runtime mode、Android platform adapters └── sdk/ - ├── backup/ # Pure Kotlin backup/restore orchestration and MsgLayer mapping - ├── auth/ # Pure Kotlin auth contracts - └── storage/ # Android storage implementation and storage contracts + ├── backup/ # 纯 Kotlin 备份/恢复编排和 MsgLayer 映射 + ├── auth/ # 纯 Kotlin auth contracts + └── storage/ # Android storage implementation 和 storage contracts ``` -`app` may depend on SDK modules. SDK modules must not depend on `app`; pure Kotlin SDK modules must not import Android framework APIs. +`app` 可以依赖 SDK 模块。SDK 模块不得依赖 `app`;纯 Kotlin SDK 模块不得 import Android framework APIs。 -## Commands +## 国际化 + +- 用户可见字符串必须放在 Android resource 中,不要在 Kotlin/Compose 代码里硬编码中文或英文。 +- 内置语言只维护中文和英文:`values/strings.xml`、`values-en/strings.xml`、`values-zh-rCN/strings.xml`。 +- Compose UI 使用 `stringResource`。 +- 动态错误在 UI 边界前类型化,再用占位符本地化。 + +## 命令 ```bash ./gradlew :app:compileDebugKotlin @@ -40,13 +47,13 @@ android/ ./gradlew :sdk:auth:test ``` -Run Android checks from the `android/` directory. Use instrumented tests only when a device or emulator is required. +从 `android/` 目录运行 Android checks。只有需要设备或 emulator 时才使用 instrumented tests。 -## Documentation +## 文档 -- Engineering standards: [../docs/engineering-standards.md](../docs/engineering-standards.md) -- Mobile API contract: [../docs/mobile-api.md](../docs/mobile-api.md) -- Runtime modes: [../docs/android-runtime-modes.md](../docs/android-runtime-modes.md) -- Changelog: [CHANGELOG.md](CHANGELOG.md) +- 工程标准:[../docs/engineering-standards.md](../docs/engineering-standards.md) +- 移动端 API 契约:[../docs/mobile-api.md](../docs/mobile-api.md) +- 运行模式:[../docs/android-runtime-modes.md](../docs/android-runtime-modes.md) +- Changelog:[CHANGELOG.md](CHANGELOG.md) -Historical reports such as `AI_EDIT_LOG.md` are not used. Durable changes belong in `CHANGELOG.md`, PR descriptions, and commits. +项目不使用 `AI_EDIT_LOG.md` 这类历史报告。持久变更写入 `CHANGELOG.md`、PR 描述和 commits。 diff --git a/android/features.md b/android/features.md index 9ef77d2..7eaecc3 100644 --- a/android/features.md +++ b/android/features.md @@ -109,8 +109,9 @@ - **国际化框架**: - 字符串资源外部化 - - 支持中文(默认和zh-rCN)和英文(en) - - 可扩展架构,便于添加更多语言 + - 内置维护中文(默认和 zh-rCN)与英文(en) + - 用户可见文案必须进入 Android string resources,不在 Kotlin/Compose 代码中硬编码 + - 可扩展架构,便于社区后续添加更多语言 - **语言切换**: - 运行时切换界面语言 @@ -353,4 +354,4 @@ Commory Android/ 2. 数据分析和统计 3. 跨设备同步 4. 高级设置和自定义 -5. 更多数据类型支持 \ No newline at end of file +5. 更多数据类型支持 diff --git a/docs/adr/0001-reference-governance.md b/docs/adr/0001-reference-governance.md deleted file mode 100644 index ad35bbb..0000000 --- a/docs/adr/0001-reference-governance.md +++ /dev/null @@ -1,25 +0,0 @@ -# ADR 0001: Reference Governance and Clean-Room Learning - -## Status - -Accepted. - -## Context - -Commory benefits from studying strong Go, self-hosted, and agent systems. Some useful references use restrictive or unknown licenses, and some local snapshots may not be suitable as source material. We need a clear line between learning architecture and deriving implementation. - -## Decision - -All reference projects live under `references/` and are architecture inputs, not dependencies. Commory code must not import, copy, translate, or mechanically port code, strings, schemas, field names, or proprietary structures from reference projects. - -Permissive references such as MIT, Apache-2.0, and BSD projects may be studied deeply, but implementation still has to be Commory-owned. AGPL, GPL, LGPL, proprietary, and unknown-license references are read-only design material. Their lessons must be restated as Commory ADRs, interfaces, tests, or design notes before implementation. - -`references/ClaudeCodeSource` is clean-room only. It may inform product-level and architecture-level thinking about advanced agents, including task models, tool permissions, session continuity, bridge concepts, context compaction, command organization, and UX. It must not be used as a source for implementation details. - -## Consequences - -- `references/README.md` is the required catalog for reference purpose, license policy, learning targets, and prohibited borrowing. -- CI runs `scripts/check-reference-governance.sh` to catch uncataloged submodules and missing policy records. -- GitHubDaily is treated as a discovery index; every project found through it still needs separate license validation before being added. -- New architecture inspired by references should land as ADRs and Commory-owned interfaces before product integration. - diff --git "a/docs/adr/0001-\345\217\202\350\200\203\350\265\204\346\226\231\346\262\273\347\220\206.md" "b/docs/adr/0001-\345\217\202\350\200\203\350\265\204\346\226\231\346\262\273\347\220\206.md" new file mode 100644 index 0000000..a63afda --- /dev/null +++ "b/docs/adr/0001-\345\217\202\350\200\203\350\265\204\346\226\231\346\262\273\347\220\206.md" @@ -0,0 +1,24 @@ +# ADR 0001:参考资料治理与 clean-room 学习 + +## 状态 + +已接受。 + +## 背景 + +Commory 可以从优秀的 Go、自托管和 Agent 系统中学习架构经验。一些有价值的参考项目使用限制性或未知许可证,一些本地源码快照也不适合作为实现来源。项目需要明确区分“学习架构”和“派生实现”。 + +## 决策 + +所有参考项目都放在 `references/` 下,它们是架构输入,不是实现依赖。Commory 代码不得从参考项目中 import、复制、翻译或机械移植代码、字符串、schema、字段名或专有结构。 + +MIT、Apache-2.0、BSD 等宽松许可证参考项目可以深入学习,但实现仍必须是 Commory 自有。AGPL、GPL、LGPL、proprietary 和 unknown-license 参考项目只能作为只读设计材料。它们带来的经验必须先改写为 Commory 自有 ADR、interface、test 或 design note,再进入实现。 + +`references/ClaudeCodeSource` 仅限 clean-room 使用。它可以用于产品和架构层面的思考,例如高级 Agent 的 task model、tool permission、session continuity、bridge concept、context compaction、command organization 和 UX,但不得作为实现细节来源。 + +## 后果 + +- `references/README.md` 是必需目录,用来记录参考目的、许可证策略、学习目标和禁止借用的内容。 +- CI 运行 `scripts/check-reference-governance.sh`,拦截未登记 submodule 和缺失 policy 记录。 +- GitHubDaily 只作为 discovery index;通过它发现的每个项目在加入前仍需单独验证许可证。 +- 受参考资料启发的新架构,应先落为 ADR 和 Commory 自有 interface,再进入产品集成。 diff --git a/docs/adr/0002-database-sqlc-migrations.md b/docs/adr/0002-database-sqlc-migrations.md deleted file mode 100644 index 900f90a..0000000 --- a/docs/adr/0002-database-sqlc-migrations.md +++ /dev/null @@ -1,27 +0,0 @@ -# ADR 0002: SQLC and Versioned Migrations for Storage - -## Status - -Accepted. - -## Context - -Commory currently exposes `sqlite` and `postgres` providers, but both are backed by the same JSON file store adapter. That was useful for early product flow, but it is not a real multi-database foundation. - -The long-term target is SQLite for personal/local deployments and Postgres or MySQL for production or multi-user deployments. - -## Decision - -Commory will use explicit SQL plus generated types for the durable storage layer. The preferred route is `sqlc` with versioned migrations for SQLite, Postgres, and MySQL. - -Cross-database differences must be visible in query and migration organization instead of being hidden in scattered runtime branches. When behavior differs by database, the storage contract test should define the shared behavior and each driver should prove it. - -The existing JSON file store remains useful as a development fixture and migration source, but it must not be presented as a real SQLite or Postgres implementation. - -## Consequences - -- Add storage contract tests before replacing the current file-backed provider. -- Introduce schema migrations per supported database family. -- Generate typed query packages from SQL instead of introducing a business ORM. -- Keep setup and diagnostics explicit about the active database driver and persistence risk. - diff --git "a/docs/adr/0002-\346\225\260\346\215\256\345\272\223-sqlc-\350\277\201\347\247\273.md" "b/docs/adr/0002-\346\225\260\346\215\256\345\272\223-sqlc-\350\277\201\347\247\273.md" new file mode 100644 index 0000000..9d3cd69 --- /dev/null +++ "b/docs/adr/0002-\346\225\260\346\215\256\345\272\223-sqlc-\350\277\201\347\247\273.md" @@ -0,0 +1,26 @@ +# ADR 0002:存储层使用 SQLC 与版本化迁移 + +## 状态 + +已接受。 + +## 背景 + +Commory 目前暴露 `sqlite` 和 `postgres` provider,但两者底层都由同一个 JSON file store adapter 支撑。这对早期产品流程有帮助,但不是可靠的多数据库基础。 + +长期目标是:个人/本地部署优先 SQLite,生产或多人部署支持 Postgres 或 MySQL。 + +## 决策 + +Commory 的持久存储层使用显式 SQL 加生成类型。首选路线是 `sqlc` 配合 SQLite、Postgres、MySQL 的版本化 migrations。 + +跨数据库差异必须体现在 query 和 migration 组织中,而不是隐藏在分散的 runtime branches 里。当不同数据库行为存在差异时,storage contract test 定义共享行为,每个 driver 负责证明自己符合契约。 + +现有 JSON file store 仍可作为开发 fixture 和迁移来源,但不得再被展示为真实 SQLite 或 Postgres 实现。 + +## 后果 + +- 替换当前 file-backed provider 前,先增加 storage contract tests。 +- 为每个支持的数据库家族引入 schema migrations。 +- 从 SQL 生成 typed query packages,而不是引入业务 ORM。 +- setup 和 diagnostics 必须明确 active database driver 和 persistence risk。 diff --git a/docs/adr/0003-agent-runtime-boundaries.md b/docs/adr/0003-agent-runtime-boundaries.md deleted file mode 100644 index 2bf232c..0000000 --- a/docs/adr/0003-agent-runtime-boundaries.md +++ /dev/null @@ -1,27 +0,0 @@ -# ADR 0003: Agent Runtime Boundaries - -## Status - -Accepted. - -## Context - -Commory should learn from advanced agent systems without copying them. ClaudeCodeSource, Hermes, and OpenClaw show useful patterns around task state, tool permissions, provider registries, plugin boundaries, diagnostics, and session continuity. - -## Decision - -Commory's agent work starts with a small Go-owned boundary: - -`runtime -> provider adapter -> tool registry -> permission broker -> session store` - -The runtime owns orchestration. Providers own model I/O. Tools are described through Commory-owned metadata and invoked only through a registry. Permission decisions are explicit and testable. Sessions are persisted through an interface so the storage layer can evolve independently. - -Core packages must not depend on plugin implementations. Plugins can enter through SDK-style interfaces only. - -## Consequences - -- Agent code starts in `backend/internal/agent` with interfaces and narrow behavior tests. -- Product handlers should call services or runtimes, never reference provider or plugin internals directly. -- Any future plugin API must be additive, documented, and versioned before third-party use. -- Advanced concepts from references must be translated into Commory naming and behavior. - diff --git "a/docs/adr/0003-agent-\350\277\220\350\241\214\346\227\266\350\276\271\347\225\214.md" "b/docs/adr/0003-agent-\350\277\220\350\241\214\346\227\266\350\276\271\347\225\214.md" new file mode 100644 index 0000000..c44fe96 --- /dev/null +++ "b/docs/adr/0003-agent-\350\277\220\350\241\214\346\227\266\350\276\271\347\225\214.md" @@ -0,0 +1,26 @@ +# ADR 0003:Agent Runtime 边界 + +## 状态 + +已接受。 + +## 背景 + +Commory 需要向高级 Agent 系统学习,但不能复制它们。ClaudeCodeSource、Hermes 和 OpenClaw 展示了 task state、tool permissions、provider registries、plugin boundaries、diagnostics 和 session continuity 等有价值的模式。 + +## 决策 + +Commory 的 Agent 工作从一个很小的 Go 自有边界开始: + +`runtime -> provider adapter -> tool registry -> permission broker -> session store` + +runtime 负责 orchestration。provider 负责 model I/O。tool 通过 Commory 自有 metadata 描述,并且只能经由 registry 调用。permission decision 必须显式且可测试。session 通过 interface 持久化,让 storage layer 可以独立演进。 + +核心 packages 不得依赖 plugin implementation。plugin 只能通过 SDK-style interface 进入系统。 + +## 后果 + +- Agent 代码从 `backend/internal/agent` 开始,包含 interface 和窄行为测试。 +- 产品 handler 应调用 service 或 runtime,不直接引用 provider 或 plugin internals。 +- 未来 plugin API 必须是 additive、documented、versioned,才能开放给第三方。 +- 来自参考资料的高级概念必须翻译成 Commory 自有命名和行为。 diff --git a/docs/android-runtime-modes.md b/docs/android-runtime-modes.md index b24ecad..1d3d12d 100644 --- a/docs/android-runtime-modes.md +++ b/docs/android-runtime-modes.md @@ -1,18 +1,18 @@ -# Android Runtime Modes +# Android 运行模式 -Commory Android supports two explicit runtime modes. +Commory Android 支持两个明确的运行模式。 ## Local Only -- No account or server is required. -- Backup and restore use local app storage. -- Agent context policy is `LOCAL_ONLY`; context must not be sent to server-backed providers. -- Switching into local mode clears mobile auth tokens but preserves local backup files. +- 不需要账号或服务器。 +- 备份和恢复使用本地 app storage。 +- Agent context policy 为 `LOCAL_ONLY`;上下文不得发送给 server-backed provider。 +- 切换到 local mode 会清除移动端 auth tokens,但保留本地备份文件。 ## Commory Server -- User signs in with the existing Commory username/password auth flow. -- Backup still writes a local MsgLayer JSON file first. -- When `syncOnBackup` is enabled and a valid session exists, Android uploads the generated file to `/api/imports/upload`. -- Remote import history and export use authenticated Commory Server endpoints. -- Agent context policy is `SERVER_ALLOWED`, but future AI features must still apply relevance and minimum-necessary context filtering. +- 用户使用现有 Commory username/password auth flow 登录。 +- 备份仍然先写入本地 MsgLayer JSON 文件。 +- `syncOnBackup` 启用且存在有效 session 时,Android 把生成文件上传到 `/api/imports/upload`。 +- 远程 import history 和 export 使用已认证的 Commory Server endpoints。 +- Agent context policy 为 `SERVER_ALLOWED`,但未来 AI 功能仍必须应用相关性过滤和最小必要上下文过滤。 diff --git a/docs/architecture-roadmap.md b/docs/architecture-roadmap.md index 773047c..5bce080 100644 --- a/docs/architecture-roadmap.md +++ b/docs/architecture-roadmap.md @@ -1,31 +1,30 @@ -# Commory Architecture Roadmap +# Commory 架构路线图 -Commory is moving from prototype storage and direct handlers toward durable, testable service boundaries. The near-term work is intentionally boring: database correctness, authentication hardening, and architecture guardrails before richer agent behavior. +Commory 正在从原型存储和直接 handler 走向持久、可测试的 service 边界。近期工作刻意保持朴素:先补数据库正确性、认证加固和架构护栏,再扩展更丰富的 Agent 行为。 -## Phase 1: Durable Foundation +## 阶段 1:持久化基础 -- Replace the file-backed `sqlite` and `postgres` provider aliases with real SQL implementations. -- Use `sqlc` plus versioned migrations for SQLite, Postgres, and MySQL. -- Add storage contract tests for auth, setup, import/export, search, timeline, identities, and refresh token rotation. -- Make setup diagnostics explicit about database type and SQLite persistence risks. +- 把文件存储伪装的 `sqlite` 和 `postgres` provider alias 替换为真实 SQL 实现。 +- 使用 `sqlc` 加版本化 migrations 支持 SQLite、Postgres 和 MySQL。 +- 为 auth、setup、import/export、search、timeline、identities 和 refresh token rotation 增加 storage contract tests。 +- setup diagnostics 必须明确当前 database type 和 SQLite persistence risk。 -## Phase 2: Authentication and Permissions +## 阶段 2:认证与权限 -- Keep short-lived access tokens with refresh token rotation. -- Add session/device records, revoke audit, and typed role constants for user/admin/root behavior. -- Keep HTTP middleware thin; auth decisions belong in service-level code. +- 保持短生命周期 access tokens,并使用 refresh token rotation。 +- 增加 session/device records、revoke audit,以及 user/admin/root 行为的 typed role constants。 +- HTTP middleware 保持薄层;认证授权决策放在 service-level code。 -## Phase 3: Agent Runtime +## 阶段 3:Agent Runtime -- Build the Go-owned runtime boundary in `backend/internal/agent`. -- Add provider adapters behind interfaces. -- Add a tool registry and permission broker before allowing tools to mutate local state. -- Persist task/session state through storage interfaces. +- 在 `backend/internal/agent` 建立 Go 自有 runtime boundary。 +- 通过 interface 增加 provider adapters。 +- 在允许 tool 修改本地状态前,先建立 tool registry 和 permission broker。 +- 通过 storage interfaces 持久化 task/session state。 -## Phase 4: Reference Mining - -- Use GitHubDaily to discover candidate Go projects. -- Prefer MIT, Apache-2.0, and BSD references. -- Use AGPL/GPL/LGPL/unknown-license projects only for read-only architecture observation. -- Record every accepted reference in `references/README.md`. +## 阶段 4:参考资料挖掘 +- 使用 GitHubDaily 发现候选 Go 项目。 +- 优先选择 MIT、Apache-2.0 和 BSD 参考项目。 +- AGPL/GPL/LGPL/unknown-license 项目只用于只读架构观察。 +- 每个被接受的参考项目都必须记录在 `references/README.md`。 diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md index 6d514a3..bdc09eb 100644 --- a/docs/engineering-standards.md +++ b/docs/engineering-standards.md @@ -1,85 +1,91 @@ -# Engineering Standards +# 工程标准 -This is the canonical engineering standard for Commory. Keep durable rules here, keep agent workflow entrypoints in `AGENTS.md`, and keep release history in `CHANGELOG.md`. +这是 Commory 的唯一工程标准。长期规则放在这里,Agent 工作流入口放在 `AGENTS.md`,发布历史放在 `CHANGELOG.md`。 -## Architecture Boundaries +## 架构边界 -- Android `app` owns Compose UI, permissions, platform readers/writers, navigation, runtime mode setup, and Android-specific networking. -- Android `sdk/backup` owns pure Kotlin backup/restore orchestration and MsgLayer mapping. -- Android `sdk/auth` owns pure Kotlin auth contracts. -- Android `sdk/storage` owns storage contracts and Android storage implementation. -- Backend handlers stay thin: parse HTTP, call auth/storage/query/import/setup services, return envelopes. -- Web owns server-backed dashboard workflows and must follow existing Vue 3, Vite, Pinia, Element Plus patterns. -- MsgLayer schema is the canonical interchange format between Android, backend, web, and future agents. +- Android `app` 负责 Compose UI、权限、平台读写器、导航、运行模式设置和 Android 专属网络能力。 +- Android `sdk/backup` 负责纯 Kotlin 备份/恢复编排和 MsgLayer 映射。 +- Android `sdk/auth` 负责纯 Kotlin 认证契约。 +- Android `sdk/storage` 负责存储契约和 Android 存储实现。 +- Backend handler 保持薄层:解析 HTTP、调用 auth/storage/query/import/setup service、返回 envelope。 +- Web 负责 server-backed dashboard workflow,并遵循 `web/` 现有 Vue 3、Vite、Pinia、Element Plus 模式。 +- MsgLayer schema 是 Android、backend、web 和未来 agent 之间的 canonical interchange format。 -## Naming +## 命名 -- Android application id: `com.iskenkenya.commory`. -- Android app namespace and source packages: `com.iskenkenya.commory.mobile`. -- Android SDK packages: `com.iskenkenya.commory.sdk.*`. -- Backend Go module remains `github.com/IsKenKenYa/Commory/backend`. -- Current user-visible product name is `Commory`; old names may remain only in historical changelog entries. +- Android application id:`com.iskenkenya.commory`。 +- Android app namespace 和源码包:`com.iskenkenya.commory.mobile`。 +- Android SDK 包:`com.iskenkenya.commory.sdk.*`。 +- Backend Go module 保持 `github.com/IsKenKenYa/Commory/backend`。 +- 当前用户可见产品名是 `Commory`;旧名称只能作为历史保留在历史 changelog 中。 -## Repository Boundaries +## 仓库边界 -- `previewer/` is a historical archive. Do not update it for current roadmap, CI, docs, or naming work. -- `references/` is read-only external reference code. -- `.agents/skills` is the source of truth for project skills. -- `.claude/skills` is generated from `.agents/skills` for Claude Code compatibility. -- Do not add tracked build output, logs, `.DS_Store`, IDE files, debug reports, or `AI_EDIT_LOG.md`. +- `previewer/` 是历史归档。当前 roadmap、CI、文档或命名工作不要更新它。 +- `references/` 是只读外部参考代码。 +- `.agents/skills` 是项目 skills 的唯一手工维护来源。 +- `.claude/skills` 由 `.agents/skills` 生成,用于 Claude Code 兼容。 +- 不要新增已追踪构建产物、日志、`.DS_Store`、IDE 文件、调试报告或 `AI_EDIT_LOG.md`。 + +## 中文优先与国际化 + +- 文档、Rules、代码注释、维护者提示、测试失败信息和数据库备注中文优先。 +- 产品代码里的用户可见文本必须走国际化,不要因为中文优先而硬编码中文。 +- Web 使用 `vue-i18n`,配置在 `web/src/locales/index.ts`,内置语言包为 `web/src/locales/langs/zh.json` 和 `web/src/locales/langs/en.json`。 +- Android 用户可见字符串必须同时存在于 `values/strings.xml`、`values-en/strings.xml`、`values-zh-rCN/strings.xml`。 +- Compose UI 必须使用 `stringResource`。 +- 动态错误应在 UI 边界前类型化,并通过占位符本地化。 +- 系统内置国际化只负责中文和英文;其它语言留给社区扩展。 +- 不要翻译代码标识符、JSON key、数据库字段名、HTTP endpoint、配置项、命令、包名、常量值和公开契约。 +- `README.md` 是中文优先入口;`README.en.md` 保持英文镜像。 ## Skills -Skills are context-loading tools, not general documentation folders. +Skills 是上下文加载工具,不是通用文档目录。 -- Required per skill: `SKILL.md` with concise frontmatter (`name`, `description`) and a lean workflow. -- Recommended: `agents/openai.yaml` when UI metadata is needed. -- Optional: `scripts/`, `references/`, `assets/`. -- Forbidden inside skills: `README.md`, `CHANGELOG.md`, `AGENTS.md`, install guides, quick references, and duplicated long-form docs. +- 每个 skill 必需:`SKILL.md`,包含简洁 frontmatter(`name`、`description`)和精简 workflow。 +- 推荐:需要 UI metadata 时使用 `agents/openai.yaml`。 +- 可选:`scripts/`、`references/`、`assets/`。 +- skill 内禁止:`README.md`、`CHANGELOG.md`、`AGENTS.md`、安装指南、快速参考和重复的大段文档。 -When updating skills, edit `.agents/skills`, then run: +更新 skills 时,编辑 `.agents/skills`,然后运行: ```bash bash scripts/sync-agent-skills.sh ``` -Use `bash scripts/sync-agent-skills.sh --check` in CI or review to ensure `.claude/skills` has not drifted. - -## Context Management - -Use the smallest context bundle needed: +CI 或 review 中使用 `bash scripts/sync-agent-skills.sh --check` 确认 `.claude/skills` 没有漂移。 -- Android UI: navigation host, target screen, string resources, related ViewModel. -- Android auth/network: runtime environment, auth provider, server client, SDK contracts, mobile API docs. -- Backend API: server handler, auth middleware/service, storage provider, API tests, mobile API docs. -- Web: API client, auth store, route guards, target view, existing dashboard conventions. -- MsgLayer: schema, examples, validators, Android mapper/serializer. -- Governance: this file, `AGENTS.md`, CI workflow, scripts, and skills. +## 上下文管理 -Avoid new shared abstractions unless they remove real duplication or clarify a cross-module contract. Large files or large diffs require decomposition or a short PR justification. +使用能完成任务的最小上下文包: -## Localization +- Android UI:navigation host、目标 screen、字符串资源、相关 ViewModel。 +- Android auth/network:runtime environment、auth provider、server client、SDK contracts、mobile API docs。 +- Backend API:server handler、auth middleware/service、storage provider、API tests、mobile API docs。 +- Web:API client、auth store、route guards、目标 view、现有 dashboard conventions。 +- MsgLayer:schema、examples、validators、Android mapper/serializer。 +- 治理:本文件、`AGENTS.md`、CI workflow、scripts、skills。 -- Every Android user-visible string must exist in `values/strings.xml`, `values-en/strings.xml`, and `values-zh-rCN/strings.xml`. -- Compose UI must use `stringResource`. -- Dynamic errors should be typed before the UI boundary and localized with placeholders. +除非能消除真实重复或澄清跨模块契约,否则不要新增共享抽象。大文件或大 diff 需要拆分,或在 PR 中给出简短理由。 -## Logging And Privacy +## 日志与隐私 -- Logs may identify subsystem and operation context. -- Logs must not include message bodies, contact contents, auth tokens, refresh tokens, backup payloads, or private server URLs with credentials. -- Server upload failures must be non-destructive when a local backup already exists. -- Local-only mode must not require backend auth or network. +- 日志可以标识 subsystem 和 operation context。 +- 日志不得包含短信正文、联系人内容、auth token、refresh token、备份载荷,或带凭据的私有服务器 URL。 +- 本地备份已经成功时,服务器上传失败必须是非破坏性的。 +- Local-only mode 不得要求 backend auth 或网络。 -## Testing +## 测试 -- Backend core packages target strong coverage for storage, auth, validators, import/query logic, setup, and mobile contracts. -- Android SDK pure Kotlin logic should use JVM tests. -- Android ViewModel/domain behavior should use JVM tests where possible. -- Instrumented tests are reserved for permissions, content providers, Compose flows, and platform behavior. -- Web changes must pass lint and production build. +- Backend 核心包应重点覆盖 storage、auth、validators、import/query logic、setup 和 mobile contracts。 +- Android SDK 纯 Kotlin 逻辑使用 JVM tests。 +- Android ViewModel/domain 行为尽量使用 JVM tests。 +- Instrumented tests 只用于权限、content providers、Compose flows 和平台行为。 +- Web 变更必须通过 lint 和 production build。 -## Quality Gates +## 质量门禁 ```bash cd backend && go vet ./... && go test ./... -coverprofile=coverage.out @@ -90,11 +96,11 @@ bash scripts/check-android-i18n.sh bash scripts/sync-agent-skills.sh --check ``` -## Release Checklist +## 发布检查 -- Mobile API contract still matches `docs/mobile-api.md`. -- Local-only mode works without network or auth. -- Server mode validates setup, login/register, refresh, logout, upload, list, and export flows. -- Android locale keys are complete. -- Cross-boundary API/schema changes include docs and tests. -- Changelog entries describe user-facing and compatibility changes. +- Mobile API contract 仍与 `docs/mobile-api.md` 一致。 +- Local-only mode 在没有网络或 auth 时可用。 +- Server mode 覆盖 setup、login/register、refresh、logout、upload、list、export flows。 +- Android locale keys 完整。 +- 跨边界 API/schema 变更包含文档和测试。 +- Changelog 说明用户可见变更和兼容性变化。 diff --git a/docs/mobile-api.md b/docs/mobile-api.md index 78360ef..d0b907d 100644 --- a/docs/mobile-api.md +++ b/docs/mobile-api.md @@ -1,10 +1,10 @@ -# Mobile API Contract +# 移动端 API 契约 -The Android app uses Commory Server only when the user selects `COMMORY_SERVER`. `LOCAL_ONLY` never requires authentication or network access. +Android app 只有在用户选择 `COMMORY_SERVER` 时才使用 Commory Server。`LOCAL_ONLY` 从不要求认证或网络访问。 ## Envelope -JSON API responses use: +JSON API 响应使用: ```json { @@ -14,13 +14,13 @@ JSON API responses use: } ``` -Errors use the same envelope with `data: null` and an HTTP status code matching `code`. Android displays `msg` as a retryable user-facing error after localization wrapping. +错误响应使用相同 envelope,`data: null`,HTTP status code 与 `code` 对齐。Android 不应直接把服务端 `msg` 当最终文案展示;它应包裹为可重试、可本地化的用户错误。 ## Setup - `GET /api/setup` -- Public endpoint. -- Returns whether the server has been initialized. +- 公开 endpoint。 +- 返回服务器是否已经初始化。 ```json { @@ -33,35 +33,35 @@ Errors use the same envelope with `data: null` and an HTTP status code matching ## Auth - `POST /api/auth/register` -- Body: `{ "userName": "alice", "email": "alice@example.com", "password": "..." }` -- Response data: `{ "user": User, "token": "access", "refreshToken": "refresh" }` +- Body:`{ "userName": "alice", "email": "alice@example.com", "password": "..." }` +- Response data:`{ "user": User, "token": "access", "refreshToken": "refresh" }` - `POST /api/auth/login` -- Body: `{ "userName": "alice", "password": "..." }` -- Response data matches register. +- Body:`{ "userName": "alice", "password": "..." }` +- Response data 与 register 一致。 - `POST /api/auth/refresh` -- Body: `{ "refreshToken": "refresh" }` -- Response data: `{ "token": "access", "refreshToken": "refresh" }` +- Body:`{ "refreshToken": "refresh" }` +- Response data:`{ "token": "access", "refreshToken": "refresh" }` -Android sends authenticated requests with `Authorization: Bearer `. +Android 通过 `Authorization: Bearer ` 发送认证请求。 ## User - `GET /api/user/info` -- Authenticated. -- Returns the current user record. Android uses id, username, email, and roles for session display only. +- 需要认证。 +- 返回当前用户记录。Android 只使用 id、username、email 和 roles 做 session 展示。 ## Imports - `GET /api/imports` -- Authenticated. -- Returns import summaries with id, schema version, import timestamp, source path, event count, and identity count. +- 需要认证。 +- 返回 import summaries,包括 id、schema version、import timestamp、source path、event count 和 identity count。 - `POST /api/imports/upload` -- Authenticated. -- Body: raw `application/json` MsgLayer export or multipart `file`. -- Response data: +- 需要认证。 +- Body:原始 `application/json` MsgLayer export 或 multipart `file`。 +- Response data: ```json { @@ -71,12 +71,12 @@ Android sends authenticated requests with `Authorization: Bearer ` ``` - `GET /api/imports/{importId}/export` -- Authenticated. -- Returns the raw MsgLayer JSON export for restore or local inspection. +- 需要认证。 +- 返回原始 MsgLayer JSON export,用于恢复或本地检查。 -## Mobile Behavior +## 移动端行为 -- Server mode always writes a local backup first. -- If `syncOnBackup` is enabled and the user is authenticated, Android uploads the generated MsgLayer JSON to `/api/imports/upload`. -- Switching to local mode clears the mobile session but does not delete local backup files. -- Network, auth, and validation failures must not invalidate the local backup. +- Server mode 始终先写本地备份。 +- `syncOnBackup` 启用且用户已认证时,Android 把生成的 MsgLayer JSON 上传到 `/api/imports/upload`。 +- 切回 local mode 会清除 mobile session,但不删除本地备份文件。 +- 网络、认证和验证失败不得让已经生成的本地备份失效。 diff --git a/msglayer/docs/indexing.md b/msglayer/docs/indexing.md index c037cb9..c7cc04d 100644 --- a/msglayer/docs/indexing.md +++ b/msglayer/docs/indexing.md @@ -1,6 +1,6 @@ -# MsgLayer Indexing Notes +# MsgLayer 索引说明 -`MsgLayer` separates canonical exported data from query-time indexes. +`MsgLayer` 把 canonical exported data 与查询时索引分开。 ## Canonical Source @@ -8,18 +8,18 @@ - identities - events -## First Query Indexes +## 首批查询索引 -- keyword search across SMS text, voice transcript, voice summary +- 跨 SMS text、voice transcript、voice summary 的 keyword search - participant/contact grouping -- timeline ordering by event timestamp -- thread reconstruction from `same_thread` +- 按 event timestamp 排序的 timeline +- 从 `same_thread` 重建 thread -## Storage Direction +## 存储方向 -The first backend release supports: +首个 backend 版本支持: -- SQLite for local-first deployment -- PostgreSQL for service-style deployment +- SQLite:用于 local-first deployment +- PostgreSQL:用于 service-style deployment -The schema is normalized enough to support future adapters without changing the exported `MsgLayer` wire format. +schema 已做基础规范化,以便未来增加 adapter 时不改变导出的 `MsgLayer` wire format。 diff --git a/msglayer/docs/mapping-android.md b/msglayer/docs/mapping-android.md index 81bbdf4..4686186 100644 --- a/msglayer/docs/mapping-android.md +++ b/msglayer/docs/mapping-android.md @@ -1,27 +1,27 @@ -# Android -> MsgLayer v0.1 Mapping +# Android -> MsgLayer v0.1 映射 -This document defines the first stable mapping from the current Android backup models to `msglayer/v0.1`. +本文定义当前 Android backup models 到 `msglayer/v0.1` 的第一版稳定映射。 ## Root -- `version` -> fixed `msglayer/v0.1` -- `exported_at` -> export wall-clock time in RFC3339 UTC +- `version` -> 固定为 `msglayer/v0.1` +- `exported_at` -> RFC3339 UTC 格式的导出时间 - `source.platform` -> `android` -- `source.device_id` -> Android device identifier passed in by the app layer -- `source.app_version` -> Android app version passed in by the app layer +- `source.device_id` -> app layer 传入的 Android device identifier +- `source.app_version` -> app layer 传入的 Android app version ## Self Identity -Every export creates a stable self identity: +每次 export 都创建一个稳定的 self identity: - `id` -> `self/` - `type` -> `device` -- `display_name` -> device info string when available +- `display_name` -> 可用时使用 device info string - `labels` -> `["self"]` ## Contact -> Identity -Android `Contact` maps to a MsgLayer `identity` with: +Android `Contact` 映射为 MsgLayer `identity`: - `type` -> `person` - `phones` -> `phoneNumbers` @@ -29,16 +29,16 @@ Android `Contact` maps to a MsgLayer `identity` with: - `avatar` -> `photoData` - `meta.source` -> `contacts` -Stable identity IDs are generated from normalized phone numbers when possible, and fall back to contact ID/name fingerprints when no phone number exists. +稳定 identity IDs 优先由规范化手机号生成;没有手机号时,退回使用 contact ID/name fingerprints。 ## Contact -> contact_snapshot Event -Every exported identity from contacts also generates a `contact_snapshot` event: +contacts 导出的每个 identity 也会生成一个 `contact_snapshot` event: - `direction` -> `system` -- `participants` -> the contact identity itself -- `content.identity_id` -> the identity ID -- `content.snapshot` -> the identity payload +- `participants` -> contact identity itself +- `content.identity_id` -> identity ID +- `content.snapshot` -> identity payload - `relations` -> `references_identity` ## Message -> sms Event @@ -48,7 +48,7 @@ Every exported identity from contacts also generates a `contact_snapshot` event: - `Message.type` -> `direction` - `1` => `inbound` - `2` => `outbound` - - `3/4/5/6` => exported as `outbound` for schema compatibility while preserving the original Android type in `meta.raw_type` + - `3/4/5/6` => 为了 schema compatibility 导出为 `outbound`,同时在 `meta.raw_type` 保留原始 Android type - fallback => `inbound` - `Message.address` -> participant identity resolution input - `Message.body` -> `content.text` @@ -61,31 +61,31 @@ Every exported identity from contacts also generates a `contact_snapshot` event: - `CallLog.id` -> event ID suffix - `CallLog.date` -> event timestamp - `CallLog.number` / `CallLog.contact` -> participant identity resolution input -- `CallLog.type` -> `direction` and `content.call_type` +- `CallLog.type` -> `direction` 和 `content.call_type` - `CallLog.duration` -> `content.duration_sec` - `CallLog.contact` -> `meta.contact_name` -Timestamp ordering in exports relies on the mapper normalizing all event timestamps to UTC RFC3339 before sorting. +export 中的 timestamp ordering 依赖 mapper:它必须先把所有 event timestamps 规范化为 UTC RFC3339,再排序。 ## Restore Boundary -`MsgLayer` is now the primary export format. +`MsgLayer` 现在是主要 export format。 -Current restore compatibility is maintained by converting `MsgLayer` events back into the existing Android restore DTOs: +当前 restore compatibility 通过把 `MsgLayer` events 转换回现有 Android restore DTOs 来保持: - `sms` -> `SmsData` - `call` -> `CallLogData` - `identity/contact_snapshot` -> `ContactData` -This keeps restore behavior working while the write path moves to the new standard. +这样可以在 write path 迁移到新标准时,继续保持 restore 行为可用。 -## Known Data Loss On Round-Trip +## Round-Trip 中已知数据损失 -The `MsgLayer -> legacy restore DTO` bridge intentionally preserves compatibility over perfect fidelity in v0.1. +`MsgLayer -> legacy restore DTO` bridge 在 v0.1 中刻意优先兼容性,而不是完美保真。 -Known losses today: +当前已知损失: -- contact `groups`, `websites`, and `note` remain in identity metadata only -- avatar/photo data is not restored into the legacy contact DTO -- legacy Android raw message/call types remain metadata, not first-class restore fields -- non-numeric event IDs fall back to derived numeric IDs during restore bridging +- contact `groups`、`websites` 和 `note` 只保留在 identity metadata 中 +- avatar/photo data 不会恢复进 legacy contact DTO +- legacy Android raw message/call types 保留为 metadata,而不是 first-class restore fields +- 非数字 event IDs 在 restore bridge 中会退回为派生 numeric IDs diff --git a/msglayer/docs/versioning.md b/msglayer/docs/versioning.md index 7c55839..c35dc0a 100644 --- a/msglayer/docs/versioning.md +++ b/msglayer/docs/versioning.md @@ -1,25 +1,25 @@ -# MsgLayer Versioning +# MsgLayer 版本管理 -## Current Version +## 当前版本 - `msglayer/v0.1` -## Rules +## 规则 -- Backward-compatible additive fields stay within the same major/minor version line. -- Breaking structural changes require a new schema version. -- Schema files, examples, Android mappers, and Go types must evolve together. -- `indexes` is optional derived data and must never become the canonical source of truth. +- 向后兼容的 additive fields 保持在同一 major/minor version line 内。 +- 破坏性结构变更必须使用新的 schema version。 +- Schema files、examples、Android mappers 和 Go types 必须一起演进。 +- `indexes` 是可选派生数据,绝不能成为 canonical source of truth。 -## Compatibility Intent +## 兼容性意图 -`v0.1` is the first stable interchange format for Commory. +`v0.1` 是 Commory 的第一个稳定 interchange format。 -- Android export switches to `MsgLayer` -- Go backend import/validation targets `MsgLayer` -- legacy backup JSON remains restore-compatible only through bridge converters +- Android export 切换到 `MsgLayer` +- Go backend import/validation 目标为 `MsgLayer` +- legacy backup JSON 只通过 bridge converters 保持 restore-compatible -## Relation Type Status In v0.1 +## v0.1 Relation Type 状态 -- Active in current code paths: `same_thread`, `references_identity` -- Reserved for future producers/consumers: `reply_to`, `derived_from` +- 当前 code paths 已启用:`same_thread`、`references_identity` +- 为未来 producers/consumers 预留:`reply_to`、`derived_from` From 8b941f28252406509215634aae4c2fdb45e0c9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 10:34:40 +0800 Subject: [PATCH 12/20] =?UTF-8?q?feat(deploy):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=8D=95=E7=AB=AF=E5=8F=A3=E9=83=A8=E7=BD=B2=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81backend=E5=90=8C=E6=BA=90=E6=8F=90=E4=BE=9Bweb?= =?UTF-8?q?=E9=9D=99=E6=80=81=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增Dockerfile与docker-compose.yml,支持一键容器化部署 - 新增.env.example与web/.env.production环境配置示例 - 为backend添加WebRoot配置与SPA静态资源处理逻辑 - 新增开发脚本scripts/dev.sh,支持本地同时启动backend与web dev server - 补充完整项目文档与PR模板,更新工程规范与技术债清单 - 添加后端静态资源服务测试用例,确保API与web路由互不干扰 --- .dockerignore | 25 ++++++ .env.example | 10 +++ .github/pull_request_template.md | 41 +++++++++ .gitignore | 2 + AGENTS.md | 24 ++++++ CHANGELOG.md | 19 +++++ CLAUDE.md | 9 ++ Dockerfile | 33 ++++++++ backend/internal/api/server.go | 25 ++++++ backend/internal/api/static_web_test.go | 106 ++++++++++++++++++++++++ backend/internal/config/config.go | 12 +++ docker-compose.yml | 23 +++++ docs/architecture-roadmap.md | 9 +- docs/engineering-standards.md | 24 ++++++ docs/project-management.md | 35 ++++++++ docs/technical-debt.md | 21 +++++ docs/web-dashboard-guidelines.md | 33 ++++++++ scripts/dev.sh | 33 ++++++++ web/.env.production | 10 +++ 19 files changed, 493 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/pull_request_template.md create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 backend/internal/api/static_web_test.go create mode 100644 docker-compose.yml create mode 100644 docs/project-management.md create mode 100644 docs/technical-debt.md create mode 100644 docs/web-dashboard-guidelines.md create mode 100755 scripts/dev.sh create mode 100755 web/.env.production diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6a8a3db --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +.git +.DS_Store +**/.DS_Store + +android/.gradle +android/**/build +android/app/debug +android + +backend/commory +backend/coverage.out +backend/data + +web/node_modules +web/dist +web/.auto-import.json +web/src/types/import/auto-imports.d.ts +web/src/types/import/components.d.ts + +previewer/node_modules +previewer/dist +previewer + +references +references/*/.git diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e5ede5d --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +# Commory Docker Compose 示例配置 + +# 单端口入口:http://localhost:3000 +COMMORY_HTTP_PORT=3000 + +# 生产环境必须替换为足够长的随机密钥。 +COMMORY_AUTH_SECRET=change-me + +# 开发可使用 development;生产建议设置为 production。 +COMMORY_ENV=development diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..59e20f0 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,41 @@ +# 变更描述 + +请说明本 PR 解决的问题、用户可见变化和主要实现方式。 + +## 影响范围 + +- [ ] Android +- [ ] Backend +- [ ] Web +- [ ] MsgLayer/schema +- [ ] Agent/runtime +- [ ] Docker/部署 +- [ ] 文档/Rules + +## 契约一致性 + +- [ ] API 变更已同步 `docs/mobile-api.md` +- [ ] MsgLayer 变更已同步 schema、examples、Android mapper 和 Go types +- [ ] Web 用户可见文案已同步 `zh.json` 和 `en.json` +- [ ] Android 用户可见文案已同步 `values/`、`values-en/`、`values-zh-rCN/` + +## 隐私与本地模式 + +- [ ] Local-only mode 不需要网络或 auth +- [ ] 日志不包含短信正文、联系人内容、token、备份载荷或带凭据 URL +- [ ] Agent context policy 符合最小必要上下文原则 + +## 测试 + +请列出已运行的命令和结果: + +```bash + +``` + +## 发布与兼容性 + +- [ ] 需要更新 `CHANGELOG.md` +- [ ] 需要迁移说明 +- [ ] 需要 Docker Compose 验证 +- [ ] 跨 Android + Backend + Web + MsgLayer 的变更已完成多端检查 diff --git a/.gitignore b/.gitignore index 96f794e..bc77318 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ Thumbs.db # Environment .env .env.* +!.env.example +!web/.env.production # Android android/.gradle/ diff --git a/AGENTS.md b/AGENTS.md index 811dd72..61427f6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,6 +10,7 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - Web dashboard 工作:`web/package.json`、`web/src/api`、`web/src/router`,以及目标 view/store 模块。 - MsgLayer/schema 工作:`msglayer/schema/v0.1/root.schema.json`、`msglayer/examples`,以及 `backend/internal/msglayer`。 - 治理或 CI 工作:`docs/engineering-standards.md`、`.github/workflows/ci.yml`、`scripts/`、`.agents/skills`、`.claude/skills`。 +- Docker/部署工作:`Dockerfile`、`docker-compose.yml`、`.env.example`、backend config、web production env。 ## 上下文包 @@ -19,6 +20,7 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - Web dashboard 包:API client、auth store、route guard、目标 view,以及 `web/` 已使用的 Element Plus patterns。 - MsgLayer 包:schema、examples、validators、Android mapper/serializer。 - 治理包:engineering standards、CI workflow、repo hygiene、skills sync、i18n check。 +- 部署包:Dockerfile、Compose、环境变量、backend static handler、Web build 输出。 只加载任务需要的上下文包。不要把临时决策扩散到工具专属文件;长期规则放在 `docs/engineering-standards.md`,Agent 入口放在本文件,发布历史放在 `CHANGELOG.md`。 @@ -30,6 +32,14 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - `.claude/skills` 是 Claude Code 兼容镜像,由脚本生成。不要手改;运行 `bash scripts/sync-agent-skills.sh`。 - 不要新增 `AI_EDIT_LOG.md`、调试报告、已追踪日志、构建产物、`.DS_Store` 或 IDE/cache 文件。 +## 项目管理 + +- `CHANGELOG.md` 记录用户可见变更、兼容性影响和迁移说明;当前版本采用 `v0.x.y`。 +- `docs/project-management.md` 定义发布、分支、PR 和两审合并规则。 +- `docs/technical-debt.md` 记录已知技术债,不要把无关债务混入功能 PR。 +- 禁止直接推送 `main`;`feat/*` 用于功能,`fix/*` 用于修复。 +- 跨 Android、Backend、Web、MsgLayer、Agent、Docker 的变更必须同步评估契约、文档、测试和部署影响。 + ## 命名 - Android app id:`com.iskenkenya.commory`。 @@ -48,6 +58,19 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - 不要翻译代码标识符、JSON key、数据库字段名、HTTP endpoint、配置项、命令、包名、常量值和公开契约。 - `README.en.md` 是英文 README,保持英文;中文 README 更新了产品能力时,同步检查英文 README 是否需要对应更新。 +## Web Dashboard + +- Web UI 以 `references/art-design-pro` 为模板基线,以 `references/memos/web` 为产品组织参考;只学习结构,不复制参考源码。 +- 新 Web 页面必须满足中英 i18n、dark mode、主题变量、ECharts 配色、布局密度和 Element Plus 使用规范。 +- 具体规则见 `docs/web-dashboard-guidelines.md`。 + +## 部署 + +- 默认部署形态是单端口:Go backend 同时提供 `/api/*` 和 Web 静态资源。 +- 生产镜像使用根目录 `Dockerfile`;不要新增 `Dockerfile.backend` 或 `web/Dockerfile`,除非后续明确拆分企业部署。 +- `docker-compose.yml` 只暴露一个外部端口,默认 `3000:3000`,避免 CORS 成为默认复杂度。 +- Web production API 使用同源 `/`,开发环境继续通过 Vite proxy 转发 `/api`。 + ## Skills 项目 skills 必须遵循 Codex skill 形态: @@ -65,3 +88,4 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - Android:`cd android && ./gradlew :app:compileDebugKotlin && ./gradlew :app:testDebugUnitTest`。 - Web:`cd web && pnpm install --frozen-lockfile && pnpm lint && pnpm build`。 - 治理:`bash scripts/check-repo-hygiene.sh`、`bash scripts/check-android-i18n.sh`、`bash scripts/sync-agent-skills.sh --check`、`bash scripts/report-loc-complexity.sh`。 +- Docker:`docker compose config`、`docker compose build`,必要时 `docker compose up` 后检查 `/` 与 `/api/setup`。 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a13aeb2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +Commory 使用 `v0.x.y` 语义化版本。`v0` 阶段 API 和 schema 仍可能变化;每个版本必须记录用户可见变更、兼容性影响和迁移说明。 + +## Unreleased + +### Added + +- 单端口部署规划:Go backend 可同时提供 `/api` 和 Web 静态资源。 +- 根目录 Docker Compose 开发部署入口。 +- 项目管理、技术债和 Web dashboard 规范文档。 + +### Changed + +- Web 生产环境 API 默认改为同源 `/`,避免生产部署中的 CORS 配置负担。 + +### Compatibility + +- 当前 Docker Compose 仍使用 file-backed sqlite 开发存储;真实 SQL 存储迁移以后再扩展 Postgres/MySQL 部署方案。 diff --git a/CLAUDE.md b/CLAUDE.md index 61a8eed..372a934 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,12 +19,21 @@ bash scripts/sync-agent-skills.sh - 产品中的用户可见文案必须走 i18n/resource,不要在代码里硬编码中文。 - `README.en.md` 保持英文,中文 README 是主要维护入口。 +## 部署与 Web + +- 默认部署是单端口:Go backend 同时提供 `/api/*` 和 Web 静态资源。 +- 根目录 `Dockerfile` 是完整 Commory 镜像;`docker-compose.yml` 默认只暴露 `3000`。 +- Web UI 必须遵循 `docs/web-dashboard-guidelines.md`,以 `references/art-design-pro` 为模板基线。 +- 多端功能必须同步评估 Android、Backend、Web、MsgLayer、Agent 和 Docker/部署影响。 + ## 常用命令 ```bash +bash scripts/dev.sh # 一键启动 backend (:3000) + web (:3006) bash scripts/check-repo-hygiene.sh bash scripts/check-android-i18n.sh bash scripts/sync-agent-skills.sh --check +docker compose config ``` 代码工作使用 `AGENTS.md` 中列出的验证命令。 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e84ccf9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +# syntax=docker/dockerfile:1 + +FROM node:22-alpine AS web-builder +WORKDIR /src/web +RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +COPY web/package.json web/pnpm-lock.yaml ./ +RUN HUSKY=0 pnpm install --frozen-lockfile +COPY web/ ./ +RUN pnpm exec vite build && pnpm exec vue-tsc --noEmit + +FROM golang:1.25-alpine AS backend-builder +WORKDIR /src/backend +COPY backend/go.mod ./ +RUN go mod download +COPY backend/ ./ +RUN go build -ldflags="-s -w" -o /out/commory ./cmd/commory + +FROM alpine:3.22 +RUN addgroup -S commory && adduser -S commory -G commory +WORKDIR /app +COPY --from=backend-builder /out/commory /usr/local/bin/commory +COPY msglayer/schema /app/msglayer/schema +COPY --from=web-builder /src/web/dist /app/web +RUN mkdir -p /data && chown -R commory:commory /data /app +USER commory +ENV COMMORY_LISTEN_ADDR=:3000 \ + COMMORY_DB_DRIVER=sqlite \ + COMMORY_DB_DSN=/data/commory-store.json \ + COMMORY_SCHEMA_ROOT=/app/msglayer/schema/v0.1/root.schema.json \ + COMMORY_WEB_ROOT=/app/web \ + COMMORY_ENV=production +EXPOSE 3000 +CMD ["commory", "serve"] diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 87a091d..97f3c75 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -7,6 +7,7 @@ import ( "io" "net/http" "os" + urlpath "path" "path/filepath" "strings" @@ -73,9 +74,33 @@ func (s *Server) Handler() http.Handler { root.Handle("/api/auth/", publicMux) root.Handle("/api/setup", publicMux) root.Handle("/api/", auth.Middleware(s.auth, privateMux)) + if s.cfg.WebRoot != "" { + root.Handle("/", spaHandler(s.cfg.WebRoot)) + } return root } +func spaHandler(root string) http.Handler { + fileServer := http.FileServer(http.Dir(root)) + indexPath := filepath.Join(root, "index.html") + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet && r.Method != http.MethodHead { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + cleanPath := strings.TrimPrefix(urlpath.Clean("/"+r.URL.Path), "/") + if cleanPath == "" { + cleanPath = "index.html" + } + targetPath := filepath.Join(root, filepath.FromSlash(cleanPath)) + if info, err := os.Stat(targetPath); err == nil && !info.IsDir() { + fileServer.ServeHTTP(w, r) + return + } + http.ServeFile(w, r, indexPath) + }) +} + func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { writeError(w, http.StatusMethodNotAllowed, "method not allowed") diff --git a/backend/internal/api/static_web_test.go b/backend/internal/api/static_web_test.go new file mode 100644 index 0000000..024867a --- /dev/null +++ b/backend/internal/api/static_web_test.go @@ -0,0 +1,106 @@ +package api + +import ( + "context" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/IsKenKenYa/Commory/backend/internal/config" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func TestServerServesWebRootAndKeepsAPI(t *testing.T) { + handler := newTestWebHandler(t) + + setupReq := httptest.NewRequest(http.MethodGet, "/api/setup", nil) + setupRes := httptest.NewRecorder() + handler.ServeHTTP(setupRes, setupReq) + if setupRes.Code != http.StatusOK { + t.Fatalf("setup status = %d, body = %s", setupRes.Code, setupRes.Body.String()) + } + if strings.Contains(setupRes.Body.String(), "
    ") { + t.Fatal("api response unexpectedly returned web index") + } + + indexReq := httptest.NewRequest(http.MethodGet, "/", nil) + indexRes := httptest.NewRecorder() + handler.ServeHTTP(indexRes, indexReq) + if indexRes.Code != http.StatusOK { + t.Fatalf("index status = %d, body = %s", indexRes.Code, indexRes.Body.String()) + } + if !strings.Contains(indexRes.Body.String(), "
    ") { + t.Fatal("expected web index body") + } +} + +func TestServerServesAssetsAndFallsBackToSPA(t *testing.T) { + handler := newTestWebHandler(t) + + assetReq := httptest.NewRequest(http.MethodGet, "/assets/app.js", nil) + assetRes := httptest.NewRecorder() + handler.ServeHTTP(assetRes, assetReq) + if assetRes.Code != http.StatusOK { + t.Fatalf("asset status = %d, body = %s", assetRes.Code, assetRes.Body.String()) + } + if !strings.Contains(assetRes.Body.String(), "commory asset") { + t.Fatal("expected asset body") + } + + routeReq := httptest.NewRequest(http.MethodGet, "/dashboard/console", nil) + routeRes := httptest.NewRecorder() + handler.ServeHTTP(routeRes, routeReq) + if routeRes.Code != http.StatusOK { + t.Fatalf("spa route status = %d, body = %s", routeRes.Code, routeRes.Body.String()) + } + if !strings.Contains(routeRes.Body.String(), "
    ") { + t.Fatal("expected spa fallback index body") + } +} + +func TestAPINotFoundDoesNotFallbackToWeb(t *testing.T) { + handler := newTestWebHandler(t) + + req := httptest.NewRequest(http.MethodGet, "/api/not-found", nil) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code == http.StatusOK { + t.Fatalf("expected api not-found/auth failure, got %d with body %s", res.Code, res.Body.String()) + } + if strings.Contains(res.Body.String(), "
    ") { + t.Fatal("api route unexpectedly fell back to web index") + } +} + +func newTestWebHandler(t *testing.T) http.Handler { + t.Helper() + webRoot := t.TempDir() + if err := os.Mkdir(filepath.Join(webRoot, "assets"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(webRoot, "index.html"), []byte(`
    `), 0o644); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(webRoot, "assets", "app.js"), []byte(`console.log("commory asset")`), 0o644); err != nil { + t.Fatal(err) + } + + store, err := storage.NewSQLiteProvider(filepath.Join(t.TempDir(), "commory.json")) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { _ = store.Close() }) + if err := store.Init(context.Background()); err != nil { + t.Fatal(err) + } + validator, err := msglayer.NewValidator(repoPath("msglayer", "schema", "v0.1", "root.schema.json")) + if err != nil { + t.Fatal(err) + } + server := NewServer(config.Config{AuthSecret: "test-secret", TLS: false, WebRoot: webRoot}, store, validator) + return server.Handler() +} diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index f18fccc..8376e36 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -12,6 +12,7 @@ type Config struct { DatabaseURL string ListenAddr string SchemaRoot string + WebRoot string AuthSecret string TLS bool Env string @@ -31,6 +32,7 @@ func Load() (Config, error) { DatabaseURL: env("COMMORY_DATABASE_URL", ""), ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), SchemaRoot: schemaRoot, + WebRoot: absPath(env("COMMORY_WEB_ROOT", "")), AuthSecret: env("COMMORY_AUTH_SECRET", "commory-dev-secret"), TLS: envBool("COMMORY_TLS", false), Env: env("COMMORY_ENV", "development"), @@ -38,6 +40,16 @@ func Load() (Config, error) { }, nil } +func absPath(path string) string { + if path == "" || filepath.IsAbs(path) { + return path + } + if abs, err := filepath.Abs(path); err == nil { + return abs + } + return path +} + func env(key, fallback string) string { if value := os.Getenv(key); value != "" { return value diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0994b9b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +services: + commory: + build: + context: . + dockerfile: Dockerfile + image: commory:local + container_name: commory + restart: unless-stopped + ports: + - "${COMMORY_HTTP_PORT:-3000}:3000" + environment: + COMMORY_LISTEN_ADDR: ":3000" + COMMORY_DB_DRIVER: sqlite + COMMORY_DB_DSN: /data/commory-store.json + COMMORY_SCHEMA_ROOT: /app/msglayer/schema/v0.1/root.schema.json + COMMORY_WEB_ROOT: /app/web + COMMORY_AUTH_SECRET: ${COMMORY_AUTH_SECRET:-change-me} + COMMORY_ENV: ${COMMORY_ENV:-development} + volumes: + - commory_data:/data + +volumes: + commory_data: diff --git a/docs/architecture-roadmap.md b/docs/architecture-roadmap.md index 5bce080..cb1efed 100644 --- a/docs/architecture-roadmap.md +++ b/docs/architecture-roadmap.md @@ -8,6 +8,7 @@ Commory 正在从原型存储和直接 handler 走向持久、可测试的 servi - 使用 `sqlc` 加版本化 migrations 支持 SQLite、Postgres 和 MySQL。 - 为 auth、setup、import/export、search、timeline、identities 和 refresh token rotation 增加 storage contract tests。 - setup diagnostics 必须明确当前 database type 和 SQLite persistence risk。 +- Docker Compose 先使用 file-backed sqlite 开发部署,后续 SQL 迁移再扩展 Postgres/MySQL profile。 ## 阶段 2:认证与权限 @@ -22,7 +23,13 @@ Commory 正在从原型存储和直接 handler 走向持久、可测试的 servi - 在允许 tool 修改本地状态前,先建立 tool registry 和 permission broker。 - 通过 storage interfaces 持久化 task/session state。 -## 阶段 4:参考资料挖掘 +## 阶段 4:Web Dashboard 与单端口部署 + +- Go backend 同源提供 `/api/*` 与 Web 静态资源,生产默认避免 CORS。 +- Web 以 Art Design Pro 为模板基线,所有新增页面满足 i18n、dark mode、主题变量和图表配色规范。 +- Dashboard 功能按 Android、Backend、Web、MsgLayer 同步规划,避免只做单端体验。 + +## 阶段 5:参考资料挖掘 - 使用 GitHubDaily 发现候选 Go 项目。 - 优先选择 MIT、Apache-2.0 和 BSD 参考项目。 diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md index bdc09eb..b1f1dba 100644 --- a/docs/engineering-standards.md +++ b/docs/engineering-standards.md @@ -11,6 +11,7 @@ - Backend handler 保持薄层:解析 HTTP、调用 auth/storage/query/import/setup service、返回 envelope。 - Web 负责 server-backed dashboard workflow,并遵循 `web/` 现有 Vue 3、Vite、Pinia、Element Plus 模式。 - MsgLayer schema 是 Android、backend、web 和未来 agent 之间的 canonical interchange format。 +- 默认部署形态是单端口:Go backend 同时提供 `/api/*` 和 Web 静态资源。 ## 命名 @@ -28,6 +29,14 @@ - `.claude/skills` 由 `.agents/skills` 生成,用于 Claude Code 兼容。 - 不要新增已追踪构建产物、日志、`.DS_Store`、IDE 文件、调试报告或 `AI_EDIT_LOG.md`。 +## 项目管理 + +- 发布记录写入 `CHANGELOG.md`,版本采用 `v0.x.y`。 +- PR 使用 `.github/pull_request_template.md`,说明影响范围、测试、契约、i18n、隐私、本地模式和 Docker 影响。 +- 分支策略:`main` 稳定且 CI 全绿,功能使用 `feat/*`,修复使用 `fix/*`,禁止直接推送 `main`。 +- 跨 Android、Backend、Web、MsgLayer、Agent、Docker 的变更必须同步评估,并在 PR 中说明。 +- 技术债记录在 `docs/technical-debt.md`,不要在无关 PR 中顺手改。 + ## 中文优先与国际化 - 文档、Rules、代码注释、维护者提示、测试失败信息和数据库备注中文优先。 @@ -40,6 +49,19 @@ - 不要翻译代码标识符、JSON key、数据库字段名、HTTP endpoint、配置项、命令、包名、常量值和公开契约。 - `README.md` 是中文优先入口;`README.en.md` 保持英文镜像。 +## Web Dashboard + +- Web UI 以 `references/art-design-pro` 为模板基线,`references/memos/web` 仅作产品组织参考。 +- 新页面必须遵循 `docs/web-dashboard-guidelines.md`,满足中英 i18n、dark mode、主题变量、ECharts 配色、布局密度和 Element Plus 规范。 +- `web/.env.production` 默认使用同源 API,不得恢复到 mock 服务作为生产默认值。 + +## Docker 与部署 + +- 根目录 `Dockerfile` 构建完整 Commory 镜像:Web static assets、Go backend、MsgLayer schema。 +- `docker-compose.yml` 默认只暴露一个端口,使用 file-backed sqlite 开发存储。 +- `COMMORY_WEB_ROOT` 指向 Web 静态资源目录;非 `/api` 请求 fallback 到 `index.html` 支持 SPA refresh。 +- `/api/*` 必须保持 API 行为,不得 fallback 到 Web index。 + ## Skills Skills 是上下文加载工具,不是通用文档目录。 @@ -94,6 +116,7 @@ cd web && pnpm install --frozen-lockfile && pnpm lint && pnpm build bash scripts/check-repo-hygiene.sh bash scripts/check-android-i18n.sh bash scripts/sync-agent-skills.sh --check +docker compose config ``` ## 发布检查 @@ -104,3 +127,4 @@ bash scripts/sync-agent-skills.sh --check - Android locale keys 完整。 - 跨边界 API/schema 变更包含文档和测试。 - Changelog 说明用户可见变更和兼容性变化。 +- 单端口部署中 `/`、SPA route 和 `/api/setup` 均可访问,且无 CORS 错误。 diff --git a/docs/project-management.md b/docs/project-management.md new file mode 100644 index 0000000..853a95e --- /dev/null +++ b/docs/project-management.md @@ -0,0 +1,35 @@ +# 项目管理规范 + +## 发布管理 + +- 使用 `CHANGELOG.md` 记录每个里程碑的用户可见变更、兼容性影响和迁移说明。 +- 版本采用 `v0.x.y` 格式。当前处于 `v0` 阶段,API、MsgLayer schema 和部署方式仍可能变化。 +- 每次发布前逐项确认 `docs/engineering-standards.md` 中的 Release Checklist。 + +## 代码审查流程 + +- 所有非文档小改都通过 PR 合并,PR 使用 `.github/pull_request_template.md`。 +- PR 必须说明变更描述、影响范围、测试方法、契约一致性检查、i18n、隐私、本地模式和 Docker 影响。 +- 涉及 Android + Backend + Web + MsgLayer 任意两个以上模块的 PR,至少需要两个审查者。 +- 审查时必须检查 Commory 特定项:local-only mode、server-optional、隐私日志、Agent context policy、API/MsgLayer 契约和中英国际化。 + +## 分支策略 + +- `main` 是稳定分支,要求 CI 全绿。 +- `feat/*` 用于功能分支。 +- `fix/*` 用于修复分支。 +- 禁止直接推送到 `main`。该规则需要在 GitHub branch protection 中启用。 + +## 多端规划 + +- 跨端功能必须同时评估 Android、Backend、Web、MsgLayer、Agent 和 Docker/部署影响。 +- API 或 schema 先更新契约文档,再改实现。 +- Web 功能必须遵循 `docs/web-dashboard-guidelines.md`。 +- 部署相关功能优先考虑单端口同源方案,避免 CORS 成为默认复杂度。 + +## 文档维护 + +- `docs/mobile-api.md` 是 Android 和 backend 的契约文档,任何 API 变更必须同步更新。 +- `docs/engineering-standards.md` 是工程规范唯一真相源。 +- `AGENTS.md` 是 Agent 入口文件,保持精简。 +- `.agents/skills` 是项目知识库来源;修改后必须运行 `bash scripts/sync-agent-skills.sh`。 diff --git a/docs/technical-debt.md b/docs/technical-debt.md new file mode 100644 index 0000000..a80d8f8 --- /dev/null +++ b/docs/technical-debt.md @@ -0,0 +1,21 @@ +# 技术债清单 + +本文记录已经识别但不应混入当前功能 PR 的技术债。每项技术债必须绑定解决阶段或触发条件。 + +## Android Gradle 弃用警告 + +- 问题:Jetifier、Manifest package、Gradle 10 deprecation 等警告会影响后续构建升级。 +- 影响:短期不阻塞功能,但会增加 Android toolchain 升级成本。 +- 计划:独立 issue 跟踪,在下一轮 Android 构建系统整理中处理。 + +## `persist()` 全量写入 + +- 问题:当前 file-backed 存储在持久化时存在全量写入性能风险。 +- 影响:数据量增长后导入、refresh token、查询写入路径可能变慢。 +- 计划:ADR 0002 的 SQL 存储迁移阶段解决,通过真实 SQL migrations 和 typed query 替换。 + +## `ConsumeRefreshToken` 线性扫描 + +- 问题:当前 file-backed 存储中 refresh token 消费使用线性扫描。 +- 影响:当前开发规模可接受,但多用户或长期运行后不适合生产。 +- 计划:SQL 迁移时建立 refresh token 索引,并用 storage contract tests 固化行为。 diff --git a/docs/web-dashboard-guidelines.md b/docs/web-dashboard-guidelines.md new file mode 100644 index 0000000..f5e7692 --- /dev/null +++ b/docs/web-dashboard-guidelines.md @@ -0,0 +1,33 @@ +# Web Dashboard 规范 + +Commory Web 以 `references/art-design-pro` 为 UI 模板基线,以 `references/memos/web` 作为产品组织参考。参考资料只用于学习结构和体验,不复制源码实现。 + +## 模板基线 + +- 页面布局、导航、工作台标签、设置面板、暗色模式和主题变量遵循 Art Design Pro 现有模式。 +- 新 dashboard 页面优先复用 `web/src/components/core`、Element Plus、Pinia、Vue Router 和现有 style tokens。 +- 不新增与模板冲突的全局样式系统;确需新增时先写入局部组件或明确扩展现有变量。 + +## 国际化 + +- 用户可见文案必须进入 `web/src/locales/langs/zh.json` 和 `web/src/locales/langs/en.json`。 +- Vue 模板使用 `$t(...)`,composition API 中使用 `useI18n()`。 +- 不在 `.vue`、`.ts` 中硬编码中文或英文用户文案。 + +## 暗色模式与主题 + +- 新组件必须在 light、dark、system theme 下可读。 +- 颜色使用现有主题变量或 `AppConfig.systemMainColor`,避免单独写死大面积色值。 +- 图表必须跟随主题变化,优先使用 `web/src/hooks/core/useChart.ts` 和 `web/src/plugins/echarts.ts` 的模式。 + +## 图表与数据展示 + +- ECharts 只按需注册实际使用的 chart/component。 +- 图表配色遵循 Art Design Pro 的蓝色主色、成功/警告/危险状态色和暗色背景对比。 +- 表格、筛选、分页和空状态优先使用现有 `ArtTable`、Element Plus 和项目 API client。 + +## 交付检查 + +- `pnpm lint` +- `pnpm build` +- 手动检查中英文切换、dark mode、刷新路由、图表 resize、空数据和错误状态。 diff --git a/scripts/dev.sh b/scripts/dev.sh new file mode 100755 index 0000000..5b05abd --- /dev/null +++ b/scripts/dev.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Commory 开发模式一键启动 +# 同时运行 Go backend (:3000) 和 Web dev server (:3006) +# 用法: bash scripts/dev.sh + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" + +CYAN='\033[36m' +YELLOW='\033[33m' +RED='\033[31m' +RESET='\033[0m' + +cleanup() { + echo -e "\n${RED}[dev]${RESET} 正在停止所有服务..." + kill 0 2>/dev/null || true + wait 2>/dev/null || true + echo -e "${RED}[dev]${RESET} 已停止。" +} + +trap cleanup INT TERM + +echo -e "${CYAN}[dev]${RESET} 启动 Go backend (端口 :3000)..." +(cd "$REPO_ROOT/backend" && go run ./cmd/commory serve) 2>&1 \ + | sed -u "s/.*/${CYAN}[backend]${RESET} &/" & + +echo -e "${YELLOW}[dev]${RESET} 启动 Web dev server (端口 :3006)..." +(cd "$REPO_ROOT/web" && pnpm dev) 2>&1 \ + | sed -u "s/.*/${YELLOW}[web]${RESET} &/" & + +echo -e "${RED}[dev]${RESET} 按 Ctrl+C 停止所有服务。" +wait diff --git a/web/.env.production b/web/.env.production new file mode 100755 index 0000000..2ecb7be --- /dev/null +++ b/web/.env.production @@ -0,0 +1,10 @@ +# 【生产】环境变量 + +# 应用部署基础路径(如部署在子目录 /admin,则设置为 /admin/) +VITE_BASE_URL = / + +# API 地址前缀。生产镜像由 Go backend 同源提供 Web 与 /api,避免 CORS。 +VITE_API_URL = / + +# Delete console +VITE_DROP_CONSOLE = true From 6874d491c9d463ce3fbf0d0a636401536d81ff23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 10:35:24 +0800 Subject: [PATCH 13/20] =?UTF-8?q?chore:=20=E5=AE=8C=E6=88=90=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=A4=9A=E8=BD=AE=E8=BF=AD=E4=BB=A3=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E6=95=B4=E5=90=88=E5=89=8D=E5=90=8E=E7=AB=AF=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端:引入sqlite3和uuid依赖,新增sqlc数据库查询层与迁移脚本,重构数据库配置使用sqlite文件存储 - 前端:全面替换硬编码文案为i18n国际化,优化路由权限逻辑,删除旧示例页面,完善搜索、用户管理、角色管理等页面功能 - 文档:更新工程规范与dashboard开发指南,明确默认权限模式为前端模式 - Docker:修复sqlite编译与配置路径问题 --- Dockerfile | 7 +- backend/go.mod | 5 + backend/go.sum | 4 + backend/internal/config/config.go | 2 +- .../storage/contracttest/contract_test.go | 394 +++++++++++++ .../storage/contracttest/sqlite_test.go | 7 + .../migrations/sqlite/0001_initial.down.sql | 11 + .../migrations/sqlite/0001_initial.up.sql | 149 +++++ backend/internal/storage/sqlc/gen/db.go | 31 + .../internal/storage/sqlc/gen/events.sql.go | 419 ++++++++++++++ .../storage/sqlc/gen/identities.sql.go | 221 ++++++++ .../internal/storage/sqlc/gen/imports.sql.go | 170 ++++++ backend/internal/storage/sqlc/gen/models.go | 118 ++++ .../storage/sqlc/gen/refresh_tokens.sql.go | 112 ++++ .../storage/sqlc/gen/relations.sql.go | 109 ++++ .../internal/storage/sqlc/gen/sessions.sql.go | 131 +++++ .../internal/storage/sqlc/gen/setup.sql.go | 145 +++++ .../internal/storage/sqlc/gen/users.sql.go | 168 ++++++ .../internal/storage/sqlc/query/events.sql | 60 ++ .../storage/sqlc/query/identities.sql | 29 + .../internal/storage/sqlc/query/imports.sql | 24 + .../storage/sqlc/query/refresh_tokens.sql | 24 + .../internal/storage/sqlc/query/relations.sql | 11 + .../internal/storage/sqlc/query/sessions.sql | 18 + backend/internal/storage/sqlc/query/setup.sql | 22 + backend/internal/storage/sqlc/query/users.sql | 24 + backend/internal/storage/sqlc/sqlc.yaml | 16 + backend/internal/storage/sqlite.go | 495 +++++++++++++++- docs/engineering-standards.md | 1 + docs/web-dashboard-guidelines.md | 8 + web/src/hooks/core/useAuth.ts | 14 +- web/src/hooks/core/useChart.ts | 3 +- web/src/locales/langs/en.json | 460 ++++++++++++++- web/src/locales/langs/zh.json | 460 ++++++++++++++- web/src/router/routes/staticRoutes.ts | 2 +- web/src/utils/router.ts | 31 +- web/src/utils/storage/storage.ts | 3 +- web/src/utils/sys/upgrade.ts | 5 +- web/src/utils/table/tableUtils.ts | 3 +- web/src/utils/ui/colors.ts | 9 +- web/src/views/auth/forget-password/index.vue | 4 +- web/src/views/auth/register/index.vue | 4 +- web/src/views/dashboard/console/index.vue | 214 ++++--- .../console/modules/about-project.vue | 44 -- .../dashboard/console/modules/active-user.vue | 47 -- .../dashboard/console/modules/card-list.vue | 74 --- .../console/modules/dynamic-stats.vue | 79 --- .../dashboard/console/modules/new-user.vue | 169 ------ .../console/modules/sales-overview.vue | 43 -- .../dashboard/console/modules/todo-list.vue | 71 --- web/src/views/dashboard/contacts/index.vue | 39 +- web/src/views/dashboard/imports/index.vue | 69 ++- web/src/views/dashboard/search/index.vue | 21 +- web/src/views/dashboard/timeline/index.vue | 58 +- web/src/views/result/fail/index.vue | 17 +- web/src/views/result/success/index.vue | 15 +- web/src/views/setup/index.vue | 534 +++++++++++------- web/src/views/system/menu/index.vue | 66 ++- .../views/system/menu/modules/menu-dialog.vue | 177 ++++-- web/src/views/system/role/index.vue | 46 +- .../system/role/modules/role-edit-dialog.vue | 54 +- .../role/modules/role-permission-dialog.vue | 30 +- .../views/system/role/modules/role-search.vue | 46 +- web/src/views/system/user-center/index.vue | 96 ++-- web/src/views/system/user/index.vue | 40 +- .../views/system/user/modules/user-dialog.vue | 57 +- .../views/system/user/modules/user-search.vue | 36 +- 67 files changed, 4844 insertions(+), 1231 deletions(-) create mode 100644 backend/go.sum create mode 100644 backend/internal/storage/contracttest/contract_test.go create mode 100644 backend/internal/storage/contracttest/sqlite_test.go create mode 100644 backend/internal/storage/migrations/sqlite/0001_initial.down.sql create mode 100644 backend/internal/storage/migrations/sqlite/0001_initial.up.sql create mode 100644 backend/internal/storage/sqlc/gen/db.go create mode 100644 backend/internal/storage/sqlc/gen/events.sql.go create mode 100644 backend/internal/storage/sqlc/gen/identities.sql.go create mode 100644 backend/internal/storage/sqlc/gen/imports.sql.go create mode 100644 backend/internal/storage/sqlc/gen/models.go create mode 100644 backend/internal/storage/sqlc/gen/refresh_tokens.sql.go create mode 100644 backend/internal/storage/sqlc/gen/relations.sql.go create mode 100644 backend/internal/storage/sqlc/gen/sessions.sql.go create mode 100644 backend/internal/storage/sqlc/gen/setup.sql.go create mode 100644 backend/internal/storage/sqlc/gen/users.sql.go create mode 100644 backend/internal/storage/sqlc/query/events.sql create mode 100644 backend/internal/storage/sqlc/query/identities.sql create mode 100644 backend/internal/storage/sqlc/query/imports.sql create mode 100644 backend/internal/storage/sqlc/query/refresh_tokens.sql create mode 100644 backend/internal/storage/sqlc/query/relations.sql create mode 100644 backend/internal/storage/sqlc/query/sessions.sql create mode 100644 backend/internal/storage/sqlc/query/setup.sql create mode 100644 backend/internal/storage/sqlc/query/users.sql create mode 100644 backend/internal/storage/sqlc/sqlc.yaml delete mode 100644 web/src/views/dashboard/console/modules/about-project.vue delete mode 100755 web/src/views/dashboard/console/modules/active-user.vue delete mode 100755 web/src/views/dashboard/console/modules/card-list.vue delete mode 100755 web/src/views/dashboard/console/modules/dynamic-stats.vue delete mode 100755 web/src/views/dashboard/console/modules/new-user.vue delete mode 100755 web/src/views/dashboard/console/modules/sales-overview.vue delete mode 100755 web/src/views/dashboard/console/modules/todo-list.vue diff --git a/Dockerfile b/Dockerfile index e84ccf9..a29ec65 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,11 +9,12 @@ COPY web/ ./ RUN pnpm exec vite build && pnpm exec vue-tsc --noEmit FROM golang:1.25-alpine AS backend-builder +RUN apk add --no-cache gcc musl-dev WORKDIR /src/backend -COPY backend/go.mod ./ +COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ -RUN go build -ldflags="-s -w" -o /out/commory ./cmd/commory +RUN CGO_ENABLED=1 go build -ldflags="-s -w" -o /out/commory ./cmd/commory FROM alpine:3.22 RUN addgroup -S commory && adduser -S commory -G commory @@ -25,7 +26,7 @@ RUN mkdir -p /data && chown -R commory:commory /data /app USER commory ENV COMMORY_LISTEN_ADDR=:3000 \ COMMORY_DB_DRIVER=sqlite \ - COMMORY_DB_DSN=/data/commory-store.json \ + COMMORY_DB_DSN=/data/commory.db \ COMMORY_SCHEMA_ROOT=/app/msglayer/schema/v0.1/root.schema.json \ COMMORY_WEB_ROOT=/app/web \ COMMORY_ENV=production diff --git a/backend/go.mod b/backend/go.mod index ed55bc8..02b54cd 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -1,3 +1,8 @@ module github.com/IsKenKenYa/Commory/backend go 1.25.0 + +require ( + github.com/google/uuid v1.6.0 + github.com/mattn/go-sqlite3 v1.14.44 +) diff --git a/backend/go.sum b/backend/go.sum new file mode 100644 index 0000000..62ded37 --- /dev/null +++ b/backend/go.sum @@ -0,0 +1,4 @@ +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= +github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 8376e36..c9d951e 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -28,7 +28,7 @@ func Load() (Config, error) { } return Config{ Driver: env("COMMORY_DB_DRIVER", "sqlite"), - DSN: env("COMMORY_DB_DSN", filepath.Join(".", "data", "commory-store.json")), + DSN: env("COMMORY_DB_DSN", filepath.Join(".", "data", "commory.db")), DatabaseURL: env("COMMORY_DATABASE_URL", ""), ListenAddr: env("COMMORY_LISTEN_ADDR", ":3000"), SchemaRoot: schemaRoot, diff --git a/backend/internal/storage/contracttest/contract_test.go b/backend/internal/storage/contracttest/contract_test.go new file mode 100644 index 0000000..c9d8fc4 --- /dev/null +++ b/backend/internal/storage/contracttest/contract_test.go @@ -0,0 +1,394 @@ +package contracttest + +import ( + "context" + "encoding/json" + "fmt" + "path/filepath" + "testing" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/google/uuid" +) + +// ProviderFactory 创建一个临时的 Provider 实例。 +type ProviderFactory func(t *testing.T) storage.Provider + +// RunContractTests 对给定的 Provider 运行完整的存储契约测试套件。 +func RunContractTests(t *testing.T, factory ProviderFactory) { + t.Run("UserLifecycle", func(t *testing.T) { testUserLifecycle(t, factory) }) + t.Run("RefreshTokenRotation", func(t *testing.T) { testRefreshTokenRotation(t, factory) }) + t.Run("ImportAndQuery", func(t *testing.T) { testImportAndQuery(t, factory) }) + t.Run("IdentityCRUD", func(t *testing.T) { testIdentityCRUD(t, factory) }) + t.Run("SearchPagination", func(t *testing.T) { testSearchPagination(t, factory) }) + t.Run("SetupLifecycle", func(t *testing.T) { testSetupLifecycle(t, factory) }) +} + +func testUserLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), + UserName: "testuser_" + uuid.New().String()[:8], + Email: "test@example.com", + PasswordHash: "hash123", + PasswordSalt: "salt123", + Roles: []string{"R_USER"}, + Buttons: []string{"view", "import"}, + } + + created, err := store.CreateUser(ctx, user) + if err != nil { + t.Fatalf("CreateUser: %v", err) + } + if created.UserName != user.UserName { + t.Fatalf("username mismatch: got %s", created.UserName) + } + + found, err := store.FindUserByUserName(ctx, user.UserName) + if err != nil { + t.Fatalf("FindUserByUserName: %v", err) + } + if found.ID != user.ID { + t.Fatalf("user ID mismatch: got %s", found.ID) + } + + got, err := store.GetUser(ctx, user.ID) + if err != nil { + t.Fatalf("GetUser: %v", err) + } + if got.Email != user.Email { + t.Fatalf("email mismatch: got %s", got.Email) + } + + hasAdmin, err := store.HasAdminUser(ctx) + if err != nil { + t.Fatalf("HasAdminUser: %v", err) + } + if hasAdmin { + t.Fatal("expected no admin user") + } + + // 创建重复用户名应失败 + _, err = store.CreateUser(ctx, storage.UserRecord{ + ID: uuid.New().String(), + UserName: user.UserName, + }) + if err == nil { + t.Fatal("expected error for duplicate username") + } +} + +func testRefreshTokenRotation(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), + UserName: "tokenuser_" + uuid.New().String()[:8], + PasswordHash: "hash", + PasswordSalt: "salt", + Roles: []string{"R_USER"}, + Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + token := storage.RefreshTokenRecord{ + ID: uuid.New().String(), + UserID: user.ID, + TokenHash: "hash_" + uuid.New().String(), + ExpiresAt: time.Now().Add(7 * 24 * time.Hour), + } + + if err := store.SaveRefreshToken(ctx, token); err != nil { + t.Fatalf("SaveRefreshToken: %v", err) + } + + consumed, err := store.ConsumeRefreshToken(ctx, token.TokenHash) + if err != nil { + t.Fatalf("ConsumeRefreshToken: %v", err) + } + if consumed.UserID != user.ID { + t.Fatalf("user ID mismatch: got %s", consumed.UserID) + } + + // 二次消费应失败 + _, err = store.ConsumeRefreshToken(ctx, token.TokenHash) + if err == nil { + t.Fatal("expected error for already consumed token") + } +} + +func testImportAndQuery(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "test-user-" + uuid.New().String()[:8] + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Source: msglayer.Source{Platform: "android", DeviceID: "test"}, + Identities: []msglayer.Identity{ + {ID: "id_1", Type: "person", DisplayName: "张三", Phones: []string{"+8613800000001"}}, + {ID: "id_2", Type: "person", DisplayName: "李四", Phones: []string{"+8613800000002"}}, + }, + Events: []msglayer.Event{ + { + ID: "evt_1", + Type: "sms", + Timestamp: time.Now().Add(-1 * time.Hour).UTC().Format(time.RFC3339), + Direction: "outbound", + Participants: []string{"id_1"}, + Content: map[string]any{"text": "你好,验证码是123456"}, + }, + { + ID: "evt_2", + Type: "call", + Timestamp: time.Now().UTC().Format(time.RFC3339), + Direction: "inbound", + Participants: []string{"id_2"}, + Content: map[string]any{"duration_sec": 120, "call_type": "incoming"}, + }, + }, + } + raw, _ := json.Marshal(export) + + importID, err := store.Import(ctx, userID, "test.json", export, raw) + if err != nil { + t.Fatalf("Import: %v", err) + } + if importID == "" { + t.Fatal("expected import ID") + } + + // 查询导入列表 + imports, err := store.ListImports(ctx, userID) + if err != nil { + t.Fatalf("ListImports: %v", err) + } + if len(imports) != 1 { + t.Fatalf("expected 1 import, got %d", len(imports)) + } + if imports[0].EventCount != 2 { + t.Fatalf("expected 2 events, got %d", imports[0].EventCount) + } + + // 导出导入数据 + exported, err := store.ExportImport(ctx, userID, importID) + if err != nil { + t.Fatalf("ExportImport: %v", err) + } + if len(exported) == 0 { + t.Fatal("expected exported data") + } + + // 获取事件 + event, err := store.GetEvent(ctx, userID, "evt_1") + if err != nil { + t.Fatalf("GetEvent: %v", err) + } + if event.Type != "sms" { + t.Fatalf("expected sms type, got %s", event.Type) + } + + // 搜索 + results, err := store.Search(ctx, msglayer.SearchParams{UserID: userID, Keyword: "验证码", Limit: 10}) + if err != nil { + t.Fatalf("Search: %v", err) + } + if len(results) == 0 { + t.Fatal("expected search results for '验证码'") + } + + // 时间线 + timeline, err := store.Timeline(ctx, msglayer.SearchParams{UserID: userID, Limit: 10}) + if err != nil { + t.Fatalf("Timeline: %v", err) + } + if len(timeline) != 2 { + t.Fatalf("expected 2 timeline items, got %d", len(timeline)) + } + + // 获取联系人 + identities, err := store.ListIdentities(ctx, userID) + if err != nil { + t.Fatalf("ListIdentities: %v", err) + } + if len(identities) != 2 { + t.Fatalf("expected 2 identities, got %d", len(identities)) + } + + // 获取单个联系人 + identity, err := store.GetIdentity(ctx, userID, "id_1") + if err != nil { + t.Fatalf("GetIdentity: %v", err) + } + if identity.DisplayName != "张三" { + t.Fatalf("expected 张三, got %s", identity.DisplayName) + } + + // 线程查询 + thread, err := store.GetThread(ctx, userID, "thread_42") + if err != nil { + t.Fatalf("GetThread: %v", err) + } + _ = thread // 线程可能为空,因为测试数据没有 same_thread 关系 +} + +func testIdentityCRUD(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "crud-user-" + uuid.New().String()[:8] + identity := msglayer.Identity{ + ID: "identity_" + uuid.New().String()[:8], + Type: "person", + DisplayName: "测试用户", + Phones: []string{"+8613800000000"}, + Emails: []string{"test@example.com"}, + Labels: []string{"朋友"}, + Meta: map[string]any{"source": "test"}, + } + + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Identities: []msglayer.Identity{identity}, + Events: []msglayer.Event{}, + } + raw, _ := json.Marshal(export) + + if _, err := store.Import(ctx, userID, "", export, raw); err != nil { + t.Fatalf("Import: %v", err) + } + + got, err := store.GetIdentity(ctx, userID, identity.ID) + if err != nil { + t.Fatalf("GetIdentity: %v", err) + } + if got.DisplayName != "测试用户" { + t.Fatalf("display name mismatch: got %s", got.DisplayName) + } + if len(got.Phones) != 1 || got.Phones[0] != "+8613800000000" { + t.Fatalf("phones mismatch: %v", got.Phones) + } +} + +func testSearchPagination(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "page-user-" + uuid.New().String()[:8] + var events []msglayer.Event + for i := 0; i < 25; i++ { + events = append(events, msglayer.Event{ + ID: fmt.Sprintf("page_evt_%d", i), + Type: "sms", + Timestamp: time.Now().Add(-time.Duration(25-i) * time.Minute).UTC().Format(time.RFC3339), + Direction: "outbound", + Content: map[string]any{"text": fmt.Sprintf("消息编号 %d", i)}, + }) + } + + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Events: events, + } + raw, _ := json.Marshal(export) + + if _, err := store.Import(ctx, userID, "", export, raw); err != nil { + t.Fatalf("Import: %v", err) + } + + // 第一页 + page1, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 0}) + if err != nil { + t.Fatalf("ListEvents page1: %v", err) + } + if len(page1) != 10 { + t.Fatalf("expected 10 items, got %d", len(page1)) + } + + // 第二页 + page2, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 10}) + if err != nil { + t.Fatalf("ListEvents page2: %v", err) + } + if len(page2) != 10 { + t.Fatalf("expected 10 items, got %d", len(page2)) + } + + // 第三页 + page3, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 20}) + if err != nil { + t.Fatalf("ListEvents page3: %v", err) + } + if len(page3) != 5 { + t.Fatalf("expected 5 items, got %d", len(page3)) + } + + // 确保无重叠 + if page1[0].EventID == page2[0].EventID { + t.Fatal("page1 and page2 should not overlap") + } +} + +func testSetupLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + status, err := store.GetSetupStatus(ctx) + if err != nil { + t.Fatalf("GetSetupStatus: %v", err) + } + if status.Initialized { + t.Fatal("expected not initialized") + } + + setup := storage.SetupRecord{ + ID: "setup_1", + Version: "1.0.0", + InitializedAt: time.Now().UTC().Format(time.RFC3339), + UsageMode: "personal", + } + if err := store.SaveSetup(ctx, setup); err != nil { + t.Fatalf("SaveSetup: %v", err) + } + + status, err = store.GetSetupStatus(ctx) + if err != nil { + t.Fatalf("GetSetupStatus after save: %v", err) + } + if !status.Initialized { + t.Fatal("expected initialized") + } + if status.Version != "1.0.0" { + t.Fatalf("expected version 1.0.0, got %s", status.Version) + } +} + +// NewSQLiteTestProvider 创建一个临时 SQLite Provider 用于测试。 +func NewSQLiteTestProvider(t *testing.T) storage.Provider { + t.Helper() + dbPath := filepath.Join(t.TempDir(), "test.db") + store, err := storage.NewSQLiteProvider(dbPath) + if err != nil { + t.Fatalf("NewSQLiteProvider: %v", err) + } + if err := store.Init(context.Background()); err != nil { + t.Fatalf("Init: %v", err) + } + return store +} diff --git a/backend/internal/storage/contracttest/sqlite_test.go b/backend/internal/storage/contracttest/sqlite_test.go new file mode 100644 index 0000000..88eb07a --- /dev/null +++ b/backend/internal/storage/contracttest/sqlite_test.go @@ -0,0 +1,7 @@ +package contracttest + +import "testing" + +func TestSQLiteContract(t *testing.T) { + RunContractTests(t, NewSQLiteTestProvider) +} diff --git a/backend/internal/storage/migrations/sqlite/0001_initial.down.sql b/backend/internal/storage/migrations/sqlite/0001_initial.down.sql new file mode 100644 index 0000000..049ed09 --- /dev/null +++ b/backend/internal/storage/migrations/sqlite/0001_initial.down.sql @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS schema_migrations; +DROP TABLE IF EXISTS setup; +DROP TABLE IF EXISTS audit_log; +DROP TABLE IF EXISTS relations; +DROP TABLE IF EXISTS event_participants; +DROP TABLE IF EXISTS events; +DROP TABLE IF EXISTS identities; +DROP TABLE IF EXISTS imports; +DROP TABLE IF EXISTS sessions; +DROP TABLE IF EXISTS refresh_tokens; +DROP TABLE IF EXISTS users; diff --git a/backend/internal/storage/migrations/sqlite/0001_initial.up.sql b/backend/internal/storage/migrations/sqlite/0001_initial.up.sql new file mode 100644 index 0000000..6c428dc --- /dev/null +++ b/backend/internal/storage/migrations/sqlite/0001_initial.up.sql @@ -0,0 +1,149 @@ +-- Commory SQLite schema v1 +-- 用户表 +CREATE TABLE IF NOT EXISTS users ( + id TEXT PRIMARY KEY, + user_name TEXT NOT NULL UNIQUE, + email TEXT, + password_hash TEXT NOT NULL, + password_salt TEXT NOT NULL, + roles TEXT NOT NULL DEFAULT '["R_USER"]', + buttons TEXT NOT NULL DEFAULT '["view","import"]', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_users_user_name ON users(user_name); + +-- 刷新令牌表 +CREATE TABLE IF NOT EXISTS refresh_tokens ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + token_hash TEXT NOT NULL UNIQUE, + parent_id TEXT REFERENCES refresh_tokens(id), + expires_at DATETIME NOT NULL, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + revoked_at DATETIME +); + +CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user_id ON refresh_tokens(user_id); +CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token_hash ON refresh_tokens(token_hash); +CREATE INDEX IF NOT EXISTS idx_refresh_tokens_expires ON refresh_tokens(expires_at); + +-- 会话表 +CREATE TABLE IF NOT EXISTS sessions ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + refresh_token_id TEXT REFERENCES refresh_tokens(id) ON DELETE SET NULL, + device_name TEXT, + device_type TEXT, + ip_address TEXT, + user_agent TEXT, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + last_seen_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + revoked_at DATETIME +); + +CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id); + +-- 导入记录表 +CREATE TABLE IF NOT EXISTS imports ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + schema_version TEXT NOT NULL, + is_delta BOOLEAN NOT NULL DEFAULT FALSE, + imported_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + source_path TEXT, + event_count INTEGER NOT NULL DEFAULT 0, + identity_count INTEGER NOT NULL DEFAULT 0, + raw_json TEXT NOT NULL +); + +CREATE INDEX IF NOT EXISTS idx_imports_user_id ON imports(user_id); +CREATE INDEX IF NOT EXISTS idx_imports_imported_at ON imports(imported_at); + +-- 身份/联系人表 +CREATE TABLE IF NOT EXISTS identities ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + type TEXT NOT NULL, + display_name TEXT NOT NULL, + phones TEXT NOT NULL DEFAULT '[]', + emails TEXT NOT NULL DEFAULT '[]', + avatar TEXT, + labels TEXT NOT NULL DEFAULT '[]', + meta TEXT NOT NULL DEFAULT '{}', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_identities_user_id ON identities(user_id); +CREATE INDEX IF NOT EXISTS idx_identities_type ON identities(type); + +-- 通信事件表 +CREATE TABLE IF NOT EXISTS events ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL, + import_id TEXT, + type TEXT NOT NULL, + timestamp DATETIME NOT NULL, + direction TEXT NOT NULL, + content_summary TEXT, + content TEXT NOT NULL DEFAULT '{}', + meta TEXT NOT NULL DEFAULT '{}', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_events_user_id ON events(user_id); +CREATE INDEX IF NOT EXISTS idx_events_import_id ON events(import_id); +CREATE INDEX IF NOT EXISTS idx_events_type ON events(type); +CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp); +CREATE INDEX IF NOT EXISTS idx_events_user_type ON events(user_id, type); +CREATE INDEX IF NOT EXISTS idx_events_user_timestamp ON events(user_id, timestamp DESC); + +-- 事件参与者表 +CREATE TABLE IF NOT EXISTS event_participants ( + event_id TEXT NOT NULL REFERENCES events(id) ON DELETE CASCADE, + identity_id TEXT NOT NULL, + PRIMARY KEY (event_id, identity_id) +); + +CREATE INDEX IF NOT EXISTS idx_event_participants_identity ON event_participants(identity_id); + +-- 事件关系表 +CREATE TABLE IF NOT EXISTS relations ( + id TEXT PRIMARY KEY, + event_id TEXT NOT NULL REFERENCES events(id) ON DELETE CASCADE, + type TEXT NOT NULL, + target TEXT NOT NULL +); + +CREATE INDEX IF NOT EXISTS idx_relations_event_id ON relations(event_id); +CREATE INDEX IF NOT EXISTS idx_relations_type_target ON relations(type, target); + +-- 审计日志表 +CREATE TABLE IF NOT EXISTS audit_log ( + id TEXT PRIMARY KEY, + user_id TEXT REFERENCES users(id) ON DELETE SET NULL, + action TEXT NOT NULL, + ip_address TEXT, + user_agent TEXT, + detail TEXT, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_audit_log_user_id ON audit_log(user_id); +CREATE INDEX IF NOT EXISTS idx_audit_log_created_at ON audit_log(created_at); + +-- 初始化状态表 +CREATE TABLE IF NOT EXISTS setup ( + id TEXT PRIMARY KEY, + version TEXT NOT NULL, + initialized_at DATETIME NOT NULL, + usage_mode TEXT +); + +-- 迁移版本追踪 +CREATE TABLE IF NOT EXISTS schema_migrations ( + version BIGINT PRIMARY KEY, + dirty BOOLEAN NOT NULL DEFAULT FALSE +); diff --git a/backend/internal/storage/sqlc/gen/db.go b/backend/internal/storage/sqlc/gen/db.go new file mode 100644 index 0000000..5ddde59 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package sqlcgen + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/backend/internal/storage/sqlc/gen/events.sql.go b/backend/internal/storage/sqlc/gen/events.sql.go new file mode 100644 index 0000000..e204af0 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/events.sql.go @@ -0,0 +1,419 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: events.sql + +package sqlcgen + +import ( + "context" + "database/sql" + "time" +) + +const countEventsByUser = `-- name: CountEventsByUser :one +SELECT COUNT(*) FROM events WHERE user_id = ? +` + +func (q *Queries) CountEventsByUser(ctx context.Context, userID string) (int64, error) { + row := q.db.QueryRowContext(ctx, countEventsByUser, userID) + var count int64 + err := row.Scan(&count) + return count, err +} + +const countEventsByUserAndType = `-- name: CountEventsByUserAndType :many +SELECT type, COUNT(*) AS count FROM events WHERE user_id = ? GROUP BY type +` + +type CountEventsByUserAndTypeRow struct { + Type string `json:"type"` + Count int64 `json:"count"` +} + +func (q *Queries) CountEventsByUserAndType(ctx context.Context, userID string) ([]*CountEventsByUserAndTypeRow, error) { + rows, err := q.db.QueryContext(ctx, countEventsByUserAndType, userID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*CountEventsByUserAndTypeRow{} + for rows.Next() { + var i CountEventsByUserAndTypeRow + if err := rows.Scan(&i.Type, &i.Count); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const createEvent = `-- name: CreateEvent :exec +INSERT INTO events (id, user_id, import_id, type, timestamp, direction, content_summary, content, meta) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) +` + +type CreateEventParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + ImportID sql.NullString `json:"import_id"` + Type string `json:"type"` + Timestamp time.Time `json:"timestamp"` + Direction string `json:"direction"` + ContentSummary sql.NullString `json:"content_summary"` + Content string `json:"content"` + Meta string `json:"meta"` +} + +func (q *Queries) CreateEvent(ctx context.Context, arg *CreateEventParams) error { + _, err := q.db.ExecContext(ctx, createEvent, + arg.ID, + arg.UserID, + arg.ImportID, + arg.Type, + arg.Timestamp, + arg.Direction, + arg.ContentSummary, + arg.Content, + arg.Meta, + ) + return err +} + +const deleteEvent = `-- name: DeleteEvent :exec +DELETE FROM events WHERE id = ? AND user_id = ? +` + +type DeleteEventParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeleteEvent(ctx context.Context, arg *DeleteEventParams) error { + _, err := q.db.ExecContext(ctx, deleteEvent, arg.ID, arg.UserID) + return err +} + +const deleteEventsByImport = `-- name: DeleteEventsByImport :exec +DELETE FROM events WHERE import_id = ? AND user_id = ? +` + +type DeleteEventsByImportParams struct { + ImportID sql.NullString `json:"import_id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeleteEventsByImport(ctx context.Context, arg *DeleteEventsByImportParams) error { + _, err := q.db.ExecContext(ctx, deleteEventsByImport, arg.ImportID, arg.UserID) + return err +} + +const getEvent = `-- name: GetEvent :one +SELECT id, user_id, import_id, type, timestamp, direction, content_summary, content, meta, created_at FROM events WHERE id = ? AND user_id = ? LIMIT 1 +` + +type GetEventParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) GetEvent(ctx context.Context, arg *GetEventParams) (*Event, error) { + row := q.db.QueryRowContext(ctx, getEvent, arg.ID, arg.UserID) + var i Event + err := row.Scan( + &i.ID, + &i.UserID, + &i.ImportID, + &i.Type, + &i.Timestamp, + &i.Direction, + &i.ContentSummary, + &i.Content, + &i.Meta, + &i.CreatedAt, + ) + return &i, err +} + +const getEventParticipants = `-- name: GetEventParticipants :many +SELECT identity_id FROM event_participants WHERE event_id = ? +` + +func (q *Queries) GetEventParticipants(ctx context.Context, eventID string) ([]string, error) { + rows, err := q.db.QueryContext(ctx, getEventParticipants, eventID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []string{} + for rows.Next() { + var identity_id string + if err := rows.Scan(&identity_id); err != nil { + return nil, err + } + items = append(items, identity_id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const insertEventParticipant = `-- name: InsertEventParticipant :exec +INSERT OR IGNORE INTO event_participants (event_id, identity_id) VALUES (?, ?) +` + +type InsertEventParticipantParams struct { + EventID string `json:"event_id"` + IdentityID string `json:"identity_id"` +} + +func (q *Queries) InsertEventParticipant(ctx context.Context, arg *InsertEventParticipantParams) error { + _, err := q.db.ExecContext(ctx, insertEventParticipant, arg.EventID, arg.IdentityID) + return err +} + +const lastActivityTime = `-- name: LastActivityTime :one +SELECT MAX(timestamp) FROM events WHERE user_id = ? +` + +func (q *Queries) LastActivityTime(ctx context.Context, userID string) (interface{}, error) { + row := q.db.QueryRowContext(ctx, lastActivityTime, userID) + var max interface{} + err := row.Scan(&max) + return max, err +} + +const listEvents = `-- name: ListEvents :many +SELECT id, user_id, import_id, type, timestamp, direction, content_summary, content, meta, created_at FROM events +WHERE user_id = ? + AND type = COALESCE(NULLIF(?, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type ListEventsParams struct { + UserID string `json:"user_id"` + Type interface{} `json:"type"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListEvents(ctx context.Context, arg *ListEventsParams) ([]*Event, error) { + rows, err := q.db.QueryContext(ctx, listEvents, + arg.UserID, + arg.Type, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Event{} + for rows.Next() { + var i Event + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.ImportID, + &i.Type, + &i.Timestamp, + &i.Direction, + &i.ContentSummary, + &i.Content, + &i.Meta, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const searchEvents = `-- name: SearchEvents :many +SELECT id, user_id, import_id, type, timestamp, direction, content_summary, content, meta, created_at FROM events +WHERE user_id = ? + AND (COALESCE(content_summary, '') || ' ' || content) LIKE '%' || ? || '%' + AND type = COALESCE(NULLIF(?, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type SearchEventsParams struct { + UserID string `json:"user_id"` + SearchTerm sql.NullString `json:"search_term"` + Type interface{} `json:"type"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) SearchEvents(ctx context.Context, arg *SearchEventsParams) ([]*Event, error) { + rows, err := q.db.QueryContext(ctx, searchEvents, + arg.UserID, + arg.SearchTerm, + arg.Type, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Event{} + for rows.Next() { + var i Event + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.ImportID, + &i.Type, + &i.Timestamp, + &i.Direction, + &i.ContentSummary, + &i.Content, + &i.Meta, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const timelineEvents = `-- name: TimelineEvents :many +SELECT id, user_id, import_id, type, timestamp, direction, content_summary, content, meta, created_at FROM events +WHERE user_id = ? + AND type = COALESCE(NULLIF(?, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type TimelineEventsParams struct { + UserID string `json:"user_id"` + Type interface{} `json:"type"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) TimelineEvents(ctx context.Context, arg *TimelineEventsParams) ([]*Event, error) { + rows, err := q.db.QueryContext(ctx, timelineEvents, + arg.UserID, + arg.Type, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Event{} + for rows.Next() { + var i Event + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.ImportID, + &i.Type, + &i.Timestamp, + &i.Direction, + &i.ContentSummary, + &i.Content, + &i.Meta, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const timelineEventsByParticipant = `-- name: TimelineEventsByParticipant :many +SELECT DISTINCT e.id, e.user_id, e.import_id, e.type, e.timestamp, e.direction, e.content_summary, e.content, e.meta, e.created_at +FROM events e +JOIN event_participants ep ON e.id = ep.event_id +JOIN identities i ON ep.identity_id = i.id +WHERE e.user_id = ? + AND e.type = COALESCE(NULLIF(?, ''), e.type) + AND i.display_name LIKE '%' || ? || '%' +ORDER BY e.timestamp DESC +LIMIT ? OFFSET ? +` + +type TimelineEventsByParticipantParams struct { + UserID string `json:"user_id"` + Type interface{} `json:"type"` + Participant sql.NullString `json:"participant"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) TimelineEventsByParticipant(ctx context.Context, arg *TimelineEventsByParticipantParams) ([]*Event, error) { + rows, err := q.db.QueryContext(ctx, timelineEventsByParticipant, + arg.UserID, + arg.Type, + arg.Participant, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Event{} + for rows.Next() { + var i Event + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.ImportID, + &i.Type, + &i.Timestamp, + &i.Direction, + &i.ContentSummary, + &i.Content, + &i.Meta, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/backend/internal/storage/sqlc/gen/identities.sql.go b/backend/internal/storage/sqlc/gen/identities.sql.go new file mode 100644 index 0000000..e27eed4 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/identities.sql.go @@ -0,0 +1,221 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: identities.sql + +package sqlcgen + +import ( + "context" + "database/sql" +) + +const countIdentitiesByUser = `-- name: CountIdentitiesByUser :one +SELECT COUNT(*) FROM identities WHERE user_id = ? +` + +func (q *Queries) CountIdentitiesByUser(ctx context.Context, userID string) (int64, error) { + row := q.db.QueryRowContext(ctx, countIdentitiesByUser, userID) + var count int64 + err := row.Scan(&count) + return count, err +} + +const createIdentity = `-- name: CreateIdentity :exec +INSERT INTO identities (id, user_id, type, display_name, phones, emails, avatar, labels, meta) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) +` + +type CreateIdentityParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + Type string `json:"type"` + DisplayName string `json:"display_name"` + Phones string `json:"phones"` + Emails string `json:"emails"` + Avatar sql.NullString `json:"avatar"` + Labels string `json:"labels"` + Meta string `json:"meta"` +} + +func (q *Queries) CreateIdentity(ctx context.Context, arg *CreateIdentityParams) error { + _, err := q.db.ExecContext(ctx, createIdentity, + arg.ID, + arg.UserID, + arg.Type, + arg.DisplayName, + arg.Phones, + arg.Emails, + arg.Avatar, + arg.Labels, + arg.Meta, + ) + return err +} + +const deleteIdentity = `-- name: DeleteIdentity :exec +DELETE FROM identities WHERE id = ? AND user_id = ? +` + +type DeleteIdentityParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeleteIdentity(ctx context.Context, arg *DeleteIdentityParams) error { + _, err := q.db.ExecContext(ctx, deleteIdentity, arg.ID, arg.UserID) + return err +} + +const getIdentity = `-- name: GetIdentity :one +SELECT id, user_id, type, display_name, phones, emails, avatar, labels, meta, created_at, updated_at FROM identities WHERE id = ? AND user_id = ? LIMIT 1 +` + +type GetIdentityParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) GetIdentity(ctx context.Context, arg *GetIdentityParams) (*Identity, error) { + row := q.db.QueryRowContext(ctx, getIdentity, arg.ID, arg.UserID) + var i Identity + err := row.Scan( + &i.ID, + &i.UserID, + &i.Type, + &i.DisplayName, + &i.Phones, + &i.Emails, + &i.Avatar, + &i.Labels, + &i.Meta, + &i.CreatedAt, + &i.UpdatedAt, + ) + return &i, err +} + +const listIdentities = `-- name: ListIdentities :many +SELECT id, user_id, type, display_name, phones, emails, avatar, labels, meta, created_at, updated_at FROM identities +WHERE user_id = ? + AND type = COALESCE(NULLIF(?, ''), type) +ORDER BY display_name ASC +` + +type ListIdentitiesParams struct { + UserID string `json:"user_id"` + Type interface{} `json:"type"` +} + +func (q *Queries) ListIdentities(ctx context.Context, arg *ListIdentitiesParams) ([]*Identity, error) { + rows, err := q.db.QueryContext(ctx, listIdentities, arg.UserID, arg.Type) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Identity{} + for rows.Next() { + var i Identity + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.Type, + &i.DisplayName, + &i.Phones, + &i.Emails, + &i.Avatar, + &i.Labels, + &i.Meta, + &i.CreatedAt, + &i.UpdatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const searchIdentities = `-- name: SearchIdentities :many +SELECT id, user_id, type, display_name, phones, emails, avatar, labels, meta, created_at, updated_at FROM identities +WHERE user_id = ? + AND (display_name || ' ' || phones) LIKE '%' || ? || '%' +ORDER BY display_name ASC +` + +type SearchIdentitiesParams struct { + UserID string `json:"user_id"` + Query sql.NullString `json:"query"` +} + +func (q *Queries) SearchIdentities(ctx context.Context, arg *SearchIdentitiesParams) ([]*Identity, error) { + rows, err := q.db.QueryContext(ctx, searchIdentities, arg.UserID, arg.Query) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Identity{} + for rows.Next() { + var i Identity + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.Type, + &i.DisplayName, + &i.Phones, + &i.Emails, + &i.Avatar, + &i.Labels, + &i.Meta, + &i.CreatedAt, + &i.UpdatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const updateIdentity = `-- name: UpdateIdentity :exec +UPDATE identities +SET display_name = ?, phones = ?, emails = ?, avatar = ?, labels = ?, meta = ?, updated_at = CURRENT_TIMESTAMP +WHERE id = ? AND user_id = ? +` + +type UpdateIdentityParams struct { + DisplayName string `json:"display_name"` + Phones string `json:"phones"` + Emails string `json:"emails"` + Avatar sql.NullString `json:"avatar"` + Labels string `json:"labels"` + Meta string `json:"meta"` + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) UpdateIdentity(ctx context.Context, arg *UpdateIdentityParams) error { + _, err := q.db.ExecContext(ctx, updateIdentity, + arg.DisplayName, + arg.Phones, + arg.Emails, + arg.Avatar, + arg.Labels, + arg.Meta, + arg.ID, + arg.UserID, + ) + return err +} diff --git a/backend/internal/storage/sqlc/gen/imports.sql.go b/backend/internal/storage/sqlc/gen/imports.sql.go new file mode 100644 index 0000000..7eb92e6 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/imports.sql.go @@ -0,0 +1,170 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: imports.sql + +package sqlcgen + +import ( + "context" + "database/sql" + "time" +) + +const countImportsByUser = `-- name: CountImportsByUser :one +SELECT COUNT(*) FROM imports WHERE user_id = ? +` + +func (q *Queries) CountImportsByUser(ctx context.Context, userID string) (int64, error) { + row := q.db.QueryRowContext(ctx, countImportsByUser, userID) + var count int64 + err := row.Scan(&count) + return count, err +} + +const createImport = `-- name: CreateImport :exec +INSERT INTO imports (id, user_id, schema_version, is_delta, source_path, event_count, identity_count, raw_json) +VALUES (?, ?, ?, ?, ?, ?, ?, ?) +` + +type CreateImportParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + SchemaVersion string `json:"schema_version"` + IsDelta bool `json:"is_delta"` + SourcePath sql.NullString `json:"source_path"` + EventCount int64 `json:"event_count"` + IdentityCount int64 `json:"identity_count"` + RawJson string `json:"raw_json"` +} + +func (q *Queries) CreateImport(ctx context.Context, arg *CreateImportParams) error { + _, err := q.db.ExecContext(ctx, createImport, + arg.ID, + arg.UserID, + arg.SchemaVersion, + arg.IsDelta, + arg.SourcePath, + arg.EventCount, + arg.IdentityCount, + arg.RawJson, + ) + return err +} + +const deleteImport = `-- name: DeleteImport :exec +DELETE FROM imports WHERE id = ? AND user_id = ? +` + +type DeleteImportParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeleteImport(ctx context.Context, arg *DeleteImportParams) error { + _, err := q.db.ExecContext(ctx, deleteImport, arg.ID, arg.UserID) + return err +} + +const exportImport = `-- name: ExportImport :one +SELECT raw_json FROM imports WHERE id = ? AND user_id = ? LIMIT 1 +` + +type ExportImportParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) ExportImport(ctx context.Context, arg *ExportImportParams) (string, error) { + row := q.db.QueryRowContext(ctx, exportImport, arg.ID, arg.UserID) + var raw_json string + err := row.Scan(&raw_json) + return raw_json, err +} + +const getImport = `-- name: GetImport :one +SELECT id, user_id, schema_version, is_delta, imported_at, source_path, event_count, identity_count, raw_json FROM imports WHERE id = ? AND user_id = ? LIMIT 1 +` + +type GetImportParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) GetImport(ctx context.Context, arg *GetImportParams) (*Import, error) { + row := q.db.QueryRowContext(ctx, getImport, arg.ID, arg.UserID) + var i Import + err := row.Scan( + &i.ID, + &i.UserID, + &i.SchemaVersion, + &i.IsDelta, + &i.ImportedAt, + &i.SourcePath, + &i.EventCount, + &i.IdentityCount, + &i.RawJson, + ) + return &i, err +} + +const latestImportID = `-- name: LatestImportID :one +SELECT id FROM imports WHERE user_id = ? ORDER BY imported_at DESC LIMIT 1 +` + +func (q *Queries) LatestImportID(ctx context.Context, userID string) (string, error) { + row := q.db.QueryRowContext(ctx, latestImportID, userID) + var id string + err := row.Scan(&id) + return id, err +} + +const listImportsByUser = `-- name: ListImportsByUser :many +SELECT id, user_id, schema_version, is_delta, imported_at, source_path, event_count, identity_count +FROM imports +WHERE user_id = ? +ORDER BY imported_at DESC +` + +type ListImportsByUserRow struct { + ID string `json:"id"` + UserID string `json:"user_id"` + SchemaVersion string `json:"schema_version"` + IsDelta bool `json:"is_delta"` + ImportedAt time.Time `json:"imported_at"` + SourcePath sql.NullString `json:"source_path"` + EventCount int64 `json:"event_count"` + IdentityCount int64 `json:"identity_count"` +} + +func (q *Queries) ListImportsByUser(ctx context.Context, userID string) ([]*ListImportsByUserRow, error) { + rows, err := q.db.QueryContext(ctx, listImportsByUser, userID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*ListImportsByUserRow{} + for rows.Next() { + var i ListImportsByUserRow + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.SchemaVersion, + &i.IsDelta, + &i.ImportedAt, + &i.SourcePath, + &i.EventCount, + &i.IdentityCount, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/backend/internal/storage/sqlc/gen/models.go b/backend/internal/storage/sqlc/gen/models.go new file mode 100644 index 0000000..77fb85d --- /dev/null +++ b/backend/internal/storage/sqlc/gen/models.go @@ -0,0 +1,118 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package sqlcgen + +import ( + "database/sql" + "time" +) + +type AuditLog struct { + ID string `json:"id"` + UserID sql.NullString `json:"user_id"` + Action string `json:"action"` + IpAddress sql.NullString `json:"ip_address"` + UserAgent sql.NullString `json:"user_agent"` + Detail sql.NullString `json:"detail"` + CreatedAt time.Time `json:"created_at"` +} + +type Event struct { + ID string `json:"id"` + UserID string `json:"user_id"` + ImportID sql.NullString `json:"import_id"` + Type string `json:"type"` + Timestamp time.Time `json:"timestamp"` + Direction string `json:"direction"` + ContentSummary sql.NullString `json:"content_summary"` + Content string `json:"content"` + Meta string `json:"meta"` + CreatedAt time.Time `json:"created_at"` +} + +type EventParticipant struct { + EventID string `json:"event_id"` + IdentityID string `json:"identity_id"` +} + +type Identity struct { + ID string `json:"id"` + UserID string `json:"user_id"` + Type string `json:"type"` + DisplayName string `json:"display_name"` + Phones string `json:"phones"` + Emails string `json:"emails"` + Avatar sql.NullString `json:"avatar"` + Labels string `json:"labels"` + Meta string `json:"meta"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type Import struct { + ID string `json:"id"` + UserID string `json:"user_id"` + SchemaVersion string `json:"schema_version"` + IsDelta bool `json:"is_delta"` + ImportedAt time.Time `json:"imported_at"` + SourcePath sql.NullString `json:"source_path"` + EventCount int64 `json:"event_count"` + IdentityCount int64 `json:"identity_count"` + RawJson string `json:"raw_json"` +} + +type RefreshToken struct { + ID string `json:"id"` + UserID string `json:"user_id"` + TokenHash string `json:"token_hash"` + ParentID sql.NullString `json:"parent_id"` + ExpiresAt time.Time `json:"expires_at"` + CreatedAt time.Time `json:"created_at"` + RevokedAt sql.NullTime `json:"revoked_at"` +} + +type Relation struct { + ID string `json:"id"` + EventID string `json:"event_id"` + Type string `json:"type"` + Target string `json:"target"` +} + +type SchemaMigration struct { + Version int64 `json:"version"` + Dirty bool `json:"dirty"` +} + +type Session struct { + ID string `json:"id"` + UserID string `json:"user_id"` + RefreshTokenID sql.NullString `json:"refresh_token_id"` + DeviceName sql.NullString `json:"device_name"` + DeviceType sql.NullString `json:"device_type"` + IpAddress sql.NullString `json:"ip_address"` + UserAgent sql.NullString `json:"user_agent"` + CreatedAt time.Time `json:"created_at"` + LastSeenAt time.Time `json:"last_seen_at"` + RevokedAt sql.NullTime `json:"revoked_at"` +} + +type Setup struct { + ID string `json:"id"` + Version string `json:"version"` + InitializedAt time.Time `json:"initialized_at"` + UsageMode sql.NullString `json:"usage_mode"` +} + +type User struct { + ID string `json:"id"` + UserName string `json:"user_name"` + Email sql.NullString `json:"email"` + PasswordHash string `json:"password_hash"` + PasswordSalt string `json:"password_salt"` + Roles string `json:"roles"` + Buttons string `json:"buttons"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} diff --git a/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go new file mode 100644 index 0000000..7b62170 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go @@ -0,0 +1,112 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: refresh_tokens.sql + +package sqlcgen + +import ( + "context" + "database/sql" + "time" +) + +const cleanupExpiredTokens = `-- name: CleanupExpiredTokens :exec +DELETE FROM refresh_tokens WHERE expires_at < CURRENT_TIMESTAMP +` + +func (q *Queries) CleanupExpiredTokens(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, cleanupExpiredTokens) + return err +} + +const consumeRefreshToken = `-- name: ConsumeRefreshToken :one +UPDATE refresh_tokens +SET revoked_at = CURRENT_TIMESTAMP +WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > CURRENT_TIMESTAMP +RETURNING id, user_id, token_hash, parent_id, expires_at, created_at, revoked_at +` + +func (q *Queries) ConsumeRefreshToken(ctx context.Context, tokenHash string) (*RefreshToken, error) { + row := q.db.QueryRowContext(ctx, consumeRefreshToken, tokenHash) + var i RefreshToken + err := row.Scan( + &i.ID, + &i.UserID, + &i.TokenHash, + &i.ParentID, + &i.ExpiresAt, + &i.CreatedAt, + &i.RevokedAt, + ) + return &i, err +} + +const findRefreshTokenByHash = `-- name: FindRefreshTokenByHash :one +SELECT id, user_id, token_hash, parent_id, expires_at, created_at, revoked_at FROM refresh_tokens +WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > CURRENT_TIMESTAMP +LIMIT 1 +` + +func (q *Queries) FindRefreshTokenByHash(ctx context.Context, tokenHash string) (*RefreshToken, error) { + row := q.db.QueryRowContext(ctx, findRefreshTokenByHash, tokenHash) + var i RefreshToken + err := row.Scan( + &i.ID, + &i.UserID, + &i.TokenHash, + &i.ParentID, + &i.ExpiresAt, + &i.CreatedAt, + &i.RevokedAt, + ) + return &i, err +} + +const revokeRefreshTokenFamily = `-- name: RevokeRefreshTokenFamily :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP +WHERE id = ? OR parent_id = ? +` + +type RevokeRefreshTokenFamilyParams struct { + ID string `json:"id"` + ParentID sql.NullString `json:"parent_id"` +} + +func (q *Queries) RevokeRefreshTokenFamily(ctx context.Context, arg *RevokeRefreshTokenFamilyParams) error { + _, err := q.db.ExecContext(ctx, revokeRefreshTokenFamily, arg.ID, arg.ParentID) + return err +} + +const revokeRefreshTokensByUser = `-- name: RevokeRefreshTokensByUser :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND revoked_at IS NULL +` + +func (q *Queries) RevokeRefreshTokensByUser(ctx context.Context, userID string) error { + _, err := q.db.ExecContext(ctx, revokeRefreshTokensByUser, userID) + return err +} + +const saveRefreshToken = `-- name: SaveRefreshToken :exec +INSERT INTO refresh_tokens (id, user_id, token_hash, parent_id, expires_at) +VALUES (?, ?, ?, ?, ?) +` + +type SaveRefreshTokenParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + TokenHash string `json:"token_hash"` + ParentID sql.NullString `json:"parent_id"` + ExpiresAt time.Time `json:"expires_at"` +} + +func (q *Queries) SaveRefreshToken(ctx context.Context, arg *SaveRefreshTokenParams) error { + _, err := q.db.ExecContext(ctx, saveRefreshToken, + arg.ID, + arg.UserID, + arg.TokenHash, + arg.ParentID, + arg.ExpiresAt, + ) + return err +} diff --git a/backend/internal/storage/sqlc/gen/relations.sql.go b/backend/internal/storage/sqlc/gen/relations.sql.go new file mode 100644 index 0000000..83e4cae --- /dev/null +++ b/backend/internal/storage/sqlc/gen/relations.sql.go @@ -0,0 +1,109 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: relations.sql + +package sqlcgen + +import ( + "context" +) + +const createRelation = `-- name: CreateRelation :exec +INSERT INTO relations (id, event_id, type, target) VALUES (?, ?, ?, ?) +` + +type CreateRelationParams struct { + ID string `json:"id"` + EventID string `json:"event_id"` + Type string `json:"type"` + Target string `json:"target"` +} + +func (q *Queries) CreateRelation(ctx context.Context, arg *CreateRelationParams) error { + _, err := q.db.ExecContext(ctx, createRelation, + arg.ID, + arg.EventID, + arg.Type, + arg.Target, + ) + return err +} + +const deleteRelationsByEvent = `-- name: DeleteRelationsByEvent :exec +DELETE FROM relations WHERE event_id = ? +` + +func (q *Queries) DeleteRelationsByEvent(ctx context.Context, eventID string) error { + _, err := q.db.ExecContext(ctx, deleteRelationsByEvent, eventID) + return err +} + +const listRelationsByEvent = `-- name: ListRelationsByEvent :many +SELECT id, event_id, type, target FROM relations WHERE event_id = ? +` + +func (q *Queries) ListRelationsByEvent(ctx context.Context, eventID string) ([]*Relation, error) { + rows, err := q.db.QueryContext(ctx, listRelationsByEvent, eventID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Relation{} + for rows.Next() { + var i Relation + if err := rows.Scan( + &i.ID, + &i.EventID, + &i.Type, + &i.Target, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listRelationsByTarget = `-- name: ListRelationsByTarget :many +SELECT id, event_id, type, target FROM relations WHERE type = ? AND target = ? +` + +type ListRelationsByTargetParams struct { + Type string `json:"type"` + Target string `json:"target"` +} + +func (q *Queries) ListRelationsByTarget(ctx context.Context, arg *ListRelationsByTargetParams) ([]*Relation, error) { + rows, err := q.db.QueryContext(ctx, listRelationsByTarget, arg.Type, arg.Target) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Relation{} + for rows.Next() { + var i Relation + if err := rows.Scan( + &i.ID, + &i.EventID, + &i.Type, + &i.Target, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/backend/internal/storage/sqlc/gen/sessions.sql.go b/backend/internal/storage/sqlc/gen/sessions.sql.go new file mode 100644 index 0000000..44502a3 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/sessions.sql.go @@ -0,0 +1,131 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: sessions.sql + +package sqlcgen + +import ( + "context" + "database/sql" +) + +const createSession = `-- name: CreateSession :exec +INSERT INTO sessions (id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent) +VALUES (?, ?, ?, ?, ?, ?, ?) +` + +type CreateSessionParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + RefreshTokenID sql.NullString `json:"refresh_token_id"` + DeviceName sql.NullString `json:"device_name"` + DeviceType sql.NullString `json:"device_type"` + IpAddress sql.NullString `json:"ip_address"` + UserAgent sql.NullString `json:"user_agent"` +} + +func (q *Queries) CreateSession(ctx context.Context, arg *CreateSessionParams) error { + _, err := q.db.ExecContext(ctx, createSession, + arg.ID, + arg.UserID, + arg.RefreshTokenID, + arg.DeviceName, + arg.DeviceType, + arg.IpAddress, + arg.UserAgent, + ) + return err +} + +const getSession = `-- name: GetSession :one +SELECT id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent, created_at, last_seen_at, revoked_at FROM sessions WHERE id = ? AND revoked_at IS NULL LIMIT 1 +` + +func (q *Queries) GetSession(ctx context.Context, id string) (*Session, error) { + row := q.db.QueryRowContext(ctx, getSession, id) + var i Session + err := row.Scan( + &i.ID, + &i.UserID, + &i.RefreshTokenID, + &i.DeviceName, + &i.DeviceType, + &i.IpAddress, + &i.UserAgent, + &i.CreatedAt, + &i.LastSeenAt, + &i.RevokedAt, + ) + return &i, err +} + +const listSessionsByUser = `-- name: ListSessionsByUser :many +SELECT id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent, created_at, last_seen_at, revoked_at FROM sessions WHERE user_id = ? AND revoked_at IS NULL ORDER BY last_seen_at DESC +` + +func (q *Queries) ListSessionsByUser(ctx context.Context, userID string) ([]*Session, error) { + rows, err := q.db.QueryContext(ctx, listSessionsByUser, userID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*Session{} + for rows.Next() { + var i Session + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.RefreshTokenID, + &i.DeviceName, + &i.DeviceType, + &i.IpAddress, + &i.UserAgent, + &i.CreatedAt, + &i.LastSeenAt, + &i.RevokedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const revokeOtherSessions = `-- name: RevokeOtherSessions :exec +UPDATE sessions SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND id != ? AND revoked_at IS NULL +` + +type RevokeOtherSessionsParams struct { + UserID string `json:"user_id"` + ID string `json:"id"` +} + +func (q *Queries) RevokeOtherSessions(ctx context.Context, arg *RevokeOtherSessionsParams) error { + _, err := q.db.ExecContext(ctx, revokeOtherSessions, arg.UserID, arg.ID) + return err +} + +const revokeSession = `-- name: RevokeSession :exec +UPDATE sessions SET revoked_at = CURRENT_TIMESTAMP WHERE id = ? +` + +func (q *Queries) RevokeSession(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, revokeSession, id) + return err +} + +const updateSessionLastSeen = `-- name: UpdateSessionLastSeen :exec +UPDATE sessions SET last_seen_at = CURRENT_TIMESTAMP WHERE id = ? +` + +func (q *Queries) UpdateSessionLastSeen(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, updateSessionLastSeen, id) + return err +} diff --git a/backend/internal/storage/sqlc/gen/setup.sql.go b/backend/internal/storage/sqlc/gen/setup.sql.go new file mode 100644 index 0000000..220a264 --- /dev/null +++ b/backend/internal/storage/sqlc/gen/setup.sql.go @@ -0,0 +1,145 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: setup.sql + +package sqlcgen + +import ( + "context" + "database/sql" + "time" +) + +const countAuditLogs = `-- name: CountAuditLogs :one +SELECT COUNT(*) FROM audit_log +WHERE user_id = COALESCE(NULLIF(?1, ''), user_id) + AND action = COALESCE(NULLIF(?2, ''), action) +` + +type CountAuditLogsParams struct { + UserID interface{} `json:"user_id"` + Action interface{} `json:"action"` +} + +func (q *Queries) CountAuditLogs(ctx context.Context, arg *CountAuditLogsParams) (int64, error) { + row := q.db.QueryRowContext(ctx, countAuditLogs, arg.UserID, arg.Action) + var count int64 + err := row.Scan(&count) + return count, err +} + +const createAuditLog = `-- name: CreateAuditLog :exec +INSERT INTO audit_log (id, user_id, action, ip_address, user_agent, detail) +VALUES (?, ?, ?, ?, ?, ?) +` + +type CreateAuditLogParams struct { + ID string `json:"id"` + UserID sql.NullString `json:"user_id"` + Action string `json:"action"` + IpAddress sql.NullString `json:"ip_address"` + UserAgent sql.NullString `json:"user_agent"` + Detail sql.NullString `json:"detail"` +} + +func (q *Queries) CreateAuditLog(ctx context.Context, arg *CreateAuditLogParams) error { + _, err := q.db.ExecContext(ctx, createAuditLog, + arg.ID, + arg.UserID, + arg.Action, + arg.IpAddress, + arg.UserAgent, + arg.Detail, + ) + return err +} + +const getAuditLogs = `-- name: GetAuditLogs :many +SELECT id, user_id, "action", ip_address, user_agent, detail, created_at FROM audit_log +WHERE user_id = COALESCE(NULLIF(?, ''), user_id) + AND action = COALESCE(NULLIF(?, ''), action) +ORDER BY created_at DESC +LIMIT ? OFFSET ? +` + +type GetAuditLogsParams struct { + UserID interface{} `json:"user_id"` + Action interface{} `json:"action"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) GetAuditLogs(ctx context.Context, arg *GetAuditLogsParams) ([]*AuditLog, error) { + rows, err := q.db.QueryContext(ctx, getAuditLogs, + arg.UserID, + arg.Action, + arg.Limit, + arg.Offset, + ) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*AuditLog{} + for rows.Next() { + var i AuditLog + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.Action, + &i.IpAddress, + &i.UserAgent, + &i.Detail, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getSetupStatus = `-- name: GetSetupStatus :one +SELECT id, version, initialized_at, usage_mode FROM setup LIMIT 1 +` + +func (q *Queries) GetSetupStatus(ctx context.Context) (*Setup, error) { + row := q.db.QueryRowContext(ctx, getSetupStatus) + var i Setup + err := row.Scan( + &i.ID, + &i.Version, + &i.InitializedAt, + &i.UsageMode, + ) + return &i, err +} + +const saveSetup = `-- name: SaveSetup :exec +INSERT OR REPLACE INTO setup (id, version, initialized_at, usage_mode) +VALUES (?, ?, ?, ?) +` + +type SaveSetupParams struct { + ID string `json:"id"` + Version string `json:"version"` + InitializedAt time.Time `json:"initialized_at"` + UsageMode sql.NullString `json:"usage_mode"` +} + +func (q *Queries) SaveSetup(ctx context.Context, arg *SaveSetupParams) error { + _, err := q.db.ExecContext(ctx, saveSetup, + arg.ID, + arg.Version, + arg.InitializedAt, + arg.UsageMode, + ) + return err +} diff --git a/backend/internal/storage/sqlc/gen/users.sql.go b/backend/internal/storage/sqlc/gen/users.sql.go new file mode 100644 index 0000000..3079c5a --- /dev/null +++ b/backend/internal/storage/sqlc/gen/users.sql.go @@ -0,0 +1,168 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: users.sql + +package sqlcgen + +import ( + "context" + "database/sql" +) + +const createUser = `-- name: CreateUser :exec +INSERT INTO users (id, user_name, email, password_hash, password_salt, roles, buttons) +VALUES (?, ?, ?, ?, ?, ?, ?) +` + +type CreateUserParams struct { + ID string `json:"id"` + UserName string `json:"user_name"` + Email sql.NullString `json:"email"` + PasswordHash string `json:"password_hash"` + PasswordSalt string `json:"password_salt"` + Roles string `json:"roles"` + Buttons string `json:"buttons"` +} + +func (q *Queries) CreateUser(ctx context.Context, arg *CreateUserParams) error { + _, err := q.db.ExecContext(ctx, createUser, + arg.ID, + arg.UserName, + arg.Email, + arg.PasswordHash, + arg.PasswordSalt, + arg.Roles, + arg.Buttons, + ) + return err +} + +const deleteUser = `-- name: DeleteUser :exec +DELETE FROM users WHERE id = ? +` + +func (q *Queries) DeleteUser(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, deleteUser, id) + return err +} + +const findUserByUserName = `-- name: FindUserByUserName :one +SELECT id, user_name, email, password_hash, password_salt, roles, buttons, created_at, updated_at FROM users WHERE user_name = ? LIMIT 1 +` + +func (q *Queries) FindUserByUserName(ctx context.Context, userName string) (*User, error) { + row := q.db.QueryRowContext(ctx, findUserByUserName, userName) + var i User + err := row.Scan( + &i.ID, + &i.UserName, + &i.Email, + &i.PasswordHash, + &i.PasswordSalt, + &i.Roles, + &i.Buttons, + &i.CreatedAt, + &i.UpdatedAt, + ) + return &i, err +} + +const getUser = `-- name: GetUser :one +SELECT id, user_name, email, password_hash, password_salt, roles, buttons, created_at, updated_at FROM users WHERE id = ? LIMIT 1 +` + +func (q *Queries) GetUser(ctx context.Context, id string) (*User, error) { + row := q.db.QueryRowContext(ctx, getUser, id) + var i User + err := row.Scan( + &i.ID, + &i.UserName, + &i.Email, + &i.PasswordHash, + &i.PasswordSalt, + &i.Roles, + &i.Buttons, + &i.CreatedAt, + &i.UpdatedAt, + ) + return &i, err +} + +const hasAdminUser = `-- name: HasAdminUser :one +SELECT COUNT(*) > 0 AS has_admin FROM users WHERE roles LIKE '%R_ADMIN%' OR roles LIKE '%R_SUPER%' +` + +func (q *Queries) HasAdminUser(ctx context.Context) (bool, error) { + row := q.db.QueryRowContext(ctx, hasAdminUser) + var has_admin bool + err := row.Scan(&has_admin) + return has_admin, err +} + +const listUsers = `-- name: ListUsers :many +SELECT id, user_name, email, password_hash, password_salt, roles, buttons, created_at, updated_at FROM users ORDER BY created_at DESC +` + +func (q *Queries) ListUsers(ctx context.Context) ([]*User, error) { + rows, err := q.db.QueryContext(ctx, listUsers) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*User{} + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.UserName, + &i.Email, + &i.PasswordHash, + &i.PasswordSalt, + &i.Roles, + &i.Buttons, + &i.CreatedAt, + &i.UpdatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const updateUserPasswordHash = `-- name: UpdateUserPasswordHash :exec +UPDATE users SET password_hash = ?, password_salt = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ? +` + +type UpdateUserPasswordHashParams struct { + PasswordHash string `json:"password_hash"` + PasswordSalt string `json:"password_salt"` + ID string `json:"id"` +} + +func (q *Queries) UpdateUserPasswordHash(ctx context.Context, arg *UpdateUserPasswordHashParams) error { + _, err := q.db.ExecContext(ctx, updateUserPasswordHash, arg.PasswordHash, arg.PasswordSalt, arg.ID) + return err +} + +const updateUserRoles = `-- name: UpdateUserRoles :exec +UPDATE users SET roles = ?, buttons = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ? +` + +type UpdateUserRolesParams struct { + Roles string `json:"roles"` + Buttons string `json:"buttons"` + ID string `json:"id"` +} + +func (q *Queries) UpdateUserRoles(ctx context.Context, arg *UpdateUserRolesParams) error { + _, err := q.db.ExecContext(ctx, updateUserRoles, arg.Roles, arg.Buttons, arg.ID) + return err +} diff --git a/backend/internal/storage/sqlc/query/events.sql b/backend/internal/storage/sqlc/query/events.sql new file mode 100644 index 0000000..4046f7d --- /dev/null +++ b/backend/internal/storage/sqlc/query/events.sql @@ -0,0 +1,60 @@ +-- name: CreateEvent :exec +INSERT INTO events (id, user_id, import_id, type, timestamp, direction, content_summary, content, meta) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); + +-- name: GetEvent :one +SELECT * FROM events WHERE id = ? AND user_id = ? LIMIT 1; + +-- name: ListEvents :many +SELECT * FROM events +WHERE user_id = ? + AND type = COALESCE(NULLIF(@type, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: SearchEvents :many +SELECT * FROM events +WHERE user_id = ? + AND (COALESCE(content_summary, '') || ' ' || content) LIKE '%' || @search_term || '%' + AND type = COALESCE(NULLIF(@type, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: TimelineEvents :many +SELECT * FROM events +WHERE user_id = ? + AND type = COALESCE(NULLIF(@type, ''), type) +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: TimelineEventsByParticipant :many +SELECT DISTINCT e.id, e.user_id, e.import_id, e.type, e.timestamp, e.direction, e.content_summary, e.content, e.meta, e.created_at +FROM events e +JOIN event_participants ep ON e.id = ep.event_id +JOIN identities i ON ep.identity_id = i.id +WHERE e.user_id = ? + AND e.type = COALESCE(NULLIF(@type, ''), e.type) + AND i.display_name LIKE '%' || @participant || '%' +ORDER BY e.timestamp DESC +LIMIT ? OFFSET ?; + +-- name: CountEventsByUser :one +SELECT COUNT(*) FROM events WHERE user_id = ?; + +-- name: CountEventsByUserAndType :many +SELECT type, COUNT(*) AS count FROM events WHERE user_id = ? GROUP BY type; + +-- name: DeleteEvent :exec +DELETE FROM events WHERE id = ? AND user_id = ?; + +-- name: DeleteEventsByImport :exec +DELETE FROM events WHERE import_id = ? AND user_id = ?; + +-- name: LastActivityTime :one +SELECT MAX(timestamp) FROM events WHERE user_id = ?; + +-- name: InsertEventParticipant :exec +INSERT OR IGNORE INTO event_participants (event_id, identity_id) VALUES (?, ?); + +-- name: GetEventParticipants :many +SELECT identity_id FROM event_participants WHERE event_id = ?; diff --git a/backend/internal/storage/sqlc/query/identities.sql b/backend/internal/storage/sqlc/query/identities.sql new file mode 100644 index 0000000..71eb76e --- /dev/null +++ b/backend/internal/storage/sqlc/query/identities.sql @@ -0,0 +1,29 @@ +-- name: CreateIdentity :exec +INSERT INTO identities (id, user_id, type, display_name, phones, emails, avatar, labels, meta) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); + +-- name: GetIdentity :one +SELECT * FROM identities WHERE id = ? AND user_id = ? LIMIT 1; + +-- name: ListIdentities :many +SELECT * FROM identities +WHERE user_id = ? + AND type = COALESCE(NULLIF(@type, ''), type) +ORDER BY display_name ASC; + +-- name: UpdateIdentity :exec +UPDATE identities +SET display_name = ?, phones = ?, emails = ?, avatar = ?, labels = ?, meta = ?, updated_at = CURRENT_TIMESTAMP +WHERE id = ? AND user_id = ?; + +-- name: DeleteIdentity :exec +DELETE FROM identities WHERE id = ? AND user_id = ?; + +-- name: CountIdentitiesByUser :one +SELECT COUNT(*) FROM identities WHERE user_id = ?; + +-- name: SearchIdentities :many +SELECT * FROM identities +WHERE user_id = ? + AND (display_name || ' ' || phones) LIKE '%' || @query || '%' +ORDER BY display_name ASC; diff --git a/backend/internal/storage/sqlc/query/imports.sql b/backend/internal/storage/sqlc/query/imports.sql new file mode 100644 index 0000000..0eae878 --- /dev/null +++ b/backend/internal/storage/sqlc/query/imports.sql @@ -0,0 +1,24 @@ +-- name: CreateImport :exec +INSERT INTO imports (id, user_id, schema_version, is_delta, source_path, event_count, identity_count, raw_json) +VALUES (?, ?, ?, ?, ?, ?, ?, ?); + +-- name: ListImportsByUser :many +SELECT id, user_id, schema_version, is_delta, imported_at, source_path, event_count, identity_count +FROM imports +WHERE user_id = ? +ORDER BY imported_at DESC; + +-- name: GetImport :one +SELECT * FROM imports WHERE id = ? AND user_id = ? LIMIT 1; + +-- name: ExportImport :one +SELECT raw_json FROM imports WHERE id = ? AND user_id = ? LIMIT 1; + +-- name: LatestImportID :one +SELECT id FROM imports WHERE user_id = ? ORDER BY imported_at DESC LIMIT 1; + +-- name: DeleteImport :exec +DELETE FROM imports WHERE id = ? AND user_id = ?; + +-- name: CountImportsByUser :one +SELECT COUNT(*) FROM imports WHERE user_id = ?; diff --git a/backend/internal/storage/sqlc/query/refresh_tokens.sql b/backend/internal/storage/sqlc/query/refresh_tokens.sql new file mode 100644 index 0000000..865b38f --- /dev/null +++ b/backend/internal/storage/sqlc/query/refresh_tokens.sql @@ -0,0 +1,24 @@ +-- name: SaveRefreshToken :exec +INSERT INTO refresh_tokens (id, user_id, token_hash, parent_id, expires_at) +VALUES (?, ?, ?, ?, ?); + +-- name: FindRefreshTokenByHash :one +SELECT * FROM refresh_tokens +WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > CURRENT_TIMESTAMP +LIMIT 1; + +-- name: ConsumeRefreshToken :one +UPDATE refresh_tokens +SET revoked_at = CURRENT_TIMESTAMP +WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > CURRENT_TIMESTAMP +RETURNING *; + +-- name: RevokeRefreshTokensByUser :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND revoked_at IS NULL; + +-- name: RevokeRefreshTokenFamily :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP +WHERE id = ? OR parent_id = ?; + +-- name: CleanupExpiredTokens :exec +DELETE FROM refresh_tokens WHERE expires_at < CURRENT_TIMESTAMP; diff --git a/backend/internal/storage/sqlc/query/relations.sql b/backend/internal/storage/sqlc/query/relations.sql new file mode 100644 index 0000000..579ddc1 --- /dev/null +++ b/backend/internal/storage/sqlc/query/relations.sql @@ -0,0 +1,11 @@ +-- name: CreateRelation :exec +INSERT INTO relations (id, event_id, type, target) VALUES (?, ?, ?, ?); + +-- name: ListRelationsByEvent :many +SELECT * FROM relations WHERE event_id = ?; + +-- name: ListRelationsByTarget :many +SELECT * FROM relations WHERE type = ? AND target = ?; + +-- name: DeleteRelationsByEvent :exec +DELETE FROM relations WHERE event_id = ?; diff --git a/backend/internal/storage/sqlc/query/sessions.sql b/backend/internal/storage/sqlc/query/sessions.sql new file mode 100644 index 0000000..76b0992 --- /dev/null +++ b/backend/internal/storage/sqlc/query/sessions.sql @@ -0,0 +1,18 @@ +-- name: CreateSession :exec +INSERT INTO sessions (id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent) +VALUES (?, ?, ?, ?, ?, ?, ?); + +-- name: GetSession :one +SELECT * FROM sessions WHERE id = ? AND revoked_at IS NULL LIMIT 1; + +-- name: ListSessionsByUser :many +SELECT * FROM sessions WHERE user_id = ? AND revoked_at IS NULL ORDER BY last_seen_at DESC; + +-- name: RevokeSession :exec +UPDATE sessions SET revoked_at = CURRENT_TIMESTAMP WHERE id = ?; + +-- name: RevokeOtherSessions :exec +UPDATE sessions SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND id != ? AND revoked_at IS NULL; + +-- name: UpdateSessionLastSeen :exec +UPDATE sessions SET last_seen_at = CURRENT_TIMESTAMP WHERE id = ?; diff --git a/backend/internal/storage/sqlc/query/setup.sql b/backend/internal/storage/sqlc/query/setup.sql new file mode 100644 index 0000000..e06507b --- /dev/null +++ b/backend/internal/storage/sqlc/query/setup.sql @@ -0,0 +1,22 @@ +-- name: GetSetupStatus :one +SELECT * FROM setup LIMIT 1; + +-- name: SaveSetup :exec +INSERT OR REPLACE INTO setup (id, version, initialized_at, usage_mode) +VALUES (?, ?, ?, ?); + +-- name: GetAuditLogs :many +SELECT * FROM audit_log +WHERE user_id = COALESCE(NULLIF(@user_id, ''), user_id) + AND action = COALESCE(NULLIF(@action, ''), action) +ORDER BY created_at DESC +LIMIT ? OFFSET ?; + +-- name: CreateAuditLog :exec +INSERT INTO audit_log (id, user_id, action, ip_address, user_agent, detail) +VALUES (?, ?, ?, ?, ?, ?); + +-- name: CountAuditLogs :one +SELECT COUNT(*) FROM audit_log +WHERE user_id = COALESCE(NULLIF(@user_id, ''), user_id) + AND action = COALESCE(NULLIF(@action, ''), action); diff --git a/backend/internal/storage/sqlc/query/users.sql b/backend/internal/storage/sqlc/query/users.sql new file mode 100644 index 0000000..13b8cd6 --- /dev/null +++ b/backend/internal/storage/sqlc/query/users.sql @@ -0,0 +1,24 @@ +-- name: CreateUser :exec +INSERT INTO users (id, user_name, email, password_hash, password_salt, roles, buttons) +VALUES (?, ?, ?, ?, ?, ?, ?); + +-- name: FindUserByUserName :one +SELECT * FROM users WHERE user_name = ? LIMIT 1; + +-- name: GetUser :one +SELECT * FROM users WHERE id = ? LIMIT 1; + +-- name: UpdateUserPasswordHash :exec +UPDATE users SET password_hash = ?, password_salt = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?; + +-- name: HasAdminUser :one +SELECT COUNT(*) > 0 AS has_admin FROM users WHERE roles LIKE '%R_ADMIN%' OR roles LIKE '%R_SUPER%'; + +-- name: ListUsers :many +SELECT * FROM users ORDER BY created_at DESC; + +-- name: UpdateUserRoles :exec +UPDATE users SET roles = ?, buttons = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?; + +-- name: DeleteUser :exec +DELETE FROM users WHERE id = ?; diff --git a/backend/internal/storage/sqlc/sqlc.yaml b/backend/internal/storage/sqlc/sqlc.yaml new file mode 100644 index 0000000..c20d5ff --- /dev/null +++ b/backend/internal/storage/sqlc/sqlc.yaml @@ -0,0 +1,16 @@ +version: "2" +sql: + - engine: "sqlite" + schema: "../migrations/sqlite" + queries: "query" + gen: + go: + package: "sqlcgen" + out: "gen" + emit_json_tags: true + emit_empty_slices: true + emit_result_struct_pointers: true + emit_params_struct_pointers: true + overrides: + - db_type: "DATETIME" + go_type: "time.Time" diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go index 134edc1..37fdad3 100644 --- a/backend/internal/storage/sqlite.go +++ b/backend/internal/storage/sqlite.go @@ -1,5 +1,498 @@ package storage +import ( + "context" + "database/sql" + _ "embed" + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" + + _ "github.com/mattn/go-sqlite3" +) + +//go:embed migrations/sqlite/0001_initial.up.sql +var sqliteMigration001 string + +type sqliteProvider struct { + db *sql.DB + q *sqlc.Queries + dsn string +} + func NewSQLiteProvider(dsn string) (Provider, error) { - return newFileStore(dsn, "filestore/sqlite-adapter"), nil + db, err := sql.Open("sqlite3", dsn+"?_journal_mode=WAL&_busy_timeout=5000&_foreign_keys=ON") + if err != nil { + return nil, fmt.Errorf("open sqlite: %w", err) + } + db.SetMaxOpenConns(1) + return &sqliteProvider{ + db: db, + q: sqlc.New(db), + dsn: dsn, + }, nil +} + +func (s *sqliteProvider) Name() string { return "sqlite" } + +func (s *sqliteProvider) Close() error { return s.db.Close() } + +func (s *sqliteProvider) Init(ctx context.Context) error { + // 运行迁移 + if _, err := s.db.ExecContext(ctx, sqliteMigration001); err != nil { + return fmt.Errorf("run migration 0001: %w", err) + } + return nil +} + +// ==================== Import ==================== + +func (s *sqliteProvider) Import(ctx context.Context, userID, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { + tx, err := s.db.BeginTx(ctx, nil) + if err != nil { + return "", err + } + defer tx.Rollback() + + qtx := s.q.WithTx(tx) + + importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) + if err := qtx.CreateImport(ctx, &sqlc.CreateImportParams{ + ID: importID, + UserID: userID, + SchemaVersion: export.Version, + IsDelta: false, + SourcePath: sql.NullString{String: sourcePath, Valid: sourcePath != ""}, + EventCount: int64(len(export.Events)), + IdentityCount: int64(len(export.Identities)), + RawJson: string(raw), + }); err != nil { + return "", fmt.Errorf("create import: %w", err) + } + + for _, identity := range export.Identities { + phones, _ := json.Marshal(identity.Phones) + emails, _ := json.Marshal(identity.Emails) + labels, _ := json.Marshal(identity.Labels) + meta, _ := json.Marshal(identity.Meta) + var avatar sql.NullString + if identity.Avatar != nil { + avatar = sql.NullString{String: *identity.Avatar, Valid: true} + } + if err := qtx.CreateIdentity(ctx, &sqlc.CreateIdentityParams{ + ID: identity.ID, + UserID: userID, + Type: identity.Type, + DisplayName: identity.DisplayName, + Phones: string(phones), + Emails: string(emails), + Avatar: avatar, + Labels: string(labels), + Meta: string(meta), + }); err != nil { + return "", fmt.Errorf("create identity %s: %w", identity.ID, err) + } + } + + for _, event := range export.Events { + contentJSON, _ := json.Marshal(event.Content) + metaJSON, _ := json.Marshal(event.Meta) + ts, _ := time.Parse(time.RFC3339, event.Timestamp) + summary := summarizeEvent(event) + + if err := qtx.CreateEvent(ctx, &sqlc.CreateEventParams{ + ID: event.ID, + UserID: userID, + ImportID: sql.NullString{String: importID, Valid: true}, + Type: event.Type, + Timestamp: ts, + Direction: event.Direction, + ContentSummary: sql.NullString{String: summary, Valid: summary != ""}, + Content: string(contentJSON), + Meta: string(metaJSON), + }); err != nil { + return "", fmt.Errorf("create event %s: %w", event.ID, err) + } + + for _, participant := range event.Participants { + if err := qtx.InsertEventParticipant(ctx, &sqlc.InsertEventParticipantParams{ + EventID: event.ID, + IdentityID: participant, + }); err != nil { + return "", fmt.Errorf("insert participant %s: %w", participant, err) + } + } + + for _, rel := range event.Relations { + if err := qtx.CreateRelation(ctx, &sqlc.CreateRelationParams{ + ID: fmt.Sprintf("rel_%s_%s_%d", event.ID, rel.Type, time.Now().UnixNano()), + EventID: event.ID, + Type: rel.Type, + Target: rel.Target, + }); err != nil { + return "", fmt.Errorf("create relation: %w", err) + } + } + } + + return importID, tx.Commit() +} + +func (s *sqliteProvider) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { + rows, err := s.q.ListImportsByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]ImportSummary, 0, len(rows)) + for _, r := range rows { + items = append(items, ImportSummary{ + ID: r.ID, + UserID: r.UserID, + SchemaVersion: r.SchemaVersion, + ImportedAt: r.ImportedAt, + SourcePath: r.SourcePath.String, + EventCount: int(r.EventCount), + IdentityCount: int(r.IdentityCount), + }) + } + return items, nil +} + +func (s *sqliteProvider) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { + if importID == "" { + var err error + importID, err = s.q.LatestImportID(ctx, userID) + if err != nil { + return nil, fmt.Errorf("no imports found") + } + } + raw, err := s.q.ExportImport(ctx, &sqlc.ExportImportParams{ID: importID, UserID: userID}) + if err != nil { + return nil, fmt.Errorf("import not found: %s", importID) + } + return []byte(raw), nil +} + +func (s *sqliteProvider) LatestImportID(ctx context.Context, userID string) (string, error) { + id, err := s.q.LatestImportID(ctx, userID) + if err != nil { + return "", fmt.Errorf("no imports found") + } + return id, nil +} + +// ==================== Events ==================== + +func (s *sqliteProvider) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { + row, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: id, UserID: userID}) + if err != nil { + return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) + } + return s.eventToTimelineItem(ctx, row) +} + +func (s *sqliteProvider) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + rows, err := s.q.ListEvents(ctx, &sqlc.ListEventsParams{ + UserID: params.UserID, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +func (s *sqliteProvider) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + if params.Keyword == "" { + return nil, nil + } + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + rows, err := s.q.SearchEvents(ctx, &sqlc.SearchEventsParams{ + UserID: params.UserID, + SearchTerm: sql.NullString{String: params.Keyword, Valid: true}, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +func (s *sqliteProvider) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + + if params.Participant != "" { + rows, err := s.q.TimelineEventsByParticipant(ctx, &sqlc.TimelineEventsByParticipantParams{ + UserID: params.UserID, + Type: typeFilter, + Participant: sql.NullString{String: params.Participant, Valid: true}, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) + } + + rows, err := s.q.TimelineEvents(ctx, &sqlc.TimelineEventsParams{ + UserID: params.UserID, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +// ==================== Identities ==================== + +func (s *sqliteProvider) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { + rows, err := s.q.ListIdentities(ctx, &sqlc.ListIdentitiesParams{UserID: userID, Type: ""}) + if err != nil { + return nil, err + } + items := make([]msglayer.Identity, 0, len(rows)) + for _, r := range rows { + items = append(items, s.rowToIdentity(r)) + } + return items, nil +} + +func (s *sqliteProvider) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { + row, err := s.q.GetIdentity(ctx, &sqlc.GetIdentityParams{ID: id, UserID: userID}) + if err != nil { + return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) + } + return s.rowToIdentity(row), nil +} + +func (s *sqliteProvider) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { + relations, err := s.q.ListRelationsByTarget(ctx, &sqlc.ListRelationsByTargetParams{ + Type: "same_thread", + Target: threadID, + }) + if err != nil { + return nil, err + } + var items []msglayer.TimelineItem + for _, rel := range relations { + event, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: rel.EventID, UserID: userID}) + if err != nil { + continue + } + item, err := s.eventToTimelineItem(ctx, event) + if err != nil { + continue + } + items = append(items, item) + } + return items, nil +} + +// ==================== Users ==================== + +func (s *sqliteProvider) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { + roles, _ := json.Marshal(user.Roles) + buttons, _ := json.Marshal(user.Buttons) + err := s.q.CreateUser(ctx, &sqlc.CreateUserParams{ + ID: user.ID, + UserName: user.UserName, + Email: sql.NullString{String: user.Email, Valid: user.Email != ""}, + PasswordHash: user.PasswordHash, + PasswordSalt: user.PasswordSalt, + Roles: string(roles), + Buttons: string(buttons), + }) + if err != nil { + if strings.Contains(err.Error(), "UNIQUE") { + return UserRecord{}, fmt.Errorf("username already exists") + } + return UserRecord{}, err + } + return s.GetUser(ctx, user.ID) +} + +func (s *sqliteProvider) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { + row, err := s.q.FindUserByUserName(ctx, userName) + if err != nil { + return UserRecord{}, fmt.Errorf("user not found") + } + return s.rowToUser(row), nil +} + +func (s *sqliteProvider) GetUser(ctx context.Context, userID string) (UserRecord, error) { + row, err := s.q.GetUser(ctx, userID) + if err != nil { + return UserRecord{}, fmt.Errorf("user not found") + } + return s.rowToUser(row), nil +} + +// ==================== Refresh Tokens ==================== + +func (s *sqliteProvider) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { + return s.q.SaveRefreshToken(ctx, &sqlc.SaveRefreshTokenParams{ + ID: token.ID, + UserID: token.UserID, + TokenHash: token.TokenHash, + ParentID: sql.NullString{}, + ExpiresAt: token.ExpiresAt, + }) +} + +func (s *sqliteProvider) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + row, err := s.q.ConsumeRefreshToken(ctx, tokenHash) + if err != nil { + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found or expired") + } + return RefreshTokenRecord{ + ID: row.ID, + UserID: row.UserID, + TokenHash: row.TokenHash, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + RevokedAt: row.RevokedAt.Time, + }, nil +} + +// ==================== Setup ==================== + +func (s *sqliteProvider) GetSetupStatus(ctx context.Context) (SetupStatus, error) { + row, err := s.q.GetSetupStatus(ctx) + if err != nil { + hasAdmin, _ := s.q.HasAdminUser(ctx) + return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil + } + return SetupStatus{ + Initialized: true, + Version: row.Version, + DatabaseType: "sqlite", + }, nil +} + +func (s *sqliteProvider) SaveSetup(ctx context.Context, setup SetupRecord) error { + ts, _ := time.Parse(time.RFC3339, setup.InitializedAt) + if ts.IsZero() { + ts = time.Now().UTC() + } + return s.q.SaveSetup(ctx, &sqlc.SaveSetupParams{ + ID: setup.ID, + Version: setup.Version, + InitializedAt: ts, + UsageMode: sql.NullString{String: setup.UsageMode, Valid: setup.UsageMode != ""}, + }) +} + +func (s *sqliteProvider) HasAdminUser(ctx context.Context) (bool, error) { + return s.q.HasAdminUser(ctx) +} + +func (s *sqliteProvider) UpdateUserPasswordHash(ctx context.Context, userID, newHash string) error { + return s.q.UpdateUserPasswordHash(ctx, &sqlc.UpdateUserPasswordHashParams{ + PasswordHash: newHash, + PasswordSalt: "", + ID: userID, + }) +} + +// ==================== Type conversions ==================== + +func (s *sqliteProvider) rowToUser(row *sqlc.User) UserRecord { + var roles, buttons []string + json.Unmarshal([]byte(row.Roles), &roles) + json.Unmarshal([]byte(row.Buttons), &buttons) + return UserRecord{ + ID: row.ID, + UserName: row.UserName, + Email: row.Email.String, + PasswordHash: row.PasswordHash, + PasswordSalt: row.PasswordSalt, + Roles: roles, + Buttons: buttons, + CreatedAt: row.CreatedAt, + UpdatedAt: row.UpdatedAt, + } +} + +func (s *sqliteProvider) rowToIdentity(row *sqlc.Identity) msglayer.Identity { + var phones, emails, labels []string + var meta map[string]any + json.Unmarshal([]byte(row.Phones), &phones) + json.Unmarshal([]byte(row.Emails), &emails) + json.Unmarshal([]byte(row.Labels), &labels) + json.Unmarshal([]byte(row.Meta), &meta) + var avatar *string + if row.Avatar.Valid { + avatar = &row.Avatar.String + } + return msglayer.Identity{ + ID: row.ID, + Type: row.Type, + DisplayName: row.DisplayName, + Phones: phones, + Emails: emails, + Avatar: avatar, + Labels: labels, + Meta: meta, + } +} + +func (s *sqliteProvider) eventToTimelineItem(ctx context.Context, row *sqlc.Event) (msglayer.TimelineItem, error) { + participants, _ := s.q.GetEventParticipants(ctx, row.ID) + var meta map[string]any + json.Unmarshal([]byte(row.Meta), &meta) + return msglayer.TimelineItem{ + EventID: row.ID, + Type: row.Type, + Timestamp: row.Timestamp.UTC().Format(time.RFC3339), + Direction: row.Direction, + ContentSummary: row.ContentSummary.String, + Participants: participants, + Meta: meta, + }, nil +} + +func (s *sqliteProvider) eventsToTimelineItems(ctx context.Context, rows []*sqlc.Event) ([]msglayer.TimelineItem, error) { + items := make([]msglayer.TimelineItem, 0, len(rows)) + for _, row := range rows { + item, err := s.eventToTimelineItem(ctx, row) + if err != nil { + return nil, err + } + items = append(items, item) + } + return items, nil } diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md index b1f1dba..cb06663 100644 --- a/docs/engineering-standards.md +++ b/docs/engineering-standards.md @@ -54,6 +54,7 @@ - Web UI 以 `references/art-design-pro` 为模板基线,`references/memos/web` 仅作产品组织参考。 - 新页面必须遵循 `docs/web-dashboard-guidelines.md`,满足中英 i18n、dark mode、主题变量、ECharts 配色、布局密度和 Element Plus 规范。 - `web/.env.production` 默认使用同源 API,不得恢复到 mock 服务作为生产默认值。 +- Web 默认权限模式为 frontend:`roles` 用于路由访问,`buttons` 用于按钮能力。backend 动态菜单属于未来商业化或多租户场景,不作为当前默认架构。 ## Docker 与部署 diff --git a/docs/web-dashboard-guidelines.md b/docs/web-dashboard-guidelines.md index f5e7692..98d84f5 100644 --- a/docs/web-dashboard-guidelines.md +++ b/docs/web-dashboard-guidelines.md @@ -13,6 +13,14 @@ Commory Web 以 `references/art-design-pro` 为 UI 模板基线,以 `reference - 用户可见文案必须进入 `web/src/locales/langs/zh.json` 和 `web/src/locales/langs/en.json`。 - Vue 模板使用 `$t(...)`,composition API 中使用 `useI18n()`。 - 不在 `.vue`、`.ts` 中硬编码中文或英文用户文案。 +- 路由 `meta.title` 应使用 i18n key;`formatMenuTitle()` 负责把 key 转成当前语言文案,缺失 key 会在开发环境提示。 + +## 权限模式 + +- 当前产品默认保持 `VITE_ACCESS_MODE=frontend`;除非出现多租户、运营后台动态配置菜单或大量角色差异,不切换到 backend 菜单模式。 +- 路由 `meta.roles` 控制页面访问;登录用户的 `buttons` 权限码控制按钮级能力。 +- 前端模式下按钮显示优先使用 `useAuth().hasAuth()`,它会响应式读取 `userStore.info.buttons`。 +- `v-roles` 继续用于角色级 DOM 显示;`v-auth` 仅适用于 backend 菜单返回的 `meta.authList`,不要在当前 frontend 模式下把它作为按钮权限主路径。 ## 暗色模式与主题 diff --git a/web/src/hooks/core/useAuth.ts b/web/src/hooks/core/useAuth.ts index 283b859..65ad2b8 100644 --- a/web/src/hooks/core/useAuth.ts +++ b/web/src/hooks/core/useAuth.ts @@ -31,6 +31,7 @@ */ import { useRoute } from 'vue-router' +import { computed } from 'vue' import { storeToRefs } from 'pinia' import { useUserStore } from '@/store/modules/user' import { useAppMode } from '@/hooks/core/useAppMode' @@ -45,13 +46,10 @@ export const useAuth = () => { const { isFrontendMode } = useAppMode() const { info } = storeToRefs(userStore) - // 前端按钮权限(例如:['add', 'edit']) - const frontendAuthList = info.value?.buttons ?? [] - // 后端路由 meta 配置的权限列表(例如:[{ authMark: 'add' }]) - const backendAuthList: AuthItem[] = Array.isArray(route.meta.authList) - ? (route.meta.authList as AuthItem[]) - : [] + const backendAuthList = computed(() => + Array.isArray(route.meta.authList) ? (route.meta.authList as AuthItem[]) : [] + ) /** * 检查是否拥有某权限标识(前后端模式通用) @@ -61,11 +59,11 @@ export const useAuth = () => { const hasAuth = (auth: string): boolean => { // 前端模式 if (isFrontendMode.value) { - return frontendAuthList.includes(auth) + return (info.value?.buttons ?? []).includes(auth) } // 后端模式 - return backendAuthList.some((item) => item?.authMark === auth) + return backendAuthList.value.some((item) => item?.authMark === auth) } return { diff --git a/web/src/hooks/core/useChart.ts b/web/src/hooks/core/useChart.ts index 29ba1d1..7abb46d 100644 --- a/web/src/hooks/core/useChart.ts +++ b/web/src/hooks/core/useChart.ts @@ -53,6 +53,7 @@ import { echarts, type EChartsOption } from '@/plugins/echarts' import { storeToRefs } from 'pinia' import { useSettingStore } from '@/store/modules/setting' import { getCssVar } from '@/utils/ui' +import { $t } from '@/locales' import type { BaseChartProps, ChartThemeConfig, UseChartOptions } from '@/types/component/chart' // 图表主题配置 @@ -468,7 +469,7 @@ export function useChart(options: UseChartOptions = {}) { background: transparent; z-index: 10; ` - emptyStateDiv.innerHTML = `暂无数据` + emptyStateDiv.innerHTML = `${$t('common.noData')}` // 确保父容器有相对定位 if ( diff --git a/web/src/locales/langs/en.json b/web/src/locales/langs/en.json index deea47f..d912f68 100644 --- a/web/src/locales/langs/en.json +++ b/web/src/locales/langs/en.json @@ -36,7 +36,35 @@ "tips": "Prompt", "cancel": "Cancel", "confirm": "Confirm", - "logOutTips": "Do you want to log out?" + "logOutTips": "Do you want to log out?", + "save": "Save", + "edit": "Edit", + "add": "Add", + "delete": "Delete", + "view": "View", + "print": "Print", + "back": "Back", + "search": "Search", + "reset": "Reset", + "submit": "Submit", + "success": "Success", + "failed": "Failed", + "enabled": "Enabled", + "disabled": "Disabled", + "noData": "No data", + "all": "All", + "actions": "Actions", + "status": "Status", + "createTime": "Created At", + "unknown": "Unknown", + "unknownError": "Unknown error", + "storageError": "Local data looks invalid. Please log in again to restore the system.", + "systemUpgradedPrefix": "The system has been upgraded to", + "systemUpgradedSuffix": ". This update includes the following improvements:", + "upgradeReLogin": "Upgrade complete. Please log in again to continue.", + "invalidHexColor": "Invalid hex color value", + "invalidRgbColor": "Invalid RGB color value", + "selected": "{count} selected" }, "search": { "placeholder": "Search page", @@ -48,20 +76,11 @@ "setting": { "menuType": { "title": "Menu Layout", - "list": [ - "Vertical", - "Horizontal", - "Mixed", - "Dual" - ] + "list": ["Vertical", "Horizontal", "Mixed", "Dual"] }, "theme": { "title": "Theme Style", - "list": [ - "Light", - "Dark", - "System" - ] + "list": ["Light", "Dark", "System"] }, "menu": { "title": "Menu Style" @@ -71,17 +90,11 @@ }, "box": { "title": "Box Style", - "list": [ - "Border", - "Shadow" - ] + "list": ["Border", "Shadow"] }, "container": { "title": "Container Width", - "list": [ - "Full", - "Boxed" - ] + "list": ["Full", "Boxed"] }, "basics": { "title": "Basic Config", @@ -127,14 +140,8 @@ "notice": { "title": "Notice", "btnRead": "Mark as read", - "bar": [ - "Notice", - "Message", - "Todo" - ], - "text": [ - "No" - ], + "bar": ["Notice", "Message", "Todo"], + "text": ["No"], "viewAll": "View all" }, "worktab": { @@ -182,7 +189,8 @@ "subTitle": "Enter your email to reset your password", "placeholder": "Please enter your email", "submitBtnText": "Submit", - "backBtnText": "Back" + "backBtnText": "Back", + "accountLabel": "Account" }, "register": { "title": "Create account", @@ -204,7 +212,10 @@ "privacyPolicy": "Privacy policy", "submitBtnText": "Register", "hasAccount": "Already have an account?", - "toLogin": "To login" + "toLogin": "To login", + "success": { + "message": "Registration successful" + } }, "lockScreen": { "pwdError": "Password error", @@ -269,6 +280,9 @@ "role": "Role Manage", "userCenter": "User Center", "menu": "Menu Manage" + }, + "setup": { + "title": "System Setup" } }, "table": { @@ -298,5 +312,391 @@ "zebra": "Zebra", "border": "Border", "headerBackground": "Header BG" + }, + "setup": { + "brand": "Commory", + "title": "Initialize Commory", + "subtitle": "Complete the first-run setup for your local-first communication memory.", + "eyebrow": "Local-first · single-port deployment", + "panelTitle": "Setup Wizard", + "panelSubtitle": "Confirm storage, administrator credentials, and usage mode step by step.", + "loadingStatus": "Checking setup status...", + "apiUnavailable": "Setup API is temporarily unavailable. You can continue filling the form and submit later.", + "steps": { + "database": "Database", + "admin": "Administrator", + "mode": "Usage Mode", + "finish": "Finish" + }, + "database": { + "title": "Database Check", + "desc": "Confirm current storage and connection status.", + "type": "SQLite Database", + "hint": "A lightweight file database for personal use and small deployments.", + "ready": "Storage is ready" + }, + "admin": { + "title": "Administrator Account", + "desc": "Set the initial account used to manage Commory.", + "existsTitle": "Administrator already exists", + "existsDesc": "An administrator account already exists. You can continue to the next step.", + "userName": "Username", + "userNamePlaceholder": "Enter administrator username", + "password": "Password", + "passwordPlaceholder": "At least 8 characters", + "confirmPassword": "Confirm Password", + "confirmPasswordPlaceholder": "Enter password again", + "existing": "Exists", + "notSet": "Not set" + }, + "mode": { + "title": "Usage Mode", + "desc": "Choose the default experience after setup.", + "personal": "Personal Mode", + "personalDesc": "For personal use, focused on backup, search, and timeline.", + "family": "Family Mode", + "familyDesc": "For family sharing, preserving room for multi-user expansion." + }, + "finish": { + "title": "Finish Setup", + "desc": "Confirm settings and write the initialization state.", + "database": "Database", + "admin": "Administrator", + "usageMode": "Usage Mode" + }, + "actions": { + "prev": "Previous", + "next": "Next", + "finish": "Finish Setup", + "login": "Go to Login" + }, + "validation": { + "userNameRequired": "Please enter administrator username", + "passwordRequired": "Please enter password", + "passwordLength": "Password must be at least 8 characters", + "confirmPasswordRequired": "Please confirm password", + "passwordMismatch": "Passwords do not match" + }, + "message": { + "success": "Setup completed. Redirecting to login." + } + }, + "dashboardPage": { + "console": { + "title": "MsgLayer Archive Overview", + "subtitle": "Review imports, events, identities, and recent archive activity.", + "openImports": "Open Imports", + "recentImports": "Recent Imports", + "recentEvents": "Recent Events", + "viewTimeline": "View Timeline", + "emptyEvents": "No recent events", + "itemCount": "{count} items", + "cards": { + "imports": "Imports", + "events": "Events", + "identities": "Identities", + "lastActivity": "Last Activity" + }, + "hints": { + "imports": "Validated MsgLayer payloads", + "events": "Timeline records indexed", + "identities": "Contacts and devices discovered", + "lastActivity": "Most recent event timestamp" + }, + "noImports": "No imports yet" + }, + "timeline": { + "searchPlaceholder": "Search timeline text", + "typePlaceholder": "Event type", + "apply": "Apply", + "eventTypes": { + "all": "All", + "sms": "SMS", + "call": "Call", + "voice": "Voice", + "contact_snapshot": "Contact Snapshot" + } + }, + "search": { + "placeholder": "Search SMS text, transcript, or summary", + "title": "Results", + "matches": "{count} matches" + }, + "contacts": { + "title": "Contacts", + "filterPlaceholder": "Filter contacts", + "loadActivity": "Load Activity", + "phones": "Phones", + "emails": "Emails", + "source": "Source", + "empty": "Select a contact to inspect its MsgLayer identity and recent activity." + }, + "imports": { + "chooseFile": "Choose MsgLayer File", + "noFile": "No file selected", + "validate": "Validate", + "import": "Import", + "history": "Import History", + "count": "{count} imports", + "validationPassed": "Validation passed.", + "validationFailed": "Validation failed.", + "imported": "Imported {id} ({version}).", + "export": "Export" + }, + "columns": { + "import": "Import", + "version": "Version", + "events": "Events", + "identities": "Identities", + "importedAt": "Imported At", + "timestamp": "Timestamp", + "type": "Type", + "direction": "Direction", + "summary": "Summary", + "participants": "Participants", + "source": "Source", + "action": "Action" + } + }, + "resultPage": { + "success": { + "title": "Operation Successful", + "message": "The task is complete and the result has been written to Commory.", + "content": "You can review the result or return to adjust the configuration." + }, + "fail": { + "title": "Operation Failed", + "message": "Check the following information and try again.", + "intro": "The operation was not completed:", + "accountFrozen": "Current account status is unavailable", + "notEligible": "Current role does not have the required permission" + }, + "actions": { + "backEdit": "Back to Edit", + "view": "View", + "print": "Print" + } + }, + "systemPage": { + "user": { + "add": "Add User", + "logoutTitle": "Disable User", + "logoutConfirm": "Are you sure you want to disable this user?", + "logoutSuccess": "User disabled", + "columns": { + "index": "Index", + "userName": "Username", + "gender": "Gender", + "phone": "Phone", + "status": "Status", + "createTime": "Created At", + "operation": "Actions" + }, + "status": { + "online": "Online", + "offline": "Offline", + "abnormal": "Abnormal", + "cancelled": "Disabled", + "unknown": "Unknown" + }, + "search": { + "userName": "Username", + "userNamePlaceholder": "Enter username", + "phone": "Phone", + "phonePlaceholder": "Enter phone number", + "email": "Email", + "emailPlaceholder": "Enter email", + "status": "Status", + "statusPlaceholder": "Select status", + "gender": "Gender" + }, + "dialog": { + "addTitle": "Add User", + "editTitle": "Edit User", + "phoneInvalid": "Please enter a valid phone number", + "addSuccess": "Added successfully", + "updateSuccess": "Updated successfully", + "role": "Role" + } + }, + "role": { + "add": "Add Role", + "deleteTitle": "Delete Confirmation", + "deleteConfirm": "Delete role “{name}”? This action cannot be undone.", + "deleteSuccess": "Deleted successfully", + "deleteCancel": "Delete cancelled", + "columns": { + "id": "Role ID", + "name": "Role Name", + "code": "Role Code", + "description": "Description", + "status": "Role Status", + "menuPermission": "Menu Permission", + "editRole": "Edit Role", + "deleteRole": "Delete Role" + }, + "search": { + "name": "Role Name", + "namePlaceholder": "Enter role name", + "code": "Role Code", + "codePlaceholder": "Enter role code", + "description": "Description", + "descriptionPlaceholder": "Enter role description", + "status": "Role Status", + "statusPlaceholder": "Select status", + "date": "Created At", + "datePlaceholder": "Select date range", + "startDate": "Start date", + "endDate": "End date", + "rangeSeparator": "to", + "today": "Today", + "week": "Last 7 days", + "month": "Last 30 days" + }, + "dialog": { + "addTitle": "Add Role", + "editTitle": "Edit Role", + "enabled": "Enabled", + "addSuccess": "Added successfully", + "editSuccess": "Updated successfully" + }, + "permission": { + "title": "Menu Permission", + "output": "Output Selection", + "collapse": "Collapse All", + "expand": "Expand All", + "selectAll": "Select All", + "unselectAll": "Unselect All", + "save": "Save", + "saveSuccess": "Permissions saved", + "outputSuccess": "Selection output to console. {count} nodes selected." + } + }, + "menu": { + "add": "Add Menu", + "collapse": "Collapse", + "expand": "Expand", + "filters": { + "name": "Menu Name", + "route": "Route Path" + }, + "columns": { + "name": "Menu Name", + "type": "Menu Type", + "route": "Route", + "auth": "Permission Code", + "editTime": "Edited At", + "status": "Status", + "operation": "Actions" + }, + "type": { + "button": "Button", + "directory": "Directory", + "iframe": "Iframe", + "menu": "Menu", + "external": "External", + "unknown": "Unknown" + }, + "authCount": "{count} permission codes", + "addAuth": "Add Permission", + "deleteMenuConfirm": "Delete this menu? This action cannot be undone.", + "deleteAuthConfirm": "Delete this permission? This action cannot be undone.", + "deleteSuccess": "Deleted successfully", + "deleteFailed": "Delete failed", + "dialog": { + "menu": "Menu", + "button": "Button", + "newMenu": "New Menu", + "editMenu": "Edit Menu", + "newButton": "New Button", + "editButton": "Edit Button", + "menuType": "Menu Type", + "name": "Menu Name", + "namePlaceholder": "Menu name", + "path": "Route Path", + "pathTip": "Top-level menus use an absolute path starting with /, such as /dashboard. Nested menus use relative paths such as console or user.", + "pathPlaceholder": "e.g. /dashboard or console", + "label": "Permission Code", + "labelPlaceholder": "e.g. User", + "component": "Component Path", + "componentTip": "Top-level parent menu: /index/index. Page component: /system/user. Directory menu: leave empty.", + "componentPlaceholder": "e.g. /system/user or empty", + "icon": "Icon", + "iconPlaceholder": "e.g. ri:user-line", + "roles": "Role Access", + "rolesTip": "Frontend mode only: configure role codes such as R_SUPER or R_ADMIN. Backend mode does not require this.", + "rolesPlaceholder": "Enter role code and press Enter, e.g. R_SUPER", + "sort": "Menu Sort", + "link": "External Link", + "linkPlaceholder": "e.g. https://www.example.com", + "badge": "Text Badge", + "badgePlaceholder": "e.g. New or Hot", + "activePath": "Active Path", + "activePathTip": "Used by hidden detail pages to highlight a parent menu, such as highlighting User Management on a user detail page.", + "activePathPlaceholder": "e.g. /system/user", + "isEnable": "Enabled", + "keepAlive": "Keep Alive", + "isHide": "Hide Menu", + "isIframe": "Iframe", + "showBadge": "Show Badge", + "fixedTab": "Fixed Tab", + "isHideTab": "Hide Tab", + "isFullPage": "Full Page", + "authName": "Permission Name", + "authNamePlaceholder": "e.g. Add, Edit, Delete", + "authLabel": "Permission Code", + "authLabelPlaceholder": "e.g. add, edit, delete", + "authSort": "Permission Sort", + "submitSuccess": "{action} successfully", + "validateFailed": "Form validation failed. Please check your input." + } + } + }, + "userCenter": { + "profile": "User Profile", + "tagline": "Focused on local-first communication memory management", + "role": "Commory Administrator", + "location": "Local deployment", + "team": "Commory Workspace", + "tags": "Tags", + "tagList": ["Local-first", "Archive", "Privacy", "MsgLayer", "Searchable", "Exportable"], + "basicSettings": "Basic Settings", + "changePassword": "Change Password", + "realName": "Name", + "gender": "Gender", + "nickname": "Nickname", + "email": "Email", + "mobile": "Phone", + "address": "Address", + "bio": "Bio", + "currentPassword": "Current Password", + "newPassword": "New Password", + "confirmPassword": "Confirm New Password", + "male": "Male", + "female": "Female", + "edit": "Edit", + "save": "Save", + "validation": { + "realName": "Please enter name", + "nickname": "Please enter nickname", + "length": "Length must be 2 to 50 characters", + "email": "Please enter email", + "mobile": "Please enter phone number", + "address": "Please enter address", + "gender": "Please select gender" + }, + "greetings": { + "early": "It is late. Get some rest.", + "morning": "Good morning", + "lateMorning": "Good morning", + "noon": "Good noon", + "afternoon": "Good afternoon", + "evening": "Good evening" + } + }, + "permission": { + "frontendMode": "Frontend permission mode", + "rolesHint": "Route roles control page access; user buttons control button visibility.", + "authHint": "v-auth is only for backend menu authList. In current frontend mode, prefer hasAuth." } } diff --git a/web/src/locales/langs/zh.json b/web/src/locales/langs/zh.json index 5ca6383..939a42d 100644 --- a/web/src/locales/langs/zh.json +++ b/web/src/locales/langs/zh.json @@ -36,7 +36,35 @@ "tips": "提示", "cancel": "取消", "confirm": "确定", - "logOutTips": "您是否要退出登录?" + "logOutTips": "您是否要退出登录?", + "save": "保存", + "edit": "编辑", + "add": "新增", + "delete": "删除", + "view": "查看", + "print": "打印", + "back": "返回", + "search": "搜索", + "reset": "重置", + "submit": "提交", + "success": "成功", + "failed": "失败", + "enabled": "启用", + "disabled": "禁用", + "noData": "暂无数据", + "all": "全部", + "actions": "操作", + "status": "状态", + "createTime": "创建日期", + "unknown": "未知", + "unknownError": "未知错误", + "storageError": "系统检测到本地数据异常,请重新登录系统恢复使用!", + "systemUpgradedPrefix": "系统已升级到", + "systemUpgradedSuffix": "版本,此次更新带来了以下改进:", + "upgradeReLogin": "升级完成,请重新登录后继续使用。", + "invalidHexColor": "输入错误的 hex 颜色值", + "invalidRgbColor": "输入错误的 RGB 颜色值", + "selected": "已选择 {count} 项" }, "search": { "placeholder": "搜索页面", @@ -48,20 +76,11 @@ "setting": { "menuType": { "title": "菜单布局", - "list": [ - "垂直", - "水平", - "混合", - "双列" - ] + "list": ["垂直", "水平", "混合", "双列"] }, "theme": { "title": "主题风格", - "list": [ - "浅色", - "深色", - "系统" - ] + "list": ["浅色", "深色", "系统"] }, "menu": { "title": "菜单风格" @@ -71,17 +90,11 @@ }, "box": { "title": "盒子样式", - "list": [ - "边框", - "阴影" - ] + "list": ["边框", "阴影"] }, "container": { "title": "容器宽度", - "list": [ - "铺满", - "定宽" - ] + "list": ["铺满", "定宽"] }, "basics": { "title": "基础配置", @@ -127,14 +140,8 @@ "notice": { "title": "通知", "btnRead": "标为已读", - "bar": [ - "通知", - "消息", - "代办" - ], - "text": [ - "暂无" - ], + "bar": ["通知", "消息", "代办"], + "text": ["暂无"], "viewAll": "查看全部" }, "worktab": { @@ -182,7 +189,8 @@ "subTitle": "输入您的电子邮件来重置您的密码", "placeholder": "请输入您的电子邮件", "submitBtnText": "提交", - "backBtnText": "返回" + "backBtnText": "返回", + "accountLabel": "账号" }, "register": { "title": "创建账号", @@ -204,7 +212,10 @@ "privacyPolicy": "《隐私政策》", "submitBtnText": "注册", "hasAccount": "已有账号?", - "toLogin": "去登录" + "toLogin": "去登录", + "success": { + "message": "注册成功" + } }, "lockScreen": { "pwdError": "密码错误", @@ -269,6 +280,9 @@ "role": "角色管理", "userCenter": "个人中心", "menu": "菜单管理" + }, + "setup": { + "title": "系统初始化" } }, "table": { @@ -298,5 +312,391 @@ "zebra": "斑马纹", "border": "边框", "headerBackground": "表头背景" + }, + "setup": { + "brand": "Commory", + "title": "Commory 系统初始化", + "subtitle": "完成本地优先通信记忆系统的首次配置。", + "eyebrow": "本地优先 · 单端口部署", + "panelTitle": "初始化向导", + "panelSubtitle": "按步骤确认环境、管理员账号与使用模式。", + "loadingStatus": "正在检查初始化状态...", + "apiUnavailable": "暂时无法连接初始化接口,可继续填写并稍后提交。", + "steps": { + "database": "数据库检查", + "admin": "管理员账号", + "mode": "使用模式", + "finish": "完成初始化" + }, + "database": { + "title": "数据库检查", + "desc": "确认当前存储与连接状态。", + "type": "SQLite 数据库", + "hint": "轻量级文件数据库,适合个人使用和小规模部署。", + "ready": "存储已就绪" + }, + "admin": { + "title": "管理员账号", + "desc": "设置用于管理 Commory 的初始账号。", + "existsTitle": "管理员账号已存在", + "existsDesc": "系统中已有管理员用户,可直接进入下一步。", + "userName": "用户名", + "userNamePlaceholder": "请输入管理员用户名", + "password": "密码", + "passwordPlaceholder": "至少 8 个字符", + "confirmPassword": "确认密码", + "confirmPasswordPlaceholder": "再次输入密码", + "existing": "已存在", + "notSet": "未设置" + }, + "mode": { + "title": "使用模式", + "desc": "选择初始化后默认启用的体验。", + "personal": "个人模式", + "personalDesc": "适合个人使用,界面更聚焦备份、检索和时间线。", + "family": "家庭模式", + "familyDesc": "适合家庭成员共享,保留后续多用户扩展空间。" + }, + "finish": { + "title": "完成初始化", + "desc": "确认配置并写入初始化状态。", + "database": "数据库", + "admin": "管理员", + "usageMode": "使用模式" + }, + "actions": { + "prev": "上一步", + "next": "下一步", + "finish": "完成初始化", + "login": "前往登录" + }, + "validation": { + "userNameRequired": "请输入管理员用户名", + "passwordRequired": "请输入密码", + "passwordLength": "密码至少 8 个字符", + "confirmPasswordRequired": "请确认密码", + "passwordMismatch": "两次输入的密码不一致" + }, + "message": { + "success": "系统初始化成功,即将跳转登录页" + } + }, + "dashboardPage": { + "console": { + "title": "MsgLayer 归档概览", + "subtitle": "查看导入、事件、身份和最近活动。", + "openImports": "打开导入", + "recentImports": "最近导入", + "recentEvents": "最近事件", + "viewTimeline": "查看时间线", + "emptyEvents": "暂无最近事件", + "itemCount": "{count} 项", + "cards": { + "imports": "导入", + "events": "事件", + "identities": "身份", + "lastActivity": "最近活动" + }, + "hints": { + "imports": "已验证的 MsgLayer 数据包", + "events": "已索引的时间线记录", + "identities": "已发现的联系人和设备", + "lastActivity": "最近事件时间戳" + }, + "noImports": "暂无导入" + }, + "timeline": { + "searchPlaceholder": "搜索时间线文本", + "typePlaceholder": "事件类型", + "apply": "应用", + "eventTypes": { + "all": "全部", + "sms": "短信", + "call": "通话", + "voice": "语音", + "contact_snapshot": "联系人快照" + } + }, + "search": { + "placeholder": "搜索短信、转写或摘要", + "title": "搜索结果", + "matches": "{count} 条匹配" + }, + "contacts": { + "title": "联系人", + "filterPlaceholder": "筛选联系人", + "loadActivity": "加载活动", + "phones": "电话", + "emails": "邮箱", + "source": "来源", + "empty": "选择一个联系人,查看其 MsgLayer 身份和最近活动。" + }, + "imports": { + "chooseFile": "选择 MsgLayer 文件", + "noFile": "未选择文件", + "validate": "校验", + "import": "导入", + "history": "导入历史", + "count": "{count} 次导入", + "validationPassed": "校验通过。", + "validationFailed": "校验失败。", + "imported": "已导入 {id}({version})。", + "export": "导出" + }, + "columns": { + "import": "导入", + "version": "版本", + "events": "事件", + "identities": "身份", + "importedAt": "导入时间", + "timestamp": "时间戳", + "type": "类型", + "direction": "方向", + "summary": "摘要", + "participants": "参与者", + "source": "来源", + "action": "操作" + } + }, + "resultPage": { + "success": { + "title": "操作成功", + "message": "任务已完成,相关结果已写入 Commory。", + "content": "你可以继续查看结果,或返回上一步调整配置。" + }, + "fail": { + "title": "操作失败", + "message": "请核对以下信息后重试。", + "intro": "当前操作未完成:", + "accountFrozen": "当前账户状态不可用", + "notEligible": "当前角色缺少所需权限" + }, + "actions": { + "backEdit": "返回修改", + "view": "查看", + "print": "打印" + } + }, + "systemPage": { + "user": { + "add": "新增用户", + "logoutTitle": "注销用户", + "logoutConfirm": "确定要注销该用户吗?", + "logoutSuccess": "注销成功", + "columns": { + "index": "序号", + "userName": "用户名", + "gender": "性别", + "phone": "手机号", + "status": "状态", + "createTime": "创建日期", + "operation": "操作" + }, + "status": { + "online": "在线", + "offline": "离线", + "abnormal": "异常", + "cancelled": "注销", + "unknown": "未知" + }, + "search": { + "userName": "用户名", + "userNamePlaceholder": "请输入用户名", + "phone": "手机号", + "phonePlaceholder": "请输入手机号", + "email": "邮箱", + "emailPlaceholder": "请输入邮箱", + "status": "状态", + "statusPlaceholder": "请选择状态", + "gender": "性别" + }, + "dialog": { + "addTitle": "添加用户", + "editTitle": "编辑用户", + "phoneInvalid": "请输入正确的手机号格式", + "addSuccess": "添加成功", + "updateSuccess": "更新成功", + "role": "角色" + } + }, + "role": { + "add": "新增角色", + "deleteTitle": "删除确认", + "deleteConfirm": "确定删除角色“{name}”吗?此操作不可恢复!", + "deleteSuccess": "删除成功", + "deleteCancel": "已取消删除", + "columns": { + "id": "角色ID", + "name": "角色名称", + "code": "角色编码", + "description": "角色描述", + "status": "角色状态", + "menuPermission": "菜单权限", + "editRole": "编辑角色", + "deleteRole": "删除角色" + }, + "search": { + "name": "角色名称", + "namePlaceholder": "请输入角色名称", + "code": "角色编码", + "codePlaceholder": "请输入角色编码", + "description": "角色描述", + "descriptionPlaceholder": "请输入角色描述", + "status": "角色状态", + "statusPlaceholder": "请选择状态", + "date": "创建日期", + "datePlaceholder": "请选择日期范围", + "startDate": "开始日期", + "endDate": "结束日期", + "rangeSeparator": "至", + "today": "今日", + "week": "最近一周", + "month": "最近一个月" + }, + "dialog": { + "addTitle": "新增角色", + "editTitle": "编辑角色", + "enabled": "启用", + "addSuccess": "新增成功", + "editSuccess": "修改成功" + }, + "permission": { + "title": "菜单权限", + "output": "获取选中数据", + "collapse": "全部收起", + "expand": "全部展开", + "selectAll": "全部选择", + "unselectAll": "取消全选", + "save": "保存", + "saveSuccess": "权限保存成功", + "outputSuccess": "已输出选中数据到控制台,共选中 {count} 个节点" + } + }, + "menu": { + "add": "添加菜单", + "collapse": "收起", + "expand": "展开", + "filters": { + "name": "菜单名称", + "route": "路由地址" + }, + "columns": { + "name": "菜单名称", + "type": "菜单类型", + "route": "路由", + "auth": "权限标识", + "editTime": "编辑时间", + "status": "状态", + "operation": "操作" + }, + "type": { + "button": "按钮", + "directory": "目录", + "iframe": "内嵌", + "menu": "菜单", + "external": "外链", + "unknown": "未知" + }, + "authCount": "{count} 个权限标识", + "addAuth": "新增权限", + "deleteMenuConfirm": "确定要删除该菜单吗?删除后无法恢复", + "deleteAuthConfirm": "确定要删除该权限吗?删除后无法恢复", + "deleteSuccess": "删除成功", + "deleteFailed": "删除失败", + "dialog": { + "menu": "菜单", + "button": "按钮", + "newMenu": "新建菜单", + "editMenu": "编辑菜单", + "newButton": "新建按钮", + "editButton": "编辑按钮", + "menuType": "菜单类型", + "name": "菜单名称", + "namePlaceholder": "菜单名称", + "path": "路由地址", + "pathTip": "一级菜单:以 / 开头的绝对路径(如 /dashboard)\n二级及以下:相对路径(如 console、user)", + "pathPlaceholder": "如:/dashboard 或 console", + "label": "权限标识", + "labelPlaceholder": "如:User", + "component": "组件路径", + "componentTip": "一级父级菜单:填写 /index/index\n具体页面:填写组件路径(如 /system/user)\n目录菜单:留空", + "componentPlaceholder": "如:/system/user 或留空", + "icon": "图标", + "iconPlaceholder": "如:ri:user-line", + "roles": "角色权限", + "rolesTip": "仅用于前端权限模式:配置角色标识(如 R_SUPER、R_ADMIN)\n后端权限模式:无需配置", + "rolesPlaceholder": "输入角色标识后按回车,如:R_SUPER", + "sort": "菜单排序", + "link": "外部链接", + "linkPlaceholder": "如:https://www.example.com", + "badge": "文本徽章", + "badgePlaceholder": "如:New、Hot", + "activePath": "激活路径", + "activePathTip": "用于详情页等隐藏菜单,指定高亮显示的父级菜单路径\n例如:用户详情页高亮显示“用户管理”菜单", + "activePathPlaceholder": "如:/system/user", + "isEnable": "是否启用", + "keepAlive": "页面缓存", + "isHide": "隐藏菜单", + "isIframe": "是否内嵌", + "showBadge": "显示徽章", + "fixedTab": "固定标签", + "isHideTab": "标签隐藏", + "isFullPage": "全屏页面", + "authName": "权限名称", + "authNamePlaceholder": "如:新增、编辑、删除", + "authLabel": "权限标识", + "authLabelPlaceholder": "如:add、edit、delete", + "authSort": "权限排序", + "submitSuccess": "{action}成功", + "validateFailed": "表单校验失败,请检查输入" + } + } + }, + "userCenter": { + "profile": "用户资料", + "tagline": "专注于本地优先的通信记忆管理", + "role": "Commory 管理员", + "location": "本地部署", + "team": "Commory 工作区", + "tags": "标签", + "tagList": ["本地优先", "通信归档", "隐私保护", "MsgLayer", "可检索", "可导出"], + "basicSettings": "基本设置", + "changePassword": "更改密码", + "realName": "姓名", + "gender": "性别", + "nickname": "昵称", + "email": "邮箱", + "mobile": "手机", + "address": "地址", + "bio": "个人介绍", + "currentPassword": "当前密码", + "newPassword": "新密码", + "confirmPassword": "确认新密码", + "male": "男", + "female": "女", + "edit": "编辑", + "save": "保存", + "validation": { + "realName": "请输入姓名", + "nickname": "请输入昵称", + "length": "长度在 2 到 50 个字符", + "email": "请输入邮箱", + "mobile": "请输入手机号码", + "address": "请输入地址", + "gender": "请选择性别" + }, + "greetings": { + "early": "很晚了,早点休息", + "morning": "早上好", + "lateMorning": "上午好", + "noon": "中午好", + "afternoon": "下午好", + "evening": "晚上好" + } + }, + "permission": { + "frontendMode": "前端权限模式", + "rolesHint": "路由 roles 控制页面访问,用户 buttons 控制按钮显示。", + "authHint": "v-auth 仅用于后端菜单 authList;当前前端模式请优先使用 hasAuth。" } } diff --git a/web/src/router/routes/staticRoutes.ts b/web/src/router/routes/staticRoutes.ts index edeb69d..8872fda 100644 --- a/web/src/router/routes/staticRoutes.ts +++ b/web/src/router/routes/staticRoutes.ts @@ -22,7 +22,7 @@ export const staticRoutes: AppRouteRecordRaw[] = [ path: '/setup', name: 'Setup', component: () => import('@views/setup/index.vue'), - meta: { title: '系统初始化', isHideTab: true } + meta: { title: 'menus.setup.title', isHideTab: true } }, { path: '/auth/login', diff --git a/web/src/utils/router.ts b/web/src/utils/router.ts index 8c838ff..c55bd48 100644 --- a/web/src/utils/router.ts +++ b/web/src/utils/router.ts @@ -45,17 +45,26 @@ export const setPageTitle = (to: RouteLocationNormalized): void => { * @returns 格式化后的菜单标题 */ export const formatMenuTitle = (title: string): string => { - if (title) { - if (title.startsWith('menus.')) { - // 使用 te() 方法检查翻译键值是否存在,避免控制台警告 - if (i18n.global.te(title)) { - return $t(title) - } else { - // 如果翻译不存在,返回键值的最后部分作为fallback - return title.split('.').pop() || title - } + if (!title) { + return '' + } + + if (i18n.global.te(title)) { + return $t(title) + } + + const looksLikeI18nKey = /^[a-z][\w-]*(\.[\w-]+)+(\[\d+\])?$/i.test(title) + if (looksLikeI18nKey) { + if (import.meta.env.DEV) { + console.warn(`[i18n] missing translation key: ${title}`) } - return title + return ( + title + .split('.') + .pop() + ?.replace(/\[\d+\]$/, '') || title + ) } - return '' + + return title } diff --git a/web/src/utils/storage/storage.ts b/web/src/utils/storage/storage.ts index 67b9e9e..9ad8835 100644 --- a/web/src/utils/storage/storage.ts +++ b/web/src/utils/storage/storage.ts @@ -35,6 +35,7 @@ import { router } from '@/router' import { useUserStore } from '@/store/modules/user' import { StorageConfig } from '@/utils/storage/storage-config' +import { $t } from '@/locales' /** * 存储兼容性管理器 @@ -101,7 +102,7 @@ class StorageCompatibilityManager { type: 'error', offset: 40, duration: 5000, - message: '系统检测到本地数据异常,请重新登录系统恢复使用!' + message: $t('common.storageError') }) } diff --git a/web/src/utils/sys/upgrade.ts b/web/src/utils/sys/upgrade.ts index 53d3465..16957ef 100644 --- a/web/src/utils/sys/upgrade.ts +++ b/web/src/utils/sys/upgrade.ts @@ -38,6 +38,7 @@ import { upgradeLogList } from '@/mock/upgrade/changeLog' import { ElNotification } from 'element-plus' import { useUserStore } from '@/store/modules/user' import { StorageConfig } from '@/utils/storage/storage-config' +import { $t } from '@/locales' /** * 版本管理器 @@ -134,14 +135,14 @@ class VersionManager { const messageParts = [ `

    `, - `系统已升级到 ${StorageConfig.CURRENT_VERSION} 版本,此次更新带来了以下改进:`, + `${$t('common.systemUpgradedPrefix')} ${StorageConfig.CURRENT_VERSION} ${$t('common.systemUpgradedSuffix')}`, `

    `, content ] if (requireReLogin) { messageParts.push( - `

    升级完成,请重新登录后继续使用。

    ` + `

    ${$t('common.upgradeReLogin')}

    ` ) } diff --git a/web/src/utils/table/tableUtils.ts b/web/src/utils/table/tableUtils.ts index 3ca9db1..e1ed197 100644 --- a/web/src/utils/table/tableUtils.ts +++ b/web/src/utils/table/tableUtils.ts @@ -41,6 +41,7 @@ import type { ApiResponse } from './tableCache' import { tableConfig } from './tableConfig' +import { $t } from '@/locales' // 请求参数基础接口,扩展分页参数 export interface BaseRequestParams extends Api.Common.PaginationParams { @@ -279,7 +280,7 @@ export const createErrorHandler = ( return (err: unknown, context: string): TableError => { const tableError: TableError = { code: 'UNKNOWN_ERROR', - message: '未知错误', + message: $t('common.unknownError'), details: err } diff --git a/web/src/utils/ui/colors.ts b/web/src/utils/ui/colors.ts index b4f6b77..56480c3 100755 --- a/web/src/utils/ui/colors.ts +++ b/web/src/utils/ui/colors.ts @@ -42,6 +42,7 @@ * @author Art Design Pro Team */ import { useSettingStore } from '@/store/modules/setting' +import { $t } from '@/locales' /** * 颜色转换结果接口 @@ -125,7 +126,7 @@ export function hexToRgba(hex: string, opacity: number): RgbaResult { */ export function hexToRgb(hexColor: string): number[] { if (!isValidHexColor(hexColor)) { - ElMessage.warning('输入错误的hex颜色值') + ElMessage.warning($t('common.invalidHexColor')) throw new Error('Invalid hex color format') } @@ -157,7 +158,7 @@ export function hexToRgb(hexColor: string): number[] { */ export function rgbToHex(r: number, g: number, b: number): string { if (!isValidRgbValue(r, g, b)) { - ElMessage.warning('输入错误的RGB颜色值') + ElMessage.warning($t('common.invalidRgbColor')) throw new Error('Invalid RGB color values') } @@ -199,7 +200,7 @@ export function colourBlend(color1: string, color2: string, ratio: number): stri */ export function getLightColor(color: string, level: number, isDark: boolean = false): string { if (!isValidHexColor(color)) { - ElMessage.warning('输入错误的hex颜色值') + ElMessage.warning($t('common.invalidHexColor')) throw new Error('Invalid hex color format') } @@ -221,7 +222,7 @@ export function getLightColor(color: string, level: number, isDark: boolean = fa */ export function getDarkColor(color: string, level: number): string { if (!isValidHexColor(color)) { - ElMessage.warning('输入错误的hex颜色值') + ElMessage.warning($t('common.invalidHexColor')) throw new Error('Invalid hex color format') } diff --git a/web/src/views/auth/forget-password/index.vue b/web/src/views/auth/forget-password/index.vue index 147259e..cfb389e 100644 --- a/web/src/views/auth/forget-password/index.vue +++ b/web/src/views/auth/forget-password/index.vue @@ -10,7 +10,9 @@

    {{ $t('forgetPassword.title') }}

    {{ $t('forgetPassword.subTitle') }}

    - 账号 + {{ + $t('forgetPassword.accountLabel') + }} -
    -
    -
    -

    Commory

    -

    MsgLayer archive overview

    -

    Imports, events, identities, and the latest activity for the signed-in archive.

    +
    + +
    +
    +

    Commory

    +

    {{ t('dashboardPage.console.title') }}

    +

    {{ t('dashboardPage.console.subtitle') }}

    +
    + + {{ t('dashboardPage.console.openImports') }} +
    - Open Imports -
    +
    -
    - {{ card.label }} + + {{ card.label }} {{ card.value }} - {{ card.hint }} -
    +

    {{ card.hint }}

    +
    -
    -
    -

    Recent imports

    - {{ summary?.recentImports.length || 0 }} items -
    - - - - - + + + + + + + -
    + -
    -
    -

    Recent events

    - View Timeline -
    -
    + + + +

    {{ event.content_summary || event.type }}

    -

    {{ event.type }} · {{ event.direction }}

    +

    {{ event.type }} · {{ event.direction }}

    - {{ event.timestamp }} + {{ event.timestamp }}
    -
    +
    diff --git a/web/src/views/dashboard/console/modules/sales-overview.vue b/web/src/views/dashboard/console/modules/sales-overview.vue deleted file mode 100755 index 32904b8..0000000 --- a/web/src/views/dashboard/console/modules/sales-overview.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/web/src/views/dashboard/console/modules/todo-list.vue b/web/src/views/dashboard/console/modules/todo-list.vue deleted file mode 100755 index ab9a86c..0000000 --- a/web/src/views/dashboard/console/modules/todo-list.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - diff --git a/web/src/views/dashboard/contacts/index.vue b/web/src/views/dashboard/contacts/index.vue index 0d4ab2b..ac8bc89 100644 --- a/web/src/views/dashboard/contacts/index.vue +++ b/web/src/views/dashboard/contacts/index.vue @@ -1,11 +1,15 @@ diff --git a/web/src/views/result/success/index.vue b/web/src/views/result/success/index.vue index ae57aba..54ea6d0 100755 --- a/web/src/views/result/success/index.vue +++ b/web/src/views/result/success/index.vue @@ -1,21 +1,24 @@ diff --git a/web/src/views/setup/index.vue b/web/src/views/setup/index.vue index 6c2d485..f8dda5a 100644 --- a/web/src/views/setup/index.vue +++ b/web/src/views/setup/index.vue @@ -1,48 +1,80 @@ diff --git a/web/src/views/system/menu/index.vue b/web/src/views/system/menu/index.vue index b88ea0c..24c84df 100644 --- a/web/src/views/system/menu/index.vue +++ b/web/src/views/system/menu/index.vue @@ -19,9 +19,11 @@ @refresh="handleRefresh" > @@ -57,9 +59,11 @@ import MenuDialog from './modules/menu-dialog.vue' import { fetchGetMenuList } from '@/api/system-manage' import { ElTag, ElMessageBox } from 'element-plus' + import { useI18n } from 'vue-i18n' defineOptions({ name: 'Menus' }) + const { t } = useI18n() // 状态管理 const loading = ref(false) const isExpanded = ref(false) @@ -82,13 +86,13 @@ const formItems = computed(() => [ { - label: '菜单名称', + label: t('systemPage.menu.filters.name'), key: 'name', type: 'input', props: { clearable: true } }, { - label: '路由地址', + label: t('systemPage.menu.filters.route'), key: 'route', type: 'input', props: { clearable: true } @@ -109,7 +113,7 @@ const list = await fetchGetMenuList() tableData.value = list } catch (error) { - throw error instanceof Error ? error : new Error('获取菜单失败') + throw error instanceof Error ? error : new Error(t('httpMsg.requestFailed')) } finally { loading.value = false } @@ -137,32 +141,32 @@ * @returns 菜单类型文本 */ const getMenuTypeText = (row: AppRouteRecord): string => { - if (row.meta?.isAuthButton) return '按钮' - if (row.children?.length) return '目录' - if (row.meta?.link && row.meta?.isIframe) return '内嵌' - if (row.path) return '菜单' - if (row.meta?.link) return '外链' - return '未知' + if (row.meta?.isAuthButton) return t('systemPage.menu.type.button') + if (row.children?.length) return t('systemPage.menu.type.directory') + if (row.meta?.link && row.meta?.isIframe) return t('systemPage.menu.type.iframe') + if (row.path) return t('systemPage.menu.type.menu') + if (row.meta?.link) return t('systemPage.menu.type.external') + return t('systemPage.menu.type.unknown') } // 表格列配置 const { columnChecks, columns } = useTableColumns(() => [ { prop: 'meta.title', - label: '菜单名称', + label: t('systemPage.menu.columns.name'), minWidth: 120, formatter: (row: AppRouteRecord) => formatMenuTitle(row.meta?.title) }, { prop: 'type', - label: '菜单类型', + label: t('systemPage.menu.columns.type'), formatter: (row: AppRouteRecord) => { return h(ElTag, { type: getMenuTypeTag(row) }, () => getMenuTypeText(row)) } }, { prop: 'path', - label: '路由', + label: t('systemPage.menu.columns.route'), formatter: (row: AppRouteRecord) => { if (row.meta?.isAuthButton) return '' return row.meta?.link || row.path || '' @@ -170,28 +174,28 @@ }, { prop: 'meta.authList', - label: '权限标识', + label: t('systemPage.menu.columns.auth'), formatter: (row: AppRouteRecord) => { if (row.meta?.isAuthButton) { return row.meta?.authMark || '' } if (!row.meta?.authList?.length) return '' - return `${row.meta.authList.length} 个权限标识` + return t('systemPage.menu.authCount', { count: row.meta.authList.length }) } }, { prop: 'date', - label: '编辑时间', + label: t('systemPage.menu.columns.editTime'), formatter: () => '2022-3-12 12:00:00' }, { prop: 'status', - label: '状态', - formatter: () => h(ElTag, { type: 'success' }, () => '启用') + label: t('systemPage.menu.columns.status'), + formatter: () => h(ElTag, { type: 'success' }, () => t('common.enabled')) }, { prop: 'operation', - label: '操作', + label: t('systemPage.menu.columns.operation'), width: 180, align: 'right', formatter: (row: AppRouteRecord) => { @@ -214,7 +218,7 @@ h(ArtButtonTable, { type: 'add', onClick: () => handleAddAuth(), - title: '新增权限' + title: t('systemPage.menu.addAuth') }), h(ArtButtonTable, { type: 'edit', @@ -424,16 +428,16 @@ */ const handleDeleteMenu = async (): Promise => { try { - await ElMessageBox.confirm('确定要删除该菜单吗?删除后无法恢复', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + await ElMessageBox.confirm(t('systemPage.menu.deleteMenuConfirm'), t('common.tips'), { + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: 'warning' }) - ElMessage.success('删除成功') + ElMessage.success(t('systemPage.menu.deleteSuccess')) getMenuList() } catch (error) { if (error !== 'cancel') { - ElMessage.error('删除失败') + ElMessage.error(t('systemPage.menu.deleteFailed')) } } } @@ -443,16 +447,16 @@ */ const handleDeleteAuth = async (): Promise => { try { - await ElMessageBox.confirm('确定要删除该权限吗?删除后无法恢复', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + await ElMessageBox.confirm(t('systemPage.menu.deleteAuthConfirm'), t('common.tips'), { + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: 'warning' }) - ElMessage.success('删除成功') + ElMessage.success(t('systemPage.menu.deleteSuccess')) getMenuList() } catch (error) { if (error !== 'cancel') { - ElMessage.error('删除失败') + ElMessage.error(t('systemPage.menu.deleteFailed')) } } } diff --git a/web/src/views/system/menu/modules/menu-dialog.vue b/web/src/views/system/menu/modules/menu-dialog.vue index f512301..2babe9b 100644 --- a/web/src/views/system/menu/modules/menu-dialog.vue +++ b/web/src/views/system/menu/modules/menu-dialog.vue @@ -21,16 +21,20 @@ > @@ -45,8 +49,10 @@ import type { FormItem } from '@/components/core/forms/art-form/index.vue' import ArtForm from '@/components/core/forms/art-form/index.vue' import { useWindowSize } from '@vueuse/core' + import { useI18n } from 'vue-i18n' const { width } = useWindowSize() + const { t } = useI18n() /** * 创建带 tooltip 的表单标签 @@ -149,20 +155,30 @@ const rules = reactive({ name: [ - { required: true, message: '请输入菜单名称', trigger: 'blur' }, - { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' } + { required: true, message: t('systemPage.menu.dialog.namePlaceholder'), trigger: 'blur' }, + { min: 2, max: 20, message: t('userCenter.validation.length'), trigger: 'blur' } ], - path: [{ required: true, message: '请输入路由地址', trigger: 'blur' }], - label: [{ required: true, message: '输入权限标识', trigger: 'blur' }], - authName: [{ required: true, message: '请输入权限名称', trigger: 'blur' }], - authLabel: [{ required: true, message: '请输入权限标识', trigger: 'blur' }] + path: [ + { required: true, message: t('systemPage.menu.dialog.pathPlaceholder'), trigger: 'blur' } + ], + label: [ + { required: true, message: t('systemPage.menu.dialog.labelPlaceholder'), trigger: 'blur' } + ], + authName: [ + { required: true, message: t('systemPage.menu.dialog.authNamePlaceholder'), trigger: 'blur' } + ], + authLabel: [ + { required: true, message: t('systemPage.menu.dialog.authLabelPlaceholder'), trigger: 'blur' } + ] }) /** * 表单项配置 */ const formItems = computed(() => { - const baseItems: FormItem[] = [{ label: '菜单类型', key: 'menuType', span: 24 }] + const baseItems: FormItem[] = [ + { label: t('systemPage.menu.dialog.menuType'), key: 'menuType', span: 24 } + ] // Switch 组件的 span:小屏幕 12,大屏幕 6 const switchSpan = width.value < 640 ? 12 : 6 @@ -170,89 +186,144 @@ if (form.menuType === 'menu') { return [ ...baseItems, - { label: '菜单名称', key: 'name', type: 'input', props: { placeholder: '菜单名称' } }, + { + label: t('systemPage.menu.dialog.name'), + key: 'name', + type: 'input', + props: { placeholder: t('systemPage.menu.dialog.namePlaceholder') } + }, { label: createLabelTooltip( - '路由地址', - '一级菜单:以 / 开头的绝对路径(如 /dashboard)\n二级及以下:相对路径(如 console、user)' + t('systemPage.menu.dialog.path'), + t('systemPage.menu.dialog.pathTip') ), key: 'path', type: 'input', - props: { placeholder: '如:/dashboard 或 console' } + props: { placeholder: t('systemPage.menu.dialog.pathPlaceholder') } + }, + { + label: t('systemPage.menu.dialog.label'), + key: 'label', + type: 'input', + props: { placeholder: t('systemPage.menu.dialog.labelPlaceholder') } }, - { label: '权限标识', key: 'label', type: 'input', props: { placeholder: '如:User' } }, { label: createLabelTooltip( - '组件路径', - '一级父级菜单:填写 /index/index\n具体页面:填写组件路径(如 /system/user)\n目录菜单:留空' + t('systemPage.menu.dialog.component'), + t('systemPage.menu.dialog.componentTip') ), key: 'component', type: 'input', - props: { placeholder: '如:/system/user 或留空' } + props: { placeholder: t('systemPage.menu.dialog.componentPlaceholder') } + }, + { + label: t('systemPage.menu.dialog.icon'), + key: 'icon', + type: 'input', + props: { placeholder: t('systemPage.menu.dialog.iconPlaceholder') } }, - { label: '图标', key: 'icon', type: 'input', props: { placeholder: '如:ri:user-line' } }, { label: createLabelTooltip( - '角色权限', - '仅用于前端权限模式:配置角色标识(如 R_SUPER、R_ADMIN)\n后端权限模式:无需配置' + t('systemPage.menu.dialog.roles'), + t('systemPage.menu.dialog.rolesTip') ), key: 'roles', type: 'inputtag', - props: { placeholder: '输入角色标识后按回车,如:R_SUPER' } + props: { placeholder: t('systemPage.menu.dialog.rolesPlaceholder') } }, { - label: '菜单排序', + label: t('systemPage.menu.dialog.sort'), key: 'sort', type: 'number', props: { min: 1, controlsPosition: 'right', style: { width: '100%' } } }, { - label: '外部链接', + label: t('systemPage.menu.dialog.link'), key: 'link', type: 'input', - props: { placeholder: '如:https://www.example.com' } + props: { placeholder: t('systemPage.menu.dialog.linkPlaceholder') } }, { - label: '文本徽章', + label: t('systemPage.menu.dialog.badge'), key: 'showTextBadge', type: 'input', - props: { placeholder: '如:New、Hot' } + props: { placeholder: t('systemPage.menu.dialog.badgePlaceholder') } }, { label: createLabelTooltip( - '激活路径', - '用于详情页等隐藏菜单,指定高亮显示的父级菜单路径\n例如:用户详情页高亮显示"用户管理"菜单' + t('systemPage.menu.dialog.activePath'), + t('systemPage.menu.dialog.activePathTip') ), key: 'activePath', type: 'input', - props: { placeholder: '如:/system/user' } + props: { placeholder: t('systemPage.menu.dialog.activePathPlaceholder') } + }, + { + label: t('systemPage.menu.dialog.isEnable'), + key: 'isEnable', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.keepAlive'), + key: 'keepAlive', + type: 'switch', + span: switchSpan }, - { label: '是否启用', key: 'isEnable', type: 'switch', span: switchSpan }, - { label: '页面缓存', key: 'keepAlive', type: 'switch', span: switchSpan }, - { label: '隐藏菜单', key: 'isHide', type: 'switch', span: switchSpan }, - { label: '是否内嵌', key: 'isIframe', type: 'switch', span: switchSpan }, - { label: '显示徽章', key: 'showBadge', type: 'switch', span: switchSpan }, - { label: '固定标签', key: 'fixedTab', type: 'switch', span: switchSpan }, - { label: '标签隐藏', key: 'isHideTab', type: 'switch', span: switchSpan }, - { label: '全屏页面', key: 'isFullPage', type: 'switch', span: switchSpan } + { + label: t('systemPage.menu.dialog.isHide'), + key: 'isHide', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.isIframe'), + key: 'isIframe', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.showBadge'), + key: 'showBadge', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.fixedTab'), + key: 'fixedTab', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.isHideTab'), + key: 'isHideTab', + type: 'switch', + span: switchSpan + }, + { + label: t('systemPage.menu.dialog.isFullPage'), + key: 'isFullPage', + type: 'switch', + span: switchSpan + } ] } else { return [ ...baseItems, { - label: '权限名称', + label: t('systemPage.menu.dialog.authName'), key: 'authName', type: 'input', - props: { placeholder: '如:新增、编辑、删除' } + props: { placeholder: t('systemPage.menu.dialog.authNamePlaceholder') } }, { - label: '权限标识', + label: t('systemPage.menu.dialog.authLabel'), key: 'authLabel', type: 'input', - props: { placeholder: '如:add、edit、delete' } + props: { placeholder: t('systemPage.menu.dialog.authLabelPlaceholder') } }, { - label: '权限排序', + label: t('systemPage.menu.dialog.authSort'), key: 'authSort', type: 'number', props: { min: 1, controlsPosition: 'right', style: { width: '100%' } } @@ -262,8 +333,14 @@ }) const dialogTitle = computed(() => { - const type = form.menuType === 'menu' ? '菜单' : '按钮' - return isEdit.value ? `编辑${type}` : `新建${type}` + if (form.menuType === 'menu') { + return isEdit.value + ? t('systemPage.menu.dialog.editMenu') + : t('systemPage.menu.dialog.newMenu') + } + return isEdit.value + ? t('systemPage.menu.dialog.editButton') + : t('systemPage.menu.dialog.newButton') }) /** @@ -331,10 +408,14 @@ try { await formRef.value.validate() emit('submit', { ...form }) - ElMessage.success(`${isEdit.value ? '编辑' : '新增'}成功`) + ElMessage.success( + t('systemPage.menu.dialog.submitSuccess', { + action: isEdit.value ? t('common.edit') : t('common.add') + }) + ) handleCancel() } catch { - ElMessage.error('表单校验失败,请检查输入') + ElMessage.error(t('systemPage.menu.dialog.validateFailed')) } } diff --git a/web/src/views/system/role/index.vue b/web/src/views/system/role/index.vue index 1378f34..020853d 100755 --- a/web/src/views/system/role/index.vue +++ b/web/src/views/system/role/index.vue @@ -17,7 +17,7 @@ > @@ -60,9 +60,11 @@ import RoleEditDialog from './modules/role-edit-dialog.vue' import RolePermissionDialog from './modules/role-permission-dialog.vue' import { ElTag, ElMessageBox } from 'element-plus' + import { useI18n } from 'vue-i18n' defineOptions({ name: 'Role' }) + const { t } = useI18n() type RoleListItem = Api.SystemManage.RoleListItem type RoleSearchFormParams = Api.SystemManage.RoleSearchParams & { daterange?: string[] @@ -108,33 +110,33 @@ columnsFactory: () => [ { prop: 'roleId', - label: '角色ID', + label: t('systemPage.role.columns.id'), width: 100 }, { prop: 'roleName', - label: '角色名称', + label: t('systemPage.role.columns.name'), minWidth: 120 }, { prop: 'roleCode', - label: '角色编码', + label: t('systemPage.role.columns.code'), minWidth: 120 }, { prop: 'description', - label: '角色描述', + label: t('systemPage.role.columns.description'), minWidth: 150, showOverflowTooltip: true }, { prop: 'enabled', - label: '角色状态', + label: t('systemPage.role.columns.status'), width: 100, formatter: (row) => { const statusConfig = row.enabled - ? { type: 'success', text: '启用' } - : { type: 'warning', text: '禁用' } + ? { type: 'success', text: t('common.enabled') } + : { type: 'warning', text: t('common.disabled') } return h( ElTag, { type: statusConfig.type as 'success' | 'warning' }, @@ -144,13 +146,13 @@ }, { prop: 'createTime', - label: '创建日期', + label: t('common.createTime'), width: 180, sortable: true }, { prop: 'operation', - label: '操作', + label: t('common.actions'), width: 80, fixed: 'right', formatter: (row) => @@ -159,17 +161,17 @@ list: [ { key: 'permission', - label: '菜单权限', + label: t('systemPage.role.columns.menuPermission'), icon: 'ri:user-3-line' }, { key: 'edit', - label: '编辑角色', + label: t('systemPage.role.columns.editRole'), icon: 'ri:edit-2-line' }, { key: 'delete', - label: '删除角色', + label: t('systemPage.role.columns.deleteRole'), icon: 'ri:delete-bin-4-line', color: '#f56c6c' } @@ -223,18 +225,22 @@ } const deleteRole = (row: RoleListItem) => { - ElMessageBox.confirm(`确定删除角色"${row.roleName}"吗?此操作不可恢复!`, '删除确认', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }) + ElMessageBox.confirm( + t('systemPage.role.deleteConfirm', { name: row.roleName }), + t('systemPage.role.deleteTitle'), + { + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), + type: 'warning' + } + ) .then(() => { // TODO: 调用删除接口 - ElMessage.success('删除成功') + ElMessage.success(t('systemPage.role.deleteSuccess')) refreshData() }) .catch(() => { - ElMessage.info('已取消删除') + ElMessage.info(t('systemPage.role.deleteCancel')) }) } diff --git a/web/src/views/system/role/modules/role-edit-dialog.vue b/web/src/views/system/role/modules/role-edit-dialog.vue index 46ff9b1..bfc2f85 100644 --- a/web/src/views/system/role/modules/role-edit-dialog.vue +++ b/web/src/views/system/role/modules/role-edit-dialog.vue @@ -1,39 +1,52 @@ diff --git a/web/src/views/system/role/modules/role-search.vue b/web/src/views/system/role/modules/role-search.vue index ae929e7..f6e97c6 100644 --- a/web/src/views/system/role/modules/role-search.vue +++ b/web/src/views/system/role/modules/role-search.vue @@ -11,6 +11,10 @@ From 679c4fdf31a96d1cacc5a2a499320403eebb6d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 15:24:47 +0800 Subject: [PATCH 14/20] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=9F=BA?= =?UTF-8?q?=E4=BA=8EWebAuthn=E7=9A=84=E5=A4=9A=E5=9B=A0=E7=B4=A0=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E4=B8=8EOAuth=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了Passkey认证支持、统一认证方式表、OAuth provider注册表,扩展了会话管理与审计日志功能,完成了0002版本数据库迁移。 --- backend/go.mod | 2 + backend/go.sum | 2 + backend/internal/api/server.go | 345 +++++++++++++++++- backend/internal/auth/oauth/provider.go | 37 ++ backend/internal/auth/oauth/registry.go | 52 +++ backend/internal/auth/passkey/service.go | 201 ++++++++++ backend/internal/auth/passkey/user.go | 52 +++ backend/internal/auth/service.go | 121 +++++- backend/internal/config/config.go | 6 + .../storage/contracttest/contract_test.go | 199 ++++++++++ backend/internal/storage/filestore.go | 85 ++++- .../sqlite/0002_auth_hardening.down.sql | 3 + .../sqlite/0002_auth_hardening.up.sql | 44 +++ .../storage/sqlc/gen/auth_methods.sql.go | 107 ++++++ .../storage/sqlc/gen/challenges.sql.go | 72 ++++ backend/internal/storage/sqlc/gen/models.go | 33 ++ .../internal/storage/sqlc/gen/passkey.sql.go | 132 +++++++ .../storage/sqlc/gen/refresh_tokens.sql.go | 21 ++ .../storage/sqlc/query/auth_methods.sql | 12 + .../storage/sqlc/query/challenges.sql | 12 + .../internal/storage/sqlc/query/passkey.sql | 15 + .../storage/sqlc/query/refresh_tokens.sql | 5 + backend/internal/storage/sqlite.go | 295 ++++++++++++++- backend/internal/storage/storage.go | 92 ++++- 24 files changed, 1919 insertions(+), 26 deletions(-) create mode 100644 backend/internal/auth/oauth/provider.go create mode 100644 backend/internal/auth/oauth/registry.go create mode 100644 backend/internal/auth/passkey/service.go create mode 100644 backend/internal/auth/passkey/user.go create mode 100644 backend/internal/storage/migrations/sqlite/0002_auth_hardening.down.sql create mode 100644 backend/internal/storage/migrations/sqlite/0002_auth_hardening.up.sql create mode 100644 backend/internal/storage/sqlc/gen/auth_methods.sql.go create mode 100644 backend/internal/storage/sqlc/gen/challenges.sql.go create mode 100644 backend/internal/storage/sqlc/gen/passkey.sql.go create mode 100644 backend/internal/storage/sqlc/query/auth_methods.sql create mode 100644 backend/internal/storage/sqlc/query/challenges.sql create mode 100644 backend/internal/storage/sqlc/query/passkey.sql diff --git a/backend/go.mod b/backend/go.mod index 02b54cd..17d78e6 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -6,3 +6,5 @@ require ( github.com/google/uuid v1.6.0 github.com/mattn/go-sqlite3 v1.14.44 ) + +require github.com/go-webauthn/webauthn v0.17.3 // indirect diff --git a/backend/go.sum b/backend/go.sum index 62ded37..9feb082 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -1,3 +1,5 @@ +github.com/go-webauthn/webauthn v0.17.3 h1:XHZ0TXV7k8vChcE4TFgPitOPJ5cb7h1dpAeFDS0cjCo= +github.com/go-webauthn/webauthn v0.17.3/go.mod h1:PlkMgmuL9McCT7dvgBj/Sz/fgs3V6ZID6/KnFkEcPvQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 97f3c75..3d57865 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -2,6 +2,7 @@ package api import ( "context" + "crypto/rand" "encoding/json" "fmt" "io" @@ -9,9 +10,13 @@ import ( "os" urlpath "path" "path/filepath" + "strconv" "strings" + "time" "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/IsKenKenYa/Commory/backend/internal/auth/oauth" + "github.com/IsKenKenYa/Commory/backend/internal/auth/passkey" "github.com/IsKenKenYa/Commory/backend/internal/config" "github.com/IsKenKenYa/Commory/backend/internal/importers" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" @@ -27,6 +32,8 @@ type Server struct { store storage.Provider service query.Service auth *auth.Service + passkey *passkey.Service + oauth *oauth.Registry validator *msglayer.Validator importer importers.Importer setupSvc *setup.Service @@ -34,11 +41,19 @@ type Server struct { func NewServer(cfg config.Config, store storage.Provider, validator *msglayer.Validator) *Server { authSvc := auth.NewService(store, cfg.AuthSecret) + + var passkeySvc *passkey.Service + if cfg.PasskeyRPID != "" && cfg.PasskeyOrigin != "" { + passkeySvc, _ = passkey.NewService(store, cfg.PasskeyRPName, cfg.PasskeyRPID, cfg.PasskeyOrigin) + } + return &Server{ cfg: cfg, store: store, service: query.New(store), auth: authSvc, + passkey: passkeySvc, + oauth: oauth.NewRegistry(), validator: validator, importer: importers.JSONImporter{}, setupSvc: setup.NewService(store, authSvc), @@ -52,6 +67,11 @@ func (s *Server) Handler() http.Handler { publicMux.HandleFunc("/api/auth/refresh", s.handleRefresh) publicMux.HandleFunc("/api/auth/logout", s.handleLogout) publicMux.HandleFunc("/api/setup", s.handleSetup) + publicMux.HandleFunc("/api/auth/passkey/login/begin", s.handlePasskeyLoginBegin) + publicMux.HandleFunc("/api/auth/passkey/login/finish", s.handlePasskeyLoginFinish) + publicMux.HandleFunc("/api/oauth/state", s.handleOAuthState) + publicMux.HandleFunc("/api/oauth/providers", s.handleOAuthProviders) + publicMux.HandleFunc("/api/oauth/", s.handleOAuthCallback) privateMux := http.NewServeMux() privateMux.HandleFunc("/api/user/info", s.handleUserInfo) @@ -69,6 +89,13 @@ func (s *Server) Handler() http.Handler { privateMux.HandleFunc("/api/identities/", s.handleIdentity) privateMux.HandleFunc("/api/search", s.handleSearch) privateMux.HandleFunc("/api/threads/", s.handleThread) + privateMux.HandleFunc("/api/sessions", s.handleSessions) + privateMux.HandleFunc("/api/sessions/", s.handleSession) + privateMux.HandleFunc("/api/audit-log", s.handleAuditLogs) + privateMux.HandleFunc("/api/auth/passkey/register/begin", s.handlePasskeyRegisterBegin) + privateMux.HandleFunc("/api/auth/passkey/register/finish", s.handlePasskeyRegisterFinish) + privateMux.HandleFunc("/api/auth/passkey", s.handlePasskeys) + privateMux.HandleFunc("/api/auth/passkey/", s.handlePasskeyDelete) root := http.NewServeMux() root.Handle("/api/auth/", publicMux) @@ -115,7 +142,8 @@ func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusBadRequest, err.Error()) return } - user, pair, err := s.auth.Register(r.Context(), req.UserName, req.Email, req.Password) + user, pair, err := s.auth.RegisterWithDevice(r.Context(), req.UserName, req.Email, req.Password, + r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) if err != nil { writeError(w, http.StatusBadRequest, err.Error()) return @@ -141,7 +169,8 @@ func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { writeError(w, http.StatusBadRequest, err.Error()) return } - user, pair, err := s.auth.Login(r.Context(), r.RemoteAddr, req.UserName, req.Password) + user, pair, err := s.auth.LoginWithDevice(r.Context(), r.RemoteAddr, req.UserName, req.Password, + r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) if err != nil { writeError(w, http.StatusUnauthorized, err.Error()) return @@ -496,6 +525,318 @@ func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, "ok", items) } +// ==================== OAuth ==================== + +func (s *Server) handleOAuthState(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + // 生成 CSRF state 并存入 DB + state := randomHex(16) + challengeID := randomHex(8) + _ = s.store.CreateChallenge(r.Context(), storage.ChallengeRecord{ + ID: challengeID, + Challenge: state, + FlowType: "oauth_state", + ExpiresAt: time.Now().UTC().Add(10 * time.Minute), + }) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "state": state, + "challengeId": challengeID, + }) +} + +func (s *Server) handleOAuthProviders(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + providers := s.oauth.ListEnabled() + type providerInfo struct { + Name string `json:"name"` + DisplayName string `json:"displayName"` + } + result := make([]providerInfo, 0, len(providers)) + for _, p := range providers { + result = append(result, providerInfo{Name: p.Name(), DisplayName: p.DisplayName()}) + } + writeJSON(w, http.StatusOK, "ok", result) +} + +func (s *Server) handleOAuthCallback(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + // 骨架实现:后续 Phase 中完成具体 Provider 逻辑 + providerName := strings.TrimPrefix(r.URL.Path, "/api/oauth/") + providerName = strings.TrimSuffix(providerName, "/") + if providerName == "" || providerName == "state" || providerName == "providers" { + writeError(w, http.StatusBadRequest, "provider name required") + return + } + provider := s.oauth.Get(providerName) + if provider == nil { + writeError(w, http.StatusNotFound, fmt.Sprintf("oauth provider %q not found", providerName)) + return + } + // TODO: 完整的 OAuth callback 流程 + writeJSON(w, http.StatusNotImplemented, "oauth callback not yet implemented", nil) +} + +func randomHex(n int) string { + b := make([]byte, n) + _, _ = rand.Read(b) + return fmt.Sprintf("%x", b) +} + +// ==================== Passkey ==================== + +func (s *Server) handlePasskeyRegisterBegin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + cc, challengeID, err := s.passkey.BeginRegistration(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "options": cc, + "challengeId": challengeID, + }) +} + +func (s *Server) handlePasskeyRegisterFinish(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + var req struct { + ChallengeID string `json:"challengeId"` + Response any `json:"response"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + respJSON, _ := json.Marshal(req.Response) + parsed, err := protocol.ParseCredentialCreationResponseBody(strings.NewReader(string(respJSON))) + if err != nil { + writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) + return + } + if err := s.passkey.FinishRegistration(r.Context(), userID, req.ChallengeID, parsed); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} + +func (s *Server) handlePasskeyLoginBegin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + assertion, challengeID, err := s.passkey.BeginLogin(r.Context()) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "options": assertion, + "challengeId": challengeID, + }) +} + +func (s *Server) handlePasskeyLoginFinish(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + var req struct { + ChallengeID string `json:"challengeId"` + Response any `json:"response"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + respJSON, _ := json.Marshal(req.Response) + parsed, err := protocol.ParseCredentialRequestResponseBody(strings.NewReader(string(respJSON))) + if err != nil { + writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) + return + } + userID, err := s.passkey.FinishLogin(r.Context(), req.ChallengeID, parsed) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + user, err := s.auth.UserInfo(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + // 登录成功:通过 auth service 获取用户记录并签发 token + userRecord, err := s.store.GetUser(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + pair, _, err := s.auth.IssueTokenPairForUser(r.Context(), userRecord, + r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handlePasskeys(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + passkeys, err := s.passkey.ListPasskeys(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", passkeys) +} + +func (s *Server) handlePasskeyDelete(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodDelete { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + passkeyID := strings.TrimPrefix(r.URL.Path, "/api/auth/passkey/") + if passkeyID == "" { + writeError(w, http.StatusBadRequest, "passkey id required") + return + } + userID := auth.UserIDFromContext(r.Context()) + if err := s.passkey.DeletePasskey(r.Context(), userID, passkeyID); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} + +// ==================== Sessions ==================== + +func (s *Server) handleSessions(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + switch r.Method { + case http.MethodGet: + sessions, err := s.store.ListSessionsByUser(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", sessions) + case http.MethodDelete: + // 撤销除当前会话外的所有会话 + // 当前会话通过 refresh token cookie 识别 + if err := s.store.RevokeOtherSessions(r.Context(), userID, ""); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) + default: + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + } +} + +func (s *Server) handleSession(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodDelete { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + sessionID := strings.TrimPrefix(r.URL.Path, "/api/sessions/") + if sessionID == "" { + writeError(w, http.StatusBadRequest, "session id required") + return + } + if err := s.store.RevokeSession(r.Context(), sessionID); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} + +// ==================== Audit Log ==================== + +func (s *Server) handleAuditLogs(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + q := r.URL.Query() + userID := q.Get("user_id") + action := q.Get("action") + limit := 50 + if v, err := strconv.Atoi(q.Get("limit")); err == nil && v > 0 && v <= 200 { + limit = v + } + offset := 0 + if v, err := strconv.Atoi(q.Get("offset")); err == nil && v >= 0 { + offset = v + } + + logs, err := s.store.ListAuditLogs(r.Context(), userID, action, limit, offset) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + total, _ := s.store.CountAuditLogs(r.Context(), userID, action) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "items": logs, + "total": total, + "limit": limit, + "offset": offset, + }) +} + func (s *Server) requireAdmin(ctx context.Context) error { user, err := s.auth.UserInfo(ctx, auth.UserIDFromContext(ctx)) if err != nil { diff --git a/backend/internal/auth/oauth/provider.go b/backend/internal/auth/oauth/provider.go new file mode 100644 index 0000000..8a07cbe --- /dev/null +++ b/backend/internal/auth/oauth/provider.go @@ -0,0 +1,37 @@ +package oauth + +import "context" + +// Provider 定义 OAuth 身份提供者的接口。 +// 具体实现(GitHub、Google、OIDC 等)在后续 Phase 中添加。 +type Provider interface { + // Name 返回 provider 的唯一标识,如 "github", "google", "oidc" + Name() string + // DisplayName 返回用户可读的名称,如 "GitHub", "Google" + DisplayName() string + // IsEnabled 检查该 provider 的配置是否完整 + IsEnabled() bool + // ExchangeCode 用授权码换取 access token + ExchangeCode(ctx context.Context, code string) (*Token, error) + // GetUserInfo 用 access token 获取用户信息 + GetUserInfo(ctx context.Context, token *Token) (*UserInfo, error) +} + +// Token 表示 OAuth token 响应 +type Token struct { + AccessToken string + TokenType string + RefreshToken string + ExpiresIn int64 + IDToken string // OIDC +} + +// UserInfo 表示从 OAuth provider 获取的用户信息 +type UserInfo struct { + ProviderUserID string // provider 内的用户唯一标识 + Username string // 用户名 + DisplayName string // 显示名 + Email string // 邮箱 + AvatarURL string // 头像 + Raw map[string]any // provider 特有的原始信息 +} diff --git a/backend/internal/auth/oauth/registry.go b/backend/internal/auth/oauth/registry.go new file mode 100644 index 0000000..915b7a8 --- /dev/null +++ b/backend/internal/auth/oauth/registry.go @@ -0,0 +1,52 @@ +package oauth + +import "sync" + +// Registry 管理所有已注册的 OAuth Provider。 +type Registry struct { + mu sync.RWMutex + providers map[string]Provider +} + +// NewRegistry 创建一个空的 Provider 注册表。 +func NewRegistry() *Registry { + return &Registry{providers: make(map[string]Provider)} +} + +// Register 注册一个 OAuth Provider。 +func (r *Registry) Register(p Provider) { + r.mu.Lock() + defer r.mu.Unlock() + r.providers[p.Name()] = p +} + +// Get 按名称获取 Provider,不存在返回 nil。 +func (r *Registry) Get(name string) Provider { + r.mu.RLock() + defer r.mu.RUnlock() + return r.providers[name] +} + +// ListEnabled 返回所有已启用的 Provider 列表。 +func (r *Registry) ListEnabled() []Provider { + r.mu.RLock() + defer r.mu.RUnlock() + var result []Provider + for _, p := range r.providers { + if p.IsEnabled() { + result = append(result, p) + } + } + return result +} + +// ListAll 返回所有已注册的 Provider(包括未启用的)。 +func (r *Registry) ListAll() []Provider { + r.mu.RLock() + defer r.mu.RUnlock() + result := make([]Provider, 0, len(r.providers)) + for _, p := range r.providers { + result = append(result, p) + } + return result +} diff --git a/backend/internal/auth/passkey/service.go b/backend/internal/auth/passkey/service.go new file mode 100644 index 0000000..3a1a9d1 --- /dev/null +++ b/backend/internal/auth/passkey/service.go @@ -0,0 +1,201 @@ +package passkey + +import ( + "context" + "crypto/rand" + "encoding/base64" + "encoding/json" + "fmt" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/go-webauthn/webauthn" + "github.com/go-webauthn/webauthn/protocol" +) + +type Service struct { + store storage.Provider + wa *webauthn.WebAuthn +} + +func NewService(store storage.Provider, rpName, rpID, origin string) (*Service, error) { + wa, err := webauthn.New(&webauthn.Config{ + RPDisplayName: rpName, + RPID: rpID, + RPOrigins: []string{origin}, + AuthenticatorSelection: protocol.AuthenticatorSelection{ + ResidentKey: protocol.ResidentKeyRequirementRequired, + }, + Timeouts: webauthn.Timeouts{ + Login: webauthn.TimeoutConfig{Timeout: 120000}, + Registration: webauthn.TimeoutConfig{Timeout: 120000}, + }, + }) + if err != nil { + return nil, fmt.Errorf("init webauthn: %w", err) + } + return &Service{store: store, wa: wa}, nil +} + +func (s *Service) BeginRegistration(ctx context.Context, userID string) (*protocol.CredentialCreation, string, error) { + user, err := s.store.GetUser(ctx, userID) + if err != nil { + return nil, "", err + } + + existingCreds, _ := s.store.ListPasskeysByUser(ctx, userID) + waUser := NewWebAuthnUser(user, existingCreds) + + var opts []webauthn.RegistrationOption + if len(existingCreds) > 0 { + excludeCreds := make([]protocol.CredentialDescriptor, 0, len(existingCreds)) + for _, c := range existingCreds { + excludeCreds = append(excludeCreds, protocol.CredentialDescriptor{ + Type: protocol.PublicKeyCredentialType, + CredentialID: []byte(c.CredentialID), + }) + } + opts = append(opts, webauthn.WithExclusions(excludeCreds)) + } + + cc, sessionData, err := s.wa.BeginRegistration(waUser, opts...) + if err != nil { + return nil, "", err + } + + sessionJSON, _ := json.Marshal(sessionData) + challengeID := randomID("chal") + if err := s.store.CreateChallenge(ctx, storage.ChallengeRecord{ + ID: challengeID, + Challenge: base64.StdEncoding.EncodeToString(sessionJSON), + UserID: userID, + FlowType: "passkey_register", + ExpiresAt: time.Now().UTC().Add(5 * time.Minute), + }); err != nil { + return nil, "", err + } + + return cc, challengeID, nil +} + +func (s *Service) FinishRegistration(ctx context.Context, userID, challengeID string, response *protocol.ParsedCredentialCreationData) error { + chal, err := s.store.GetChallenge(ctx, challengeID) + if err != nil { + return fmt.Errorf("challenge not found or expired") + } + _ = s.store.DeleteChallenge(ctx, challengeID) + + var sessionData webauthn.SessionData + sessionJSON, _ := base64.StdEncoding.DecodeString(chal.Challenge) + if err := json.Unmarshal(sessionJSON, &sessionData); err != nil { + return fmt.Errorf("invalid challenge data") + } + + user, err := s.store.GetUser(ctx, userID) + if err != nil { + return err + } + existingCreds, _ := s.store.ListPasskeysByUser(ctx, userID) + waUser := NewWebAuthnUser(user, existingCreds) + + credential, err := s.wa.CreateCredential(waUser, sessionData, response) + if err != nil { + return fmt.Errorf("verify registration: %w", err) + } + + transportsJSON, _ := json.Marshal(response.Response.Transport) + return s.store.CreatePasskeyCredential(ctx, storage.PasskeyCredential{ + ID: randomID("pk"), + UserID: userID, + CredentialID: base64.StdEncoding.EncodeToString(credential.ID), + PublicKey: base64.StdEncoding.EncodeToString(credential.PublicKey), + AttestationType: credential.AttestationType, + AAGUID: base64.StdEncoding.EncodeToString(credential.Authenticator.AAGUID), + SignCount: credential.Authenticator.SignCount, + Transports: string(transportsJSON), + Name: fmt.Sprintf("Passkey %s", time.Now().Format("2006-01-02")), + }) +} + +func (s *Service) BeginLogin(ctx context.Context) (*protocol.CredentialAssertion, string, error) { + // Discoverable login - 不需要预先知道用户 + _, sessionData, err := s.wa.BeginDiscoverableLogin() + if err != nil { + return nil, "", err + } + + sessionJSON, _ := json.Marshal(sessionData) + challengeID := randomID("chal") + if err := s.store.CreateChallenge(ctx, storage.ChallengeRecord{ + ID: challengeID, + Challenge: base64.StdEncoding.EncodeToString(sessionJSON), + FlowType: "passkey_login", + ExpiresAt: time.Now().UTC().Add(5 * time.Minute), + }); err != nil { + return nil, "", err + } + + assertion, _ := s.wa.BeginDiscoverableLogin() + _ = assertion // 已通过上面获取 + return &protocol.CredentialAssertion{ + Response: protocol.PublicKeyCredentialRequestOptions{ + Challenge: sessionData.Challenge, + Timeout: 120000, + RelyingPartyID: s.wa.Config.RPID, + UserVerification: protocol.VerificationPreferred, + }, + }, challengeID, nil +} + +func (s *Service) FinishLogin(ctx context.Context, challengeID string, response *protocol.ParsedCredentialAssertionData) (string, error) { + chal, err := s.store.GetChallenge(ctx, challengeID) + if err != nil { + return "", fmt.Errorf("challenge not found or expired") + } + _ = s.store.DeleteChallenge(ctx, challengeID) + + var sessionData webauthn.SessionData + sessionJSON, _ := base64.StdEncoding.DecodeString(chal.Challenge) + if err := json.Unmarshal(sessionJSON, &sessionData); err != nil { + return "", fmt.Errorf("invalid challenge data") + } + + handler := func(rawID, userHandle []byte) (webauthn.User, error) { + credID := base64.StdEncoding.EncodeToString(rawID) + cred, err := s.store.GetPasskeyByCredentialID(ctx, credID) + if err != nil { + return nil, fmt.Errorf("credential not found") + } + user, err := s.store.GetUser(ctx, cred.UserID) + if err != nil { + return nil, fmt.Errorf("user not found") + } + creds, _ := s.store.ListPasskeysByUser(ctx, user.ID) + return NewWebAuthnUser(user, creds), nil + } + + credential, err := s.wa.FinishDiscoverableLogin(handler, sessionData, response) + if err != nil { + return "", fmt.Errorf("verify login: %w", err) + } + + credID := base64.StdEncoding.EncodeToString(credential.ID) + cred, _ := s.store.GetPasskeyByCredentialID(ctx, credID) + _ = s.store.UpdatePasskeyLastUsed(ctx, cred.ID, credential.Authenticator.SignCount) + + return cred.UserID, nil +} + +func (s *Service) ListPasskeys(ctx context.Context, userID string) ([]storage.PasskeyCredential, error) { + return s.store.ListPasskeysByUser(ctx, userID) +} + +func (s *Service) DeletePasskey(ctx context.Context, userID, passkeyID string) error { + return s.store.DeletePasskey(ctx, passkeyID, userID) +} + +func randomID(prefix string) string { + raw := make([]byte, 8) + _, _ = rand.Read(raw) + return fmt.Sprintf("%s_%x", prefix, raw) +} diff --git a/backend/internal/auth/passkey/user.go b/backend/internal/auth/passkey/user.go new file mode 100644 index 0000000..a731862 --- /dev/null +++ b/backend/internal/auth/passkey/user.go @@ -0,0 +1,52 @@ +package passkey + +import ( + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/go-webauthn/webauthn/webauthn" +) + +type WebAuthnUser struct { + user storage.UserRecord + credentials []webauthn.Credential +} + +func NewWebAuthnUser(user storage.UserRecord, creds []storage.PasskeyCredential) *WebAuthnUser { + waCreds := make([]webauthn.Credential, 0, len(creds)) + for _, c := range creds { + waCred := webauthn.Credential{ + ID: []byte(c.CredentialID), + PublicKey: []byte(c.PublicKey), + AttestationType: c.AttestationType, + Authenticator: webauthn.Authenticator{ + AAGUID: []byte(c.AAGUID), + SignCount: c.SignCount, + CloneWarning: false, + }, + } + waCreds = append(waCreds, waCred) + } + return &WebAuthnUser{user: user, credentials: waCreds} +} + +func (u *WebAuthnUser) WebAuthnID() []byte { + return []byte(u.user.ID) +} + +func (u *WebAuthnUser) WebAuthnName() string { + return u.user.UserName +} + +func (u *WebAuthnUser) WebAuthnDisplayName() string { + if u.user.Email != "" { + return u.user.Email + } + return u.user.UserName +} + +func (u *WebAuthnUser) WebAuthnCredentials() []webauthn.Credential { + return u.credentials +} + +func (u *WebAuthnUser) WebAuthnIcon() string { + return "" +} diff --git a/backend/internal/auth/service.go b/backend/internal/auth/service.go index 9ec8763..d5c7e7d 100644 --- a/backend/internal/auth/service.go +++ b/backend/internal/auth/service.go @@ -18,7 +18,7 @@ import ( ) const ( - accessTokenTTL = 30 * time.Minute + accessTokenTTL = 15 * time.Minute refreshTokenTTL = 7 * 24 * time.Hour ) @@ -38,6 +38,10 @@ func NewService(store storage.Provider, secret string) *Service { } func (s *Service) Register(ctx context.Context, userName, email, password string) (UserInfo, TokenPair, error) { + return s.RegisterWithDevice(ctx, userName, email, password, "", "", "") +} + +func (s *Service) RegisterWithDevice(ctx context.Context, userName, email, password, deviceName, ipAddress, userAgent string) (UserInfo, TokenPair, error) { userName = strings.TrimSpace(userName) if userName == "" || strings.TrimSpace(password) == "" { return UserInfo{}, TokenPair{}, fmt.Errorf("username and password are required") @@ -71,14 +75,22 @@ func (s *Service) Register(ctx context.Context, userName, email, password string return UserInfo{}, TokenPair{}, err } - pair, err := s.issueTokenPair(ctx, record) + pair, sessionID, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } + + _ = s.writeAuditLog(ctx, record.ID, "register", ipAddress, userAgent, "") + _ = sessionID // session 已创建 + return toUserInfo(record), pair, nil } func (s *Service) RegisterAdmin(ctx context.Context, userName, email, password string) (UserInfo, TokenPair, error) { + return s.RegisterAdminWithDevice(ctx, userName, email, password, "", "", "") +} + +func (s *Service) RegisterAdminWithDevice(ctx context.Context, userName, email, password, deviceName, ipAddress, userAgent string) (UserInfo, TokenPair, error) { userName = strings.TrimSpace(userName) if userName == "" || strings.TrimSpace(password) == "" { return UserInfo{}, TokenPair{}, fmt.Errorf("username and password are required") @@ -112,14 +124,22 @@ func (s *Service) RegisterAdmin(ctx context.Context, userName, email, password s return UserInfo{}, TokenPair{}, err } - pair, err := s.issueTokenPair(ctx, record) + pair, sessionID, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } + + _ = s.writeAuditLog(ctx, record.ID, "register", ipAddress, userAgent, "") + _ = sessionID + return toUserInfo(record), pair, nil } func (s *Service) Login(ctx context.Context, remoteAddr, userName, password string) (UserInfo, TokenPair, error) { + return s.LoginWithDevice(ctx, remoteAddr, userName, password, "", "", "") +} + +func (s *Service) LoginWithDevice(ctx context.Context, remoteAddr, userName, password, deviceName, ipAddress, userAgent string) (UserInfo, TokenPair, error) { if err := s.allowLoginAttempt(remoteAddr); err != nil { return UserInfo{}, TokenPair{}, err } @@ -133,15 +153,18 @@ func (s *Service) Login(ctx context.Context, remoteAddr, userName, password stri } if NeedsRehash(record.PasswordHash) { - if _, newHash, rehashErr := hashPassword(password); rehashErr == nil { - _ = s.store.UpdateUserPasswordHash(ctx, record.ID, newHash) + if newSalt, newHash, rehashErr := hashPassword(password); rehashErr == nil { + _ = s.store.UpdateUserPasswordHash(ctx, record.ID, newHash, newSalt) } } - pair, err := s.issueTokenPair(ctx, record) + pair, _, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } + + _ = s.writeAuditLog(ctx, record.ID, "login", ipAddress, userAgent, `{"method":"password"}`) + return toUserInfo(record), pair, nil } @@ -150,22 +173,40 @@ func (s *Service) Refresh(ctx context.Context, refreshToken string) (TokenPair, if token == "" { return TokenPair{}, fmt.Errorf("refresh token is required") } - record, err := s.store.ConsumeRefreshToken(ctx, hashToken(token)) + tokenHash := hashToken(token) + + record, err := s.store.ConsumeRefreshToken(ctx, tokenHash) if err != nil { - return TokenPair{}, err + // 重放检测:如果 token 已被撤销,撤销整族 + if anyRecord, findErr := s.store.FindAnyRefreshTokenByHash(ctx, tokenHash); findErr == nil && !anyRecord.RevokedAt.IsZero() { + _ = s.store.RevokeRefreshTokenFamily(ctx, anyRecord.ID) + } + return TokenPair{}, fmt.Errorf("refresh token invalid or expired") } + user, err := s.store.GetUser(ctx, record.UserID) if err != nil { return TokenPair{}, err } - return s.issueTokenPair(ctx, user) + + pair, _, err := s.issueTokenPairWithSession(ctx, user, record.ID, "", "", "") + if err != nil { + return TokenPair{}, err + } + + _ = s.writeAuditLog(ctx, user.ID, "token_refresh", "", "", "") + + return pair, nil } func (s *Service) RevokeRefreshToken(ctx context.Context, refreshToken string) error { if refreshToken == "" { return nil } - _, err := s.store.ConsumeRefreshToken(ctx, hashToken(refreshToken)) + record, err := s.store.ConsumeRefreshToken(ctx, hashToken(refreshToken)) + if err == nil { + _ = s.writeAuditLog(ctx, record.UserID, "logout", "", "", "") + } return err } @@ -177,6 +218,11 @@ func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) return toUserInfo(user), nil } +// IssueTokenPairForUser 为已验证的用户签发 token pair(Passkey 登录用) +func (s *Service) IssueTokenPairForUser(ctx context.Context, user storage.UserRecord, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { + return s.issueTokenPairWithSession(ctx, user, "", deviceName, ipAddress, userAgent) +} + func (s *Service) ParseAccessToken(token string) (string, error) { token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) parts := strings.Split(token, ".") @@ -207,28 +253,69 @@ func (s *Service) ParseAccessToken(token string) (string, error) { return payload.Sub, nil } -func (s *Service) issueTokenPair(ctx context.Context, user storage.UserRecord) (TokenPair, error) { +func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.UserRecord, parentID, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { accessToken, err := s.buildAccessToken(user) if err != nil { - return TokenPair{}, err + return TokenPair{}, "", err } refreshToken, refreshHash, err := buildRefreshToken() if err != nil { - return TokenPair{}, err + return TokenPair{}, "", err } + refreshID := randomID("refresh") if err := s.store.SaveRefreshToken(ctx, storage.RefreshTokenRecord{ - ID: randomID("refresh"), + ID: refreshID, UserID: user.ID, TokenHash: refreshHash, + ParentID: parentID, ExpiresAt: time.Now().UTC().Add(refreshTokenTTL), CreatedAt: time.Now().UTC(), }); err != nil { - return TokenPair{}, err - } + return TokenPair{}, "", err + } + + // 创建 Session 记录 + sessionID := randomID("session") + _ = s.store.CreateSession(ctx, storage.SessionRecord{ + ID: sessionID, + UserID: user.ID, + RefreshTokenID: refreshID, + DeviceName: deviceName, + DeviceType: detectDeviceType(userAgent), + IPAddress: ipAddress, + UserAgent: userAgent, + CreatedAt: time.Now().UTC(), + LastSeenAt: time.Now().UTC(), + }) + return TokenPair{ AccessToken: accessToken, RefreshToken: refreshToken, - }, nil + }, sessionID, nil +} + +func detectDeviceType(userAgent string) string { + ua := strings.ToLower(userAgent) + switch { + case strings.Contains(ua, "commory"): + return "android" + case strings.Contains(ua, "mozilla") || strings.Contains(ua, "chrome") || strings.Contains(ua, "safari"): + return "web" + default: + return "unknown" + } +} + +func (s *Service) writeAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { + return s.store.CreateAuditLog(ctx, storage.AuditRecord{ + ID: randomID("audit"), + UserID: userID, + Action: action, + IPAddress: ipAddress, + UserAgent: userAgent, + Detail: detail, + CreatedAt: time.Now().UTC(), + }) } func (s *Service) buildAccessToken(user storage.UserRecord) (string, error) { diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index c9d951e..929e9f3 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -17,6 +17,9 @@ type Config struct { TLS bool Env string AllowedImportDir []string + PasskeyRPName string + PasskeyRPID string + PasskeyOrigin string } func Load() (Config, error) { @@ -37,6 +40,9 @@ func Load() (Config, error) { TLS: envBool("COMMORY_TLS", false), Env: env("COMMORY_ENV", "development"), AllowedImportDir: splitAndClean(env("COMMORY_ALLOWED_IMPORT_DIRS", filepath.Join("..", "msglayer", "examples"))), + PasskeyRPName: env("COMMORY_PASSKEY_RP_NAME", "Commory"), + PasskeyRPID: env("COMMORY_PASSKEY_RP_ID", ""), + PasskeyOrigin: env("COMMORY_PASSKEY_ORIGIN", ""), }, nil } diff --git a/backend/internal/storage/contracttest/contract_test.go b/backend/internal/storage/contracttest/contract_test.go index c9d8fc4..8c816a3 100644 --- a/backend/internal/storage/contracttest/contract_test.go +++ b/backend/internal/storage/contracttest/contract_test.go @@ -24,6 +24,11 @@ func RunContractTests(t *testing.T, factory ProviderFactory) { t.Run("IdentityCRUD", func(t *testing.T) { testIdentityCRUD(t, factory) }) t.Run("SearchPagination", func(t *testing.T) { testSearchPagination(t, factory) }) t.Run("SetupLifecycle", func(t *testing.T) { testSetupLifecycle(t, factory) }) + t.Run("SessionLifecycle", func(t *testing.T) { testSessionLifecycle(t, factory) }) + t.Run("AuditLog", func(t *testing.T) { testAuditLog(t, factory) }) + t.Run("PasskeyCredential", func(t *testing.T) { testPasskeyCredential(t, factory) }) + t.Run("ChallengeLifecycle", func(t *testing.T) { testChallengeLifecycle(t, factory) }) + t.Run("AuthMethod", func(t *testing.T) { testAuthMethod(t, factory) }) } func testUserLifecycle(t *testing.T, factory ProviderFactory) { @@ -379,6 +384,200 @@ func testSetupLifecycle(t *testing.T, factory ProviderFactory) { } } +func testSessionLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "sess_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + session := storage.SessionRecord{ + ID: uuid.New().String(), + UserID: user.ID, + IPAddress: "127.0.0.1", + UserAgent: "test-agent", + } + if err := store.CreateSession(ctx, session); err != nil { + t.Fatalf("CreateSession: %v", err) + } + + sessions, err := store.ListSessionsByUser(ctx, user.ID) + if err != nil { + t.Fatalf("ListSessionsByUser: %v", err) + } + if len(sessions) != 1 { + t.Fatalf("expected 1 session, got %d", len(sessions)) + } + + if err := store.UpdateSessionLastSeen(ctx, session.ID); err != nil { + t.Fatalf("UpdateSessionLastSeen: %v", err) + } + + if err := store.RevokeSession(ctx, session.ID); err != nil { + t.Fatalf("RevokeSession: %v", err) + } + + sessions, _ = store.ListSessionsByUser(ctx, user.ID) + if len(sessions) != 0 { + t.Fatalf("expected 0 sessions after revoke, got %d", len(sessions)) + } +} + +func testAuditLog(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + if err := store.CreateAuditLog(ctx, storage.AuditRecord{ + ID: uuid.New().String(), Action: "login", IPAddress: "127.0.0.1", + }); err != nil { + t.Fatalf("CreateAuditLog: %v", err) + } + + logs, err := store.ListAuditLogs(ctx, "", "", 10, 0) + if err != nil { + t.Fatalf("ListAuditLogs: %v", err) + } + if len(logs) != 1 { + t.Fatalf("expected 1 log, got %d", len(logs)) + } + + total, err := store.CountAuditLogs(ctx, "", "") + if err != nil { + t.Fatalf("CountAuditLogs: %v", err) + } + if total != 1 { + t.Fatalf("expected total 1, got %d", total) + } +} + +func testPasskeyCredential(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "pk_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + cred := storage.PasskeyCredential{ + ID: uuid.New().String(), + UserID: user.ID, + CredentialID: "cred_" + uuid.New().String(), + PublicKey: "pubkey_test", + Transports: `["usb","nfc"]`, + Name: "Test Key", + } + if err := store.CreatePasskeyCredential(ctx, cred); err != nil { + t.Fatalf("CreatePasskeyCredential: %v", err) + } + + got, err := store.GetPasskeyByCredentialID(ctx, cred.CredentialID) + if err != nil { + t.Fatalf("GetPasskeyByCredentialID: %v", err) + } + if got.Name != "Test Key" { + t.Fatalf("name mismatch: %s", got.Name) + } + + passkeys, err := store.ListPasskeysByUser(ctx, user.ID) + if err != nil { + t.Fatalf("ListPasskeysByUser: %v", err) + } + if len(passkeys) != 1 { + t.Fatalf("expected 1 passkey, got %d", len(passkeys)) + } + + if err := store.UpdatePasskeyLastUsed(ctx, cred.ID, 42); err != nil { + t.Fatalf("UpdatePasskeyLastUsed: %v", err) + } + + if err := store.DeletePasskey(ctx, cred.ID, user.ID); err != nil { + t.Fatalf("DeletePasskey: %v", err) + } + + passkeys, _ = store.ListPasskeysByUser(ctx, user.ID) + if len(passkeys) != 0 { + t.Fatalf("expected 0 passkeys after delete, got %d", len(passkeys)) + } +} + +func testChallengeLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + chal := storage.ChallengeRecord{ + ID: uuid.New().String(), + Challenge: "test_challenge_value", + FlowType: "passkey_login", + ExpiresAt: time.Now().Add(5 * time.Minute).UTC(), + } + if err := store.CreateChallenge(ctx, chal); err != nil { + t.Fatalf("CreateChallenge: %v", err) + } + + got, err := store.GetChallenge(ctx, chal.ID) + if err != nil { + t.Fatalf("GetChallenge: %v", err) + } + if got.Challenge != "test_challenge_value" { + t.Fatalf("challenge mismatch: %s", got.Challenge) + } + + if err := store.DeleteChallenge(ctx, chal.ID); err != nil { + t.Fatalf("DeleteChallenge: %v", err) + } + + _, err = store.GetChallenge(ctx, chal.ID) + if err == nil { + t.Fatal("expected error for deleted challenge") + } +} + +func testAuthMethod(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "am_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + method := storage.AuthMethodRecord{ + ID: uuid.New().String(), + UserID: user.ID, + ProviderType: "password", + ProviderUserID: user.ID, + Metadata: "{}", + } + if err := store.CreateAuthMethod(ctx, method); err != nil { + t.Fatalf("CreateAuthMethod: %v", err) + } + + got, err := store.GetAuthMethodByProvider(ctx, "password", user.ID) + if err != nil { + t.Fatalf("GetAuthMethodByProvider: %v", err) + } + if got.UserID != user.ID { + t.Fatalf("user ID mismatch: %s", got.UserID) + } +} + // NewSQLiteTestProvider 创建一个临时 SQLite Provider 用于测试。 func NewSQLiteTestProvider(t *testing.T) storage.Provider { t.Helper() diff --git a/backend/internal/storage/filestore.go b/backend/internal/storage/filestore.go index c317969..5a6880e 100644 --- a/backend/internal/storage/filestore.go +++ b/backend/internal/storage/filestore.go @@ -417,7 +417,7 @@ func (s *fileStore) hasAdminUserLocked() (bool, error) { return false, nil } -func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash string) error { +func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { _ = ctx s.mu.Lock() defer s.mu.Unlock() @@ -426,11 +426,94 @@ func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash return fmt.Errorf("user not found") } user.PasswordHash = newHash + user.PasswordSalt = newSalt user.UpdatedAt = time.Now().UTC() s.snapshot.Users[userID] = user return s.persist() } +// ==================== 新增方法 stubs ==================== + +func (s *fileStore) FindAnyRefreshTokenByHash(_ context.Context, _ string) (RefreshTokenRecord, error) { + return RefreshTokenRecord{}, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) RevokeRefreshTokenFamily(_ context.Context, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CreateSession(_ context.Context, _ SessionRecord) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) ListSessionsByUser(_ context.Context, _ string) ([]SessionRecord, error) { + return nil, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) RevokeSession(_ context.Context, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) RevokeOtherSessions(_ context.Context, _, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) UpdateSessionLastSeen(_ context.Context, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CreateAuditLog(_ context.Context, _ AuditRecord) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) ListAuditLogs(_ context.Context, _, _ string, _, _ int) ([]AuditRecord, error) { + return nil, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CountAuditLogs(_ context.Context, _, _ string) (int, error) { + return 0, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CreatePasskeyCredential(_ context.Context, _ PasskeyCredential) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) GetPasskeyByCredentialID(_ context.Context, _ string) (PasskeyCredential, error) { + return PasskeyCredential{}, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) ListPasskeysByUser(_ context.Context, _ string) ([]PasskeyCredential, error) { + return nil, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) UpdatePasskeyLastUsed(_ context.Context, _ string, _ uint32) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) DeletePasskey(_ context.Context, _, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CreateChallenge(_ context.Context, _ ChallengeRecord) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) GetChallenge(_ context.Context, _ string) (ChallengeRecord, error) { + return ChallengeRecord{}, fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) DeleteChallenge(_ context.Context, _ string) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) CreateAuthMethod(_ context.Context, _ AuthMethodRecord) error { + return fmt.Errorf("not supported in fileStore") +} + +func (s *fileStore) GetAuthMethodByProvider(_ context.Context, _, _ string) (AuthMethodRecord, error) { + return AuthMethodRecord{}, fmt.Errorf("not supported in fileStore") +} + func EnsureParentDir(path string) error { dir := filepath.Dir(path) if dir == "." || dir == "" { diff --git a/backend/internal/storage/migrations/sqlite/0002_auth_hardening.down.sql b/backend/internal/storage/migrations/sqlite/0002_auth_hardening.down.sql new file mode 100644 index 0000000..a59d32f --- /dev/null +++ b/backend/internal/storage/migrations/sqlite/0002_auth_hardening.down.sql @@ -0,0 +1,3 @@ +DROP TABLE IF EXISTS user_auth_methods; +DROP TABLE IF EXISTS auth_challenges; +DROP TABLE IF EXISTS passkey_credentials; diff --git a/backend/internal/storage/migrations/sqlite/0002_auth_hardening.up.sql b/backend/internal/storage/migrations/sqlite/0002_auth_hardening.up.sql new file mode 100644 index 0000000..3bba2d9 --- /dev/null +++ b/backend/internal/storage/migrations/sqlite/0002_auth_hardening.up.sql @@ -0,0 +1,44 @@ +-- Passkey 凭证表(每用户可多个) +CREATE TABLE IF NOT EXISTS passkey_credentials ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + credential_id TEXT NOT NULL UNIQUE, + public_key TEXT NOT NULL, + attestation_type TEXT NOT NULL DEFAULT '', + aaguid TEXT NOT NULL DEFAULT '', + sign_count INTEGER NOT NULL DEFAULT 0, + transports TEXT NOT NULL DEFAULT '[]', + name TEXT NOT NULL DEFAULT '', + last_used_at DATETIME, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_passkey_user_id ON passkey_credentials(user_id); +CREATE INDEX IF NOT EXISTS idx_passkey_credential_id ON passkey_credentials(credential_id); + +-- 认证 Challenge 临时存储(WebAuthn + OAuth state 通用) +CREATE TABLE IF NOT EXISTS auth_challenges ( + id TEXT PRIMARY KEY, + challenge TEXT NOT NULL, + user_id TEXT, + flow_type TEXT NOT NULL, + expires_at DATETIME NOT NULL, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_challenges_expires ON auth_challenges(expires_at); + +-- 统一认证方式表 +CREATE TABLE IF NOT EXISTS user_auth_methods ( + id TEXT PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + provider_type TEXT NOT NULL, + provider_user_id TEXT NOT NULL, + metadata TEXT NOT NULL DEFAULT '{}', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE(provider_type, provider_user_id) +); + +CREATE INDEX IF NOT EXISTS idx_auth_methods_user ON user_auth_methods(user_id); +CREATE INDEX IF NOT EXISTS idx_auth_methods_provider ON user_auth_methods(provider_type, provider_user_id); diff --git a/backend/internal/storage/sqlc/gen/auth_methods.sql.go b/backend/internal/storage/sqlc/gen/auth_methods.sql.go new file mode 100644 index 0000000..e79bbce --- /dev/null +++ b/backend/internal/storage/sqlc/gen/auth_methods.sql.go @@ -0,0 +1,107 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: auth_methods.sql + +package sqlcgen + +import ( + "context" +) + +const createAuthMethod = `-- name: CreateAuthMethod :exec +INSERT INTO user_auth_methods (id, user_id, provider_type, provider_user_id, metadata) +VALUES (?, ?, ?, ?, ?) +` + +type CreateAuthMethodParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + ProviderType string `json:"provider_type"` + ProviderUserID string `json:"provider_user_id"` + Metadata string `json:"metadata"` +} + +func (q *Queries) CreateAuthMethod(ctx context.Context, arg *CreateAuthMethodParams) error { + _, err := q.db.ExecContext(ctx, createAuthMethod, + arg.ID, + arg.UserID, + arg.ProviderType, + arg.ProviderUserID, + arg.Metadata, + ) + return err +} + +const deleteAuthMethod = `-- name: DeleteAuthMethod :exec +DELETE FROM user_auth_methods WHERE id = ? AND user_id = ? +` + +type DeleteAuthMethodParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeleteAuthMethod(ctx context.Context, arg *DeleteAuthMethodParams) error { + _, err := q.db.ExecContext(ctx, deleteAuthMethod, arg.ID, arg.UserID) + return err +} + +const getAuthMethodByProvider = `-- name: GetAuthMethodByProvider :one +SELECT id, user_id, provider_type, provider_user_id, metadata, created_at, updated_at FROM user_auth_methods WHERE provider_type = ? AND provider_user_id = ? LIMIT 1 +` + +type GetAuthMethodByProviderParams struct { + ProviderType string `json:"provider_type"` + ProviderUserID string `json:"provider_user_id"` +} + +func (q *Queries) GetAuthMethodByProvider(ctx context.Context, arg *GetAuthMethodByProviderParams) (*UserAuthMethod, error) { + row := q.db.QueryRowContext(ctx, getAuthMethodByProvider, arg.ProviderType, arg.ProviderUserID) + var i UserAuthMethod + err := row.Scan( + &i.ID, + &i.UserID, + &i.ProviderType, + &i.ProviderUserID, + &i.Metadata, + &i.CreatedAt, + &i.UpdatedAt, + ) + return &i, err +} + +const listAuthMethodsByUser = `-- name: ListAuthMethodsByUser :many +SELECT id, user_id, provider_type, provider_user_id, metadata, created_at, updated_at FROM user_auth_methods WHERE user_id = ? +` + +func (q *Queries) ListAuthMethodsByUser(ctx context.Context, userID string) ([]*UserAuthMethod, error) { + rows, err := q.db.QueryContext(ctx, listAuthMethodsByUser, userID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*UserAuthMethod{} + for rows.Next() { + var i UserAuthMethod + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.ProviderType, + &i.ProviderUserID, + &i.Metadata, + &i.CreatedAt, + &i.UpdatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/backend/internal/storage/sqlc/gen/challenges.sql.go b/backend/internal/storage/sqlc/gen/challenges.sql.go new file mode 100644 index 0000000..2da13ba --- /dev/null +++ b/backend/internal/storage/sqlc/gen/challenges.sql.go @@ -0,0 +1,72 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: challenges.sql + +package sqlcgen + +import ( + "context" + "database/sql" + "time" +) + +const cleanupExpiredChallenges = `-- name: CleanupExpiredChallenges :exec +DELETE FROM auth_challenges WHERE expires_at < CURRENT_TIMESTAMP +` + +func (q *Queries) CleanupExpiredChallenges(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, cleanupExpiredChallenges) + return err +} + +const createChallenge = `-- name: CreateChallenge :exec +INSERT INTO auth_challenges (id, challenge, user_id, flow_type, expires_at) +VALUES (?, ?, ?, ?, ?) +` + +type CreateChallengeParams struct { + ID string `json:"id"` + Challenge string `json:"challenge"` + UserID sql.NullString `json:"user_id"` + FlowType string `json:"flow_type"` + ExpiresAt time.Time `json:"expires_at"` +} + +func (q *Queries) CreateChallenge(ctx context.Context, arg *CreateChallengeParams) error { + _, err := q.db.ExecContext(ctx, createChallenge, + arg.ID, + arg.Challenge, + arg.UserID, + arg.FlowType, + arg.ExpiresAt, + ) + return err +} + +const deleteChallenge = `-- name: DeleteChallenge :exec +DELETE FROM auth_challenges WHERE id = ? +` + +func (q *Queries) DeleteChallenge(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, deleteChallenge, id) + return err +} + +const getChallenge = `-- name: GetChallenge :one +SELECT id, challenge, user_id, flow_type, expires_at, created_at FROM auth_challenges WHERE id = ? AND expires_at > CURRENT_TIMESTAMP LIMIT 1 +` + +func (q *Queries) GetChallenge(ctx context.Context, id string) (*AuthChallenge, error) { + row := q.db.QueryRowContext(ctx, getChallenge, id) + var i AuthChallenge + err := row.Scan( + &i.ID, + &i.Challenge, + &i.UserID, + &i.FlowType, + &i.ExpiresAt, + &i.CreatedAt, + ) + return &i, err +} diff --git a/backend/internal/storage/sqlc/gen/models.go b/backend/internal/storage/sqlc/gen/models.go index 77fb85d..2880647 100644 --- a/backend/internal/storage/sqlc/gen/models.go +++ b/backend/internal/storage/sqlc/gen/models.go @@ -19,6 +19,15 @@ type AuditLog struct { CreatedAt time.Time `json:"created_at"` } +type AuthChallenge struct { + ID string `json:"id"` + Challenge string `json:"challenge"` + UserID sql.NullString `json:"user_id"` + FlowType string `json:"flow_type"` + ExpiresAt time.Time `json:"expires_at"` + CreatedAt time.Time `json:"created_at"` +} + type Event struct { ID string `json:"id"` UserID string `json:"user_id"` @@ -63,6 +72,20 @@ type Import struct { RawJson string `json:"raw_json"` } +type PasskeyCredential struct { + ID string `json:"id"` + UserID string `json:"user_id"` + CredentialID string `json:"credential_id"` + PublicKey string `json:"public_key"` + AttestationType string `json:"attestation_type"` + Aaguid string `json:"aaguid"` + SignCount int64 `json:"sign_count"` + Transports string `json:"transports"` + Name string `json:"name"` + LastUsedAt sql.NullTime `json:"last_used_at"` + CreatedAt time.Time `json:"created_at"` +} + type RefreshToken struct { ID string `json:"id"` UserID string `json:"user_id"` @@ -116,3 +139,13 @@ type User struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } + +type UserAuthMethod struct { + ID string `json:"id"` + UserID string `json:"user_id"` + ProviderType string `json:"provider_type"` + ProviderUserID string `json:"provider_user_id"` + Metadata string `json:"metadata"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} diff --git a/backend/internal/storage/sqlc/gen/passkey.sql.go b/backend/internal/storage/sqlc/gen/passkey.sql.go new file mode 100644 index 0000000..8aad18b --- /dev/null +++ b/backend/internal/storage/sqlc/gen/passkey.sql.go @@ -0,0 +1,132 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: passkey.sql + +package sqlcgen + +import ( + "context" +) + +const createPasskeyCredential = `-- name: CreatePasskeyCredential :exec +INSERT INTO passkey_credentials (id, user_id, credential_id, public_key, attestation_type, aaguid, sign_count, transports, name) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) +` + +type CreatePasskeyCredentialParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` + CredentialID string `json:"credential_id"` + PublicKey string `json:"public_key"` + AttestationType string `json:"attestation_type"` + Aaguid string `json:"aaguid"` + SignCount int64 `json:"sign_count"` + Transports string `json:"transports"` + Name string `json:"name"` +} + +func (q *Queries) CreatePasskeyCredential(ctx context.Context, arg *CreatePasskeyCredentialParams) error { + _, err := q.db.ExecContext(ctx, createPasskeyCredential, + arg.ID, + arg.UserID, + arg.CredentialID, + arg.PublicKey, + arg.AttestationType, + arg.Aaguid, + arg.SignCount, + arg.Transports, + arg.Name, + ) + return err +} + +const deletePasskey = `-- name: DeletePasskey :exec +DELETE FROM passkey_credentials WHERE id = ? AND user_id = ? +` + +type DeletePasskeyParams struct { + ID string `json:"id"` + UserID string `json:"user_id"` +} + +func (q *Queries) DeletePasskey(ctx context.Context, arg *DeletePasskeyParams) error { + _, err := q.db.ExecContext(ctx, deletePasskey, arg.ID, arg.UserID) + return err +} + +const getPasskeyByCredentialID = `-- name: GetPasskeyByCredentialID :one +SELECT id, user_id, credential_id, public_key, attestation_type, aaguid, sign_count, transports, name, last_used_at, created_at FROM passkey_credentials WHERE credential_id = ? LIMIT 1 +` + +func (q *Queries) GetPasskeyByCredentialID(ctx context.Context, credentialID string) (*PasskeyCredential, error) { + row := q.db.QueryRowContext(ctx, getPasskeyByCredentialID, credentialID) + var i PasskeyCredential + err := row.Scan( + &i.ID, + &i.UserID, + &i.CredentialID, + &i.PublicKey, + &i.AttestationType, + &i.Aaguid, + &i.SignCount, + &i.Transports, + &i.Name, + &i.LastUsedAt, + &i.CreatedAt, + ) + return &i, err +} + +const listPasskeysByUser = `-- name: ListPasskeysByUser :many +SELECT id, user_id, credential_id, public_key, attestation_type, aaguid, sign_count, transports, name, last_used_at, created_at FROM passkey_credentials WHERE user_id = ? ORDER BY created_at DESC +` + +func (q *Queries) ListPasskeysByUser(ctx context.Context, userID string) ([]*PasskeyCredential, error) { + rows, err := q.db.QueryContext(ctx, listPasskeysByUser, userID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []*PasskeyCredential{} + for rows.Next() { + var i PasskeyCredential + if err := rows.Scan( + &i.ID, + &i.UserID, + &i.CredentialID, + &i.PublicKey, + &i.AttestationType, + &i.Aaguid, + &i.SignCount, + &i.Transports, + &i.Name, + &i.LastUsedAt, + &i.CreatedAt, + ); err != nil { + return nil, err + } + items = append(items, &i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const updatePasskeyLastUsed = `-- name: UpdatePasskeyLastUsed :exec +UPDATE passkey_credentials SET last_used_at = CURRENT_TIMESTAMP, sign_count = ? WHERE id = ? +` + +type UpdatePasskeyLastUsedParams struct { + SignCount int64 `json:"sign_count"` + ID string `json:"id"` +} + +func (q *Queries) UpdatePasskeyLastUsed(ctx context.Context, arg *UpdatePasskeyLastUsedParams) error { + _, err := q.db.ExecContext(ctx, updatePasskeyLastUsed, arg.SignCount, arg.ID) + return err +} diff --git a/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go index 7b62170..30e1052 100644 --- a/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go +++ b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go @@ -42,6 +42,27 @@ func (q *Queries) ConsumeRefreshToken(ctx context.Context, tokenHash string) (*R return &i, err } +const findAnyRefreshTokenByHash = `-- name: FindAnyRefreshTokenByHash :one +SELECT id, user_id, token_hash, parent_id, expires_at, created_at, revoked_at FROM refresh_tokens +WHERE token_hash = ? +LIMIT 1 +` + +func (q *Queries) FindAnyRefreshTokenByHash(ctx context.Context, tokenHash string) (*RefreshToken, error) { + row := q.db.QueryRowContext(ctx, findAnyRefreshTokenByHash, tokenHash) + var i RefreshToken + err := row.Scan( + &i.ID, + &i.UserID, + &i.TokenHash, + &i.ParentID, + &i.ExpiresAt, + &i.CreatedAt, + &i.RevokedAt, + ) + return &i, err +} + const findRefreshTokenByHash = `-- name: FindRefreshTokenByHash :one SELECT id, user_id, token_hash, parent_id, expires_at, created_at, revoked_at FROM refresh_tokens WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > CURRENT_TIMESTAMP diff --git a/backend/internal/storage/sqlc/query/auth_methods.sql b/backend/internal/storage/sqlc/query/auth_methods.sql new file mode 100644 index 0000000..8e59965 --- /dev/null +++ b/backend/internal/storage/sqlc/query/auth_methods.sql @@ -0,0 +1,12 @@ +-- name: CreateAuthMethod :exec +INSERT INTO user_auth_methods (id, user_id, provider_type, provider_user_id, metadata) +VALUES (?, ?, ?, ?, ?); + +-- name: GetAuthMethodByProvider :one +SELECT * FROM user_auth_methods WHERE provider_type = ? AND provider_user_id = ? LIMIT 1; + +-- name: ListAuthMethodsByUser :many +SELECT * FROM user_auth_methods WHERE user_id = ?; + +-- name: DeleteAuthMethod :exec +DELETE FROM user_auth_methods WHERE id = ? AND user_id = ?; diff --git a/backend/internal/storage/sqlc/query/challenges.sql b/backend/internal/storage/sqlc/query/challenges.sql new file mode 100644 index 0000000..5ffc2ba --- /dev/null +++ b/backend/internal/storage/sqlc/query/challenges.sql @@ -0,0 +1,12 @@ +-- name: CreateChallenge :exec +INSERT INTO auth_challenges (id, challenge, user_id, flow_type, expires_at) +VALUES (?, ?, ?, ?, ?); + +-- name: GetChallenge :one +SELECT * FROM auth_challenges WHERE id = ? AND expires_at > CURRENT_TIMESTAMP LIMIT 1; + +-- name: DeleteChallenge :exec +DELETE FROM auth_challenges WHERE id = ?; + +-- name: CleanupExpiredChallenges :exec +DELETE FROM auth_challenges WHERE expires_at < CURRENT_TIMESTAMP; diff --git a/backend/internal/storage/sqlc/query/passkey.sql b/backend/internal/storage/sqlc/query/passkey.sql new file mode 100644 index 0000000..0fe80ca --- /dev/null +++ b/backend/internal/storage/sqlc/query/passkey.sql @@ -0,0 +1,15 @@ +-- name: CreatePasskeyCredential :exec +INSERT INTO passkey_credentials (id, user_id, credential_id, public_key, attestation_type, aaguid, sign_count, transports, name) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); + +-- name: GetPasskeyByCredentialID :one +SELECT * FROM passkey_credentials WHERE credential_id = ? LIMIT 1; + +-- name: ListPasskeysByUser :many +SELECT * FROM passkey_credentials WHERE user_id = ? ORDER BY created_at DESC; + +-- name: UpdatePasskeyLastUsed :exec +UPDATE passkey_credentials SET last_used_at = CURRENT_TIMESTAMP, sign_count = ? WHERE id = ?; + +-- name: DeletePasskey :exec +DELETE FROM passkey_credentials WHERE id = ? AND user_id = ?; diff --git a/backend/internal/storage/sqlc/query/refresh_tokens.sql b/backend/internal/storage/sqlc/query/refresh_tokens.sql index 865b38f..dcd5134 100644 --- a/backend/internal/storage/sqlc/query/refresh_tokens.sql +++ b/backend/internal/storage/sqlc/query/refresh_tokens.sql @@ -22,3 +22,8 @@ WHERE id = ? OR parent_id = ?; -- name: CleanupExpiredTokens :exec DELETE FROM refresh_tokens WHERE expires_at < CURRENT_TIMESTAMP; + +-- name: FindAnyRefreshTokenByHash :one +SELECT * FROM refresh_tokens +WHERE token_hash = ? +LIMIT 1; diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go index 37fdad3..80a4640 100644 --- a/backend/internal/storage/sqlite.go +++ b/backend/internal/storage/sqlite.go @@ -18,6 +18,17 @@ import ( //go:embed migrations/sqlite/0001_initial.up.sql var sqliteMigration001 string +//go:embed migrations/sqlite/0002_auth_hardening.up.sql +var sqliteMigration002 string + +var sqliteMigrations = []struct { + Version int + SQL string +}{ + {1, sqliteMigration001}, + {2, sqliteMigration002}, +} + type sqliteProvider struct { db *sql.DB q *sqlc.Queries @@ -42,10 +53,29 @@ func (s *sqliteProvider) Name() string { return "sqlite" } func (s *sqliteProvider) Close() error { return s.db.Close() } func (s *sqliteProvider) Init(ctx context.Context) error { - // 运行迁移 - if _, err := s.db.ExecContext(ctx, sqliteMigration001); err != nil { - return fmt.Errorf("run migration 0001: %w", err) + // 确保 schema_migrations 表存在 + if _, err := s.db.ExecContext(ctx, `CREATE TABLE IF NOT EXISTS schema_migrations (version BIGINT PRIMARY KEY, dirty BOOLEAN NOT NULL DEFAULT FALSE)`); err != nil { + return fmt.Errorf("create schema_migrations: %w", err) + } + + // 获取当前已应用的最高版本 + currentVersion := 0 + row := s.db.QueryRowContext(ctx, `SELECT COALESCE(MAX(version), 0) FROM schema_migrations`) + _ = row.Scan(¤tVersion) + + // 按顺序应用未执行的迁移 + for _, m := range sqliteMigrations { + if m.Version <= currentVersion { + continue + } + if _, err := s.db.ExecContext(ctx, m.SQL); err != nil { + return fmt.Errorf("run migration %04d: %w", m.Version, err) + } + if _, err := s.db.ExecContext(ctx, `INSERT OR REPLACE INTO schema_migrations (version, dirty) VALUES (?, FALSE)`, m.Version); err != nil { + return fmt.Errorf("record migration %04d: %w", m.Version, err) + } } + return nil } @@ -420,14 +450,269 @@ func (s *sqliteProvider) HasAdminUser(ctx context.Context) (bool, error) { return s.q.HasAdminUser(ctx) } -func (s *sqliteProvider) UpdateUserPasswordHash(ctx context.Context, userID, newHash string) error { +func (s *sqliteProvider) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { return s.q.UpdateUserPasswordHash(ctx, &sqlc.UpdateUserPasswordHashParams{ PasswordHash: newHash, - PasswordSalt: "", + PasswordSalt: newSalt, ID: userID, }) } +// ==================== Refresh Token 族 ==================== + +func (s *sqliteProvider) FindAnyRefreshTokenByHash(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + row, err := s.q.FindAnyRefreshTokenByHash(ctx, tokenHash) + if err != nil { + return RefreshTokenRecord{}, err + } + return RefreshTokenRecord{ + ID: row.ID, + UserID: row.UserID, + TokenHash: row.TokenHash, + ParentID: row.ParentID.String, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + RevokedAt: row.RevokedAt.Time, + }, nil +} + +func (s *sqliteProvider) RevokeRefreshTokenFamily(ctx context.Context, tokenID string) error { + return s.q.RevokeRefreshTokenFamily(ctx, &sqlc.RevokeRefreshTokenFamilyParams{ + ID: tokenID, + ParentID: sql.NullString{String: tokenID, Valid: true}, + }) +} + +// ==================== Sessions ==================== + +func (s *sqliteProvider) CreateSession(ctx context.Context, rec SessionRecord) error { + return s.q.CreateSession(ctx, &sqlc.CreateSessionParams{ + ID: rec.ID, + UserID: rec.UserID, + RefreshTokenID: sql.NullString{String: rec.RefreshTokenID, Valid: rec.RefreshTokenID != ""}, + DeviceName: sql.NullString{String: rec.DeviceName, Valid: rec.DeviceName != ""}, + DeviceType: sql.NullString{String: rec.DeviceType, Valid: rec.DeviceType != ""}, + IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, + UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, + }) +} + +func (s *sqliteProvider) ListSessionsByUser(ctx context.Context, userID string) ([]SessionRecord, error) { + rows, err := s.q.ListSessionsByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]SessionRecord, 0, len(rows)) + for _, r := range rows { + items = append(items, SessionRecord{ + ID: r.ID, + UserID: r.UserID, + RefreshTokenID: r.RefreshTokenID.String, + DeviceName: r.DeviceName.String, + DeviceType: r.DeviceType.String, + IPAddress: r.IpAddress.String, + UserAgent: r.UserAgent.String, + CreatedAt: r.CreatedAt, + LastSeenAt: r.LastSeenAt, + }) + } + return items, nil +} + +func (s *sqliteProvider) RevokeSession(ctx context.Context, sessionID string) error { + return s.q.RevokeSession(ctx, sessionID) +} + +func (s *sqliteProvider) RevokeOtherSessions(ctx context.Context, userID, currentSessionID string) error { + return s.q.RevokeOtherSessions(ctx, &sqlc.RevokeOtherSessionsParams{ + UserID: userID, + ID: currentSessionID, + }) +} + +func (s *sqliteProvider) UpdateSessionLastSeen(ctx context.Context, sessionID string) error { + return s.q.UpdateSessionLastSeen(ctx, sessionID) +} + +// ==================== Audit Log ==================== + +func (s *sqliteProvider) CreateAuditLog(ctx context.Context, rec AuditRecord) error { + return s.q.CreateAuditLog(ctx, &sqlc.CreateAuditLogParams{ + ID: rec.ID, + UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, + Action: rec.Action, + IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, + UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, + Detail: sql.NullString{String: rec.Detail, Valid: rec.Detail != ""}, + }) +} + +func (s *sqliteProvider) ListAuditLogs(ctx context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { + rows, err := s.q.GetAuditLogs(ctx, &sqlc.GetAuditLogsParams{ + UserID: userID, + Action: action, + Limit: int64(limit), + Offset: int64(offset), + }) + if err != nil { + return nil, err + } + items := make([]AuditRecord, 0, len(rows)) + for _, r := range rows { + items = append(items, AuditRecord{ + ID: r.ID, + UserID: r.UserID.String, + Action: r.Action, + IPAddress: r.IpAddress.String, + UserAgent: r.UserAgent.String, + Detail: r.Detail.String, + CreatedAt: r.CreatedAt, + }) + } + return items, nil +} + +func (s *sqliteProvider) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { + count, err := s.q.CountAuditLogs(ctx, &sqlc.CountAuditLogsParams{ + UserID: userID, + Action: action, + }) + return int(count), err +} + +// ==================== Passkey ==================== + +func (s *sqliteProvider) CreatePasskeyCredential(ctx context.Context, rec PasskeyCredential) error { + return s.q.CreatePasskeyCredential(ctx, &sqlc.CreatePasskeyCredentialParams{ + ID: rec.ID, + UserID: rec.UserID, + CredentialID: rec.CredentialID, + PublicKey: rec.PublicKey, + AttestationType: rec.AttestationType, + Aaguid: rec.AAGUID, + SignCount: int64(rec.SignCount), + Transports: rec.Transports, + Name: rec.Name, + }) +} + +func (s *sqliteProvider) GetPasskeyByCredentialID(ctx context.Context, credentialID string) (PasskeyCredential, error) { + row, err := s.q.GetPasskeyByCredentialID(ctx, credentialID) + if err != nil { + return PasskeyCredential{}, err + } + return PasskeyCredential{ + ID: row.ID, + UserID: row.UserID, + CredentialID: row.CredentialID, + PublicKey: row.PublicKey, + AttestationType: row.AttestationType, + AAGUID: row.Aaguid, + SignCount: uint32(row.SignCount), + Transports: row.Transports, + Name: row.Name, + LastUsedAt: row.LastUsedAt.Time, + CreatedAt: row.CreatedAt, + }, nil +} + +func (s *sqliteProvider) ListPasskeysByUser(ctx context.Context, userID string) ([]PasskeyCredential, error) { + rows, err := s.q.ListPasskeysByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]PasskeyCredential, 0, len(rows)) + for _, r := range rows { + items = append(items, PasskeyCredential{ + ID: r.ID, + UserID: r.UserID, + CredentialID: r.CredentialID, + PublicKey: r.PublicKey, + AttestationType: r.AttestationType, + AAGUID: r.Aaguid, + SignCount: uint32(r.SignCount), + Transports: r.Transports, + Name: r.Name, + LastUsedAt: r.LastUsedAt.Time, + CreatedAt: r.CreatedAt, + }) + } + return items, nil +} + +func (s *sqliteProvider) UpdatePasskeyLastUsed(ctx context.Context, id string, signCount uint32) error { + return s.q.UpdatePasskeyLastUsed(ctx, &sqlc.UpdatePasskeyLastUsedParams{ + SignCount: int64(signCount), + ID: id, + }) +} + +func (s *sqliteProvider) DeletePasskey(ctx context.Context, id, userID string) error { + return s.q.DeletePasskey(ctx, &sqlc.DeletePasskeyParams{ID: id, UserID: userID}) +} + +// ==================== Challenge ==================== + +func (s *sqliteProvider) CreateChallenge(ctx context.Context, rec ChallengeRecord) error { + return s.q.CreateChallenge(ctx, &sqlc.CreateChallengeParams{ + ID: rec.ID, + Challenge: rec.Challenge, + UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, + FlowType: rec.FlowType, + ExpiresAt: rec.ExpiresAt, + }) +} + +func (s *sqliteProvider) GetChallenge(ctx context.Context, id string) (ChallengeRecord, error) { + row, err := s.q.GetChallenge(ctx, id) + if err != nil { + return ChallengeRecord{}, err + } + return ChallengeRecord{ + ID: row.ID, + Challenge: row.Challenge, + UserID: row.UserID.String, + FlowType: row.FlowType, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + }, nil +} + +func (s *sqliteProvider) DeleteChallenge(ctx context.Context, id string) error { + return s.q.DeleteChallenge(ctx, id) +} + +// ==================== Auth Methods ==================== + +func (s *sqliteProvider) CreateAuthMethod(ctx context.Context, rec AuthMethodRecord) error { + return s.q.CreateAuthMethod(ctx, &sqlc.CreateAuthMethodParams{ + ID: rec.ID, + UserID: rec.UserID, + ProviderType: rec.ProviderType, + ProviderUserID: rec.ProviderUserID, + Metadata: rec.Metadata, + }) +} + +func (s *sqliteProvider) GetAuthMethodByProvider(ctx context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { + row, err := s.q.GetAuthMethodByProvider(ctx, &sqlc.GetAuthMethodByProviderParams{ + ProviderType: providerType, + ProviderUserID: providerUserID, + }) + if err != nil { + return AuthMethodRecord{}, err + } + return AuthMethodRecord{ + ID: row.ID, + UserID: row.UserID, + ProviderType: row.ProviderType, + ProviderUserID: row.ProviderUserID, + Metadata: row.Metadata, + CreatedAt: row.CreatedAt, + UpdatedAt: row.UpdatedAt, + }, nil +} + // ==================== Type conversions ==================== func (s *sqliteProvider) rowToUser(row *sqlc.User) UserRecord { diff --git a/backend/internal/storage/storage.go b/backend/internal/storage/storage.go index b40b8dc..2d290a1 100644 --- a/backend/internal/storage/storage.go +++ b/backend/internal/storage/storage.go @@ -23,6 +23,7 @@ type RefreshTokenRecord struct { ID string `json:"id"` UserID string `json:"user_id"` TokenHash string `json:"token_hash"` + ParentID string `json:"parent_id"` ExpiresAt time.Time `json:"expires_at"` CreatedAt time.Time `json:"created_at"` RevokedAt time.Time `json:"revoked_at"` @@ -51,6 +52,61 @@ type SetupRecord struct { UsageMode string `json:"usage_mode"` } +type SessionRecord struct { + ID string `json:"id"` + UserID string `json:"user_id"` + RefreshTokenID string `json:"refresh_token_id"` + DeviceName string `json:"device_name"` + DeviceType string `json:"device_type"` + IPAddress string `json:"ip_address"` + UserAgent string `json:"user_agent"` + CreatedAt time.Time `json:"created_at"` + LastSeenAt time.Time `json:"last_seen_at"` +} + +type AuditRecord struct { + ID string `json:"id"` + UserID string `json:"user_id"` + Action string `json:"action"` + IPAddress string `json:"ip_address"` + UserAgent string `json:"user_agent"` + Detail string `json:"detail"` + CreatedAt time.Time `json:"created_at"` +} + +type PasskeyCredential struct { + ID string `json:"id"` + UserID string `json:"user_id"` + CredentialID string `json:"credential_id"` + PublicKey string `json:"public_key"` + AttestationType string `json:"attestation_type"` + AAGUID string `json:"aaguid"` + SignCount uint32 `json:"sign_count"` + Transports string `json:"transports"` + Name string `json:"name"` + LastUsedAt time.Time `json:"last_used_at"` + CreatedAt time.Time `json:"created_at"` +} + +type ChallengeRecord struct { + ID string `json:"id"` + Challenge string `json:"challenge"` + UserID string `json:"user_id"` + FlowType string `json:"flow_type"` + ExpiresAt time.Time `json:"expires_at"` + CreatedAt time.Time `json:"created_at"` +} + +type AuthMethodRecord struct { + ID string `json:"id"` + UserID string `json:"user_id"` + ProviderType string `json:"provider_type"` + ProviderUserID string `json:"provider_user_id"` + Metadata string `json:"metadata"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + type Provider interface { Name() string Init(context.Context) error @@ -73,6 +129,40 @@ type Provider interface { GetSetupStatus(context.Context) (SetupStatus, error) SaveSetup(context.Context, SetupRecord) error HasAdminUser(context.Context) (bool, error) - UpdateUserPasswordHash(context.Context, string, string) error + UpdateUserPasswordHash(context.Context, string, string, string) error // userID, newHash, newSalt + + // 重放检测:查找任何匹配的 token(包括已撤销的) + FindAnyRefreshTokenByHash(context.Context, string) (RefreshTokenRecord, error) + // 令牌族撤销:按 parent_id 链撤销整族 + RevokeRefreshTokenFamily(context.Context, string) error + + // 会话管理 + CreateSession(context.Context, SessionRecord) error + ListSessionsByUser(context.Context, string) ([]SessionRecord, error) + RevokeSession(context.Context, string) error + RevokeOtherSessions(context.Context, string, string) error // userID, currentSessionID + UpdateSessionLastSeen(context.Context, string) error + + // 审计日志 + CreateAuditLog(context.Context, AuditRecord) error + ListAuditLogs(context.Context, string, string, int, int) ([]AuditRecord, error) // userID, action, limit, offset + CountAuditLogs(context.Context, string, string) (int, error) + + // Passkey + CreatePasskeyCredential(context.Context, PasskeyCredential) error + GetPasskeyByCredentialID(context.Context, string) (PasskeyCredential, error) + ListPasskeysByUser(context.Context, string) ([]PasskeyCredential, error) + UpdatePasskeyLastUsed(context.Context, string, uint32) error // id, signCount + DeletePasskey(context.Context, string, string) error // id, userID + + // 认证 Challenge + CreateChallenge(context.Context, ChallengeRecord) error + GetChallenge(context.Context, string) (ChallengeRecord, error) + DeleteChallenge(context.Context, string) error + + // 统一认证方式 + CreateAuthMethod(context.Context, AuthMethodRecord) error + GetAuthMethodByProvider(context.Context, string, string) (AuthMethodRecord, error) // providerType, providerUserID + Close() error } From 6ef337a6a91e61861e2aef260989e580372cba90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 16:06:12 +0800 Subject: [PATCH 15/20] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E5=85=A8?= =?UTF-8?q?=E6=A0=88=E5=8A=9F=E8=83=BD=E8=BF=AD=E4=BB=A3=E4=B8=8E=E5=9F=BA?= =?UTF-8?q?=E5=BB=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 包含 passkey 认证、会话管理、审计日志、Android 客户端适配与工程规范更新 --- .../mobile/auth/CommoryServerAuthProvider.kt | 10 +- .../mobile/remote/CommoryServerClient.kt | 53 ++- .../commory/mobile/runtime/AppEnvironment.kt | 2 + .../mobile/runtime/AppEnvironmentManager.kt | 6 + backend/go.mod | 14 +- backend/go.sum | 32 ++ backend/internal/api/audit.go | 58 +++ backend/internal/api/auth_oauth.go | 72 ++++ backend/internal/api/auth_passkey.go | 183 +++++++++ backend/internal/api/mobile_contract_test.go | 138 ++++++- backend/internal/api/server.go | 337 +---------------- backend/internal/api/sessions.go | 110 ++++++ backend/internal/auth/middleware.go | 16 +- backend/internal/auth/passkey/encoding.go | 20 + backend/internal/auth/passkey/service.go | 61 +-- backend/internal/auth/passkey/user.go | 6 +- backend/internal/auth/service.go | 162 ++++++-- .../storage/contracttest/filestore_test.go | 19 + backend/internal/storage/filestore.go | 358 +++++++++++++++--- .../storage/sqlc/gen/refresh_tokens.sql.go | 28 +- .../internal/storage/sqlc/gen/sessions.sql.go | 38 ++ .../internal/storage/sqlc/gen/setup.sql.go | 10 +- .../storage/sqlc/query/refresh_tokens.sql | 15 +- .../internal/storage/sqlc/query/sessions.sql | 8 + backend/internal/storage/sqlc/query/setup.sql | 8 +- backend/internal/storage/sqlite.go | 124 +++--- backend/internal/storage/sqlite_test.go | 50 +++ backend/internal/storage/storage.go | 26 +- docs/engineering-standards.md | 5 + 29 files changed, 1429 insertions(+), 540 deletions(-) create mode 100644 backend/internal/api/audit.go create mode 100644 backend/internal/api/auth_oauth.go create mode 100644 backend/internal/api/auth_passkey.go create mode 100644 backend/internal/api/sessions.go create mode 100644 backend/internal/auth/passkey/encoding.go create mode 100644 backend/internal/storage/contracttest/filestore_test.go diff --git a/android/app/src/main/java/com/iskenkenya/commory/mobile/auth/CommoryServerAuthProvider.kt b/android/app/src/main/java/com/iskenkenya/commory/mobile/auth/CommoryServerAuthProvider.kt index c9867f4..d38c266 100644 --- a/android/app/src/main/java/com/iskenkenya/commory/mobile/auth/CommoryServerAuthProvider.kt +++ b/android/app/src/main/java/com/iskenkenya/commory/mobile/auth/CommoryServerAuthProvider.kt @@ -1,6 +1,8 @@ package com.iskenkenya.commory.mobile.auth import com.iskenkenya.commory.mobile.remote.CommoryServerClient +import com.iskenkenya.commory.mobile.remote.NetworkError +import com.iskenkenya.commory.mobile.remote.NetworkException import com.iskenkenya.commory.mobile.runtime.AppEnvironmentManager import com.iskenkenya.commory.mobile.runtime.AuthSession import com.iskenkenya.commory.sdk.auth.AuthCredentials @@ -46,7 +48,13 @@ class CommoryServerAuthProvider( override suspend fun refreshToken(): AuthResult { val refreshed = serverClient.refreshPersistedSession() - .getOrElse { return AuthResult.Error("REFRESH_FAILED", it.message ?: "refresh failed") } + .getOrElse { + if (it is NetworkException && it.error is NetworkError.Unauthorized) { + _isAuthenticated.value = false + _currentUser.value = null + } + return AuthResult.Error("REFRESH_FAILED", it.message ?: "refresh failed") + } _isAuthenticated.value = true _currentUser.value = refreshed.toUserInfo() return AuthResult.Success(refreshed.accessToken.orEmpty(), refreshed.toUserInfo()!!) diff --git a/android/app/src/main/java/com/iskenkenya/commory/mobile/remote/CommoryServerClient.kt b/android/app/src/main/java/com/iskenkenya/commory/mobile/remote/CommoryServerClient.kt index 77608c1..9100e59 100644 --- a/android/app/src/main/java/com/iskenkenya/commory/mobile/remote/CommoryServerClient.kt +++ b/android/app/src/main/java/com/iskenkenya/commory/mobile/remote/CommoryServerClient.kt @@ -2,6 +2,7 @@ package com.iskenkenya.commory.mobile.remote import android.content.Context import android.util.Base64 +import android.os.Build import com.iskenkenya.commory.mobile.runtime.AppEnvironmentManager import com.iskenkenya.commory.mobile.runtime.AuthSession import kotlinx.coroutines.Dispatchers @@ -25,13 +26,11 @@ class CommoryServerClient( ) { private val serviceCache = ConcurrentHashMap() private val refreshServiceCache = ConcurrentHashMap() + private val deviceName = buildDeviceName() private val refreshClient = baseClientBuilder().build() - private val client = OkHttpClient.Builder() - .connectTimeout(15, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) + private val client = baseClientBuilder() .authenticator { _, response -> if (responseCount(response) > 1 || response.request().url().encodedPath().contains("/api/auth/")) { return@authenticator null @@ -48,6 +47,12 @@ class CommoryServerClient( .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) + .addInterceptor { chain -> + val request = chain.request().newBuilder() + .header("X-Commory-Device", deviceName) + .build() + chain.proceed(request) + } private fun service(baseUrl: String): CommoryApiService { val normalized = normalizeBaseUrl(baseUrl) @@ -94,7 +99,9 @@ class CommoryServerClient( currentSession.copy( accessToken = accessToken, refreshToken = pair.refreshToken, - accessTokenExpiresAtEpochSeconds = accessTokenExpiresAt(accessToken) + accessTokenExpiresAtEpochSeconds = accessTokenExpiresAt(accessToken), + sessionId = accessTokenSessionId(accessToken) ?: currentSession.sessionId, + deviceName = currentSession.deviceName ?: deviceName ) } @@ -146,14 +153,20 @@ class CommoryServerClient( suspend fun refreshPersistedSession(): Result = wrapCall { val environment = environmentManager.currentSnapshot() val refreshToken = environment.authSession.refreshToken ?: error("missing refresh token") - val updated = refresh(environment.serverUrl, refreshToken, environment.authSession).getOrThrow() + val updated = refresh(environment.serverUrl, refreshToken, environment.authSession).getOrElse { throwable -> + if (throwable.isTerminalAuthFailure()) { + environmentManager.clearSession() + } + throw throwable + } val userResponse = refreshService(environment.serverUrl).getUserInfo(bearer(updated.accessToken ?: "")) require(userResponse.isSuccessful) { userResponse.body()?.msg ?: userResponse.errorBody()?.string() ?: "user info failed" } val user = userResponse.body()?.data ?: error(userResponse.body()?.msg ?: "missing user payload") val session = updated.copy( userId = user.id, userName = user.userName ?: user.user_name, - email = user.email + email = user.email, + deviceName = updated.deviceName ?: deviceName ) environmentManager.updateSession(session) session @@ -189,6 +202,8 @@ class CommoryServerClient( accessToken = token, refreshToken = refreshToken, accessTokenExpiresAtEpochSeconds = accessTokenExpiresAt(token), + sessionId = accessTokenSessionId(token), + deviceName = deviceName, userId = user.id, userName = user.userName ?: user.user_name, email = user.email @@ -204,6 +219,15 @@ class CommoryServerClient( }.getOrNull() } + private fun accessTokenSessionId(token: String?): String? { + if (token.isNullOrBlank()) return null + return runCatching { + val payload = token.split(".").getOrNull(1) ?: return null + val decoded = Base64.decode(payload, Base64.URL_SAFE or Base64.NO_PADDING or Base64.NO_WRAP) + JSONObject(String(decoded)).optString("sid").takeIf { it.isNotBlank() } + }.getOrNull() + } + private fun responseCount(response: Response): Int { var count = 1 var prior = response.priorResponse() @@ -213,4 +237,19 @@ class CommoryServerClient( } return count } + + private fun buildDeviceName(): String { + val manufacturer = Build.MANUFACTURER?.trim().orEmpty() + val model = Build.MODEL?.trim().orEmpty() + return listOf(manufacturer, model) + .filter { it.isNotBlank() } + .distinct() + .joinToString(" ") + .ifBlank { "Android Device" } + } + + private fun Throwable.isTerminalAuthFailure(): Boolean { + val network = this as? NetworkException ?: return false + return network.error is NetworkError.Unauthorized + } } diff --git a/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironment.kt b/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironment.kt index cac38d4..856a7d3 100644 --- a/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironment.kt +++ b/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironment.kt @@ -15,6 +15,8 @@ data class AuthSession( val accessToken: String? = null, val refreshToken: String? = null, val accessTokenExpiresAtEpochSeconds: Long? = null, + val sessionId: String? = null, + val deviceName: String? = null, val userId: String? = null, val userName: String? = null, val email: String? = null diff --git a/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironmentManager.kt b/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironmentManager.kt index 87da665..8fda8e1 100644 --- a/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironmentManager.kt +++ b/android/app/src/main/java/com/iskenkenya/commory/mobile/runtime/AppEnvironmentManager.kt @@ -40,6 +40,8 @@ class AppEnvironmentManager(context: Context) { accessToken = preferences[KEY_ACCESS_TOKEN], refreshToken = preferences[KEY_REFRESH_TOKEN], accessTokenExpiresAtEpochSeconds = preferences[KEY_ACCESS_TOKEN_EXPIRES_AT]?.toLongOrNull(), + sessionId = preferences[KEY_SESSION_ID], + deviceName = preferences[KEY_DEVICE_NAME], userId = preferences[KEY_USER_ID], userName = preferences[KEY_USER_NAME], email = preferences[KEY_EMAIL] @@ -80,6 +82,8 @@ class AppEnvironmentManager(context: Context) { setOrRemove(preferences, KEY_ACCESS_TOKEN, session.accessToken) setOrRemove(preferences, KEY_REFRESH_TOKEN, session.refreshToken) setOrRemove(preferences, KEY_ACCESS_TOKEN_EXPIRES_AT, session.accessTokenExpiresAtEpochSeconds?.toString()) + setOrRemove(preferences, KEY_SESSION_ID, session.sessionId) + setOrRemove(preferences, KEY_DEVICE_NAME, session.deviceName) setOrRemove(preferences, KEY_USER_ID, session.userId) setOrRemove(preferences, KEY_USER_NAME, session.userName) setOrRemove(preferences, KEY_EMAIL, session.email) @@ -134,6 +138,8 @@ class AppEnvironmentManager(context: Context) { val KEY_ACCESS_TOKEN = stringPreferencesKey("access_token") val KEY_REFRESH_TOKEN = stringPreferencesKey("refresh_token") val KEY_ACCESS_TOKEN_EXPIRES_AT = stringPreferencesKey("access_token_expires_at") + val KEY_SESSION_ID = stringPreferencesKey("session_id") + val KEY_DEVICE_NAME = stringPreferencesKey("device_name") val KEY_USER_ID = stringPreferencesKey("user_id") val KEY_USER_NAME = stringPreferencesKey("user_name") val KEY_EMAIL = stringPreferencesKey("email") diff --git a/backend/go.mod b/backend/go.mod index 17d78e6..229b5db 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -7,4 +7,16 @@ require ( github.com/mattn/go-sqlite3 v1.14.44 ) -require github.com/go-webauthn/webauthn v0.17.3 // indirect +require ( + github.com/fxamacker/cbor/v2 v2.9.2 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/go-webauthn/webauthn v0.17.3 + github.com/go-webauthn/x v0.2.5 // indirect + github.com/golang-jwt/jwt/v5 v5.3.1 // indirect + github.com/google/go-tpm v0.9.8 // indirect + github.com/philhofer/fwd v1.2.0 // indirect + github.com/tinylib/msgp v1.6.4 // indirect + github.com/x448/float16 v0.8.4 // indirect + golang.org/x/crypto v0.51.0 // indirect + golang.org/x/sys v0.44.0 // indirect +) diff --git a/backend/go.sum b/backend/go.sum index 9feb082..fe5bd63 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -1,6 +1,38 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= +github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-webauthn/webauthn v0.17.3 h1:XHZ0TXV7k8vChcE4TFgPitOPJ5cb7h1dpAeFDS0cjCo= github.com/go-webauthn/webauthn v0.17.3/go.mod h1:PlkMgmuL9McCT7dvgBj/Sz/fgs3V6ZID6/KnFkEcPvQ= +github.com/go-webauthn/x v0.2.5 h1:wEVTfU04XFyPTXGQbKOQwMKhcDWfDAkdsDDBsDaG9yY= +github.com/go-webauthn/x v0.2.5/go.mod h1:Qna/yJz9rV6lRzwl5BfYbmTJpVGxcBIds3gJtw2tlGg= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= +github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tpm-tools v0.3.13-0.20230620182252-4639ecce2aba h1:qJEJcuLzH5KDR0gKc0zcktin6KSAwL7+jWKBYceddTc= +github.com/google/go-tpm-tools v0.3.13-0.20230620182252-4639ecce2aba/go.mod h1:EFYHy8/1y2KfgTAsx7Luu7NGhoxtuVHnNo8jE7FikKc= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= +github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tinylib/msgp v1.6.4 h1:mOwYbyYDLPj35mkA2BjjYejgJk9BuHxDdvRnb6v2ZcQ= +github.com/tinylib/msgp v1.6.4/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= +go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/backend/internal/api/audit.go b/backend/internal/api/audit.go new file mode 100644 index 0000000..0b99082 --- /dev/null +++ b/backend/internal/api/audit.go @@ -0,0 +1,58 @@ +package api + +import ( + "context" + "fmt" + "net/http" + "strconv" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" +) + +func (s *Server) handleAuditLogs(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + q := r.URL.Query() + userID := q.Get("user_id") + action := q.Get("action") + limit := 50 + if v, err := strconv.Atoi(q.Get("limit")); err == nil && v > 0 && v <= 200 { + limit = v + } + offset := 0 + if v, err := strconv.Atoi(q.Get("offset")); err == nil && v >= 0 { + offset = v + } + + logs, err := s.store.ListAuditLogs(r.Context(), userID, action, limit, offset) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + total, _ := s.store.CountAuditLogs(r.Context(), userID, action) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "items": logs, + "total": total, + "limit": limit, + "offset": offset, + }) +} + +func (s *Server) requireAdmin(ctx context.Context) error { + user, err := s.auth.UserInfo(ctx, auth.UserIDFromContext(ctx)) + if err != nil { + return err + } + for _, role := range user.Roles { + if role == "R_SUPER" || role == "R_ADMIN" { + return nil + } + } + return fmt.Errorf("admin privileges required") +} diff --git a/backend/internal/api/auth_oauth.go b/backend/internal/api/auth_oauth.go new file mode 100644 index 0000000..507a967 --- /dev/null +++ b/backend/internal/api/auth_oauth.go @@ -0,0 +1,72 @@ +package api + +import ( + "crypto/rand" + "fmt" + "net/http" + "strings" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func (s *Server) handleOAuthState(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + state := randomHex(16) + challengeID := randomHex(8) + _ = s.store.CreateChallenge(r.Context(), storage.ChallengeRecord{ + ID: challengeID, + Challenge: state, + FlowType: "oauth_state", + ExpiresAt: time.Now().UTC().Add(10 * time.Minute), + }) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "state": state, + "challengeId": challengeID, + }) +} + +func (s *Server) handleOAuthProviders(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + providers := s.oauth.ListEnabled() + type providerInfo struct { + Name string `json:"name"` + DisplayName string `json:"displayName"` + } + result := make([]providerInfo, 0, len(providers)) + for _, p := range providers { + result = append(result, providerInfo{Name: p.Name(), DisplayName: p.DisplayName()}) + } + writeJSON(w, http.StatusOK, "ok", result) +} + +func (s *Server) handleOAuthCallback(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + providerName := strings.TrimPrefix(r.URL.Path, "/api/oauth/") + providerName = strings.TrimSuffix(providerName, "/") + if providerName == "" || providerName == "state" || providerName == "providers" { + writeError(w, http.StatusBadRequest, "provider name required") + return + } + provider := s.oauth.Get(providerName) + if provider == nil { + writeError(w, http.StatusNotFound, fmt.Sprintf("oauth provider %q not found", providerName)) + return + } + writeJSON(w, http.StatusNotImplemented, "oauth callback not yet implemented", nil) +} + +func randomHex(n int) string { + b := make([]byte, n) + _, _ = rand.Read(b) + return fmt.Sprintf("%x", b) +} diff --git a/backend/internal/api/auth_passkey.go b/backend/internal/api/auth_passkey.go new file mode 100644 index 0000000..3a11734 --- /dev/null +++ b/backend/internal/api/auth_passkey.go @@ -0,0 +1,183 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/go-webauthn/webauthn/protocol" +) + +func (s *Server) handlePasskeyRegisterBegin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + cc, challengeID, err := s.passkey.BeginRegistration(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "options": cc, + "challengeId": challengeID, + }) +} + +func (s *Server) handlePasskeyRegisterFinish(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + var req struct { + ChallengeID string `json:"challengeId"` + Response any `json:"response"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + respJSON, _ := json.Marshal(req.Response) + parsed, err := protocol.ParseCredentialCreationResponseBody(strings.NewReader(string(respJSON))) + if err != nil { + writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) + return + } + if err := s.passkey.FinishRegistration(r.Context(), userID, req.ChallengeID, parsed); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + _ = s.auth.WriteAuditLog(r.Context(), userID, "passkey_register", r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent"), "") + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} + +func (s *Server) handlePasskeyLoginBegin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + assertion, challengeID, err := s.passkey.BeginLogin(r.Context()) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "options": assertion, + "challengeId": challengeID, + }) +} + +func (s *Server) handlePasskeyLoginFinish(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + var req struct { + ChallengeID string `json:"challengeId"` + Response any `json:"response"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + respJSON, _ := json.Marshal(req.Response) + parsed, err := protocol.ParseCredentialRequestResponseBody(strings.NewReader(string(respJSON))) + if err != nil { + writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) + return + } + userID, err := s.passkey.FinishLogin(r.Context(), req.ChallengeID, parsed) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + user, err := s.auth.UserInfo(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + userRecord, err := s.store.GetUser(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + pair, _, err := s.auth.IssueTokenPairForUser( + r.Context(), + userRecord, + r.Header.Get("X-Commory-Device"), + r.Header.Get("X-Forwarded-For"), + r.Header.Get("User-Agent"), + ) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + _ = s.auth.WriteAuditLog(r.Context(), userID, "login", r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent"), `{"method":"passkey"}`) + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handlePasskeys(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + userID := auth.UserIDFromContext(r.Context()) + passkeys, err := s.passkey.ListPasskeys(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", passkeys) +} + +func (s *Server) handlePasskeyDelete(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodDelete { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if s.passkey == nil { + writeError(w, http.StatusServiceUnavailable, "passkey not configured") + return + } + passkeyID := strings.TrimPrefix(r.URL.Path, "/api/auth/passkey/") + if passkeyID == "" { + writeError(w, http.StatusBadRequest, "passkey id required") + return + } + userID := auth.UserIDFromContext(r.Context()) + if err := s.passkey.DeletePasskey(r.Context(), userID, passkeyID); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + _ = s.auth.WriteAuditLog(r.Context(), userID, "passkey_delete", r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent"), fmt.Sprintf(`{"passkeyId":%q}`, passkeyID)) + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} diff --git a/backend/internal/api/mobile_contract_test.go b/backend/internal/api/mobile_contract_test.go index bc4835f..1a911c5 100644 --- a/backend/internal/api/mobile_contract_test.go +++ b/backend/internal/api/mobile_contract_test.go @@ -136,6 +136,13 @@ func TestMobileRefreshRotatesRefreshToken(t *testing.T) { if res.Code != http.StatusUnauthorized { t.Fatalf("expected old refresh token to be rejected, got %d", res.Code) } + var envelope struct { + Msg string `json:"msg"` + } + decodeJSON(t, res.Body.Bytes(), &envelope) + if envelope.Msg != "ERR_REFRESH_TOKEN_REPLAYED" { + t.Fatalf("expected replay error message, got %q", envelope.Msg) + } } func TestMobileLogoutRevokesRefreshToken(t *testing.T) { @@ -189,6 +196,80 @@ func TestMobileSetupInitializeRejectsRepeat(t *testing.T) { } } +func TestMobilePasskeyEnrollmentRoutesRequireAuth(t *testing.T) { + handler := newTestMobileHandler(t) + + req := httptest.NewRequest(http.MethodPost, "/api/auth/passkey/register/begin", nil) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusUnauthorized { + t.Fatalf("expected unauthenticated passkey begin to fail with 401, got %d", res.Code) + } + + session := registerMobileSession(t, handler, "passkey-user", "passkey@example.com") + authReq := httptest.NewRequest(http.MethodPost, "/api/auth/passkey/register/begin", nil) + authReq.Header.Set("Authorization", "Bearer "+session.Token) + authRes := httptest.NewRecorder() + handler.ServeHTTP(authRes, authReq) + if authRes.Code != http.StatusServiceUnavailable { + t.Fatalf("expected authenticated request to reach passkey handler, got %d", authRes.Code) + } +} + +func TestMobileSessionsDeleteOthersKeepsCurrentSession(t *testing.T) { + handler := newTestMobileHandler(t) + current := registerMobileSession(t, handler, "session-user", "session@example.com") + other := loginMobileSession(t, handler, "session-user") + + sessions := listMobileSessions(t, handler, current.Token) + if len(sessions) != 2 { + t.Fatalf("expected 2 sessions, got %d", len(sessions)) + } + currentCount := 0 + for _, session := range sessions { + if session.Current { + currentCount++ + } + } + if currentCount != 1 { + t.Fatalf("expected exactly one current session marker, got %d", currentCount) + } + + req := httptest.NewRequest(http.MethodDelete, "/api/sessions", nil) + req.Header.Set("Authorization", "Bearer "+current.Token) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusOK { + t.Fatalf("delete others status = %d, body = %s", res.Code, res.Body.String()) + } + + if _, _, code := tryRefreshMobileSession(t, handler, other.RefreshToken); code != http.StatusUnauthorized { + t.Fatalf("expected revoked secondary session refresh to fail, got %d", code) + } + if _, refreshed, code := tryRefreshMobileSession(t, handler, current.RefreshToken); code != http.StatusOK || refreshed.RefreshToken == "" { + t.Fatalf("expected current session refresh to survive, got status=%d refresh=%q", code, refreshed.RefreshToken) + } +} + +func TestMobileSessionDeleteRequiresOwnership(t *testing.T) { + handler := newTestMobileHandler(t) + owner := registerMobileSession(t, handler, "owner-user", "owner-user@example.com") + other := registerMobileSession(t, handler, "other-user", "other-user@example.com") + + otherSessions := listMobileSessions(t, handler, other.Token) + if len(otherSessions) != 1 { + t.Fatalf("expected 1 other session, got %d", len(otherSessions)) + } + + req := httptest.NewRequest(http.MethodDelete, "/api/sessions/"+otherSessions[0].ID, nil) + req.Header.Set("Authorization", "Bearer "+owner.Token) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusNotFound { + t.Fatalf("expected cross-user revoke to be hidden, got %d", res.Code) + } +} + func newTestMobileHandler(t *testing.T) http.Handler { t.Helper() store, err := storage.NewSQLiteProvider(filepath.Join(t.TempDir(), "commory.json")) @@ -217,6 +298,11 @@ type mobileAuthSession struct { RefreshToken string } +type mobileSessionRecord struct { + ID string `json:"id"` + Current bool `json:"current"` +} + func registerMobileSession(t *testing.T, handler http.Handler, userName, email string) mobileAuthSession { t.Helper() body := map[string]string{ @@ -249,6 +335,15 @@ func registerMobileSession(t *testing.T, handler http.Handler, userName, email s } func refreshMobileSession(t *testing.T, handler http.Handler, refreshToken string) mobileAuthSession { + t.Helper() + res, session, code := tryRefreshMobileSession(t, handler, refreshToken) + if code != http.StatusOK { + t.Fatalf("refresh status = %d, body = %s", code, res) + } + return session +} + +func tryRefreshMobileSession(t *testing.T, handler http.Handler, refreshToken string) (string, mobileAuthSession, int) { t.Helper() req := httptest.NewRequest(http.MethodPost, "/api/auth/refresh", bytes.NewReader(mustJSON(t, map[string]string{ "refreshToken": refreshToken, @@ -256,8 +351,31 @@ func refreshMobileSession(t *testing.T, handler http.Handler, refreshToken strin req.Header.Set("Content-Type", "application/json") res := httptest.NewRecorder() handler.ServeHTTP(res, req) + var envelope struct { + Data struct { + Token string `json:"token"` + RefreshToken string `json:"refreshToken"` + } `json:"data"` + } + _ = json.Unmarshal(res.Body.Bytes(), &envelope) + return res.Body.String(), mobileAuthSession{ + Token: envelope.Data.Token, + RefreshToken: envelope.Data.RefreshToken, + }, res.Code +} + +func loginMobileSession(t *testing.T, handler http.Handler, userName string) mobileAuthSession { + t.Helper() + payload := mustJSON(t, map[string]string{ + "userName": userName, + "password": "passw0rd!", + }) + req := httptest.NewRequest(http.MethodPost, "/api/auth/login", bytes.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) if res.Code != http.StatusOK { - t.Fatalf("refresh status = %d, body = %s", res.Code, res.Body.String()) + t.Fatalf("login status = %d, body = %s", res.Code, res.Body.String()) } var envelope struct { Data struct { @@ -267,11 +385,27 @@ func refreshMobileSession(t *testing.T, handler http.Handler, refreshToken strin } decodeJSON(t, res.Body.Bytes(), &envelope) if envelope.Data.Token == "" || envelope.Data.RefreshToken == "" { - t.Fatal("expected refreshed token pair") + t.Fatal("expected login token pair") } return mobileAuthSession{Token: envelope.Data.Token, RefreshToken: envelope.Data.RefreshToken} } +func listMobileSessions(t *testing.T, handler http.Handler, token string) []mobileSessionRecord { + t.Helper() + req := httptest.NewRequest(http.MethodGet, "/api/sessions", nil) + req.Header.Set("Authorization", "Bearer "+token) + res := httptest.NewRecorder() + handler.ServeHTTP(res, req) + if res.Code != http.StatusOK { + t.Fatalf("list sessions status = %d, body = %s", res.Code, res.Body.String()) + } + var envelope struct { + Data []mobileSessionRecord `json:"data"` + } + decodeJSON(t, res.Body.Bytes(), &envelope) + return envelope.Data +} + func mustJSON(t *testing.T, value any) []byte { t.Helper() data, err := json.Marshal(value) diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 3d57865..5352077 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -2,7 +2,6 @@ package api import ( "context" - "crypto/rand" "encoding/json" "fmt" "io" @@ -10,9 +9,7 @@ import ( "os" urlpath "path" "path/filepath" - "strconv" "strings" - "time" "github.com/IsKenKenYa/Commory/backend/internal/auth" "github.com/IsKenKenYa/Commory/backend/internal/auth/oauth" @@ -92,12 +89,12 @@ func (s *Server) Handler() http.Handler { privateMux.HandleFunc("/api/sessions", s.handleSessions) privateMux.HandleFunc("/api/sessions/", s.handleSession) privateMux.HandleFunc("/api/audit-log", s.handleAuditLogs) - privateMux.HandleFunc("/api/auth/passkey/register/begin", s.handlePasskeyRegisterBegin) - privateMux.HandleFunc("/api/auth/passkey/register/finish", s.handlePasskeyRegisterFinish) - privateMux.HandleFunc("/api/auth/passkey", s.handlePasskeys) - privateMux.HandleFunc("/api/auth/passkey/", s.handlePasskeyDelete) root := http.NewServeMux() + root.Handle("/api/auth/passkey/register/begin", auth.Middleware(s.auth, http.HandlerFunc(s.handlePasskeyRegisterBegin))) + root.Handle("/api/auth/passkey/register/finish", auth.Middleware(s.auth, http.HandlerFunc(s.handlePasskeyRegisterFinish))) + root.Handle("/api/auth/passkey", auth.Middleware(s.auth, http.HandlerFunc(s.handlePasskeys))) + root.Handle("/api/auth/passkey/", auth.Middleware(s.auth, http.HandlerFunc(s.handlePasskeyDelete))) root.Handle("/api/auth/", publicMux) root.Handle("/api/setup", publicMux) root.Handle("/api/", auth.Middleware(s.auth, privateMux)) @@ -200,6 +197,7 @@ func (s *Server) handleRefresh(w http.ResponseWriter, r *http.Request) { } pair, err := s.auth.Refresh(r.Context(), refreshToken) if err != nil { + clearRefreshCookie(w, s.cfg.TLS) writeError(w, http.StatusUnauthorized, err.Error()) return } @@ -525,331 +523,6 @@ func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, "ok", items) } -// ==================== OAuth ==================== - -func (s *Server) handleOAuthState(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - // 生成 CSRF state 并存入 DB - state := randomHex(16) - challengeID := randomHex(8) - _ = s.store.CreateChallenge(r.Context(), storage.ChallengeRecord{ - ID: challengeID, - Challenge: state, - FlowType: "oauth_state", - ExpiresAt: time.Now().UTC().Add(10 * time.Minute), - }) - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "state": state, - "challengeId": challengeID, - }) -} - -func (s *Server) handleOAuthProviders(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - providers := s.oauth.ListEnabled() - type providerInfo struct { - Name string `json:"name"` - DisplayName string `json:"displayName"` - } - result := make([]providerInfo, 0, len(providers)) - for _, p := range providers { - result = append(result, providerInfo{Name: p.Name(), DisplayName: p.DisplayName()}) - } - writeJSON(w, http.StatusOK, "ok", result) -} - -func (s *Server) handleOAuthCallback(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - // 骨架实现:后续 Phase 中完成具体 Provider 逻辑 - providerName := strings.TrimPrefix(r.URL.Path, "/api/oauth/") - providerName = strings.TrimSuffix(providerName, "/") - if providerName == "" || providerName == "state" || providerName == "providers" { - writeError(w, http.StatusBadRequest, "provider name required") - return - } - provider := s.oauth.Get(providerName) - if provider == nil { - writeError(w, http.StatusNotFound, fmt.Sprintf("oauth provider %q not found", providerName)) - return - } - // TODO: 完整的 OAuth callback 流程 - writeJSON(w, http.StatusNotImplemented, "oauth callback not yet implemented", nil) -} - -func randomHex(n int) string { - b := make([]byte, n) - _, _ = rand.Read(b) - return fmt.Sprintf("%x", b) -} - -// ==================== Passkey ==================== - -func (s *Server) handlePasskeyRegisterBegin(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - userID := auth.UserIDFromContext(r.Context()) - cc, challengeID, err := s.passkey.BeginRegistration(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "options": cc, - "challengeId": challengeID, - }) -} - -func (s *Server) handlePasskeyRegisterFinish(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - userID := auth.UserIDFromContext(r.Context()) - var req struct { - ChallengeID string `json:"challengeId"` - Response any `json:"response"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - respJSON, _ := json.Marshal(req.Response) - parsed, err := protocol.ParseCredentialCreationResponseBody(strings.NewReader(string(respJSON))) - if err != nil { - writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) - return - } - if err := s.passkey.FinishRegistration(r.Context(), userID, req.ChallengeID, parsed); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) -} - -func (s *Server) handlePasskeyLoginBegin(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - assertion, challengeID, err := s.passkey.BeginLogin(r.Context()) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "options": assertion, - "challengeId": challengeID, - }) -} - -func (s *Server) handlePasskeyLoginFinish(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - var req struct { - ChallengeID string `json:"challengeId"` - Response any `json:"response"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - respJSON, _ := json.Marshal(req.Response) - parsed, err := protocol.ParseCredentialRequestResponseBody(strings.NewReader(string(respJSON))) - if err != nil { - writeError(w, http.StatusBadRequest, fmt.Sprintf("invalid response: %v", err)) - return - } - userID, err := s.passkey.FinishLogin(r.Context(), req.ChallengeID, parsed) - if err != nil { - writeError(w, http.StatusUnauthorized, err.Error()) - return - } - user, err := s.auth.UserInfo(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - // 登录成功:通过 auth service 获取用户记录并签发 token - userRecord, err := s.store.GetUser(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - pair, _, err := s.auth.IssueTokenPairForUser(r.Context(), userRecord, - r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "user": user, - "token": pair.AccessToken, - "refreshToken": pair.RefreshToken, - }) -} - -func (s *Server) handlePasskeys(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - userID := auth.UserIDFromContext(r.Context()) - passkeys, err := s.passkey.ListPasskeys(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", passkeys) -} - -func (s *Server) handlePasskeyDelete(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodDelete { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if s.passkey == nil { - writeError(w, http.StatusServiceUnavailable, "passkey not configured") - return - } - passkeyID := strings.TrimPrefix(r.URL.Path, "/api/auth/passkey/") - if passkeyID == "" { - writeError(w, http.StatusBadRequest, "passkey id required") - return - } - userID := auth.UserIDFromContext(r.Context()) - if err := s.passkey.DeletePasskey(r.Context(), userID, passkeyID); err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) -} - -// ==================== Sessions ==================== - -func (s *Server) handleSessions(w http.ResponseWriter, r *http.Request) { - userID := auth.UserIDFromContext(r.Context()) - switch r.Method { - case http.MethodGet: - sessions, err := s.store.ListSessionsByUser(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", sessions) - case http.MethodDelete: - // 撤销除当前会话外的所有会话 - // 当前会话通过 refresh token cookie 识别 - if err := s.store.RevokeOtherSessions(r.Context(), userID, ""); err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) - default: - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - } -} - -func (s *Server) handleSession(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodDelete { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - sessionID := strings.TrimPrefix(r.URL.Path, "/api/sessions/") - if sessionID == "" { - writeError(w, http.StatusBadRequest, "session id required") - return - } - if err := s.store.RevokeSession(r.Context(), sessionID); err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) -} - -// ==================== Audit Log ==================== - -func (s *Server) handleAuditLogs(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if err := s.requireAdmin(r.Context()); err != nil { - writeError(w, http.StatusForbidden, err.Error()) - return - } - q := r.URL.Query() - userID := q.Get("user_id") - action := q.Get("action") - limit := 50 - if v, err := strconv.Atoi(q.Get("limit")); err == nil && v > 0 && v <= 200 { - limit = v - } - offset := 0 - if v, err := strconv.Atoi(q.Get("offset")); err == nil && v >= 0 { - offset = v - } - - logs, err := s.store.ListAuditLogs(r.Context(), userID, action, limit, offset) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - total, _ := s.store.CountAuditLogs(r.Context(), userID, action) - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "items": logs, - "total": total, - "limit": limit, - "offset": offset, - }) -} - -func (s *Server) requireAdmin(ctx context.Context) error { - user, err := s.auth.UserInfo(ctx, auth.UserIDFromContext(ctx)) - if err != nil { - return err - } - for _, role := range user.Roles { - if role == "R_SUPER" || role == "R_ADMIN" { - return nil - } - } - return fmt.Errorf("admin privileges required") -} - func (s *Server) resolveAllowedPath(input string) (string, error) { if strings.TrimSpace(input) == "" { return "", fmt.Errorf("path is required") diff --git a/backend/internal/api/sessions.go b/backend/internal/api/sessions.go new file mode 100644 index 0000000..d252c53 --- /dev/null +++ b/backend/internal/api/sessions.go @@ -0,0 +1,110 @@ +package api + +import ( + "fmt" + "net/http" + "strings" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +type sessionResponse struct { + ID string `json:"id"` + DeviceName string `json:"device_name"` + DeviceType string `json:"device_type"` + IPAddress string `json:"ip_address"` + UserAgent string `json:"user_agent"` + CreatedAt string `json:"created_at"` + LastSeenAt string `json:"last_seen_at"` + Current bool `json:"current"` +} + +func (s *Server) handleSessions(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + currentSessionID := auth.SessionIDFromContext(r.Context()) + switch r.Method { + case http.MethodGet: + sessions, err := s.store.ListSessionsByUser(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + result := make([]sessionResponse, 0, len(sessions)) + for _, session := range sessions { + result = append(result, toSessionResponse(session, currentSessionID)) + } + writeJSON(w, http.StatusOK, "ok", result) + case http.MethodDelete: + if currentSessionID == "" { + writeError(w, http.StatusBadRequest, "current session unavailable") + return + } + sessions, err := s.store.ListSessionsByUser(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + for _, session := range sessions { + if session.ID == currentSessionID { + continue + } + if session.RefreshTokenID != "" { + _ = s.store.RevokeRefreshTokenByID(r.Context(), session.RefreshTokenID) + } + } + if err := s.store.RevokeOtherSessions(r.Context(), userID, currentSessionID); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + _ = s.auth.WriteAuditLog(r.Context(), userID, "sessions_revoke_other", r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent"), "") + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) + default: + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + } +} + +func (s *Server) handleSession(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodDelete { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + sessionID := strings.TrimPrefix(r.URL.Path, "/api/sessions/") + if sessionID == "" { + writeError(w, http.StatusBadRequest, "session id required") + return + } + userID := auth.UserIDFromContext(r.Context()) + session, err := s.store.GetSession(r.Context(), sessionID) + if err != nil || session.UserID != userID { + writeError(w, http.StatusNotFound, "session not found") + return + } + if session.RefreshTokenID != "" { + _ = s.store.RevokeRefreshTokenByID(r.Context(), session.RefreshTokenID) + } + if err := s.store.RevokeSession(r.Context(), sessionID); err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + if sessionID == auth.SessionIDFromContext(r.Context()) { + clearRefreshCookie(w, s.cfg.TLS) + } + _ = s.auth.WriteAuditLog(r.Context(), userID, "session_revoke", r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent"), fmt.Sprintf(`{"sessionId":%q}`, sessionID)) + writeJSON(w, http.StatusOK, "ok", map[string]any{"success": true}) +} + +func toSessionResponse(session storage.SessionRecord, currentSessionID string) sessionResponse { + return sessionResponse{ + ID: session.ID, + DeviceName: session.DeviceName, + DeviceType: session.DeviceType, + IPAddress: session.IPAddress, + UserAgent: session.UserAgent, + CreatedAt: session.CreatedAt.Format(timeFormatRFC3339), + LastSeenAt: session.LastSeenAt.Format(timeFormatRFC3339), + Current: session.ID == currentSessionID, + } +} + +const timeFormatRFC3339 = "2006-01-02T15:04:05Z07:00" diff --git a/backend/internal/auth/middleware.go b/backend/internal/auth/middleware.go index a9cb1c1..93844cd 100644 --- a/backend/internal/auth/middleware.go +++ b/backend/internal/auth/middleware.go @@ -9,6 +9,7 @@ import ( type contextKey string const userIDContextKey contextKey = "commory.user_id" +const sessionIDContextKey contextKey = "commory.session_id" func UserIDFromContext(ctx context.Context) string { if value, ok := ctx.Value(userIDContextKey).(string); ok { @@ -17,6 +18,13 @@ func UserIDFromContext(ctx context.Context) string { return "" } +func SessionIDFromContext(ctx context.Context) string { + if value, ok := ctx.Value(sessionIDContextKey).(string); ok { + return value + } + return "" +} + func Middleware(service *Service, next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { authHeader := strings.TrimSpace(r.Header.Get("Authorization")) @@ -24,11 +32,15 @@ func Middleware(service *Service, next http.Handler) http.Handler { http.Error(w, "missing authorization header", http.StatusUnauthorized) return } - userID, err := service.ParseAccessToken(authHeader) + claims, err := service.ParseAccessTokenClaims(authHeader) if err != nil { http.Error(w, err.Error(), http.StatusUnauthorized) return } - next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), userIDContextKey, userID))) + ctx := context.WithValue(r.Context(), userIDContextKey, claims.UserID) + if claims.SessionID != "" { + ctx = context.WithValue(ctx, sessionIDContextKey, claims.SessionID) + } + next.ServeHTTP(w, r.WithContext(ctx)) }) } diff --git a/backend/internal/auth/passkey/encoding.go b/backend/internal/auth/passkey/encoding.go new file mode 100644 index 0000000..8d99e74 --- /dev/null +++ b/backend/internal/auth/passkey/encoding.go @@ -0,0 +1,20 @@ +package passkey + +import "encoding/base64" + +func encodeStoredBytes(raw []byte) string { + return base64.RawURLEncoding.EncodeToString(raw) +} + +func decodeStoredBytes(value string) []byte { + if value == "" { + return nil + } + if decoded, err := base64.RawURLEncoding.DecodeString(value); err == nil { + return decoded + } + if decoded, err := base64.StdEncoding.DecodeString(value); err == nil { + return decoded + } + return []byte(value) +} diff --git a/backend/internal/auth/passkey/service.go b/backend/internal/auth/passkey/service.go index 3a1a9d1..b9e53e5 100644 --- a/backend/internal/auth/passkey/service.go +++ b/backend/internal/auth/passkey/service.go @@ -3,14 +3,13 @@ package passkey import ( "context" "crypto/rand" - "encoding/base64" "encoding/json" "fmt" "time" "github.com/IsKenKenYa/Commory/backend/internal/storage" - "github.com/go-webauthn/webauthn" "github.com/go-webauthn/webauthn/protocol" + "github.com/go-webauthn/webauthn/webauthn" ) type Service struct { @@ -26,9 +25,9 @@ func NewService(store storage.Provider, rpName, rpID, origin string) (*Service, AuthenticatorSelection: protocol.AuthenticatorSelection{ ResidentKey: protocol.ResidentKeyRequirementRequired, }, - Timeouts: webauthn.Timeouts{ - Login: webauthn.TimeoutConfig{Timeout: 120000}, - Registration: webauthn.TimeoutConfig{Timeout: 120000}, + Timeouts: webauthn.TimeoutsConfig{ + Login: webauthn.TimeoutConfig{Timeout: 120 * time.Second}, + Registration: webauthn.TimeoutConfig{Timeout: 120 * time.Second}, }, }) if err != nil { @@ -52,7 +51,7 @@ func (s *Service) BeginRegistration(ctx context.Context, userID string) (*protoc for _, c := range existingCreds { excludeCreds = append(excludeCreds, protocol.CredentialDescriptor{ Type: protocol.PublicKeyCredentialType, - CredentialID: []byte(c.CredentialID), + CredentialID: decodeStoredBytes(c.CredentialID), }) } opts = append(opts, webauthn.WithExclusions(excludeCreds)) @@ -67,7 +66,7 @@ func (s *Service) BeginRegistration(ctx context.Context, userID string) (*protoc challengeID := randomID("chal") if err := s.store.CreateChallenge(ctx, storage.ChallengeRecord{ ID: challengeID, - Challenge: base64.StdEncoding.EncodeToString(sessionJSON), + Challenge: encodeStoredBytes(sessionJSON), UserID: userID, FlowType: "passkey_register", ExpiresAt: time.Now().UTC().Add(5 * time.Minute), @@ -86,7 +85,7 @@ func (s *Service) FinishRegistration(ctx context.Context, userID, challengeID st _ = s.store.DeleteChallenge(ctx, challengeID) var sessionData webauthn.SessionData - sessionJSON, _ := base64.StdEncoding.DecodeString(chal.Challenge) + sessionJSON := decodeStoredBytes(chal.Challenge) if err := json.Unmarshal(sessionJSON, &sessionData); err != nil { return fmt.Errorf("invalid challenge data") } @@ -103,23 +102,36 @@ func (s *Service) FinishRegistration(ctx context.Context, userID, challengeID st return fmt.Errorf("verify registration: %w", err) } - transportsJSON, _ := json.Marshal(response.Response.Transport) - return s.store.CreatePasskeyCredential(ctx, storage.PasskeyCredential{ + transportsJSON, _ := json.Marshal(response.Response.Transports) + credentialRecord := storage.PasskeyCredential{ ID: randomID("pk"), UserID: userID, - CredentialID: base64.StdEncoding.EncodeToString(credential.ID), - PublicKey: base64.StdEncoding.EncodeToString(credential.PublicKey), + CredentialID: encodeStoredBytes(credential.ID), + PublicKey: encodeStoredBytes(credential.PublicKey), AttestationType: credential.AttestationType, - AAGUID: base64.StdEncoding.EncodeToString(credential.Authenticator.AAGUID), + AAGUID: encodeStoredBytes(credential.Authenticator.AAGUID), SignCount: credential.Authenticator.SignCount, Transports: string(transportsJSON), Name: fmt.Sprintf("Passkey %s", time.Now().Format("2006-01-02")), + CreatedAt: time.Now().UTC(), + } + if err := s.store.CreatePasskeyCredential(ctx, credentialRecord); err != nil { + return err + } + return s.store.CreateAuthMethod(ctx, storage.AuthMethodRecord{ + ID: randomID("auth"), + UserID: userID, + ProviderType: "passkey", + ProviderUserID: credentialRecord.CredentialID, + Metadata: fmt.Sprintf(`{"passkeyId":%q,"name":%q}`, credentialRecord.ID, credentialRecord.Name), + CreatedAt: time.Now().UTC(), + UpdatedAt: time.Now().UTC(), }) } func (s *Service) BeginLogin(ctx context.Context) (*protocol.CredentialAssertion, string, error) { // Discoverable login - 不需要预先知道用户 - _, sessionData, err := s.wa.BeginDiscoverableLogin() + assertion, sessionData, err := s.wa.BeginDiscoverableLogin() if err != nil { return nil, "", err } @@ -128,23 +140,14 @@ func (s *Service) BeginLogin(ctx context.Context) (*protocol.CredentialAssertion challengeID := randomID("chal") if err := s.store.CreateChallenge(ctx, storage.ChallengeRecord{ ID: challengeID, - Challenge: base64.StdEncoding.EncodeToString(sessionJSON), + Challenge: encodeStoredBytes(sessionJSON), FlowType: "passkey_login", ExpiresAt: time.Now().UTC().Add(5 * time.Minute), }); err != nil { return nil, "", err } - assertion, _ := s.wa.BeginDiscoverableLogin() - _ = assertion // 已通过上面获取 - return &protocol.CredentialAssertion{ - Response: protocol.PublicKeyCredentialRequestOptions{ - Challenge: sessionData.Challenge, - Timeout: 120000, - RelyingPartyID: s.wa.Config.RPID, - UserVerification: protocol.VerificationPreferred, - }, - }, challengeID, nil + return assertion, challengeID, nil } func (s *Service) FinishLogin(ctx context.Context, challengeID string, response *protocol.ParsedCredentialAssertionData) (string, error) { @@ -155,13 +158,13 @@ func (s *Service) FinishLogin(ctx context.Context, challengeID string, response _ = s.store.DeleteChallenge(ctx, challengeID) var sessionData webauthn.SessionData - sessionJSON, _ := base64.StdEncoding.DecodeString(chal.Challenge) + sessionJSON := decodeStoredBytes(chal.Challenge) if err := json.Unmarshal(sessionJSON, &sessionData); err != nil { return "", fmt.Errorf("invalid challenge data") } handler := func(rawID, userHandle []byte) (webauthn.User, error) { - credID := base64.StdEncoding.EncodeToString(rawID) + credID := encodeStoredBytes(rawID) cred, err := s.store.GetPasskeyByCredentialID(ctx, credID) if err != nil { return nil, fmt.Errorf("credential not found") @@ -174,12 +177,12 @@ func (s *Service) FinishLogin(ctx context.Context, challengeID string, response return NewWebAuthnUser(user, creds), nil } - credential, err := s.wa.FinishDiscoverableLogin(handler, sessionData, response) + credential, err := s.wa.ValidateDiscoverableLogin(handler, sessionData, response) if err != nil { return "", fmt.Errorf("verify login: %w", err) } - credID := base64.StdEncoding.EncodeToString(credential.ID) + credID := encodeStoredBytes(credential.ID) cred, _ := s.store.GetPasskeyByCredentialID(ctx, credID) _ = s.store.UpdatePasskeyLastUsed(ctx, cred.ID, credential.Authenticator.SignCount) diff --git a/backend/internal/auth/passkey/user.go b/backend/internal/auth/passkey/user.go index a731862..54ab619 100644 --- a/backend/internal/auth/passkey/user.go +++ b/backend/internal/auth/passkey/user.go @@ -14,11 +14,11 @@ func NewWebAuthnUser(user storage.UserRecord, creds []storage.PasskeyCredential) waCreds := make([]webauthn.Credential, 0, len(creds)) for _, c := range creds { waCred := webauthn.Credential{ - ID: []byte(c.CredentialID), - PublicKey: []byte(c.PublicKey), + ID: decodeStoredBytes(c.CredentialID), + PublicKey: decodeStoredBytes(c.PublicKey), AttestationType: c.AttestationType, Authenticator: webauthn.Authenticator{ - AAGUID: []byte(c.AAGUID), + AAGUID: decodeStoredBytes(c.AAGUID), SignCount: c.SignCount, CloneWarning: false, }, diff --git a/backend/internal/auth/service.go b/backend/internal/auth/service.go index d5c7e7d..82923d1 100644 --- a/backend/internal/auth/service.go +++ b/backend/internal/auth/service.go @@ -29,6 +29,12 @@ type Service struct { loginWindow map[string][]time.Time } +type AccessTokenClaims struct { + UserID string + SessionID string + ExpiresAt int64 +} + func NewService(store storage.Provider, secret string) *Service { return &Service{ store: store, @@ -75,13 +81,24 @@ func (s *Service) RegisterWithDevice(ctx context.Context, userName, email, passw return UserInfo{}, TokenPair{}, err } - pair, sessionID, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) + if err := s.store.CreateAuthMethod(ctx, storage.AuthMethodRecord{ + ID: randomID("auth"), + UserID: record.ID, + ProviderType: "password", + ProviderUserID: record.ID, + Metadata: fmt.Sprintf(`{"userName":%q}`, record.UserName), + CreatedAt: now, + UpdatedAt: now, + }); err != nil { + return UserInfo{}, TokenPair{}, err + } + + pair, _, err := s.issueTokenPairWithSession(ctx, record, "", "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } _ = s.writeAuditLog(ctx, record.ID, "register", ipAddress, userAgent, "") - _ = sessionID // session 已创建 return toUserInfo(record), pair, nil } @@ -124,13 +141,24 @@ func (s *Service) RegisterAdminWithDevice(ctx context.Context, userName, email, return UserInfo{}, TokenPair{}, err } - pair, sessionID, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) + if err := s.store.CreateAuthMethod(ctx, storage.AuthMethodRecord{ + ID: randomID("auth"), + UserID: record.ID, + ProviderType: "password", + ProviderUserID: record.ID, + Metadata: fmt.Sprintf(`{"userName":%q}`, record.UserName), + CreatedAt: now, + UpdatedAt: now, + }); err != nil { + return UserInfo{}, TokenPair{}, err + } + + pair, _, err := s.issueTokenPairWithSession(ctx, record, "", "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } _ = s.writeAuditLog(ctx, record.ID, "register", ipAddress, userAgent, "") - _ = sessionID return toUserInfo(record), pair, nil } @@ -158,7 +186,7 @@ func (s *Service) LoginWithDevice(ctx context.Context, remoteAddr, userName, pas } } - pair, _, err := s.issueTokenPairWithSession(ctx, record, "", deviceName, ipAddress, userAgent) + pair, _, err := s.issueTokenPairWithSession(ctx, record, "", "", deviceName, ipAddress, userAgent) if err != nil { return UserInfo{}, TokenPair{}, err } @@ -177,11 +205,7 @@ func (s *Service) Refresh(ctx context.Context, refreshToken string) (TokenPair, record, err := s.store.ConsumeRefreshToken(ctx, tokenHash) if err != nil { - // 重放检测:如果 token 已被撤销,撤销整族 - if anyRecord, findErr := s.store.FindAnyRefreshTokenByHash(ctx, tokenHash); findErr == nil && !anyRecord.RevokedAt.IsZero() { - _ = s.store.RevokeRefreshTokenFamily(ctx, anyRecord.ID) - } - return TokenPair{}, fmt.Errorf("refresh token invalid or expired") + return TokenPair{}, s.classifyRefreshFailure(ctx, tokenHash) } user, err := s.store.GetUser(ctx, record.UserID) @@ -189,7 +213,20 @@ func (s *Service) Refresh(ctx context.Context, refreshToken string) (TokenPair, return TokenPair{}, err } - pair, _, err := s.issueTokenPairWithSession(ctx, user, record.ID, "", "", "") + var ( + sessionID string + deviceName string + ipAddress string + userAgent string + ) + if session, sessionErr := s.store.GetSessionByRefreshTokenID(ctx, record.ID); sessionErr == nil { + sessionID = session.ID + deviceName = session.DeviceName + ipAddress = session.IPAddress + userAgent = session.UserAgent + } + + pair, _, err := s.issueTokenPairWithSession(ctx, user, record.ID, sessionID, deviceName, ipAddress, userAgent) if err != nil { return TokenPair{}, err } @@ -204,10 +241,14 @@ func (s *Service) RevokeRefreshToken(ctx context.Context, refreshToken string) e return nil } record, err := s.store.ConsumeRefreshToken(ctx, hashToken(refreshToken)) - if err == nil { - _ = s.writeAuditLog(ctx, record.UserID, "logout", "", "", "") + if err != nil { + return err + } + if session, sessionErr := s.store.GetSessionByRefreshTokenID(ctx, record.ID); sessionErr == nil { + _ = s.store.RevokeSession(ctx, session.ID) } - return err + _ = s.writeAuditLog(ctx, record.UserID, "logout", "", "", "") + return nil } func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) { @@ -220,49 +261,65 @@ func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) // IssueTokenPairForUser 为已验证的用户签发 token pair(Passkey 登录用) func (s *Service) IssueTokenPairForUser(ctx context.Context, user storage.UserRecord, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { - return s.issueTokenPairWithSession(ctx, user, "", deviceName, ipAddress, userAgent) + return s.issueTokenPairWithSession(ctx, user, "", "", deviceName, ipAddress, userAgent) } func (s *Service) ParseAccessToken(token string) (string, error) { + claims, err := s.ParseAccessTokenClaims(token) + if err != nil { + return "", err + } + return claims.UserID, nil +} + +func (s *Service) ParseAccessTokenClaims(token string) (AccessTokenClaims, error) { token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) parts := strings.Split(token, ".") if len(parts) != 3 { - return "", fmt.Errorf("invalid token") + return AccessTokenClaims{}, fmt.Errorf("invalid token") } signingInput := strings.Join(parts[:2], ".") expected := signHS256(signingInput, s.secret) if !hmac.Equal([]byte(expected), []byte(parts[2])) { - return "", fmt.Errorf("invalid token signature") + return AccessTokenClaims{}, fmt.Errorf("invalid token signature") } payloadBytes, err := base64.RawURLEncoding.DecodeString(parts[1]) if err != nil { - return "", fmt.Errorf("decode token payload: %w", err) + return AccessTokenClaims{}, fmt.Errorf("decode token payload: %w", err) } var payload struct { Sub string `json:"sub"` + Sid string `json:"sid"` Exp int64 `json:"exp"` } if err := json.Unmarshal(payloadBytes, &payload); err != nil { - return "", fmt.Errorf("decode token json: %w", err) + return AccessTokenClaims{}, fmt.Errorf("decode token json: %w", err) } if payload.Sub == "" || time.Now().Unix() > payload.Exp { - return "", fmt.Errorf("token expired") + return AccessTokenClaims{}, fmt.Errorf("token expired") } - return payload.Sub, nil + return AccessTokenClaims{ + UserID: payload.Sub, + SessionID: payload.Sid, + ExpiresAt: payload.Exp, + }, nil } -func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.UserRecord, parentID, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { - accessToken, err := s.buildAccessToken(user) +func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.UserRecord, parentID, sessionID, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { + refreshToken, refreshHash, err := buildRefreshToken() if err != nil { return TokenPair{}, "", err } - refreshToken, refreshHash, err := buildRefreshToken() + refreshID := randomID("refresh") + if sessionID == "" { + sessionID = randomID("session") + } + accessToken, err := s.buildAccessToken(user, sessionID) if err != nil { return TokenPair{}, "", err } - refreshID := randomID("refresh") if err := s.store.SaveRefreshToken(ctx, storage.RefreshTokenRecord{ ID: refreshID, UserID: user.ID, @@ -274,19 +331,26 @@ func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.Us return TokenPair{}, "", err } - // 创建 Session 记录 - sessionID := randomID("session") - _ = s.store.CreateSession(ctx, storage.SessionRecord{ - ID: sessionID, - UserID: user.ID, - RefreshTokenID: refreshID, - DeviceName: deviceName, - DeviceType: detectDeviceType(userAgent), - IPAddress: ipAddress, - UserAgent: userAgent, - CreatedAt: time.Now().UTC(), - LastSeenAt: time.Now().UTC(), - }) + now := time.Now().UTC() + if parentID == "" { + if err := s.store.CreateSession(ctx, storage.SessionRecord{ + ID: sessionID, + UserID: user.ID, + RefreshTokenID: refreshID, + DeviceName: deviceName, + DeviceType: detectDeviceType(userAgent), + IPAddress: ipAddress, + UserAgent: userAgent, + CreatedAt: now, + LastSeenAt: now, + }); err != nil { + return TokenPair{}, "", err + } + } else { + if err := s.store.UpdateSessionRefreshToken(ctx, sessionID, refreshID); err != nil { + return TokenPair{}, "", err + } + } return TokenPair{ AccessToken: accessToken, @@ -318,10 +382,15 @@ func (s *Service) writeAuditLog(ctx context.Context, userID, action, ipAddress, }) } -func (s *Service) buildAccessToken(user storage.UserRecord) (string, error) { +func (s *Service) WriteAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { + return s.writeAuditLog(ctx, userID, action, ipAddress, userAgent, detail) +} + +func (s *Service) buildAccessToken(user storage.UserRecord, sessionID string) (string, error) { headerBytes, _ := json.Marshal(map[string]string{"alg": "HS256", "typ": "JWT"}) payloadBytes, err := json.Marshal(map[string]any{ "sub": user.ID, + "sid": sessionID, "userName": user.UserName, "roles": user.Roles, "exp": time.Now().Add(accessTokenTTL).Unix(), @@ -441,6 +510,21 @@ func signHS256(input string, secret []byte) string { return base64.RawURLEncoding.EncodeToString(mac.Sum(nil)) } +func (s *Service) classifyRefreshFailure(ctx context.Context, tokenHash string) error { + record, err := s.store.FindAnyRefreshTokenByHash(ctx, tokenHash) + if err != nil { + return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") + } + if !record.RevokedAt.IsZero() { + _ = s.store.RevokeRefreshTokenFamily(ctx, record.ID) + return fmt.Errorf("ERR_REFRESH_TOKEN_REPLAYED") + } + if time.Now().UTC().After(record.ExpiresAt) { + return fmt.Errorf("ERR_REFRESH_TOKEN_EXPIRED") + } + return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") +} + func randomID(prefix string) string { raw := make([]byte, 8) _, _ = rand.Read(raw) diff --git a/backend/internal/storage/contracttest/filestore_test.go b/backend/internal/storage/contracttest/filestore_test.go new file mode 100644 index 0000000..41035dc --- /dev/null +++ b/backend/internal/storage/contracttest/filestore_test.go @@ -0,0 +1,19 @@ +package contracttest + +import ( + "path/filepath" + "testing" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func TestFileStoreContract(t *testing.T) { + RunContractTests(t, func(t *testing.T) storage.Provider { + t.Helper() + store, err := storage.NewFileStoreProvider(filepath.Join(t.TempDir(), "commory.json")) + if err != nil { + t.Fatalf("NewFileStoreProvider: %v", err) + } + return store + }) +} diff --git a/backend/internal/storage/filestore.go b/backend/internal/storage/filestore.go index 5a6880e..cb6c1c6 100644 --- a/backend/internal/storage/filestore.go +++ b/backend/internal/storage/filestore.go @@ -18,6 +18,11 @@ import ( type storeSnapshot struct { Users map[string]UserRecord `json:"users"` RefreshTokens map[string]RefreshTokenRecord `json:"refresh_tokens"` + Sessions map[string]SessionRecord `json:"sessions"` + AuditLogs map[string]AuditRecord `json:"audit_logs"` + Passkeys map[string]PasskeyCredential `json:"passkeys"` + Challenges map[string]ChallengeRecord `json:"challenges"` + AuthMethods map[string]AuthMethodRecord `json:"auth_methods"` Imports map[string]storedImport `json:"imports"` Identities map[string]storedIdentity `json:"identities"` Events map[string]storedEvent `json:"events"` @@ -41,8 +46,8 @@ type storedIdentity struct { } type storedEvent struct { - UserID string `json:"user_id"` - ImportID string `json:"import_id"` + UserID string `json:"user_id"` + ImportID string `json:"import_id"` Item msglayer.TimelineItem `json:"item"` Raw msglayer.Event `json:"raw"` } @@ -61,6 +66,11 @@ func newFileStore(path, name string) Provider { snapshot: storeSnapshot{ Users: map[string]UserRecord{}, RefreshTokens: map[string]RefreshTokenRecord{}, + Sessions: map[string]SessionRecord{}, + AuditLogs: map[string]AuditRecord{}, + Passkeys: map[string]PasskeyCredential{}, + Challenges: map[string]ChallengeRecord{}, + AuthMethods: map[string]AuthMethodRecord{}, Imports: map[string]storedImport{}, Identities: map[string]storedIdentity{}, Events: map[string]storedEvent{}, @@ -68,6 +78,10 @@ func newFileStore(path, name string) Provider { } } +func NewFileStoreProvider(path string) (Provider, error) { + return newFileStore(path, "filestore"), nil +} + func (s *fileStore) Name() string { return s.name } func (s *fileStore) Close() error { return nil } @@ -87,7 +101,44 @@ func (s *fileStore) Init(ctx context.Context) error { if len(data) == 0 { return nil } - return json.Unmarshal(data, &s.snapshot) + if err := json.Unmarshal(data, &s.snapshot); err != nil { + return err + } + s.initMaps() + return nil +} + +func (s *fileStore) initMaps() { + if s.snapshot.Users == nil { + s.snapshot.Users = map[string]UserRecord{} + } + if s.snapshot.RefreshTokens == nil { + s.snapshot.RefreshTokens = map[string]RefreshTokenRecord{} + } + if s.snapshot.Sessions == nil { + s.snapshot.Sessions = map[string]SessionRecord{} + } + if s.snapshot.AuditLogs == nil { + s.snapshot.AuditLogs = map[string]AuditRecord{} + } + if s.snapshot.Passkeys == nil { + s.snapshot.Passkeys = map[string]PasskeyCredential{} + } + if s.snapshot.Challenges == nil { + s.snapshot.Challenges = map[string]ChallengeRecord{} + } + if s.snapshot.AuthMethods == nil { + s.snapshot.AuthMethods = map[string]AuthMethodRecord{} + } + if s.snapshot.Imports == nil { + s.snapshot.Imports = map[string]storedImport{} + } + if s.snapshot.Identities == nil { + s.snapshot.Identities = map[string]storedIdentity{} + } + if s.snapshot.Events == nil { + s.snapshot.Events = map[string]storedEvent{} + } } func (s *fileStore) Import(ctx context.Context, userID string, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { @@ -432,86 +483,305 @@ func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash, return s.persist() } -// ==================== 新增方法 stubs ==================== +func (s *fileStore) FindAnyRefreshTokenByHash(_ context.Context, tokenHash string) (RefreshTokenRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, token := range s.snapshot.RefreshTokens { + if token.TokenHash == tokenHash { + return token, nil + } + } + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") +} -func (s *fileStore) FindAnyRefreshTokenByHash(_ context.Context, _ string) (RefreshTokenRecord, error) { - return RefreshTokenRecord{}, fmt.Errorf("not supported in fileStore") +func (s *fileStore) RevokeRefreshTokenFamily(_ context.Context, tokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + queue := []string{tokenID} + seen := map[string]struct{}{} + now := time.Now().UTC() + for len(queue) > 0 { + current := queue[0] + queue = queue[1:] + if _, ok := seen[current]; ok { + continue + } + seen[current] = struct{}{} + if token, ok := s.snapshot.RefreshTokens[current]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = now + s.snapshot.RefreshTokens[current] = token + } + for id, token := range s.snapshot.RefreshTokens { + if token.ParentID == current { + queue = append(queue, id) + } + } + } + return s.persist() } -func (s *fileStore) RevokeRefreshTokenFamily(_ context.Context, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) RevokeRefreshTokenByID(_ context.Context, tokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + token, ok := s.snapshot.RefreshTokens[tokenID] + if !ok { + return nil + } + if token.RevokedAt.IsZero() { + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[tokenID] = token + } + return s.persist() } -func (s *fileStore) CreateSession(_ context.Context, _ SessionRecord) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) CreateSession(_ context.Context, rec SessionRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Sessions[rec.ID] = rec + return s.persist() } -func (s *fileStore) ListSessionsByUser(_ context.Context, _ string) ([]SessionRecord, error) { - return nil, fmt.Errorf("not supported in fileStore") +func (s *fileStore) GetSession(_ context.Context, sessionID string) (SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return SessionRecord{}, fmt.Errorf("session not found") + } + return session, nil } -func (s *fileStore) RevokeSession(_ context.Context, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) GetSessionByRefreshTokenID(_ context.Context, refreshTokenID string) (SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, session := range s.snapshot.Sessions { + if session.RefreshTokenID == refreshTokenID { + return session, nil + } + } + return SessionRecord{}, fmt.Errorf("session not found") } -func (s *fileStore) RevokeOtherSessions(_ context.Context, _, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) ListSessionsByUser(_ context.Context, userID string) ([]SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]SessionRecord, 0, len(s.snapshot.Sessions)) + for _, session := range s.snapshot.Sessions { + if session.UserID != userID { + continue + } + items = append(items, session) + } + sort.Slice(items, func(i, j int) bool { return items[i].LastSeenAt.After(items[j].LastSeenAt) }) + return items, nil } -func (s *fileStore) UpdateSessionLastSeen(_ context.Context, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) RevokeSession(_ context.Context, sessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return nil + } + session.LastSeenAt = time.Now().UTC() + delete(s.snapshot.Sessions, sessionID) + if session.RefreshTokenID != "" { + if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[session.RefreshTokenID] = token + } + } + return s.persist() } -func (s *fileStore) CreateAuditLog(_ context.Context, _ AuditRecord) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) RevokeOtherSessions(_ context.Context, userID, currentSessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + now := time.Now().UTC() + for id, session := range s.snapshot.Sessions { + if session.UserID != userID || id == currentSessionID { + continue + } + if session.RefreshTokenID != "" { + if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = now + s.snapshot.RefreshTokens[session.RefreshTokenID] = token + } + } + delete(s.snapshot.Sessions, id) + } + return s.persist() } -func (s *fileStore) ListAuditLogs(_ context.Context, _, _ string, _, _ int) ([]AuditRecord, error) { - return nil, fmt.Errorf("not supported in fileStore") +func (s *fileStore) UpdateSessionLastSeen(_ context.Context, sessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return fmt.Errorf("session not found") + } + session.LastSeenAt = time.Now().UTC() + s.snapshot.Sessions[sessionID] = session + return s.persist() +} + +func (s *fileStore) UpdateSessionRefreshToken(_ context.Context, sessionID, refreshTokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return fmt.Errorf("session not found") + } + session.RefreshTokenID = refreshTokenID + session.LastSeenAt = time.Now().UTC() + s.snapshot.Sessions[sessionID] = session + return s.persist() +} + +func (s *fileStore) CreateAuditLog(_ context.Context, rec AuditRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.AuditLogs[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) ListAuditLogs(_ context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]AuditRecord, 0, len(s.snapshot.AuditLogs)) + for _, rec := range s.snapshot.AuditLogs { + if userID != "" && rec.UserID != userID { + continue + } + if action != "" && rec.Action != action { + continue + } + items = append(items, rec) + } + sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) + if offset > 0 && offset < len(items) { + items = items[offset:] + } else if offset >= len(items) { + return nil, nil + } + if limit > 0 && len(items) > limit { + items = items[:limit] + } + return items, nil } -func (s *fileStore) CountAuditLogs(_ context.Context, _, _ string) (int, error) { - return 0, fmt.Errorf("not supported in fileStore") +func (s *fileStore) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { + items, err := s.ListAuditLogs(ctx, userID, action, 0, 0) + if err != nil { + return 0, err + } + return len(items), nil } -func (s *fileStore) CreatePasskeyCredential(_ context.Context, _ PasskeyCredential) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) CreatePasskeyCredential(_ context.Context, rec PasskeyCredential) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Passkeys[rec.ID] = rec + return s.persist() } -func (s *fileStore) GetPasskeyByCredentialID(_ context.Context, _ string) (PasskeyCredential, error) { - return PasskeyCredential{}, fmt.Errorf("not supported in fileStore") +func (s *fileStore) GetPasskeyByCredentialID(_ context.Context, credentialID string) (PasskeyCredential, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, passkey := range s.snapshot.Passkeys { + if passkey.CredentialID == credentialID { + return passkey, nil + } + } + return PasskeyCredential{}, fmt.Errorf("passkey not found") } -func (s *fileStore) ListPasskeysByUser(_ context.Context, _ string) ([]PasskeyCredential, error) { - return nil, fmt.Errorf("not supported in fileStore") +func (s *fileStore) ListPasskeysByUser(_ context.Context, userID string) ([]PasskeyCredential, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]PasskeyCredential, 0, len(s.snapshot.Passkeys)) + for _, passkey := range s.snapshot.Passkeys { + if passkey.UserID != userID { + continue + } + items = append(items, passkey) + } + sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) + return items, nil } -func (s *fileStore) UpdatePasskeyLastUsed(_ context.Context, _ string, _ uint32) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) UpdatePasskeyLastUsed(_ context.Context, id string, signCount uint32) error { + s.mu.Lock() + defer s.mu.Unlock() + passkey, ok := s.snapshot.Passkeys[id] + if !ok { + return fmt.Errorf("passkey not found") + } + passkey.SignCount = signCount + passkey.LastUsedAt = time.Now().UTC() + s.snapshot.Passkeys[id] = passkey + return s.persist() } -func (s *fileStore) DeletePasskey(_ context.Context, _, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) DeletePasskey(_ context.Context, id, userID string) error { + s.mu.Lock() + defer s.mu.Unlock() + passkey, ok := s.snapshot.Passkeys[id] + if !ok || passkey.UserID != userID { + return nil + } + delete(s.snapshot.Passkeys, id) + return s.persist() } -func (s *fileStore) CreateChallenge(_ context.Context, _ ChallengeRecord) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) CreateChallenge(_ context.Context, rec ChallengeRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + if rec.CreatedAt.IsZero() { + rec.CreatedAt = time.Now().UTC() + } + s.snapshot.Challenges[rec.ID] = rec + return s.persist() } -func (s *fileStore) GetChallenge(_ context.Context, _ string) (ChallengeRecord, error) { - return ChallengeRecord{}, fmt.Errorf("not supported in fileStore") +func (s *fileStore) GetChallenge(_ context.Context, id string) (ChallengeRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + challenge, ok := s.snapshot.Challenges[id] + if !ok || time.Now().UTC().After(challenge.ExpiresAt) { + return ChallengeRecord{}, fmt.Errorf("challenge not found") + } + return challenge, nil } -func (s *fileStore) DeleteChallenge(_ context.Context, _ string) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) DeleteChallenge(_ context.Context, id string) error { + s.mu.Lock() + defer s.mu.Unlock() + delete(s.snapshot.Challenges, id) + return s.persist() } -func (s *fileStore) CreateAuthMethod(_ context.Context, _ AuthMethodRecord) error { - return fmt.Errorf("not supported in fileStore") +func (s *fileStore) CreateAuthMethod(_ context.Context, rec AuthMethodRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + for _, existing := range s.snapshot.AuthMethods { + if existing.ProviderType == rec.ProviderType && existing.ProviderUserID == rec.ProviderUserID { + return fmt.Errorf("auth method already exists") + } + } + s.snapshot.AuthMethods[rec.ID] = rec + return s.persist() } -func (s *fileStore) GetAuthMethodByProvider(_ context.Context, _, _ string) (AuthMethodRecord, error) { - return AuthMethodRecord{}, fmt.Errorf("not supported in fileStore") +func (s *fileStore) GetAuthMethodByProvider(_ context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, rec := range s.snapshot.AuthMethods { + if rec.ProviderType == providerType && rec.ProviderUserID == providerUserID { + return rec, nil + } + } + return AuthMethodRecord{}, fmt.Errorf("auth method not found") } func EnsureParentDir(path string) error { diff --git a/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go index 30e1052..216692b 100644 --- a/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go +++ b/backend/internal/storage/sqlc/gen/refresh_tokens.sql.go @@ -84,18 +84,30 @@ func (q *Queries) FindRefreshTokenByHash(ctx context.Context, tokenHash string) return &i, err } -const revokeRefreshTokenFamily = `-- name: RevokeRefreshTokenFamily :exec -UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP -WHERE id = ? OR parent_id = ? +const revokeRefreshTokenByID = `-- name: RevokeRefreshTokenByID :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP WHERE id = ? AND revoked_at IS NULL ` -type RevokeRefreshTokenFamilyParams struct { - ID string `json:"id"` - ParentID sql.NullString `json:"parent_id"` +func (q *Queries) RevokeRefreshTokenByID(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, revokeRefreshTokenByID, id) + return err } -func (q *Queries) RevokeRefreshTokenFamily(ctx context.Context, arg *RevokeRefreshTokenFamilyParams) error { - _, err := q.db.ExecContext(ctx, revokeRefreshTokenFamily, arg.ID, arg.ParentID) +const revokeRefreshTokenFamily = `-- name: RevokeRefreshTokenFamily :exec +WITH RECURSIVE family(id) AS ( + SELECT id FROM refresh_tokens WHERE id = ? + UNION + SELECT rt.id + FROM refresh_tokens rt + JOIN family f ON rt.parent_id = f.id +) +UPDATE refresh_tokens +SET revoked_at = CURRENT_TIMESTAMP +WHERE id IN (SELECT id FROM family) +` + +func (q *Queries) RevokeRefreshTokenFamily(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, revokeRefreshTokenFamily, id) return err } diff --git a/backend/internal/storage/sqlc/gen/sessions.sql.go b/backend/internal/storage/sqlc/gen/sessions.sql.go index 44502a3..c517ee4 100644 --- a/backend/internal/storage/sqlc/gen/sessions.sql.go +++ b/backend/internal/storage/sqlc/gen/sessions.sql.go @@ -60,6 +60,28 @@ func (q *Queries) GetSession(ctx context.Context, id string) (*Session, error) { return &i, err } +const getSessionByRefreshTokenID = `-- name: GetSessionByRefreshTokenID :one +SELECT id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent, created_at, last_seen_at, revoked_at FROM sessions WHERE refresh_token_id = ? AND revoked_at IS NULL LIMIT 1 +` + +func (q *Queries) GetSessionByRefreshTokenID(ctx context.Context, refreshTokenID sql.NullString) (*Session, error) { + row := q.db.QueryRowContext(ctx, getSessionByRefreshTokenID, refreshTokenID) + var i Session + err := row.Scan( + &i.ID, + &i.UserID, + &i.RefreshTokenID, + &i.DeviceName, + &i.DeviceType, + &i.IpAddress, + &i.UserAgent, + &i.CreatedAt, + &i.LastSeenAt, + &i.RevokedAt, + ) + return &i, err +} + const listSessionsByUser = `-- name: ListSessionsByUser :many SELECT id, user_id, refresh_token_id, device_name, device_type, ip_address, user_agent, created_at, last_seen_at, revoked_at FROM sessions WHERE user_id = ? AND revoked_at IS NULL ORDER BY last_seen_at DESC ` @@ -129,3 +151,19 @@ func (q *Queries) UpdateSessionLastSeen(ctx context.Context, id string) error { _, err := q.db.ExecContext(ctx, updateSessionLastSeen, id) return err } + +const updateSessionRefreshToken = `-- name: UpdateSessionRefreshToken :exec +UPDATE sessions +SET refresh_token_id = ?, last_seen_at = CURRENT_TIMESTAMP +WHERE id = ? AND revoked_at IS NULL +` + +type UpdateSessionRefreshTokenParams struct { + RefreshTokenID sql.NullString `json:"refresh_token_id"` + ID string `json:"id"` +} + +func (q *Queries) UpdateSessionRefreshToken(ctx context.Context, arg *UpdateSessionRefreshTokenParams) error { + _, err := q.db.ExecContext(ctx, updateSessionRefreshToken, arg.RefreshTokenID, arg.ID) + return err +} diff --git a/backend/internal/storage/sqlc/gen/setup.sql.go b/backend/internal/storage/sqlc/gen/setup.sql.go index 220a264..16b0f8b 100644 --- a/backend/internal/storage/sqlc/gen/setup.sql.go +++ b/backend/internal/storage/sqlc/gen/setup.sql.go @@ -13,8 +13,8 @@ import ( const countAuditLogs = `-- name: CountAuditLogs :one SELECT COUNT(*) FROM audit_log -WHERE user_id = COALESCE(NULLIF(?1, ''), user_id) - AND action = COALESCE(NULLIF(?2, ''), action) +WHERE (NULLIF(?1, '') IS NULL OR user_id = ?1) + AND (NULLIF(?2, '') IS NULL OR action = ?2) ` type CountAuditLogsParams struct { @@ -57,10 +57,10 @@ func (q *Queries) CreateAuditLog(ctx context.Context, arg *CreateAuditLogParams) const getAuditLogs = `-- name: GetAuditLogs :many SELECT id, user_id, "action", ip_address, user_agent, detail, created_at FROM audit_log -WHERE user_id = COALESCE(NULLIF(?, ''), user_id) - AND action = COALESCE(NULLIF(?, ''), action) +WHERE (NULLIF(?1, '') IS NULL OR user_id = ?1) + AND (NULLIF(?2, '') IS NULL OR action = ?2) ORDER BY created_at DESC -LIMIT ? OFFSET ? +LIMIT ?3 OFFSET ?4 ` type GetAuditLogsParams struct { diff --git a/backend/internal/storage/sqlc/query/refresh_tokens.sql b/backend/internal/storage/sqlc/query/refresh_tokens.sql index dcd5134..fd13fbb 100644 --- a/backend/internal/storage/sqlc/query/refresh_tokens.sql +++ b/backend/internal/storage/sqlc/query/refresh_tokens.sql @@ -17,8 +17,19 @@ RETURNING *; UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND revoked_at IS NULL; -- name: RevokeRefreshTokenFamily :exec -UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP -WHERE id = ? OR parent_id = ?; +WITH RECURSIVE family(id) AS ( + SELECT id FROM refresh_tokens WHERE id = ? + UNION + SELECT rt.id + FROM refresh_tokens rt + JOIN family f ON rt.parent_id = f.id +) +UPDATE refresh_tokens +SET revoked_at = CURRENT_TIMESTAMP +WHERE id IN (SELECT id FROM family); + +-- name: RevokeRefreshTokenByID :exec +UPDATE refresh_tokens SET revoked_at = CURRENT_TIMESTAMP WHERE id = ? AND revoked_at IS NULL; -- name: CleanupExpiredTokens :exec DELETE FROM refresh_tokens WHERE expires_at < CURRENT_TIMESTAMP; diff --git a/backend/internal/storage/sqlc/query/sessions.sql b/backend/internal/storage/sqlc/query/sessions.sql index 76b0992..bd81ffd 100644 --- a/backend/internal/storage/sqlc/query/sessions.sql +++ b/backend/internal/storage/sqlc/query/sessions.sql @@ -5,6 +5,9 @@ VALUES (?, ?, ?, ?, ?, ?, ?); -- name: GetSession :one SELECT * FROM sessions WHERE id = ? AND revoked_at IS NULL LIMIT 1; +-- name: GetSessionByRefreshTokenID :one +SELECT * FROM sessions WHERE refresh_token_id = ? AND revoked_at IS NULL LIMIT 1; + -- name: ListSessionsByUser :many SELECT * FROM sessions WHERE user_id = ? AND revoked_at IS NULL ORDER BY last_seen_at DESC; @@ -16,3 +19,8 @@ UPDATE sessions SET revoked_at = CURRENT_TIMESTAMP WHERE user_id = ? AND id != ? -- name: UpdateSessionLastSeen :exec UPDATE sessions SET last_seen_at = CURRENT_TIMESTAMP WHERE id = ?; + +-- name: UpdateSessionRefreshToken :exec +UPDATE sessions +SET refresh_token_id = ?, last_seen_at = CURRENT_TIMESTAMP +WHERE id = ? AND revoked_at IS NULL; diff --git a/backend/internal/storage/sqlc/query/setup.sql b/backend/internal/storage/sqlc/query/setup.sql index e06507b..1f65834 100644 --- a/backend/internal/storage/sqlc/query/setup.sql +++ b/backend/internal/storage/sqlc/query/setup.sql @@ -7,8 +7,8 @@ VALUES (?, ?, ?, ?); -- name: GetAuditLogs :many SELECT * FROM audit_log -WHERE user_id = COALESCE(NULLIF(@user_id, ''), user_id) - AND action = COALESCE(NULLIF(@action, ''), action) +WHERE (NULLIF(@user_id, '') IS NULL OR user_id = @user_id) + AND (NULLIF(@action, '') IS NULL OR action = @action) ORDER BY created_at DESC LIMIT ? OFFSET ?; @@ -18,5 +18,5 @@ VALUES (?, ?, ?, ?, ?, ?); -- name: CountAuditLogs :one SELECT COUNT(*) FROM audit_log -WHERE user_id = COALESCE(NULLIF(@user_id, ''), user_id) - AND action = COALESCE(NULLIF(@action, ''), action); +WHERE (NULLIF(@user_id, '') IS NULL OR user_id = @user_id) + AND (NULLIF(@action, '') IS NULL OR action = @action); diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go index 80a4640..d350a94 100644 --- a/backend/internal/storage/sqlite.go +++ b/backend/internal/storage/sqlite.go @@ -465,22 +465,15 @@ func (s *sqliteProvider) FindAnyRefreshTokenByHash(ctx context.Context, tokenHas if err != nil { return RefreshTokenRecord{}, err } - return RefreshTokenRecord{ - ID: row.ID, - UserID: row.UserID, - TokenHash: row.TokenHash, - ParentID: row.ParentID.String, - ExpiresAt: row.ExpiresAt, - CreatedAt: row.CreatedAt, - RevokedAt: row.RevokedAt.Time, - }, nil + return s.rowToRefreshToken(row), nil } func (s *sqliteProvider) RevokeRefreshTokenFamily(ctx context.Context, tokenID string) error { - return s.q.RevokeRefreshTokenFamily(ctx, &sqlc.RevokeRefreshTokenFamilyParams{ - ID: tokenID, - ParentID: sql.NullString{String: tokenID, Valid: true}, - }) + return s.q.RevokeRefreshTokenFamily(ctx, tokenID) +} + +func (s *sqliteProvider) RevokeRefreshTokenByID(ctx context.Context, tokenID string) error { + return s.q.RevokeRefreshTokenByID(ctx, tokenID) } // ==================== Sessions ==================== @@ -497,6 +490,22 @@ func (s *sqliteProvider) CreateSession(ctx context.Context, rec SessionRecord) e }) } +func (s *sqliteProvider) GetSession(ctx context.Context, sessionID string) (SessionRecord, error) { + row, err := s.q.GetSession(ctx, sessionID) + if err != nil { + return SessionRecord{}, err + } + return s.rowToSession(row), nil +} + +func (s *sqliteProvider) GetSessionByRefreshTokenID(ctx context.Context, refreshTokenID string) (SessionRecord, error) { + row, err := s.q.GetSessionByRefreshTokenID(ctx, sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}) + if err != nil { + return SessionRecord{}, err + } + return s.rowToSession(row), nil +} + func (s *sqliteProvider) ListSessionsByUser(ctx context.Context, userID string) ([]SessionRecord, error) { rows, err := s.q.ListSessionsByUser(ctx, userID) if err != nil { @@ -504,17 +513,7 @@ func (s *sqliteProvider) ListSessionsByUser(ctx context.Context, userID string) } items := make([]SessionRecord, 0, len(rows)) for _, r := range rows { - items = append(items, SessionRecord{ - ID: r.ID, - UserID: r.UserID, - RefreshTokenID: r.RefreshTokenID.String, - DeviceName: r.DeviceName.String, - DeviceType: r.DeviceType.String, - IPAddress: r.IpAddress.String, - UserAgent: r.UserAgent.String, - CreatedAt: r.CreatedAt, - LastSeenAt: r.LastSeenAt, - }) + items = append(items, s.rowToSession(r)) } return items, nil } @@ -534,6 +533,13 @@ func (s *sqliteProvider) UpdateSessionLastSeen(ctx context.Context, sessionID st return s.q.UpdateSessionLastSeen(ctx, sessionID) } +func (s *sqliteProvider) UpdateSessionRefreshToken(ctx context.Context, sessionID, refreshTokenID string) error { + return s.q.UpdateSessionRefreshToken(ctx, &sqlc.UpdateSessionRefreshTokenParams{ + RefreshTokenID: sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}, + ID: sessionID, + }) +} + // ==================== Audit Log ==================== func (s *sqliteProvider) CreateAuditLog(ctx context.Context, rec AuditRecord) error { @@ -601,19 +607,7 @@ func (s *sqliteProvider) GetPasskeyByCredentialID(ctx context.Context, credentia if err != nil { return PasskeyCredential{}, err } - return PasskeyCredential{ - ID: row.ID, - UserID: row.UserID, - CredentialID: row.CredentialID, - PublicKey: row.PublicKey, - AttestationType: row.AttestationType, - AAGUID: row.Aaguid, - SignCount: uint32(row.SignCount), - Transports: row.Transports, - Name: row.Name, - LastUsedAt: row.LastUsedAt.Time, - CreatedAt: row.CreatedAt, - }, nil + return s.rowToPasskey(row), nil } func (s *sqliteProvider) ListPasskeysByUser(ctx context.Context, userID string) ([]PasskeyCredential, error) { @@ -623,19 +617,7 @@ func (s *sqliteProvider) ListPasskeysByUser(ctx context.Context, userID string) } items := make([]PasskeyCredential, 0, len(rows)) for _, r := range rows { - items = append(items, PasskeyCredential{ - ID: r.ID, - UserID: r.UserID, - CredentialID: r.CredentialID, - PublicKey: r.PublicKey, - AttestationType: r.AttestationType, - AAGUID: r.Aaguid, - SignCount: uint32(r.SignCount), - Transports: r.Transports, - Name: r.Name, - LastUsedAt: r.LastUsedAt.Time, - CreatedAt: r.CreatedAt, - }) + items = append(items, s.rowToPasskey(r)) } return items, nil } @@ -732,6 +714,48 @@ func (s *sqliteProvider) rowToUser(row *sqlc.User) UserRecord { } } +func (s *sqliteProvider) rowToRefreshToken(row *sqlc.RefreshToken) RefreshTokenRecord { + return RefreshTokenRecord{ + ID: row.ID, + UserID: row.UserID, + TokenHash: row.TokenHash, + ParentID: row.ParentID.String, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + RevokedAt: row.RevokedAt.Time, + } +} + +func (s *sqliteProvider) rowToSession(row *sqlc.Session) SessionRecord { + return SessionRecord{ + ID: row.ID, + UserID: row.UserID, + RefreshTokenID: row.RefreshTokenID.String, + DeviceName: row.DeviceName.String, + DeviceType: row.DeviceType.String, + IPAddress: row.IpAddress.String, + UserAgent: row.UserAgent.String, + CreatedAt: row.CreatedAt, + LastSeenAt: row.LastSeenAt, + } +} + +func (s *sqliteProvider) rowToPasskey(row *sqlc.PasskeyCredential) PasskeyCredential { + return PasskeyCredential{ + ID: row.ID, + UserID: row.UserID, + CredentialID: row.CredentialID, + PublicKey: row.PublicKey, + AttestationType: row.AttestationType, + AAGUID: row.Aaguid, + SignCount: uint32(row.SignCount), + Transports: row.Transports, + Name: row.Name, + LastUsedAt: row.LastUsedAt.Time, + CreatedAt: row.CreatedAt, + } +} + func (s *sqliteProvider) rowToIdentity(row *sqlc.Identity) msglayer.Identity { var phones, emails, labels []string var meta map[string]any diff --git a/backend/internal/storage/sqlite_test.go b/backend/internal/storage/sqlite_test.go index 45ad109..6196ed0 100644 --- a/backend/internal/storage/sqlite_test.go +++ b/backend/internal/storage/sqlite_test.go @@ -6,6 +6,7 @@ import ( "path/filepath" "runtime" "testing" + "time" "github.com/IsKenKenYa/Commory/backend/internal/importers" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" @@ -76,6 +77,55 @@ func TestPostgresProviderSkipsWithoutDSN(t *testing.T) { } } +func TestSQLiteAuditLogBlankUserFilterIncludesSystemEntries(t *testing.T) { + ctx := context.Background() + store, err := NewSQLiteProvider(filepath.Join(t.TempDir(), "audit.sqlite")) + if err != nil { + t.Fatal(err) + } + defer store.Close() + if err := store.Init(ctx); err != nil { + t.Fatal(err) + } + + now := time.Now().UTC() + if _, err := store.CreateUser(ctx, UserRecord{ + ID: "user_1", + UserName: "audit-user", + PasswordHash: "hash", + PasswordSalt: "salt", + Roles: []string{"R_USER"}, + Buttons: []string{"view"}, + CreatedAt: now, + UpdatedAt: now, + }); err != nil { + t.Fatalf("CreateUser: %v", err) + } + for _, rec := range []AuditRecord{ + {ID: "audit_sys", Action: "system_boot", CreatedAt: now}, + {ID: "audit_user", UserID: "user_1", Action: "login", CreatedAt: now.Add(time.Second)}, + } { + if err := store.CreateAuditLog(ctx, rec); err != nil { + t.Fatalf("CreateAuditLog(%s): %v", rec.ID, err) + } + } + + logs, err := store.ListAuditLogs(ctx, "", "", 10, 0) + if err != nil { + t.Fatal(err) + } + if len(logs) != 2 { + t.Fatalf("expected 2 audit logs, got %d", len(logs)) + } + count, err := store.CountAuditLogs(ctx, "", "") + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Fatalf("expected audit log count 2, got %d", count) + } +} + func repoPath(parts ...string) string { _, file, _, _ := runtime.Caller(0) base := filepath.Join(filepath.Dir(file), "..", "..", "..") diff --git a/backend/internal/storage/storage.go b/backend/internal/storage/storage.go index 2d290a1..42c336b 100644 --- a/backend/internal/storage/storage.go +++ b/backend/internal/storage/storage.go @@ -75,17 +75,17 @@ type AuditRecord struct { } type PasskeyCredential struct { - ID string `json:"id"` - UserID string `json:"user_id"` - CredentialID string `json:"credential_id"` - PublicKey string `json:"public_key"` - AttestationType string `json:"attestation_type"` - AAGUID string `json:"aaguid"` - SignCount uint32 `json:"sign_count"` - Transports string `json:"transports"` - Name string `json:"name"` - LastUsedAt time.Time `json:"last_used_at"` - CreatedAt time.Time `json:"created_at"` + ID string `json:"id"` + UserID string `json:"user_id"` + CredentialID string `json:"credential_id"` + PublicKey string `json:"public_key"` + AttestationType string `json:"attestation_type"` + AAGUID string `json:"aaguid"` + SignCount uint32 `json:"sign_count"` + Transports string `json:"transports"` + Name string `json:"name"` + LastUsedAt time.Time `json:"last_used_at"` + CreatedAt time.Time `json:"created_at"` } type ChallengeRecord struct { @@ -135,13 +135,17 @@ type Provider interface { FindAnyRefreshTokenByHash(context.Context, string) (RefreshTokenRecord, error) // 令牌族撤销:按 parent_id 链撤销整族 RevokeRefreshTokenFamily(context.Context, string) error + RevokeRefreshTokenByID(context.Context, string) error // 会话管理 CreateSession(context.Context, SessionRecord) error + GetSession(context.Context, string) (SessionRecord, error) + GetSessionByRefreshTokenID(context.Context, string) (SessionRecord, error) ListSessionsByUser(context.Context, string) ([]SessionRecord, error) RevokeSession(context.Context, string) error RevokeOtherSessions(context.Context, string, string) error // userID, currentSessionID UpdateSessionLastSeen(context.Context, string) error + UpdateSessionRefreshToken(context.Context, string, string) error // sessionID, refreshTokenID // 审计日志 CreateAuditLog(context.Context, AuditRecord) error diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md index cb06663..6cc0f22 100644 --- a/docs/engineering-standards.md +++ b/docs/engineering-standards.md @@ -36,6 +36,9 @@ - 分支策略:`main` 稳定且 CI 全绿,功能使用 `feat/*`,修复使用 `fix/*`,禁止直接推送 `main`。 - 跨 Android、Backend、Web、MsgLayer、Agent、Docker 的变更必须同步评估,并在 PR 中说明。 - 技术债记录在 `docs/technical-debt.md`,不要在无关 PR 中顺手改。 +- 默认不使用 subagent 或平行代理。只有用户明确要求委派、分工或 parallel agent work 时才可使用。 +- 面向用户的交付物禁止包含原始 scratchpad、逐段回放式研究过程或重复的中间分析;保留决策、变更、验证和风险即可。 +- 跨边界工作默认按纵向切片推进:先修契约和编译断点,再补客户端对齐,再扩展 UI/治理,避免单个不可审阅的大 diff。 ## 中文优先与国际化 @@ -92,6 +95,8 @@ CI 或 review 中使用 `bash scripts/sync-agent-skills.sh --check` 确认 `.cla - 治理:本文件、`AGENTS.md`、CI workflow、scripts、skills。 除非能消除真实重复或澄清跨模块契约,否则不要新增共享抽象。大文件或大 diff 需要拆分,或在 PR 中给出简短理由。 +- 当任务同时跨 Android、Backend、Web 时,优先拆成能独立验证的纵向切片:规则/文档、backend foundation、client parity、UI/运营面。 +- 如果某一切片尚未验证通过,不要继续向下堆叠新的跨边界能力。 ## 日志与隐私 From b226469e5346b4c5672f7222f41ae132a1f74631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 16:06:32 +0800 Subject: [PATCH 16/20] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90Commory?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=A0=B8=E5=BF=83=E5=8A=9F=E8=83=BD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=B8=8E=E5=B7=A5=E7=A8=8B=E8=A7=84=E8=8C=83=E8=A1=A5?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此提交完成了大量后端核心功能开发与工程规范完善: 1. 新增存储层契约测试套件,覆盖用户、会话、审计、密钥、导入查询全场景 2. 实现SQLite与文件存储两种后端的完整业务实现 3. 完成认证模块:密码哈希、JWT令牌、登录限流与审计日志 4. 实现API接口层:认证、会话管理、导入导出、查询搜索、SPA静态资源服务 5. 补全工程规范文档与CI校验脚本,统一项目代码治理标准 --- AGENTS.md | 15 + CLAUDE.md | 12 + backend/internal/api/auth_local.go | 118 +++ backend/internal/api/http.go | 83 ++ backend/internal/api/imports.go | 182 +++++ backend/internal/api/query.go | 147 ++++ backend/internal/api/server.go | 541 ------------- backend/internal/api/setup.go | 41 + backend/internal/api/spa.go | 30 + backend/internal/auth/audit_rate_limit.go | 63 ++ backend/internal/auth/passwords.go | 61 ++ backend/internal/auth/service.go | 275 ------- backend/internal/auth/tokens.go | 180 +++++ .../contracttest/auth_contract_test.go | 141 ++++ .../storage/contracttest/contract_test.go | 571 +------------ .../storage/contracttest/helpers_test.go | 23 + .../import_query_contract_test.go | 218 +++++ .../contracttest/passkey_contract_test.go | 98 +++ .../setup_session_audit_contract_test.go | 118 +++ backend/internal/storage/filestore.go | 750 ------------------ .../storage/filestore_auth_session.go | 247 ++++++ .../storage/filestore_imports_query.go | 231 ++++++ .../storage/filestore_setup_passkey.go | 191 +++++ backend/internal/storage/filestore_support.go | 113 +++ backend/internal/storage/sqlite.go | 732 ----------------- .../internal/storage/sqlite_auth_session.go | 159 ++++ .../internal/storage/sqlite_imports_query.go | 279 +++++++ .../internal/storage/sqlite_setup_passkey.go | 186 +++++ backend/internal/storage/sqlite_support.go | 119 +++ docs/engineering-standards.md | 15 + scripts/check-repo-hygiene.sh | 80 ++ scripts/report-loc-complexity.sh | 51 +- 32 files changed, 3197 insertions(+), 2873 deletions(-) create mode 100644 backend/internal/api/auth_local.go create mode 100644 backend/internal/api/http.go create mode 100644 backend/internal/api/imports.go create mode 100644 backend/internal/api/query.go create mode 100644 backend/internal/api/setup.go create mode 100644 backend/internal/api/spa.go create mode 100644 backend/internal/auth/audit_rate_limit.go create mode 100644 backend/internal/auth/passwords.go create mode 100644 backend/internal/auth/tokens.go create mode 100644 backend/internal/storage/contracttest/auth_contract_test.go create mode 100644 backend/internal/storage/contracttest/helpers_test.go create mode 100644 backend/internal/storage/contracttest/import_query_contract_test.go create mode 100644 backend/internal/storage/contracttest/passkey_contract_test.go create mode 100644 backend/internal/storage/contracttest/setup_session_audit_contract_test.go create mode 100644 backend/internal/storage/filestore_auth_session.go create mode 100644 backend/internal/storage/filestore_imports_query.go create mode 100644 backend/internal/storage/filestore_setup_passkey.go create mode 100644 backend/internal/storage/filestore_support.go create mode 100644 backend/internal/storage/sqlite_auth_session.go create mode 100644 backend/internal/storage/sqlite_imports_query.go create mode 100644 backend/internal/storage/sqlite_setup_passkey.go create mode 100644 backend/internal/storage/sqlite_support.go diff --git a/AGENTS.md b/AGENTS.md index 61427f6..3f9d859 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,6 +24,20 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 只加载任务需要的上下文包。不要把临时决策扩散到工具专属文件;长期规则放在 `docs/engineering-standards.md`,Agent 入口放在本文件,发布历史放在 `CHANGELOG.md`。 +## 结构治理 + +- 单文件只承载一个 feature slice 或一个清晰的层级职责;不要把多个独立功能继续堆进 `server.go`、`*service.go`、provider 实现文件。 +- 新增代码默认先并入现有同职责文件;仅在跨职责、逼近阈值或能明显改善审阅边界时拆分。 +- 禁止为了“拆分”制造 1 函数 / 1 类型微文件。新增紧耦合 helper 若总量低于约 `80` 行,默认并入同 feature 文件。 +- 手写业务源码进入重构警戒线为 `350` 行,硬上限为 `500` 行;生成代码、schema、fixture、资源文件不纳入硬失败,但超过 `1000` 行仍需在复杂度报告中暴露。 +- `bash scripts/check-repo-hygiene.sh` 默认对当前变更集中的手写源码执行 `500` 行硬门禁;全仓历史热点由 `bash scripts/report-loc-complexity.sh` 暴露,并按触碰范围持续治理。 +- handler 层按认证、导入、查询、会话、审计等能力分组;auth 层按 orchestration、token、password、audit/rate-limit 分组;storage provider 按 import/query、auth/session、setup/passkey/support 分组;test 按行为域分组,不保留 mega test file。 +- 跨 Android、Backend、Web 的改动必须同步评估契约、测试、文档和部署影响。 +- 默认按纵向切片推进:先修契约与基础层,再补客户端,再补 UI/治理;不要堆叠不可审阅的大 diff。 +- 默认不使用 subagent 或平行代理;只有用户明确要求委派、分工或 parallel agent work 时才可使用。 +- 面向用户的最终交付禁止包含原始 scratchpad、逐段回放式研究过程或重复的中间分析;保留决策、变更、验证和风险即可。 +- 长期规则变更必须同步更新 `AGENTS.md` 与 `CLAUDE.md`,不能只写进其它文档。 + ## 仓库边界 - `previewer/` 是历史归档。当前 Commory 工作不要更新它。 @@ -39,6 +53,7 @@ Commory 是一个本地优先的通信记忆 monorepo。工作时保持上下文 - `docs/technical-debt.md` 记录已知技术债,不要把无关债务混入功能 PR。 - 禁止直接推送 `main`;`feat/*` 用于功能,`fix/*` 用于修复。 - 跨 Android、Backend、Web、MsgLayer、Agent、Docker 的变更必须同步评估契约、文档、测试和部署影响。 +- 大文件或大 diff 若暂时无法继续拆分,必须在 PR 或交付说明里给出简短理由。 ## 命名 diff --git a/CLAUDE.md b/CLAUDE.md index 372a934..5370be3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,6 +2,18 @@ Claude Code 应把 `AGENTS.md` 视为项目唯一的规范入口。 +## 结构治理 + +- 单文件只承载一个 feature slice 或一个清晰职责,不继续向 `server.go`、`*service.go`、provider 实现文件堆多个独立功能。 +- 新增代码默认先并入现有同职责文件;仅在跨职责、逼近阈值或能明显改善审阅边界时拆分。 +- 禁止为了“拆分”制造 1 函数 / 1 类型微文件;低于约 `80` 行的紧耦合 helper 默认并入同 feature 文件。 +- 手写业务源码 `350` 行进入重构警戒线,`500` 行为硬上限;生成代码、schema、fixture、资源文件不做硬失败,但要在复杂度报告里暴露 `1000+` 文件。 +- `bash scripts/check-repo-hygiene.sh` 默认拦截当前变更集中的 `500+` 手写源码;全仓历史热点继续通过 `bash scripts/report-loc-complexity.sh` 报告。 +- 跨 Android、Backend、Web 的改动必须同步评估契约、测试、文档和部署影响,并按纵向切片推进,避免不可审阅的大 diff。 +- 默认不使用 subagent 或平行代理;只有用户明确要求委派或分工时才可使用。 +- 面向用户的交付不要回放原始 scratchpad 或重复中间研究结论,只保留决策、变更、验证和风险。 +- 长期规则变更必须同步更新 `AGENTS.md` 与 `CLAUDE.md`;详细说明服从 `docs/engineering-standards.md`。 + ## Skills - `.agents/skills` 是项目 skills 的唯一手工维护来源。 diff --git a/backend/internal/api/auth_local.go b/backend/internal/api/auth_local.go new file mode 100644 index 0000000..f58a9e4 --- /dev/null +++ b/backend/internal/api/auth_local.go @@ -0,0 +1,118 @@ +package api + +import ( + "encoding/json" + "net/http" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" +) + +func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + UserName string `json:"userName"` + Email string `json:"email"` + Password string `json:"password"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + user, pair, err := s.auth.RegisterWithDevice(r.Context(), req.UserName, req.Email, req.Password, + r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) + writeJSON(w, http.StatusCreated, "registered", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + UserName string `json:"userName"` + Password string `json:"password"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + user, pair, err := s.auth.LoginWithDevice(r.Context(), r.RemoteAddr, req.UserName, req.Password, + r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "user": user, + "token": pair.AccessToken, + "refreshToken": pair.RefreshToken, + }) +} + +func (s *Server) handleRefresh(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + RefreshToken string `json:"refreshToken"` + } + _ = json.NewDecoder(r.Body).Decode(&req) + refreshToken := req.RefreshToken + if refreshToken == "" { + if cookie, err := r.Cookie(refreshCookieName); err == nil { + refreshToken = cookie.Value + } + } + pair, err := s.auth.Refresh(r.Context(), refreshToken) + if err != nil { + clearRefreshCookie(w, s.cfg.TLS) + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) + writeJSON(w, http.StatusOK, "ok", pair) +} + +func (s *Server) handleLogout(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + var req struct { + RefreshToken string `json:"refreshToken"` + } + _ = json.NewDecoder(r.Body).Decode(&req) + refreshToken := req.RefreshToken + if refreshToken == "" { + if cookie, err := r.Cookie(refreshCookieName); err == nil { + refreshToken = cookie.Value + } + } + _ = s.auth.RevokeRefreshToken(r.Context(), refreshToken) + clearRefreshCookie(w, s.cfg.TLS) + writeJSON(w, http.StatusOK, "logged out", map[string]any{"success": true}) +} + +func (s *Server) handleUserInfo(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + user, err := s.auth.UserInfo(r.Context(), userID) + if err != nil { + writeError(w, http.StatusUnauthorized, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", user) +} diff --git a/backend/internal/api/http.go b/backend/internal/api/http.go new file mode 100644 index 0000000..ee89250 --- /dev/null +++ b/backend/internal/api/http.go @@ -0,0 +1,83 @@ +package api + +import ( + "context" + "encoding/json" + "io" + "net/http" + "os" + "path/filepath" + "strings" +) + +const refreshCookieName = "commory_refresh_token" + +func readUpload(r *http.Request) ([]byte, string, error) { + contentType := r.Header.Get("Content-Type") + if strings.Contains(contentType, "multipart/form-data") { + if err := r.ParseMultipartForm(32 << 20); err != nil { + return nil, "", err + } + file, header, err := r.FormFile("file") + if err != nil { + return nil, "", err + } + defer file.Close() + data, err := io.ReadAll(file) + return data, header.Filename, err + } + data, err := io.ReadAll(r.Body) + if err != nil { + return nil, "", err + } + return data, "upload.json", nil +} + +func writeJSON(w http.ResponseWriter, status int, msg string, data any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _ = json.NewEncoder(w).Encode(map[string]any{ + "code": status, + "msg": msg, + "data": data, + }) +} + +func writeError(w http.ResponseWriter, status int, msg string) { + writeJSON(w, status, msg, nil) +} + +func setRefreshCookie(w http.ResponseWriter, token string, secure bool) { + http.SetCookie(w, &http.Cookie{ + Name: refreshCookieName, + Value: token, + Path: "/", + HttpOnly: true, + SameSite: http.SameSiteStrictMode, + Secure: secure, + }) +} + +func clearRefreshCookie(w http.ResponseWriter, secure bool) { + http.SetCookie(w, &http.Cookie{ + Name: refreshCookieName, + Value: "", + Path: "/", + MaxAge: -1, + HttpOnly: true, + Secure: secure, + }) +} + +func Shutdown(ctx context.Context, srv *http.Server) error { + return srv.Shutdown(ctx) +} + +func ensureWebRootIndex(root string) string { + return filepath.Join(root, "index.html") +} + +func fileExists(path string) bool { + info, err := os.Stat(path) + return err == nil && !info.IsDir() +} diff --git a/backend/internal/api/imports.go b/backend/internal/api/imports.go new file mode 100644 index 0000000..31666a3 --- /dev/null +++ b/backend/internal/api/imports.go @@ -0,0 +1,182 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "os" + "path/filepath" + "strings" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" +) + +func (s *Server) handleImports(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + userID := auth.UserIDFromContext(r.Context()) + items, err := s.store.ListImports(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleImportExport(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + path := strings.TrimPrefix(r.URL.Path, "/api/imports/") + if !strings.HasSuffix(path, "/export") { + writeError(w, http.StatusNotFound, "not found") + return + } + importID := strings.TrimSuffix(path, "/export") + importID = strings.TrimSuffix(importID, "/") + raw, err := s.store.ExportImport(r.Context(), auth.UserIDFromContext(r.Context()), importID) + if err != nil { + writeError(w, http.StatusNotFound, err.Error()) + return + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", importID+".json")) + w.WriteHeader(http.StatusOK) + _, _ = w.Write(raw) +} + +func (s *Server) handleImportUpload(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + userID := auth.UserIDFromContext(r.Context()) + raw, sourceName, err := readUpload(r) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + export, raw, err := s.importer.ImportBytes(raw) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + importID, err := s.store.Import(r.Context(), userID, sourceName, export, raw) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusCreated, "imported", map[string]any{ + "import_id": importID, + "msglayer_version": export.Version, + }) +} + +func (s *Server) handleImportPath(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + var req struct { + Path string `json:"path"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + resolved, err := s.resolveAllowedPath(req.Path) + if err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + export, raw, err := s.importer.Import(resolved) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + importID, err := s.store.Import(r.Context(), auth.UserIDFromContext(r.Context()), resolved, export, raw) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusCreated, "imported", map[string]any{ + "import_id": importID, + "msglayer_version": export.Version, + }) +} + +func (s *Server) handleValidateUpload(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + raw, _, err := readUpload(r) + if err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.validator.ValidateBytes(raw); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) +} + +func (s *Server) handleValidatePath(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + if err := s.requireAdmin(r.Context()); err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + var req struct { + Path string `json:"path"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + resolved, err := s.resolveAllowedPath(req.Path) + if err != nil { + writeError(w, http.StatusForbidden, err.Error()) + return + } + if err := s.validator.ValidateFile(resolved); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) +} + +func (s *Server) resolveAllowedPath(input string) (string, error) { + if strings.TrimSpace(input) == "" { + return "", fmt.Errorf("path is required") + } + resolved, err := filepath.Abs(input) + if err != nil { + return "", err + } + for _, root := range s.cfg.AllowedImportDir { + if strings.HasPrefix(resolved, root+string(os.PathSeparator)) || resolved == root { + return resolved, nil + } + } + return "", fmt.Errorf("path is outside configured import roots") +} diff --git a/backend/internal/api/query.go b/backend/internal/api/query.go new file mode 100644 index 0000000..0514d4a --- /dev/null +++ b/backend/internal/api/query.go @@ -0,0 +1,147 @@ +package api + +import ( + "fmt" + "net/http" + "strings" + + "github.com/IsKenKenYa/Commory/backend/internal/auth" + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func (s *Server) handleDashboard(w http.ResponseWriter, r *http.Request) { + userID := auth.UserIDFromContext(r.Context()) + imports, err := s.store.ListImports(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + identities, err := s.service.Identities(r.Context(), userID) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + events, err := s.service.Timeline(r.Context(), buildSearchParams(r, userID)) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + totalEvents := 0 + for _, item := range imports { + totalEvents += item.EventCount + } + lastActivity := "" + if len(events) > 0 { + lastActivity = events[0].Timestamp + } + writeJSON(w, http.StatusOK, "ok", map[string]any{ + "importCount": len(imports), + "identityCount": len(identities), + "eventCount": totalEvents, + "lastActivity": lastActivity, + "recentImports": takeImports(imports, 5), + "recentEvents": takeEvents(events, 8), + }) +} + +func (s *Server) handleEvents(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Events(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleEvent(w http.ResponseWriter, r *http.Request) { + id := strings.TrimPrefix(r.URL.Path, "/api/events/") + item, err := s.service.Event(r.Context(), auth.UserIDFromContext(r.Context()), id) + if err != nil { + writeError(w, http.StatusNotFound, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", item) +} + +func (s *Server) handleTimeline(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Timeline(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleIdentities(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Identities(r.Context(), auth.UserIDFromContext(r.Context())) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleIdentity(w http.ResponseWriter, r *http.Request) { + id := strings.TrimPrefix(r.URL.Path, "/api/identities/") + item, err := s.service.Identity(r.Context(), auth.UserIDFromContext(r.Context()), id) + if err != nil { + writeError(w, http.StatusNotFound, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", item) +} + +func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) { + items, err := s.service.Search(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { + id := strings.TrimPrefix(r.URL.Path, "/api/threads/") + items, err := s.service.Thread(r.Context(), auth.UserIDFromContext(r.Context()), id) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", items) +} + +func buildSearchParams(r *http.Request, userID string) msglayer.SearchParams { + q := r.URL.Query() + params := msglayer.SearchParams{ + UserID: userID, + Keyword: q.Get("q"), + ContactID: q.Get("contact"), + Type: q.Get("type"), + Participant: q.Get("participant"), + From: q.Get("from"), + To: q.Get("to"), + Limit: 100, + } + if limit := q.Get("limit"); limit != "" { + fmt.Sscanf(limit, "%d", ¶ms.Limit) + } + if offset := q.Get("offset"); offset != "" { + fmt.Sscanf(offset, "%d", ¶ms.Offset) + } + return params +} + +func takeImports(items []storage.ImportSummary, n int) []storage.ImportSummary { + if len(items) <= n { + return items + } + return items[:n] +} + +func takeEvents(items []msglayer.TimelineItem, n int) []msglayer.TimelineItem { + if len(items) <= n { + return items + } + return items[:n] +} diff --git a/backend/internal/api/server.go b/backend/internal/api/server.go index 5352077..210e23e 100644 --- a/backend/internal/api/server.go +++ b/backend/internal/api/server.go @@ -1,15 +1,7 @@ package api import ( - "context" - "encoding/json" - "fmt" - "io" "net/http" - "os" - urlpath "path" - "path/filepath" - "strings" "github.com/IsKenKenYa/Commory/backend/internal/auth" "github.com/IsKenKenYa/Commory/backend/internal/auth/oauth" @@ -22,8 +14,6 @@ import ( "github.com/IsKenKenYa/Commory/backend/internal/storage" ) -const refreshCookieName = "commory_refresh_token" - type Server struct { cfg config.Config store storage.Provider @@ -103,534 +93,3 @@ func (s *Server) Handler() http.Handler { } return root } - -func spaHandler(root string) http.Handler { - fileServer := http.FileServer(http.Dir(root)) - indexPath := filepath.Join(root, "index.html") - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet && r.Method != http.MethodHead { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - cleanPath := strings.TrimPrefix(urlpath.Clean("/"+r.URL.Path), "/") - if cleanPath == "" { - cleanPath = "index.html" - } - targetPath := filepath.Join(root, filepath.FromSlash(cleanPath)) - if info, err := os.Stat(targetPath); err == nil && !info.IsDir() { - fileServer.ServeHTTP(w, r) - return - } - http.ServeFile(w, r, indexPath) - }) -} - -func (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - var req struct { - UserName string `json:"userName"` - Email string `json:"email"` - Password string `json:"password"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - user, pair, err := s.auth.RegisterWithDevice(r.Context(), req.UserName, req.Email, req.Password, - r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) - if err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) - writeJSON(w, http.StatusCreated, "registered", map[string]any{ - "user": user, - "token": pair.AccessToken, - "refreshToken": pair.RefreshToken, - }) -} - -func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - var req struct { - UserName string `json:"userName"` - Password string `json:"password"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - user, pair, err := s.auth.LoginWithDevice(r.Context(), r.RemoteAddr, req.UserName, req.Password, - r.Header.Get("X-Commory-Device"), r.Header.Get("X-Forwarded-For"), r.Header.Get("User-Agent")) - if err != nil { - writeError(w, http.StatusUnauthorized, err.Error()) - return - } - setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "user": user, - "token": pair.AccessToken, - "refreshToken": pair.RefreshToken, - }) -} - -func (s *Server) handleRefresh(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - var req struct { - RefreshToken string `json:"refreshToken"` - } - _ = json.NewDecoder(r.Body).Decode(&req) - refreshToken := req.RefreshToken - if refreshToken == "" { - if cookie, err := r.Cookie(refreshCookieName); err == nil { - refreshToken = cookie.Value - } - } - pair, err := s.auth.Refresh(r.Context(), refreshToken) - if err != nil { - clearRefreshCookie(w, s.cfg.TLS) - writeError(w, http.StatusUnauthorized, err.Error()) - return - } - setRefreshCookie(w, pair.RefreshToken, s.cfg.TLS) - writeJSON(w, http.StatusOK, "ok", pair) -} - -func (s *Server) handleLogout(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - var req struct { - RefreshToken string `json:"refreshToken"` - } - _ = json.NewDecoder(r.Body).Decode(&req) - refreshToken := req.RefreshToken - if refreshToken == "" { - if cookie, err := r.Cookie(refreshCookieName); err == nil { - refreshToken = cookie.Value - } - } - _ = s.auth.RevokeRefreshToken(r.Context(), refreshToken) - clearRefreshCookie(w, s.cfg.TLS) - writeJSON(w, http.StatusOK, "logged out", map[string]any{"success": true}) -} - -func (s *Server) handleSetup(w http.ResponseWriter, r *http.Request) { - switch r.Method { - case http.MethodGet: - s.handleGetSetup(w, r) - case http.MethodPost: - s.handlePostSetup(w, r) - default: - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - } -} - -func (s *Server) handleGetSetup(w http.ResponseWriter, r *http.Request) { - status, err := s.setupSvc.GetStatus(r.Context()) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", status) -} - -func (s *Server) handlePostSetup(w http.ResponseWriter, r *http.Request) { - var req setup.SetupRequest - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - if err := s.setupSvc.Initialize(r.Context(), req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - writeJSON(w, http.StatusOK, "initialized", map[string]any{"success": true}) -} - -func (s *Server) handleUserInfo(w http.ResponseWriter, r *http.Request) { - userID := auth.UserIDFromContext(r.Context()) - user, err := s.auth.UserInfo(r.Context(), userID) - if err != nil { - writeError(w, http.StatusUnauthorized, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", user) -} - -func (s *Server) handleImports(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - userID := auth.UserIDFromContext(r.Context()) - items, err := s.store.ListImports(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) handleImportExport(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - path := strings.TrimPrefix(r.URL.Path, "/api/imports/") - if !strings.HasSuffix(path, "/export") { - writeError(w, http.StatusNotFound, "not found") - return - } - importID := strings.TrimSuffix(path, "/export") - importID = strings.TrimSuffix(importID, "/") - raw, err := s.store.ExportImport(r.Context(), auth.UserIDFromContext(r.Context()), importID) - if err != nil { - writeError(w, http.StatusNotFound, err.Error()) - return - } - w.Header().Set("Content-Type", "application/json") - w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", importID+".json")) - w.WriteHeader(http.StatusOK) - _, _ = w.Write(raw) -} - -func (s *Server) handleImportUpload(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - userID := auth.UserIDFromContext(r.Context()) - raw, sourceName, err := readUpload(r) - if err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - export, raw, err := s.importer.ImportBytes(raw) - if err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - if err := s.validator.ValidateBytes(raw); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - importID, err := s.store.Import(r.Context(), userID, sourceName, export, raw) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusCreated, "imported", map[string]any{ - "import_id": importID, - "msglayer_version": export.Version, - }) -} - -func (s *Server) handleImportPath(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if err := s.requireAdmin(r.Context()); err != nil { - writeError(w, http.StatusForbidden, err.Error()) - return - } - var req struct { - Path string `json:"path"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - resolved, err := s.resolveAllowedPath(req.Path) - if err != nil { - writeError(w, http.StatusForbidden, err.Error()) - return - } - export, raw, err := s.importer.Import(resolved) - if err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - if err := s.validator.ValidateBytes(raw); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - importID, err := s.store.Import(r.Context(), auth.UserIDFromContext(r.Context()), resolved, export, raw) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusCreated, "imported", map[string]any{ - "import_id": importID, - "msglayer_version": export.Version, - }) -} - -func (s *Server) handleValidateUpload(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - raw, _, err := readUpload(r) - if err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - if err := s.validator.ValidateBytes(raw); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) -} - -func (s *Server) handleValidatePath(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - writeError(w, http.StatusMethodNotAllowed, "method not allowed") - return - } - if err := s.requireAdmin(r.Context()); err != nil { - writeError(w, http.StatusForbidden, err.Error()) - return - } - var req struct { - Path string `json:"path"` - } - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - resolved, err := s.resolveAllowedPath(req.Path) - if err != nil { - writeError(w, http.StatusForbidden, err.Error()) - return - } - if err := s.validator.ValidateFile(resolved); err != nil { - writeError(w, http.StatusBadRequest, err.Error()) - return - } - writeJSON(w, http.StatusOK, "valid", map[string]any{"valid": true}) -} - -func (s *Server) handleDashboard(w http.ResponseWriter, r *http.Request) { - userID := auth.UserIDFromContext(r.Context()) - imports, err := s.store.ListImports(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - identities, err := s.service.Identities(r.Context(), userID) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - events, err := s.service.Timeline(r.Context(), buildSearchParams(r, userID)) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - totalEvents := 0 - for _, item := range imports { - totalEvents += item.EventCount - } - lastActivity := "" - if len(events) > 0 { - lastActivity = events[0].Timestamp - } - writeJSON(w, http.StatusOK, "ok", map[string]any{ - "importCount": len(imports), - "identityCount": len(identities), - "eventCount": totalEvents, - "lastActivity": lastActivity, - "recentImports": takeImports(imports, 5), - "recentEvents": takeEvents(events, 8), - }) -} - -func (s *Server) handleEvents(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Events(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) handleEvent(w http.ResponseWriter, r *http.Request) { - id := strings.TrimPrefix(r.URL.Path, "/api/events/") - item, err := s.service.Event(r.Context(), auth.UserIDFromContext(r.Context()), id) - if err != nil { - writeError(w, http.StatusNotFound, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", item) -} - -func (s *Server) handleTimeline(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Timeline(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) handleIdentities(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Identities(r.Context(), auth.UserIDFromContext(r.Context())) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) handleIdentity(w http.ResponseWriter, r *http.Request) { - id := strings.TrimPrefix(r.URL.Path, "/api/identities/") - item, err := s.service.Identity(r.Context(), auth.UserIDFromContext(r.Context()), id) - if err != nil { - writeError(w, http.StatusNotFound, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", item) -} - -func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) { - items, err := s.service.Search(r.Context(), buildSearchParams(r, auth.UserIDFromContext(r.Context()))) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) handleThread(w http.ResponseWriter, r *http.Request) { - id := strings.TrimPrefix(r.URL.Path, "/api/threads/") - items, err := s.service.Thread(r.Context(), auth.UserIDFromContext(r.Context()), id) - if err != nil { - writeError(w, http.StatusInternalServerError, err.Error()) - return - } - writeJSON(w, http.StatusOK, "ok", items) -} - -func (s *Server) resolveAllowedPath(input string) (string, error) { - if strings.TrimSpace(input) == "" { - return "", fmt.Errorf("path is required") - } - resolved, err := filepath.Abs(input) - if err != nil { - return "", err - } - for _, root := range s.cfg.AllowedImportDir { - if strings.HasPrefix(resolved, root+string(os.PathSeparator)) || resolved == root { - return resolved, nil - } - } - return "", fmt.Errorf("path is outside configured import roots") -} - -func buildSearchParams(r *http.Request, userID string) msglayer.SearchParams { - q := r.URL.Query() - params := msglayer.SearchParams{ - UserID: userID, - Keyword: q.Get("q"), - ContactID: q.Get("contact"), - Type: q.Get("type"), - Participant: q.Get("participant"), - From: q.Get("from"), - To: q.Get("to"), - Limit: 100, - } - if limit := q.Get("limit"); limit != "" { - fmt.Sscanf(limit, "%d", ¶ms.Limit) - } - if offset := q.Get("offset"); offset != "" { - fmt.Sscanf(offset, "%d", ¶ms.Offset) - } - return params -} - -func readUpload(r *http.Request) ([]byte, string, error) { - contentType := r.Header.Get("Content-Type") - if strings.Contains(contentType, "multipart/form-data") { - if err := r.ParseMultipartForm(32 << 20); err != nil { - return nil, "", err - } - file, header, err := r.FormFile("file") - if err != nil { - return nil, "", err - } - defer file.Close() - data, err := io.ReadAll(file) - return data, header.Filename, err - } - data, err := io.ReadAll(r.Body) - if err != nil { - return nil, "", err - } - return data, "upload.json", nil -} - -func writeJSON(w http.ResponseWriter, status int, msg string, data any) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(status) - _ = json.NewEncoder(w).Encode(map[string]any{ - "code": status, - "msg": msg, - "data": data, - }) -} - -func writeError(w http.ResponseWriter, status int, msg string) { - writeJSON(w, status, msg, nil) -} - -func setRefreshCookie(w http.ResponseWriter, token string, secure bool) { - http.SetCookie(w, &http.Cookie{ - Name: refreshCookieName, - Value: token, - Path: "/", - HttpOnly: true, - SameSite: http.SameSiteStrictMode, - Secure: secure, - }) -} - -func clearRefreshCookie(w http.ResponseWriter, secure bool) { - http.SetCookie(w, &http.Cookie{ - Name: refreshCookieName, - Value: "", - Path: "/", - MaxAge: -1, - HttpOnly: true, - Secure: secure, - }) -} - -func takeImports(items []storage.ImportSummary, n int) []storage.ImportSummary { - if len(items) <= n { - return items - } - return items[:n] -} - -func takeEvents(items []msglayer.TimelineItem, n int) []msglayer.TimelineItem { - if len(items) <= n { - return items - } - return items[:n] -} - -func Shutdown(ctx context.Context, srv *http.Server) error { - return srv.Shutdown(ctx) -} diff --git a/backend/internal/api/setup.go b/backend/internal/api/setup.go new file mode 100644 index 0000000..cb43d61 --- /dev/null +++ b/backend/internal/api/setup.go @@ -0,0 +1,41 @@ +package api + +import ( + "encoding/json" + "net/http" + + "github.com/IsKenKenYa/Commory/backend/internal/setup" +) + +func (s *Server) handleSetup(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + s.handleGetSetup(w, r) + case http.MethodPost: + s.handlePostSetup(w, r) + default: + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + } +} + +func (s *Server) handleGetSetup(w http.ResponseWriter, r *http.Request) { + status, err := s.setupSvc.GetStatus(r.Context()) + if err != nil { + writeError(w, http.StatusInternalServerError, err.Error()) + return + } + writeJSON(w, http.StatusOK, "ok", status) +} + +func (s *Server) handlePostSetup(w http.ResponseWriter, r *http.Request) { + var req setup.SetupRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + if err := s.setupSvc.Initialize(r.Context(), req); err != nil { + writeError(w, http.StatusBadRequest, err.Error()) + return + } + writeJSON(w, http.StatusOK, "initialized", map[string]any{"success": true}) +} diff --git a/backend/internal/api/spa.go b/backend/internal/api/spa.go new file mode 100644 index 0000000..fc63687 --- /dev/null +++ b/backend/internal/api/spa.go @@ -0,0 +1,30 @@ +package api + +import ( + "net/http" + "os" + urlpath "path" + "path/filepath" + "strings" +) + +func spaHandler(root string) http.Handler { + fileServer := http.FileServer(http.Dir(root)) + indexPath := ensureWebRootIndex(root) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet && r.Method != http.MethodHead { + writeError(w, http.StatusMethodNotAllowed, "method not allowed") + return + } + cleanPath := strings.TrimPrefix(urlpath.Clean("/"+r.URL.Path), "/") + if cleanPath == "" { + cleanPath = "index.html" + } + targetPath := filepath.Join(root, filepath.FromSlash(cleanPath)) + if info, err := os.Stat(targetPath); err == nil && !info.IsDir() { + fileServer.ServeHTTP(w, r) + return + } + http.ServeFile(w, r, indexPath) + }) +} diff --git a/backend/internal/auth/audit_rate_limit.go b/backend/internal/auth/audit_rate_limit.go new file mode 100644 index 0000000..43d5738 --- /dev/null +++ b/backend/internal/auth/audit_rate_limit.go @@ -0,0 +1,63 @@ +package auth + +import ( + "context" + "fmt" + "net" + "strings" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +func detectDeviceType(userAgent string) string { + ua := strings.ToLower(userAgent) + switch { + case strings.Contains(ua, "commory"): + return "android" + case strings.Contains(ua, "mozilla") || strings.Contains(ua, "chrome") || strings.Contains(ua, "safari"): + return "web" + default: + return "unknown" + } +} + +func (s *Service) writeAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { + return s.store.CreateAuditLog(ctx, storage.AuditRecord{ + ID: randomID("audit"), + UserID: userID, + Action: action, + IPAddress: ipAddress, + UserAgent: userAgent, + Detail: detail, + CreatedAt: time.Now().UTC(), + }) +} + +func (s *Service) WriteAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { + return s.writeAuditLog(ctx, userID, action, ipAddress, userAgent, detail) +} + +func (s *Service) allowLoginAttempt(remoteAddr string) error { + s.loginMu.Lock() + defer s.loginMu.Unlock() + + host, _, err := net.SplitHostPort(remoteAddr) + if err != nil { + host = remoteAddr + } + now := time.Now() + cutoff := now.Add(-time.Minute) + window := s.loginWindow[host][:0] + for _, ts := range s.loginWindow[host] { + if ts.After(cutoff) { + window = append(window, ts) + } + } + if len(window) >= 5 { + s.loginWindow[host] = window + return fmt.Errorf("too many login attempts, please retry in a minute") + } + s.loginWindow[host] = append(window, now) + return nil +} diff --git a/backend/internal/auth/passwords.go b/backend/internal/auth/passwords.go new file mode 100644 index 0000000..af54ba9 --- /dev/null +++ b/backend/internal/auth/passwords.go @@ -0,0 +1,61 @@ +package auth + +import ( + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "encoding/hex" + "strings" +) + +func hashPassword(password string) (salt string, hash string, err error) { + rawSalt := make([]byte, 16) + if _, err := rand.Read(rawSalt); err != nil { + return "", "", err + } + salt = hex.EncodeToString(rawSalt) + sum := derivePasswordPBKDF2(password, salt, 120000) + return salt, "pbkdf2$" + hex.EncodeToString(sum[:]), nil +} + +func verifyPassword(password, salt, expected string) bool { + var sum [32]byte + if strings.HasPrefix(expected, "pbkdf2$") { + sum = derivePasswordPBKDF2(password, salt, 120000) + return hmac.Equal([]byte("pbkdf2$"+hex.EncodeToString(sum[:])), []byte(expected)) + } + stripped := strings.TrimPrefix(expected, "sha256$") + sum = derivePasswordLegacy(password, salt) + return hmac.Equal([]byte(hex.EncodeToString(sum[:])), []byte(stripped)) +} + +func NeedsRehash(hash string) bool { + return !strings.HasPrefix(hash, "pbkdf2$") +} + +func derivePasswordPBKDF2(password, salt string, iterations int) [32]byte { + prf := hmac.New(sha256.New, []byte(password)) + var result [32]byte + prf.Write([]byte(salt)) + prf.Write([]byte{0, 0, 0, 1}) + u := prf.Sum(nil) + copy(result[:], u) + for i := 1; i < iterations; i++ { + prf.Reset() + prf.Write(u) + u = prf.Sum(nil) + for j := 0; j < 32; j++ { + result[j] ^= u[j] + } + } + return result +} + +func derivePasswordLegacy(password, salt string) [32]byte { + input := []byte(password + ":" + salt) + sum := sha256.Sum256(input) + for i := 0; i < 120000; i++ { + sum = sha256.Sum256(append(sum[:], input...)) + } + return sum +} diff --git a/backend/internal/auth/service.go b/backend/internal/auth/service.go index 82923d1..82c900b 100644 --- a/backend/internal/auth/service.go +++ b/backend/internal/auth/service.go @@ -2,14 +2,7 @@ package auth import ( "context" - "crypto/hmac" - "crypto/rand" - "crypto/sha256" - "encoding/base64" - "encoding/hex" - "encoding/json" "fmt" - "net" "strings" "sync" "time" @@ -29,12 +22,6 @@ type Service struct { loginWindow map[string][]time.Time } -type AccessTokenClaims struct { - UserID string - SessionID string - ExpiresAt int64 -} - func NewService(store storage.Provider, secret string) *Service { return &Service{ store: store, @@ -259,175 +246,6 @@ func (s *Service) UserInfo(ctx context.Context, userID string) (UserInfo, error) return toUserInfo(user), nil } -// IssueTokenPairForUser 为已验证的用户签发 token pair(Passkey 登录用) -func (s *Service) IssueTokenPairForUser(ctx context.Context, user storage.UserRecord, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { - return s.issueTokenPairWithSession(ctx, user, "", "", deviceName, ipAddress, userAgent) -} - -func (s *Service) ParseAccessToken(token string) (string, error) { - claims, err := s.ParseAccessTokenClaims(token) - if err != nil { - return "", err - } - return claims.UserID, nil -} - -func (s *Service) ParseAccessTokenClaims(token string) (AccessTokenClaims, error) { - token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) - parts := strings.Split(token, ".") - if len(parts) != 3 { - return AccessTokenClaims{}, fmt.Errorf("invalid token") - } - - signingInput := strings.Join(parts[:2], ".") - expected := signHS256(signingInput, s.secret) - if !hmac.Equal([]byte(expected), []byte(parts[2])) { - return AccessTokenClaims{}, fmt.Errorf("invalid token signature") - } - - payloadBytes, err := base64.RawURLEncoding.DecodeString(parts[1]) - if err != nil { - return AccessTokenClaims{}, fmt.Errorf("decode token payload: %w", err) - } - var payload struct { - Sub string `json:"sub"` - Sid string `json:"sid"` - Exp int64 `json:"exp"` - } - if err := json.Unmarshal(payloadBytes, &payload); err != nil { - return AccessTokenClaims{}, fmt.Errorf("decode token json: %w", err) - } - if payload.Sub == "" || time.Now().Unix() > payload.Exp { - return AccessTokenClaims{}, fmt.Errorf("token expired") - } - return AccessTokenClaims{ - UserID: payload.Sub, - SessionID: payload.Sid, - ExpiresAt: payload.Exp, - }, nil -} - -func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.UserRecord, parentID, sessionID, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { - refreshToken, refreshHash, err := buildRefreshToken() - if err != nil { - return TokenPair{}, "", err - } - refreshID := randomID("refresh") - if sessionID == "" { - sessionID = randomID("session") - } - accessToken, err := s.buildAccessToken(user, sessionID) - if err != nil { - return TokenPair{}, "", err - } - if err := s.store.SaveRefreshToken(ctx, storage.RefreshTokenRecord{ - ID: refreshID, - UserID: user.ID, - TokenHash: refreshHash, - ParentID: parentID, - ExpiresAt: time.Now().UTC().Add(refreshTokenTTL), - CreatedAt: time.Now().UTC(), - }); err != nil { - return TokenPair{}, "", err - } - - now := time.Now().UTC() - if parentID == "" { - if err := s.store.CreateSession(ctx, storage.SessionRecord{ - ID: sessionID, - UserID: user.ID, - RefreshTokenID: refreshID, - DeviceName: deviceName, - DeviceType: detectDeviceType(userAgent), - IPAddress: ipAddress, - UserAgent: userAgent, - CreatedAt: now, - LastSeenAt: now, - }); err != nil { - return TokenPair{}, "", err - } - } else { - if err := s.store.UpdateSessionRefreshToken(ctx, sessionID, refreshID); err != nil { - return TokenPair{}, "", err - } - } - - return TokenPair{ - AccessToken: accessToken, - RefreshToken: refreshToken, - }, sessionID, nil -} - -func detectDeviceType(userAgent string) string { - ua := strings.ToLower(userAgent) - switch { - case strings.Contains(ua, "commory"): - return "android" - case strings.Contains(ua, "mozilla") || strings.Contains(ua, "chrome") || strings.Contains(ua, "safari"): - return "web" - default: - return "unknown" - } -} - -func (s *Service) writeAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { - return s.store.CreateAuditLog(ctx, storage.AuditRecord{ - ID: randomID("audit"), - UserID: userID, - Action: action, - IPAddress: ipAddress, - UserAgent: userAgent, - Detail: detail, - CreatedAt: time.Now().UTC(), - }) -} - -func (s *Service) WriteAuditLog(ctx context.Context, userID, action, ipAddress, userAgent, detail string) error { - return s.writeAuditLog(ctx, userID, action, ipAddress, userAgent, detail) -} - -func (s *Service) buildAccessToken(user storage.UserRecord, sessionID string) (string, error) { - headerBytes, _ := json.Marshal(map[string]string{"alg": "HS256", "typ": "JWT"}) - payloadBytes, err := json.Marshal(map[string]any{ - "sub": user.ID, - "sid": sessionID, - "userName": user.UserName, - "roles": user.Roles, - "exp": time.Now().Add(accessTokenTTL).Unix(), - }) - if err != nil { - return "", err - } - header := base64.RawURLEncoding.EncodeToString(headerBytes) - payload := base64.RawURLEncoding.EncodeToString(payloadBytes) - signingInput := header + "." + payload - return signingInput + "." + signHS256(signingInput, s.secret), nil -} - -func (s *Service) allowLoginAttempt(remoteAddr string) error { - s.loginMu.Lock() - defer s.loginMu.Unlock() - - host, _, err := net.SplitHostPort(remoteAddr) - if err != nil { - host = remoteAddr - } - now := time.Now() - cutoff := now.Add(-time.Minute) - window := s.loginWindow[host][:0] - for _, ts := range s.loginWindow[host] { - if ts.After(cutoff) { - window = append(window, ts) - } - } - if len(window) >= 5 { - s.loginWindow[host] = window - return fmt.Errorf("too many login attempts, please retry in a minute") - } - s.loginWindow[host] = append(window, now) - return nil -} - func toUserInfo(user storage.UserRecord) UserInfo { return UserInfo{ Buttons: append([]string(nil), user.Buttons...), @@ -437,96 +255,3 @@ func toUserInfo(user storage.UserRecord) UserInfo { Email: user.Email, } } - -func hashPassword(password string) (salt string, hash string, err error) { - rawSalt := make([]byte, 16) - if _, err := rand.Read(rawSalt); err != nil { - return "", "", err - } - salt = hex.EncodeToString(rawSalt) - sum := derivePasswordPBKDF2(password, salt, 120000) - return salt, "pbkdf2$" + hex.EncodeToString(sum[:]), nil -} - -func verifyPassword(password, salt, expected string) bool { - var sum [32]byte - if strings.HasPrefix(expected, "pbkdf2$") { - sum = derivePasswordPBKDF2(password, salt, 120000) - return hmac.Equal([]byte("pbkdf2$"+hex.EncodeToString(sum[:])), []byte(expected)) - } - stripped := strings.TrimPrefix(expected, "sha256$") - sum = derivePasswordLegacy(password, salt) - return hmac.Equal([]byte(hex.EncodeToString(sum[:])), []byte(stripped)) -} - -func NeedsRehash(hash string) bool { - return !strings.HasPrefix(hash, "pbkdf2$") -} - -func derivePasswordPBKDF2(password, salt string, iterations int) [32]byte { - prf := hmac.New(sha256.New, []byte(password)) - var result [32]byte - prf.Write([]byte(salt)) - prf.Write([]byte{0, 0, 0, 1}) - u := prf.Sum(nil) - copy(result[:], u) - for i := 1; i < iterations; i++ { - prf.Reset() - prf.Write(u) - u = prf.Sum(nil) - for j := 0; j < 32; j++ { - result[j] ^= u[j] - } - } - return result -} - -func derivePasswordLegacy(password, salt string) [32]byte { - input := []byte(password + ":" + salt) - sum := sha256.Sum256(input) - for i := 0; i < 120000; i++ { - sum = sha256.Sum256(append(sum[:], input...)) - } - return sum -} - -func buildRefreshToken() (token string, tokenHash string, err error) { - raw := make([]byte, 32) - if _, err := rand.Read(raw); err != nil { - return "", "", err - } - token = base64.RawURLEncoding.EncodeToString(raw) - return token, hashToken(token), nil -} - -func hashToken(token string) string { - sum := sha256.Sum256([]byte(token)) - return hex.EncodeToString(sum[:]) -} - -func signHS256(input string, secret []byte) string { - mac := hmac.New(sha256.New, secret) - _, _ = mac.Write([]byte(input)) - return base64.RawURLEncoding.EncodeToString(mac.Sum(nil)) -} - -func (s *Service) classifyRefreshFailure(ctx context.Context, tokenHash string) error { - record, err := s.store.FindAnyRefreshTokenByHash(ctx, tokenHash) - if err != nil { - return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") - } - if !record.RevokedAt.IsZero() { - _ = s.store.RevokeRefreshTokenFamily(ctx, record.ID) - return fmt.Errorf("ERR_REFRESH_TOKEN_REPLAYED") - } - if time.Now().UTC().After(record.ExpiresAt) { - return fmt.Errorf("ERR_REFRESH_TOKEN_EXPIRED") - } - return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") -} - -func randomID(prefix string) string { - raw := make([]byte, 8) - _, _ = rand.Read(raw) - return fmt.Sprintf("%s_%x", prefix, raw) -} diff --git a/backend/internal/auth/tokens.go b/backend/internal/auth/tokens.go new file mode 100644 index 0000000..311ecd1 --- /dev/null +++ b/backend/internal/auth/tokens.go @@ -0,0 +1,180 @@ +package auth + +import ( + "context" + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +type AccessTokenClaims struct { + UserID string + SessionID string + ExpiresAt int64 +} + +// IssueTokenPairForUser 为已验证的用户签发 token pair(Passkey 登录用) +func (s *Service) IssueTokenPairForUser(ctx context.Context, user storage.UserRecord, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { + return s.issueTokenPairWithSession(ctx, user, "", "", deviceName, ipAddress, userAgent) +} + +func (s *Service) ParseAccessToken(token string) (string, error) { + claims, err := s.ParseAccessTokenClaims(token) + if err != nil { + return "", err + } + return claims.UserID, nil +} + +func (s *Service) ParseAccessTokenClaims(token string) (AccessTokenClaims, error) { + token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) + parts := strings.Split(token, ".") + if len(parts) != 3 { + return AccessTokenClaims{}, fmt.Errorf("invalid token") + } + + signingInput := strings.Join(parts[:2], ".") + expected := signHS256(signingInput, s.secret) + if !hmac.Equal([]byte(expected), []byte(parts[2])) { + return AccessTokenClaims{}, fmt.Errorf("invalid token signature") + } + + payloadBytes, err := base64.RawURLEncoding.DecodeString(parts[1]) + if err != nil { + return AccessTokenClaims{}, fmt.Errorf("decode token payload: %w", err) + } + var payload struct { + Sub string `json:"sub"` + Sid string `json:"sid"` + Exp int64 `json:"exp"` + } + if err := json.Unmarshal(payloadBytes, &payload); err != nil { + return AccessTokenClaims{}, fmt.Errorf("decode token json: %w", err) + } + if payload.Sub == "" || time.Now().Unix() > payload.Exp { + return AccessTokenClaims{}, fmt.Errorf("token expired") + } + return AccessTokenClaims{ + UserID: payload.Sub, + SessionID: payload.Sid, + ExpiresAt: payload.Exp, + }, nil +} + +func (s *Service) issueTokenPairWithSession(ctx context.Context, user storage.UserRecord, parentID, sessionID, deviceName, ipAddress, userAgent string) (TokenPair, string, error) { + refreshToken, refreshHash, err := buildRefreshToken() + if err != nil { + return TokenPair{}, "", err + } + refreshID := randomID("refresh") + if sessionID == "" { + sessionID = randomID("session") + } + accessToken, err := s.buildAccessToken(user, sessionID) + if err != nil { + return TokenPair{}, "", err + } + if err := s.store.SaveRefreshToken(ctx, storage.RefreshTokenRecord{ + ID: refreshID, + UserID: user.ID, + TokenHash: refreshHash, + ParentID: parentID, + ExpiresAt: time.Now().UTC().Add(refreshTokenTTL), + CreatedAt: time.Now().UTC(), + }); err != nil { + return TokenPair{}, "", err + } + + now := time.Now().UTC() + if parentID == "" { + if err := s.store.CreateSession(ctx, storage.SessionRecord{ + ID: sessionID, + UserID: user.ID, + RefreshTokenID: refreshID, + DeviceName: deviceName, + DeviceType: detectDeviceType(userAgent), + IPAddress: ipAddress, + UserAgent: userAgent, + CreatedAt: now, + LastSeenAt: now, + }); err != nil { + return TokenPair{}, "", err + } + } else { + if err := s.store.UpdateSessionRefreshToken(ctx, sessionID, refreshID); err != nil { + return TokenPair{}, "", err + } + } + + return TokenPair{ + AccessToken: accessToken, + RefreshToken: refreshToken, + }, sessionID, nil +} + +func (s *Service) buildAccessToken(user storage.UserRecord, sessionID string) (string, error) { + headerBytes, _ := json.Marshal(map[string]string{"alg": "HS256", "typ": "JWT"}) + payloadBytes, err := json.Marshal(map[string]any{ + "sub": user.ID, + "sid": sessionID, + "userName": user.UserName, + "roles": user.Roles, + "exp": time.Now().Add(accessTokenTTL).Unix(), + }) + if err != nil { + return "", err + } + header := base64.RawURLEncoding.EncodeToString(headerBytes) + payload := base64.RawURLEncoding.EncodeToString(payloadBytes) + signingInput := header + "." + payload + return signingInput + "." + signHS256(signingInput, s.secret), nil +} + +func buildRefreshToken() (token string, tokenHash string, err error) { + raw := make([]byte, 32) + if _, err := rand.Read(raw); err != nil { + return "", "", err + } + token = base64.RawURLEncoding.EncodeToString(raw) + return token, hashToken(token), nil +} + +func hashToken(token string) string { + sum := sha256.Sum256([]byte(token)) + return hex.EncodeToString(sum[:]) +} + +func signHS256(input string, secret []byte) string { + mac := hmac.New(sha256.New, secret) + _, _ = mac.Write([]byte(input)) + return base64.RawURLEncoding.EncodeToString(mac.Sum(nil)) +} + +func (s *Service) classifyRefreshFailure(ctx context.Context, tokenHash string) error { + record, err := s.store.FindAnyRefreshTokenByHash(ctx, tokenHash) + if err != nil { + return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") + } + if !record.RevokedAt.IsZero() { + _ = s.store.RevokeRefreshTokenFamily(ctx, record.ID) + return fmt.Errorf("ERR_REFRESH_TOKEN_REPLAYED") + } + if time.Now().UTC().After(record.ExpiresAt) { + return fmt.Errorf("ERR_REFRESH_TOKEN_EXPIRED") + } + return fmt.Errorf("ERR_REFRESH_TOKEN_INVALID") +} + +func randomID(prefix string) string { + raw := make([]byte, 8) + _, _ = rand.Read(raw) + return fmt.Sprintf("%s_%x", prefix, raw) +} diff --git a/backend/internal/storage/contracttest/auth_contract_test.go b/backend/internal/storage/contracttest/auth_contract_test.go new file mode 100644 index 0000000..631ebab --- /dev/null +++ b/backend/internal/storage/contracttest/auth_contract_test.go @@ -0,0 +1,141 @@ +package contracttest + +import ( + "context" + "testing" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/google/uuid" +) + +func testUserLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), + UserName: "testuser_" + uuid.New().String()[:8], + Email: "test@example.com", + PasswordHash: "hash123", + PasswordSalt: "salt123", + Roles: []string{"R_USER"}, + Buttons: []string{"view", "import"}, + } + + created, err := store.CreateUser(ctx, user) + if err != nil { + t.Fatalf("CreateUser: %v", err) + } + if created.UserName != user.UserName { + t.Fatalf("username mismatch: got %s", created.UserName) + } + + found, err := store.FindUserByUserName(ctx, user.UserName) + if err != nil { + t.Fatalf("FindUserByUserName: %v", err) + } + if found.ID != user.ID { + t.Fatalf("user ID mismatch: got %s", found.ID) + } + + got, err := store.GetUser(ctx, user.ID) + if err != nil { + t.Fatalf("GetUser: %v", err) + } + if got.Email != user.Email { + t.Fatalf("email mismatch: got %s", got.Email) + } + + hasAdmin, err := store.HasAdminUser(ctx) + if err != nil { + t.Fatalf("HasAdminUser: %v", err) + } + if hasAdmin { + t.Fatal("expected no admin user") + } + + _, err = store.CreateUser(ctx, storage.UserRecord{ + ID: uuid.New().String(), + UserName: user.UserName, + }) + if err == nil { + t.Fatal("expected error for duplicate username") + } +} + +func testRefreshTokenRotation(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), + UserName: "tokenuser_" + uuid.New().String()[:8], + PasswordHash: "hash", + PasswordSalt: "salt", + Roles: []string{"R_USER"}, + Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + token := storage.RefreshTokenRecord{ + ID: uuid.New().String(), + UserID: user.ID, + TokenHash: "hash_" + uuid.New().String(), + ExpiresAt: time.Now().Add(7 * 24 * time.Hour), + } + + if err := store.SaveRefreshToken(ctx, token); err != nil { + t.Fatalf("SaveRefreshToken: %v", err) + } + + consumed, err := store.ConsumeRefreshToken(ctx, token.TokenHash) + if err != nil { + t.Fatalf("ConsumeRefreshToken: %v", err) + } + if consumed.UserID != user.ID { + t.Fatalf("user ID mismatch: got %s", consumed.UserID) + } + + _, err = store.ConsumeRefreshToken(ctx, token.TokenHash) + if err == nil { + t.Fatal("expected error for already consumed token") + } +} + +func testAuthMethod(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "am_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + method := storage.AuthMethodRecord{ + ID: uuid.New().String(), + UserID: user.ID, + ProviderType: "password", + ProviderUserID: user.ID, + Metadata: "{}", + } + if err := store.CreateAuthMethod(ctx, method); err != nil { + t.Fatalf("CreateAuthMethod: %v", err) + } + + got, err := store.GetAuthMethodByProvider(ctx, "password", user.ID) + if err != nil { + t.Fatalf("GetAuthMethodByProvider: %v", err) + } + if got.UserID != user.ID { + t.Fatalf("user ID mismatch: %s", got.UserID) + } +} diff --git a/backend/internal/storage/contracttest/contract_test.go b/backend/internal/storage/contracttest/contract_test.go index 8c816a3..c16b330 100644 --- a/backend/internal/storage/contracttest/contract_test.go +++ b/backend/internal/storage/contracttest/contract_test.go @@ -1,16 +1,8 @@ package contracttest import ( - "context" - "encoding/json" - "fmt" - "path/filepath" - "testing" - "time" - - "github.com/IsKenKenYa/Commory/backend/internal/msglayer" "github.com/IsKenKenYa/Commory/backend/internal/storage" - "github.com/google/uuid" + "testing" ) // ProviderFactory 创建一个临时的 Provider 实例。 @@ -30,564 +22,3 @@ func RunContractTests(t *testing.T, factory ProviderFactory) { t.Run("ChallengeLifecycle", func(t *testing.T) { testChallengeLifecycle(t, factory) }) t.Run("AuthMethod", func(t *testing.T) { testAuthMethod(t, factory) }) } - -func testUserLifecycle(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - user := storage.UserRecord{ - ID: uuid.New().String(), - UserName: "testuser_" + uuid.New().String()[:8], - Email: "test@example.com", - PasswordHash: "hash123", - PasswordSalt: "salt123", - Roles: []string{"R_USER"}, - Buttons: []string{"view", "import"}, - } - - created, err := store.CreateUser(ctx, user) - if err != nil { - t.Fatalf("CreateUser: %v", err) - } - if created.UserName != user.UserName { - t.Fatalf("username mismatch: got %s", created.UserName) - } - - found, err := store.FindUserByUserName(ctx, user.UserName) - if err != nil { - t.Fatalf("FindUserByUserName: %v", err) - } - if found.ID != user.ID { - t.Fatalf("user ID mismatch: got %s", found.ID) - } - - got, err := store.GetUser(ctx, user.ID) - if err != nil { - t.Fatalf("GetUser: %v", err) - } - if got.Email != user.Email { - t.Fatalf("email mismatch: got %s", got.Email) - } - - hasAdmin, err := store.HasAdminUser(ctx) - if err != nil { - t.Fatalf("HasAdminUser: %v", err) - } - if hasAdmin { - t.Fatal("expected no admin user") - } - - // 创建重复用户名应失败 - _, err = store.CreateUser(ctx, storage.UserRecord{ - ID: uuid.New().String(), - UserName: user.UserName, - }) - if err == nil { - t.Fatal("expected error for duplicate username") - } -} - -func testRefreshTokenRotation(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - user := storage.UserRecord{ - ID: uuid.New().String(), - UserName: "tokenuser_" + uuid.New().String()[:8], - PasswordHash: "hash", - PasswordSalt: "salt", - Roles: []string{"R_USER"}, - Buttons: []string{"view"}, - } - if _, err := store.CreateUser(ctx, user); err != nil { - t.Fatal(err) - } - - token := storage.RefreshTokenRecord{ - ID: uuid.New().String(), - UserID: user.ID, - TokenHash: "hash_" + uuid.New().String(), - ExpiresAt: time.Now().Add(7 * 24 * time.Hour), - } - - if err := store.SaveRefreshToken(ctx, token); err != nil { - t.Fatalf("SaveRefreshToken: %v", err) - } - - consumed, err := store.ConsumeRefreshToken(ctx, token.TokenHash) - if err != nil { - t.Fatalf("ConsumeRefreshToken: %v", err) - } - if consumed.UserID != user.ID { - t.Fatalf("user ID mismatch: got %s", consumed.UserID) - } - - // 二次消费应失败 - _, err = store.ConsumeRefreshToken(ctx, token.TokenHash) - if err == nil { - t.Fatal("expected error for already consumed token") - } -} - -func testImportAndQuery(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - userID := "test-user-" + uuid.New().String()[:8] - export := msglayer.RootExport{ - Version: "msglayer/v0.1", - ExportedAt: time.Now().UTC().Format(time.RFC3339), - Source: msglayer.Source{Platform: "android", DeviceID: "test"}, - Identities: []msglayer.Identity{ - {ID: "id_1", Type: "person", DisplayName: "张三", Phones: []string{"+8613800000001"}}, - {ID: "id_2", Type: "person", DisplayName: "李四", Phones: []string{"+8613800000002"}}, - }, - Events: []msglayer.Event{ - { - ID: "evt_1", - Type: "sms", - Timestamp: time.Now().Add(-1 * time.Hour).UTC().Format(time.RFC3339), - Direction: "outbound", - Participants: []string{"id_1"}, - Content: map[string]any{"text": "你好,验证码是123456"}, - }, - { - ID: "evt_2", - Type: "call", - Timestamp: time.Now().UTC().Format(time.RFC3339), - Direction: "inbound", - Participants: []string{"id_2"}, - Content: map[string]any{"duration_sec": 120, "call_type": "incoming"}, - }, - }, - } - raw, _ := json.Marshal(export) - - importID, err := store.Import(ctx, userID, "test.json", export, raw) - if err != nil { - t.Fatalf("Import: %v", err) - } - if importID == "" { - t.Fatal("expected import ID") - } - - // 查询导入列表 - imports, err := store.ListImports(ctx, userID) - if err != nil { - t.Fatalf("ListImports: %v", err) - } - if len(imports) != 1 { - t.Fatalf("expected 1 import, got %d", len(imports)) - } - if imports[0].EventCount != 2 { - t.Fatalf("expected 2 events, got %d", imports[0].EventCount) - } - - // 导出导入数据 - exported, err := store.ExportImport(ctx, userID, importID) - if err != nil { - t.Fatalf("ExportImport: %v", err) - } - if len(exported) == 0 { - t.Fatal("expected exported data") - } - - // 获取事件 - event, err := store.GetEvent(ctx, userID, "evt_1") - if err != nil { - t.Fatalf("GetEvent: %v", err) - } - if event.Type != "sms" { - t.Fatalf("expected sms type, got %s", event.Type) - } - - // 搜索 - results, err := store.Search(ctx, msglayer.SearchParams{UserID: userID, Keyword: "验证码", Limit: 10}) - if err != nil { - t.Fatalf("Search: %v", err) - } - if len(results) == 0 { - t.Fatal("expected search results for '验证码'") - } - - // 时间线 - timeline, err := store.Timeline(ctx, msglayer.SearchParams{UserID: userID, Limit: 10}) - if err != nil { - t.Fatalf("Timeline: %v", err) - } - if len(timeline) != 2 { - t.Fatalf("expected 2 timeline items, got %d", len(timeline)) - } - - // 获取联系人 - identities, err := store.ListIdentities(ctx, userID) - if err != nil { - t.Fatalf("ListIdentities: %v", err) - } - if len(identities) != 2 { - t.Fatalf("expected 2 identities, got %d", len(identities)) - } - - // 获取单个联系人 - identity, err := store.GetIdentity(ctx, userID, "id_1") - if err != nil { - t.Fatalf("GetIdentity: %v", err) - } - if identity.DisplayName != "张三" { - t.Fatalf("expected 张三, got %s", identity.DisplayName) - } - - // 线程查询 - thread, err := store.GetThread(ctx, userID, "thread_42") - if err != nil { - t.Fatalf("GetThread: %v", err) - } - _ = thread // 线程可能为空,因为测试数据没有 same_thread 关系 -} - -func testIdentityCRUD(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - userID := "crud-user-" + uuid.New().String()[:8] - identity := msglayer.Identity{ - ID: "identity_" + uuid.New().String()[:8], - Type: "person", - DisplayName: "测试用户", - Phones: []string{"+8613800000000"}, - Emails: []string{"test@example.com"}, - Labels: []string{"朋友"}, - Meta: map[string]any{"source": "test"}, - } - - export := msglayer.RootExport{ - Version: "msglayer/v0.1", - ExportedAt: time.Now().UTC().Format(time.RFC3339), - Identities: []msglayer.Identity{identity}, - Events: []msglayer.Event{}, - } - raw, _ := json.Marshal(export) - - if _, err := store.Import(ctx, userID, "", export, raw); err != nil { - t.Fatalf("Import: %v", err) - } - - got, err := store.GetIdentity(ctx, userID, identity.ID) - if err != nil { - t.Fatalf("GetIdentity: %v", err) - } - if got.DisplayName != "测试用户" { - t.Fatalf("display name mismatch: got %s", got.DisplayName) - } - if len(got.Phones) != 1 || got.Phones[0] != "+8613800000000" { - t.Fatalf("phones mismatch: %v", got.Phones) - } -} - -func testSearchPagination(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - userID := "page-user-" + uuid.New().String()[:8] - var events []msglayer.Event - for i := 0; i < 25; i++ { - events = append(events, msglayer.Event{ - ID: fmt.Sprintf("page_evt_%d", i), - Type: "sms", - Timestamp: time.Now().Add(-time.Duration(25-i) * time.Minute).UTC().Format(time.RFC3339), - Direction: "outbound", - Content: map[string]any{"text": fmt.Sprintf("消息编号 %d", i)}, - }) - } - - export := msglayer.RootExport{ - Version: "msglayer/v0.1", - ExportedAt: time.Now().UTC().Format(time.RFC3339), - Events: events, - } - raw, _ := json.Marshal(export) - - if _, err := store.Import(ctx, userID, "", export, raw); err != nil { - t.Fatalf("Import: %v", err) - } - - // 第一页 - page1, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 0}) - if err != nil { - t.Fatalf("ListEvents page1: %v", err) - } - if len(page1) != 10 { - t.Fatalf("expected 10 items, got %d", len(page1)) - } - - // 第二页 - page2, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 10}) - if err != nil { - t.Fatalf("ListEvents page2: %v", err) - } - if len(page2) != 10 { - t.Fatalf("expected 10 items, got %d", len(page2)) - } - - // 第三页 - page3, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 20}) - if err != nil { - t.Fatalf("ListEvents page3: %v", err) - } - if len(page3) != 5 { - t.Fatalf("expected 5 items, got %d", len(page3)) - } - - // 确保无重叠 - if page1[0].EventID == page2[0].EventID { - t.Fatal("page1 and page2 should not overlap") - } -} - -func testSetupLifecycle(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - status, err := store.GetSetupStatus(ctx) - if err != nil { - t.Fatalf("GetSetupStatus: %v", err) - } - if status.Initialized { - t.Fatal("expected not initialized") - } - - setup := storage.SetupRecord{ - ID: "setup_1", - Version: "1.0.0", - InitializedAt: time.Now().UTC().Format(time.RFC3339), - UsageMode: "personal", - } - if err := store.SaveSetup(ctx, setup); err != nil { - t.Fatalf("SaveSetup: %v", err) - } - - status, err = store.GetSetupStatus(ctx) - if err != nil { - t.Fatalf("GetSetupStatus after save: %v", err) - } - if !status.Initialized { - t.Fatal("expected initialized") - } - if status.Version != "1.0.0" { - t.Fatalf("expected version 1.0.0, got %s", status.Version) - } -} - -func testSessionLifecycle(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - user := storage.UserRecord{ - ID: uuid.New().String(), UserName: "sess_" + uuid.New().String()[:8], - PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, - } - if _, err := store.CreateUser(ctx, user); err != nil { - t.Fatal(err) - } - - session := storage.SessionRecord{ - ID: uuid.New().String(), - UserID: user.ID, - IPAddress: "127.0.0.1", - UserAgent: "test-agent", - } - if err := store.CreateSession(ctx, session); err != nil { - t.Fatalf("CreateSession: %v", err) - } - - sessions, err := store.ListSessionsByUser(ctx, user.ID) - if err != nil { - t.Fatalf("ListSessionsByUser: %v", err) - } - if len(sessions) != 1 { - t.Fatalf("expected 1 session, got %d", len(sessions)) - } - - if err := store.UpdateSessionLastSeen(ctx, session.ID); err != nil { - t.Fatalf("UpdateSessionLastSeen: %v", err) - } - - if err := store.RevokeSession(ctx, session.ID); err != nil { - t.Fatalf("RevokeSession: %v", err) - } - - sessions, _ = store.ListSessionsByUser(ctx, user.ID) - if len(sessions) != 0 { - t.Fatalf("expected 0 sessions after revoke, got %d", len(sessions)) - } -} - -func testAuditLog(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - if err := store.CreateAuditLog(ctx, storage.AuditRecord{ - ID: uuid.New().String(), Action: "login", IPAddress: "127.0.0.1", - }); err != nil { - t.Fatalf("CreateAuditLog: %v", err) - } - - logs, err := store.ListAuditLogs(ctx, "", "", 10, 0) - if err != nil { - t.Fatalf("ListAuditLogs: %v", err) - } - if len(logs) != 1 { - t.Fatalf("expected 1 log, got %d", len(logs)) - } - - total, err := store.CountAuditLogs(ctx, "", "") - if err != nil { - t.Fatalf("CountAuditLogs: %v", err) - } - if total != 1 { - t.Fatalf("expected total 1, got %d", total) - } -} - -func testPasskeyCredential(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - user := storage.UserRecord{ - ID: uuid.New().String(), UserName: "pk_" + uuid.New().String()[:8], - PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, - } - if _, err := store.CreateUser(ctx, user); err != nil { - t.Fatal(err) - } - - cred := storage.PasskeyCredential{ - ID: uuid.New().String(), - UserID: user.ID, - CredentialID: "cred_" + uuid.New().String(), - PublicKey: "pubkey_test", - Transports: `["usb","nfc"]`, - Name: "Test Key", - } - if err := store.CreatePasskeyCredential(ctx, cred); err != nil { - t.Fatalf("CreatePasskeyCredential: %v", err) - } - - got, err := store.GetPasskeyByCredentialID(ctx, cred.CredentialID) - if err != nil { - t.Fatalf("GetPasskeyByCredentialID: %v", err) - } - if got.Name != "Test Key" { - t.Fatalf("name mismatch: %s", got.Name) - } - - passkeys, err := store.ListPasskeysByUser(ctx, user.ID) - if err != nil { - t.Fatalf("ListPasskeysByUser: %v", err) - } - if len(passkeys) != 1 { - t.Fatalf("expected 1 passkey, got %d", len(passkeys)) - } - - if err := store.UpdatePasskeyLastUsed(ctx, cred.ID, 42); err != nil { - t.Fatalf("UpdatePasskeyLastUsed: %v", err) - } - - if err := store.DeletePasskey(ctx, cred.ID, user.ID); err != nil { - t.Fatalf("DeletePasskey: %v", err) - } - - passkeys, _ = store.ListPasskeysByUser(ctx, user.ID) - if len(passkeys) != 0 { - t.Fatalf("expected 0 passkeys after delete, got %d", len(passkeys)) - } -} - -func testChallengeLifecycle(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - chal := storage.ChallengeRecord{ - ID: uuid.New().String(), - Challenge: "test_challenge_value", - FlowType: "passkey_login", - ExpiresAt: time.Now().Add(5 * time.Minute).UTC(), - } - if err := store.CreateChallenge(ctx, chal); err != nil { - t.Fatalf("CreateChallenge: %v", err) - } - - got, err := store.GetChallenge(ctx, chal.ID) - if err != nil { - t.Fatalf("GetChallenge: %v", err) - } - if got.Challenge != "test_challenge_value" { - t.Fatalf("challenge mismatch: %s", got.Challenge) - } - - if err := store.DeleteChallenge(ctx, chal.ID); err != nil { - t.Fatalf("DeleteChallenge: %v", err) - } - - _, err = store.GetChallenge(ctx, chal.ID) - if err == nil { - t.Fatal("expected error for deleted challenge") - } -} - -func testAuthMethod(t *testing.T, factory ProviderFactory) { - store := factory(t) - defer store.Close() - ctx := context.Background() - - user := storage.UserRecord{ - ID: uuid.New().String(), UserName: "am_" + uuid.New().String()[:8], - PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, - } - if _, err := store.CreateUser(ctx, user); err != nil { - t.Fatal(err) - } - - method := storage.AuthMethodRecord{ - ID: uuid.New().String(), - UserID: user.ID, - ProviderType: "password", - ProviderUserID: user.ID, - Metadata: "{}", - } - if err := store.CreateAuthMethod(ctx, method); err != nil { - t.Fatalf("CreateAuthMethod: %v", err) - } - - got, err := store.GetAuthMethodByProvider(ctx, "password", user.ID) - if err != nil { - t.Fatalf("GetAuthMethodByProvider: %v", err) - } - if got.UserID != user.ID { - t.Fatalf("user ID mismatch: %s", got.UserID) - } -} - -// NewSQLiteTestProvider 创建一个临时 SQLite Provider 用于测试。 -func NewSQLiteTestProvider(t *testing.T) storage.Provider { - t.Helper() - dbPath := filepath.Join(t.TempDir(), "test.db") - store, err := storage.NewSQLiteProvider(dbPath) - if err != nil { - t.Fatalf("NewSQLiteProvider: %v", err) - } - if err := store.Init(context.Background()); err != nil { - t.Fatalf("Init: %v", err) - } - return store -} diff --git a/backend/internal/storage/contracttest/helpers_test.go b/backend/internal/storage/contracttest/helpers_test.go new file mode 100644 index 0000000..08ab451 --- /dev/null +++ b/backend/internal/storage/contracttest/helpers_test.go @@ -0,0 +1,23 @@ +package contracttest + +import ( + "context" + "path/filepath" + "testing" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" +) + +// NewSQLiteTestProvider 创建一个临时 SQLite Provider 用于测试。 +func NewSQLiteTestProvider(t *testing.T) storage.Provider { + t.Helper() + dbPath := filepath.Join(t.TempDir(), "test.db") + store, err := storage.NewSQLiteProvider(dbPath) + if err != nil { + t.Fatalf("NewSQLiteProvider: %v", err) + } + if err := store.Init(context.Background()); err != nil { + t.Fatalf("Init: %v", err) + } + return store +} diff --git a/backend/internal/storage/contracttest/import_query_contract_test.go b/backend/internal/storage/contracttest/import_query_contract_test.go new file mode 100644 index 0000000..27f17c4 --- /dev/null +++ b/backend/internal/storage/contracttest/import_query_contract_test.go @@ -0,0 +1,218 @@ +package contracttest + +import ( + "context" + "encoding/json" + "fmt" + "testing" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + "github.com/google/uuid" +) + +func testImportAndQuery(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "test-user-" + uuid.New().String()[:8] + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Source: msglayer.Source{Platform: "android", DeviceID: "test"}, + Identities: []msglayer.Identity{ + {ID: "id_1", Type: "person", DisplayName: "张三", Phones: []string{"+8613800000001"}}, + {ID: "id_2", Type: "person", DisplayName: "李四", Phones: []string{"+8613800000002"}}, + }, + Events: []msglayer.Event{ + { + ID: "evt_1", + Type: "sms", + Timestamp: time.Now().Add(-1 * time.Hour).UTC().Format(time.RFC3339), + Direction: "outbound", + Participants: []string{"id_1"}, + Content: map[string]any{"text": "你好,验证码是123456"}, + }, + { + ID: "evt_2", + Type: "call", + Timestamp: time.Now().UTC().Format(time.RFC3339), + Direction: "inbound", + Participants: []string{"id_2"}, + Content: map[string]any{"duration_sec": 120, "call_type": "incoming"}, + }, + }, + } + raw, _ := json.Marshal(export) + + importID, err := store.Import(ctx, userID, "test.json", export, raw) + if err != nil { + t.Fatalf("Import: %v", err) + } + if importID == "" { + t.Fatal("expected import ID") + } + + imports, err := store.ListImports(ctx, userID) + if err != nil { + t.Fatalf("ListImports: %v", err) + } + if len(imports) != 1 { + t.Fatalf("expected 1 import, got %d", len(imports)) + } + if imports[0].EventCount != 2 { + t.Fatalf("expected 2 events, got %d", imports[0].EventCount) + } + + exported, err := store.ExportImport(ctx, userID, importID) + if err != nil { + t.Fatalf("ExportImport: %v", err) + } + if len(exported) == 0 { + t.Fatal("expected exported data") + } + + event, err := store.GetEvent(ctx, userID, "evt_1") + if err != nil { + t.Fatalf("GetEvent: %v", err) + } + if event.Type != "sms" { + t.Fatalf("expected sms type, got %s", event.Type) + } + + results, err := store.Search(ctx, msglayer.SearchParams{UserID: userID, Keyword: "验证码", Limit: 10}) + if err != nil { + t.Fatalf("Search: %v", err) + } + if len(results) == 0 { + t.Fatal("expected search results for '验证码'") + } + + timeline, err := store.Timeline(ctx, msglayer.SearchParams{UserID: userID, Limit: 10}) + if err != nil { + t.Fatalf("Timeline: %v", err) + } + if len(timeline) != 2 { + t.Fatalf("expected 2 timeline items, got %d", len(timeline)) + } + + identities, err := store.ListIdentities(ctx, userID) + if err != nil { + t.Fatalf("ListIdentities: %v", err) + } + if len(identities) != 2 { + t.Fatalf("expected 2 identities, got %d", len(identities)) + } + + identity, err := store.GetIdentity(ctx, userID, "id_1") + if err != nil { + t.Fatalf("GetIdentity: %v", err) + } + if identity.DisplayName != "张三" { + t.Fatalf("expected 张三, got %s", identity.DisplayName) + } + + thread, err := store.GetThread(ctx, userID, "thread_42") + if err != nil { + t.Fatalf("GetThread: %v", err) + } + _ = thread +} + +func testIdentityCRUD(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "crud-user-" + uuid.New().String()[:8] + identity := msglayer.Identity{ + ID: "identity_" + uuid.New().String()[:8], + Type: "person", + DisplayName: "测试用户", + Phones: []string{"+8613800000000"}, + Emails: []string{"test@example.com"}, + Labels: []string{"朋友"}, + Meta: map[string]any{"source": "test"}, + } + + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Identities: []msglayer.Identity{identity}, + Events: []msglayer.Event{}, + } + raw, _ := json.Marshal(export) + + if _, err := store.Import(ctx, userID, "", export, raw); err != nil { + t.Fatalf("Import: %v", err) + } + + got, err := store.GetIdentity(ctx, userID, identity.ID) + if err != nil { + t.Fatalf("GetIdentity: %v", err) + } + if got.DisplayName != "测试用户" { + t.Fatalf("display name mismatch: got %s", got.DisplayName) + } + if len(got.Phones) != 1 || got.Phones[0] != "+8613800000000" { + t.Fatalf("phones mismatch: %v", got.Phones) + } +} + +func testSearchPagination(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + userID := "page-user-" + uuid.New().String()[:8] + var events []msglayer.Event + for i := 0; i < 25; i++ { + events = append(events, msglayer.Event{ + ID: fmt.Sprintf("page_evt_%d", i), + Type: "sms", + Timestamp: time.Now().Add(-time.Duration(25-i) * time.Minute).UTC().Format(time.RFC3339), + Direction: "outbound", + Content: map[string]any{"text": fmt.Sprintf("消息编号 %d", i)}, + }) + } + + export := msglayer.RootExport{ + Version: "msglayer/v0.1", + ExportedAt: time.Now().UTC().Format(time.RFC3339), + Events: events, + } + raw, _ := json.Marshal(export) + + if _, err := store.Import(ctx, userID, "", export, raw); err != nil { + t.Fatalf("Import: %v", err) + } + + page1, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 0}) + if err != nil { + t.Fatalf("ListEvents page1: %v", err) + } + if len(page1) != 10 { + t.Fatalf("expected 10 items, got %d", len(page1)) + } + + page2, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 10}) + if err != nil { + t.Fatalf("ListEvents page2: %v", err) + } + if len(page2) != 10 { + t.Fatalf("expected 10 items, got %d", len(page2)) + } + + page3, err := store.ListEvents(ctx, msglayer.SearchParams{UserID: userID, Limit: 10, Offset: 20}) + if err != nil { + t.Fatalf("ListEvents page3: %v", err) + } + if len(page3) != 5 { + t.Fatalf("expected 5 items, got %d", len(page3)) + } + + if page1[0].EventID == page2[0].EventID { + t.Fatal("page1 and page2 should not overlap") + } +} diff --git a/backend/internal/storage/contracttest/passkey_contract_test.go b/backend/internal/storage/contracttest/passkey_contract_test.go new file mode 100644 index 0000000..552a115 --- /dev/null +++ b/backend/internal/storage/contracttest/passkey_contract_test.go @@ -0,0 +1,98 @@ +package contracttest + +import ( + "context" + "testing" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/google/uuid" +) + +func testPasskeyCredential(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "pk_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + cred := storage.PasskeyCredential{ + ID: uuid.New().String(), + UserID: user.ID, + CredentialID: "cred_" + uuid.New().String(), + PublicKey: "pubkey_test", + Transports: `["usb","nfc"]`, + Name: "Test Key", + } + if err := store.CreatePasskeyCredential(ctx, cred); err != nil { + t.Fatalf("CreatePasskeyCredential: %v", err) + } + + got, err := store.GetPasskeyByCredentialID(ctx, cred.CredentialID) + if err != nil { + t.Fatalf("GetPasskeyByCredentialID: %v", err) + } + if got.Name != "Test Key" { + t.Fatalf("name mismatch: %s", got.Name) + } + + passkeys, err := store.ListPasskeysByUser(ctx, user.ID) + if err != nil { + t.Fatalf("ListPasskeysByUser: %v", err) + } + if len(passkeys) != 1 { + t.Fatalf("expected 1 passkey, got %d", len(passkeys)) + } + + if err := store.UpdatePasskeyLastUsed(ctx, cred.ID, 42); err != nil { + t.Fatalf("UpdatePasskeyLastUsed: %v", err) + } + + if err := store.DeletePasskey(ctx, cred.ID, user.ID); err != nil { + t.Fatalf("DeletePasskey: %v", err) + } + + passkeys, _ = store.ListPasskeysByUser(ctx, user.ID) + if len(passkeys) != 0 { + t.Fatalf("expected 0 passkeys after delete, got %d", len(passkeys)) + } +} + +func testChallengeLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + chal := storage.ChallengeRecord{ + ID: uuid.New().String(), + Challenge: "test_challenge_value", + FlowType: "passkey_login", + ExpiresAt: time.Now().Add(5 * time.Minute).UTC(), + } + if err := store.CreateChallenge(ctx, chal); err != nil { + t.Fatalf("CreateChallenge: %v", err) + } + + got, err := store.GetChallenge(ctx, chal.ID) + if err != nil { + t.Fatalf("GetChallenge: %v", err) + } + if got.Challenge != "test_challenge_value" { + t.Fatalf("challenge mismatch: %s", got.Challenge) + } + + if err := store.DeleteChallenge(ctx, chal.ID); err != nil { + t.Fatalf("DeleteChallenge: %v", err) + } + + _, err = store.GetChallenge(ctx, chal.ID) + if err == nil { + t.Fatal("expected error for deleted challenge") + } +} diff --git a/backend/internal/storage/contracttest/setup_session_audit_contract_test.go b/backend/internal/storage/contracttest/setup_session_audit_contract_test.go new file mode 100644 index 0000000..79e5079 --- /dev/null +++ b/backend/internal/storage/contracttest/setup_session_audit_contract_test.go @@ -0,0 +1,118 @@ +package contracttest + +import ( + "context" + "testing" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/storage" + "github.com/google/uuid" +) + +func testSetupLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + status, err := store.GetSetupStatus(ctx) + if err != nil { + t.Fatalf("GetSetupStatus: %v", err) + } + if status.Initialized { + t.Fatal("expected not initialized") + } + + setup := storage.SetupRecord{ + ID: "setup_1", + Version: "1.0.0", + InitializedAt: time.Now().UTC().Format(time.RFC3339), + UsageMode: "personal", + } + if err := store.SaveSetup(ctx, setup); err != nil { + t.Fatalf("SaveSetup: %v", err) + } + + status, err = store.GetSetupStatus(ctx) + if err != nil { + t.Fatalf("GetSetupStatus after save: %v", err) + } + if !status.Initialized { + t.Fatal("expected initialized") + } + if status.Version != "1.0.0" { + t.Fatalf("expected version 1.0.0, got %s", status.Version) + } +} + +func testSessionLifecycle(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + user := storage.UserRecord{ + ID: uuid.New().String(), UserName: "sess_" + uuid.New().String()[:8], + PasswordHash: "h", PasswordSalt: "s", Roles: []string{"R_USER"}, Buttons: []string{"view"}, + } + if _, err := store.CreateUser(ctx, user); err != nil { + t.Fatal(err) + } + + session := storage.SessionRecord{ + ID: uuid.New().String(), + UserID: user.ID, + IPAddress: "127.0.0.1", + UserAgent: "test-agent", + } + if err := store.CreateSession(ctx, session); err != nil { + t.Fatalf("CreateSession: %v", err) + } + + sessions, err := store.ListSessionsByUser(ctx, user.ID) + if err != nil { + t.Fatalf("ListSessionsByUser: %v", err) + } + if len(sessions) != 1 { + t.Fatalf("expected 1 session, got %d", len(sessions)) + } + + if err := store.UpdateSessionLastSeen(ctx, session.ID); err != nil { + t.Fatalf("UpdateSessionLastSeen: %v", err) + } + + if err := store.RevokeSession(ctx, session.ID); err != nil { + t.Fatalf("RevokeSession: %v", err) + } + + sessions, _ = store.ListSessionsByUser(ctx, user.ID) + if len(sessions) != 0 { + t.Fatalf("expected 0 sessions after revoke, got %d", len(sessions)) + } +} + +func testAuditLog(t *testing.T, factory ProviderFactory) { + store := factory(t) + defer store.Close() + ctx := context.Background() + + if err := store.CreateAuditLog(ctx, storage.AuditRecord{ + ID: uuid.New().String(), Action: "login", IPAddress: "127.0.0.1", + }); err != nil { + t.Fatalf("CreateAuditLog: %v", err) + } + + logs, err := store.ListAuditLogs(ctx, "", "", 10, 0) + if err != nil { + t.Fatalf("ListAuditLogs: %v", err) + } + if len(logs) != 1 { + t.Fatalf("expected 1 log, got %d", len(logs)) + } + + total, err := store.CountAuditLogs(ctx, "", "") + if err != nil { + t.Fatalf("CountAuditLogs: %v", err) + } + if total != 1 { + t.Fatalf("expected total 1, got %d", total) + } +} diff --git a/backend/internal/storage/filestore.go b/backend/internal/storage/filestore.go index cb6c1c6..65e7bf7 100644 --- a/backend/internal/storage/filestore.go +++ b/backend/internal/storage/filestore.go @@ -2,15 +2,9 @@ package storage import ( "context" - "crypto/sha1" "encoding/json" - "fmt" "os" - "path/filepath" - "sort" - "strings" "sync" - "time" "github.com/IsKenKenYa/Commory/backend/internal/msglayer" ) @@ -140,747 +134,3 @@ func (s *fileStore) initMaps() { s.snapshot.Events = map[string]storedEvent{} } } - -func (s *fileStore) Import(ctx context.Context, userID string, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - - importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) - s.snapshot.Imports[importID] = storedImport{ - ID: importID, - UserID: userID, - SchemaVersion: export.Version, - ImportedAt: time.Now().UTC().Format(time.RFC3339), - SourcePath: sourcePath, - RawJSON: string(raw), - EventCount: len(export.Events), - IdentityCount: len(export.Identities), - } - for _, identity := range export.Identities { - s.snapshot.Identities[scopeKey(userID, identity.ID)] = storedIdentity{ - UserID: userID, - Identity: identity, - } - } - for _, event := range export.Events { - s.snapshot.Events[scopeKey(userID, event.ID)] = storedEvent{ - UserID: userID, - ImportID: importID, - Item: msglayer.TimelineItem{ - EventID: event.ID, - Type: event.Type, - Timestamp: event.Timestamp, - Direction: event.Direction, - ContentSummary: summarizeEvent(event), - Participants: append([]string(nil), event.Participants...), - Meta: event.Meta, - SchemaVersion: export.Version, - }, - Raw: event, - } - } - return importID, s.persist() -} - -func (s *fileStore) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - - items := make([]ImportSummary, 0, len(s.snapshot.Imports)) - for _, item := range s.snapshot.Imports { - if item.UserID != userID { - continue - } - importedAt, _ := time.Parse(time.RFC3339, item.ImportedAt) - items = append(items, ImportSummary{ - ID: item.ID, - UserID: item.UserID, - SchemaVersion: item.SchemaVersion, - ImportedAt: importedAt, - SourcePath: item.SourcePath, - EventCount: item.EventCount, - IdentityCount: item.IdentityCount, - }) - } - sort.Slice(items, func(i, j int) bool { return items[i].ImportedAt.After(items[j].ImportedAt) }) - return items, nil -} - -func (s *fileStore) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - if importID == "" { - var err error - importID, err = s.latestImportIDLocked(userID) - if err != nil { - return nil, err - } - } - item, ok := s.snapshot.Imports[importID] - if !ok || item.UserID != userID { - return nil, fmt.Errorf("import not found: %s", importID) - } - return []byte(item.RawJSON), nil -} - -func (s *fileStore) LatestImportID(ctx context.Context, userID string) (string, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - return s.latestImportIDLocked(userID) -} - -func (s *fileStore) latestImportIDLocked(userID string) (string, error) { - imports := make([]storedImport, 0, len(s.snapshot.Imports)) - for _, item := range s.snapshot.Imports { - if item.UserID != userID { - continue - } - imports = append(imports, item) - } - if len(imports) == 0 { - return "", fmt.Errorf("no imports found") - } - sort.Slice(imports, func(i, j int) bool { return imports[i].ImportedAt > imports[j].ImportedAt }) - return imports[0].ID, nil -} - -func (s *fileStore) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - item, ok := s.lookupScopedEventKey(s.snapshot.Events, userID, id) - if !ok { - return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) - } - return item.Item, nil -} - -func (s *fileStore) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - return s.filterEvents(ctx, params, false) -} - -func (s *fileStore) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - return s.filterEvents(ctx, params, true) -} - -func (s *fileStore) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - return s.filterEvents(ctx, params, false) -} - -func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchParams, keywordOnly bool) ([]msglayer.TimelineItem, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - - var items []msglayer.TimelineItem - for _, stored := range s.snapshot.Events { - if stored.UserID != params.UserID { - continue - } - if keywordOnly && params.Keyword == "" { - continue - } - if params.Keyword != "" && !matchesKeyword(stored, params.Keyword) { - continue - } - if params.ContactID != "" && !contains(stored.Item.Participants, params.ContactID) { - continue - } - if params.Participant != "" && !contains(stored.Item.Participants, params.Participant) { - continue - } - if params.Type != "" && stored.Item.Type != params.Type { - continue - } - // Timestamp ordering/filtering relies on normalized UTC RFC3339 strings. - if params.From != "" && stored.Item.Timestamp < params.From { - continue - } - if params.To != "" && stored.Item.Timestamp > params.To { - continue - } - items = append(items, stored.Item) - } - sort.Slice(items, func(i, j int) bool { return items[i].Timestamp > items[j].Timestamp }) - if params.Offset > 0 && params.Offset < len(items) { - items = items[params.Offset:] - } else if params.Offset >= len(items) { - items = nil - } - if params.Limit > 0 && len(items) > params.Limit { - items = items[:params.Limit] - } - return items, nil -} - -func (s *fileStore) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - items := make([]msglayer.Identity, 0, len(s.snapshot.Identities)) - for _, identity := range s.snapshot.Identities { - if identity.UserID != userID { - continue - } - items = append(items, identity.Identity) - } - sort.Slice(items, func(i, j int) bool { return items[i].DisplayName < items[j].DisplayName }) - return items, nil -} - -func (s *fileStore) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - identity, ok := s.lookupScopedKey(s.snapshot.Identities, userID, id) - if !ok { - return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) - } - return identity.Identity, nil -} - -func (s *fileStore) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - var items []msglayer.TimelineItem - for _, stored := range s.snapshot.Events { - if stored.UserID != userID { - continue - } - for _, relation := range stored.Raw.Relations { - if relation.Type == "same_thread" && relation.Target == threadID { - items = append(items, stored.Item) - break - } - } - } - sort.Slice(items, func(i, j int) bool { return items[i].Timestamp < items[j].Timestamp }) - return items, nil -} - -func (s *fileStore) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - for _, existing := range s.snapshot.Users { - if strings.EqualFold(existing.UserName, user.UserName) { - return UserRecord{}, fmt.Errorf("username already exists") - } - } - s.snapshot.Users[user.ID] = user - return user, s.persist() -} - -func (s *fileStore) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - for _, user := range s.snapshot.Users { - if strings.EqualFold(user.UserName, userName) { - return user, nil - } - } - return UserRecord{}, fmt.Errorf("user not found") -} - -func (s *fileStore) GetUser(ctx context.Context, userID string) (UserRecord, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - user, ok := s.snapshot.Users[userID] - if !ok { - return UserRecord{}, fmt.Errorf("user not found") - } - return user, nil -} - -func (s *fileStore) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - s.snapshot.RefreshTokens[token.ID] = token - return s.persist() -} - -func (s *fileStore) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - for key, token := range s.snapshot.RefreshTokens { - if token.TokenHash != tokenHash { - continue - } - if !token.RevokedAt.IsZero() { - return RefreshTokenRecord{}, fmt.Errorf("refresh token revoked") - } - if time.Now().After(token.ExpiresAt) { - return RefreshTokenRecord{}, fmt.Errorf("refresh token expired") - } - token.RevokedAt = time.Now().UTC() - s.snapshot.RefreshTokens[key] = token - if err := s.persist(); err != nil { - return RefreshTokenRecord{}, err - } - return token, nil - } - return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") -} - -func (s *fileStore) GetSetupStatus(ctx context.Context) (SetupStatus, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - if s.snapshot.Setup != nil { - return SetupStatus{Initialized: true, Version: s.snapshot.Setup.Version, DatabaseType: "sqlite"}, nil - } - hasAdmin, _ := s.hasAdminUserLocked() - return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil -} - -func (s *fileStore) SaveSetup(ctx context.Context, setup SetupRecord) error { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - s.snapshot.Setup = &setup - return s.persist() -} - -func (s *fileStore) HasAdminUser(ctx context.Context) (bool, error) { - _ = ctx - s.mu.RLock() - defer s.mu.RUnlock() - return s.hasAdminUserLocked() -} - -func (s *fileStore) hasAdminUserLocked() (bool, error) { - for _, user := range s.snapshot.Users { - for _, role := range user.Roles { - if role == "R_ADMIN" || role == "R_SUPER" { - return true, nil - } - } - } - return false, nil -} - -func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { - _ = ctx - s.mu.Lock() - defer s.mu.Unlock() - user, ok := s.snapshot.Users[userID] - if !ok { - return fmt.Errorf("user not found") - } - user.PasswordHash = newHash - user.PasswordSalt = newSalt - user.UpdatedAt = time.Now().UTC() - s.snapshot.Users[userID] = user - return s.persist() -} - -func (s *fileStore) FindAnyRefreshTokenByHash(_ context.Context, tokenHash string) (RefreshTokenRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - for _, token := range s.snapshot.RefreshTokens { - if token.TokenHash == tokenHash { - return token, nil - } - } - return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") -} - -func (s *fileStore) RevokeRefreshTokenFamily(_ context.Context, tokenID string) error { - s.mu.Lock() - defer s.mu.Unlock() - queue := []string{tokenID} - seen := map[string]struct{}{} - now := time.Now().UTC() - for len(queue) > 0 { - current := queue[0] - queue = queue[1:] - if _, ok := seen[current]; ok { - continue - } - seen[current] = struct{}{} - if token, ok := s.snapshot.RefreshTokens[current]; ok && token.RevokedAt.IsZero() { - token.RevokedAt = now - s.snapshot.RefreshTokens[current] = token - } - for id, token := range s.snapshot.RefreshTokens { - if token.ParentID == current { - queue = append(queue, id) - } - } - } - return s.persist() -} - -func (s *fileStore) RevokeRefreshTokenByID(_ context.Context, tokenID string) error { - s.mu.Lock() - defer s.mu.Unlock() - token, ok := s.snapshot.RefreshTokens[tokenID] - if !ok { - return nil - } - if token.RevokedAt.IsZero() { - token.RevokedAt = time.Now().UTC() - s.snapshot.RefreshTokens[tokenID] = token - } - return s.persist() -} - -func (s *fileStore) CreateSession(_ context.Context, rec SessionRecord) error { - s.mu.Lock() - defer s.mu.Unlock() - s.snapshot.Sessions[rec.ID] = rec - return s.persist() -} - -func (s *fileStore) GetSession(_ context.Context, sessionID string) (SessionRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - session, ok := s.snapshot.Sessions[sessionID] - if !ok { - return SessionRecord{}, fmt.Errorf("session not found") - } - return session, nil -} - -func (s *fileStore) GetSessionByRefreshTokenID(_ context.Context, refreshTokenID string) (SessionRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - for _, session := range s.snapshot.Sessions { - if session.RefreshTokenID == refreshTokenID { - return session, nil - } - } - return SessionRecord{}, fmt.Errorf("session not found") -} - -func (s *fileStore) ListSessionsByUser(_ context.Context, userID string) ([]SessionRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - items := make([]SessionRecord, 0, len(s.snapshot.Sessions)) - for _, session := range s.snapshot.Sessions { - if session.UserID != userID { - continue - } - items = append(items, session) - } - sort.Slice(items, func(i, j int) bool { return items[i].LastSeenAt.After(items[j].LastSeenAt) }) - return items, nil -} - -func (s *fileStore) RevokeSession(_ context.Context, sessionID string) error { - s.mu.Lock() - defer s.mu.Unlock() - session, ok := s.snapshot.Sessions[sessionID] - if !ok { - return nil - } - session.LastSeenAt = time.Now().UTC() - delete(s.snapshot.Sessions, sessionID) - if session.RefreshTokenID != "" { - if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { - token.RevokedAt = time.Now().UTC() - s.snapshot.RefreshTokens[session.RefreshTokenID] = token - } - } - return s.persist() -} - -func (s *fileStore) RevokeOtherSessions(_ context.Context, userID, currentSessionID string) error { - s.mu.Lock() - defer s.mu.Unlock() - now := time.Now().UTC() - for id, session := range s.snapshot.Sessions { - if session.UserID != userID || id == currentSessionID { - continue - } - if session.RefreshTokenID != "" { - if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { - token.RevokedAt = now - s.snapshot.RefreshTokens[session.RefreshTokenID] = token - } - } - delete(s.snapshot.Sessions, id) - } - return s.persist() -} - -func (s *fileStore) UpdateSessionLastSeen(_ context.Context, sessionID string) error { - s.mu.Lock() - defer s.mu.Unlock() - session, ok := s.snapshot.Sessions[sessionID] - if !ok { - return fmt.Errorf("session not found") - } - session.LastSeenAt = time.Now().UTC() - s.snapshot.Sessions[sessionID] = session - return s.persist() -} - -func (s *fileStore) UpdateSessionRefreshToken(_ context.Context, sessionID, refreshTokenID string) error { - s.mu.Lock() - defer s.mu.Unlock() - session, ok := s.snapshot.Sessions[sessionID] - if !ok { - return fmt.Errorf("session not found") - } - session.RefreshTokenID = refreshTokenID - session.LastSeenAt = time.Now().UTC() - s.snapshot.Sessions[sessionID] = session - return s.persist() -} - -func (s *fileStore) CreateAuditLog(_ context.Context, rec AuditRecord) error { - s.mu.Lock() - defer s.mu.Unlock() - s.snapshot.AuditLogs[rec.ID] = rec - return s.persist() -} - -func (s *fileStore) ListAuditLogs(_ context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - items := make([]AuditRecord, 0, len(s.snapshot.AuditLogs)) - for _, rec := range s.snapshot.AuditLogs { - if userID != "" && rec.UserID != userID { - continue - } - if action != "" && rec.Action != action { - continue - } - items = append(items, rec) - } - sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) - if offset > 0 && offset < len(items) { - items = items[offset:] - } else if offset >= len(items) { - return nil, nil - } - if limit > 0 && len(items) > limit { - items = items[:limit] - } - return items, nil -} - -func (s *fileStore) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { - items, err := s.ListAuditLogs(ctx, userID, action, 0, 0) - if err != nil { - return 0, err - } - return len(items), nil -} - -func (s *fileStore) CreatePasskeyCredential(_ context.Context, rec PasskeyCredential) error { - s.mu.Lock() - defer s.mu.Unlock() - s.snapshot.Passkeys[rec.ID] = rec - return s.persist() -} - -func (s *fileStore) GetPasskeyByCredentialID(_ context.Context, credentialID string) (PasskeyCredential, error) { - s.mu.RLock() - defer s.mu.RUnlock() - for _, passkey := range s.snapshot.Passkeys { - if passkey.CredentialID == credentialID { - return passkey, nil - } - } - return PasskeyCredential{}, fmt.Errorf("passkey not found") -} - -func (s *fileStore) ListPasskeysByUser(_ context.Context, userID string) ([]PasskeyCredential, error) { - s.mu.RLock() - defer s.mu.RUnlock() - items := make([]PasskeyCredential, 0, len(s.snapshot.Passkeys)) - for _, passkey := range s.snapshot.Passkeys { - if passkey.UserID != userID { - continue - } - items = append(items, passkey) - } - sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) - return items, nil -} - -func (s *fileStore) UpdatePasskeyLastUsed(_ context.Context, id string, signCount uint32) error { - s.mu.Lock() - defer s.mu.Unlock() - passkey, ok := s.snapshot.Passkeys[id] - if !ok { - return fmt.Errorf("passkey not found") - } - passkey.SignCount = signCount - passkey.LastUsedAt = time.Now().UTC() - s.snapshot.Passkeys[id] = passkey - return s.persist() -} - -func (s *fileStore) DeletePasskey(_ context.Context, id, userID string) error { - s.mu.Lock() - defer s.mu.Unlock() - passkey, ok := s.snapshot.Passkeys[id] - if !ok || passkey.UserID != userID { - return nil - } - delete(s.snapshot.Passkeys, id) - return s.persist() -} - -func (s *fileStore) CreateChallenge(_ context.Context, rec ChallengeRecord) error { - s.mu.Lock() - defer s.mu.Unlock() - if rec.CreatedAt.IsZero() { - rec.CreatedAt = time.Now().UTC() - } - s.snapshot.Challenges[rec.ID] = rec - return s.persist() -} - -func (s *fileStore) GetChallenge(_ context.Context, id string) (ChallengeRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - challenge, ok := s.snapshot.Challenges[id] - if !ok || time.Now().UTC().After(challenge.ExpiresAt) { - return ChallengeRecord{}, fmt.Errorf("challenge not found") - } - return challenge, nil -} - -func (s *fileStore) DeleteChallenge(_ context.Context, id string) error { - s.mu.Lock() - defer s.mu.Unlock() - delete(s.snapshot.Challenges, id) - return s.persist() -} - -func (s *fileStore) CreateAuthMethod(_ context.Context, rec AuthMethodRecord) error { - s.mu.Lock() - defer s.mu.Unlock() - for _, existing := range s.snapshot.AuthMethods { - if existing.ProviderType == rec.ProviderType && existing.ProviderUserID == rec.ProviderUserID { - return fmt.Errorf("auth method already exists") - } - } - s.snapshot.AuthMethods[rec.ID] = rec - return s.persist() -} - -func (s *fileStore) GetAuthMethodByProvider(_ context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { - s.mu.RLock() - defer s.mu.RUnlock() - for _, rec := range s.snapshot.AuthMethods { - if rec.ProviderType == providerType && rec.ProviderUserID == providerUserID { - return rec, nil - } - } - return AuthMethodRecord{}, fmt.Errorf("auth method not found") -} - -func EnsureParentDir(path string) error { - dir := filepath.Dir(path) - if dir == "." || dir == "" { - return nil - } - return os.MkdirAll(dir, 0o755) -} - -func (s *fileStore) persist() error { - data, err := json.MarshalIndent(s.snapshot, "", " ") - if err != nil { - return err - } - return os.WriteFile(s.path, data, 0o644) -} - -func scopeKey(userID, rawID string) string { - hash := sha1.Sum([]byte(userID)) - return fmt.Sprintf("%x:%s", hash[:8], rawID) -} - -func scopeKeyLegacy(userID, rawID string) string { - hash := sha1.Sum([]byte(userID)) - return fmt.Sprintf("%x:%s", hash[:4], rawID) -} - -func (s *fileStore) lookupScopedKey(m map[string]storedIdentity, userID, rawID string) (storedIdentity, bool) { - key := scopeKey(userID, rawID) - if v, ok := m[key]; ok && v.UserID == userID { - return v, true - } - key = scopeKeyLegacy(userID, rawID) - if v, ok := m[key]; ok && v.UserID == userID { - return v, true - } - return storedIdentity{}, false -} - -func (s *fileStore) lookupScopedEventKey(m map[string]storedEvent, userID, rawID string) (storedEvent, bool) { - key := scopeKey(userID, rawID) - if v, ok := m[key]; ok && v.UserID == userID { - return v, true - } - key = scopeKeyLegacy(userID, rawID) - if v, ok := m[key]; ok && v.UserID == userID { - return v, true - } - return storedEvent{}, false -} - -func summarizeEvent(event msglayer.Event) string { - switch event.Type { - case "sms": - return asString(event.Content["text"]) - case "call": - return fmt.Sprintf("%s %vsec", asString(event.Content["call_type"]), event.Content["duration_sec"]) - case "voice": - if summary := asString(event.Content["summary"]); summary != "" { - return summary - } - return asString(event.Content["transcript"]) - case "contact_snapshot": - return asString(event.Content["identity_id"]) - default: - return event.Type - } -} - -func matchesKeyword(event storedEvent, keyword string) bool { - needle := strings.ToLower(keyword) - if strings.Contains(strings.ToLower(event.Item.ContentSummary), needle) { - return true - } - if transcript := asString(event.Raw.Content["transcript"]); strings.Contains(strings.ToLower(transcript), needle) { - return true - } - if summary := asString(event.Raw.Content["summary"]); strings.Contains(strings.ToLower(summary), needle) { - return true - } - return false -} - -func contains(values []string, target string) bool { - for _, value := range values { - if value == target { - return true - } - } - return false -} - -func asString(v any) string { - if v == nil { - return "" - } - if value, ok := v.(string); ok { - return value - } - return fmt.Sprintf("%v", v) -} diff --git a/backend/internal/storage/filestore_auth_session.go b/backend/internal/storage/filestore_auth_session.go new file mode 100644 index 0000000..1648326 --- /dev/null +++ b/backend/internal/storage/filestore_auth_session.go @@ -0,0 +1,247 @@ +package storage + +import ( + "context" + "fmt" + "sort" + "strings" + "time" +) + +func (s *fileStore) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + for _, existing := range s.snapshot.Users { + if strings.EqualFold(existing.UserName, user.UserName) { + return UserRecord{}, fmt.Errorf("username already exists") + } + } + s.snapshot.Users[user.ID] = user + return user, s.persist() +} + +func (s *fileStore) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + for _, user := range s.snapshot.Users { + if strings.EqualFold(user.UserName, userName) { + return user, nil + } + } + return UserRecord{}, fmt.Errorf("user not found") +} + +func (s *fileStore) GetUser(ctx context.Context, userID string) (UserRecord, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + user, ok := s.snapshot.Users[userID] + if !ok { + return UserRecord{}, fmt.Errorf("user not found") + } + return user, nil +} + +func (s *fileStore) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.RefreshTokens[token.ID] = token + return s.persist() +} + +func (s *fileStore) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + for key, token := range s.snapshot.RefreshTokens { + if token.TokenHash != tokenHash { + continue + } + if !token.RevokedAt.IsZero() { + return RefreshTokenRecord{}, fmt.Errorf("refresh token revoked") + } + if time.Now().After(token.ExpiresAt) { + return RefreshTokenRecord{}, fmt.Errorf("refresh token expired") + } + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[key] = token + if err := s.persist(); err != nil { + return RefreshTokenRecord{}, err + } + return token, nil + } + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") +} + +func (s *fileStore) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + user, ok := s.snapshot.Users[userID] + if !ok { + return fmt.Errorf("user not found") + } + user.PasswordHash = newHash + user.PasswordSalt = newSalt + user.UpdatedAt = time.Now().UTC() + s.snapshot.Users[userID] = user + return s.persist() +} + +func (s *fileStore) FindAnyRefreshTokenByHash(_ context.Context, tokenHash string) (RefreshTokenRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, token := range s.snapshot.RefreshTokens { + if token.TokenHash == tokenHash { + return token, nil + } + } + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found") +} + +func (s *fileStore) RevokeRefreshTokenFamily(_ context.Context, tokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + queue := []string{tokenID} + seen := map[string]struct{}{} + now := time.Now().UTC() + for len(queue) > 0 { + current := queue[0] + queue = queue[1:] + if _, ok := seen[current]; ok { + continue + } + seen[current] = struct{}{} + if token, ok := s.snapshot.RefreshTokens[current]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = now + s.snapshot.RefreshTokens[current] = token + } + for id, token := range s.snapshot.RefreshTokens { + if token.ParentID == current { + queue = append(queue, id) + } + } + } + return s.persist() +} + +func (s *fileStore) RevokeRefreshTokenByID(_ context.Context, tokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + token, ok := s.snapshot.RefreshTokens[tokenID] + if !ok { + return nil + } + if token.RevokedAt.IsZero() { + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[tokenID] = token + } + return s.persist() +} + +func (s *fileStore) CreateSession(_ context.Context, rec SessionRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Sessions[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) GetSession(_ context.Context, sessionID string) (SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return SessionRecord{}, fmt.Errorf("session not found") + } + return session, nil +} + +func (s *fileStore) GetSessionByRefreshTokenID(_ context.Context, refreshTokenID string) (SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, session := range s.snapshot.Sessions { + if session.RefreshTokenID == refreshTokenID { + return session, nil + } + } + return SessionRecord{}, fmt.Errorf("session not found") +} + +func (s *fileStore) ListSessionsByUser(_ context.Context, userID string) ([]SessionRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]SessionRecord, 0, len(s.snapshot.Sessions)) + for _, session := range s.snapshot.Sessions { + if session.UserID != userID { + continue + } + items = append(items, session) + } + sort.Slice(items, func(i, j int) bool { return items[i].LastSeenAt.After(items[j].LastSeenAt) }) + return items, nil +} + +func (s *fileStore) RevokeSession(_ context.Context, sessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return nil + } + session.LastSeenAt = time.Now().UTC() + delete(s.snapshot.Sessions, sessionID) + if session.RefreshTokenID != "" { + if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = time.Now().UTC() + s.snapshot.RefreshTokens[session.RefreshTokenID] = token + } + } + return s.persist() +} + +func (s *fileStore) RevokeOtherSessions(_ context.Context, userID, currentSessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + now := time.Now().UTC() + for id, session := range s.snapshot.Sessions { + if session.UserID != userID || id == currentSessionID { + continue + } + if session.RefreshTokenID != "" { + if token, ok := s.snapshot.RefreshTokens[session.RefreshTokenID]; ok && token.RevokedAt.IsZero() { + token.RevokedAt = now + s.snapshot.RefreshTokens[session.RefreshTokenID] = token + } + } + delete(s.snapshot.Sessions, id) + } + return s.persist() +} + +func (s *fileStore) UpdateSessionLastSeen(_ context.Context, sessionID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return fmt.Errorf("session not found") + } + session.LastSeenAt = time.Now().UTC() + s.snapshot.Sessions[sessionID] = session + return s.persist() +} + +func (s *fileStore) UpdateSessionRefreshToken(_ context.Context, sessionID, refreshTokenID string) error { + s.mu.Lock() + defer s.mu.Unlock() + session, ok := s.snapshot.Sessions[sessionID] + if !ok { + return fmt.Errorf("session not found") + } + session.RefreshTokenID = refreshTokenID + session.LastSeenAt = time.Now().UTC() + s.snapshot.Sessions[sessionID] = session + return s.persist() +} diff --git a/backend/internal/storage/filestore_imports_query.go b/backend/internal/storage/filestore_imports_query.go new file mode 100644 index 0000000..302aab2 --- /dev/null +++ b/backend/internal/storage/filestore_imports_query.go @@ -0,0 +1,231 @@ +package storage + +import ( + "context" + "fmt" + "sort" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +func (s *fileStore) Import(ctx context.Context, userID string, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + + importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) + s.snapshot.Imports[importID] = storedImport{ + ID: importID, + UserID: userID, + SchemaVersion: export.Version, + ImportedAt: time.Now().UTC().Format(time.RFC3339), + SourcePath: sourcePath, + RawJSON: string(raw), + EventCount: len(export.Events), + IdentityCount: len(export.Identities), + } + for _, identity := range export.Identities { + s.snapshot.Identities[scopeKey(userID, identity.ID)] = storedIdentity{ + UserID: userID, + Identity: identity, + } + } + for _, event := range export.Events { + s.snapshot.Events[scopeKey(userID, event.ID)] = storedEvent{ + UserID: userID, + ImportID: importID, + Item: msglayer.TimelineItem{ + EventID: event.ID, + Type: event.Type, + Timestamp: event.Timestamp, + Direction: event.Direction, + ContentSummary: summarizeEvent(event), + Participants: append([]string(nil), event.Participants...), + Meta: event.Meta, + SchemaVersion: export.Version, + }, + Raw: event, + } + } + return importID, s.persist() +} + +func (s *fileStore) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + + items := make([]ImportSummary, 0, len(s.snapshot.Imports)) + for _, item := range s.snapshot.Imports { + if item.UserID != userID { + continue + } + importedAt, _ := time.Parse(time.RFC3339, item.ImportedAt) + items = append(items, ImportSummary{ + ID: item.ID, + UserID: item.UserID, + SchemaVersion: item.SchemaVersion, + ImportedAt: importedAt, + SourcePath: item.SourcePath, + EventCount: item.EventCount, + IdentityCount: item.IdentityCount, + }) + } + sort.Slice(items, func(i, j int) bool { return items[i].ImportedAt.After(items[j].ImportedAt) }) + return items, nil +} + +func (s *fileStore) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + if importID == "" { + var err error + importID, err = s.latestImportIDLocked(userID) + if err != nil { + return nil, err + } + } + item, ok := s.snapshot.Imports[importID] + if !ok || item.UserID != userID { + return nil, fmt.Errorf("import not found: %s", importID) + } + return []byte(item.RawJSON), nil +} + +func (s *fileStore) LatestImportID(ctx context.Context, userID string) (string, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + return s.latestImportIDLocked(userID) +} + +func (s *fileStore) latestImportIDLocked(userID string) (string, error) { + imports := make([]storedImport, 0, len(s.snapshot.Imports)) + for _, item := range s.snapshot.Imports { + if item.UserID != userID { + continue + } + imports = append(imports, item) + } + if len(imports) == 0 { + return "", fmt.Errorf("no imports found") + } + sort.Slice(imports, func(i, j int) bool { return imports[i].ImportedAt > imports[j].ImportedAt }) + return imports[0].ID, nil +} + +func (s *fileStore) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + item, ok := s.lookupScopedEventKey(s.snapshot.Events, userID, id) + if !ok { + return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) + } + return item.Item, nil +} + +func (s *fileStore) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, false) +} + +func (s *fileStore) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, true) +} + +func (s *fileStore) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + return s.filterEvents(ctx, params, false) +} + +func (s *fileStore) filterEvents(ctx context.Context, params msglayer.SearchParams, keywordOnly bool) ([]msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + + var items []msglayer.TimelineItem + for _, stored := range s.snapshot.Events { + if stored.UserID != params.UserID { + continue + } + if keywordOnly && params.Keyword == "" { + continue + } + if params.Keyword != "" && !matchesKeyword(stored, params.Keyword) { + continue + } + if params.ContactID != "" && !contains(stored.Item.Participants, params.ContactID) { + continue + } + if params.Participant != "" && !contains(stored.Item.Participants, params.Participant) { + continue + } + if params.Type != "" && stored.Item.Type != params.Type { + continue + } + if params.From != "" && stored.Item.Timestamp < params.From { + continue + } + if params.To != "" && stored.Item.Timestamp > params.To { + continue + } + items = append(items, stored.Item) + } + sort.Slice(items, func(i, j int) bool { return items[i].Timestamp > items[j].Timestamp }) + if params.Offset > 0 && params.Offset < len(items) { + items = items[params.Offset:] + } else if params.Offset >= len(items) { + items = nil + } + if params.Limit > 0 && len(items) > params.Limit { + items = items[:params.Limit] + } + return items, nil +} + +func (s *fileStore) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]msglayer.Identity, 0, len(s.snapshot.Identities)) + for _, identity := range s.snapshot.Identities { + if identity.UserID != userID { + continue + } + items = append(items, identity.Identity) + } + sort.Slice(items, func(i, j int) bool { return items[i].DisplayName < items[j].DisplayName }) + return items, nil +} + +func (s *fileStore) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + identity, ok := s.lookupScopedKey(s.snapshot.Identities, userID, id) + if !ok { + return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) + } + return identity.Identity, nil +} + +func (s *fileStore) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + var items []msglayer.TimelineItem + for _, stored := range s.snapshot.Events { + if stored.UserID != userID { + continue + } + for _, relation := range stored.Raw.Relations { + if relation.Type == "same_thread" && relation.Target == threadID { + items = append(items, stored.Item) + break + } + } + } + sort.Slice(items, func(i, j int) bool { return items[i].Timestamp < items[j].Timestamp }) + return items, nil +} diff --git a/backend/internal/storage/filestore_setup_passkey.go b/backend/internal/storage/filestore_setup_passkey.go new file mode 100644 index 0000000..9a1288c --- /dev/null +++ b/backend/internal/storage/filestore_setup_passkey.go @@ -0,0 +1,191 @@ +package storage + +import ( + "context" + "fmt" + "sort" + "time" +) + +func (s *fileStore) GetSetupStatus(ctx context.Context) (SetupStatus, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + if s.snapshot.Setup != nil { + return SetupStatus{Initialized: true, Version: s.snapshot.Setup.Version, DatabaseType: "sqlite"}, nil + } + hasAdmin, _ := s.hasAdminUserLocked() + return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil +} + +func (s *fileStore) SaveSetup(ctx context.Context, setup SetupRecord) error { + _ = ctx + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Setup = &setup + return s.persist() +} + +func (s *fileStore) HasAdminUser(ctx context.Context) (bool, error) { + _ = ctx + s.mu.RLock() + defer s.mu.RUnlock() + return s.hasAdminUserLocked() +} + +func (s *fileStore) hasAdminUserLocked() (bool, error) { + for _, user := range s.snapshot.Users { + for _, role := range user.Roles { + if role == "R_ADMIN" || role == "R_SUPER" { + return true, nil + } + } + } + return false, nil +} + +func (s *fileStore) CreateAuditLog(_ context.Context, rec AuditRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.AuditLogs[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) ListAuditLogs(_ context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]AuditRecord, 0, len(s.snapshot.AuditLogs)) + for _, rec := range s.snapshot.AuditLogs { + if userID != "" && rec.UserID != userID { + continue + } + if action != "" && rec.Action != action { + continue + } + items = append(items, rec) + } + sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) + if offset > 0 && offset < len(items) { + items = items[offset:] + } else if offset >= len(items) { + return nil, nil + } + if limit > 0 && len(items) > limit { + items = items[:limit] + } + return items, nil +} + +func (s *fileStore) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { + items, err := s.ListAuditLogs(ctx, userID, action, 0, 0) + if err != nil { + return 0, err + } + return len(items), nil +} + +func (s *fileStore) CreatePasskeyCredential(_ context.Context, rec PasskeyCredential) error { + s.mu.Lock() + defer s.mu.Unlock() + s.snapshot.Passkeys[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) GetPasskeyByCredentialID(_ context.Context, credentialID string) (PasskeyCredential, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, passkey := range s.snapshot.Passkeys { + if passkey.CredentialID == credentialID { + return passkey, nil + } + } + return PasskeyCredential{}, fmt.Errorf("passkey not found") +} + +func (s *fileStore) ListPasskeysByUser(_ context.Context, userID string) ([]PasskeyCredential, error) { + s.mu.RLock() + defer s.mu.RUnlock() + items := make([]PasskeyCredential, 0, len(s.snapshot.Passkeys)) + for _, passkey := range s.snapshot.Passkeys { + if passkey.UserID != userID { + continue + } + items = append(items, passkey) + } + sort.Slice(items, func(i, j int) bool { return items[i].CreatedAt.After(items[j].CreatedAt) }) + return items, nil +} + +func (s *fileStore) UpdatePasskeyLastUsed(_ context.Context, id string, signCount uint32) error { + s.mu.Lock() + defer s.mu.Unlock() + passkey, ok := s.snapshot.Passkeys[id] + if !ok { + return fmt.Errorf("passkey not found") + } + passkey.SignCount = signCount + passkey.LastUsedAt = time.Now().UTC() + s.snapshot.Passkeys[id] = passkey + return s.persist() +} + +func (s *fileStore) DeletePasskey(_ context.Context, id, userID string) error { + s.mu.Lock() + defer s.mu.Unlock() + passkey, ok := s.snapshot.Passkeys[id] + if !ok || passkey.UserID != userID { + return nil + } + delete(s.snapshot.Passkeys, id) + return s.persist() +} + +func (s *fileStore) CreateChallenge(_ context.Context, rec ChallengeRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + if rec.CreatedAt.IsZero() { + rec.CreatedAt = time.Now().UTC() + } + s.snapshot.Challenges[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) GetChallenge(_ context.Context, id string) (ChallengeRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + challenge, ok := s.snapshot.Challenges[id] + if !ok || time.Now().UTC().After(challenge.ExpiresAt) { + return ChallengeRecord{}, fmt.Errorf("challenge not found") + } + return challenge, nil +} + +func (s *fileStore) DeleteChallenge(_ context.Context, id string) error { + s.mu.Lock() + defer s.mu.Unlock() + delete(s.snapshot.Challenges, id) + return s.persist() +} + +func (s *fileStore) CreateAuthMethod(_ context.Context, rec AuthMethodRecord) error { + s.mu.Lock() + defer s.mu.Unlock() + for _, existing := range s.snapshot.AuthMethods { + if existing.ProviderType == rec.ProviderType && existing.ProviderUserID == rec.ProviderUserID { + return fmt.Errorf("auth method already exists") + } + } + s.snapshot.AuthMethods[rec.ID] = rec + return s.persist() +} + +func (s *fileStore) GetAuthMethodByProvider(_ context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, rec := range s.snapshot.AuthMethods { + if rec.ProviderType == providerType && rec.ProviderUserID == providerUserID { + return rec, nil + } + } + return AuthMethodRecord{}, fmt.Errorf("auth method not found") +} diff --git a/backend/internal/storage/filestore_support.go b/backend/internal/storage/filestore_support.go new file mode 100644 index 0000000..da523e4 --- /dev/null +++ b/backend/internal/storage/filestore_support.go @@ -0,0 +1,113 @@ +package storage + +import ( + "crypto/sha1" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" +) + +func EnsureParentDir(path string) error { + dir := filepath.Dir(path) + if dir == "." || dir == "" { + return nil + } + return os.MkdirAll(dir, 0o755) +} + +func (s *fileStore) persist() error { + data, err := json.MarshalIndent(s.snapshot, "", " ") + if err != nil { + return err + } + return os.WriteFile(s.path, data, 0o644) +} + +func scopeKey(userID, rawID string) string { + hash := sha1.Sum([]byte(userID)) + return fmt.Sprintf("%x:%s", hash[:8], rawID) +} + +func scopeKeyLegacy(userID, rawID string) string { + hash := sha1.Sum([]byte(userID)) + return fmt.Sprintf("%x:%s", hash[:4], rawID) +} + +func (s *fileStore) lookupScopedKey(m map[string]storedIdentity, userID, rawID string) (storedIdentity, bool) { + key := scopeKey(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + key = scopeKeyLegacy(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + return storedIdentity{}, false +} + +func (s *fileStore) lookupScopedEventKey(m map[string]storedEvent, userID, rawID string) (storedEvent, bool) { + key := scopeKey(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + key = scopeKeyLegacy(userID, rawID) + if v, ok := m[key]; ok && v.UserID == userID { + return v, true + } + return storedEvent{}, false +} + +func summarizeEvent(event msglayer.Event) string { + switch event.Type { + case "sms": + return asString(event.Content["text"]) + case "call": + return fmt.Sprintf("%s %vsec", asString(event.Content["call_type"]), event.Content["duration_sec"]) + case "voice": + if summary := asString(event.Content["summary"]); summary != "" { + return summary + } + return asString(event.Content["transcript"]) + case "contact_snapshot": + return asString(event.Content["identity_id"]) + default: + return event.Type + } +} + +func matchesKeyword(event storedEvent, keyword string) bool { + needle := strings.ToLower(keyword) + if strings.Contains(strings.ToLower(event.Item.ContentSummary), needle) { + return true + } + if transcript := asString(event.Raw.Content["transcript"]); strings.Contains(strings.ToLower(transcript), needle) { + return true + } + if summary := asString(event.Raw.Content["summary"]); strings.Contains(strings.ToLower(summary), needle) { + return true + } + return false +} + +func contains(values []string, target string) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func asString(v any) string { + if v == nil { + return "" + } + if value, ok := v.(string); ok { + return value + } + return fmt.Sprintf("%v", v) +} diff --git a/backend/internal/storage/sqlite.go b/backend/internal/storage/sqlite.go index d350a94..b5d220c 100644 --- a/backend/internal/storage/sqlite.go +++ b/backend/internal/storage/sqlite.go @@ -4,12 +4,7 @@ import ( "context" "database/sql" _ "embed" - "encoding/json" "fmt" - "strings" - "time" - - "github.com/IsKenKenYa/Commory/backend/internal/msglayer" sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" _ "github.com/mattn/go-sqlite3" @@ -78,730 +73,3 @@ func (s *sqliteProvider) Init(ctx context.Context) error { return nil } - -// ==================== Import ==================== - -func (s *sqliteProvider) Import(ctx context.Context, userID, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { - tx, err := s.db.BeginTx(ctx, nil) - if err != nil { - return "", err - } - defer tx.Rollback() - - qtx := s.q.WithTx(tx) - - importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) - if err := qtx.CreateImport(ctx, &sqlc.CreateImportParams{ - ID: importID, - UserID: userID, - SchemaVersion: export.Version, - IsDelta: false, - SourcePath: sql.NullString{String: sourcePath, Valid: sourcePath != ""}, - EventCount: int64(len(export.Events)), - IdentityCount: int64(len(export.Identities)), - RawJson: string(raw), - }); err != nil { - return "", fmt.Errorf("create import: %w", err) - } - - for _, identity := range export.Identities { - phones, _ := json.Marshal(identity.Phones) - emails, _ := json.Marshal(identity.Emails) - labels, _ := json.Marshal(identity.Labels) - meta, _ := json.Marshal(identity.Meta) - var avatar sql.NullString - if identity.Avatar != nil { - avatar = sql.NullString{String: *identity.Avatar, Valid: true} - } - if err := qtx.CreateIdentity(ctx, &sqlc.CreateIdentityParams{ - ID: identity.ID, - UserID: userID, - Type: identity.Type, - DisplayName: identity.DisplayName, - Phones: string(phones), - Emails: string(emails), - Avatar: avatar, - Labels: string(labels), - Meta: string(meta), - }); err != nil { - return "", fmt.Errorf("create identity %s: %w", identity.ID, err) - } - } - - for _, event := range export.Events { - contentJSON, _ := json.Marshal(event.Content) - metaJSON, _ := json.Marshal(event.Meta) - ts, _ := time.Parse(time.RFC3339, event.Timestamp) - summary := summarizeEvent(event) - - if err := qtx.CreateEvent(ctx, &sqlc.CreateEventParams{ - ID: event.ID, - UserID: userID, - ImportID: sql.NullString{String: importID, Valid: true}, - Type: event.Type, - Timestamp: ts, - Direction: event.Direction, - ContentSummary: sql.NullString{String: summary, Valid: summary != ""}, - Content: string(contentJSON), - Meta: string(metaJSON), - }); err != nil { - return "", fmt.Errorf("create event %s: %w", event.ID, err) - } - - for _, participant := range event.Participants { - if err := qtx.InsertEventParticipant(ctx, &sqlc.InsertEventParticipantParams{ - EventID: event.ID, - IdentityID: participant, - }); err != nil { - return "", fmt.Errorf("insert participant %s: %w", participant, err) - } - } - - for _, rel := range event.Relations { - if err := qtx.CreateRelation(ctx, &sqlc.CreateRelationParams{ - ID: fmt.Sprintf("rel_%s_%s_%d", event.ID, rel.Type, time.Now().UnixNano()), - EventID: event.ID, - Type: rel.Type, - Target: rel.Target, - }); err != nil { - return "", fmt.Errorf("create relation: %w", err) - } - } - } - - return importID, tx.Commit() -} - -func (s *sqliteProvider) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { - rows, err := s.q.ListImportsByUser(ctx, userID) - if err != nil { - return nil, err - } - items := make([]ImportSummary, 0, len(rows)) - for _, r := range rows { - items = append(items, ImportSummary{ - ID: r.ID, - UserID: r.UserID, - SchemaVersion: r.SchemaVersion, - ImportedAt: r.ImportedAt, - SourcePath: r.SourcePath.String, - EventCount: int(r.EventCount), - IdentityCount: int(r.IdentityCount), - }) - } - return items, nil -} - -func (s *sqliteProvider) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { - if importID == "" { - var err error - importID, err = s.q.LatestImportID(ctx, userID) - if err != nil { - return nil, fmt.Errorf("no imports found") - } - } - raw, err := s.q.ExportImport(ctx, &sqlc.ExportImportParams{ID: importID, UserID: userID}) - if err != nil { - return nil, fmt.Errorf("import not found: %s", importID) - } - return []byte(raw), nil -} - -func (s *sqliteProvider) LatestImportID(ctx context.Context, userID string) (string, error) { - id, err := s.q.LatestImportID(ctx, userID) - if err != nil { - return "", fmt.Errorf("no imports found") - } - return id, nil -} - -// ==================== Events ==================== - -func (s *sqliteProvider) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { - row, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: id, UserID: userID}) - if err != nil { - return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) - } - return s.eventToTimelineItem(ctx, row) -} - -func (s *sqliteProvider) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - typeFilter := "" - if params.Type != "" { - typeFilter = params.Type - } - limit := int64(50) - if params.Limit > 0 { - limit = int64(params.Limit) - } - rows, err := s.q.ListEvents(ctx, &sqlc.ListEventsParams{ - UserID: params.UserID, - Type: typeFilter, - Limit: limit, - Offset: int64(params.Offset), - }) - if err != nil { - return nil, err - } - return s.eventsToTimelineItems(ctx, rows) -} - -func (s *sqliteProvider) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - if params.Keyword == "" { - return nil, nil - } - typeFilter := "" - if params.Type != "" { - typeFilter = params.Type - } - limit := int64(50) - if params.Limit > 0 { - limit = int64(params.Limit) - } - rows, err := s.q.SearchEvents(ctx, &sqlc.SearchEventsParams{ - UserID: params.UserID, - SearchTerm: sql.NullString{String: params.Keyword, Valid: true}, - Type: typeFilter, - Limit: limit, - Offset: int64(params.Offset), - }) - if err != nil { - return nil, err - } - return s.eventsToTimelineItems(ctx, rows) -} - -func (s *sqliteProvider) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { - typeFilter := "" - if params.Type != "" { - typeFilter = params.Type - } - limit := int64(50) - if params.Limit > 0 { - limit = int64(params.Limit) - } - - if params.Participant != "" { - rows, err := s.q.TimelineEventsByParticipant(ctx, &sqlc.TimelineEventsByParticipantParams{ - UserID: params.UserID, - Type: typeFilter, - Participant: sql.NullString{String: params.Participant, Valid: true}, - Limit: limit, - Offset: int64(params.Offset), - }) - if err != nil { - return nil, err - } - return s.eventsToTimelineItems(ctx, rows) - } - - rows, err := s.q.TimelineEvents(ctx, &sqlc.TimelineEventsParams{ - UserID: params.UserID, - Type: typeFilter, - Limit: limit, - Offset: int64(params.Offset), - }) - if err != nil { - return nil, err - } - return s.eventsToTimelineItems(ctx, rows) -} - -// ==================== Identities ==================== - -func (s *sqliteProvider) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { - rows, err := s.q.ListIdentities(ctx, &sqlc.ListIdentitiesParams{UserID: userID, Type: ""}) - if err != nil { - return nil, err - } - items := make([]msglayer.Identity, 0, len(rows)) - for _, r := range rows { - items = append(items, s.rowToIdentity(r)) - } - return items, nil -} - -func (s *sqliteProvider) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { - row, err := s.q.GetIdentity(ctx, &sqlc.GetIdentityParams{ID: id, UserID: userID}) - if err != nil { - return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) - } - return s.rowToIdentity(row), nil -} - -func (s *sqliteProvider) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { - relations, err := s.q.ListRelationsByTarget(ctx, &sqlc.ListRelationsByTargetParams{ - Type: "same_thread", - Target: threadID, - }) - if err != nil { - return nil, err - } - var items []msglayer.TimelineItem - for _, rel := range relations { - event, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: rel.EventID, UserID: userID}) - if err != nil { - continue - } - item, err := s.eventToTimelineItem(ctx, event) - if err != nil { - continue - } - items = append(items, item) - } - return items, nil -} - -// ==================== Users ==================== - -func (s *sqliteProvider) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { - roles, _ := json.Marshal(user.Roles) - buttons, _ := json.Marshal(user.Buttons) - err := s.q.CreateUser(ctx, &sqlc.CreateUserParams{ - ID: user.ID, - UserName: user.UserName, - Email: sql.NullString{String: user.Email, Valid: user.Email != ""}, - PasswordHash: user.PasswordHash, - PasswordSalt: user.PasswordSalt, - Roles: string(roles), - Buttons: string(buttons), - }) - if err != nil { - if strings.Contains(err.Error(), "UNIQUE") { - return UserRecord{}, fmt.Errorf("username already exists") - } - return UserRecord{}, err - } - return s.GetUser(ctx, user.ID) -} - -func (s *sqliteProvider) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { - row, err := s.q.FindUserByUserName(ctx, userName) - if err != nil { - return UserRecord{}, fmt.Errorf("user not found") - } - return s.rowToUser(row), nil -} - -func (s *sqliteProvider) GetUser(ctx context.Context, userID string) (UserRecord, error) { - row, err := s.q.GetUser(ctx, userID) - if err != nil { - return UserRecord{}, fmt.Errorf("user not found") - } - return s.rowToUser(row), nil -} - -// ==================== Refresh Tokens ==================== - -func (s *sqliteProvider) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { - return s.q.SaveRefreshToken(ctx, &sqlc.SaveRefreshTokenParams{ - ID: token.ID, - UserID: token.UserID, - TokenHash: token.TokenHash, - ParentID: sql.NullString{}, - ExpiresAt: token.ExpiresAt, - }) -} - -func (s *sqliteProvider) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { - row, err := s.q.ConsumeRefreshToken(ctx, tokenHash) - if err != nil { - return RefreshTokenRecord{}, fmt.Errorf("refresh token not found or expired") - } - return RefreshTokenRecord{ - ID: row.ID, - UserID: row.UserID, - TokenHash: row.TokenHash, - ExpiresAt: row.ExpiresAt, - CreatedAt: row.CreatedAt, - RevokedAt: row.RevokedAt.Time, - }, nil -} - -// ==================== Setup ==================== - -func (s *sqliteProvider) GetSetupStatus(ctx context.Context) (SetupStatus, error) { - row, err := s.q.GetSetupStatus(ctx) - if err != nil { - hasAdmin, _ := s.q.HasAdminUser(ctx) - return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil - } - return SetupStatus{ - Initialized: true, - Version: row.Version, - DatabaseType: "sqlite", - }, nil -} - -func (s *sqliteProvider) SaveSetup(ctx context.Context, setup SetupRecord) error { - ts, _ := time.Parse(time.RFC3339, setup.InitializedAt) - if ts.IsZero() { - ts = time.Now().UTC() - } - return s.q.SaveSetup(ctx, &sqlc.SaveSetupParams{ - ID: setup.ID, - Version: setup.Version, - InitializedAt: ts, - UsageMode: sql.NullString{String: setup.UsageMode, Valid: setup.UsageMode != ""}, - }) -} - -func (s *sqliteProvider) HasAdminUser(ctx context.Context) (bool, error) { - return s.q.HasAdminUser(ctx) -} - -func (s *sqliteProvider) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { - return s.q.UpdateUserPasswordHash(ctx, &sqlc.UpdateUserPasswordHashParams{ - PasswordHash: newHash, - PasswordSalt: newSalt, - ID: userID, - }) -} - -// ==================== Refresh Token 族 ==================== - -func (s *sqliteProvider) FindAnyRefreshTokenByHash(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { - row, err := s.q.FindAnyRefreshTokenByHash(ctx, tokenHash) - if err != nil { - return RefreshTokenRecord{}, err - } - return s.rowToRefreshToken(row), nil -} - -func (s *sqliteProvider) RevokeRefreshTokenFamily(ctx context.Context, tokenID string) error { - return s.q.RevokeRefreshTokenFamily(ctx, tokenID) -} - -func (s *sqliteProvider) RevokeRefreshTokenByID(ctx context.Context, tokenID string) error { - return s.q.RevokeRefreshTokenByID(ctx, tokenID) -} - -// ==================== Sessions ==================== - -func (s *sqliteProvider) CreateSession(ctx context.Context, rec SessionRecord) error { - return s.q.CreateSession(ctx, &sqlc.CreateSessionParams{ - ID: rec.ID, - UserID: rec.UserID, - RefreshTokenID: sql.NullString{String: rec.RefreshTokenID, Valid: rec.RefreshTokenID != ""}, - DeviceName: sql.NullString{String: rec.DeviceName, Valid: rec.DeviceName != ""}, - DeviceType: sql.NullString{String: rec.DeviceType, Valid: rec.DeviceType != ""}, - IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, - UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, - }) -} - -func (s *sqliteProvider) GetSession(ctx context.Context, sessionID string) (SessionRecord, error) { - row, err := s.q.GetSession(ctx, sessionID) - if err != nil { - return SessionRecord{}, err - } - return s.rowToSession(row), nil -} - -func (s *sqliteProvider) GetSessionByRefreshTokenID(ctx context.Context, refreshTokenID string) (SessionRecord, error) { - row, err := s.q.GetSessionByRefreshTokenID(ctx, sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}) - if err != nil { - return SessionRecord{}, err - } - return s.rowToSession(row), nil -} - -func (s *sqliteProvider) ListSessionsByUser(ctx context.Context, userID string) ([]SessionRecord, error) { - rows, err := s.q.ListSessionsByUser(ctx, userID) - if err != nil { - return nil, err - } - items := make([]SessionRecord, 0, len(rows)) - for _, r := range rows { - items = append(items, s.rowToSession(r)) - } - return items, nil -} - -func (s *sqliteProvider) RevokeSession(ctx context.Context, sessionID string) error { - return s.q.RevokeSession(ctx, sessionID) -} - -func (s *sqliteProvider) RevokeOtherSessions(ctx context.Context, userID, currentSessionID string) error { - return s.q.RevokeOtherSessions(ctx, &sqlc.RevokeOtherSessionsParams{ - UserID: userID, - ID: currentSessionID, - }) -} - -func (s *sqliteProvider) UpdateSessionLastSeen(ctx context.Context, sessionID string) error { - return s.q.UpdateSessionLastSeen(ctx, sessionID) -} - -func (s *sqliteProvider) UpdateSessionRefreshToken(ctx context.Context, sessionID, refreshTokenID string) error { - return s.q.UpdateSessionRefreshToken(ctx, &sqlc.UpdateSessionRefreshTokenParams{ - RefreshTokenID: sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}, - ID: sessionID, - }) -} - -// ==================== Audit Log ==================== - -func (s *sqliteProvider) CreateAuditLog(ctx context.Context, rec AuditRecord) error { - return s.q.CreateAuditLog(ctx, &sqlc.CreateAuditLogParams{ - ID: rec.ID, - UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, - Action: rec.Action, - IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, - UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, - Detail: sql.NullString{String: rec.Detail, Valid: rec.Detail != ""}, - }) -} - -func (s *sqliteProvider) ListAuditLogs(ctx context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { - rows, err := s.q.GetAuditLogs(ctx, &sqlc.GetAuditLogsParams{ - UserID: userID, - Action: action, - Limit: int64(limit), - Offset: int64(offset), - }) - if err != nil { - return nil, err - } - items := make([]AuditRecord, 0, len(rows)) - for _, r := range rows { - items = append(items, AuditRecord{ - ID: r.ID, - UserID: r.UserID.String, - Action: r.Action, - IPAddress: r.IpAddress.String, - UserAgent: r.UserAgent.String, - Detail: r.Detail.String, - CreatedAt: r.CreatedAt, - }) - } - return items, nil -} - -func (s *sqliteProvider) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { - count, err := s.q.CountAuditLogs(ctx, &sqlc.CountAuditLogsParams{ - UserID: userID, - Action: action, - }) - return int(count), err -} - -// ==================== Passkey ==================== - -func (s *sqliteProvider) CreatePasskeyCredential(ctx context.Context, rec PasskeyCredential) error { - return s.q.CreatePasskeyCredential(ctx, &sqlc.CreatePasskeyCredentialParams{ - ID: rec.ID, - UserID: rec.UserID, - CredentialID: rec.CredentialID, - PublicKey: rec.PublicKey, - AttestationType: rec.AttestationType, - Aaguid: rec.AAGUID, - SignCount: int64(rec.SignCount), - Transports: rec.Transports, - Name: rec.Name, - }) -} - -func (s *sqliteProvider) GetPasskeyByCredentialID(ctx context.Context, credentialID string) (PasskeyCredential, error) { - row, err := s.q.GetPasskeyByCredentialID(ctx, credentialID) - if err != nil { - return PasskeyCredential{}, err - } - return s.rowToPasskey(row), nil -} - -func (s *sqliteProvider) ListPasskeysByUser(ctx context.Context, userID string) ([]PasskeyCredential, error) { - rows, err := s.q.ListPasskeysByUser(ctx, userID) - if err != nil { - return nil, err - } - items := make([]PasskeyCredential, 0, len(rows)) - for _, r := range rows { - items = append(items, s.rowToPasskey(r)) - } - return items, nil -} - -func (s *sqliteProvider) UpdatePasskeyLastUsed(ctx context.Context, id string, signCount uint32) error { - return s.q.UpdatePasskeyLastUsed(ctx, &sqlc.UpdatePasskeyLastUsedParams{ - SignCount: int64(signCount), - ID: id, - }) -} - -func (s *sqliteProvider) DeletePasskey(ctx context.Context, id, userID string) error { - return s.q.DeletePasskey(ctx, &sqlc.DeletePasskeyParams{ID: id, UserID: userID}) -} - -// ==================== Challenge ==================== - -func (s *sqliteProvider) CreateChallenge(ctx context.Context, rec ChallengeRecord) error { - return s.q.CreateChallenge(ctx, &sqlc.CreateChallengeParams{ - ID: rec.ID, - Challenge: rec.Challenge, - UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, - FlowType: rec.FlowType, - ExpiresAt: rec.ExpiresAt, - }) -} - -func (s *sqliteProvider) GetChallenge(ctx context.Context, id string) (ChallengeRecord, error) { - row, err := s.q.GetChallenge(ctx, id) - if err != nil { - return ChallengeRecord{}, err - } - return ChallengeRecord{ - ID: row.ID, - Challenge: row.Challenge, - UserID: row.UserID.String, - FlowType: row.FlowType, - ExpiresAt: row.ExpiresAt, - CreatedAt: row.CreatedAt, - }, nil -} - -func (s *sqliteProvider) DeleteChallenge(ctx context.Context, id string) error { - return s.q.DeleteChallenge(ctx, id) -} - -// ==================== Auth Methods ==================== - -func (s *sqliteProvider) CreateAuthMethod(ctx context.Context, rec AuthMethodRecord) error { - return s.q.CreateAuthMethod(ctx, &sqlc.CreateAuthMethodParams{ - ID: rec.ID, - UserID: rec.UserID, - ProviderType: rec.ProviderType, - ProviderUserID: rec.ProviderUserID, - Metadata: rec.Metadata, - }) -} - -func (s *sqliteProvider) GetAuthMethodByProvider(ctx context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { - row, err := s.q.GetAuthMethodByProvider(ctx, &sqlc.GetAuthMethodByProviderParams{ - ProviderType: providerType, - ProviderUserID: providerUserID, - }) - if err != nil { - return AuthMethodRecord{}, err - } - return AuthMethodRecord{ - ID: row.ID, - UserID: row.UserID, - ProviderType: row.ProviderType, - ProviderUserID: row.ProviderUserID, - Metadata: row.Metadata, - CreatedAt: row.CreatedAt, - UpdatedAt: row.UpdatedAt, - }, nil -} - -// ==================== Type conversions ==================== - -func (s *sqliteProvider) rowToUser(row *sqlc.User) UserRecord { - var roles, buttons []string - json.Unmarshal([]byte(row.Roles), &roles) - json.Unmarshal([]byte(row.Buttons), &buttons) - return UserRecord{ - ID: row.ID, - UserName: row.UserName, - Email: row.Email.String, - PasswordHash: row.PasswordHash, - PasswordSalt: row.PasswordSalt, - Roles: roles, - Buttons: buttons, - CreatedAt: row.CreatedAt, - UpdatedAt: row.UpdatedAt, - } -} - -func (s *sqliteProvider) rowToRefreshToken(row *sqlc.RefreshToken) RefreshTokenRecord { - return RefreshTokenRecord{ - ID: row.ID, - UserID: row.UserID, - TokenHash: row.TokenHash, - ParentID: row.ParentID.String, - ExpiresAt: row.ExpiresAt, - CreatedAt: row.CreatedAt, - RevokedAt: row.RevokedAt.Time, - } -} - -func (s *sqliteProvider) rowToSession(row *sqlc.Session) SessionRecord { - return SessionRecord{ - ID: row.ID, - UserID: row.UserID, - RefreshTokenID: row.RefreshTokenID.String, - DeviceName: row.DeviceName.String, - DeviceType: row.DeviceType.String, - IPAddress: row.IpAddress.String, - UserAgent: row.UserAgent.String, - CreatedAt: row.CreatedAt, - LastSeenAt: row.LastSeenAt, - } -} - -func (s *sqliteProvider) rowToPasskey(row *sqlc.PasskeyCredential) PasskeyCredential { - return PasskeyCredential{ - ID: row.ID, - UserID: row.UserID, - CredentialID: row.CredentialID, - PublicKey: row.PublicKey, - AttestationType: row.AttestationType, - AAGUID: row.Aaguid, - SignCount: uint32(row.SignCount), - Transports: row.Transports, - Name: row.Name, - LastUsedAt: row.LastUsedAt.Time, - CreatedAt: row.CreatedAt, - } -} - -func (s *sqliteProvider) rowToIdentity(row *sqlc.Identity) msglayer.Identity { - var phones, emails, labels []string - var meta map[string]any - json.Unmarshal([]byte(row.Phones), &phones) - json.Unmarshal([]byte(row.Emails), &emails) - json.Unmarshal([]byte(row.Labels), &labels) - json.Unmarshal([]byte(row.Meta), &meta) - var avatar *string - if row.Avatar.Valid { - avatar = &row.Avatar.String - } - return msglayer.Identity{ - ID: row.ID, - Type: row.Type, - DisplayName: row.DisplayName, - Phones: phones, - Emails: emails, - Avatar: avatar, - Labels: labels, - Meta: meta, - } -} - -func (s *sqliteProvider) eventToTimelineItem(ctx context.Context, row *sqlc.Event) (msglayer.TimelineItem, error) { - participants, _ := s.q.GetEventParticipants(ctx, row.ID) - var meta map[string]any - json.Unmarshal([]byte(row.Meta), &meta) - return msglayer.TimelineItem{ - EventID: row.ID, - Type: row.Type, - Timestamp: row.Timestamp.UTC().Format(time.RFC3339), - Direction: row.Direction, - ContentSummary: row.ContentSummary.String, - Participants: participants, - Meta: meta, - }, nil -} - -func (s *sqliteProvider) eventsToTimelineItems(ctx context.Context, rows []*sqlc.Event) ([]msglayer.TimelineItem, error) { - items := make([]msglayer.TimelineItem, 0, len(rows)) - for _, row := range rows { - item, err := s.eventToTimelineItem(ctx, row) - if err != nil { - return nil, err - } - items = append(items, item) - } - return items, nil -} diff --git a/backend/internal/storage/sqlite_auth_session.go b/backend/internal/storage/sqlite_auth_session.go new file mode 100644 index 0000000..dceb13b --- /dev/null +++ b/backend/internal/storage/sqlite_auth_session.go @@ -0,0 +1,159 @@ +package storage + +import ( + "context" + "database/sql" + "encoding/json" + "fmt" + "strings" + + sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" +) + +func (s *sqliteProvider) CreateUser(ctx context.Context, user UserRecord) (UserRecord, error) { + roles, _ := json.Marshal(user.Roles) + buttons, _ := json.Marshal(user.Buttons) + err := s.q.CreateUser(ctx, &sqlc.CreateUserParams{ + ID: user.ID, + UserName: user.UserName, + Email: sql.NullString{String: user.Email, Valid: user.Email != ""}, + PasswordHash: user.PasswordHash, + PasswordSalt: user.PasswordSalt, + Roles: string(roles), + Buttons: string(buttons), + }) + if err != nil { + if strings.Contains(err.Error(), "UNIQUE") { + return UserRecord{}, fmt.Errorf("username already exists") + } + return UserRecord{}, err + } + return s.GetUser(ctx, user.ID) +} + +func (s *sqliteProvider) FindUserByUserName(ctx context.Context, userName string) (UserRecord, error) { + row, err := s.q.FindUserByUserName(ctx, userName) + if err != nil { + return UserRecord{}, fmt.Errorf("user not found") + } + return s.rowToUser(row), nil +} + +func (s *sqliteProvider) GetUser(ctx context.Context, userID string) (UserRecord, error) { + row, err := s.q.GetUser(ctx, userID) + if err != nil { + return UserRecord{}, fmt.Errorf("user not found") + } + return s.rowToUser(row), nil +} + +func (s *sqliteProvider) SaveRefreshToken(ctx context.Context, token RefreshTokenRecord) error { + return s.q.SaveRefreshToken(ctx, &sqlc.SaveRefreshTokenParams{ + ID: token.ID, + UserID: token.UserID, + TokenHash: token.TokenHash, + ParentID: sql.NullString{String: token.ParentID, Valid: token.ParentID != ""}, + ExpiresAt: token.ExpiresAt, + }) +} + +func (s *sqliteProvider) ConsumeRefreshToken(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + row, err := s.q.ConsumeRefreshToken(ctx, tokenHash) + if err != nil { + return RefreshTokenRecord{}, fmt.Errorf("refresh token not found or expired") + } + return RefreshTokenRecord{ + ID: row.ID, + UserID: row.UserID, + TokenHash: row.TokenHash, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + RevokedAt: row.RevokedAt.Time, + }, nil +} + +func (s *sqliteProvider) UpdateUserPasswordHash(ctx context.Context, userID, newHash, newSalt string) error { + return s.q.UpdateUserPasswordHash(ctx, &sqlc.UpdateUserPasswordHashParams{ + PasswordHash: newHash, + PasswordSalt: newSalt, + ID: userID, + }) +} + +func (s *sqliteProvider) FindAnyRefreshTokenByHash(ctx context.Context, tokenHash string) (RefreshTokenRecord, error) { + row, err := s.q.FindAnyRefreshTokenByHash(ctx, tokenHash) + if err != nil { + return RefreshTokenRecord{}, err + } + return s.rowToRefreshToken(row), nil +} + +func (s *sqliteProvider) RevokeRefreshTokenFamily(ctx context.Context, tokenID string) error { + return s.q.RevokeRefreshTokenFamily(ctx, tokenID) +} + +func (s *sqliteProvider) RevokeRefreshTokenByID(ctx context.Context, tokenID string) error { + return s.q.RevokeRefreshTokenByID(ctx, tokenID) +} + +func (s *sqliteProvider) CreateSession(ctx context.Context, rec SessionRecord) error { + return s.q.CreateSession(ctx, &sqlc.CreateSessionParams{ + ID: rec.ID, + UserID: rec.UserID, + RefreshTokenID: sql.NullString{String: rec.RefreshTokenID, Valid: rec.RefreshTokenID != ""}, + DeviceName: sql.NullString{String: rec.DeviceName, Valid: rec.DeviceName != ""}, + DeviceType: sql.NullString{String: rec.DeviceType, Valid: rec.DeviceType != ""}, + IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, + UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, + }) +} + +func (s *sqliteProvider) GetSession(ctx context.Context, sessionID string) (SessionRecord, error) { + row, err := s.q.GetSession(ctx, sessionID) + if err != nil { + return SessionRecord{}, err + } + return s.rowToSession(row), nil +} + +func (s *sqliteProvider) GetSessionByRefreshTokenID(ctx context.Context, refreshTokenID string) (SessionRecord, error) { + row, err := s.q.GetSessionByRefreshTokenID(ctx, sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}) + if err != nil { + return SessionRecord{}, err + } + return s.rowToSession(row), nil +} + +func (s *sqliteProvider) ListSessionsByUser(ctx context.Context, userID string) ([]SessionRecord, error) { + rows, err := s.q.ListSessionsByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]SessionRecord, 0, len(rows)) + for _, r := range rows { + items = append(items, s.rowToSession(r)) + } + return items, nil +} + +func (s *sqliteProvider) RevokeSession(ctx context.Context, sessionID string) error { + return s.q.RevokeSession(ctx, sessionID) +} + +func (s *sqliteProvider) RevokeOtherSessions(ctx context.Context, userID, currentSessionID string) error { + return s.q.RevokeOtherSessions(ctx, &sqlc.RevokeOtherSessionsParams{ + UserID: userID, + ID: currentSessionID, + }) +} + +func (s *sqliteProvider) UpdateSessionLastSeen(ctx context.Context, sessionID string) error { + return s.q.UpdateSessionLastSeen(ctx, sessionID) +} + +func (s *sqliteProvider) UpdateSessionRefreshToken(ctx context.Context, sessionID, refreshTokenID string) error { + return s.q.UpdateSessionRefreshToken(ctx, &sqlc.UpdateSessionRefreshTokenParams{ + RefreshTokenID: sql.NullString{String: refreshTokenID, Valid: refreshTokenID != ""}, + ID: sessionID, + }) +} diff --git a/backend/internal/storage/sqlite_imports_query.go b/backend/internal/storage/sqlite_imports_query.go new file mode 100644 index 0000000..37c9e4f --- /dev/null +++ b/backend/internal/storage/sqlite_imports_query.go @@ -0,0 +1,279 @@ +package storage + +import ( + "context" + "database/sql" + "encoding/json" + "fmt" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" +) + +func (s *sqliteProvider) Import(ctx context.Context, userID, sourcePath string, export msglayer.RootExport, raw []byte) (string, error) { + tx, err := s.db.BeginTx(ctx, nil) + if err != nil { + return "", err + } + defer tx.Rollback() + + qtx := s.q.WithTx(tx) + + importID := fmt.Sprintf("import_%d", time.Now().UnixNano()) + if err := qtx.CreateImport(ctx, &sqlc.CreateImportParams{ + ID: importID, + UserID: userID, + SchemaVersion: export.Version, + IsDelta: false, + SourcePath: sql.NullString{String: sourcePath, Valid: sourcePath != ""}, + EventCount: int64(len(export.Events)), + IdentityCount: int64(len(export.Identities)), + RawJson: string(raw), + }); err != nil { + return "", fmt.Errorf("create import: %w", err) + } + + for _, identity := range export.Identities { + phones, _ := json.Marshal(identity.Phones) + emails, _ := json.Marshal(identity.Emails) + labels, _ := json.Marshal(identity.Labels) + meta, _ := json.Marshal(identity.Meta) + var avatar sql.NullString + if identity.Avatar != nil { + avatar = sql.NullString{String: *identity.Avatar, Valid: true} + } + if err := qtx.CreateIdentity(ctx, &sqlc.CreateIdentityParams{ + ID: identity.ID, + UserID: userID, + Type: identity.Type, + DisplayName: identity.DisplayName, + Phones: string(phones), + Emails: string(emails), + Avatar: avatar, + Labels: string(labels), + Meta: string(meta), + }); err != nil { + return "", fmt.Errorf("create identity %s: %w", identity.ID, err) + } + } + + for _, event := range export.Events { + contentJSON, _ := json.Marshal(event.Content) + metaJSON, _ := json.Marshal(event.Meta) + ts, _ := time.Parse(time.RFC3339, event.Timestamp) + summary := summarizeEvent(event) + + if err := qtx.CreateEvent(ctx, &sqlc.CreateEventParams{ + ID: event.ID, + UserID: userID, + ImportID: sql.NullString{String: importID, Valid: true}, + Type: event.Type, + Timestamp: ts, + Direction: event.Direction, + ContentSummary: sql.NullString{String: summary, Valid: summary != ""}, + Content: string(contentJSON), + Meta: string(metaJSON), + }); err != nil { + return "", fmt.Errorf("create event %s: %w", event.ID, err) + } + + for _, participant := range event.Participants { + if err := qtx.InsertEventParticipant(ctx, &sqlc.InsertEventParticipantParams{ + EventID: event.ID, + IdentityID: participant, + }); err != nil { + return "", fmt.Errorf("insert participant %s: %w", participant, err) + } + } + + for _, rel := range event.Relations { + if err := qtx.CreateRelation(ctx, &sqlc.CreateRelationParams{ + ID: fmt.Sprintf("rel_%s_%s_%d", event.ID, rel.Type, time.Now().UnixNano()), + EventID: event.ID, + Type: rel.Type, + Target: rel.Target, + }); err != nil { + return "", fmt.Errorf("create relation: %w", err) + } + } + } + + return importID, tx.Commit() +} + +func (s *sqliteProvider) ListImports(ctx context.Context, userID string) ([]ImportSummary, error) { + rows, err := s.q.ListImportsByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]ImportSummary, 0, len(rows)) + for _, r := range rows { + items = append(items, ImportSummary{ + ID: r.ID, + UserID: r.UserID, + SchemaVersion: r.SchemaVersion, + ImportedAt: r.ImportedAt, + SourcePath: r.SourcePath.String, + EventCount: int(r.EventCount), + IdentityCount: int(r.IdentityCount), + }) + } + return items, nil +} + +func (s *sqliteProvider) ExportImport(ctx context.Context, userID, importID string) ([]byte, error) { + if importID == "" { + var err error + importID, err = s.q.LatestImportID(ctx, userID) + if err != nil { + return nil, fmt.Errorf("no imports found") + } + } + raw, err := s.q.ExportImport(ctx, &sqlc.ExportImportParams{ID: importID, UserID: userID}) + if err != nil { + return nil, fmt.Errorf("import not found: %s", importID) + } + return []byte(raw), nil +} + +func (s *sqliteProvider) LatestImportID(ctx context.Context, userID string) (string, error) { + id, err := s.q.LatestImportID(ctx, userID) + if err != nil { + return "", fmt.Errorf("no imports found") + } + return id, nil +} + +func (s *sqliteProvider) GetEvent(ctx context.Context, userID, id string) (msglayer.TimelineItem, error) { + row, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: id, UserID: userID}) + if err != nil { + return msglayer.TimelineItem{}, fmt.Errorf("event not found: %s", id) + } + return s.eventToTimelineItem(ctx, row) +} + +func (s *sqliteProvider) ListEvents(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + rows, err := s.q.ListEvents(ctx, &sqlc.ListEventsParams{ + UserID: params.UserID, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +func (s *sqliteProvider) Search(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + if params.Keyword == "" { + return nil, nil + } + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + rows, err := s.q.SearchEvents(ctx, &sqlc.SearchEventsParams{ + UserID: params.UserID, + SearchTerm: sql.NullString{String: params.Keyword, Valid: true}, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +func (s *sqliteProvider) Timeline(ctx context.Context, params msglayer.SearchParams) ([]msglayer.TimelineItem, error) { + typeFilter := "" + if params.Type != "" { + typeFilter = params.Type + } + limit := int64(50) + if params.Limit > 0 { + limit = int64(params.Limit) + } + + if params.Participant != "" { + rows, err := s.q.TimelineEventsByParticipant(ctx, &sqlc.TimelineEventsByParticipantParams{ + UserID: params.UserID, + Type: typeFilter, + Participant: sql.NullString{String: params.Participant, Valid: true}, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) + } + + rows, err := s.q.TimelineEvents(ctx, &sqlc.TimelineEventsParams{ + UserID: params.UserID, + Type: typeFilter, + Limit: limit, + Offset: int64(params.Offset), + }) + if err != nil { + return nil, err + } + return s.eventsToTimelineItems(ctx, rows) +} + +func (s *sqliteProvider) ListIdentities(ctx context.Context, userID string) ([]msglayer.Identity, error) { + rows, err := s.q.ListIdentities(ctx, &sqlc.ListIdentitiesParams{UserID: userID, Type: ""}) + if err != nil { + return nil, err + } + items := make([]msglayer.Identity, 0, len(rows)) + for _, r := range rows { + items = append(items, s.rowToIdentity(r)) + } + return items, nil +} + +func (s *sqliteProvider) GetIdentity(ctx context.Context, userID, id string) (msglayer.Identity, error) { + row, err := s.q.GetIdentity(ctx, &sqlc.GetIdentityParams{ID: id, UserID: userID}) + if err != nil { + return msglayer.Identity{}, fmt.Errorf("identity not found: %s", id) + } + return s.rowToIdentity(row), nil +} + +func (s *sqliteProvider) GetThread(ctx context.Context, userID, threadID string) ([]msglayer.TimelineItem, error) { + relations, err := s.q.ListRelationsByTarget(ctx, &sqlc.ListRelationsByTargetParams{ + Type: "same_thread", + Target: threadID, + }) + if err != nil { + return nil, err + } + var items []msglayer.TimelineItem + for _, rel := range relations { + event, err := s.q.GetEvent(ctx, &sqlc.GetEventParams{ID: rel.EventID, UserID: userID}) + if err != nil { + continue + } + item, err := s.eventToTimelineItem(ctx, event) + if err != nil { + continue + } + items = append(items, item) + } + return items, nil +} diff --git a/backend/internal/storage/sqlite_setup_passkey.go b/backend/internal/storage/sqlite_setup_passkey.go new file mode 100644 index 0000000..aacc15e --- /dev/null +++ b/backend/internal/storage/sqlite_setup_passkey.go @@ -0,0 +1,186 @@ +package storage + +import ( + "context" + "database/sql" + "time" + + sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" +) + +func (s *sqliteProvider) GetSetupStatus(ctx context.Context) (SetupStatus, error) { + row, err := s.q.GetSetupStatus(ctx) + if err != nil { + hasAdmin, _ := s.q.HasAdminUser(ctx) + return SetupStatus{Initialized: hasAdmin, DatabaseType: "sqlite"}, nil + } + return SetupStatus{ + Initialized: true, + Version: row.Version, + DatabaseType: "sqlite", + }, nil +} + +func (s *sqliteProvider) SaveSetup(ctx context.Context, setup SetupRecord) error { + ts, _ := time.Parse(time.RFC3339, setup.InitializedAt) + if ts.IsZero() { + ts = time.Now().UTC() + } + return s.q.SaveSetup(ctx, &sqlc.SaveSetupParams{ + ID: setup.ID, + Version: setup.Version, + InitializedAt: ts, + UsageMode: sql.NullString{String: setup.UsageMode, Valid: setup.UsageMode != ""}, + }) +} + +func (s *sqliteProvider) HasAdminUser(ctx context.Context) (bool, error) { + return s.q.HasAdminUser(ctx) +} + +func (s *sqliteProvider) CreateAuditLog(ctx context.Context, rec AuditRecord) error { + return s.q.CreateAuditLog(ctx, &sqlc.CreateAuditLogParams{ + ID: rec.ID, + UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, + Action: rec.Action, + IpAddress: sql.NullString{String: rec.IPAddress, Valid: rec.IPAddress != ""}, + UserAgent: sql.NullString{String: rec.UserAgent, Valid: rec.UserAgent != ""}, + Detail: sql.NullString{String: rec.Detail, Valid: rec.Detail != ""}, + }) +} + +func (s *sqliteProvider) ListAuditLogs(ctx context.Context, userID, action string, limit, offset int) ([]AuditRecord, error) { + rows, err := s.q.GetAuditLogs(ctx, &sqlc.GetAuditLogsParams{ + UserID: userID, + Action: action, + Limit: int64(limit), + Offset: int64(offset), + }) + if err != nil { + return nil, err + } + items := make([]AuditRecord, 0, len(rows)) + for _, r := range rows { + items = append(items, AuditRecord{ + ID: r.ID, + UserID: r.UserID.String, + Action: r.Action, + IPAddress: r.IpAddress.String, + UserAgent: r.UserAgent.String, + Detail: r.Detail.String, + CreatedAt: r.CreatedAt, + }) + } + return items, nil +} + +func (s *sqliteProvider) CountAuditLogs(ctx context.Context, userID, action string) (int, error) { + count, err := s.q.CountAuditLogs(ctx, &sqlc.CountAuditLogsParams{ + UserID: userID, + Action: action, + }) + return int(count), err +} + +func (s *sqliteProvider) CreatePasskeyCredential(ctx context.Context, rec PasskeyCredential) error { + return s.q.CreatePasskeyCredential(ctx, &sqlc.CreatePasskeyCredentialParams{ + ID: rec.ID, + UserID: rec.UserID, + CredentialID: rec.CredentialID, + PublicKey: rec.PublicKey, + AttestationType: rec.AttestationType, + Aaguid: rec.AAGUID, + SignCount: int64(rec.SignCount), + Transports: rec.Transports, + Name: rec.Name, + }) +} + +func (s *sqliteProvider) GetPasskeyByCredentialID(ctx context.Context, credentialID string) (PasskeyCredential, error) { + row, err := s.q.GetPasskeyByCredentialID(ctx, credentialID) + if err != nil { + return PasskeyCredential{}, err + } + return s.rowToPasskey(row), nil +} + +func (s *sqliteProvider) ListPasskeysByUser(ctx context.Context, userID string) ([]PasskeyCredential, error) { + rows, err := s.q.ListPasskeysByUser(ctx, userID) + if err != nil { + return nil, err + } + items := make([]PasskeyCredential, 0, len(rows)) + for _, r := range rows { + items = append(items, s.rowToPasskey(r)) + } + return items, nil +} + +func (s *sqliteProvider) UpdatePasskeyLastUsed(ctx context.Context, id string, signCount uint32) error { + return s.q.UpdatePasskeyLastUsed(ctx, &sqlc.UpdatePasskeyLastUsedParams{ + SignCount: int64(signCount), + ID: id, + }) +} + +func (s *sqliteProvider) DeletePasskey(ctx context.Context, id, userID string) error { + return s.q.DeletePasskey(ctx, &sqlc.DeletePasskeyParams{ID: id, UserID: userID}) +} + +func (s *sqliteProvider) CreateChallenge(ctx context.Context, rec ChallengeRecord) error { + return s.q.CreateChallenge(ctx, &sqlc.CreateChallengeParams{ + ID: rec.ID, + Challenge: rec.Challenge, + UserID: sql.NullString{String: rec.UserID, Valid: rec.UserID != ""}, + FlowType: rec.FlowType, + ExpiresAt: rec.ExpiresAt, + }) +} + +func (s *sqliteProvider) GetChallenge(ctx context.Context, id string) (ChallengeRecord, error) { + row, err := s.q.GetChallenge(ctx, id) + if err != nil { + return ChallengeRecord{}, err + } + return ChallengeRecord{ + ID: row.ID, + Challenge: row.Challenge, + UserID: row.UserID.String, + FlowType: row.FlowType, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + }, nil +} + +func (s *sqliteProvider) DeleteChallenge(ctx context.Context, id string) error { + return s.q.DeleteChallenge(ctx, id) +} + +func (s *sqliteProvider) CreateAuthMethod(ctx context.Context, rec AuthMethodRecord) error { + return s.q.CreateAuthMethod(ctx, &sqlc.CreateAuthMethodParams{ + ID: rec.ID, + UserID: rec.UserID, + ProviderType: rec.ProviderType, + ProviderUserID: rec.ProviderUserID, + Metadata: rec.Metadata, + }) +} + +func (s *sqliteProvider) GetAuthMethodByProvider(ctx context.Context, providerType, providerUserID string) (AuthMethodRecord, error) { + row, err := s.q.GetAuthMethodByProvider(ctx, &sqlc.GetAuthMethodByProviderParams{ + ProviderType: providerType, + ProviderUserID: providerUserID, + }) + if err != nil { + return AuthMethodRecord{}, err + } + return AuthMethodRecord{ + ID: row.ID, + UserID: row.UserID, + ProviderType: row.ProviderType, + ProviderUserID: row.ProviderUserID, + Metadata: row.Metadata, + CreatedAt: row.CreatedAt, + UpdatedAt: row.UpdatedAt, + }, nil +} diff --git a/backend/internal/storage/sqlite_support.go b/backend/internal/storage/sqlite_support.go new file mode 100644 index 0000000..9b047a2 --- /dev/null +++ b/backend/internal/storage/sqlite_support.go @@ -0,0 +1,119 @@ +package storage + +import ( + "context" + "encoding/json" + "time" + + "github.com/IsKenKenYa/Commory/backend/internal/msglayer" + sqlc "github.com/IsKenKenYa/Commory/backend/internal/storage/sqlc/gen" +) + +func (s *sqliteProvider) rowToUser(row *sqlc.User) UserRecord { + var roles, buttons []string + json.Unmarshal([]byte(row.Roles), &roles) + json.Unmarshal([]byte(row.Buttons), &buttons) + return UserRecord{ + ID: row.ID, + UserName: row.UserName, + Email: row.Email.String, + PasswordHash: row.PasswordHash, + PasswordSalt: row.PasswordSalt, + Roles: roles, + Buttons: buttons, + CreatedAt: row.CreatedAt, + UpdatedAt: row.UpdatedAt, + } +} + +func (s *sqliteProvider) rowToRefreshToken(row *sqlc.RefreshToken) RefreshTokenRecord { + return RefreshTokenRecord{ + ID: row.ID, + UserID: row.UserID, + TokenHash: row.TokenHash, + ParentID: row.ParentID.String, + ExpiresAt: row.ExpiresAt, + CreatedAt: row.CreatedAt, + RevokedAt: row.RevokedAt.Time, + } +} + +func (s *sqliteProvider) rowToSession(row *sqlc.Session) SessionRecord { + return SessionRecord{ + ID: row.ID, + UserID: row.UserID, + RefreshTokenID: row.RefreshTokenID.String, + DeviceName: row.DeviceName.String, + DeviceType: row.DeviceType.String, + IPAddress: row.IpAddress.String, + UserAgent: row.UserAgent.String, + CreatedAt: row.CreatedAt, + LastSeenAt: row.LastSeenAt, + } +} + +func (s *sqliteProvider) rowToPasskey(row *sqlc.PasskeyCredential) PasskeyCredential { + return PasskeyCredential{ + ID: row.ID, + UserID: row.UserID, + CredentialID: row.CredentialID, + PublicKey: row.PublicKey, + AttestationType: row.AttestationType, + AAGUID: row.Aaguid, + SignCount: uint32(row.SignCount), + Transports: row.Transports, + Name: row.Name, + LastUsedAt: row.LastUsedAt.Time, + CreatedAt: row.CreatedAt, + } +} + +func (s *sqliteProvider) rowToIdentity(row *sqlc.Identity) msglayer.Identity { + var phones, emails, labels []string + var meta map[string]any + json.Unmarshal([]byte(row.Phones), &phones) + json.Unmarshal([]byte(row.Emails), &emails) + json.Unmarshal([]byte(row.Labels), &labels) + json.Unmarshal([]byte(row.Meta), &meta) + var avatar *string + if row.Avatar.Valid { + avatar = &row.Avatar.String + } + return msglayer.Identity{ + ID: row.ID, + Type: row.Type, + DisplayName: row.DisplayName, + Phones: phones, + Emails: emails, + Avatar: avatar, + Labels: labels, + Meta: meta, + } +} + +func (s *sqliteProvider) eventToTimelineItem(ctx context.Context, row *sqlc.Event) (msglayer.TimelineItem, error) { + participants, _ := s.q.GetEventParticipants(ctx, row.ID) + var meta map[string]any + json.Unmarshal([]byte(row.Meta), &meta) + return msglayer.TimelineItem{ + EventID: row.ID, + Type: row.Type, + Timestamp: row.Timestamp.UTC().Format(time.RFC3339), + Direction: row.Direction, + ContentSummary: row.ContentSummary.String, + Participants: participants, + Meta: meta, + }, nil +} + +func (s *sqliteProvider) eventsToTimelineItems(ctx context.Context, rows []*sqlc.Event) ([]msglayer.TimelineItem, error) { + items := make([]msglayer.TimelineItem, 0, len(rows)) + for _, row := range rows { + item, err := s.eventToTimelineItem(ctx, row) + if err != nil { + return nil, err + } + items = append(items, item) + } + return items, nil +} diff --git a/docs/engineering-standards.md b/docs/engineering-standards.md index 6cc0f22..d31e72c 100644 --- a/docs/engineering-standards.md +++ b/docs/engineering-standards.md @@ -98,6 +98,18 @@ CI 或 review 中使用 `bash scripts/sync-agent-skills.sh --check` 确认 `.cla - 当任务同时跨 Android、Backend、Web 时,优先拆成能独立验证的纵向切片:规则/文档、backend foundation、client parity、UI/运营面。 - 如果某一切片尚未验证通过,不要继续向下堆叠新的跨边界能力。 +## 文件规模与拆分边界 + +- 单文件只承载一个 feature slice 或一个清晰层级职责。不要把多个独立能力继续堆进 `server.go`、`*service.go`、storage provider 实现文件或 mega test file。 +- 新增代码默认先并入现有同职责文件;仅在跨职责、逼近阈值或能明显提升审阅边界时拆分。 +- 不要为了“拆分”制造 1 函数 / 1 类型微文件。新增紧耦合 helper 若总量低于约 `80` 行,默认并入同 feature 文件。 +- 手写业务源码进入重构警戒线为 `350` 行;超过后默认应拆分或在交付说明中给出简短理由。 +- 手写业务源码硬上限为 `500` 行;现有治理脚本默认对当前变更集中的超线文件直接失败,避免把历史超线文件与本轮修复强绑定。 +- 生成代码、schema、fixture、资源文件不纳入硬失败,但复杂度报告仍需暴露 `1000+` 文件,便于后续治理。 +- handler 层按认证、导入、查询、会话、审计等能力分组;auth 层按 orchestration、token、password、audit/rate-limit 分组;storage provider 按 import/query、auth/session、setup/passkey/support 分组;测试按行为域分组。 +- 跨 Android、Backend、Web 的改动必须同步评估契约、测试、文档和部署影响,并默认按纵向切片推进:先修契约与基础层,再补客户端,再补 UI/治理,避免单个不可审阅的大 diff。 +- 长期规则变更必须同步更新 `AGENTS.md` 与 `CLAUDE.md`;三处文档内容可详略不同,但关键硬限制必须一致。 + ## 日志与隐私 - 日志可以标识 subsystem 和 operation context。 @@ -125,6 +137,9 @@ bash scripts/sync-agent-skills.sh --check docker compose config ``` +- `bash scripts/check-repo-hygiene.sh` 会对当前变更集中的手写 `.go`、`.kt`、`.java`、`.ts`、`.tsx`、`.vue` 源码执行 `500` 行硬门禁。 +- `bash scripts/report-loc-complexity.sh` 会输出手写源码最大文件列表、`350+` 警戒清单,以及 `1000+` 的 generated/schema/resource 报告。 + ## 发布检查 - Mobile API contract 仍与 `docs/mobile-api.md` 一致。 diff --git a/scripts/check-repo-hygiene.sh b/scripts/check-repo-hygiene.sh index 6ab4c6c..62945d5 100644 --- a/scripts/check-repo-hygiene.sh +++ b/scripts/check-repo-hygiene.sh @@ -1,6 +1,54 @@ #!/usr/bin/env bash set -euo pipefail +is_handwritten_source() { + local path="$1" + case "$path" in + backend/*|android/*|web/*) + ;; + *) + return 1 + ;; + esac + + case "$path" in + *.go|*.kt|*.java|*.ts|*.tsx|*.vue) + ;; + *) + return 1 + ;; + esac + + case "$path" in + */build/*|*/.gradle/*|*/node_modules/*|*/dist/*|*/coverage/*|*/sqlc/gen/*|*/schema/*|*/examples/*|*/fixture/*|*/fixtures/*) + return 1 + ;; + esac + + return 0 +} + +resolve_compare_base() { + if [[ -n "${GITHUB_BASE_REF:-}" ]] && git show-ref --verify --quiet "refs/remotes/origin/${GITHUB_BASE_REF}"; then + echo "refs/remotes/origin/${GITHUB_BASE_REF}" + return 0 + fi + + local origin_head + origin_head="$(git symbolic-ref -q --short refs/remotes/origin/HEAD 2>/dev/null || true)" + if [[ -n "$origin_head" ]]; then + echo "$origin_head" + return 0 + fi + + if git show-ref --verify --quiet refs/heads/main; then + echo "main" + return 0 + fi + + return 1 +} + tracked_generated_candidates="$( git ls-files \ '.DS_Store' \ @@ -45,4 +93,36 @@ if [[ -n "$invalid_skill_docs" ]]; then exit 1 fi +tmp_candidates="$(mktemp)" +trap 'rm -f "$tmp_candidates"' EXIT + +compare_base="$(resolve_compare_base || true)" +if [[ -n "$compare_base" ]]; then + merge_base="$(git merge-base HEAD "$compare_base" 2>/dev/null || true)" + if [[ -n "$merge_base" ]]; then + git diff --name-only --diff-filter=ACMR "$merge_base"...HEAD >> "$tmp_candidates" + fi +fi + +git diff --name-only --diff-filter=ACMR >> "$tmp_candidates" +git diff --cached --name-only --diff-filter=ACMR >> "$tmp_candidates" +git ls-files --others --exclude-standard >> "$tmp_candidates" + +oversized_sources="" +while IFS= read -r path; do + [[ -n "$path" ]] || continue + is_handwritten_source "$path" || continue + [[ -f "$path" ]] || continue + lines="$(wc -l < "$path")" + if (( lines > 500 )); then + oversized_sources+="${lines} ${path}"$'\n' + fi +done < <(sort -u "$tmp_candidates") + +if [[ -n "$oversized_sources" ]]; then + echo "Changed hand-written source files exceeded the 500-line hard limit:" + echo "$oversized_sources" | sort -nr + exit 1 +fi + echo "Repo hygiene check passed." diff --git a/scripts/report-loc-complexity.sh b/scripts/report-loc-complexity.sh index 58a3fd6..bb76657 100644 --- a/scripts/report-loc-complexity.sh +++ b/scripts/report-loc-complexity.sh @@ -1,14 +1,55 @@ #!/usr/bin/env bash set -euo pipefail -echo "Largest source files by line count:" -find android backend msglayer -type f \( -name '*.kt' -o -name '*.go' -o -name '*.json' -o -name '*.xml' \) \ +tmp_handwritten="$(mktemp)" +tmp_generated="$(mktemp)" +trap 'rm -f "$tmp_handwritten" "$tmp_generated"' EXIT + +find backend android web -type f \( \ + -name '*.go' -o \ + -name '*.kt' -o \ + -name '*.java' -o \ + -name '*.ts' -o \ + -name '*.tsx' -o \ + -name '*.vue' \ +\) \ -not -path '*/build/*' \ -not -path '*/.gradle/*' \ + -not -path '*/node_modules/*' \ + -not -path '*/dist/*' \ + -not -path '*/coverage/*' \ + -not -path '*/sqlc/gen/*' \ + -not -path '*/schema/*' \ + -not -path '*/examples/*' \ + -not -path '*/fixture/*' \ + -not -path '*/fixtures/*' \ -print0 | xargs -0 wc -l | - sort -nr | - head -30 + awk '$2 != "total"' | + sort -nr > "$tmp_handwritten" + +find android backend web msglayer -type f \( \ + -name '*.json' -o \ + -name '*.xml' -o \ + -name '*.sql' \ +\) \ + -not -path '*/build/*' \ + -not -path '*/.gradle/*' \ + -not -path '*/node_modules/*' \ + -not -path '*/dist/*' \ + -not -path '*/coverage/*' \ + -print0 | + xargs -0 wc -l | + awk '$2 != "total"' | + sort -nr > "$tmp_generated" + +echo "Largest hand-written source files by line count:" +head -30 "$tmp_handwritten" + +echo +echo "Hand-written source warning threshold: 350 lines. Hard limit: 500 lines." +awk '$1 > 350 { print }' "$tmp_handwritten" || true echo -echo "Large file review threshold: 500 lines for app/source files, 1000 lines for generated schemas/examples." +echo "Generated/schema/resource review threshold: 1000 lines." +awk '$1 > 1000 { print }' "$tmp_generated" || true From 1c9f107ea51134511bd659d070ad8fb0b8406a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=83=E5=95=83MacMini?= Date: Sat, 16 May 2026 16:41:43 +0800 Subject: [PATCH 17/20] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E5=A4=9AAI?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=94=AF=E6=8C=81=E7=9A=84=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E6=96=87=E6=A1=A3=E4=B8=8E=E8=B0=83=E8=AF=95=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了针对不同AI客户端的技能配置文件,包括TDD相关指南、调试循环脚本以及issue跟踪文档,覆盖了.grill-me、.zoom-out、.handoff等多个技能场景,同时补充了mock测试、接口设计等TDD实践文档 --- .agents/skills/caveman/SKILL.md | 49 +++++ .agents/skills/diagnose/SKILL.md | 117 ++++++++++++ .../diagnose/scripts/hitl-loop.template.sh | 41 +++++ .agents/skills/grill-me/SKILL.md | 10 ++ .agents/skills/grill-with-docs/ADR-FORMAT.md | 47 +++++ .../skills/grill-with-docs/CONTEXT-FORMAT.md | 77 ++++++++ .agents/skills/grill-with-docs/SKILL.md | 88 +++++++++ .agents/skills/handoff/SKILL.md | 13 ++ .../DEEPENING.md | 37 ++++ .../INTERFACE-DESIGN.md | 44 +++++ .../improve-codebase-architecture/LANGUAGE.md | 53 ++++++ .../improve-codebase-architecture/SKILL.md | 71 ++++++++ .agents/skills/prototype/LOGIC.md | 79 ++++++++ .agents/skills/prototype/SKILL.md | 30 ++++ .agents/skills/prototype/UI.md | 112 ++++++++++++ .../skills/setup-matt-pocock-skills/SKILL.md | 121 +++++++++++++ .../skills/setup-matt-pocock-skills/domain.md | 51 ++++++ .../issue-tracker-github.md | 22 +++ .../issue-tracker-gitlab.md | 23 +++ .../issue-tracker-local.md | 19 ++ .../setup-matt-pocock-skills/triage-labels.md | 15 ++ .agents/skills/tdd/SKILL.md | 109 ++++++++++++ .agents/skills/tdd/deep-modules.md | 33 ++++ .agents/skills/tdd/interface-design.md | 31 ++++ .agents/skills/tdd/mocking.md | 59 ++++++ .agents/skills/tdd/refactoring.md | 10 ++ .agents/skills/tdd/tests.md | 61 +++++++ .agents/skills/to-issues/SKILL.md | 83 +++++++++ .agents/skills/to-prd/SKILL.md | 76 ++++++++ .agents/skills/triage/AGENT-BRIEF.md | 168 ++++++++++++++++++ .agents/skills/triage/OUT-OF-SCOPE.md | 101 +++++++++++ .agents/skills/triage/SKILL.md | 103 +++++++++++ .agents/skills/write-a-skill/SKILL.md | 117 ++++++++++++ .agents/skills/zoom-out/SKILL.md | 7 + .claude/skills/caveman/SKILL.md | 49 +++++ .claude/skills/diagnose/SKILL.md | 117 ++++++++++++ .../diagnose/scripts/hitl-loop.template.sh | 41 +++++ .claude/skills/grill-me/SKILL.md | 10 ++ .claude/skills/grill-with-docs/ADR-FORMAT.md | 47 +++++ .../skills/grill-with-docs/CONTEXT-FORMAT.md | 77 ++++++++ .claude/skills/grill-with-docs/SKILL.md | 88 +++++++++ .claude/skills/handoff/SKILL.md | 13 ++ .../DEEPENING.md | 37 ++++ .../INTERFACE-DESIGN.md | 44 +++++ .../improve-codebase-architecture/LANGUAGE.md | 53 ++++++ .../improve-codebase-architecture/SKILL.md | 71 ++++++++ .claude/skills/prototype/LOGIC.md | 79 ++++++++ .claude/skills/prototype/SKILL.md | 30 ++++ .claude/skills/prototype/UI.md | 112 ++++++++++++ .../skills/setup-matt-pocock-skills/SKILL.md | 121 +++++++++++++ .../skills/setup-matt-pocock-skills/domain.md | 51 ++++++ .../issue-tracker-github.md | 22 +++ .../issue-tracker-gitlab.md | 23 +++ .../issue-tracker-local.md | 19 ++ .../setup-matt-pocock-skills/triage-labels.md | 15 ++ .claude/skills/tdd/SKILL.md | 109 ++++++++++++ .claude/skills/tdd/deep-modules.md | 33 ++++ .claude/skills/tdd/interface-design.md | 31 ++++ .claude/skills/tdd/mocking.md | 59 ++++++ .claude/skills/tdd/refactoring.md | 10 ++ .claude/skills/tdd/tests.md | 61 +++++++ .claude/skills/to-issues/SKILL.md | 83 +++++++++ .claude/skills/to-prd/SKILL.md | 76 ++++++++ .claude/skills/triage/AGENT-BRIEF.md | 168 ++++++++++++++++++ .claude/skills/triage/OUT-OF-SCOPE.md | 101 +++++++++++ .claude/skills/triage/SKILL.md | 103 +++++++++++ .claude/skills/write-a-skill/SKILL.md | 117 ++++++++++++ .claude/skills/zoom-out/SKILL.md | 7 + .kilocode/skills/caveman/SKILL.md | 49 +++++ .kilocode/skills/diagnose/SKILL.md | 117 ++++++++++++ .../diagnose/scripts/hitl-loop.template.sh | 41 +++++ .kilocode/skills/grill-me/SKILL.md | 10 ++ .../skills/grill-with-docs/ADR-FORMAT.md | 47 +++++ .../skills/grill-with-docs/CONTEXT-FORMAT.md | 77 ++++++++ .kilocode/skills/grill-with-docs/SKILL.md | 88 +++++++++ .kilocode/skills/handoff/SKILL.md | 13 ++ .../DEEPENING.md | 37 ++++ .../INTERFACE-DESIGN.md | 44 +++++ .../improve-codebase-architecture/LANGUAGE.md | 53 ++++++ .../improve-codebase-architecture/SKILL.md | 71 ++++++++ .kilocode/skills/prototype/LOGIC.md | 79 ++++++++ .kilocode/skills/prototype/SKILL.md | 30 ++++ .kilocode/skills/prototype/UI.md | 112 ++++++++++++ .../skills/setup-matt-pocock-skills/SKILL.md | 121 +++++++++++++ .../skills/setup-matt-pocock-skills/domain.md | 51 ++++++ .../issue-tracker-github.md | 22 +++ .../issue-tracker-gitlab.md | 23 +++ .../issue-tracker-local.md | 19 ++ .../setup-matt-pocock-skills/triage-labels.md | 15 ++ .kilocode/skills/tdd/SKILL.md | 109 ++++++++++++ .kilocode/skills/tdd/deep-modules.md | 33 ++++ .kilocode/skills/tdd/interface-design.md | 31 ++++ .kilocode/skills/tdd/mocking.md | 59 ++++++ .kilocode/skills/tdd/refactoring.md | 10 ++ .kilocode/skills/tdd/tests.md | 61 +++++++ .kilocode/skills/to-issues/SKILL.md | 83 +++++++++ .kilocode/skills/to-prd/SKILL.md | 76 ++++++++ .kilocode/skills/triage/AGENT-BRIEF.md | 168 ++++++++++++++++++ .kilocode/skills/triage/OUT-OF-SCOPE.md | 101 +++++++++++ .kilocode/skills/triage/SKILL.md | 103 +++++++++++ .kilocode/skills/write-a-skill/SKILL.md | 117 ++++++++++++ .kilocode/skills/zoom-out/SKILL.md | 7 + .kiro/skills/caveman/SKILL.md | 49 +++++ .kiro/skills/diagnose/SKILL.md | 117 ++++++++++++ .../diagnose/scripts/hitl-loop.template.sh | 41 +++++ .kiro/skills/grill-me/SKILL.md | 10 ++ .kiro/skills/grill-with-docs/ADR-FORMAT.md | 47 +++++ .../skills/grill-with-docs/CONTEXT-FORMAT.md | 77 ++++++++ .kiro/skills/grill-with-docs/SKILL.md | 88 +++++++++ .kiro/skills/handoff/SKILL.md | 13 ++ .../DEEPENING.md | 37 ++++ .../INTERFACE-DESIGN.md | 44 +++++ .../improve-codebase-architecture/LANGUAGE.md | 53 ++++++ .../improve-codebase-architecture/SKILL.md | 71 ++++++++ .kiro/skills/prototype/LOGIC.md | 79 ++++++++ .kiro/skills/prototype/SKILL.md | 30 ++++ .kiro/skills/prototype/UI.md | 112 ++++++++++++ .../skills/setup-matt-pocock-skills/SKILL.md | 121 +++++++++++++ .../skills/setup-matt-pocock-skills/domain.md | 51 ++++++ .../issue-tracker-github.md | 22 +++ .../issue-tracker-gitlab.md | 23 +++ .../issue-tracker-local.md | 19 ++ .../setup-matt-pocock-skills/triage-labels.md | 15 ++ .kiro/skills/tdd/SKILL.md | 109 ++++++++++++ .kiro/skills/tdd/deep-modules.md | 33 ++++ .kiro/skills/tdd/interface-design.md | 31 ++++ .kiro/skills/tdd/mocking.md | 59 ++++++ .kiro/skills/tdd/refactoring.md | 10 ++ .kiro/skills/tdd/tests.md | 61 +++++++ .kiro/skills/to-issues/SKILL.md | 83 +++++++++ .kiro/skills/to-prd/SKILL.md | 76 ++++++++ .kiro/skills/triage/AGENT-BRIEF.md | 168 ++++++++++++++++++ .kiro/skills/triage/OUT-OF-SCOPE.md | 101 +++++++++++ .kiro/skills/triage/SKILL.md | 103 +++++++++++ .kiro/skills/write-a-skill/SKILL.md | 117 ++++++++++++ .kiro/skills/zoom-out/SKILL.md | 7 + .windsurf/skills/caveman/SKILL.md | 49 +++++ .windsurf/skills/diagnose/SKILL.md | 117 ++++++++++++ .../diagnose/scripts/hitl-loop.template.sh | 41 +++++ .windsurf/skills/grill-me/SKILL.md | 10 ++ .../skills/grill-with-docs/ADR-FORMAT.md | 47 +++++ .../skills/grill-with-docs/CONTEXT-FORMAT.md | 77 ++++++++ .windsurf/skills/grill-with-docs/SKILL.md | 88 +++++++++ .windsurf/skills/handoff/SKILL.md | 13 ++ .../DEEPENING.md | 37 ++++ .../INTERFACE-DESIGN.md | 44 +++++ .../improve-codebase-architecture/LANGUAGE.md | 53 ++++++ .../improve-codebase-architecture/SKILL.md | 71 ++++++++ .windsurf/skills/prototype/LOGIC.md | 79 ++++++++ .windsurf/skills/prototype/SKILL.md | 30 ++++ .windsurf/skills/prototype/UI.md | 112 ++++++++++++ .../skills/setup-matt-pocock-skills/SKILL.md | 121 +++++++++++++ .../skills/setup-matt-pocock-skills/domain.md | 51 ++++++ .../issue-tracker-github.md | 22 +++ .../issue-tracker-gitlab.md | 23 +++ .../issue-tracker-local.md | 19 ++ .../setup-matt-pocock-skills/triage-labels.md | 15 ++ .windsurf/skills/tdd/SKILL.md | 109 ++++++++++++ .windsurf/skills/tdd/deep-modules.md | 33 ++++ .windsurf/skills/tdd/interface-design.md | 31 ++++ .windsurf/skills/tdd/mocking.md | 59 ++++++ .windsurf/skills/tdd/refactoring.md | 10 ++ .windsurf/skills/tdd/tests.md | 61 +++++++ .windsurf/skills/to-issues/SKILL.md | 83 +++++++++ .windsurf/skills/to-prd/SKILL.md | 76 ++++++++ .windsurf/skills/triage/AGENT-BRIEF.md | 168 ++++++++++++++++++ .windsurf/skills/triage/OUT-OF-SCOPE.md | 101 +++++++++++ .windsurf/skills/triage/SKILL.md | 103 +++++++++++ .windsurf/skills/write-a-skill/SKILL.md | 117 ++++++++++++ .windsurf/skills/zoom-out/SKILL.md | 7 + skills-lock.json | 89 ++++++++++ 171 files changed, 10474 insertions(+) create mode 100644 .agents/skills/caveman/SKILL.md create mode 100644 .agents/skills/diagnose/SKILL.md create mode 100644 .agents/skills/diagnose/scripts/hitl-loop.template.sh create mode 100644 .agents/skills/grill-me/SKILL.md create mode 100644 .agents/skills/grill-with-docs/ADR-FORMAT.md create mode 100644 .agents/skills/grill-with-docs/CONTEXT-FORMAT.md create mode 100644 .agents/skills/grill-with-docs/SKILL.md create mode 100644 .agents/skills/handoff/SKILL.md create mode 100644 .agents/skills/improve-codebase-architecture/DEEPENING.md create mode 100644 .agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md create mode 100644 .agents/skills/improve-codebase-architecture/LANGUAGE.md create mode 100644 .agents/skills/improve-codebase-architecture/SKILL.md create mode 100644 .agents/skills/prototype/LOGIC.md create mode 100644 .agents/skills/prototype/SKILL.md create mode 100644 .agents/skills/prototype/UI.md create mode 100644 .agents/skills/setup-matt-pocock-skills/SKILL.md create mode 100644 .agents/skills/setup-matt-pocock-skills/domain.md create mode 100644 .agents/skills/setup-matt-pocock-skills/issue-tracker-github.md create mode 100644 .agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md create mode 100644 .agents/skills/setup-matt-pocock-skills/issue-tracker-local.md create mode 100644 .agents/skills/setup-matt-pocock-skills/triage-labels.md create mode 100644 .agents/skills/tdd/SKILL.md create mode 100644 .agents/skills/tdd/deep-modules.md create mode 100644 .agents/skills/tdd/interface-design.md create mode 100644 .agents/skills/tdd/mocking.md create mode 100644 .agents/skills/tdd/refactoring.md create mode 100644 .agents/skills/tdd/tests.md create mode 100644 .agents/skills/to-issues/SKILL.md create mode 100644 .agents/skills/to-prd/SKILL.md create mode 100644 .agents/skills/triage/AGENT-BRIEF.md create mode 100644 .agents/skills/triage/OUT-OF-SCOPE.md create mode 100644 .agents/skills/triage/SKILL.md create mode 100644 .agents/skills/write-a-skill/SKILL.md create mode 100644 .agents/skills/zoom-out/SKILL.md create mode 100644 .claude/skills/caveman/SKILL.md create mode 100644 .claude/skills/diagnose/SKILL.md create mode 100644 .claude/skills/diagnose/scripts/hitl-loop.template.sh create mode 100644 .claude/skills/grill-me/SKILL.md create mode 100644 .claude/skills/grill-with-docs/ADR-FORMAT.md create mode 100644 .claude/skills/grill-with-docs/CONTEXT-FORMAT.md create mode 100644 .claude/skills/grill-with-docs/SKILL.md create mode 100644 .claude/skills/handoff/SKILL.md create mode 100644 .claude/skills/improve-codebase-architecture/DEEPENING.md create mode 100644 .claude/skills/improve-codebase-architecture/INTERFACE-DESIGN.md create mode 100644 .claude/skills/improve-codebase-architecture/LANGUAGE.md create mode 100644 .claude/skills/improve-codebase-architecture/SKILL.md create mode 100644 .claude/skills/prototype/LOGIC.md create mode 100644 .claude/skills/prototype/SKILL.md create mode 100644 .claude/skills/prototype/UI.md create mode 100644 .claude/skills/setup-matt-pocock-skills/SKILL.md create mode 100644 .claude/skills/setup-matt-pocock-skills/domain.md create mode 100644 .claude/skills/setup-matt-pocock-skills/issue-tracker-github.md create mode 100644 .claude/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md create mode 100644 .claude/skills/setup-matt-pocock-skills/issue-tracker-local.md create mode 100644 .claude/skills/setup-matt-pocock-skills/triage-labels.md create mode 100644 .claude/skills/tdd/SKILL.md create mode 100644 .claude/skills/tdd/deep-modules.md create mode 100644 .claude/skills/tdd/interface-design.md create mode 100644 .claude/skills/tdd/mocking.md create mode 100644 .claude/skills/tdd/refactoring.md create mode 100644 .claude/skills/tdd/tests.md create mode 100644 .claude/skills/to-issues/SKILL.md create mode 100644 .claude/skills/to-prd/SKILL.md create mode 100644 .claude/skills/triage/AGENT-BRIEF.md create mode 100644 .claude/skills/triage/OUT-OF-SCOPE.md create mode 100644 .claude/skills/triage/SKILL.md create mode 100644 .claude/skills/write-a-skill/SKILL.md create mode 100644 .claude/skills/zoom-out/SKILL.md create mode 100644 .kilocode/skills/caveman/SKILL.md create mode 100644 .kilocode/skills/diagnose/SKILL.md create mode 100644 .kilocode/skills/diagnose/scripts/hitl-loop.template.sh create mode 100644 .kilocode/skills/grill-me/SKILL.md create mode 100644 .kilocode/skills/grill-with-docs/ADR-FORMAT.md create mode 100644 .kilocode/skills/grill-with-docs/CONTEXT-FORMAT.md create mode 100644 .kilocode/skills/grill-with-docs/SKILL.md create mode 100644 .kilocode/skills/handoff/SKILL.md create mode 100644 .kilocode/skills/improve-codebase-architecture/DEEPENING.md create mode 100644 .kilocode/skills/improve-codebase-architecture/INTERFACE-DESIGN.md create mode 100644 .kilocode/skills/improve-codebase-architecture/LANGUAGE.md create mode 100644 .kilocode/skills/improve-codebase-architecture/SKILL.md create mode 100644 .kilocode/skills/prototype/LOGIC.md create mode 100644 .kilocode/skills/prototype/SKILL.md create mode 100644 .kilocode/skills/prototype/UI.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/SKILL.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/domain.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/issue-tracker-github.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/issue-tracker-local.md create mode 100644 .kilocode/skills/setup-matt-pocock-skills/triage-labels.md create mode 100644 .kilocode/skills/tdd/SKILL.md create mode 100644 .kilocode/skills/tdd/deep-modules.md create mode 100644 .kilocode/skills/tdd/interface-design.md create mode 100644 .kilocode/skills/tdd/mocking.md create mode 100644 .kilocode/skills/tdd/refactoring.md create mode 100644 .kilocode/skills/tdd/tests.md create mode 100644 .kilocode/skills/to-issues/SKILL.md create mode 100644 .kilocode/skills/to-prd/SKILL.md create mode 100644 .kilocode/skills/triage/AGENT-BRIEF.md create mode 100644 .kilocode/skills/triage/OUT-OF-SCOPE.md create mode 100644 .kilocode/skills/triage/SKILL.md create mode 100644 .kilocode/skills/write-a-skill/SKILL.md create mode 100644 .kilocode/skills/zoom-out/SKILL.md create mode 100644 .kiro/skills/caveman/SKILL.md create mode 100644 .kiro/skills/diagnose/SKILL.md create mode 100644 .kiro/skills/diagnose/scripts/hitl-loop.template.sh create mode 100644 .kiro/skills/grill-me/SKILL.md create mode 100644 .kiro/skills/grill-with-docs/ADR-FORMAT.md create mode 100644 .kiro/skills/grill-with-docs/CONTEXT-FORMAT.md create mode 100644 .kiro/skills/grill-with-docs/SKILL.md create mode 100644 .kiro/skills/handoff/SKILL.md create mode 100644 .kiro/skills/improve-codebase-architecture/DEEPENING.md create mode 100644 .kiro/skills/improve-codebase-architecture/INTERFACE-DESIGN.md create mode 100644 .kiro/skills/improve-codebase-architecture/LANGUAGE.md create mode 100644 .kiro/skills/improve-codebase-architecture/SKILL.md create mode 100644 .kiro/skills/prototype/LOGIC.md create mode 100644 .kiro/skills/prototype/SKILL.md create mode 100644 .kiro/skills/prototype/UI.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/SKILL.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/domain.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/issue-tracker-github.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/issue-tracker-local.md create mode 100644 .kiro/skills/setup-matt-pocock-skills/triage-labels.md create mode 100644 .kiro/skills/tdd/SKILL.md create mode 100644 .kiro/skills/tdd/deep-modules.md create mode 100644 .kiro/skills/tdd/interface-design.md create mode 100644 .kiro/skills/tdd/mocking.md create mode 100644 .kiro/skills/tdd/refactoring.md create mode 100644 .kiro/skills/tdd/tests.md create mode 100644 .kiro/skills/to-issues/SKILL.md create mode 100644 .kiro/skills/to-prd/SKILL.md create mode 100644 .kiro/skills/triage/AGENT-BRIEF.md create mode 100644 .kiro/skills/triage/OUT-OF-SCOPE.md create mode 100644 .kiro/skills/triage/SKILL.md create mode 100644 .kiro/skills/write-a-skill/SKILL.md create mode 100644 .kiro/skills/zoom-out/SKILL.md create mode 100644 .windsurf/skills/caveman/SKILL.md create mode 100644 .windsurf/skills/diagnose/SKILL.md create mode 100644 .windsurf/skills/diagnose/scripts/hitl-loop.template.sh create mode 100644 .windsurf/skills/grill-me/SKILL.md create mode 100644 .windsurf/skills/grill-with-docs/ADR-FORMAT.md create mode 100644 .windsurf/skills/grill-with-docs/CONTEXT-FORMAT.md create mode 100644 .windsurf/skills/grill-with-docs/SKILL.md create mode 100644 .windsurf/skills/handoff/SKILL.md create mode 100644 .windsurf/skills/improve-codebase-architecture/DEEPENING.md create mode 100644 .windsurf/skills/improve-codebase-architecture/INTERFACE-DESIGN.md create mode 100644 .windsurf/skills/improve-codebase-architecture/LANGUAGE.md create mode 100644 .windsurf/skills/improve-codebase-architecture/SKILL.md create mode 100644 .windsurf/skills/prototype/LOGIC.md create mode 100644 .windsurf/skills/prototype/SKILL.md create mode 100644 .windsurf/skills/prototype/UI.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/SKILL.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/domain.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/issue-tracker-github.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/issue-tracker-local.md create mode 100644 .windsurf/skills/setup-matt-pocock-skills/triage-labels.md create mode 100644 .windsurf/skills/tdd/SKILL.md create mode 100644 .windsurf/skills/tdd/deep-modules.md create mode 100644 .windsurf/skills/tdd/interface-design.md create mode 100644 .windsurf/skills/tdd/mocking.md create mode 100644 .windsurf/skills/tdd/refactoring.md create mode 100644 .windsurf/skills/tdd/tests.md create mode 100644 .windsurf/skills/to-issues/SKILL.md create mode 100644 .windsurf/skills/to-prd/SKILL.md create mode 100644 .windsurf/skills/triage/AGENT-BRIEF.md create mode 100644 .windsurf/skills/triage/OUT-OF-SCOPE.md create mode 100644 .windsurf/skills/triage/SKILL.md create mode 100644 .windsurf/skills/write-a-skill/SKILL.md create mode 100644 .windsurf/skills/zoom-out/SKILL.md create mode 100644 skills-lock.json diff --git a/.agents/skills/caveman/SKILL.md b/.agents/skills/caveman/SKILL.md new file mode 100644 index 0000000..85770a3 --- /dev/null +++ b/.agents/skills/caveman/SKILL.md @@ -0,0 +1,49 @@ +--- +name: caveman +description: > + Ultra-compressed communication mode. Cuts token usage ~75% by dropping + filler, articles, and pleasantries while keeping full technical accuracy. + Use when user says "caveman mode", "talk like caveman", "use caveman", + "less tokens", "be brief", or invokes /caveman. +--- + +Respond terse like smart caveman. All technical substance stay. Only fluff die. + +## Persistence + +ACTIVE EVERY RESPONSE once triggered. No revert after many turns. No filler drift. Still active if unsure. Off only when user says "stop caveman" or "normal mode". + +## Rules + +Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Abbreviate common terms (DB/auth/config/req/res/fn/impl). Strip conjunctions. Use arrows for causality (X -> Y). One word when one word enough. + +Technical terms stay exact. Code blocks unchanged. Errors quoted exact. + +Pattern: `[thing] [action] [reason]. [next step].` + +Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..." +Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:" + +### Examples + +**"Why React component re-render?"** + +> Inline obj prop -> new ref -> re-render. `useMemo`. + +**"Explain database connection pooling."** + +> Pool = reuse DB conn. Skip handshake -> fast under load. + +## Auto-Clarity Exception + +Drop caveman temporarily for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question. Resume caveman after clear part done. + +Example -- destructive op: + +> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone. +> +> ```sql +> DROP TABLE users; +> ``` +> +> Caveman resume. Verify backup exist first. diff --git a/.agents/skills/diagnose/SKILL.md b/.agents/skills/diagnose/SKILL.md new file mode 100644 index 0000000..ed55bda --- /dev/null +++ b/.agents/skills/diagnose/SKILL.md @@ -0,0 +1,117 @@ +--- +name: diagnose +description: Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression. +--- + +# Diagnose + +A discipline for hard bugs. Skip phases only when explicitly justified. + +When exploring the codebase, use the project's domain glossary to get a clear mental model of the relevant modules, and check ADRs in the area you're touching. + +## Phase 1 — Build a feedback loop + +**This is the skill.** Everything else is mechanical. If you have a fast, deterministic, agent-runnable pass/fail signal for the bug, you will find the cause — bisection, hypothesis-testing, and instrumentation all just consume that signal. If you don't have one, no amount of staring at code will save you. + +Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give up.** + +### Ways to construct one — try them in roughly this order + +1. **Failing test** at whatever seam reaches the bug — unit, integration, e2e. +2. **Curl / HTTP script** against a running dev server. +3. **CLI invocation** with a fixture input, diffing stdout against a known-good snapshot. +4. **Headless browser script** (Playwright / Puppeteer) — drives the UI, asserts on DOM/console/network. +5. **Replay a captured trace.** Save a real network request / payload / event log to disk; replay it through the code path in isolation. +6. **Throwaway harness.** Spin up a minimal subset of the system (one service, mocked deps) that exercises the bug code path with a single function call. +7. **Property / fuzz loop.** If the bug is "sometimes wrong output", run 1000 random inputs and look for the failure mode. +8. **Bisection harness.** If the bug appeared between two known states (commit, dataset, version), automate "boot at state X, check, repeat" so you can `git bisect run` it. +9. **Differential loop.** Run the same input through old-version vs new-version (or two configs) and diff outputs. +10. **HITL bash script.** Last resort. If a human must click, drive _them_ with `scripts/hitl-loop.template.sh` so the loop is still structured. Captured output feeds back to you. + +Build the right feedback loop, and the bug is 90% fixed. + +### Iterate on the loop itself + +Treat the loop as a product. Once you have _a_ loop, ask: + +- Can I make it faster? (Cache setup, skip unrelated init, narrow the test scope.) +- Can I make the signal sharper? (Assert on the specific symptom, not "didn't crash".) +- Can I make it more deterministic? (Pin time, seed RNG, isolate filesystem, freeze network.) + +A 30-second flaky loop is barely better than no loop. A 2-second deterministic loop is a debugging superpower. + +### Non-deterministic bugs + +The goal is not a clean repro but a **higher reproduction rate**. Loop the trigger 100×, parallelise, add stress, narrow timing windows, inject sleeps. A 50%-flake bug is debuggable; 1% is not — keep raising the rate until it's debuggable. + +### When you genuinely cannot build a loop + +Stop and say so explicitly. List what you tried. Ask the user for: (a) access to whatever environment reproduces it, (b) a captured artifact (HAR file, log dump, core dump, screen recording with timestamps), or (c) permission to add temporary production instrumentation. Do **not** proceed to hypothesise without a loop. + +Do not proceed to Phase 2 until you have a loop you believe in. + +## Phase 2 — Reproduce + +Run the loop. Watch the bug appear. + +Confirm: + +- [ ] The loop produces the failure mode the **user** described — not a different failure that happens to be nearby. Wrong bug = wrong fix. +- [ ] The failure is reproducible across multiple runs (or, for non-deterministic bugs, reproducible at a high enough rate to debug against). +- [ ] You have captured the exact symptom (error message, wrong output, slow timing) so later phases can verify the fix actually addresses it. + +Do not proceed until you reproduce the bug. + +## Phase 3 — Hypothesise + +Generate **3–5 ranked hypotheses** before testing any of them. Single-hypothesis generation anchors on the first plausible idea. + +Each hypothesis must be **falsifiable**: state the prediction it makes. + +> Format: "If is the cause, then will make the bug disappear / will make it worse." + +If you cannot state the prediction, the hypothesis is a vibe — discard or sharpen it. + +**Show the ranked list to the user before testing.** They often have domain knowledge that re-ranks instantly ("we just deployed a change to #3"), or know hypotheses they've already ruled out. Cheap checkpoint, big time saver. Don't block on it — proceed with your ranking if the user is AFK. + +## Phase 4 — Instrument + +Each probe must map to a specific prediction from Phase 3. **Change one variable at a time.** + +Tool preference: + +1. **Debugger / REPL inspection** if the env supports it. One breakpoint beats ten logs. +2. **Targeted logs** at the boundaries that distinguish hypotheses. +3. Never "log everything and grep". + +**Tag every debug log** with a unique prefix, e.g. `[DEBUG-a4f2]`. Cleanup at the end becomes a single grep. Untagged logs survive; tagged logs die. + +**Perf branch.** For performance regressions, logs are usually wrong. Instead: establish a baseline measurement (timing harness, `performance.now()`, profiler, query plan), then bisect. Measure first, fix second. + +## Phase 5 — Fix + regression test + +Write the regression test **before the fix** — but only if there is a **correct seam** for it. + +A correct seam is one where the test exercises the **real bug pattern** as it occurs at the call site. If the only available seam is too shallow (single-caller test when the bug needs multiple callers, unit test that can't replicate the chain that triggered the bug), a regression test there gives false confidence. + +**If no correct seam exists, that itself is the finding.** Note it. The codebase architecture is preventing the bug from being locked down. Flag this for the next phase. + +If a correct seam exists: + +1. Turn the minimised repro into a failing test at that seam. +2. Watch it fail. +3. Apply the fix. +4. Watch it pass. +5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario. + +## Phase 6 — Cleanup + post-mortem + +Required before declaring done: + +- [ ] Original repro no longer reproduces (re-run the Phase 1 loop) +- [ ] Regression test passes (or absence of seam is documented) +- [ ] All `[DEBUG-...]` instrumentation removed (`grep` the prefix) +- [ ] Throwaway prototypes deleted (or moved to a clearly-marked debug location) +- [ ] The hypothesis that turned out correct is stated in the commit / PR message — so the next debugger learns + +**Then ask: what would have prevented this bug?** If the answer involves architectural change (no good test seam, tangled callers, hidden coupling) hand off to the `/improve-codebase-architecture` skill with the specifics. Make the recommendation **after** the fix is in, not before — you have more information now than when you started. diff --git a/.agents/skills/diagnose/scripts/hitl-loop.template.sh b/.agents/skills/diagnose/scripts/hitl-loop.template.sh new file mode 100644 index 0000000..40afc46 --- /dev/null +++ b/.agents/skills/diagnose/scripts/hitl-loop.template.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Human-in-the-loop reproduction loop. +# Copy this file, edit the steps below, and run it. +# The agent runs the script; the user follows prompts in their terminal. +# +# Usage: +# bash hitl-loop.template.sh +# +# Two helpers: +# step "" → show instruction, wait for Enter +# capture VAR "" → show question, read response into VAR +# +# At the end, captured values are printed as KEY=VALUE for the agent to parse. + +set -euo pipefail + +step() { + printf '\n>>> %s\n' "$1" + read -r -p " [Enter when done] " _ +} + +capture() { + local var="$1" question="$2" answer + printf '\n>>> %s\n' "$question" + read -r -p " > " answer + printf -v "$var" '%s' "$answer" +} + +# --- edit below --------------------------------------------------------- + +step "Open the app at http://localhost:3000 and sign in." + +capture ERRORED "Click the 'Export' button. Did it throw an error? (y/n)" + +capture ERROR_MSG "Paste the error message (or 'none'):" + +# --- edit above --------------------------------------------------------- + +printf '\n--- Captured ---\n' +printf 'ERRORED=%s\n' "$ERRORED" +printf 'ERROR_MSG=%s\n' "$ERROR_MSG" diff --git a/.agents/skills/grill-me/SKILL.md b/.agents/skills/grill-me/SKILL.md new file mode 100644 index 0000000..bd04394 --- /dev/null +++ b/.agents/skills/grill-me/SKILL.md @@ -0,0 +1,10 @@ +--- +name: grill-me +description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me". +--- + +Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer. + +Ask the questions one at a time. + +If a question can be answered by exploring the codebase, explore the codebase instead. diff --git a/.agents/skills/grill-with-docs/ADR-FORMAT.md b/.agents/skills/grill-with-docs/ADR-FORMAT.md new file mode 100644 index 0000000..da7e78e --- /dev/null +++ b/.agents/skills/grill-with-docs/ADR-FORMAT.md @@ -0,0 +1,47 @@ +# ADR Format + +ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc. + +Create the `docs/adr/` directory lazily — only when the first ADR is needed. + +## Template + +```md +# {Short title of the decision} + +{1-3 sentences: what's the context, what did we decide, and why.} +``` + +That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections. + +## Optional sections + +Only include these when they add genuine value. Most ADRs won't need them. + +- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited +- **Considered Options** — only when the rejected alternatives are worth remembering +- **Consequences** — only when non-obvious downstream effects need to be called out + +## Numbering + +Scan `docs/adr/` for the highest existing number and increment by one. + +## When to offer an ADR + +All three of these must be true: + +1. **Hard to reverse** — the cost of changing your mind later is meaningful +2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?" +3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons + +If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing." + +### What qualifies + +- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres." +- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP." +- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out. +- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s. +- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate. +- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract." +- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months. diff --git a/.agents/skills/grill-with-docs/CONTEXT-FORMAT.md b/.agents/skills/grill-with-docs/CONTEXT-FORMAT.md new file mode 100644 index 0000000..ddfa247 --- /dev/null +++ b/.agents/skills/grill-with-docs/CONTEXT-FORMAT.md @@ -0,0 +1,77 @@ +# CONTEXT.md Format + +## Structure + +```md +# {Context Name} + +{One or two sentence description of what this context is and why it exists.} + +## Language + +**Order**: +{A concise description of the term} +_Avoid_: Purchase, transaction + +**Invoice**: +A request for payment sent to a customer after delivery. +_Avoid_: Bill, payment request + +**Customer**: +A person or organization that places orders. +_Avoid_: Client, buyer, account + +## Relationships + +- An **Order** produces one or more **Invoices** +- An **Invoice** belongs to exactly one **Customer** + +## Example dialogue + +> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?" +> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed." + +## Flagged ambiguities + +- "account" was used to mean both **Customer** and **User** — resolved: these are distinct concepts. +``` + +## Rules + +- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others as aliases to avoid. +- **Flag conflicts explicitly.** If a term is used ambiguously, call it out in "Flagged ambiguities" with a clear resolution. +- **Keep definitions tight.** One sentence max. Define what it IS, not what it does. +- **Show relationships.** Use bold term names and express cardinality where obvious. +- **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs. +- **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine. +- **Write an example dialogue.** A conversation between a dev and a domain expert that demonstrates how the terms interact naturally and clarifies boundaries between related concepts. + +## Single vs multi-context repos + +**Single context (most repos):** One `CONTEXT.md` at the repo root. + +**Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other: + +```md +# Context Map + +## Contexts + +- [Ordering](./src/ordering/CONTEXT.md) — receives and tracks customer orders +- [Billing](./src/billing/CONTEXT.md) — generates invoices and processes payments +- [Fulfillment](./src/fulfillment/CONTEXT.md) — manages warehouse picking and shipping + +## Relationships + +- **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking +- **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices +- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money` +``` + +The skill infers which structure applies: + +- If `CONTEXT-MAP.md` exists, read it to find contexts +- If only a root `CONTEXT.md` exists, single context +- If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved + +When multiple contexts exist, infer which one the current topic relates to. If unclear, ask. diff --git a/.agents/skills/grill-with-docs/SKILL.md b/.agents/skills/grill-with-docs/SKILL.md new file mode 100644 index 0000000..5ea0aa9 --- /dev/null +++ b/.agents/skills/grill-with-docs/SKILL.md @@ -0,0 +1,88 @@ +--- +name: grill-with-docs +description: Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions. +--- + + + +Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer. + +Ask the questions one at a time, waiting for feedback on each question before continuing. + +If a question can be answered by exploring the codebase, explore the codebase instead. + + + + + +## Domain awareness + +During codebase exploration, also look for existing documentation: + +### File structure + +Most repos have a single context: + +``` +/ +├── CONTEXT.md +├── docs/ +│ └── adr/ +│ ├── 0001-event-sourced-orders.md +│ └── 0002-postgres-for-write-model.md +└── src/ +``` + +If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives: + +``` +/ +├── CONTEXT-MAP.md +├── docs/ +│ └── adr/ ← system-wide decisions +├── src/ +│ ├── ordering/ +│ │ ├── CONTEXT.md +│ │ └── docs/adr/ ← context-specific decisions +│ └── billing/ +│ ├── CONTEXT.md +│ └── docs/adr/ +``` + +Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed. + +## During the session + +### Challenge against the glossary + +When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?" + +### Sharpen fuzzy language + +When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things." + +### Discuss concrete scenarios + +When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts. + +### Cross-reference with code + +When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?" + +### Update CONTEXT.md inline + +When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md). + +`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else. + +### Offer ADRs sparingly + +Only offer to create an ADR when all three are true: + +1. **Hard to reverse** — the cost of changing your mind later is meaningful +2. **Surprising without context** — a future reader will wonder "why did they do it this way?" +3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons + +If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md). + + diff --git a/.agents/skills/handoff/SKILL.md b/.agents/skills/handoff/SKILL.md new file mode 100644 index 0000000..28bfb3a --- /dev/null +++ b/.agents/skills/handoff/SKILL.md @@ -0,0 +1,13 @@ +--- +name: handoff +description: Compact the current conversation into a handoff document for another agent to pick up. +argument-hint: "What will the next session be used for?" +--- + +Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save it to a path produced by `mktemp -t handoff-XXXXXX.md` (read the file before you write to it). + +Suggest the skills to be used, if any, by the next session. + +Do not duplicate content already captured in other artifacts (PRDs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead. + +If the user passed arguments, treat them as a description of what the next session will focus on and tailor the doc accordingly. diff --git a/.agents/skills/improve-codebase-architecture/DEEPENING.md b/.agents/skills/improve-codebase-architecture/DEEPENING.md new file mode 100644 index 0000000..ecaf5d7 --- /dev/null +++ b/.agents/skills/improve-codebase-architecture/DEEPENING.md @@ -0,0 +1,37 @@ +# Deepening + +How to deepen a cluster of shallow modules safely, given its dependencies. Assumes the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**. + +## Dependency categories + +When assessing a candidate for deepening, classify its dependencies. The category determines how the deepened module is tested across its seam. + +### 1. In-process + +Pure computation, in-memory state, no I/O. Always deepenable — merge the modules and test through the new interface directly. No adapter needed. + +### 2. Local-substitutable + +Dependencies that have local test stand-ins (PGLite for Postgres, in-memory filesystem). Deepenable if the stand-in exists. The deepened module is tested with the stand-in running in the test suite. The seam is internal; no port at the module's external interface. + +### 3. Remote but owned (Ports & Adapters) + +Your own services across a network boundary (microservices, internal APIs). Define a **port** (interface) at the seam. The deep module owns the logic; the transport is injected as an **adapter**. Tests use an in-memory adapter. Production uses an HTTP/gRPC/queue adapter. + +Recommendation shape: *"Define a port at the seam, implement an HTTP adapter for production and an in-memory adapter for testing, so the logic sits in one deep module even though it's deployed across a network."* + +### 4. True external (Mock) + +Third-party services (Stripe, Twilio, etc.) you don't control. The deepened module takes the external dependency as an injected port; tests provide a mock adapter. + +## Seam discipline + +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a port unless at least two adapters are justified (typically production + test). A single-adapter seam is just indirection. +- **Internal seams vs external seams.** A deep module can have internal seams (private to its implementation, used by its own tests) as well as the external seam at its interface. Don't expose internal seams through the interface just because tests use them. + +## Testing strategy: replace, don't layer + +- Old unit tests on shallow modules become waste once tests at the deepened module's interface exist — delete them. +- Write new tests at the deepened module's interface. The **interface is the test surface**. +- Tests assert on observable outcomes through the interface, not internal state. +- Tests should survive internal refactors — they describe behaviour, not implementation. If a test has to change when the implementation changes, it's testing past the interface. diff --git a/.agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md b/.agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md new file mode 100644 index 0000000..3197723 --- /dev/null +++ b/.agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md @@ -0,0 +1,44 @@ +# Interface Design + +When the user wants to explore alternative interfaces for a chosen deepening candidate, use this parallel sub-agent pattern. Based on "Design It Twice" (Ousterhout) — your first idea is unlikely to be the best. + +Uses the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**, **leverage**. + +## Process + +### 1. Frame the problem space + +Before spawning sub-agents, write a user-facing explanation of the problem space for the chosen candidate: + +- The constraints any new interface would need to satisfy +- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](DEEPENING.md)) +- A rough illustrative code sketch to ground the constraints — not a proposal, just a way to make the constraints concrete + +Show this to the user, then immediately proceed to Step 2. The user reads and thinks while the sub-agents work in parallel. + +### 2. Spawn sub-agents + +Spawn 3+ sub-agents in parallel using the Agent tool. Each must produce a **radically different** interface for the deepened module. + +Prompt each sub-agent with a separate technical brief (file paths, coupling details, dependency category from [DEEPENING.md](DEEPENING.md), what sits behind the seam). The brief is independent of the user-facing problem-space explanation in Step 1. Give each agent a different design constraint: + +- Agent 1: "Minimize the interface — aim for 1–3 entry points max. Maximise leverage per entry point." +- Agent 2: "Maximise flexibility — support many use cases and extension." +- Agent 3: "Optimise for the most common caller — make the default case trivial." +- Agent 4 (if applicable): "Design around ports & adapters for cross-seam dependencies." + +Include both [LANGUAGE.md](LANGUAGE.md) vocabulary and CONTEXT.md vocabulary in the brief so each sub-agent names things consistently with the architecture language and the project's domain language. + +Each sub-agent outputs: + +1. Interface (types, methods, params — plus invariants, ordering, error modes) +2. Usage example showing how callers use it +3. What the implementation hides behind the seam +4. Dependency strategy and adapters (see [DEEPENING.md](DEEPENING.md)) +5. Trade-offs — where leverage is high, where it's thin + +### 3. Present and compare + +Present designs sequentially so the user can absorb each one, then compare them in prose. Contrast by **depth** (leverage at the interface), **locality** (where change concentrates), and **seam placement**. + +After comparing, give your own recommendation: which design you think is strongest and why. If elements from different designs would combine well, propose a hybrid. Be opinionated — the user wants a strong read, not a menu. diff --git a/.agents/skills/improve-codebase-architecture/LANGUAGE.md b/.agents/skills/improve-codebase-architecture/LANGUAGE.md new file mode 100644 index 0000000..530c276 --- /dev/null +++ b/.agents/skills/improve-codebase-architecture/LANGUAGE.md @@ -0,0 +1,53 @@ +# Language + +Shared vocabulary for every suggestion this skill makes. Use these terms exactly — don't substitute "component," "service," "API," or "boundary." Consistent language is the whole point. + +## Terms + +**Module** +Anything with an interface and an implementation. Deliberately scale-agnostic — applies equally to a function, class, package, or tier-spanning slice. +_Avoid_: unit, component, service. + +**Interface** +Everything a caller must know to use the module correctly. Includes the type signature, but also invariants, ordering constraints, error modes, required configuration, and performance characteristics. +_Avoid_: API, signature (too narrow — those refer only to the type-level surface). + +**Implementation** +What's inside a module — its body of code. Distinct from **Adapter**: a thing can be a small adapter with a large implementation (a Postgres repo) or a large adapter with a small implementation (an in-memory fake). Reach for "adapter" when the seam is the topic; "implementation" otherwise. + +**Depth** +Leverage at the interface — the amount of behaviour a caller (or test) can exercise per unit of interface they have to learn. A module is **deep** when a large amount of behaviour sits behind a small interface. A module is **shallow** when the interface is nearly as complex as the implementation. + +**Seam** _(from Michael Feathers)_ +A place where you can alter behaviour without editing in that place. The *location* at which a module's interface lives. Choosing where to put the seam is its own design decision, distinct from what goes behind it. +_Avoid_: boundary (overloaded with DDD's bounded context). + +**Adapter** +A concrete thing that satisfies an interface at a seam. Describes *role* (what slot it fills), not substance (what's inside). + +**Leverage** +What callers get from depth. More capability per unit of interface they have to learn. One implementation pays back across N call sites and M tests. + +**Locality** +What maintainers get from depth. Change, bugs, knowledge, and verification concentrate at one place rather than spreading across callers. Fix once, fixed everywhere. + +## Principles + +- **Depth is a property of the interface, not the implementation.** A deep module can be internally composed of small, mockable, swappable parts — they just aren't part of the interface. A module can have **internal seams** (private to its implementation, used by its own tests) as well as the **external seam** at its interface. +- **The deletion test.** Imagine deleting the module. If complexity vanishes, the module wasn't hiding anything (it was a pass-through). If complexity reappears across N callers, the module was earning its keep. +- **The interface is the test surface.** Callers and tests cross the same seam. If you want to test *past* the interface, the module is probably the wrong shape. +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a seam unless something actually varies across it. + +## Relationships + +- A **Module** has exactly one **Interface** (the surface it presents to callers and tests). +- **Depth** is a property of a **Module**, measured against its **Interface**. +- A **Seam** is where a **Module**'s **Interface** lives. +- An **Adapter** sits at a **Seam** and satisfies the **Interface**. +- **Depth** produces **Leverage** for callers and **Locality** for maintainers. + +## Rejected framings + +- **Depth as ratio of implementation-lines to interface-lines** (Ousterhout): rewards padding the implementation. We use depth-as-leverage instead. +- **"Interface" as the TypeScript `interface` keyword or a class's public methods**: too narrow — interface here includes every fact a caller must know. +- **"Boundary"**: overloaded with DDD's bounded context. Say **seam** or **interface**. diff --git a/.agents/skills/improve-codebase-architecture/SKILL.md b/.agents/skills/improve-codebase-architecture/SKILL.md new file mode 100644 index 0000000..05984a6 --- /dev/null +++ b/.agents/skills/improve-codebase-architecture/SKILL.md @@ -0,0 +1,71 @@ +--- +name: improve-codebase-architecture +description: Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. +--- + +# Improve Codebase Architecture + +Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability. + +## Glossary + +Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md). + +- **Module** — anything with an interface and an implementation (function, class, package, slice). +- **Interface** — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature. +- **Implementation** — the code inside. +- **Depth** — leverage at the interface: a lot of behaviour behind a small interface. **Deep** = high leverage. **Shallow** = interface nearly as complex as the implementation. +- **Seam** — where an interface lives; a place behaviour can be altered without editing in place. (Use this, not "boundary.") +- **Adapter** — a concrete thing satisfying an interface at a seam. +- **Leverage** — what callers get from depth. +- **Locality** — what maintainers get from depth: change, bugs, knowledge concentrated in one place. + +Key principles (see [LANGUAGE.md](LANGUAGE.md) for the full list): + +- **Deletion test**: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep. +- **The interface is the test surface.** +- **One adapter = hypothetical seam. Two adapters = real seam.** + +This skill is _informed_ by the project's domain model. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. + +## Process + +### 1. Explore + +Read the project's domain glossary and any ADRs in the area you're touching first. + +Then use the Agent tool with `subagent_type=Explore` to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction: + +- Where does understanding one concept require bouncing between many small modules? +- Where are modules **shallow** — interface nearly as complex as the implementation? +- Where have pure functions been extracted just for testability, but the real bugs hide in how they're called (no **locality**)? +- Where do tightly-coupled modules leak across their seams? +- Which parts of the codebase are untested, or hard to test through their current interface? + +Apply the **deletion test** to anything you suspect is shallow: would deleting it concentrate complexity, or just move it? A "yes, concentrates" is the signal you want. + +### 2. Present candidates + +Present a numbered list of deepening opportunities. For each candidate: + +- **Files** — which files/modules are involved +- **Problem** — why the current architecture is causing friction +- **Solution** — plain English description of what would change +- **Benefits** — explained in terms of locality and leverage, and also in how tests would improve + +**Use CONTEXT.md vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.** If `CONTEXT.md` defines "Order," talk about "the Order intake module" — not "the FooBarHandler," and not "the Order service." + +**ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly (e.g. _"contradicts ADR-0007 — but worth reopening because…"_). Don't list every theoretical refactor an ADR forbids. + +Do NOT propose interfaces yet. Ask the user: "Which of these would you like to explore?" + +### 3. Grilling loop + +Once the user picks a candidate, drop into a grilling conversation. Walk the design tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive. + +Side effects happen inline as decisions crystallize: + +- **Naming a deepened module after a concept not in `CONTEXT.md`?** Add the term to `CONTEXT.md` — same discipline as `/grill-with-docs` (see [CONTEXT-FORMAT.md](../grill-with-docs/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist. +- **Sharpening a fuzzy term during the conversation?** Update `CONTEXT.md` right there. +- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer to avoid re-suggesting the same thing — skip ephemeral reasons ("not worth it right now") and self-evident ones. See [ADR-FORMAT.md](../grill-with-docs/ADR-FORMAT.md). +- **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](INTERFACE-DESIGN.md). diff --git a/.agents/skills/prototype/LOGIC.md b/.agents/skills/prototype/LOGIC.md new file mode 100644 index 0000000..526ecb1 --- /dev/null +++ b/.agents/skills/prototype/LOGIC.md @@ -0,0 +1,79 @@ +# Logic Prototype + +A tiny interactive terminal app that lets the user drive a state model by hand. Use this when the question is about **business logic, state transitions, or data shape** — the kind of thing that looks reasonable on paper but only feels wrong once you push it through real cases. + +## When this is the right shape + +- "I'm not sure if this state machine handles the edge case where X then Y." +- "Does this data model actually let me represent the case where..." +- "I want to feel out what the API should look like before writing it." +- Anything where the user wants to **press buttons and watch state change**. + +If the question is "what should this look like" — wrong branch. Use [UI.md](UI.md). + +## Process + +### 1. State the question + +Before writing code, write down what state model and what question you're prototyping. One paragraph, in the prototype's README or a comment at the top of the file. A logic prototype that answers the wrong question is pure waste — make the question explicit so it can be checked later, whether the user is watching now or returning to it AFK. + +### 2. Pick the language + +Use whatever the host project uses. If the project has no obvious runtime (e.g. a docs repo), ask. + +Match the project's existing conventions for tooling — don't add a new package manager or runtime just for the prototype. + +### 3. Isolate the logic in a portable module + +Put the actual logic — the bit that's answering the question — behind a small, pure interface that could be lifted out and dropped into the real codebase later. The TUI around it is throwaway; the logic module shouldn't be. + +The right shape depends on the question: + +- **A pure reducer** — `(state, action) => state`. Good when actions are discrete events and state is a single value. +- **A state machine** — explicit states and transitions. Good when "which actions are even legal right now" is part of the question. +- **A small set of pure functions** over a plain data type. Good when there's no implicit current state — just transformations. +- **A class or module with a clear method surface** when the logic genuinely owns ongoing internal state. + +Pick whichever shape best fits the question being asked, *not* whichever is easiest to wire to a TUI. Keep it pure: no I/O, no terminal code, no `console.log` for control flow. The TUI imports it and calls into it; nothing flows the other direction. + +This is what makes the prototype useful past its own lifetime. When the question's been answered, the validated reducer / machine / function set can be lifted into the real module — the TUI shell gets deleted. + +### 4. Build the smallest TUI that exposes the state + +Build it as a **lightweight TUI** — on every tick, clear the screen (`console.clear()` / `print("\033[2J\033[H")` / equivalent) and re-render the whole frame. The user should always see one stable view, not an ever-growing scrollback. + +Each frame has two parts, in this order: + +1. **Current state**, pretty-printed and diff-friendly (one field per line, or formatted JSON). Use **bold** for field names or section headers and **dim** for less important context (timestamps, IDs, derived values). Native ANSI escape codes are fine — `\x1b[1m` bold, `\x1b[2m` dim, `\x1b[0m` reset. No need to pull in a styling library unless one is already in the project. +2. **Keyboard shortcuts**, listed at the bottom: `[a] add user [d] delete user [t] tick clock [q] quit`. Bold the key, dim the description, or vice-versa — whatever reads cleanly. + +Behaviour: + +1. **Initialise state** — a single in-memory object/struct. Render the first frame on start. +2. **Read one keystroke (or one line)** at a time, dispatch to a handler that mutates state. +3. **Re-render** the full frame after every action — don't append, replace. +4. **Loop until quit.** + +The whole frame should fit on one screen. + +### 5. Make it runnable in one command + +Add a script to the project's existing task runner (`package.json` scripts, `Makefile`, `justfile`, `pyproject.toml`). The user should run `pnpm run ` or equivalent — never need to remember a path. + +If the host project has no task runner, just put the command at the top of the prototype's README. + +### 6. Hand it over + +Give the user the run command. They'll drive it themselves; the interesting moments are when they say "wait, that shouldn't be possible" or "huh, I assumed X would be different" — those are the bugs in the _idea_, which is the whole point. If they want new actions added, add them. Prototypes evolve. + +### 7. Capture the answer + +When the prototype has done its job, the answer to the question is the only thing worth keeping. If the user is around, ask what it taught them. If not, leave a `NOTES.md` next to the prototype so the answer can be filled in (or filled in by you, if you've watched the session) before the prototype gets deleted. + +## Anti-patterns + +- **Don't add tests.** A prototype that needs tests is no longer a prototype. +- **Don't wire it to the real database.** Use an in-memory store unless the question is specifically about persistence. +- **Don't generalise.** No "what if we wanted to support X later." The prototype answers one question. +- **Don't blur the logic and the TUI together.** If the reducer / state machine references `console.log`, prompts, or terminal escape codes, it's no longer portable. Keep the TUI as a thin shell over a pure module. +- **Don't ship the TUI shell into production.** The shell is optimised for being driven by hand from a terminal. The logic module behind it is the bit worth keeping. diff --git a/.agents/skills/prototype/SKILL.md b/.agents/skills/prototype/SKILL.md new file mode 100644 index 0000000..64f3e61 --- /dev/null +++ b/.agents/skills/prototype/SKILL.md @@ -0,0 +1,30 @@ +--- +name: prototype +description: Build a throwaway prototype to flesh out a design before committing to it. Routes between two branches — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. Use when the user wants to prototype, sanity-check a data model or state machine, mock up a UI, explore design options, or says "prototype this", "let me play with it", "try a few designs". +--- + +# Prototype + +A prototype is **throwaway code that answers a question**. The question decides the shape. + +## Pick a branch + +Identify which question is being answered — from the user's prompt, the surrounding code, or by asking if the user is around: + +- **"Does this logic / state model feel right?"** → [LOGIC.md](LOGIC.md). Build a tiny interactive terminal app that pushes the state machine through cases that are hard to reason about on paper. +- **"What should this look like?"** → [UI.md](UI.md). Generate several radically different UI variations on a single route, switchable via a URL search param and a floating bottom bar. + +The two branches produce very different artifacts — getting this wrong wastes the whole prototype. If the question is genuinely ambiguous and the user isn't reachable, default to whichever branch better matches the surrounding code (a backend module → logic; a page or component → UI) and state the assumption at the top of the prototype. + +## Rules that apply to both + +1. **Throwaway from day one, and clearly marked as such.** Locate the prototype code close to where it will actually be used (next to the module or page it's prototyping for) so context is obvious — but name it so a casual reader can see it's a prototype, not production. For throwaway UI routes, obey whatever routing convention the project already uses; don't invent a new top-level structure. +2. **One command to run.** Whatever the project's existing task runner supports — `pnpm `, `python `, `bun `, etc. The user must be able to start it without thinking. +3. **No persistence by default.** State lives in memory. Persistence is the thing the prototype is _checking_, not something it should depend on. If the question explicitly involves a database, hit a scratch DB or a local file with a clear "PROTOTYPE — wipe me" name. +4. **Skip the polish.** No tests, no error handling beyond what makes the prototype _runnable_, no abstractions. The point is to learn something fast and then delete it. +5. **Surface the state.** After every action (logic) or on every variant switch (UI), print or render the full relevant state so the user can see what changed. +6. **Delete or absorb when done.** When the prototype has answered its question, either delete it or fold the validated decision into the real code — don't leave it rotting in the repo. + +## When done + +The _answer_ is the only thing worth keeping from a prototype. Capture it somewhere durable (commit message, ADR, issue, or a `NOTES.md` next to the prototype) along with the question it was answering. If the user is around, that capture is a quick conversation; if not, leave the placeholder so they (or you, on the next pass) can fill in the verdict before deleting the prototype. diff --git a/.agents/skills/prototype/UI.md b/.agents/skills/prototype/UI.md new file mode 100644 index 0000000..f3b6e64 --- /dev/null +++ b/.agents/skills/prototype/UI.md @@ -0,0 +1,112 @@ +# UI Prototype + +Generate **several radically different UI variations** on a single route, switchable from a floating bottom bar. The user flips between variants in the browser, picks one (or steals bits from each), then throws the rest away. + +If the question is about logic/state rather than what something looks like — wrong branch. Use [LOGIC.md](LOGIC.md). + +## When this is the right shape + +- "What should this page look like?" +- "I want to see a few options for this dashboard before committing." +- "Try a different layout for the settings screen." +- Any time the user would otherwise spend a day picking between three vague mockups in their head. + +## Two sub-shapes — strongly prefer sub-shape A + +A UI prototype is much easier to judge when it's **butting up against the rest of the app** — real header, real sidebar, real data, real density. A throwaway route on its own is a vacuum: every variant looks fine in isolation. Default to sub-shape A whenever there's a plausible existing page to host the variants. Only reach for sub-shape B if the prototype genuinely has no nearby home. + +### Sub-shape A — adjustment to an existing page (preferred) + +The route already exists. Variants are rendered **on the same route**, gated by a `?variant=` URL search param. The existing data fetching, params, and auth all stay — only the rendering swaps. This is the default; pick it unless there's a specific reason not to. + +If the prototype is for something that doesn't yet have a page but *would naturally live inside one* (a new section of the dashboard, a new card on the settings screen, a new step in an existing flow) — that's still sub-shape A. Mount the variants inside the host page. + +### Sub-shape B — a new page (last resort) + +Only use this when the thing being prototyped genuinely has no existing page to live inside — e.g. an entirely new top-level surface, or a flow that can't be embedded anywhere sensible. + +Create a **throwaway route** following whatever routing convention the project already uses — don't invent a new top-level structure. Name it so it's obviously a prototype (e.g. include the word `prototype` in the path or filename). Same `?variant=` pattern. + +Before committing to sub-shape B, sanity-check: is there really no existing page this could be embedded in? An empty route hides design problems that a populated one would expose. + +In both sub-shapes the floating bottom bar is identical. + +## Process + +### 1. State the question and pick N + +Default to **3 variants**. More than 5 stops being radically different and starts being noise — cap there. + +Write down the plan in one line, in the prototype's location or a top-of-file comment: + +> "Three variants of the settings page, switchable via `?variant=`, on the existing `/settings` route." + +This works whether the user is here to push back or not. + +### 2. Generate radically different variants + +Draft each variant. Hold each one to: + +- The page's purpose and the data it has access to. +- The project's component library / styling system (TailwindCSS, shadcn, MUI, plain CSS, whatever). +- A clear exported component name, e.g. `VariantA`, `VariantB`, `VariantC`. + +Variants must be **structurally different** — different layout, different information hierarchy, different primary affordance, not just different colours. Three slightly-tweaked card grids isn't a UI prototype, it's wallpaper. If two drafts come out too similar, redo one with explicit "do not use a card grid" guidance. + +### 3. Wire them together + +Create a single switcher component on the route: + +```tsx +// pseudo-code — adapt to the project's framework +const variant = searchParams.get('variant') ?? 'A'; +return ( + <> + {variant === 'A' && } + {variant === 'B' && } + {variant === 'C' && } + + +); +``` + +For sub-shape A (existing page): keep all the existing data fetching above the switcher; only the rendered subtree changes per variant. + +For sub-shape B (new page): the throwaway route under `/prototype/` mounts the same switcher. + +### 4. Build the floating switcher + +A small fixed-position bar at the bottom-centre of the screen with three pieces: + +- **Left arrow** — cycles to the previous variant (wraps around). +- **Variant label** — shows the current variant key and, if the variant exports a name, that name too. e.g. `B — Sidebar layout`. +- **Right arrow** — cycles forward (wraps around). + +Behaviour: + +- Clicking an arrow updates the URL search param (use the framework's router — `router.replace` on Next, `navigate` on React Router, etc) so the variant is shareable and reload-stable. +- Keyboard: `←` and `→` arrow keys also cycle. Don't intercept arrow keys when an ``, `

    yjkcOw&(>Y8mz^;5!^gv~u``#^d4Gx|bp z2-7XGTS)^qhf7!w*}02Gj=X#OF@kb6Jt3zqO+zHUi|*y6rT)zw2fWpG5HATLaEHBA?3FMMUbKN! z#PTx@LRbQWSrGV>{xDg;Y&mz%O`b0->jK)iZ$3px^C{9_{ufhP&J*iK#sD|4mEY65 zo_)#pd^kuy=pjs7EPZ($mXiA4=KVU~KK%qdoT$y{+sF>raM|L3$68%+)I;OfUJTDx z1U>Y4LD0a6u&j$I!_&)rdJZMen2S(UBFCq5k=S`7fSS^^=A=x(J*#i zKz~~J*K*g#S=`a;a@2hrk*YK539RJvg8R}@o;E{PoRRvhvd?og-ce(w(-^A772(B( zwL2heplT-AQ4b4Hp0}RR@qK_+3oDXt)Qd>>d`CW+gt~#ZDk|uueQ--tz-xBiqRf(p zSffC>me&9Q_wx4x z#)Qrvl1BIk!nP|C;SW46WI9zBNIC596gbh(Um)?0RRV@0Qr)AD2Mixv&BN8B^nL0xEYRQ+MWL)?U}O`I{8z}8Q? zqG61P(MtfE8g1vOCeR!PQzyS$q+)y+-wzSkduvQVFUmM|rHAQycjo0CzZDu)rXQXWDzDqA%HPG7qYby8MxfS z>2kznxxt&D$SV6{@UgaOVu)ace0YO7ty}dTMy^_LW@vip+jR!lQOLYfcUR}c^Y@!Jnct35&-L@u9|L%xY>y6!J@{c3l!bY^F&>hg%@dSqG{+5` zE4-aaWE0hb+H_tHF}e*kiqSi+VPyDuDOBh%0Q9PS8x*jW{fsR42v9aN&nPoT-pD;Mch2^&mj&z{}% z?ao99Xsn)nJGGiN&%)>Y*vrk5Qd)>~eENEgD#>kYk?|f?-Dc2*)GlQs5fWw2%`c@1 zquNsRdGT*p7sf+aGhl!xV{-_s@?%#S8;Q64tRn2_{uzADxkbqN!l&w_!_$_;R zdnsX>lMrYouxu71`|g>Q3b*oO4VgPmk9>qyZ|=MVra^f>#y@Cjo3Le`o&ytIK5lE8sW9IS|@f;Q>AtCT=tq~<&h4j>sRb|(%9~?-avmzJm z(1;a^3(S5?{Nf<=?U3i=pJL|ad65!sGoKsxu4*RAB1&0F-Mi^-asgy-m6dR=Z{s3z zavmTR&xu&hAESu(?TAP1rOXTC!xu7C0j{|8YD=rQ4Ws+FS?yX}djleb%}G-Eu3=yv z)mED!6H2>+u;Zxto<8<9Xt45@(?|y8300?P{epb5UOjZ0LTRvgAN0Gwa^aTvL}hcM z)9UMLmZ(pjz3255xlAiZd9kwXYEhk{s~v3B#SbqriecXENeu4c8U6V)#W*Wz7YpRb zLVC&9vT1wI*EHG3Ct7ZF#!Rq;MAkc;sIb$ya+2Ek5XwAq3L;suewr*%>z-P4&q}Ax zsEye_4g<-Mn9J*lN*ADRlVX_0btd~eEGu;uXcR_)`tC!^^j(VFwKJ-BR~mm~ZhU>= zTNr;_cxu*T!7VxB&C=LX(l&Z7ZKcou4OcsR9#@%L%ez_E-QhOB!gpU@uEl@cTj}=6 zb4utCT-AslKou@|scXX_;#vr13|;2cdxC|i810%0mPcpmHEW+^gai|EgUzEXEtq-2 zG@*;-2-P_$0p0UO1rm9p^wUi_;7Y?p7k{1K!t4@hxiGazC{z9&y8B&~{Soo0+aYe{ z$lVfa8?;-5&uRUxp?d4ZgPt(ISdo%bOB#jOF+-ujYKA}jn`5q`)J-P4USjFJZw%MhK;@VL4a^|*giXyGFs{+74$5gu-fsXz^`$=Lh literal 0 HcmV?d00001 diff --git a/web/src/assets/images/ceremony/yd.png b/web/src/assets/images/ceremony/yd.png new file mode 100644 index 0000000000000000000000000000000000000000..426912d581d699afa00e95ad5e9c54d9cdda03f7 GIT binary patch literal 4629 zcmYjVc|6qJ_y5dj$d)b4X2x!8*&<7J+4m*;RuL6al--DAD?~zwBAyc2_h!hJ#%}EU zk|jGC+wh&|dHw$Q-Pd{D`+lGEKKI^p?teGd)L4g+4o(LE0HdC+mN@``C=di(q@pbM zi)}0^WW?0a@&<)=!364|Tuo4PITTh4MdF~`Eij%|C|^Ac)dUx4hw*j8gvz1tP8fd$ zCwveg^5b76ycZ_a3&WIi!t0?3ikJWs>VsqYV8X*N(Te}Xlu#d3cmO6s*_M*{9mY+` zqJ$`Z3ixk^4IwdQ|2YXT!3s_o#ZQEaQZOauU(J7Zj8rC%@=)+E8|1=uu?20>wIXyY zjF$)({RtCTL0tWdRGfuNRzne^0bIKXg)PLjN%)nmO77_xR22$-h*a7@$WaQcgu##d zdD;z-3ka#B9-beXh`%k|y|=kKO^~%hh#r^_<=jRXx=k1P2O&EE7skW5yR4A)VhBoI z9WegA@7$Z^+|4S8-w2uYFX+_*^h`VouZY0OBPi{feTf?K;cB>osOE)_!NtbIP{WV7 z7Sqv_5vUP=t|n>3=`hdXFYbeO?%f9Nr7ZM!7<#~y>!&%gRU26+jM%B=9t%cMn!oY^ zy_AV=l0_^cq&G^?%Q@&C7p{#`^gN%>0AAUN>GoOO$cjKB%LJdCP>UKa9Y>{(` zsBT9tQYZIH9(qT^i3D=ykT^T1!h*WM3$a z3^EyOFYxuWG?ePdeiIv{rgFIOPsAg=s;c6>M)%GhPXJ)5(bH153>aS@H!!hKhqmuL zo%?-N!87Rf6XI3RRat?ghZ#o|7!Ht`8Q2Nid81V~#_~2e`nd-0Ke4f~+8kj{%av8i z+q4A2sY**7L1wR!FK0RM|J(Grh;Hm)+?`f8e<<720y;I#ELo0Qm)opX1+mj z=WAYq-PzmnLwm?J50R zI7O3U+wM=kuBfEuT2oCOu7o0vee_GR*P;Bk(&&R2E9qNzn$ND(g8hi9^e>>UWpgO9ddq=E@gsIW)?!9Pfe zET8zB4=#PX=oh_{$P#C8_WFKDqbHRa(Bb9r@Qta~<$UH3B4eMmb4NBOvQr)x5+BIHbpX+^aUjH-L_KwF^w801U&&Zz9=2yG zfSvj9X>irq!Oo}ItyjgTTnA$>nsYB_qDk|TX3f@i7RFh%mOi{5a2V4M18(Om>^BV0 z)p@?Z8o>Xw&`F-~n%m0OnTTb>r(D%7cU>`>%F=-gZ6N+&ktCH@X2XL-X}u+9Ptc9e z(k?79uLXY*{a#9+jVh&nTB-jy9Oe|A(a3$_`Wq1Jr-iLe4^d^s!Tz_><56KjSFzwj zHNiJZ_&1!bbNMbE3Ka=Yf+p_V-|W7FyRdB~Hrk1j@#(p_H#{rd>}@LCmDkv1;iyJ^ zy;C&WO})U?-o5^w+0I+@7heQ7K%#+D1BCVmHGr}hg)&rPS-ub*wOElHFxGyFXLX&n}iZfew6&$~n>yyz; ztz|;XA8xL8<-9pJsE_(qf4QktJf1VO%oWtB*`NHw&Zw2m%hlTkaLLs5im0cDg7ZA| zKWSHK$-N2T_h%%QC-(J5d_=NQ<@PhY94ddSCZg!B0)=DWPmYJ1jH^Luwx71`3Ap<4 zs&aibrDoJ-X?_+Jfwj=`djPh7rYaq&Nb(**b2N$n3#07KH`<0ZBjL?QGRY8EqTu9O>AJtwKu#hbrQhfTqw2N;-pf1 z76T&VL{qv}4zSpt<4@`6+RaFLfq^-ofx#VOPmVbp*=KHYSJwH3;kgN5anCP+^FDEK zT1&sQde2VN3~u+`k!V5dQ$HOy#rRRgsP-zBFI4pXO;7QFP+uy{kJJxUvwzzdXQ>IY zUm>Lu4**(8O*?ug=TV^1#rt28D^*N$zSp4L_AxKDDc_IYP+;c!V9@q42~3T3%3xT_ z^Ir%<1#d#EGuiKbBO#T9L~p8Qvh0`+J=}fwz|F;@GzmNI9{ai}EvB%=Ha*O;Gn$DY ztS}6=5Jceo(#xMgB)uG-d9$fQ3^R*|ChYxp9y#;HHEw@<@HJ#9mm^Tn~SS9WlNM z`Si8$S|sOvpo_Eo;xpRUH|#)g_W3I!%935pB}t5|r^g!97L2IuJ^ycrDZwwtEq5cU zKRTZ6-CC*xX&=0RY%uQ-9%#{}_XQP>R1*G4S(;-CCY`5fLGiv>eo(jjURB>qh{HZ! zUVr0z3l$kz*^KEe)w<~nkr#RMW7MN_3tazko57uy`ODxs?iYt8^EE&<~)7#8ec|MzxX7jhr+K(^KkZwFtIZ7Vsa_u}6n1Uw@I z0#d4~)OYT?Rp25G6JvqZ4P>cCXIiK5X&$Ta6Zz(#8MREw>|1BM?xQ-Ioq=2QrB{|m z=Ebx&O%mk&!u5-Fdivh23VB#2K&G#Fi8ZjH{vdWfAk_S<_7kFS8As(7D1XeG=yVwhHqG{Wie251TM zj2OPCMlztU)Bx(8ORz^&edJvT0fpVP7IE1G{BVyzGBmj-@7N`MfO=dYsDe88$fPjX@nsq599&5O;a>+&L`}^hoWiMv%SE2l3#{RrW)FK50ZGpoexAE@&jpE83BJk z>_`DlyuvP%lvZ^t-?+ied7)Z&>=O1~ro1o}r?wrw2*f{gu5C>Y#vl?OgPwFy#RDNx z#Z)#tt?V~!jXz~5b!qH5&^^xreS z>>`H8`*`>+gN^05Pb&_xNFTss&fCgFkWTQaY}Ja#I=kYeW@tJ&9+njeZ-=knQa>VV zhYDfrUEGz7e+&ByvM zq_a=&6dP~ISOy3htdZW$6}D7j?fh^GXO38ozWN!lb7?Jlj|rcga6~?&a{byM?$RKb zqWcp^vKRnA*AuAiclsVTnh=|+@mnr>G_|wYp`hcC< z$(atDV$&TrrYyaNH1IfSLa2Fc&=nZ5KQ59nf~bl(^8}4(A^mJqX7v~0TsK_kF?+!C%98iuIT*D77{eD#?xXW>+bLOfndj_00+I%*9Twl`Iy>V)-=DGVCWS|Yg*r}4 zs>?Trhji$gzI~dIb?RJ0$f{WRK?~<*%1Jy$?Ei^;JoSO8@M{$yfu~Ihj|vM-^|#rd zm+#vBm`|u;KKy;a9H-*w#CGf#7#BuHi((o)`r{2|6TMqMOn2FOFuPG(V)PQrkKk#uCZR^AgU24)%=L+hG8G0cF93Nl8|M{R= zHSq8kVWqwM9pWS0J3}wn%zyNQ3?~nUU)yS0X1{UQV`Eul3%0v{!PHIJy+8Zc6f-|3 zufI}_X}i0C5}ST_pF*01W~jbvbbS<_9PwaDhvT9bwp2u_L#$98R(HavZyO%DuIbb2g zKwSx+@Hbq_fzVqE_u~n{yjwC|Dr|w@y9KsTTE$aANBet1)`{7xI@x2r8HvfrWS2?r z=&N1PgTGE9c-QtPj8SFK&NnG?qVTdZ+3@xzyWO8nyybrgJ>Km&4g>WMKV1HNF?Oi% zS3|vnn|Qa~rMIwnJ~n!@ytYFH`>bd4Hm6v-|KcR0z0jpkxQdhUfOY$$ngJ- qg9c@J?tg!GnD@{9mB8#21Pp_zjLOX}j(J}Am+9Rw)+*6(dG<|BMM6+kP&il$0000G0002T0074T06|PpNT~z>00E!_|G(Ns zdP>&gEC-4>aI}mSL&fBNsXL}+syv>j94=MI%)H#CylxpX>6X0I#k+eR&w|!^zk|en z@BjY#AKyj91gQW0|6k}k7Ocyy%Z^J)Z_`EeUp$hQTXVzP?iLzR`)3h0UYB1T#vgHhz3)qNI%#%=4q=3~IfzElIwB-BRE~ z7PZDP(49(*aj?D9gJ)p3Z)j3nfU#tn$z@^tP9_;P!TwQdqatf4q>`Y~IKWC;!96&9 zBMA-x##k$*NWBY}@o4@=!R<~;jU^{I&0bJ+gib;^xQ#ow+X2@X0y?)HVJCBq#u?_5 zX^LRn6nG1cf?$fuG6TmkZ?gaxXZxsh!FfGvF-VRh@}s*Z&h~=lIV#4$xS7G&C_@Bm ziNL^dJ7dQ{HEJR8{%?$vfUlLHdx*p`z?EWq2q@2@&~98^Cadi%~eB8&def^HvL$BUvYg1^h*TP z0tXjUT#bW|?-Ee2+8e33F2>{xfN=y=&e$nEthn9@KhIH6n~bq=A+5M>zUK+D6x68e zwe1|F*ggbbOAQp1T3>*vqO`A3@jVIt?xUfCsZSoeXH0C4J~^RLF+S*a><=c&RCg7Yk(Qvhqh1725H zPUoey%n-UP)t#>C4lf76@(?>SQ2TC9=7Z;>R#LE;;iI7p!xGlo=(cj2k5>&>#UZtg zt60HOE=GXwowfDC?wtlEjxmPjTGqk#`#j7C=Y<-ERji?tgH-ez!xdImcMSFmbqu@@ z=F`>8g3HJKYcGB1i-8P1jkT; z+gpC^MH0rD-zmk@WiTCSN1d zR*1GVf>4ia&`oD8q&tyHIucKzp2#PV?>ZW-5OAC(aYI7r4hTFC8BcfDSQgT)z}Y8| z^82nvLCzUBL64wLyO|0}FLQETRHY^dEs*t22VKHKy}cf3yi0WJAG93x3ufd6WI1*DO zqa1gZg>+}4a^7-YM1>|raZ_15rJaGIIb=bPXs#`7QiOv+*?bs=T5BDKT8DY9LtTBS zwGP8D)S(V_=rFJQ4MVN-T5Fxx)#tU=I(&4M|KIO8;_r!ArJNw@$q`kwR>}OLptvZM*;^4A!??h$R;drK{z(2?7NOu?EB9d|#9GOQP#J06fjYbGb6r?QY%>x%oi#?@#x>;2^7 zUyCsn;U^P5X48F3(YkItV{i9ER9$L)mGN=;O=Q69CI?w00091zx&QzG00AqtQ~@t_ zDtr8k+lNU_!6#Bizj1$NdzvoZ=m-;dV{Z63?n}4XD2@#5RNs@UjJKwGd?tf-+Zv|l zc!2)l6JE~I<~vLbd5maQH$xg)L0%uMlc+gna$Z_c8=%_I`)n1i6ROtrYI=I^MOplM z0(;toi3g)*QFGtSoA=g~V6^#NOmwd(g+*My#0dj+?Bj52E)<1RSgf7vX|u-ap)$}e zM5*yg%MZAs@N?fAfrdz6s$Sh8p4?D%wN^mAaF#5==8Snj>*Dwk$VJKB`FJgu$F$NT zF~xx8NnvtVzfU*#!n#W7NPQj^_1B;S~?k2!>^ur;$yh_L2BZD2`)S7vX>9D^}Cnc*+QljsXW_{nek~6 zB}wx*!9d=`{(mQuR$Kc)hrPzF>{6U#HHiL(SpD9oB$kImI#4kiuN2-2BzzvtO|VCL|FqjD zURDi%1^2hSD|L20Mj6XBwPI5k=@=ev^t$H`Skza#M@^l)*C-);^X;|%53)R;{Fo#C zpnjR8rZ(F}HGB@T&gz;>=F)N4nV9MOWGAk$=|J3Da)w=1v6_pQA1MHz?V%gx)@t+B4S72LOf04@B8&sZ{WNip% z2r;nitrPc%IF<3Ouf|rg0~W~pNlP9;jMA9ga0#l9%K?p9ygb);V4>>*aaf3=Umf%I z2H6oG<-KP=KLj`vyIFkaM!hV`7AnaD$V)`K8sN-G5l~8IK7YiqzA7do9){EnyivOL zfN8JbX3JDBALx0`ReIXSb20lqQb{Ot1CsBcB^x3^s|RtfW!ebra?h$ZaFJ_M;@04F zzHv?AY)vaK5F7vo`d20bUKtynFIo3s06unGA{0m)_p}NQS-lFuYoAw+e(w8$KGlyq z>;~?4CUQBA8#>(J@Em|Hr0CLa(0002I{J<6f literal 0 HcmV?d00001 diff --git a/web/src/assets/images/draw/draw1.png b/web/src/assets/images/draw/draw1.png new file mode 100644 index 0000000000000000000000000000000000000000..da5d87a3528ce62da611614d3cf3ed57c8b0288f GIT binary patch literal 11315 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 Q{0ji6DrrHR6s@EF2ReyiTmS$7 literal 0 HcmV?d00001 diff --git a/web/src/assets/images/favicon.ico b/web/src/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..21e7063503b8c6eaaad646f6592ff0372aa0cf88 GIT binary patch literal 4286 zcmeH}S!`5Q7{^ZmX^4%bgOEf`9AQ5&B8oFA?$zA!I!YZ;>n%y{{bj?D_FL0{^85fX7IpmzXuNGUKjz zsqSE+ROd>RXb=$jMCCKi_Y1J^o>{Yy4P-D{>;kHF0vQD^a=K zC3Trya<9cDQT3sGR+kj8y2POE06$o;DK@zOg=nei?L=vA2-lZUFs&RMqsnuD(}d42 zC&ek}97tT+4$(7N5IMFPBF8tw#E+Zd$;mAcJDUl7LoPs{8RUMH&jND53Ubg2Fvx&3 zWPivHz!u&0FStoJG<7Wz)l+9O7X^JU$ z^a_tMg&IAGwT7g;Mx37u(Njt9lem{e#Ws*J{(y0Z0aS zw!$z(J!)PRE_$j;`cjxGw+4AslM zEK$F>zTAjvqQX5iqpl#k1=X6A&}fWG-DXb7yXt)^_Hx+qNEpe_5=Zj1*HFC5NMdfw zMy^Ufs?`?eTlFr~VxFhilES7;RErUy71fTqifoj0)y(sqj?YBDty;#KSL$v6<4$WH z^Dcy)-;IS1ElPxoHU7AF7lCtY2y9?8`()N);2Ps1N*xZ z)nx{;i)oE@7Ovp^J2px|=1(Q>*zd`HbNs@N6sB_{`5Idt#N0OW#N&LKa~pb+Y#r8F zvc9D{WKuSbH}&0$bwxdQAiERQjWvGF3{sDIjO%f36?$ysK~o8lf{rib0Y;{EFAv+| ze0azEaNSHE4o-Vl`Qh^)5#D1U@oGko=f@)Um&TvUxkPh~Y*}F=AK5bPZ~BhuMelvK zN8U2|wLS7SM@_89dp zp?9U$sP{HhN0JSc-Gh5Tw$yLE&iV4wdEX9Yxk%3*f?OgD=DjC|?A2np;7wt8y5>~o z+%xNCNWyD>jjuKRmaIA2V>Iu`#d@RO>IZSTcIifvVXz-vipMW=;uwLsvvChcSK9^{((VC;)X`OeeF~>8$-=uz~hV>V} z$oqF{%SJBf$XJPC+2mz?j^H&M7Mjh@L@TqBZ!u|e78*oron)eR$8w?G+@N@;{3-9W z=9HXc+@TNq&1bpC`SRWp{B~`*`=w6u$N4>rqZf5wa}_z0Vx122W)OrfOI575C@tPo zsLfqyz&Dx*+sI^yO~${Ibw|A?W3Sd5{;tZR-~QEKzn)Fu2X|{rO_W&)>Q(%IVN~$s zV*K=2tN7i1OPmilbwXfzuiBU93?>>2Ntfqz3g2uwDygx@y3@SV-*i6{5C#fYi379y zIa+Qa(Q@-U`1>4@>d|{U_G>T3EocET!ZtIj#TL_WvhI*idky0* z`^-`FVwHS)^4Ra1wLr|n;CtP+lJ^>Y@)cxvW95rh zk=t?!*T&>YS4~l+?r6WEchP6PFcH|5IvIF6m-icX6KLN`;*Iu9vE9;%{drdk+J@PI zyj^#FA1)dX?wLV(_At>|NTMCZOT`XLi4uF->ptu6@qWj8*0*pR$6EIinAkuP-9^jA zK1VtqELu6{Kb$hrxBuC|d7et$_#WwUtQNbipNqY=W4zC~1%QypzE9_w{ruMR2>gE{ z0P`G2=ihz`-ltmJiy9>)b(Abgi;$(Lw6!c*yH+IWX(Gu;l@%RH1tO-xQ8^X9gf#HY I1HxPX0yQi+Qvd(} literal 0 HcmV?d00001 diff --git a/web/src/assets/images/lock/bg_dark.webp b/web/src/assets/images/lock/bg_dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..1c334354f0145e7ae1d91c8d51022fb8067d0b83 GIT binary patch literal 70592 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

  • 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 z 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 hksZO_^KKRiPkv2R-NKxB1~z>PJW%dlO@ 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