
Research
Shai-Hulud Descends to Hades: Miasma Worm Campaign Spreads with New PyPI Wave
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.
SDK 与 服务器 ETestS 之间建立 websocket 连接,以二进制的格式发送数据,支持 RPC (远程过程调用)和频道订阅两种方式通信。
SDK包括两部分,一个是基础通信 API (ETestSdk),一个是数据库 API (ETestDb)。
npm install etest-sdk
包含服务端 mocker,目前添加了一个更新网络变量的测试用例
npm run watch
node lib/tests/test_mocker.js
import { ETestSDK, ETestDb } from 'etest-sdk'
// 创建SDK对象
const sdk = new ETestSDK()
// 打开websocket连接
sdk.Open('ws://xxx')
// 调用下位机API
sdk.Call('S', '0', apiName, apiData)
// 创建db对象
const db = new ETestDb(sdk)
db.set('k1', [100, 200])
Promise<true | error> 对象try {
await sdk.Open('ws://127.0.0.1:8610/etest4/C/@')
console.log('open websocket success')
} catch (e) {
console.log('open websocket failed')
}
sdk.Close()
S0Promise<result>sdk.Call('S', '0', 'designPairwise', {...})
sdk.onClose(() => {
// websocket断开后执行
})
sdk.onError(() => {
// websocket连接出错后执行
})
sdk.onChannel('ideDiagnostic', () => {
// 每次服务器发送 ideDiagnostic 通知时执行
})
sdk.onOutput((data) => {
// 处理输出结果
})
sdk.onNetvar((data) => {
// 网络变量
})
sdk.offChannel('ideDiagnostic', () => {
// 解除 ideDiagnostic 订阅时执行
})
ETestDb 的 API主要分为三类:基本的键值对操作、Hash操作、List操作
// 创建db对象
const db = new ETestDb(sdk, type)
db.set('k1', [100, 200])
| API | 返回值 | 说明 |
|---|---|---|
set(key: string, value: any) | Promise<number> | 新增或者设置键值对到数据库中 |
get(key: string) | Promise<any> | 从数据库中查询指定 key 的值 |
del(key: string) | Promise<number> | 从数据库删除指定 key |
Hash是一个键值对映射表,通常用于存储对象,在此可以简单理解为js对象。
| API | 返回值 | 说明 |
|---|---|---|
hashSet(name: string, key: string, value: any) | Promise<number> | 设置哈希表 name 中 字段(属性) key 的值为 value |
hashGet(name: string, key: string) | Promise<any> | 获取存储在哈希表中指定字段的值 |
hashDel(name: string, key: string) | Promise<number> | 删除哈希表中的指定字段 |
hashScan(name: string, start: string, end: string, limit: number) | Promise<{ [key: string]: any }> | 扫描哈希表中指定区间中指定长度为 limit 的元素,并将结果以键值对形式返回。其中参数 start 和 end 为 key值,而非数字。 若 start、end均为null, limit 为哈希表长度,则返回的是整个哈希表 |
hashList(name: string, start: string, end: string, limit: number) | Promise<number> | 获取哈希表中指定区间中指定长度为 limit 的元素的 key 值,并将结果以数组形式返回。其中参数 start 和 end 为 key值,而非数字。 若 start、end均为null, limit 为哈希表长度,则返回的是整个哈希表的 key 集合 |
hashClear(name: string, start: string, end: string) | Promise<number> | 删除指定 key 为 start 到 end 直接的元素。若 start、end均为null,则清空整个哈希表 |
ashSize(name: string) | Promise<number> | 获取哈希表长度 |
List在此可以理解为js数组。
| API | 返回值 | 说明 |
|---|---|---|
listPush(name: string, value: any) | Promise<number> | 在列表尾部插入一个元素 |
listUnshift(name: string, value: any) | Promise<number> | 在列表头部插入一个元素 |
listPop(name: string) | Promise<number> | 移除列表最后一个元素 |
listShift(name: string) | Promise<number> | 移除列表的第一个元素 |
listIndex(name: string, idx: number) | Promise<any> | 获取列表中索引为 idx 的元素 |
listSet(name: string, idx: number, value: any) | Promise<number> | 设置列表中索引为 idx 元素的值 |
listSize(name: string) | Promise<number> | 获取列表的长度 |
listRange(name: string, start: number, end: number | Promise<Array<any>> | 获取列表指定范围内的元素 |
listRangeNative(name: string, start: number, end: number | Promise<Array<any>> | 获取主题数据相关的list,主要区别是解包方式不同 |
FAQs
ETest 用于前端使用的 SDK
We found that etest-sdk demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.