提交图

73 次代码提交

作者 SHA1 备注 提交日期
XuqmGroup
ac7e941744 fix(metro): 取消 withBugCollect 自动链式,避免破坏 Metro 0.84 dev 打包
- common/metro: withXuqmConfig 不再自动链式 withBugCollect(保留 .xuqmconfig 单点同步)。
  customSerializer 方式的 sourcemap 上传在 Metro 0.84 下不可靠:覆盖默认 serializer 后
  无法经 package exports 取回默认序列化,dev 打包会报 "Cannot read properties of undefined (reading 'code')"。
- bugcollect/metro: 还原 customSerializer 回退实现;该插件仅建议显式包裹在已有 serializer 之上。
- sourcemap 上传后续改为 react-native bundle 后独立脚本上传。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 19:04:55 +08:00
XuqmGroup
d51d3c934d feat(common/metro): .xuqmconfig 单点放置——自动同步到原生 Android/iOS
宿主只需在 RN 侧放置一份 .xuqmconfig;构建/运行时 withXuqmConfig 自动比对并
复制到 android assets/config(供 XuqmMergedProvider 自动初始化)及 iOS 资源目录,
缺失或内容不一致才写入(幂等)。免去 RN/Android/iOS 三处分别放置。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 18:45:17 +08:00
XuqmGroup
4d5adf447a fix(bugcollect): HttpInterceptor 用 globalThis 替代 global,修复消费端 TS 找不到 global
BugCollect.startCapture 自动启用 HttpInterceptor 后,该文件进入消费端类型检查图;
部分 RN 工程 tsconfig 未提供 `global` 类型,改用 globalThis(可移植)。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 18:26:40 +08:00
XuqmGroup
4d2b834f96 feat(sdk): 下载相册/进度、XWebView内联config、上报限频采样、版本忽略、push桥接原生sdk-push
- xwebview: 下载支持公共Downloads/相册(CameraRoll懒加载)/JS进度/openFile;XWebViewView 新增内联 config prop(同屏多实例不污染全局)
- bugcollect: startCapture 自动启用 HttpInterceptor + 按指纹滑动窗口限频 + setSampleRate 采样(降低服务端存储压力)
- update: ignoreAppVersion/clearIgnoredAppVersion/getIgnoredAppVersion 客户端忽略版本(强制更新除外)
- common/metro: withXuqmConfig 自动链式 withBugCollect(Release 包 sourcemap 自动上传)
- push: 桥接完整原生 sdk-push(Android Kotlin + iOS Swift + JS 薄层),删除旧反射实现;单一 XuqmSDK.setUserInfo 驱动厂商检测/token/绑定

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 17:50:29 +08:00
XuqmGroup
1567c673ea feat(bugcollect): 集成符号化服务支持移动端堆栈解析
- 添加 symbolicator 服务配置到 docker-compose.yml
- 配置 bugcollect-service 连接 symbolicator URL
- 设置 symbolicator 端口映射和资源限制
- 添加源码映射文件挂载目录
- 为 RN/Android/iOS/Flutter 堆栈符号化提供支持

docs(xwebview): 更新已知问题文档

- 记录 RN 0.85 Bridgeless 模式下 react-native-blob-util 崩溃问题
- 说明 react-native-blob-util 在 JSI/TurboModule 下初始化失败原因
- 提供宿主 app 使用 XWebViewContent 替代方案
- 添加待修复方案说明
2026-06-22 17:43:00 +08:00
XuqmGroup
988582e9df fix(common): useRequest.fetchAsync 不再重复包装响应拦截器已处理的 RequestError
响应拦截器(如 useApi.ts 中的错误转换)产生的 RequestError 会被
fetchAsync 的 catch 块再次包装为 RequestError('网络请求失败', 'OtherError'),
导致原始的服务器错误消息(如"系统异常")丢失。

