# @efffrida/rpc 中文文档

规范地址：https://npmcn.com/package/%40efffrida/rpc/

版本：0\.0\.73
npm 元数据更新时间：2026-11-12T16:00:26.472Z
中文译文更新时间：2026-11-13T23:59:51.444Z
软件包许可：GPL-3\.0-only

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40efffrida/rpc
原文对照：https://npmcn.com/package/%40efffrida/rpc/?lang=original
项目主页：https://github.com/leonitousconforti/efffrida
源码仓库：https://github.com/leonitousconforti/efffrida

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：122 kB，58 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=24
- 运行依赖：2 个
- peer 依赖：effect 4\.1\.4
- 首次发布：2025-04-16T01:11:28.098Z
- 最新版本发布：2026-11-12T16:00:26.009Z
- 近 30 天下载量：2793（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：72（近 12 个月 58 个）

## 中文简介

节点和Frida代理之间的效应/rpc协议

## 安装

```sh
npm install @efffrida/rpc
```

也可以使用：`pnpm add @efffrida/rpc`、`yarn add @efffrida/rpc`、`bun add @efffrida/rpc`

## README

# @efffrida/ rpc (英语)

提供效果 rpc 协议的执行(用于 `effect/rpc`这 通过frida脚本消息和 rpc 导出来通信。 双方都可以是 服务器 :

-   `@efffrida/rpc/frida` 在代理内运行 : `FridaRpcServer.layerProtocolFrida` 财务报告和审定财务报表 `FridaRpcClient.layerProtocolFrida`。 。 。 .
-   `@efffrida/rpc/node` 以节点运行并需要 `FridaScript` 从 `@efffrida/frida-tools`数字 : `FridaRpcClient.layerProtocolFrida` 财务报告和审定财务报表 `FridaRpcServer.layerProtocolFrida`。 。 。 .

双方必须使用同样的 `RpcSerialization`。 。 。 .

### 示例用途

共享的 rpc 定义, `requests.ts`数字 :

```typescript
import * as Rpc from "effect/rpc/Rpc";
import * as RpcGroup from "effect/rpc/RpcGroup";
import * as Schema from "effect/Schema";

export class UserRpcs extends RpcGroup.make(
    Rpc.make("UserById", {
        success: Schema.Struct({ id: Schema.String, name: Schema.String }),
        error: Schema.String,
        payload: { id: Schema.String },
    })
) {}
```

服务器,运行在frida代理, `agent.ts`数字 :

```typescript
import "@efffrida/polyfills";

import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as RpcSerialization from "effect/rpc/RpcSerialization";
import * as RpcServer from "effect/rpc/RpcServer";

import { FridaRuntime } from "@efffrida/platform";
import { FridaRpcServer } from "@efffrida/rpc/frida";

import { UserRpcs } from "./requests.ts";

const UsersLive = UserRpcs.toLayer({
    UserById: ({ id }) => (id === "1" ? Effect.succeed({ id, name: "Alice" }) : Effect.fail(`User not found: ${id}`)),
});

const ProtocolLive = FridaRpcServer.layerProtocolFrida().pipe(Layer.provide(RpcSerialization.layerNdjson));
const Main = RpcServer.layer(UserRpcs).pipe(Layer.provide(UsersLive), Layer.provide(ProtocolLive));

FridaRuntime.runMain(Layer.launch(Main));
```

客户端,在节点运行, `main.ts`数字 :

```typescript
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as RpcClient from "effect/rpc/RpcClient";
import * as RpcSerialization from "effect/rpc/RpcSerialization";

import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
import { FridaDevice, FridaScript, FridaSession } from "@efffrida/frida-tools";
import { FridaRpcClient } from "@efffrida/rpc/node";

import { UserRpcs } from "./requests.ts";

const FridaLive = Layer.provideMerge(FridaSession.layer(["/usr/bin/sleep", "infinity"]), FridaDevice.layerLocalDevice);
const ScriptLive = FridaScript.layer(new URL("agent.ts", import.meta.url)).pipe(Layer.provide(FridaLive));

const ProtocolLive = FridaRpcClient.layerProtocolFrida().pipe(
    Layer.provide(RpcSerialization.layerNdjson),
    Layer.provide(ScriptLive)
);

const program = Effect.gen(function* () {
    const client = yield* RpcClient.make(UserRpcs);
    const user = yield* client.UserById({ id: "1" });
    yield* Effect.log(user);
}).pipe(Effect.scoped, Effect.provide(ProtocolLive));

NodeRuntime.runMain(program);
```

反向工作方式相同: `FridaRpcServer.layerProtocolFrida` 从 `@efffrida/rpc/node` 为 rpcs 服务 `FridaRpcClient.layerProtocolFrida` 从 `@efffrida/rpc/frida`。 。 。 .

## 常见问题

### @efffrida/rpc 是什么？

节点和Frida代理之间的效应/rpc协议

### 如何安装 @efffrida/rpc？

在项目目录运行 npm install @efffrida/rpc，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：effect（4\.1\.4）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @efffrida/rpc 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/efffrida\_\_rpc 是否存在。

### @efffrida/rpc 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @efffrida/rpc 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=24。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @efffrida/rpc 可以商用吗？

@efffrida/rpc 使用 GPL-3\.0-only 许可。强 Copyleft：分发包含该代码的软件时，整个作品需以 GPL-3\.0 兼容许可开源，并附带专利与反锁定条款。仅内部使用不触发此义务。以上为概括，不构成法律意见，请以许可原文为准。

### @efffrida/rpc 的下载量有多少？

根据 npm 官方下载统计，@efffrida/rpc 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,793 次，日均约 93 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @efffrida/rpc 还在维护吗？

最新版本 0\.0\.73 发布于 2026/11/13（1 天前）；至今共发布 72 个版本，其中过去 12 个月发布了 58 个；首次发布于 2025/04/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

