@nsnanocat/grpc

@nsnanocat/grpc 提供纯 JavaScript gRPC 帧编解码能力,并复用 @nsnanocat/util 适配常用 iOS 网络工具。

安装

从 npm registry 安装:

npm
yarn
pnpm
bun
deno
npm add @nsnanocat/grpc

如果从 GitHub Packages 安装:

.npmrc
@nsnanocat:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}

配置完成后,仍使用上面的安装命令。

gRPC 帧

import gRPC from "@nsnanocat/grpc";

const protobufBytes = new Uint8Array([8, 1]);

const framed = gRPC.encode(protobufBytes, "gzip");
const decoded = gRPC.decode(framed);

encode(body, encoding) 支持 identitygzipdecode(bytesBody) 会读取五字节帧头,并在需要时解压消息体。

gRPC-Web unary 响应

import gRPC from "@nsnanocat/grpc";

const { header, bodyBytes } = gRPC.decodeWeb($response.bodyBytes);

console.log(header["grpc-status"]);
console.log(bodyBytes);

decodeWeb(bytesBody) 返回:

{
  header: {
    "grpc-status": "0",
  },
  bodyBytes: Uint8Array,
}

限制

  • 仅支持二进制 gRPC-Web unary 响应。
  • 不支持 grpc-web-text
  • trailer frame 会解析到返回值的 header,不会解析 HTTP 传输层响应头。
  • unary 响应只接受一个 data frame,并要求 trailer frame 位于最后。