现在当 catch 块收到的错误已经是 RequestError 时,直接透传而不重新包装,
保留拦截器中已经提取好的错误消息。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 15:35:49 +08:00
XuqmGroup
51e016e185 fix(xwebview): 将 react-native-blob-util 改为懒加载以兼容 RN 0.85 Bridgeless 模式
静态 import 会在模块评估时触发 fs.js:14 调用 ReactNativeBlobUtil.getConstants(),
在 Bridgeless 模式下 TurboModule 未注册时返回 null 导致崩溃。
改为在函数体内 require() 延迟至实际下载时才初始化。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 09:23:17 +08:00
XuqmGroup
ff8f34e5a4 fix(common): 修复 useRequest data 字段类型推断 2026-06-20 18:36:09 +08:00
XuqmGroup
1143224194 fix(common): 对齐 @szyx-mobile useRequest 行为并修复 POST body 丢失
- 修复 useRequest POST/PUT/UPLOAD/POSTFORM 请求忽略 fetchAsync data 的问题
- RequestOptions 增加 tag/log 字段,与旧项目兼容
- 导出 ValidationError,供宿主二次封装使用 instanceof 判断
- usePageApi 支持 list 与 records 两种分页字段
- 升级 devDependencies 版本(axios 1.18.0、zod 3.25.76 等)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 18:26:45 +08:00
XuqmGroup
1f72b415dc feat: RN Metro 插件实现 Sourcemap 自动上传
- 读取 xuqm.config.js 或环境变量获取 API URL
- Release 构建时自动上传 .map 文件
- 支持自定义 sourcemap 路径
- 异步上传不阻塞构建

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:58:27 +08:00
XuqmGroup
6a43e5e560 fix: rn-bugcollect package.json 包含 metro 目录
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:28:25 +08:00
XuqmGroup
0cf264cdf6 feat(core): 添加请求签名功能并扩展更新接口
- 在 SDKConfig 中新增 signingKey 配置项
- 在 ConfigFile 中添加 signingKey 序列化支持
- 实现 API 客户端请求签名拦截器,支持 HMAC-SHA256 签名
- 在 XuqmSDK 中管理 signingKey 的存储和读取
- 扩展 UpdateApi 接口增加 currentVersionName 参数
- 在 UpdateSDK 中集成设备信息和版本号上报功能
- 为 RN SDK 添加签名密钥管理和 HTTP 请求签名注入
- 实现跨平台的 HMAC-SHA256 签名算法支持
2026-06-19 01:27:56 +08:00
XuqmGroup
a9f320db63 docs: 更新 README + 配置文件规范 + 架构总览(BugCollect/withXuqmConfig)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 15:34:48 +08:00
XuqmGroup
4f5739da1f feat(common): Metro 插件自动发现 .xuqmconfig 配置文件
新增 withXuqmConfig(metroConfig) Metro 插件:
- 扫描 src/assets/config/ 下的 *.xuqmconfig 文件
- 通过 resolveRequest 拦截 @xuqm/autoinit-config 模块
- 宿主只需放入下载的 .xuqmconfig 文件,无需重命名

