尧图精选

Insomnia 模板标签沙箱插件如何在 package.json 声明 insomnia.permissions 模块与能力授权

🕒 发布时间:2026/9/12 14:37:45 📁 来源:尧图网络
Insomnia 模板标签沙箱插件如何在 package.json 声明 insomnia.permissions 模块与能力授权【免费下载链接】insomniaThe open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.项目地址: https://gitcode.com/GitHub_Trending/in/insomnia当 Preferences → Scripting 中的Run template tags in sandbox设置开启后插件的模板标签run()会在一个隔离的 QuickJS 沙箱里执行。沙箱采用**默认拒绝default-deny**模型插件只能访问package.json中显式声明的模块和能力。如果你的模板标签插件要require非基线模块或要调用context.network、context.store等主机桥接功能就必须先在插件的package.json里声明insomnia.permissions否则会直接报错。本文以仓库内的 权限说明文档 和 演示插件 为依据给出声明格式、两个授权轴的可选值、加载步骤和验证方法。声明格式insomnia.permissions 的两个轴在插件的package.json中insomnia字段下添加permissions对象它包含两个相互独立的数组{ insomnia: { permissions: { modules: [events], capabilities: [network] } } }modules决定沙箱内require(x)允许返回什么capabilities决定标签可以调用哪些context.*主机桥接分组。仓库自带的演示插件 package.json 是一份真实声明{ name: insomnia-plugin-sandbox-demo, version: 1.0.0, description: Demo plugin to manually verify the QuickJS template-tag sandbox path, main: index.js, insomnia: { name: sandbox-demo, description: Demo plugin to manually verify the QuickJS template-tag sandbox path, permissions: { modules: [events, uuid], capabilities: [storage] } } }modules 轴基线与可授予模块基线模块无需声明path、crypto可授予模块沙箱注册表中的其他模块声明后才会加入你的授权范围。文档中列出的有纯 JS 重实现events以及 M2 里程碑后继续增加的模块经过审核的 npm 库由 Insomnia 固定版本并预先打包uuid、ajv。这些库只在插件声明它们时才加载来源是沙箱独立的固定版本安装src/templating/sandbox/vendored/pkg/与 App 自身依赖的ajv/uuid相互独立避免随应用依赖升级而漂移。注意一条容易踩中的规则对经过审核的库要在run()内部require而不是顶层。Insomnia 发现插件标签时是在宿主进程中加载入口文件而uuid/ajv只存在于沙箱注册表中顶层require(uuid)/require(ajv)会解析失败从标签的run()里 require 即可。相对路径的require(./util)在顶层没有问题。capabilities 轴基线与需声明的能力没有某个 capability对应的context分支会直接不存在例如context.network undefined因此可以在代码里做特性检测并优雅降级。Capability授予的内容是否基线rendercontext.util.render是基线models.read只读的context.util.models.*查找是基线utilcontext.util.nodeOS/decode/encode是基线cryptorequire(crypto)主机函数是基线networkcontext.network.*需声明storagecontext.store.*需声明fs-readcontext.util.readFile需声明appcontext.app.*、context.util.openInBrowser需声明credentials云厂商凭据读写保留给第一方 bundle 插件社区模板标签插件即使声明也无法获得——它高于模板标签表面的能力上限。加载插件并声明权限的操作路径以下流程来自演示插件的 README适用于开发环境下手动验证在仓库根目录运行应用npm run devPreferences → Plugins →Reveal Plugins Folder把插件目录如insomnia-plugin-sandbox-demo复制进该目录点击Reload PluginsPreferences → Scripting → 切换Run template tags in sandbox (experimental)在请求的 URL 或 header 里插入模板标签或手动输入标签语法观察预览随开关切换而变化。存量插件的迁移路径没有声明permissions块的插件按基线授权运行。当它尝试使用非基线模块时会看到一条一次性通知指明需要添加的具体授权项按提示加上insomnia.permissions块后重新加载插件即可。结果验证如何用探针标签确认授权生效演示插件 index.js 提供了一组探针标签每个标签对应一种授权验证场景都来自文档明确的预期行为{% requireprobe path %}渲染a/b说明基线授权、注册表实现生效{% requireprobe fs %}或未声明的 npm 包失败报错Module X not permitted by manifest{% eventsprobe %}因为该插件声明了modules: [events]渲染events-ok。未声明events的插件会得到Module events not permitted by manifest{% capabilityprobe %}因为声明了capabilities: [storage]完成一次context.store的 set/get 往返并渲染storage-ok。未声明storage会得到Capability storage not granted — add it to insomnia.permissions.capabilities{% vendoredprobe %}因为声明了modules中的uuid渲染uuidok文档示例输出{% sandboxprobe hi %}沙箱开关关闭时渲染hello | ran in: main-process | arch via bridge: arch开启时渲染hello | ran in: sandbox | arch via bridge: arch其中ran in的切换证明标签确实在沙箱内执行。此外Preferences → Plugins 界面会展示每个插件声明的权限演示插件会列出modules: events这是不写请求也能快速核对声明是否被解析的入口。常见报错与限制现象含义与处理Module X not permitted by manifestrequire(X)的模块未声明把X加入insomnia.permissions.modules后重新加载插件Module X not available in sandbox模块已声明但 Insomnia 的沙箱注册表尚未收录需等待其加入注册表Capability X not granted — add it to insomnia.permissions.capabilities对应的context.*分支缺失把X加入capabilities数组插件卡片上的 manifest 警告声明格式错误如modules不是数组、条目不是非空字符串不会抛异常而是降级为基线访问并附带可读警告插件本身仍会加载解析逻辑可以在 permissions.ts 中核对非数组轴产生警告并忽略回到基线数组内只保留非空字符串并去重permissions字段缺失时视为未声明与声明了但为空是两种不同状态。其他边界插件自己的node_modules永远不会被引用——裸require(uuid)总是解析到注册表的审核版本插件无法自带一个替代实现只有插件目录内的.js/.json文件会被加载node_modules和点目录被跳过多文件插件支持require(./util)、require(../shared)、require(./lib)解析到./lib/index.js均从插件自身源码目录解析第一方 bundle 插件是受信任的直接获得全部模块与能力无需声明。小结声明insomnia.permissions的完整闭环是在package.json的insomnia字段下按两个轴写modules和capabilities数组 → 复制插件到 Plugins Folder 并 Reload → 开启Run template tags in sandbox→ 用探针标签或直接跑你的标签确认渲染结果或查看 Preferences → Plugins 卡片上列出的声明。遇到not permitted/not granted报错时按报错中点名的模块名或能力名补齐对应数组即可。【免费下载链接】insomniaThe open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.项目地址: https://gitcode.com/GitHub_Trending/in/insomnia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →