fix(ci): 让质量门禁真正生效 —— 修两处「一直红所以等于没有」,并清零高危漏洞

## 发现
今天 8 次质量门禁运行**全部失败**(从今天第一个 commit 起就没绿过)。
一道长期红的门禁等于没有门禁 —— 没人会看它,也就保护不了任何东西。
两处独立原因:

### ① SCA:audit 打到了镜像
仓库 `.npmrc` 指向 `registry.npmmirror.com`(加速用),但**镜像不实现 audit 接口**,
`pnpm audit` 必报 `ERR_PNPM_AUDIT_ENDPOINT_NOT_EXISTS`。
→ 显式加 `--registry=https://registry.npmjs.org`。

### ② typecheck:缺 build 顺序
各包 import 的是 `@nodeagent/protocol` 的**类型产物**(dist/*.d.ts)。
CI 全新检出没有 dist,直接 typecheck 集体报
`TS2307: Cannot find module '@nodeagent/protocol'` —— 而本地因为 dist 还在,看不出来
(典型「本地绿 / CI 红」)。
→ 在 typecheck 前插入 `pnpm --filter @nodeagent/protocol build`(只建这一个包,够用且快)。

**注入验证**:把 `packages/protocol/dist` 移走 → 复现 TS2307 → 执行新增的 build 步骤 →
typecheck 零错误。(先证明诊断对,再证明修复有效。)

## audit 通了以后暴露 2 个 high(之前被「假绿」掩盖)
1. **node-forge <=1.4.0**(路径 `apps/agent > selfsigned > node-forge`)
   上游**无修复版本**(patched_versions: None)→ 只能移除依赖。
   `selfsigned` 5.x 已整体改用 `@peculiar/x509` + pkijs,node-forge 被彻底删掉。
   - 升级带来两处不兼容:`generate` 改为**异步**、`days` 改为 `notAfterDate`
   - `ensureCert()` 随之改 async(唯一调用点在 async 的 `main()` 里)
2. **@modelcontextprotocol/sdk <1.31.0**(OAuth 凭据可能被发往 MCP 服务器指定的授权服务器)
   → 升到 `^1.32.1`

## 证书不能只看编译通过(权威本上一条真机教训)
用临时数据目录起真被控端实测:
- 证书 `notBefore=2026-10-17 / notAfter=2036-10-14`(10 年,换算正确)
- key.pem 权限仍为 600
- 客户端握手成功:**52 项能力**,验收 **13 通过 / 0 失败**
- 审计:`No known vulnerabilities found`

验证:`pnpm typecheck` 通过;`pnpm test:unit` **357 项全绿**;
`pnpm install --frozen-lockfile` 通过(lock 与 manifest 一致)。
This commit is contained in:
jkooe committed 2026-10-17 23:21:51 +08:00
1 parent 9f95560268
commit 141f479e4a
6 files changed
+253 -33

No files matched your search

+14 -1
View File
@@ -49,7 +49,11 @@ jobs:
# 依赖漏洞:High 及以上阻断
- name: 依赖漏洞扫描(SCA)
run: pnpm audit --audit-level=high
# ⚠️ 必须显式指定公共 registry(2026-10-17)
# 仓库 `.npmrc` 指向 registry.npmmirror.com(镜像加速),但**镜像不实现
# audit 接口**,`pnpm audit` 会直接报 ERR_PNPM_AUDIT_ENDPOINT_NOT_EXISTS。
# 结果就是这道门禁从加上那天起**一直是红的**,等于没有门禁。
run: pnpm audit --audit-level=high --registry=https://registry.npmjs.org
# ② 质量门禁:类型 + 覆盖率
gate:
@@ -72,6 +76,15 @@ jobs:
- run: pnpm install --frozen-lockfile
# ⚠️ 必须先构建 `@nodeagent/protocol` 再查类型(2026-10-17)
# 各包 import 的是 `@nodeagent/protocol` 的**类型产物**(dist/*.d.ts)。
# CI 里全新检出、没有 dist,直接 typecheck 会集体报
# `TS2307: Cannot find module '@nodeagent/protocol'` —— 而本地因为 dist 还在,
# 看不出问题(典型的「本地绿 / CI 红」)。
# 只构建 protocol 而不跑全量 build:够用且快,全量 build 留给下一步。
- name: 构建 protocol 类型产物
run: pnpm --filter @nodeagent/protocol build
- run: pnpm typecheck
# 单测 import 的是 dist/(编译产物),必须先构建,否则覆盖率全空
+1 -1
View File
@@ -20,7 +20,7 @@
},
"dependencies": {
"@nodeagent/protocol": "workspace:*",
"selfsigned": "^2.4.1",
"selfsigned": "^5.5.0",
"ws": "^8.18.0"
},
"devDependencies": {
+11 -3
View File
@@ -13,7 +13,7 @@ export interface TlsMaterial {
* 确保自签证书存在(首次生成并缓存到 ~/.nodeagent/certs/)。
* v1 用自签证书做传输加密;控制端可校验证书指纹或临时跳过校验。
*/
export function ensureCert(): TlsMaterial {
export async function ensureCert(): Promise<TlsMaterial> {
const dir = join(agentDir(), 'certs');
const certPath = join(dir, 'cert.pem');
const keyPath = join(dir, 'key.pem');
@@ -23,8 +23,16 @@ export function ensureCert(): TlsMaterial {
}
mkdirSync(dir, { recursive: true });
const pems = selfsigned.generate([{ name: 'commonName', value: 'nodeagent' }], {
days: 3650,
// selfsigned 5.x:`generate` 改为**异步**(旧版同步返回)。
// 升级动因不是追新,而是安全:2.x 依赖 node-forge 1.4.0,
// 该版本有 high 级 advisory 且**上游无修复版本**(patched_versions: None);
// 5.x 已整体换成 @peculiar/x509 + pkijs,node-forge 被彻底移除。
// v5 把 `days` 换成了 `notAfterDate`(绝对时间),语义相同但必须换算 ——
// 这是升级时的**静默不兼容点**:老写法编译期报 TS2353,能拦住;
// 但若只改类型不改值,就会签出一个有效期不对的证书,运行期才暴露。
const notAfterDate = new Date(Date.now() + 3650 * 24 * 60 * 60 * 1000);
const pems = await selfsigned.generate([{ name: 'commonName', value: 'nodeagent' }], {
notAfterDate,
keySize: 2048,
algorithm: 'sha256',
});
+1 -1
View File
@@ -144,7 +144,7 @@ async function main(): Promise<void> {
});
// v6:Hub 模式下不监听本地端口,改为主动外连 Hub(穿 NAT)
const useHub = config.hub?.enabled === true;
const tls = !useHub && config.tls ? ensureCert() : null;
const tls = !useHub && config.tls ? await ensureCert() : null;
const server = useHub ? null : await createAgentServer(config, tls);
let hubClient: HubClient | null = null;
+1 -1
View File
@@ -14,7 +14,7 @@
"start": "node dist/index.js"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.0",
"@modelcontextprotocol/sdk": "^1.32.1",
"@nodeagent/client": "workspace:*",
"@nodeagent/protocol": "workspace:*"
}
+225 -26
View File
@@ -24,8 +24,8 @@ importers:
specifier: workspace:*
version: link:../../packages/protocol
selfsigned:
specifier: ^2.4.1
version: 2.4.1
specifier: ^5.5.0
version: 5.5.0
ws:
specifier: ^8.18.0
version: 8.21.3
@@ -105,8 +105,8 @@ importers:
apps/mcp:
dependencies:
'@modelcontextprotocol/sdk':
specifier: ^1.12.0
version: 1.30.1(zod@4.6.5)
specifier: ^1.32.1
version: 1.32.1(zod@4.6.5)
'@nodeagent/client':
specifier: workspace:*
version: link:../../packages/client
@@ -342,8 +342,8 @@ packages:
'@juggle/resize-observer@3.4.0':
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
'@modelcontextprotocol/sdk@1.30.1':
resolution: {integrity: sha512-H2HxLvC3HDNybePJaLdSrU1hhUK5iQw+WvV1b01myFyI7sdVGe1u/IPTE5D9fGCiJDVtgMV/lmFkQXLmQyIFYA==}
'@modelcontextprotocol/sdk@1.32.1':
resolution: {integrity: sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==}
engines: {node: '>=18'}
peerDependencies:
'@cfworker/json-schema': ^4.1.1
@@ -352,9 +352,60 @@ packages:
'@cfworker/json-schema':
optional: true
'@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
'@oxc-project/types@0.152.0':
resolution: {integrity: sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==}
'@peculiar/asn1-cms@2.11.0':
resolution: {integrity: sha512-SlAiDoT/Cd8qaNmbTt78gqyaEvu2fQd6ML6KWJkdjXGrgDKnHHrusVkfQUelkfinL2p665IIADb0JBixtT8W1g==}
engines: {node: '>=14'}
'@peculiar/asn1-csr@2.11.0':
resolution: {integrity: sha512-M/ED0yJ05qMK+UADPKnIa8vhAeewOJALSxTAZB7RQ/batRHhIJZkwznCcWAbFO5saHJ1yEQ+m4lncEcG9RnQSg==}
engines: {node: '>=14'}
'@peculiar/asn1-ecc@2.11.0':
resolution: {integrity: sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q==}
engines: {node: '>=14'}
'@peculiar/asn1-pfx@2.11.0':
resolution: {integrity: sha512-ykSAWRu8KkmzU8LRpk9ZQC3zuLmBEtoSMjIv9XHVamD5W7amqreV5wttKqnvtjWOzzSJQxA/HVT8/tHwpEEGSQ==}
engines: {node: '>=14'}
'@peculiar/asn1-pkcs8@2.11.0':
resolution: {integrity: sha512-lragjkjQGnQ5luxC+sxoAfAO/jBiQ7hOEGlDKJUk7MC5zY3AzjB2DU0GyPUH1Sswdv10t7DurY0zylOYMLb88w==}
engines: {node: '>=14'}
'@peculiar/asn1-pkcs9@2.11.0':
resolution: {integrity: sha512-gDdFjpqV0weJjgNUvueUVf4D8uVbpq+VbG0TsxLAY2QGljAkJyL9qwQ7avol9j0jaYSJ7Ey7v7RZp0M3GTcQSA==}
engines: {node: '>=14'}
'@peculiar/asn1-rsa@2.11.0':
resolution: {integrity: sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA==}
engines: {node: '>=14'}
'@peculiar/asn1-schema@2.11.0':
resolution: {integrity: sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A==}
engines: {node: '>=14'}
'@peculiar/asn1-x509-attr@2.11.0':
resolution: {integrity: sha512-Fgvnd9REmLxEj/4cbDP54dNUNUXkzUksXLqEHqs1mHBuSRjSTCUSPM/WQIZYSvrdG7ND9CX1AQtPoIBekhgQSA==}
engines: {node: '>=14'}
'@peculiar/asn1-x509@2.11.0':
resolution: {integrity: sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww==}
engines: {node: '>=14'}
'@peculiar/utils@2.0.3':
resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==}
'@peculiar/x509@1.14.3':
resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==}
engines: {node: '>=20.0.0'}
'@rolldown/binding-android-arm-eabi@1.2.12':
resolution: {integrity: sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -542,9 +593,6 @@ packages:
'@types/lodash@4.17.25':
resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==}
'@types/node-forge@1.3.14':
resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==}
'@types/node@22.20.4':
resolution: {integrity: sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA==}
@@ -643,6 +691,10 @@ packages:
alien-signals@3.2.1:
resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==}
asn1js@3.1.0:
resolution: {integrity: sha512-HWYi1THkOqguCiO+vwj09ZkQFD2kKEsejYHAYCtX0D80WVdoDnvRc9IukXX/jeb0T9NRWJnRtqwdbHltnFjwXA==}
engines: {node: '>=12.0.0'}
ast-kit@2.2.0:
resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
engines: {node: '>=20.19.0'}
@@ -665,6 +717,10 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
bytestreamjs@2.0.1:
resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==}
engines: {node: '>=6.0.0'}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -1052,10 +1108,6 @@ packages:
resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==}
engines: {node: '>=18'}
node-forge@1.4.0:
resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==}
engines: {node: '>= 6.13.0'}
nostics@1.3.0:
resolution: {integrity: sha512-wzRsrJwNlFbqIRQt8aCeL2WE8USip/uuvGSOZV1D02CxX8ABTMbw8IywKjH7yWHETMXbWJI4OBpihg9rmz2Vyg==}
@@ -1121,6 +1173,10 @@ packages:
pkg-types@2.3.3:
resolution: {integrity: sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==}
pkijs@3.4.1:
resolution: {integrity: sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA==}
engines: {node: '>=16.0.0'}
postcss@8.5.29:
resolution: {integrity: sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==}
engines: {node: ^10 || ^12 || >=14}
@@ -1129,6 +1185,13 @@ packages:
resolution: {integrity: sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==}
engines: {node: '>= 0.10'}
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
pvutils@1.2.0:
resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==}
engines: {node: '>=16.0.0'}
qs@6.16.0:
resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==}
engines: {node: '>=0.6'}
@@ -1148,6 +1211,9 @@ packages:
resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
engines: {node: '>= 20.19.0'}
reflect-metadata@0.2.2:
resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
@@ -1170,9 +1236,9 @@ packages:
seemly@0.3.10:
resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==}
selfsigned@2.4.1:
resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
engines: {node: '>=10'}
selfsigned@5.5.0:
resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==}
engines: {node: '>=18'}
send@1.2.1:
resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
@@ -1228,9 +1294,19 @@ packages:
treemate@0.3.11:
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsyringe@4.10.0:
resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==}
engines: {node: '>= 6.0.0'}
type-is@2.1.0:
resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==}
engines: {node: '>= 18'}
@@ -1554,7 +1630,7 @@ snapshots:
'@juggle/resize-observer@3.4.0': {}
'@modelcontextprotocol/sdk@1.30.1(zod@4.6.5)':
'@modelcontextprotocol/sdk@1.32.1(zod@4.6.5)':
dependencies:
'@hono/node-server': 2.1.1(hono@4.13.9)
ajv: 8.20.0
@@ -1576,8 +1652,104 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@noble/hashes@1.8.0': {}
'@oxc-project/types@0.152.0': {}
'@peculiar/asn1-cms@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
'@peculiar/asn1-x509-attr': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-csr@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-ecc@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-pfx@2.11.0':
dependencies:
'@peculiar/asn1-cms': 2.11.0
'@peculiar/asn1-pkcs8': 2.11.0
'@peculiar/asn1-rsa': 2.11.0
'@peculiar/asn1-schema': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-pkcs8@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-pkcs9@2.11.0':
dependencies:
'@peculiar/asn1-cms': 2.11.0
'@peculiar/asn1-pfx': 2.11.0
'@peculiar/asn1-pkcs8': 2.11.0
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
'@peculiar/asn1-x509-attr': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-rsa@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-schema@2.11.0':
dependencies:
'@peculiar/utils': 2.0.3
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-x509-attr@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/asn1-x509@2.11.0':
dependencies:
'@peculiar/asn1-schema': 2.11.0
'@peculiar/utils': 2.0.3
asn1js: 3.1.0
tslib: 2.8.1
'@peculiar/utils@2.0.3':
dependencies:
tslib: 2.8.1
'@peculiar/x509@1.14.3':
dependencies:
'@peculiar/asn1-cms': 2.11.0
'@peculiar/asn1-csr': 2.11.0
'@peculiar/asn1-ecc': 2.11.0
'@peculiar/asn1-pkcs9': 2.11.0
'@peculiar/asn1-rsa': 2.11.0
'@peculiar/asn1-schema': 2.11.0
'@peculiar/asn1-x509': 2.11.0
pvtsutils: 1.3.6
reflect-metadata: 0.2.2
tslib: 2.8.1
tsyringe: 4.10.0
'@rolldown/binding-android-arm-eabi@1.2.12':
optional: true
@@ -1684,10 +1856,6 @@ snapshots:
'@types/lodash@4.17.25': {}
'@types/node-forge@1.3.14':
dependencies:
'@types/node': 22.20.4
'@types/node@22.20.4':
dependencies:
undici-types: 6.21.0
@@ -1823,6 +1991,12 @@ snapshots:
alien-signals@3.2.1: {}
asn1js@3.1.0:
dependencies:
pvtsutils: 1.3.6
pvutils: 1.2.0
tslib: 2.8.1
ast-kit@2.2.0:
dependencies:
'@babel/parser': 7.29.9
@@ -1854,6 +2028,8 @@ snapshots:
bytes@3.1.2: {}
bytestreamjs@2.0.1: {}
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -2235,8 +2411,6 @@ snapshots:
dependencies:
content-type: 2.1.0
node-forge@1.4.0: {}
nostics@1.3.0: {}
object-assign@4.1.1: {}
@@ -2289,6 +2463,15 @@ snapshots:
exsolve: 1.1.3
pathe: 2.0.3
pkijs@3.4.1:
dependencies:
'@noble/hashes': 1.8.0
asn1js: 3.1.0
bytestreamjs: 2.0.1
pvtsutils: 1.3.6
pvutils: 1.2.0
tslib: 2.8.1
postcss@8.5.29:
dependencies:
nanoid: 3.3.20
@@ -2300,6 +2483,12 @@ snapshots:
forwarded: 0.2.0
ipaddr.js: 1.9.1
pvtsutils@1.3.6:
dependencies:
tslib: 2.8.1
pvutils@1.2.0: {}
qs@6.16.0:
dependencies:
es-define-property: 1.0.1
@@ -2318,6 +2507,8 @@ snapshots:
readdirp@5.1.1: {}
reflect-metadata@0.2.2: {}
require-from-string@2.0.2: {}
rolldown@1.2.12:
@@ -2357,10 +2548,10 @@ snapshots:
seemly@0.3.10: {}
selfsigned@2.4.1:
selfsigned@5.5.0:
dependencies:
'@types/node-forge': 1.3.14
node-forge: 1.4.0
'@peculiar/x509': 1.14.3
pkijs: 3.4.1
send@1.2.1:
dependencies:
@@ -2436,8 +2627,16 @@ snapshots:
treemate@0.3.11: {}
tslib@1.14.1: {}
tslib@2.3.0: {}
tslib@2.8.1: {}
tsyringe@4.10.0:
dependencies:
tslib: 1.14.1
type-is@2.1.0:
dependencies:
content-type: 2.1.0