对齐 Android SDK 的 ConfigFileReader 逻辑。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 15:01:39 +08:00
XuqmGroup
d6c42ecf56 fix(bugcollect-rn): 修复 BugCollect-API-v1-Review RN SDK 问题
- types.ts: 新增 BreadcrumbItem 类型;DeviceInfo 补全 brand/sdkVersion/screen/locale/timezone/isEmulator;UserInfo 补全 username/email;IssueEvent 新增 breadcrumbs 字段
- BugCollect.ts: 新增 addBreadcrumb API;新增 captureFatal API;_getPlatform() 支持 harmonyos;_getDeviceInfo() 采集完整设备信息;版本号改为常量;sessionId 加长
- LogQueue.ts: 按 level 分级持久化——fatal/error 写 AsyncStorage(进程崩溃后仍可重传),其余仅内存;重试时只重新入队 fatal/error 事件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 09:26:26 +08:00
XuqmGroup
76099d897e feat(bugcollect): 更新 API 端点并改进数据结构
- 将 Android SDK 的 mapping 上传端点从 /log/v1/sourcemaps/upload 更改为 /bugcollect/v1/sourcemaps/upload
- 将 RN SDK 的 API 端点从 /log/v1/ 统一更改为 /bugcollect/v1/
- 在 LogQueue.ts 的请求体中添加 sentAt 时间戳和 SDK 信息
- 重构 BugCollect.ts 中的事件结构,将 appVersion 重命名为 release,添加 environment 和 sdk 字段
- 将 JS 错误上报的类型从 js_error 改为 issue,并调整错误级别分类
- 为 warn 和 info 方法添加完整的 issue 事件结构
- 在 types.ts 中添加新的数据类型定义,包括 Level、Platform、SdkInfo、ExceptionInfo 等
- 为 IssueEvent 添加详细的异常信息结构,包括类型、值和堆栈跟踪
- 添加完整的错误收集 API v1 规范审阅报告文档
- 在数据库迁移脚本中为日志表添加新字段,包括级别、环境、设备信息、SDK 信息等
2026-06-17 18:02:10 +08:00
XuqmGroup
57579d2871 refactor: @xuqm/rn-log → @xuqm/rn-bugcollect
- packages/log → packages/bugcollect
- XLog → BugCollect
- logApiUrl/logEnabled → bugCollectApiUrl/bugCollectEnabled
- withXuqmLog → withBugCollect
- typecheck 通过

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:39:18 +08:00
XuqmGroup
a53438a3f0 docs: rn-log → rn-bugcollect 重命名
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:18:35 +08:00
XuqmGroup
b6581adc51 fix: 代码质量清理 — XWebView Pressable/Clipboard、configCrypto 消除 any、UpdateSDK AsyncStorage 优化
- XWebViewView/XWebViewScreen: TouchableOpacity → Pressable
- XWebViewView/XWebViewScreen: Clipboard 改用 @react-native-clipboard/clipboard
- configCrypto.ts: 6 处 any 替换为 SubtleCryptoLike 接口
- UpdateSDK: CachedRnBundle 移除 source 字段,AsyncStorage 仅存版本元数据
- xwebview 添加 @react-native-clipboard/clipboard peerDependency
2026-06-16 14:48:47 +08:00
XuqmGroup
611f2ba95d fix: 功能缺陷修复 — ImSDK login await WebSocket、fetchHistory 支持 GROUP、License 改用 apiRequest、LogQueue 重试上限 2026-06-16 13:49:30 +08:00
XuqmGroup
a0c54ae191 fix(update): 移除不存在的 NativeApkInstall 引用 + 下载 bundle 后校验 MD5 2026-06-16 13:37:45 +08:00
XuqmGroup
2a40d6200b fix: @xuqm/rn-common 从 dependencies 移到 peerDependencies,避免宿主项目嵌套安装旧版 2026-06-16 13:27:23 +08:00
XuqmGroup
8f0a940830 feat: xwebview handleDownloadRequest + README 更新
- 新增 handleDownloadRequest() 统一下载处理函数
- 导出 download 相关工具函数
- 更新 rn-update 和 rn-xwebview README

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:25:46 +08:00
XuqmGroup
0431b3d694 fix: 所有包添加 files=[src],排除 tsconfig.json 等开发文件不发布到 npm 2026-06-16 13:22:54 +08:00
XuqmGroup
e5130c4627 chore: 版本号恢复为 base(Jenkins 发版时自动处理 SNAPSHOT/Release 后缀) 2026-06-16 13:14:46 +08:00
XuqmGroup
4e80b0bf4e fix: rn-log ErrorCapture 类型修复 + 依赖版本对齐
- ErrorCapture.ts: global → globalThis,移除 declare global 冲突
- index.ts: 移除不存在的 UpdateDownloadProgress 导出
- 各 package.json 版本号对齐

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:10:16 +08:00
XuqmGroup
b2058840bc feat(rn-log): 添加 metro plugin 存根 — withXuqmLog
打 Release 包时自动包裹 Metro config,后续补全 SourceMap 上传逻辑。
2026-06-16 12:20:04 +08:00
XuqmGroup
4c3019edab docs: 添加 CLAUDE.md + 各 package README + 架构总览 + 模块待开发说明
Agent 8 文档生成:
- CLAUDE.md 项目上下文
- 各 package README (common/update/push/im/xwebview/license/log)
- docs/架构总览.md
- docs/模块待开发说明.md
2026-06-16 12:14:52 +08:00
XuqmGroup
16750b0421 feat: rn-update 进度回调 + rn-xwebview JSBridge + rn-log v0.1.0 新建
Agent 3 — rn-update:
- downloadPlugin/downloadApk 新增 onProgress 进度回调
- checkAppUpdate/checkPluginUpdate 版本缓存(30分钟 TTL)
- 新增 UpdateDownloadProgress 类型导出

Agent 3 — rn-xwebview:
- XWebViewBridge 补全标准 JSBridge handler
- getDeviceInfo/getToken/getUserInfo/openNativePage/closeWebView/showToast

Agent 4 — rn-log v0.1.0:
- XLog 主入口:event/captureError/warn/info/startCapture
- LogQueue:AsyncStorage 本地队列 + 批量上报
- ErrorCapture:JS global error + unhandledRejection
- FunnelTracker:漏斗分析
- fingerprint:SHA-256 指纹去重
- HttpInterceptor:rn-common HTTP 错误自动上报
- NativeLogReporter:TurboModule spec
2026-06-16 12:10:28 +08:00
XuqmGroup
97d4d9498a feat(rn-common): v0.4.0 — api/ui 子模块 + config 扩展 + autoInit 修复
- 新增 api/ 子模块:useRequest、useApi、usePageApi(替换 @szyx-mobile)
- 新增 ui/ 子模块:showToast、showAlert、showConfirm、configureToast
- 新增 globalErrorHandler:setGlobalApiErrorHandler
- config.ts 新增 logApiUrl、logEnabled 字段
- device.ts 新增 manufacturer、vendorVersion 可选字段
- autoInit.ts 修复静默降级,__DEV__ 模式下 re-throw
- index.ts 补全 api/ui 导出
- package.json 版本升至 0.4.0,新增 axios/react/zod 依赖
2026-06-16 12:01:44 +08:00
XuqmGroup
b1e8e307d2 feat(sdk): 按跨平台规范重构所有 SDK 包接口
- common: setUserInfo 成为认证枢纽,分发订阅者;移除 init()/initializeFromLicense();
  initWithConfigFile 解密后调用 initialize() 拉取远程服务配置;XuqmConfig 增加服务开通标志
