Files
ArtPlayer/refactor/baselines/vast-contract.md

48 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VAST 实际发布契约
PKG-VAST-01;固定内容见 [发布及SDK归档](vast-release.json)。2026-09-12查阅npm注册表,
VAST仅发布1.0.0(2024-10-12),工作区1.2.0未发布;目标依既定政策为2.0.0,正式
发布前重新核对版本占用。此处不是未来latest承诺。
## 发布版与工作区差异
| 契约 | 实际npm 1.0.0 | 冻结工作区1.2.0 | 后续处理 |
| --- | --- | --- | --- |
| 工厂 | `factory(callback)(art)`,第二层async;先await SDK,再await callback | 同样async,可省略callback | 保持Promise与回调完成顺序,补错误/销毁竞态测试 |
| 公开声明 | export=、全局namespace;第二层错误声明为同步Result;callback参数必需 | default export;仍错误声明同步Result;新增Instance/Option类型 | 协调实际Promise与旧类型消费者,不把Ads专属批准自动扩大到VAST |
| callback字段 | art/id/ima/imaPlayer/$container/playUrl/playRes | art/playUrl/playRes/init/ima/adsRenderingSettings/playerOptions;imaPlayer/container为getter | 恢复真实发布别名并评估两套消费形状,不能漏掉旧id/$container |
| 初始化 | 回调前创建Player和container,imaPlayer非空 | init/playUrl/playRes触发懒初始化,回调初始imaPlayer/container为null | 立即初始化与惰性行为存在真实冲突,明确处置而非假称两者一致 |
| 请求 | playUrl写adTagUrl;playRes写adsResponse;都返回void | 增加config枚举覆盖,可覆盖主字段;广告播放中请求直接返回 | 保留合法请求及config用法,测试继承字段/重复/失败路径 |
| 返回值 | await后仅{name} | await后{name,destroy},destroy同步 | 核心destroy与显式SDK destroy区分,核实重建语义 |
| 容器 | `art-${Date.now()}`,display:none;交由SDK显示 | `art-vast-${Date.now()}`,黑底/pointerEvents;监听四种广告事件显隐 | DOM/ID/事件时序及同毫秒多实例待测 |
| 默认SDK设置 | new AdsRenderingSettings/PlayerOptions默认值 | 额外打开restoreCustomPlaybackStateOnAdBreakComplete和enablePreloading | 先固定真实SDK行为,禁止把默认值变化当作无影响整理 |
| CommonJS/script | Parcel namespace `{default:factory}`,window全局;main/legacy | callable、ESM/legacy和exports | 兼容旧`.default`、原dist路径和类型入口 |
| 生命周期 | 无核心destroy订阅,无自动清理 | 仍无核心destroy订阅,只有回调完成后的公开destroy | 资源所有权、SDK加载中销毁、callback拒绝、晚到事件需复现及修复 |
## SDK与历史核心
发布版依赖范围@glomex/vast-ima-player ^1.21.0,工作区^1.21.2、锁定安装1.21.2。
冻结SDK1.21.0/1.21.2的全部27+27成员及插件6成员,SHA512和SHA256校验,不把
工作区node_modules当作实际发布来源。SDK打包代码包含loadImaSdk,远程地址为
`https://imasdk.googleapis.com/js/sdkloader/ima3.js`;该远程服务不是已冻结的本地SDK
tarball,真实网络/广告行为仍需05取证。
两版SDK的公开dist/index.d.ts和vast-ima-player.d.ts都引用@alugha/ima,但仅把它
列入devDependencies。当前工作区未安装该包,TS5.9.3和4.3.5的最小VAST消费者各有
两个TS2307;记录在本步验证证据中。04应使实际安装后的声明自洽,不能依靠skipLibCheck。
发布gitHead对应核心5.1.7,源manifest哈希已固定;这是历史关联,不是该核心tarball
或媒体组合已通过。02/05应核验真实5.1.7以及5.4.1/候选核心。
## 验证边界
`vast-contract.mjs`校验三份归档、60成员、冻结Git源码与核心关联。
`vast-contract.test.mjs`执行实际发布main/legacy的导出形状,并在准确SDK注入边界
运行哈希校验过的两套源码,观察callback字段、提前/惰性初始化、Promise等待、
请求配置和Result。这里的Player是受控记录器,不是Google IMA或真实广告播放。
VM导出检查提供当前平台CustomEvent;初次未提供时触发SDK事件polyfill的document
访问,属于测试夹具缺项,不能泛称当前Node的SSR必然失败。
用户明确更正:只有VAST脚本确因VPN规则始终无法加载时,可以记录并跳过,留给用户
后续处理。仍记录实际失败与未验证范围;本轮注册表/归档下载正常,未使用此例外。