@fluxlabs/common-lib

中文文档
1.2.1发布于 2026/10/29ISCTypeScriptCommonJS近 30 天下载 4813

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

中文使用文档
文档目录10 节
  1. 使用量
  2. 错误和答复
  3. 请求验证和认证
  4. 服务对服务电话
  5. HTTP 密码
  6. 数据库和苏帕基地
  7. 滥用过滤器
  8. 类型
  9. 发展
  10. 释放

普通图书馆

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

npm install @fluxlabs/common-lib

使用量

错误和答复

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

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号

请求验证和认证

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 头曰. 拥有端点的服务验证:

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

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

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 抛出的东西:

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 当文字清净:

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,所以聊天词会变化而不发布.

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, (中文(简体) ), axiosHTTP 帮助者 result和辅助者 res 输入返回值 any 这是故意的 在今天的编译服务中打入正确的解码,只是因为它们是 any,所以它需要一个主要版本。 评论意见 src/instances/index.ts 财务报告和审定财务报表 src/utils/function.ts 解释一下.

发展

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

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

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

更改仅以新版本到达服务:见 释放。 。 。 .

释放

弹出版本,否则一无所出. 合并为 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 共发布 21 个版本,首次发布于 2023/12/15;过去 12 个月发布了 8 个版本。

版本发布日期距今
1.2.1latest2026/10/2917 天前
1.2.02026/10/2719 天前
1.1.02026/10/2719 天前
1.0.172026/10/2323 天前
1.0.162026/10/2323 天前
1.0.152026/08/043 个月前

关于 @fluxlabs/common-lib 的常见问题

@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 和提交记录判断。