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

4.2 KiB
Raw Permalink Blame History

VAST 实际发布契约

PKG-VAST-01;固定内容见 发布及SDK归档。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规则始终无法加载时,可以记录并跳过,留给用户 后续处理。仍记录实际失败与未验证范围;本轮注册表/归档下载正常,未使用此例外。