# @fluxlabs/common-lib 中文文档

规范地址：https://npmcn.com/package/%40fluxlabs/common-lib/

版本：1\.2\.1
npm 元数据更新时间：2026-10-29T12:25:29.578Z
中文译文更新时间：2026-11-15T02:31:49.142Z
软件包许可：ISC

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

原始 npm 页面：https://www.npmjs.com/package/%40fluxlabs/common-lib
原文对照：https://npmcn.com/package/%40fluxlabs/common-lib/?lang=original
项目主页：https://github.com/Fluxlabs-tech/common-lib#readme
源码仓库：https://github.com/Fluxlabs-tech/common-lib

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

- 包体积（解压后）：83.7 kB，38 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：14 个
- 首次发布：2023-12-15T10:38:50.442Z
- 最新版本发布：2026-10-29T12:25:29.205Z
- 近 30 天下载量：4813（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：21（近 12 个月 8 个）

## 中文简介

Zoop后端服务共享组件:出错和Express出错处理器,响应帮助器,请求验证,服务到服务验证符,HTTP帮助器,反对和Knex实例,以及用于聊天、名称和用户的滥用过滤器

## 安装

```sh
npm install @fluxlabs/common-lib
```

也可以使用：`pnpm add @fluxlabs/common-lib`、`yarn add @fluxlabs/common-lib`、`bun add @fluxlabs/common-lib`

## README

# 普通图书馆

Zoop后端服务共享的组件:出错和Express错误处理器,响应帮助器,请求验证,服务到服务验证符,HTTP帮助器,反对和Knex实例,以及用于聊天的滥用过滤器,名称和用户名.

