Abner
|
4c8ab4b916
|
📝 docs: 规范 Simyo 客户端与接口注释表述
将注释与测试描述改为中性技术说明,仅保留接口路径与配置语义。
|
2026-07-22 19:26:13 +08:00 |
|
Abner
|
0a70ce47cb
|
✨ feat(simyo): 完善 eSIM 更换流程(仅 EMAIL)
- 修 handleApiResponse:登录/查询体无 result.success 时正确判定成功
- 设备更换:先 GET settings/simcard,再 POST EMAIL 申请;等待验证码时跳过重复下单
- 登录识别 mfaStatus,未关闭 MFA 时明确阻断
- bad session 单独文案;UA 更新为 iOS 18.2 / iPhone12,8
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
70766c3a32
|
fix: 以 spawnSync 与路径边界校验加固 quality-check
将 node -c 从 shell 字符串 execSync 改为参数数组 spawnSync,
并用 path.resolve + projectRoot 前缀校验替代脆弱的 .. 正则与
手写路径拼接;非法扫描路径改为显式失败,避免假绿。
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
b042a47807
|
🐛 fix: 控制台 copyEsimDiagnostics 失焦时降级复制并不再抛 rejection
DevTools 调用时 Document is not focused 会导致 clipboard.writeText 失败。
Clipboard 失败后降级 execCommand;诊断导出始终打印全文,避免 unhandledrejection 与 Sentry 弹窗。
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
704d385d8a
|
✨ feat(simyo): 将 HTTP 426 等错误映射为用户可读文案
避免界面直接展示「HTTP 426」「missing X-Device-ID」等原始信息,
按状态码与已知业务短语输出中英文友好提示。
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
2bbe2f9bc4
|
♻️ refactor(simyo): 统一客户端版本与 User-Agent 配置
抽取 client-identity 作为版本、设备型号与 User-Agent 的单一事实来源;
本地与 Netlify 代理强制使用配置的 User-Agent,不再透传浏览器 UA。
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
5a65dd3d01
|
🐛 fix(simyo): 补齐请求头 X-Device-ID
Simyo 4.28+ 要求每个请求携带 UUID 形态的 X-Device-ID,
缺失会返回 400 missing X-Device-ID。前端生成并持久化设备 ID,
本地与代理同步转发该请求头,并将上游 API 路径切换为 webapi。
|
2026-07-22 19:26:12 +08:00 |
|
Abner
|
71ca8538f7
|
🔒 security: 通过 overrides 升级 js-yaml 修复 Dependabot 告警
将传递依赖 js-yaml@3 固定到 3.15.0、js-yaml@4 固定到 4.3.0,
消除 YAML merge-key 二次方复杂度 DoS(#106/#107)。
|
2026-07-22 18:03:39 +08:00 |
|
Neo Vern
|
cd23cea87c
|
Merge pull request #98 from Silentely/dependabot/npm_and_yarn/svgo-3.3.4
build(deps-dev): bump svgo from 3.3.3 to 3.3.4
|
2026-07-22 18:02:06 +08:00 |
|
Neo Vern
|
78c64989f9
|
Merge pull request #97 from Silentely/dependabot/npm_and_yarn/fast-uri-3.1.4
build(deps-dev): bump fast-uri from 3.1.2 to 3.1.4
|
2026-07-22 18:02:02 +08:00 |
|
Neo Vern
|
bf81262434
|
Merge pull request #96 from Silentely/dependabot/npm_and_yarn/body-parser-1.20.6
build(deps): bump body-parser from 1.20.5 to 1.20.6
|
2026-07-22 18:01:56 +08:00 |
|
Neo Vern
|
0ab8e1b643
|
Merge pull request #95 from Silentely/dependabot/npm_and_yarn/sharp-0.35.0
build(deps-dev): bump sharp from 0.34.5 to 0.35.0
|
2026-07-22 18:01:40 +08:00 |
|
Abner
|
0ef5ea82e2
|
🐛 fix(simyo): 升级 iOS 客户端版本至 4.28.0 修复 HTTP 426
Simyo API 拒绝过旧的 X-Client-Version/User-Agent(4.23.5),
导致登录失败 HTTP 426。同步更新前端配置、本地代理与测试页。
Closes #94
|
2026-07-22 17:49:11 +08:00 |
|
dependabot[bot]
|
3243a89011
|
build(deps-dev): bump svgo from 3.3.3 to 3.3.4
Bumps [svgo](https://github.com/svg/svgo) from 3.3.3 to 3.3.4.
- [Release notes](https://github.com/svg/svgo/releases)
- [Commits](https://github.com/svg/svgo/compare/v3.3.3...v3.3.4)
---
updated-dependencies:
- dependency-name: svgo
dependency-version: 3.3.4
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-22 09:46:07 +00:00 |
|
dependabot[bot]
|
cac7733946
|
build(deps-dev): bump fast-uri from 3.1.2 to 3.1.4
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.4.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)
---
updated-dependencies:
- dependency-name: fast-uri
dependency-version: 3.1.4
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-22 09:46:06 +00:00 |
|
dependabot[bot]
|
7b7b1aedf6
|
build(deps): bump body-parser from 1.20.5 to 1.20.6
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.5 to 1.20.6.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.5...1.20.6)
---
updated-dependencies:
- dependency-name: body-parser
dependency-version: 1.20.6
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-22 09:46:05 +00:00 |
|
dependabot[bot]
|
cfd4413a5e
|
build(deps-dev): bump sharp from 0.34.5 to 0.35.0
Bumps [sharp](https://github.com/lovell/sharp) from 0.34.5 to 0.35.0.
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.5...v0.35.0)
---
updated-dependencies:
- dependency-name: sharp
dependency-version: 0.35.0
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-22 09:45:57 +00:00 |
|
Neo Vern
|
b884cbd659
|
Merge pull request #93 from Silentely/dependabot/npm_and_yarn/brace-expansion-5.0.7
build(deps): bump brace-expansion from 5.0.6 to 5.0.7
|
2026-07-22 17:44:58 +08:00 |
|
Neo Vern
|
71e216514c
|
Merge pull request #92 from Silentely/dependabot/npm_and_yarn/axios-1.18.0
build(deps): bump axios from 1.16.0 to 1.18.0
|
2026-07-22 17:44:53 +08:00 |
|
dependabot[bot]
|
0d13254438
|
build(deps): bump brace-expansion from 5.0.6 to 5.0.7
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 5.0.6 to 5.0.7.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.6...v5.0.7)
---
updated-dependencies:
- dependency-name: brace-expansion
dependency-version: 5.0.7
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-21 14:23:58 +00:00 |
|
dependabot[bot]
|
9b122e0e7c
|
build(deps): bump axios from 1.16.0 to 1.18.0
Bumps [axios](https://github.com/axios/axios) from 1.16.0 to 1.18.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.16.0...v1.18.0)
---
updated-dependencies:
- dependency-name: axios
dependency-version: 1.18.0
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
|
2026-07-20 18:20:47 +00:00 |
|
Abner
|
81b86c7ec3
|
✅ test: 补充 Logger Release 与 env 输出用例
|
2026-07-17 21:02:07 +08:00 |
|
Abner
|
9e4411ffa0
|
✨ feat: [ENV] 运行环境日志输出 Release 版本
与 Sentry 注入的 window.SENTRY_RELEASE 对齐,便于控制台对照构建版本。
|
2026-07-17 21:01:55 +08:00 |
|
Abner
|
ce8c1dbd77
|
🐛 fix: 本地 Sentry tracing 包不再启用 replay/feedback
本地 vendor 仅含 tracing 实现,占位 API 会触发控制台警告;仅 CDN 完整包装配 replay 与 feedback。
|
2026-07-17 21:01:13 +08:00 |
|
Abner
|
53e56a2594
|
🐛 fix: 修复 Sentry 广告拦截降级与 Bootstrap source map CSP
优先加载同源 Sentry vendor,CDN 仅作回退;生产 connect-src 补充 cdn.jsdelivr.net,消除 .map 连接被拦。
|
2026-07-17 20:57:49 +08:00 |
|
Abner
|
2eda195a89
|
✅ test: 补充诊断导出与帮助弹窗防护用例
同步更新 AuthHandler 断言与模块文档说明。
|
2026-07-17 20:53:32 +08:00 |
|
Abner
|
76cba05ef1
|
🔧 chore: 脱链检查覆盖 dist 构建产物 HTML
在已构建时同步校验 dist 入口资源,未构建时跳过 dist 避免误报。
|
2026-07-17 20:53:32 +08:00 |
|
Abner
|
fef5fc9e63
|
✨ feat: 增加脱敏诊断导出便于复制到 Issue
业务页初始化后可在控制台执行 copyEsimDiagnostics(),复制非敏感环境与状态摘要。
|
2026-07-17 20:53:24 +08:00 |
|
Abner
|
700f7dbaf8
|
🔒 security: 移除 Simyo 密码状态字段并加固帮助弹窗
状态机不再持有 password;帮助弹窗改用 DOM 与 textContent 渲染文案。
|
2026-07-17 20:53:18 +08:00 |
|
Abner
|
613b5a9a2d
|
📝 docs: 对齐构建描述并标注未挂载前端模块
将构建说明改为静态拷贝与 esbuild;在模块文档中标明 api-service、performance-monitor 等未挂生产状态。
|
2026-07-17 20:49:36 +08:00 |
|
Abner
|
890e05f27f
|
✅ test: 补充 OAuth、登录、剪贴板与反馈相关单测
修复 sentry-feedback 与 qrcode 断言,新增 clipboard/PKCE/OAuth 回调/AuthHandler/showToast 覆盖。
|
2026-07-17 20:49:10 +08:00 |
|
Abner
|
0e4d378448
|
♻️ refactor: 统一业务 Logger、抽取剪贴板并加固 Simyo 会话
业务模块改用 Logger 控制生产日志噪音;抽取公共 clipboard 并保持原导出路径;Simyo 登录不落密码、Toast 改为安全文本渲染。UI 控制器保留 console 便于用户复制排查信息。
|
2026-07-17 20:48:31 +08:00 |
|
Abner
|
5f78b2e45b
|
🔧 chore: 增加生产资源脱链检查并完善质量门禁
新增 check-asset-links,接入 quality-check 与 pre-push;修正 resource-hints 中已失效的 Webpack 产物路径。
|
2026-07-17 20:48:11 +08:00 |
|
Abner
|
9340bcc132
|
🎨 style: 步骤指示器背景改为暖橘黄,与页面卡片一致
替换冷灰白渐变,采用奶油/琥珀色与品牌边框,暗色模式同步暖调。
|
2026-07-11 13:21:37 +08:00 |
|
Abner
|
f0c75ef308
|
🐛 fix: Cookie 失效时改引导 OAuth,避免打开已禁用入口
Cookie 登录暂不可用时,过期回调不再切换到 Cookie 区。
|
2026-07-11 13:16:01 +08:00 |
|
Abner
|
de9db76f56
|
🐛 fix: 恢复卡片上浮与步骤脉冲,并锁定 Cookie 登录禁用
- 卡片 hover 恢复 translateY(-5px),禁用态不响应
- 步骤脉冲恢复 scale+外扩环,使用高对比色避免黄底不可见
- updateLoginCardsState 不再随服务时间启用 Cookie 入口
|
2026-07-11 13:14:58 +08:00 |
|
Abner
|
41ec3a91b7
|
🔒 security: 通过 overrides 升级 ws 至 8.21.0
修复 GHSA-96hv-2xvq-fx4p:小分片导致内存耗尽 DoS(jsdom 传递依赖)。
|
2026-07-11 13:11:52 +08:00 |
|
Abner
|
5e55f0a569
|
🔒 security: 升级 morgan 至 1.11.0 修复 Dependabot 告警
修复 GHSA-4vj7-5mj6-jm8m::remote-user 日志伪造(控制字符未中和)。
|
2026-07-11 13:09:06 +08:00 |
|
Abner
|
e2e35fd66d
|
✨ style: 恢复装饰动画原有效果并优化动效节奏
恢复推广横幅、服务时间呼吸/脉冲等原有效果与幅度;用统一
时长 token 与更顺缓动微调节奏,悬停与后台标签暂停循环动画。
|
2026-07-11 13:05:43 +08:00 |
|
Abner
|
37998d8c82
|
🐛 fix: 加固步骤选择器并修正通知样式选择器冲突
步骤节点限定为 .step-indicator .step,避免误匹配;
更新提示的 .notification-content 改为作用域选择器,防止覆盖通用通知布局。
|
2026-07-11 12:54:16 +08:00 |
|
Abner
|
aaacbddfa4
|
✨ style: 优化前端 UI 流畅度、视觉层次与暗色模式
统一 motion token,拆分步骤 completed/active 与进度轨,弱化表单卡上浮
与无限呼吸动画;首页改中性 mesh 背景,补齐三页暗色与通知 safe-area。
|
2026-07-11 12:46:13 +08:00 |
|
Abner
|
653e06a29a
|
🐛 fix: 添加 Sentry 过滤规则屏蔽 Mobile Safari 和浏览器扩展噪音 (ESIM-TOOLS-1G, 1H)
|
2026-07-06 11:38:56 +08:00 |
|
Abner
|
5a5c3d9722
|
🐛 fix: 添加 Sentry 错误过滤规则屏蔽第三方扩展 i18n 噪音
- 在 Sentry 的 denyUrls 过滤列表中添加 `/getInitLang/` 正则,拦截第三方脚本/扩展注入的 i18n 相关错误
- 减少因浏览器扩展注入的 `getInitLang` 未定义错误导致的误报,提升错误上报的有效性
- 同步更新依赖锁定文件 package-lock.json,确保依赖版本一致性
|
2026-07-05 16:15:01 +08:00 |
|
Abner
|
32987f7ace
|
📝 docs: 更新开发命令与文档链接,修复安全文档列表格式
- 将开发启动命令从 `npm start` 改为 `npm run dev`,使命令与实际脚本一致
- 替换技术参考文档链接:移除架构说明、Giffgaff/Simyo技术参考及CORS解决方案,新增通知系统指南和安全指南
- 更新开发者文档引用,引导用户查看新的通知系统和安全指南
- 修复 SECURITY.md 中已知漏洞修复项的列表格式,将 emoji 改为 `[x]` 复选框表示已完成
- 为 SECURITY.md 中 Helmet 示例补充 CommonJS 模块系统的注释说明
|
2026-06-26 21:48:03 +08:00 |
|
Abner
|
68e931b901
|
♻️ refactor: 将日志输出格式从 JSON 重构为人类可读的字符串
- 修改 `server-logger.js` 核心逻辑,将日志输出从 `JSON.stringify` 改为模板字符串拼接,格式变更为 `[LEVEL] [function] [requestId] message | key=value`
- 同步更新 `bff-proxy.js` 和 `markdown-negotiation.js` 中的 Deno 环境内联日志函数,保持 Edge Function 与 Node.js 环境日志格式一致
- 调整 context 序列化方式,使用 `key=value` 空格分隔,无 context 时不输出分隔符 `|`,并移除 `timestamp` 字段
- 更新 `server-logger.test.js` 测试用例,断言日志输出为字符串匹配而非 JSON 解析,并增加单行输出及无 context 时不包含分隔符的验证
|
2026-06-26 21:48:03 +08:00 |
|
Abner
|
574506bcbf
|
✨ feat: 添加结构化日志支持并优化错误处理
- 在 netlify/functions/_shared/server-logger.js 中重构日志函数,统一日志输出格式,支持 context 字段覆盖基础字段(如 message)
- 在 netlify/functions/_shared/middleware.js 中增强 withAuth 中间件,注入结构化 logger 到上下文,增加 request_start / request_end / request_error 日志追踪,并记录请求耗时
- 为所有 Netlify Function(giffgaff-sms-activate、giffgaff-graphql、auto-activate-esim、verify-cookie、giffgaff-token-exchange、giffgaff-mfa-challenge、giffgaff-mfa-validation、health)添加结构化日志,替换原有 console 输出,包含请求入参、状态和耗时
- 在 netlify/edge-functions/bff-proxy.js 和 markdown-negotiation.js 中实现 Deno 内联结构化日志,生成 requestId 并统一日志输出格式,支持 INFO/WARN/ERROR/DEBUG 级别控制
- 更新测试用例 tests/modules/server-logger.test.js 和 tests/functions/middleware-logging.test.js,新增日志级别过滤、context 覆盖、多实例隔离、OPTIONS 预检处理等测试场景
|
2026-06-26 21:28:21 +08:00 |
|
Abner
|
89bacd46ed
|
✨ feat: 新增服务端结构化日志模块并完善日志相关测试
- 新增 `server-logger` 工具,输出单行 JSON 日志,统一包含 level、message、function、requestId、timestamp 等字段并支持 context 扩展
- 实现日志级别控制(`LOG_LEVEL` 环境变量),通过 `createLogger` 工厂按需抑制 DEBUG 日志并提供 `parseLogLevel/LOG_LEVELS` 供测试验证
- 新增中间件集成测试 `middleware-logging.test.js`,验证请求开始/结束/异常日志、耗时统计、logger 注入以及每次请求生成唯一 requestId
- 新增模块单元测试 `server-logger.test.js`,覆盖 JSON 结构、context 合并、warn/error 路由到对应 console 方法、以及 DEBUG 级别在不同环境下的输出行为
|
2026-06-26 21:22:26 +08:00 |
|
Abner
|
d297fa9f55
|
⚡ perf: 提高二维码生成图像清晰度的放大倍率
- 本地生成二维码时将 `createDataURL` 的第二个参数从 `cellSize * 2` 调整为 `cellSize * 4`,提升生成图片清晰度
- 边缘函数生成二维码时同步将 `createDataURL` 的第二个参数从 `cellSize * 2` 调整为 `cellSize * 4`,保证本地与线上效果一致
- 维持原有 `cellSize` 计算逻辑不变,确保二维码模块数与边距的适配策略一致
|
2026-06-25 22:25:41 +08:00 |
|
Neo Vern
|
7298ae4a0d
|
✨ feat: QR 码本地打包 + Edge Function 直接生成 (#86)
* ✨ feat: 打包 qrcode-generator@1.4.4 到本地 ES 模块
* ♻️ refactor(qrcode): 移除 CDN 加载逻辑,改用本地 import 引入 qrcode-generator
* 🔧 chore: 移除 CDN preconnect 提示,QR 码库已内联
* 🔧 chore: 清理 CSP 配置,移除不再需要的 CDN 域名
* ✨ feat: 将 QR 码生成迁移到 Edge Function,消除后端冷启动延迟
- 在 Edge Function 中内联 qrcode-generator 库(~20KB),直接生成 QR 码
- 删除废弃的 Netlify Function (qrcode-generate.js)
- 更新 server.js 移除对已删除函数的引用
- 更新测试文件适配新的 Edge 内联架构
* ♻️ refactor: 代码质量修复 — 移除死代码、消除变量遮蔽、添加交叉引用注释
* 🔧 chore: 修复非阻塞风险 — 补充 strict 模式、移除废弃 qrcode 依赖
- Edge Function qrcode-lib.js 补充 'use strict' 声明,与浏览器版保持一致
- 移除已废弃的 qrcode npm 依赖(原用于已删除的 Netlify Function)
* ♻️ refactor: 消除魔法数字、补充脆耦合和 async 技术债注释
- Edge Function 中 QR margin 魔法数字 8 替换为 QR_MARGIN_MODULES 常量
- generateQRCodeLocal 补充 async 无 await 的技术债说明
- error.message.startsWith 条件补充校验函数耦合关系注释
* 🐛 fix: 修复边界条件 — null JSON body、vendor 字符串异常、CDN preconnect 残留
- Edge Function: null JSON body 解构移到 try/catch 内,添加 null/非对象检查
- qrcode-generator: 库 throw 字符串时统一转换为 Error 对象,避免 .startsWith 崩溃
- index.html: 移除不再需要的 CDN preconnect 提示(jsdelivr/cdnjs)
* ♻️ refactor: 修复 CSP 恢复、异常归一化、自定义 Error 类、负面路径测试
- netlify.toml: 恢复 script-src 中 cdn.jsdelivr.net(Bootstrap JS 仍依赖)
- Edge Function catch: 归一化非 Error 异常(库可能 throw 字符串)
- Edge Function QR margin: createDataURL(cellSize, 2) → createDataURL(cellSize, cellSize * 2) 对齐模块边距
- Edge Function: 补充认证模型和 QR 格式变更注释
- qrcode-generator.js: 引入 QRCodeValidationError 替代 error.message.startsWith 脆耦合
- tests/bff-proxy: 添加 6 个 Edge QR 负面路径测试(无效 JSON、空/超长/非字符串 data、超范围 size)
- tests/qrcode-generator: 添加库 throw 字符串异常的测试
- scripts/sync-qrcode-lib.js: 新增库代码同步验证脚本
* 🐛 fix: 修复 server.js CSP 缺少 jsdelivr、同步脚本 CRLF 归一化、fallback 拦截校验错误
- server.js: 恢复 script-src 中 cdn.jsdelivr.net(本地开发 Bootstrap JS 依赖)
- sync-qrcode-lib.js: 归一化 CRLF 换行符避免跨平台误报
- qrcode-generator.js: generateQRCodeWithFallback 入口处拦截 QRCodeValidationError,避免无效输入触发无意义的后端降级
|
2026-06-25 22:15:17 +08:00 |
|
Abner
|
0dee45b71b
|
🐛 fix: 重构健康检查功能以支持分层认证与环境变量监控
- 将健康检查从单一响应优化为公开/私有分层架构,通过 `detail=true` 参数控制是否返回详细环境变量检查状态
- 引入 `CRITICAL_ENV_VARS` 和 `OPTIONAL_ENV_VARS` 配置列表,统一环境变量健康检查逻辑,增强可维护性与可扩展性
- 移除 `notifications-internal.js` 废弃文件,保持函数目录结构清晰,避免路由冗余
- 在 BFF Edge Function 中将 `health` 路由加入 `ALLOWED_ORIGIN` 免验证白名单,支持前端直接调用健康检查接口
|
2026-06-24 23:57:45 +08:00 |
|