Native Messaging Test Runner
对应的官方页面地址
Native Messaging Test Runner 是一个 Node 应用程序,用于测试桌面端中的 Native Messaging 功能,特别是从 DuckDuckGo 浏览器接收到的命令。它使用进程间通信 (IPC) 与桌面应用程序进行通信。它的创建是为了支持对本机消息传递本身进行开发,并使 QA 能够测试这些命令。它被放置于 bitwarden/clients
存储库中桌面应用程序的根目录的此处。
入门
1、克隆 bitwarden/clients 存储库
2、按照这些说明在本地运行桌面应用程序
3、在正在运行的桌面应用程序中,转到 Preferences
然后打开 Allow DuckDuckGo browser integration
设置:
4、在另一个终端中,导航到 apps/desktop/native-messaging-test-runner
5、运行 npm ci
6、选择一个命令然后运行它!一个好的开始是 status
。完整的命令列表可以在本文档的 Commands
部分中看到。有的命令带有参数,例如 create
。运行这些命令时,通过在所有参数前加上两个破折号的方式传递参数:npm run create -- --name NewLogin!
。注意,您需要在每个命令之前接受桌面应用程序中的提示。这肯定是一个需要改进的地方。
这些命令针对您本地正在运行的桌面实例以及您在那里拥有的任何帐户运行的。您需要预先设置您的帐户和密码库,以正确测试这些命令。
架构和结构
命令
命令文件夹包含可运行的节点脚本/命令。当前,每个本机消息传递命令都有一个文件用于测试。
handshake
发送bw-handshake
命令并与桌面应用程序中的本机消息服务建立通信参数:无
示例用法:
npm run handshake
status
发送bw-status
命令并返回桌面应用程序中配置的帐户数组。参数:无
示例用法:
npm run status
create
发送bw-credential-create
命令并使用提供的名称和其他字段的测试数据创建新的登录参数:
--name
示例用法:
npm run create -- --name NewLoginFromTestRunner
update
发送bw-credential-update
命令并使用提供的字段更新凭证参数:
--name
,--username
,--password
,--uri
,--credentialId
示例用法:
npm run update -- --name UpdateLoginFromTestRunner --username rmaccallum --password dolphin123 --uri google.com --credentialId 8fdd5921-4b10-4c47-9f92-af2b0106d63a
retrieve
发送bw-credential-retrieval
命令并返回与提供的 uri 匹配的凭据列表参数:
--uri
示例用法:
npm run retrieve -- --uri google.com
generate
发送bw-generate-password
命令并使用传递给它的 userId 的设置返回密码/密码短语参数:
--userId
示例用法:
npm run generate -- --userId fe2af956-a6a6-468c-bc8c-ae6600e48bdd
IPCService
该服务管理与套接字的连接以及在该套接字上的消息发送和消息接收。
NativeMessageService
该服务使用 IPCService 连接到本地运行的 Bitwarden 桌面应用程序的 IPC 代理服务。它使用 Bitwarden 的加密服务和功能来处理消息的加密和解密。它使用位于 /native-messaging-test-runner/src/variables.ts
文件中的测试公钥/私钥对。
其他
我以为 Node 使用了 JavaScript?我们如何使用 TypeScript 类,包括来自 libs 的类?
好问题!用一点魔法✨我们将这些 TypeSript 文件编译成 Node 熟悉和喜爱的 JavaScript。它通过以下几个机制来完成:
tsconfig.json
:在该文件的paths
节点中,将提供的paths
中的文件编译成纯 JavaScript,然后放在dist
文件夹中。package.json
:安装了module_alias
,它允许我们将 TypeScript 文件中使用的任何服务映射到它们编译的 JavaScript 等价物。在任何命令文件中直接使用的文件的路径被定义在package.json
的"_moduleAliases"
节点中。
Deferred
覆盖 JavaScript Promise
接口的 resolve
和 reject
方法的默认实现的类,以允许我们等待对通过 IPC 发送的消息的响应。
logUtils
在整个应用程序中为 console.log()
添加漂亮的颜色格式的 Utils 类。
race
IPCService
在创建允许在等待消息时使用超时的承诺时使用的实用程序。我们不能保证我们会从桌面应用程序中获得响应,因此如果没有及时收到响应,我们可以优雅地取消。
故障排除
如果您在测试运行程序使用的服务或编辑命令时看到意外行为,请删除
native-messaging-test-runner
顶层的dist
文件夹并重新运行该命令。在运行命令时,如果您正在添加/编辑命令文件时收到
MODULE_NOT_FOUND
错误,请确保您已在你的命令文件中import "module-alias/register";
。这会将已编译的 JavaScript 类映射到 Typescript 文件中使用的类。
最后更新于