# @bitblit/epsilon 中文文档

规范地址：https://npmcn.com/package/%40bitblit/epsilon/

版本：4\.1\.100
npm 元数据更新时间：2025-11-04T05:36:37.501Z
中文译文更新时间：2026-11-08T11:21:05.020Z
软件包许可：Apache-2\.0

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

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

弃用说明：Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

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

- 包体积（解压后）：787 kB，531 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=14\.18
- 运行依赖：19 个
- peer 依赖：graphql ^16\.8\.1，constructs 10\.2\.70，aws-cdk-lib 2\.99\.0，@bitblit/ratchet ^4\.1\.106，@types/aws-lambda 8\.10\.122
- 首次发布：2018-07-13T16:41:27.750Z
- 最新版本发布：2024-09-05T14:46:26.614Z
- 近 30 天下载量：1790（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：401（近 12 个月 0 个）

## 中文简介

小型适配器以简化 API 网关 Lambda APIS

## 安装

```sh
npm install @bitblit/epsilon
```

也可以使用：`pnpm add @bitblit/epsilon`、`yarn add @bitblit/epsilon`、`bun add @bitblit/epsilon`

## README

# 埃普西龙

用 OpenAPI 简化 Lambda 服务一致的 apis 的小型库

你不妨读 [更改日志](https://npmcn.com/package/%40bitblit/epsilon/CHANGELOG.md)

# 东都:

-   在本文中讨论 http/batch 的 labda 的亲/友
-   路径/ query var 检查是否打开 api doc
-   检查压缩处理

## 比用直道节点好多少?

-   使用打字符来代替被上帝遗忘的直线活字
-   处理路由映射( 多端, 单羊肉)
-   使用承诺和最高水平的.捕获量可转换为500
-   添加压缩
-   添加中央ORS
-   添加 JWT 处理
-   一致的错误处理
-   也可以提供静态内容
-   某种永恒的物体允许乐观地缓存
-   用于支持通过SaltMint, SNS, SQS, 电子邮件等进行非HTTP( 批量)处理

# 比使用快递更好吗?

-   没有req/res 架构来伪造 如此容易测试
-   OpenAPI 第一个设计
-   轻得多
-   支持背景、 CRON、 API 间通讯、 AWS 批次退出框

# 其他服务

-   环境服务
-   简单重定向

# CDK 自动构建

## 导言

## 先决条件

-   你每次做这样的自动化工作,我 **高度建议** 先开账单 别 如果你跳过这个台阶 下个月不小心花出1000美元[https://docs.aws.amazon.com/AmazonCloud Watch/latest/monitor assessment cloudwatch.html 页面存档备份,存于互联网档案馆](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)(中文(简体) )
-   CDK V2 必须挂入您的账户( Name[https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html 页面存档备份,存于互联网档案馆](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)(中文(简体) ) -- -- 例如(a)**npx cdk 靴子圈 aws://1234567890.us-east-1**(中文(简体) )
-   运行 CDK 的用户需要 -LOTS - AWS privs (我稍后会将它们全部列出). 现在,假设一堆)
-   政策 **arn:aws:iams:: policy/ service-role/AWSLambdaVPC AccessExecutiveRole 互联网档案馆的存檔,存档日期2013-12-02** 必须存在( 默认情况下应该存在)
-   政策 **arn:aws:iam::aws:政策/服务-作用/AWSBatchServicesRole** 必须存在( 您可能必须创建它 - 看 [https://docs.aws.amazon.com/batch/latest/userguide/service IAM role.html 互联网档案馆的存檔,存档日期2011-12-21](https://docs.aws.amazon.com/batch/latest/userguide/service_IAM_role.html)(中文(简体) )
-   你应该有一个VPC,你的Lambda会部署在, 你应该知道它的ID(例如, **页:1**(中文(简体) )
-   VPC应该有一个或多个子网,你应该知道他们的ID(例如, **05966bfadca940a88 (英语)**(中文(简体) )
-   VPC应该有一个安全小组, 它可能应该允许外出交通 如果你想要你的羊肉与互联网交谈。 你应该知道它的ID(例如, **02a89a55b0f2cb4ae (中文(简体) )** - 让开 **警长..** 前缀)

## Api 设置

-   您的相片层,除了依赖于 Epsilon,还需要: \*\*"aws-cdk-lib":(Peer版本) \*\*"构造": (Peer版本) \*\*"行": (Peer版本)

## 嵌入设置

### .dockerignore (英语)

一般来说, Docker 文件需要放在您 api 和 cdk 文件夹上方的文件夹中, 但是它必须忽略 在这种情况下, cdk 文件夹将无限重复

```
# Need this here to prevent infinite recusion of cdk folder at least
.github
.idea
.yarn
.git
modules/cdk
node_modules
```

### 嵌入符

```
FROM public.ecr.aws/lambda/nodejs:14
COPY modules/api/package.json modules/api/gql-codegen.yml modules/api/tsconfig.json ${LAMBDA_TASK_ROOT}/
COPY modules/api/src ${LAMBDA_TASK_ROOT}/src
COPY lambda-bootstrap-shell.sh ${LAMBDA_TASK_ROOT}
RUN npm install -g yarn
RUN yarn install
RUN yarn clean-compile
ENTRYPOINT ["sh","/var/task/lambda-bootstrap-shell.sh"]
CMD [ "dist/lambda.handler" ]
```

### (原始内容存档于2018-09-26). lambda-bootstrap- shell.sh

```
#!/bin/sh
# Based on the default script in public.ecr.aws/lambda/nodejs:14, which is copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Modifications copyright Christopher Weiss, 2022

if [ -z "${EPSILON_RUNNING_IN_AWS_BATCH}" ]; then
    if [ $# -lt 1 ]; then
      echo "entrypoint requires the handler name to be the first argument" 1>&2
      exit 142
    fi
    export _HANDLER="$1"

    RUNTIME_ENTRYPOINT=/var/runtime/bootstrap
    if [ -z "${AWS_LAMBDA_RUNTIME_API}" ]; then
      exec /usr/local/bin/aws-lambda-rie $RUNTIME_ENTRYPOINT
    else
      exec $RUNTIME_ENTRYPOINT
    fi
  else
    echo "Running Epsilon inside AWS batch - triggering direct $1 $2"
    exec node dist/aws-batch-epsilon-cli.ts --process $1 --data $2
fi
```

# 图QL 支持(v0.1.x和以上)

如果你只是做直的图形QL 那么你真的不需要使用 Epsilon (我建议只是 与直线 [https://www.npmjs.com/package/apollo-server-lambda 互联网档案馆的存檔,存档日期2013-12-22](https://www.npmjs.com/package/apollo-server-lambda)) (中文(简体) ). 不过,如果你想搞砸的话 epsilon 允许您指定一个正则 表达式,所有匹配请求都委托给一个提供阿波罗服务器,绕过Epsilon.

要做到这一点,您必须包括下列图书馆(它们没有被标记为Epsilon的附属物,因为它们 如果您不支持 GraphQL , 则不需要 )

```
    "apollo-server-lambda": "2.8.1",
    "graphql": "14.4.2",
```

然后,在你的路由器配置中, 你必须设置一个阿波罗服务器和一个阿波罗Regex:

```typescript
const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// Provide resolver functions for your schema fields
const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
};

const server: ApolloServer = new ApolloServer({ typeDefs, resolvers });

// ...

const cfg: RouterConfig = RouterUtil.openApiYamlToRouterConfig(yamlString, handlers, authorizers, options);

// ...
cfg.apolloServer = server;
cfg.apolloCreateHandlerOptions = {
  origin: '*',
  credentials: true,
} as CreateHandlerOptions;
cfg.apolloRegex = new RegExp('.*graphql.*');
```

# 使用量

## 使用 WebHandler 来简化 Lambda

您将配置路由器Config, 然后从此创建 WebHandler 。 你的羊肉达 函数应该看起来像 :

```
const handler: Handler = (event: APIGatewayEvent, context: Context, callback: Callback) => {
    const routerConfig: RouterConfig = getMyRouterConfig(); // Implement this function
    const commonHandler: WebHandler = new WebHandler(routerConfig);
    commonHandler.lambdaHandler(event, context, callback);
};

export {handler};

```

## 使用认证/ AuthHandler 来简化基于 JWT 的符号认证

你的认证人Lambda应该这样(我这里假设你在AWS存储你的加密密钥) 系统管理器 这样你就可以保持它加密 在休息,你绝对应该这样做:

```

import {AuthHandler} from '@bitblit/epsilon/dist/auth/auth-handler';
import {Callback, Context, CustomAuthorizerEvent, Handler} from 'aws-lambda';
import {EnvironmentService} from '@bitblit/ratchet/dist/aws/environment-service';
import 'reflect-metadata';

const handler: Handler = (event: CustomAuthorizerEvent, context: Context, callback: Callback) => {

    EnvironmentService.getConfig('MyConfigurationName').then(cfg => {
        const commonAuth: AuthHandler = new AuthHandler('api.mycompany.com', cfg['encryptionKey']);
        commonAuth.lambdaHandler(event, context, callback);
    });
};

export {handler};

```

这将通过任何持有有效JWT标志的人。 注意,Epsilon还没有支持基于角色 在此版本中过滤 .

要创建有效的 JWT 令牌, 您的认证端点可以使用 **认证/网络控件管理器** 像这样的课 (在您验证了用户主/证书对后):

```
  // Other authentication stuff happens up here.
  const email: string = 'user-email@test.com';
  const roles: string[] = ['USER','NOT-AN-ADMIN'];
  const userData: any = {'other': 'stuff'};
  const myConfig: any = await EnvironmentService.getConfig('MyConfigurationName'); // same as above
  const encryptionKey: string =  cfg['encryptionKey'];
  const adminUser: any = null; // Set this if the user is an admin doing run-as (this is the admin user)
  const expSec: number = 3600; // How long until this token expires in seconds

  const tokenHandler: WebTokenManipulator = new WebTokenManipulator(encryptionKey, 'api.mycompany.com');
  const token: string = tokenHandler.createJWTString(email, userData, roles, expSec, admin);

```

# 关于增加新网关/阶段的说明

您需要认证攻击羊肉的通道(截至2018-10-13年

```
aws lambda add-permission --function-name "arn:aws:lambda:us-east-1:{accountId}:function:{lambda-function-name}"
  --source-arn "arn:aws:execute-api:us-east-1:{account number}:{api id}/*/*/*"
    --principal apigateway.amazonaws.com
      --statement-id b57d8a0f-08e5-407c-9093-47d7e8e840bc
        --action lambda:InvokeFunction

```

您需要记住去 IAM / Keys 并授权新堆栈用户使用您的 KMS 密钥( 如果您是 使用 KMS 通过 SystemManager 加密您的配置, 您应该这样做 。 )

## 常见问题

### @bitblit/epsilon 是什么？

小型适配器以简化 API 网关 Lambda APIS注意：该包已被作者标记为弃用——Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

### 如何安装 @bitblit/epsilon？

在项目目录运行 npm install @bitblit/epsilon，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@bitblit/ratchet（^4\.1\.106）、@types/aws-lambda（8\.10\.122）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 epsilon-cli，可以用 npx epsilon-cli 直接运行。

### @bitblit/epsilon 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bitblit/epsilon 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @bitblit/epsilon 需要什么版本的 Node\.js？

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

### @bitblit/epsilon 可以商用吗？

@bitblit/epsilon 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @bitblit/epsilon 的下载量有多少？

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

### @bitblit/epsilon 还在维护吗？

最新版本 4\.1\.100 发布于 2024/09/05（2 年前）；至今共发布 401 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/07/14。作者已将其标记为弃用，新项目建议寻找替代方案。