- push: 移除独立 initialize/registerToken/unregisterToken 等方法;
  改由 _registerUserInfoHandler 订阅,setUserInfo 时自动完成厂商检测+设备注册+token上报
- im: 新增 refreshToken();注册 setUserInfo 订阅,自动登录/断连;移除对 PushSDK 的直接调用
- update: 支持 registerPlugins(批量) + registerPlugin(向后兼容);
  版本号自动从 AsyncStorage 读取,移除 version 字段;新增 updatePlugin(一步完成)、
  downloadAndInstallApk、setBundleCallbacks 注入宿主写入/重载能力
- license: 移除独立 initialize/initializeFromFile;依赖 getConfig() 获取 appKey/licenseUrl
- 顶层 src/sdk.ts: 移除旧 login/logout 包装层,直接重导出 CommonXuqmSDK

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 10:57:55 +08:00
XuqmGroup
8fb59bb5f2 fix(common): platformUrl 可选,不传使用默认公有平台
XuqmInitOptions.platformUrl 改为可选字段。
initialize() 内部:platformUrl ?? DEFAULT_TENANT_PLATFORM_URL。
公有云用户无需传 platformUrl,私有化部署传自有平台地址。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 10:37:57 +08:00
XuqmGroup
90ba1f9de3 fix(common): XuqmSDK.initialize() must not fall back to defaults on failure
Remove the silent fallback that used DEFAULT_TENANT_PLATFORM_URL on fetch errors.
Failure now propagates: rejects awaitInitialization() callers and throws to the
caller of initialize(). State is reset so initialize() can be retried.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 10:04:37 +08:00
XuqmGroup
07b08a4f5a feat: T-B01~B04 — XuqmBundleModule + onProgress + JSBridge/厂商文档
T-B01: XuqmBundleModule 原生模块
- Android: XuqmBundleModule.java(文件读写/manifest/路径)
- iOS: XuqmBundleModule.m(对应实现)
- JS: NativeBundle.ts 封装
- 注册到 XuqmUpdatePackage

T-B02: downloadPluginBundle 添加 onProgress
- 使用 ReadableStream 实现下载进度追踪
- checkAndCachePlugin 同步支持 onProgress

T-B03: XWebView JSBridge 标准接口文档
- docs/XWebView-JSBridge.md
- H5→RN 消息协议 / RN→H5 通信
- 下载处理 / Dialog 覆盖 / 标准 Bridge 接口

T-B04: PushSDK Android 厂商集成文档
- docs/PushSDK-厂商集成.md
- 6 厂商配置步骤 / ProGuard 规则 / 调试指南
2026-06-15 02:36:11 +08:00
XuqmGroup
ab30b28f3d feat: v0.3.0 — 自动初始化 + 插件更新 + 脚手架工具
common:
- 新增 autoInit.ts 自动初始化(对齐 Android ContentProvider 模式)
- 新增 configCrypto.ts 内置配置文件解密
- XuqmSDK 新增 initWithConfigFile / setUserInfo / getUserInfo
- 新增 crypto-types.d.ts Web Crypto 类型声明

update:
- 重写 UpdateSDK:checkAppUpdate / checkPluginUpdate / checkAndCachePlugin
- 移除 checkAndPromptAppUpdate(SDK 不做 UI)
- 新增插件脚手架 create-plugin.mjs
- 重命名 RnUpdateInfo → PluginUpdateInfo

license:
- crypto.ts 支持 XUQM-CONFIG-V1 + XUQM-LICENSE-V1 双格式
- 新增 decryptConfigFile 导出

