Insomnia 如何搭建并运行模板标签沙箱探针插件验证 QuickJS 沙箱开关
Insomnia 如何搭建并运行模板标签沙箱探针插件验证 QuickJS 沙箱开关【免费下载链接】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在 Insomnia 中设置项Run template tags in sandbox (experimental)Preferences → Scripting控制插件模板标签template tag的run()是在 Electron 主进程内直接执行还是被路由进隔离的 QuickJS 沙箱。仓库自带一个手工测试用的探针插件 insomnia-plugin-sandbox-demo通过它可以在界面上直观确认开关是否生效把开关关掉和打开各渲染一次同一个标签输出的ran in:字段会发生翻转arch via bridge字段则证明异步 host bridge 能正常往返。本文的任务就是从源码运行 Insomnia安装这个探针插件插入探针标签并在开关联动下核对渲染结果。准备条件根据根目录 package.json 的engines字段本仓库要求Node.js24.18.0npm11在仓库根目录安装依赖postinstall会执行patch-package、verify-bundle-plugins以及install-libcurl-electron即安装 libcurl 的 Electron 预编译二进制属于仓库声明的正常安装副作用npm install第一步从源码启动应用在仓库根目录运行npm run dev该脚本对应npm start -w insomnia会启动 Insomnia 开发版应用。第二步安装探针插件按 examples/insomnia-plugin-sandbox-demo/README.md 的 Install (dev) 流程操作Preferences → Plugins → 点击Reveal Plugins Folder打开插件目录把仓库里的examples/insomnia-plugin-sandbox-demo文件夹完整复制进该目录保持文件夹名不变点击Reload Plugins。复制后不要改动插件内容它的 package.json 声明了沙箱权限清单后文的验证项依赖它{ insomnia: { name: sandbox-demo, permissions: { modules: [events, uuid], capabilities: [storage] } } }其中modules决定沙箱内require()可解析哪些模块capabilities决定context.*可调用哪些 host 能力详见 PERMISSIONS.md。第三步开关关闭时的基线验证在任意请求的 URL 或 header 中插入插件提供的Sandbox Probe模板标签或直接输入{% sandboxprobe hi %}打开该标签的编辑器查看 Live Preview。开关关闭默认状态时标签在主进程路径执行输出形如arch为当前系统架构文档示例hello | ran in: main-process | arch via bridge: arch判断依据沙箱路径会定义INSOMNIA_TEMPLATE_SANDBOX标记全局主进程路径没有index.js 中的探针就是靠它区分两条路径的const ranIn typeof INSOMNIA_TEMPLATE_SANDBOX ! undefined ? sandbox : main-process;注意不要再用process是否存在来区分——沙箱自 M2 起也提供process桩它已不能作为判别信号。第四步打开 QuickJS 沙箱开关并验证Preferences → Scripting → 打开Run template tags in sandbox (experimental)回到同一个标签确认 Live Preview 输出变为文档示例hello | ran in: sandbox | arch via bridge: archran in: sandbox说明标签的run()已被路由进 QuickJS 沙箱arch via bridge: arch说明context.util.nodeOS()经__hostBridge→pluginToMainAPI[nodeOS]的异步往返正常工作探针代码见 index.js。一个需要注意的现象开关是读到主进程侧设置的若刚切换开关后预览还是旧值重新打开标签编辑器再渲染一次即可。自动化测试套件 sandbox-template-tags.test.ts 中assertTagPreviewEventually就是反复重开标签轮询直到输出反映新开关以此处理这个传播时延。可选用同一插件的其余探针核对清单与能力边界该插件还带了若干探针标签都服务于同一个验证目标沙箱开关生效后的各条权限路径标签验证内容预期输出文档示例{% requireprobe path %}基线模块授权path、crypto无需声明a/b{% requireprobe fs %}未授权模块被清单拒绝Module fs not permitted by manifest{% eventsprobe %}清单声明的模块本插件声明了eventsevents-ok{% capabilityprobe %}清单声明的能力本插件声明了storage走context.storeset/get 往返storage-ok{% stdlibprobe buffer %}/url/platform沙箱环境全局Buffer、URL/URLSearchParams、冻结的process桩与主进程路径渲染一致{% multifileprobe %}多文件插件index.js顶层require(./lib/greeting)沙箱内从插件自身源解析见 lib/greeting.js兄弟模块被正确解析未声明events的插件会收到Module events not permitted by manifest未声明storage的插件会收到Capability storage not granted — add it to insomnia.permissions.capabilities。限制与已知边界以下限制来自 PERMISSIONS.md 与探针 README验证时如遇到对应现象属于预期行为而非故障沙箱内require(X)解析到的永远是 Insomnia 自带的审核过的安全等价实现纯 JS 重实现或 host 支持的 shim不是原始 Node 内建模块uuid、ajv等经审核的 npm 库由 Insomnia 预打包并锁定版本。插件自带的node_modules从不被沙箱读取裸require(uuid)永远解析到注册表中的审核副本。经审核库的require必须写在标签的run()内部不要写在顶层——插件发现阶段仍在宿主进程加载入口文件顶层require(uuid)/require(ajv)会解析失败。credentials能力保留给第一方捆绑插件社区模板标签插件即使声明也不会被授予。permissions块格式错误如modules不是数组会降级为基线授权并在 Preferences → Plugins 的插件卡片上给出警告插件仍会加载。未声明permissions的旧插件触及非基线模块时会收到一次性迁移提示指明要添加的授权项。该开关标注 experimental属于实验性设置。如果不想手工在界面上核对也可以直接跑仓库的 Playwright 冒烟测试 sandbox-template-tags.test.ts它写入一个同构探针插件、导入 sandbox-probe-collection.yaml 夹具、切换toggle-plugin-sandbox开关并对ran in:翻转、基线/未授权模块、标准库一致性逐项断言。验证完成的标准可以收敛为一句同一标签在开关关闭时输出ran in: main-process打开后输出ran in: sandbox且两种状态下arch via bridge都给出真实架构值而不是bridge-error——这就是 QuickJS 沙箱开关端到端生效的证据。【免费下载链接】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),仅供参考