Files

444 lines
8.0 KiB
Markdown

# 模块输入输出契约
这份文档定义 future skill 每个核心模块的输入 / 输出边界,避免后续脚本和文档互相耦合。
## 1. 通用约定
所有模块尽量遵循同一套输入 / 输出字段。
### 输入
- `target`
- 当前要补的对象名或模块名
- `seed`
- 真实浏览器采集到的种子数据
- `runtime`
- 当前 Node / jsdom / vm 里的运行时对象
- `diagnostics`
- Proxy 吐环境日志、异常日志、堆栈、缺口清单
- `options`
- 开关项,如 `protectNative`、`strictDescriptor`、`logOpen`
### 输出
- `patchPlan`
- 本模块准备补哪些点
- `patchCode`
- 可执行补丁代码或代码片段
- `runtimeState`
- 补丁后应写入的运行态
- `validation`
- 本模块对应的检查点
- `residualRisk`
- 当前模块仍无法完全脚本化处理的风险
## 2. `prototype-builder`
### 输入
- `target`
- `prototypeChainSnapshot`
- `instanceShapeSnapshot`
- `constructorMeta`
### 输出
- `patchPlan`
- 构造函数
- 原型链
- 实例创建
- 全局挂载
- `patchCode`
- 构造函数定义代码
- `Object.setPrototypeOf` / `defineProperty` 代码
- `validation`
- `instanceof`
- `Object.getPrototypeOf`
- `constructor === Xxx`
## 3. `native-protector`
### 输入
- `functions`
- `getters`
- `setters`
- `expectedNativeStrings`
- `metaOverrides`
### 输出
- `patchPlan`
- 哪些函数要保护
- 哪些 getter / setter 要保护
- 是否启用 `toString.toString` 防护
- `patchCode`
- `Function.prototype.toString` 接管代码
- 每个函数的 native 保护代码
- `validation`
- `fn.toString()`
- `fn.toString.toString()`
- `fn.name`
- `fn.length`
## 4. `descriptor-guard`
### 输入
- `target`
- `propertyDescriptors`
- `symbolTags`
- `constructorStrategy`
### 输出
- `patchPlan`
- 哪些属性用数据描述符
- 哪些属性用访问器描述符
- `patchCode`
- `defineProperty` / `defineProperties`
- `validation`
- `getOwnPropertyDescriptor`
- `propertyIsEnumerable`
- `ownKeys`
## 5. `navigator-module`
### 输入
- `seed.navigator`
- `seed.plugins`
- `seed.mimeTypes`
- `seed.userAgentData`
- `diagnostics.navigator`
### 输出
- `patchPlan`
- basic
- plugin graph
- async capability
- automation flags
- `patchCode`
- `Navigator.prototype` getter / method
- `plugins/mimeTypes` 图结构构建
- `runtimeState`
- `navigator` 实例值
- `validation`
- `webdriver`
- `plugins.length`
- `mimeTypes.length`
- `getBattery`
- `userAgentData`
## 6. `document-module`
### 输入
- `seed.document`
- `seed.cookie`
- `diagnostics.document`
- `specialCases.documentAll`
### 输出
- `patchPlan`
- basic document
- cookie accessor
- query API
- special object
- `patchCode`
- `Document.prototype` / `HTMLDocument.prototype`
- `document.cookie` getter / setter
- `validation`
- `document.URL`
- `document.readyState`
- `document.cookie`
- `document.all`
- `residualRisk`
- 若无底层支持,明确标记 `document.all` 为特殊风险
## 7. `storage-module`
### 输入
- `seed.localStorage`
- `seed.sessionStorage`
- `seed.cookies`
- `diagnostics.storage`
### 输出
- `patchPlan`
- shape
- state
- cookie linkage
- `patchCode`
- `Storage.prototype`
- state merge logic
- `runtimeState`
- 预置 key/value
- `validation`
- `length`
- `getItem`
- `setItem`
- `removeItem`
- `clear`
## 8. `fingerprint-module`
### 输入
- `seed.fingerprint`
- `seed.screen`
- `seed.navigator`
- `diagnostics.fingerprint`
### 输出
- `patchPlan`
- canvas
- webgl
- battery
- screen
- `patchCode`
- `toDataURL`
- `getContext`
- `getParameter`
- `getBattery`
- `runtimeState`
- 指纹种子池
- `validation`
- canvas 输出
- WebGL vendor / renderer
- battery 值
- screen / window 尺寸一致性
## 9. `performance-module`
### 输入
- `seed.performance`
- `seed.windowMetrics`
- `diagnostics.performance`
### 输出
- `patchPlan`
- `performance.now`
- `performance.timeOrigin`
- `performance.timing`
- 时间一致性修正
- `patchCode`
- `performance` 对象与 timing 结构
- `validation`
- `performance.now()`
- `performance.timeOrigin`
- `performance.timing.navigationStart`
- 各 timing 字段前后顺序关系
## 10. `crypto-module`
### 输入
- `seed.crypto`
- `diagnostics.crypto`
- `typedArraySupport`
### 输出
- `patchPlan`
- `window.crypto`
- `window.msCrypto`
- `getRandomValues`
- `subtle`
- `patchCode`
- `getRandomValues` 实现
- typed array 校验与异常逻辑
- `validation`
- `Uint8Array`
- `Uint16Array`
- `Uint32Array`
- 长度超限异常
## 11. `webrtc-module`
### 输入
- `seed.webrtc`
- `diagnostics.webrtc`
- `networkPolicy`
### 输出
- `patchPlan`
- `RTCPeerConnection`
- `RTCRtpSender`
- `RTCRtpReceiver`
- `RTCDataChannel`
- ICE candidate 路径
- `patchCode`
- 构造函数与方法补丁
- `createOffer`
- `createDataChannel`
- `onicecandidate`
- `validation`
- 构造函数存在性
- `createOffer()`
- `createDataChannel()`
- 是否泄露本地候选信息
## 12. `audio-fingerprint-module`
### 输入
- `seed.audio`
- `diagnostics.audio`
### 输出
- `patchPlan`
- `AudioContext`
- `OfflineAudioContext`
- `AudioBuffer`
- `getChannelData`
- `patchCode`
- 构造函数
- 音频缓冲返回值
- 常见指纹链路模拟
- `validation`
- `new AudioContext()`
- `new OfflineAudioContext()`
- `getChannelData()`
- 是否满足基础音频指纹调用流程
## 13. `worker-module`
### 输入
- `seed.worker`
- `diagnostics.worker`
- `messagePolicy`
### 输出
- `patchPlan`
- `Worker`
- `SharedWorker`
- `postMessage`
- `MessagePort`
- `BroadcastChannel`
- `patchCode`
- 构造函数
- 端口通信对象
- message 事件
- `validation`
- `new Worker()`
- `new SharedWorker()`
- `postMessage`
- `onmessage`
## 14. `math-precision-module`
### 输入
- `seed.math`
- `diagnostics.math`
- `baselineResults`
### 输出
- `patchPlan`
- 高风险数学函数差异校验
- 浏览器 / Node 结果对照
- `patchCode`
- 精度修正策略
- 或风险标注代码
- `validation`
- 与基线结果比对
- 是否命中已知高风险函数
## 15. `proxy-observer`
### 输入
- `targets`
- `logConfig`
- `skipRules`
- `maxDepth`
### 输出
- `patchCode`
- Proxy 包装代码
- `diagnostics`
- `missingPaths`
- `descriptorAccess`
- `prototypeAccess`
- `invocationErrors`
- `validation`
- 是否成功捕获 `get/set/has/apply/construct`
## 16. `stack-clean-module`
### 输入
- `runtimeError`
- `stackRules`
- `scriptName`
### 输出
- `patchCode`
- 栈清洗函数
- `validation`
- 清洗前后栈帧差异
- `residualRisk`
- 说明是否需要底层 runtime 配合
## 17. `document-all-module`
### 输入
- `mode`
- `native-addon`
- `v8-api`
- `fallback`
- `diagnostics.documentAll`
### 输出
- `patchPlan`
- 选择的实现路线
- `patchCode`
- 若有底层支持,输出接线代码
- 若无底层支持,输出降级兼容代码
- `validation`
- `== undefined`
- `=== undefined`
- `typeof`
- 调用行为
- `residualRisk`
- 清楚声明纯 JS 限制
## 18. 模块依赖关系
执行顺序建议:
1. `prototype-builder`
2. `descriptor-guard`
3. `native-protector`
4. 浏览器对象模块
5. `performance-module`
6. `crypto-module`
7. `fingerprint-module`
8. `audio-fingerprint-module`
9. `webrtc-module`
10. `worker-module`
11. `proxy-observer`
12. `math-precision-module`
13. `stack-clean-module`
14. `document-all-module`
如果站点在早期就卡死在 `document.all`,可以把最后一步提前。