已确认类型为 string 的候选权限 key;若输入来自 unknown 边界,调用方须先完成字符串检查。
与 MINI_PROGRAM_PERMISSION_KEYS 中某项精确相等时返回 true,并将 TypeScript 类型收窄为
MiniProgramPermissionKey;未知、历史或格式不同的字符串返回 false。
当前 canonical key 集合固定为:
userInfosteamLibrarysharestoragecloud_storagefilesystemclipboardleaderboardnetworkcompanion匹配大小写敏感且按原字符串执行。该 guard 不 trim,因此 ' network ' 返回 false;历史权限 key
network.request 也返回 false,即使同名 capability method 仍是公开 method。消费完整 schema v1 权限快照时
应使用 parseMiniProgramRuntimePermissions,由解析边界统一 trim,并把历史 network.request 归一为
canonical network。未知的 future key 同样返回 false;本 guard 不负责 parser 的前向兼容忽略策略。
类型谓词只把字符串收窄为 MiniProgramPermissionKey union,不读取权限 entry、status 或 config,也不检查
Manifest。返回 true 不表示权限已声明、平台已批准、Runtime snapshot 中存在、status 为 enabled、Host 支持,
或当前 capability 已获准执行。尤其 network 与 companion 还需要平台批准;其他 declaration 权限也继续受
各自适用的 Host、用户授权、可信手势、参数与业务策略约束。
MINI_PROGRAM_PERMISSION_CATALOG 提供每个 key 的展示信息、access、风险、配置字段和 method 集合;具体 bridge
method 是否要求某项权限应以 MINI_PROGRAM_PROTOCOL_CAPABILITIES 的 requirement 为准。kind: 'none'
的 method 不会因为某个 key 被本 guard 识别而新增权限要求。
import { isManagedMiniProgramRuntimePermissionKey } from '@heybox/hb-sdk/protocol';
function acceptPermissionKey(candidate: unknown) {
if (typeof candidate !== 'string') return undefined;
return isManagedMiniProgramRuntimePermissionKey(candidate) ? candidate : undefined;
}
acceptPermissionKey('filesystem'); // 'filesystem'
acceptPermissionKey('network'); // 'network'
acceptPermissionKey(' network '); // undefined:guard 不 trim
acceptPermissionKey('network.request'); // undefined:legacy key 只由 snapshot parser 归一化
判断字符串是否是当前协议目录管理的 canonical runtime permission key。