# @defra/lis-hubs-infra-core 中文文档

规范地址：https://npmcn.com/package/%40defra/lis-hubs-infra-core/

版本：0\.34\.0
npm 元数据更新时间：2026-11-11T17:34:28.951Z
中文译文更新时间：2026-11-11T21:09:36.089Z
软件包许可：OGL-UK-3\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40defra/lis-hubs-infra-core
原文对照：https://npmcn.com/package/%40defra/lis-hubs-infra-core/?lang=original
项目主页：https://github.com/DEFRA/lis-hubs-infra-core#readme
源码仓库：https://github.com/DEFRA/lis-hubs-infra-core

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

- 包体积（解压后）：154 kB，34 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=24
- 运行依赖：8 个
- peer 依赖：@defra/lis-hubs-infra-registry \>=0\.13\.0 \<1\.0\.0
- 首次发布：2026-08-10T08:39:58.286Z
- 最新版本发布：2026-11-11T17:34:28.478Z
- 近 30 天下载量：11627（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：89（近 12 个月 89 个）

## 中文简介

畜牧平台共享枢纽力学.

## 安装

```sh
npm install @defra/lis-hubs-infra-core
```

也可以使用：`pnpm add @defra/lis-hubs-infra-core`、`yarn add @defra/lis-hubs-infra-core`、`bun add @defra/lis-hubs-infra-core`

## README

# 双核

畜牧信息服务(LIS)的一部分,它允许牲畜饲养者、所有者、代理商和牲畜饲养者使用 代表们记录和管理他们的动物.

`@defra/lis-hubs-infra-core` 是一个共享 npm 包与运行时间管道, 每个LIS 中枢 请求背景和相关性 身份证、记录、呼叫其他地雷影响调查服务 服务到服务代币, 和枢纽的代理 其语音.

