package.json#heybox.companions 中声明的 Companion alias。必须完整匹配
[a-z][a-z0-9-]{0,31}:长度为 1 至 32,第一个字符是小写 ASCII 字母,其余字符
只能是小写字母、数字或连字符;SDK 不会 trim 或改变大小写。
可选options: CompanionPrepareOptions可选取消信号与进度回调;字段合同见 CompanionPrepareOptions。
Host 完成原子提交后返回当前产物的冻结 CompanionInfo。如果产物已经
ready,Host 可直接返回;如果加入同 alias 在途操作,则与该共享操作一同 settle。
返回值没有 state 或 preparedAt,需要这些字段时调用
companion.getPreparationStatus。
HbMiniProgramSDKError alias、options、signal 或 onProgress 不合法时在
请求前以 INVALID_PARAMS 拒绝。真正开始新准备时,缺少新的可信用户手势以
USER_GESTURE_REQUIRED 拒绝,用户取消 Host 授权以 COMPANION_USER_CANCELLED 拒绝;
下载、归档、完整性或入口失败,以及准备被取消时,分别可能以 COMPANION_DOWNLOAD_FAILED、
COMPANION_ARCHIVE_INVALID、COMPANION_INTEGRITY_FAILED、
COMPANION_ENTRYPOINT_INVALID、COMPANION_PREPARATION_CANCELLED 拒绝。
当前版本未声明 alias、当前平台没有匹配 target、预览 Host 不支持 Companion、描述符
暂不可用或当前 Host 未开放能力时,可能以 COMPANION_NOT_DECLARED、
COMPANION_TARGET_UNSUPPORTED、COMPANION_PREVIEW_UNSUPPORTED、
COMPANION_DESCRIPTOR_UNAVAILABLE、COMPANION_UNSUPPORTED 或 METHOD_FORBIDDEN 拒绝。
当前运行快照缺少或未启用 companion 权限时分别以 PERMISSION_NOT_IN_SNAPSHOT、
PERMISSION_DENIED 拒绝;Host 返回非法状态、进度或产物描述时以
COMPANION_HOST_FAILED 拒绝。握手失败、SDK/Runtime 已销毁及其他 bridge 或 Host 失败
会保留对应 SDK 错误码。
准备由 Host 持有,包含下载、SHA-256/归档校验、受控解压和原子提交。真正开始一项新 准备前,Runtime 要求新的可信用户手势,并展示一次 Host 授权;调用应直接发生在准备 按钮回调中,作为该回调的第一个异步操作,不要预先等待握手或其他 Promise。
同一小程序 identity、版本、target 与 alias 同时只运行一项准备。状态已经
preparing 时,再次调用会加入同一操作、复用下载并接收进度,不重复授权;状态已经
ready 时也不重复授权或下载。因而 join/ready 快路径可以在没有新手势时完成,但业务
不应依赖它绕过真正新准备的手势要求。
页面 reload、最小化或进入后台只断开当前 observer,不会取消 Host 操作。新页面先调用
getPreparationStatus() 恢复 UI;若为 preparing,可再次调用 prepare() 加入并继续
观察。该长操作不使用普通 SDK 请求的固定总时长 timeout,仍可能因 Host、网络、权限
撤销或 Runtime 终止失败。
onProgress 只用于展示,完整阶段为 downloading、verifying、extracting。业务不能
根据进度值自行判断 ready;Promise resolve 或重新查询到 ready 才表示 Host 已完成
原子提交。
在途 signal 触发或显式调用
companion.cancelPreparation 都只发送
best-effort 取消意图。取消先于提交生效时,prepare 通常以
COMPANION_PREPARATION_CANCELLED 拒绝;原子提交已开始时提交结果优先,本 Promise 仍
可能成功并返回 CompanionInfo。取消后应重新查询状态,不能直接假设
not-prepared。
prepare() 只使产物 ready,不会启动进程。真正新启动必须由另一场可信用户操作调用
companion.launch,不能在同一个点击中
await prepare() 后串联。只需要名称、target、能力、大小、签名或来源时,使用
companion.getInfo,避免触发准备工作流。
该调用需要 Manifest 声明且平台批准 companion 权限。V1 真实准备仅支持新 PC Host 的
windows-x64 与 macos-arm64;Browser Dev Host 只模拟固定进度和状态,不下载、校验或
解压真实归档,不能替代目标系统验收。
import hbSDK from '@heybox/hb-sdk'
prepareButton.addEventListener('click', () => {
const controller = new AbortController()
cancelButton.onclick = () => controller.abort()
// prepare() 是本次点击中的第一个异步操作。
void hbSDK.companion.prepare('runner', {
signal: controller.signal,
onProgress(progress) {
renderProgress(progress)
},
}).then(info => {
renderPreparedArtifact(info.displayName, info.source)
showLaunchButton() // launch 由之后另一场点击触发。
}).catch(showPreparationError)
})
准备指定 alias 的 Companion 产物,并可观察进度或请求取消。