@defra/lis-hubs-infra-core

中文文档
0.34.0发布于 2026/11/12OGL-UK-3.0ES Module构建来源已验证近 30 天下载 1.2万

畜牧平台共享枢纽力学.

中文使用文档
文档目录19 节
  1. 安装
  2. 使用量
  3. 日志
  4. 请求背景
  5. 呼叫其他地雷影响调查服务
  6. 枢纽代理服务器
  7. 断路器
  8. 环境变量
  9. 先决条件
  10. 设置
  11. 发展
  12. 测试
  13. 正在发展中
  14. 正在测试
  15. 管道
  16. 分支政策
  17. 协助这一项目
  18. 许可证
  19. 关于许可证

双核

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

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

它故意不涵盖认证、会话、角色或权限(见 下层访问)或哪个模块的枢纽 服务(见 登记) (中文(简体) ).

用于:

安装

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

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

使用量

日志

logger 是单人,共享 皮诺 写作的日志 东加勒比国家 cDP 的 OpenSearch 格式。 日志 遍及各地,包括请求处理者 别用霍比的 request.logger。 。 。 .

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,这样你就可以关联 不记录的标识符 :

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

请求背景

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

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
  • 持有 断路器 服务circuitBreaker 设置其 failureThreshold 财务报告和审定财务报表 resetTimeout,或 false 关闭它)
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 和 沉没 选项。 它们是简单的功能,所以可以 而客户持有的任何物品都无法从 外边 如果找不到服务标志,他们就会扔 ServiceTokenError;而服务 电路打开了, CircuitOpenError两者均带有 statusCode 页:1 一个无法通过其他电话 方式( 无法达到服务, 时间已过期, 或有错误状态的答案) 扔出 ServiceRequestError,包含 statusCode, (中文(简体) ), serviceName, (中文(简体) ), method, (中文(简体) ), path 财务报告和审定财务报表 cause 用于捕获错误的代码。 共享日志只发布错误的类型、消息和堆栈, 因此,一个打电话者如果想要他们在日志行中,必须把它们在消息中或者 logger.context。 。 。 .

当地,Lis -dev's lis-fake-sts 服务代表AWS STS. 见 服务代理 在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 } }: 中枢检查一个代理请求 声音检查它体内的标志物 中心流经未读处.

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,它拥有模块的服务名称、基址和 断路器 并建造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。 。 。 .

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

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_NAMElogger.serviceName
SERVICE_VERSIONlogger.serviceVersion
AWS_REGIONAWS STS 区域,用于服务符
AWS_ENDPOINT_URL_STSAWS STS 端点覆盖(lis-dev的假 STS)

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

先决条件

  • 节点.js 24(见 .nvmrc,使用时 nvm use(中文(简体) )
  • 对照一个消费的应用程序检查更改: 净值 一次性设置完成

设置

发展

nvm use
npm install

测试

无法安装工具 npm install测试 维特。 。 。 .

正在发展中

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

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

正在测试

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: 释放标签,然后发布到 无

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

分支政策

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

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

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

协助这一项目

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

许可证

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

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

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

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

关于许可证

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

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

版本与发布记录

@defra/lis-hubs-infra-core 共发布 89 个版本,首次发布于 2026/08/10;过去 12 个月发布了 89 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.34.0latest2026/11/12今天
0.34.0-lreg-945.alpha.2alpha2026/11/12今天
0.34.0-lreg-945.alpha.12026/11/12今天
0.33.72026/11/101 天前
0.33.62026/11/092 天前
0.33.52026/11/092 天前

关于 @defra/lis-hubs-infra-core 的常见问题

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