它故意不涵盖认证、会话、角色或权限(见 [下层访问](https://github.com/DEFRA/lis-hubs-infra-access))或哪个模块的枢纽 服务(见 [登记](https://github.com/DEFRA/lis-hubs-infra-registry)) (中文(简体) ).

用于:

-   中枢 : [lis-hubs-前台办公室](https://github.com/DEFRA/lis-hubs-front-office), (中文(简体) ), [后办公室](https://github.com/DEFRA/lis-hubs-back-office)
-   发言: [丽丝-苹果-牛-家](https://github.com/DEFRA/lis-apps-cattle-home), (中文(简体) ), [lis -apps - crattle - register (英语)](https://github.com/DEFRA/lis-apps-cattle-register), (中文(简体) ), [百花齐放](https://github.com/DEFRA/lis-apps-cattle-move), (中文(简体) ), [鼠类动物死亡](https://github.com/DEFRA/lis-apps-cattle-death)
-   软件包 : [下层访问](https://github.com/DEFRA/lis-hubs-infra-access), (中文(简体) ), [服务](https://github.com/DEFRA/lis-infra-ui-services)

## 安装

```bash
npm install @defra/lis-hubs-infra-core @defra/lis-hubs-infra-registry
```

`@defra/lis-hubs-infra-registry` 是同伴的依赖,所以消耗的应用也必须安装它.

## 使用量

### 日志

`logger` 是单人,共享 [皮诺](https://getpino.io/) 写作的日志 [东加勒比国家](https://www.elastic.co/guide/en/ecs/current/index.html) cDP 的 OpenSearch 格式。 日志 遍及各地,包括请求处理者 别用霍比的 `request.logger`。 。 。 .

```js
import { logger } from '@defra/lis-hubs-infra-core'

logger.level = config.get('log.level')
logger.enabled = config.get('log.enabled')
logger.format = 'ecs' // or 'pretty-print' for local development
logger.serviceName = 'lis-apps-cattle-home' // defaults to SERVICE_NAME
logger.serviceVersion = config.get('serviceVersion') // defaults to SERVICE_VERSION
logger.context.hashSecret = config.get('log.hashSecret')

await server.register(logger.hapiPlugin) // request and response logging

logger.info('Holding loaded')
```

`logger.context` 在请求中的每个日志行中添加的请求范围值. 过 `true` 作为将一个值与 `hashSecret`,这样你就可以关联 不记录的标识符 :

```js
logger.context.set('cph', cph, true)
```

### 请求背景

`requestContext.plugin` 从 `x-cdp-request-id` 页眉,或生成 一,保留下来 其余的请求。 在其它插件之前注册 .

```js
import { requestContext } from '@defra/lis-hubs-infra-core'

await server.register(requestContext.plugin)

requestContext.getHeaders() // { 'x-cdp-request-id': '...' }, for your own outbound calls
```

### 呼叫其他地雷影响调查服务

使用 `createServiceClient` 以呼叫另一个LIS服务(例如一个说话的be4fe). 它会:

-   为当前环境设计服务的基础 URL(`getServiceBaseUrl`(中文(简体) )
-   添加相关 ID 头
-   添加一个 `Authorization: Bearer` 来自 AWS STS 的服务符号(`GetWebIdentityToken`),与 目标服务的名称作为观众
-   发送 `x-api-key` 如果你给它一个 `apiKey`
-   默认3秒后乘数(`timeout`,以毫秒计,是 响应头和正体; 超时为504
-   持有 [断路器](https://npmcn.com/package/%40defra/lis-hubs-infra-core/#readme-circuit-breaker) 服务`circuitBreaker` 设置其 `failureThreshold` 财务报告和审定财务报表 `resetTimeout`,或 `false` 关闭它)

```js
import { createServiceClient } from '@defra/lis-hubs-infra-core'

const be4fe = createServiceClient({
  environment,
  serviceName: 'lis-be4fe-cattle-home',
  port: 8087, // only used for 'local' and 'docker_compose'
  apiKey
})

export async function getHolding(cph) {
  const { payload } = await be4fe.get(`api/cphs/${encodeURIComponent(cph)}`)
  return payload
}
```

它回来了 `get`, (中文(简体) ), `post`, (中文(简体) ), `put`, (中文(简体) ), `patch` 财务报告和审定财务报表 `delete`,每个选择一个路径 相对于服务 基础 URL 和 [沉没](https://hapi.dev/module/wreck/) 选项。 它们是简单的功能,所以可以 而客户持有的任何物品都无法从 外边 如果找不到服务标志,他们就会扔 `ServiceTokenError`;而服务 电路打开了, `CircuitOpenError`两者均带有 `statusCode` 页:1 一个无法通过其他电话 方式( 无法达到服务, 时间已过期, 或有错误状态的答案) 扔出 `ServiceRequestError`,包含 `statusCode`, (中文(简体) ), `serviceName`, (中文(简体) ), `method`, (中文(简体) ), `path` 财务报告和审定财务报表 `cause` 用于捕获错误的代码。 共享日志只发布错误的类型、消息和堆栈, 因此,一个打电话者如果想要他们在日志行中,必须把它们在消息中或者 `logger.context`。 。 。 .

当地,Lis -dev's `lis-fake-sts` 服务代表AWS STS. 见 [服务代理](https://github.com/DEFRA/lis-dev#service-to-service-auth) 在lis-dev语中.

### 枢纽代理服务器

`createProxyPlugin` 用于中枢。 它为每个模块注册代理路由 `@defra/lis-hubs-infra-registry` 中枢列表,将请求转发到该模块的已发言和 发送已签名用户的 JWT 中枢,取自中枢会话 `getUserToken`输入 页:1 `x-lis-jwt-assertion` 请求页眉( `JWT_ASSERTION_HEADER` ) 。 它只转发 `cookies_policy` 同意饼干 `COOKIES_POLICY_COOKIE_NAME` 由此包导出常数 , 因此,说话的布局可以使饼干横幅状态. 它从不发送 中心会话饼干,任何其他 饼干或浏览器 `Authorization` 并剥去任何客户端提供的副本 该头. 它发送会话的CSRF代币,由E `lis-csrf` 插件从 `@defra/lis-infra-ui-services/csrf` 时间 `request.plugins['lis-csrf'].token`,在 `x-lis-csrf-token` 页眉,并剥去任何客户端提供的内容 copy. 它的路线 `plugins: { 'lis-csrf': { token: false } }`: 中枢检查一个代理请求 声音检查它体内的标志物 中心流经未读处.

```js
import { createProxyPlugin } from '@defra/lis-hubs-infra-core'
import { getHubJwt } from '@defra/lis-hubs-infra-access/authentication'

const proxy = createProxyPlugin({
  hubId: 'front-office',
  environment: config.get('environment'),
  getUserToken: getHubJwt,
  proxyTimeout: 30000, // optional, milliseconds to wait for a spoke's response headers; 30s by default
  circuitBreaker: { failureThreshold: 5, resetTimeout: 30000 } // optional, see below for the defaults
})

await server.register(proxy.plugin)
```

每个模块都是 `Spoke`,它拥有模块的服务名称、基址和 [断路器](https://npmcn.com/package/%40defra/lis-hubs-infra-core/#readme-circuit-breaker) 并建造h2o2路线. 一个没有回答的演讲 `proxyTimeout` 得到一个504;一个无法达到,一个502.

发言者每个登记站挂载一个路线(`/holdings/{cph*3}/cattle/{path*}`, (中文(简体) ), `/animals/cattle/{path*}`),在其中,请求路径的转发没有改变,所以已发言者 注册相同的完整模式并查看浏览器所要求的 URL。 hopi通过特异性匹配路线,而不是注册令,所以 `/holdings/12/345/0001/cattle/register` 到达了牛登记,而不是牛的家.

### 断路器

`CircuitBreaker` 保护一个下游服务的电话,是什么 `createServiceClient` 和枢纽 代理使用 。 只有运输失败(拒绝连接、暂停)才算作损失, 不管情况如何 证明服务已经启动 电路之前的电话结果 打开被忽略 .

-   关闭:呼叫通过. `failureThreshold` 连续失败( 默认为 5) 打开它 .
-   打开: 呼叫快速失败 `CircuitOpenError`,一个503,用于 `resetTimeout` 毫秒(30分) 以默认方式). UI call-all使得"服务不可用,稍后再试"一页.
-   半开:一个探测器呼叫通过,其余的迅速失效. 它的成功关闭了电路; 它的失败让它重新打开另一个 `resetTimeout`。 。 。 .

状态是每个过程的,所以每个中心或发言的例子自行决定. 每一个过渡是 在共享日志中登录:当电路打开时发出警告,当电路半开时发出信息,以及 当探测器关闭时.

```js
import { CircuitBreaker } from '@defra/lis-hubs-infra-core'

const breaker = new CircuitBreaker({ name: 'lis-be4fe-cattle-home' })

breaker.assertCallAllowed() // throws CircuitOpenError while open; call immediately before the transport call
try {
  res = await Wreck.request('GET', url, options)
} catch (error) {
  breaker.recordFailure() // no response at all
  throw error
}
breaker.recordSuccess() // any response, whatever its status
```

### 环境变量

当消费者不直接设定值时

| 变量 | 用于 |
| --- | --- |
| `SERVICE_NAME` | `logger.serviceName` |
| `SERVICE_VERSION` | `logger.serviceVersion` |
| `AWS_REGION` | AWS STS 区域,用于服务符 |
| `AWS_ENDPOINT_URL_STS` | AWS STS 端点覆盖(lis-dev的假 STS) |

在CDP上,平台设置了这些. 在Lis-dev中,由作曲文件设置.

## 先决条件

-   节点.js 24(见 `.nvmrc`,使用时 `nvm use`(中文(简体) )
-   对照一个消费的应用程序检查更改: [净值](https://github.com/DEFRA/lis-dev) 一次性设置完成

## 设置

### 发展

```bash
nvm use
npm install
```

### 测试

无法安装工具 `npm install`测试 [维特](https://vitest.dev/)。 。 。 .

## 正在发展中

这是一个库,所以它没有自己的服务器. 尝试改变一个消费应用 没有 发布, 将本地副本链接到 lis- dev 堆栈 :

```bash
cd lis-dev
.bin/sideload link hubs/infra-core # every installed copy now points at this repo
.bin/sideload up front-office       # optional: run a consumer locally with hot reload
.bin/sideload unlink hubs/infra-core # when done
```

## 正在测试

```bash
npm test                 # unit tests
npm run test:coverage    # with coverage
npm run lint             # ESLint
npm run format:check     # Prettier
```

在释放出一个变化之前,还要对连接包进行每个消耗回波的测试.

## 管道

GitHub 动作中运行的构建、版本和出版(`.github/workflows`)使用蛋糕脚本(`*.cake`:

-   **将请求拉到 `main`**: 校验(格式、林特、测试),声纳分析,版本检查
-   **推到一个 `feature/` 或者说 `hotfix/` 分支**: 预发版本和标签
-   **合并到 `main`**: 释放标签,然后发布到 [无](https://www.npmjs.com/package/@defra/lis-hubs-infra-core)

版本来自git标签 (SemVer). 合并后, 等待出版工作完成后, 才将套件撞入消耗回购中 .

## 分支政策

Repo采用干线开发. 分行从 `main` 并命名分支:

-   `feature/LREG-<ticket>-<short-kebab-description>`
-   `hotfix/LREG-<ticket>-<short-kebab-description>`

`LREG` 必须是大写,因为 GitHub 规则拒绝其他分支名称。 重置为 `main` 而不是合并 `main` 进去.

## 协助这一项目

-   跟着 [Defra软件开发标准](https://github.com/DEFRA/software-development-standards)。 。 。 .
-   `npm install` 设置一个承诺前钩子(Husky),运行安全审计,格式检查和lint.
-   打开拉动请求 `main` 使用 PR 模板。 CI必须通过而声纳质量门在合并前必须是绿色.

## 许可证

本资料系根据下列公开政府规定公布:

[http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3 互联网档案馆的存檔,存档日期2013-12-21](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3)

在使用此信息时, 您的产品和应用程序中引用以下的归属声明 MUST .

> 载有根据开放政府许可证颁发的公共部门信息v3

### 关于许可证

开放政府许可证(OGL)由陛下文具办公室(HMSO)的主计长制定,使公共部门的信息提供者能够根据共同开放许可证许可其信息的使用和再使用.

它旨在鼓励自由和灵活地使用和再使用信息,仅附带一些条件.

## 常见问题

### @defra/lis-hubs-infra-core 是什么？

畜牧平台共享枢纽力学\.

### 如何安装 @defra/lis-hubs-infra-core？

在项目目录运行 npm install @defra/lis-hubs-infra-core，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@defra/lis-hubs-infra-registry（\>=0\.13\.0 \<1\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @defra/lis-hubs-infra-core 支持 TypeScript 吗？

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

### @defra/lis-hubs-infra-core 支持 ESM 还是 CommonJS？

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

### @defra/lis-hubs-infra-core 需要什么版本的 Node\.js？

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

### @defra/lis-hubs-infra-core 可以商用吗？

@defra/lis-hubs-infra-core 使用 OGL-UK-3\.0 许可。声明的许可为 OGL-UK-3\.0，请阅读许可原文确认使用条件。以上为概括，不构成法律意见，请以许可原文为准。

### @defra/lis-hubs-infra-core 的下载量有多少？

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

### @defra/lis-hubs-infra-core 还在维护吗？

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