-   **无 :** [@fluxlabs/ common- lib](https://www.npmjs.com/package/@fluxlabs/common-lib)
-   **释放注释 :** [GitHub 发布](https://github.com/Fluxlabs-tech/common-lib/releases)

```sh
npm install @fluxlabs/common-lib
```

## 使用量

### 错误和答复

扔一个 `CustomError` 子类并让 `errorHandler`,在每个路由后注册,将其变成响应:

```ts
import express from "express";
import { BadRequestError, errorHandler, okResponse } from "@fluxlabs/common-lib";

const app = express();

app.get("/stores/:id", async (req, res, next) => {
  try {
    const store = await Store.query().findById(req.params.id);
    if (!store) throw new BadRequestError("No such store");
    return okResponse(res, store, "Store fetched");
  } catch (err) {
    next(err);
  }
});

app.use(errorHandler);
```

| 打电话 | 状态 | 体质 |
| --- | --- | --- |
| `okResponse(res, data, message)` | 200个 | `{ success: true, statusCode: 200, data, message }` |
| `createdResponse(res, data, message)` | 201 (韩语) | `{ success: true, statusCode: 201, data, message }` |
| `noContentResponse(res, message)` | 204 (韩语) | 无 |
| `errorResponse(res, data, message, code)`, (中文(简体) ), `unAuthorisedResponse(...)` | `code` | `{ success: false, code, data, message }` |
| `errorHandler`,用于 `CustomError` | 联合国 `statusCode` | `{ errors: [{ message, field? }] }` |
| `errorHandler`,为其它 | 400个 | `{ errors: [{ message: "Something went wrong" }] }` |

错误的分类 以及建造 `ConcreteCustomError` 具有任何状态:

| 错误 | 状态 |
| --- | --- |
| `new BadRequestError(message)` | 400个 |
| `new NotAuthorizedError()` | 401 (中文(简体) ) |
| `new NotFoundError()` | 404 (韩语) |
| `new RequestValidationError(errors)` | 400, 每个无效字段一个条目 |
| `new DatabaseConnectionError()` | 500个 |
| `createStatusCodeError(statusCode, message, body?)` | `statusCode` |
| `badRequestError(message)` | **422个**,与 `BadRequestError` |
| `unauthorizedError(message)`, (中文(简体) ), `forbiddenError(message)`, (中文(简体) ), `notFoundError(message)` | 401, 403, 404 (韩语) |
| `unverifiedError(message, body)` | 412号 |

### 请求验证和认证

```ts
import { body } from "express-validator";
import { currentUser, requireAuth, validateRequest } from "@fluxlabs/common-lib";

app.use(currentUser); // req.currentUser, from the JWT in req.session.jwt, verified with JWT_KEY

app.post("/orders", requireAuth, [body("store_id").isUUID()], validateRequest, createOrder);
```

`requireAuth` 掷出 `NotAuthorizedError` 当没有 `req.currentUser`,以及 `validateRequest` 掷出 `RequestValidationError` 当快速验证检查失败时 .

### 服务对服务电话

内部端点使用短寿命的JWT, 范围为一个服务的内部API, 在 `x-internal-token` 头曰. 拥有端点的服务验证:

```ts
import { createInternalServiceAuth, internalAudience } from "@fluxlabs/common-lib";

export const verifyInternalToken = createInternalServiceAuth({
  audience: internalAudience("order-service"),
  getSecret: () => environment_config.ORDER_INTERNAL_JWT_SECRET,
});

router.get("/internal/store-detail/:id", verifyInternalToken, handler); // sets req.internal_service
```

称他们为薄荷的服务每个请求一个:

```ts
import { axios, internalAudience, internalServiceAuthHeaders } from "@fluxlabs/common-lib";

await axios.get(url, {
  headers: internalServiceAuthHeaders({
    issuer: "payment-service",
    audience: internalAudience("order-service"),
    secret: environment_config.ORDER_INTERNAL_JWT_SECRET,
  }),
});
```

托肯斯活了30秒钟. `getSecret` 是一个函数,这样每个请求都会取出启动后装入或旋转后装入的秘密. `src/utils/internal-service-token.ts` 有细节.

### HTTP 密码

`handleData` (掌声), `handlePatchData` (猫)和 `getData` (GET)永远不要扔。 他们决心 `{ result, error }`时 `result` 是轴响应,并且 `error` 抛出的东西:

```ts
import { handleData } from "@fluxlabs/common-lib";

const { result, error } = await handleData(url, payload, { headers }, "json"); // "form" sends it form-encoded
if (error) { /* ... */ }
```

`axios` 是默认的轴实例.

### 数据库和苏帕基地

`Model` 反对是 `Model` 财务报告和审定财务报表 `Knex` knex 工厂,所以每个服务都使用相同的实例. `initializeSupabase(url, key)` 返回 a `SupabaseClient`。 。 。 .

### 滥用过滤器

请检查date=中的日期值 (帮助) 英语,印地语和Hinglish语,拉丁文或德瓦纳加里语被滥用. 每一个电话返回 发现虐待, `"latin"`, (中文(简体) ), `"devanagari"` 或者说 `"emoji"`,或 `null` 当文字清净:

```ts
import { findAbuse, findAbuseInName, findAbuseInUsername } from "@fluxlabs/common-lib";

findAbuse("tu chutiya hai");        // "latin" — for sentences, such as chat comments
findAbuseInName("iamchutiya99");    // "latin" — for full names
findAbuseInName("harshit.dikshit"); // null
findAbuseInUsername("jiya_bkl");    // "latin" — for usernames
```

| 打电话 | 用它来 | 接头 |
| --- | --- | --- |
| `findAbuse(text)` | 句子 | 虐待和侮辱,包括轻而易举的虐待和侮辱,但它们是伪装的:案件、拉长的字母(`fuuuck`), leet speak (英语:`chut1ya`),外观类似字符,用分隔符拼出字母(`c.h.u.t.i.y.a`),口罩字母(`f**k`),以空格分隔的长词 (`chu tiya`),德瓦纳加里语短语,和虐待的emoji语 |
| `findAbuseInName(text)` | 完整名称 | 只有严重滥用,所以不拒绝使用真名,而且与其他字母结合使用时也不拒绝使用真名(`bigchutiya`)或由 `_`, (中文(简体) ), `.` 或者说 `-` (单位:千美元)`big_chutiya`(中文(简体) ) |
| `findAbuseInUsername(text)` | 用户名 | 所有的东西 `findAbuseInName` 渔获量,加上短表(`bkl`, (中文(简体) ), `mkc`, (中文(简体) ), `bsdk`, (中文(简体) ), `bc`当他们象一个言语一样站立的时候`jiya_bkl`, (中文(简体) ), `mkc99`, (中文(简体) ), `b.k.l`) (中文(简体) ). 一句话也没有,因为 `ramkc` (拉姆克)持有 `mkc`,而不是用全名,在那里可以作首字母(`BC Roy`(中文(简体) ) |

三个都在记忆中运行,在一毫秒以内,然后返回 `null` 当检查本身失败时,所以一个被损坏的过滤器从不屏蔽注释或签名. 配对者是建立在第一次通话上,所以从不检查文本的服务从不支付.

单词在 `src/services/moderation-service/abuse-words.ts`,每个呼叫一个集。 聊天只是默认: `setAbuseLists` 在服务运行时替换它们, 通知服务从 Firestore 文档中进行 `chat_moderation/abuse_words`,所以聊天词会变化而不发布.

```ts
import { DEFAULT_ABUSE_LISTS, setAbuseLists } from "@fluxlabs/common-lib";

setAbuseLists({ ...DEFAULT_ABUSE_LISTS, hinglish: [...DEFAULT_ABUSE_LISTS.hinglish, "|newword"] }); // true
```

无法构建的列表被拒绝, `setAbuseLists` 返回时 `false`,而使用中的列表则保留. `findAbuseInName`还有.. `findAbuseInUsername`'列表是固定的,因为聊天的词包括也是名字("Kamini"). 它允许一个图案匹配的真名,例如Chutia和Bhadwal;当一个真名被屏蔽时,添加到 `NAME_ALLOWLIST`。 。 。 .

## 类型

-   正在导入软件包 `currentUser?: UserPayload` 财务报告和审定财务报表 `internal_service?: string` 到快递公司 `Request`。 。 。 .
-   `Model`, (中文(简体) ), `Knex`, (中文(简体) ), `axios`HTTP 帮助者 `result`和辅助者 `res` 输入返回值 `any` 这是故意的 在今天的编译服务中打入正确的解码,只是因为它们是 `any`,所以它需要一个主要版本。 评论意见 `src/instances/index.ts` 财务报告和审定财务报表 `src/utils/function.ts` 解释一下.

## 发展

```sh
nvm use        # Node 22, from .nvmrc
npm ci
npm run build  # tsc, into build/
```

每个导出都必须在源代码中声明其类型: 构建失败, 否则( E)`isolatedDeclarations`) (中文(简体) ). 这让出版 `.d.ts` 从随着出版机安装的依赖性而变化,这就是1.0.14打破了四个服务楼.

更改为公用类型,即使这个软件包建成,也可以打破使用这个软件包的服务,所以在释放一个软件包之前先检查一下.

更改仅以新版本到达服务:见 [释放](https://npmcn.com/package/%40fluxlabs/common-lib/#readme-releasing)。 。 。 .

## 释放

> **弹出版本,否则一无所出.** 合并为 `main` 只有离开的时候才能出版 `package.json` npm版本还没有。 因此,如果一个拉动请求,其更改应到达服务范围,它必须撞倒版本本身,或者被后面的版本。 这包括对这个 README 的修改,因为 npm 显示最新发布的版本 README .

1.  在拉出请求中,将版本折叠: `npm version patch --no-git-tag-version` 更新 `package.json` 财务报告和审定财务报表 `package-lock.json`启用 `patch` 为固定, `minor` 用于添加,例如新出口,以及 `major` 任何能破坏服务结构的东西 比如缩小类型.
2.  将拉力请求的描述写作释放笔记: 其上的一切 `## Test plan` 飞向它们.
3.  合并它。 发布工作流程构建软件包,通过可信赖的出版发布到npm,没有npm令牌,并创建 `v<version>` GitHub 发布了这些注释,并链接到 npm 上的版本.

预发版本,例如 `1.1.0-beta.0`页:1 `next` 标记代替 `latest`。仅通过此工作流程发布,从未使用 `npm publish` 或者说 `npm run pub` 从你自己的机器.

## 常见问题

### @fluxlabs/common-lib 是什么？

Zoop后端服务共享组件:出错和Express出错处理器,响应帮助器,请求验证,服务到服务验证符,HTTP帮助器,反对和Knex实例,以及用于聊天、名称和用户的滥用过滤器

### 如何安装 @fluxlabs/common-lib？

在项目目录运行 npm install @fluxlabs/common-lib，或使用 pnpm add / yarn add / bun add。

### @fluxlabs/common-lib 支持 TypeScript 吗？

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

### @fluxlabs/common-lib 支持 ESM 还是 CommonJS？

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

### @fluxlabs/common-lib 可以商用吗？

@fluxlabs/common-lib 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @fluxlabs/common-lib 的下载量有多少？

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

### @fluxlabs/common-lib 还在维护吗？

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