docs:
- 重写 README.md
- 新增 docs/SDK-API参考.md
- 新增 docs/插件脚手架.md
- 新增 docs/配置文件规范.md
2026-06-15 01:44:20 +08:00
XuqmGroup
af3aa0cd43 feat(update): 添加 API Key 管理和 WebSocket 实时通知功能
- 新增 API Key 管理功能,支持外部工具认证调用平台 API
- 实现 WebSocket 实时通知,版本发布时推送轻量通知给客户端
- 添加 APK 文件哈希校验,支持已下载检测和直接安装
- 支持外部 APK 上传使用 API Key 认证
- 优化私有化部署自动注入 nginx WebSocket 代理配置
- 扩展 SDK 功能包括已下载检测、直接安装和实时通知监听
2026-06-11 12:25:16 +08:00
XuqmGroup
ce9062a0f1 sdk: auto-init from license file, promise-based init waiting
- common/sdk: add awaitInitialization(), initializeFromLicense(), markInitialized()
- license: await XuqmSDK init before checkLicense
- update: await XuqmSDK init before checkAppUpdate

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 17:57:01 +08:00
XuqmGroup
b04742fb9c feat(license): add @xuqm/rn-license package
Implements device authorization for React Native:
- AES-256-GCM + PBKDF2 decryption via react-native-quick-crypto (lazy loaded)
- AsyncStorage persistence with @xuqm:license:* keys
- 10-minute in-memory + persistent cache with offline fallback
- LicenseResult discriminated union type

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 02:25:38 +08:00
XuqmGroup
7aebf47ce4 chore: bump version to 0.2.2 2026-05-14 19:21:21 +08:00
4731a0f7bd fix: restore shim paths in xwebview tsconfig to fix async-storage type resolution 2026-05-14 18:14:16 +08:00
XuqmGroup
6229f1bb2b fix: add async-storage to devDependencies for typecheck 2026-05-14 17:40:03 +08:00
XuqmGroup
bb4cd9ac29 fix: add missing @react-native-async-storage/async-storage devDependency to xwebview
修复 Jenkins 构建失败:xwebview 类型检查通过 paths 解析 common 包源码时,
缺少 @react-native-async-storage/async-storage 依赖导致 TS2307 错误

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 17:34:59 +08:00
XuqmGroup
95b19c27b3 fix: add type annotation for permission request parameter
修复 Jenkins 构建失败:XWebViewView.tsx:364 参数 request 隐式为 any 类型导致的 TypeScript 类型检查错误

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 17:31:11 +08:00
XuqmGroup
6d7cd0be6c fix: add missing dev dependencies for xwebview types 2026-05-14 16:53:22 +08:00
XuqmGroup
d45c756473 docs(android-sdk): 添加 Android SDK 完整文档与模块配置
- 新增 Android SDK 主文档,包含模块结构、集成方式、快速开始指南
- 添加 sdk-core、sdk-im、sdk-push、sdk-update、sdk-webview 各模块详细说明
- 配置各模块的 build.gradle.kts 文件,设置依赖和发布选项
- 更新 gradle.properties 版本配置和编译参数
- 重构 XWebViewView 组件,增加相机权限、文件选择、下载拦截功能
- 添加 XWebViewTypes.kt 定义配置类和控制器接口
- 集成 Flutter WebView 桥接代码,实现跨平台功能对齐
2026-05-11 15:21:54 +08:00
XuqmGroup
005860814d docs(deploy): 添加部署文档和安全设计规范
- 新增 XuqmGroup 部署文档,包含部署方案、架构建议和部署步骤
- 添加安全设计规范,涵盖密码安全、AppSecret验证和服务端API认证
- 补充平台REST API规范,定义Server-to-Server调用接口和错误码
- 创建Java IM服务端SDK计划文档,规划Maven包发布和接口实现
2026-05-08 18:32:00 +08:00
XuqmGroup
09d42fa94f feat(update): 添加应用更新检查功能支持用户ID参数
- 在UpdateApi接口中新增可选的userId查询参数
- 新增UpdateSDK对象用于统一管理应用更新逻辑
- 实现应用版本检查、下载安装和APK文件处理功能
- 添加下载URL规范化处理逻辑
- 在Flutter SDK中新增update模块实现跨平台更新功能
- 在iOS SDK中新增UpdateSDK类提供应用更新检查接口
- 支持Android和iOS平台的应用商店跳转功能
- 添加React Native SDK的更新检查和插件注册功能
- 实现RN Bundle的检查、下载和缓存机制
2026-05-08 12:00:34 +08:00
XuqmGroup
9adc3e3084 fix: relax xwebview webview typings 2026-05-08 10:01:35 +08:00
XuqmGroup
77feb6ecd9 feat: make common http independent 2026-05-08 09:27:38 +08:00
XuqmGroup
5bddc9b167 chore: sync local changes 2026-05-07 19:39:41 +08:00