@lenne.tech/nest-server 11.42.4 → 11.42.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/configurable-features.md +1 -1
- package/.claude/rules/package-management.md +69 -3
- package/.claude/rules/testing.md +3 -3
- package/FRAMEWORK-API.md +1 -1
- package/dist/core/common/services/core-body-parser.initializer.d.ts +2 -0
- package/dist/core/common/services/core-body-parser.initializer.js +23 -3
- package/dist/core/common/services/core-body-parser.initializer.js.map +1 -1
- package/dist/test/test.helper.d.ts +60 -0
- package/dist/test/test.helper.js +104 -0
- package/dist/test/test.helper.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/REQUEST-LIFECYCLE.md +1 -1
- package/migration-guides/11.42.3-to-11.42.4.md +27 -4
- package/migration-guides/11.42.4-to-11.42.5.md +104 -0
- package/migration-guides/11.42.5-to-11.42.6.md +97 -0
- package/package.json +1 -1
- package/src/core/common/interfaces/server-options.interface.ts +5 -0
- package/src/core/common/services/core-body-parser.initializer.ts +47 -5
- package/src/test/README.md +79 -1
- package/src/test/test.helper.ts +303 -0
|
@@ -335,7 +335,7 @@ This pattern is currently applied to:
|
|
|
335
335
|
| TUS S3 Staging | `tus.s3Staging` | Explicit Boolean (default ON when S3 configured) | `true` when `s3` is configured, otherwise inert. Stages in-progress uploads in `s3.stagingBucket` via `@tus/s3-store` instead of `tus.uploadDir` on local disk, so resumable uploads survive replica restarts and need no sticky sessions. Set `false` to force local disk. Missing OPTIONAL peer `@tus/s3-store` → warning + fall back to local disk (NOT a boot failure). **Give the staging bucket a lifecycle rule expiring incomplete multipart uploads** — the framework's own expiration cleanup is skipped in S3 mode (S3 is the right place for that policy), so aborted uploads otherwise accumulate parts nothing removes |
|
|
336
336
|
| Cron Job Deduplication | per job: `distributed` in `CronJobConfig` | Explicit Boolean | **`true` when `redis` is configured, otherwise `false`** — a single-replica project that upgrades must not silently gain a `cron-locks` collection, a lease write per tick, and a new way for a tick to be skipped. A Redis-less multi-replica fleet opts in per job with `distributed: true` (MongoDB lease). Mechanism: BullMQ job scheduler when Redis + the OPTIONAL peer `bullmq` are present AND `cronTime` is a string without `utcOffset`; otherwise local timer + lease (Redis `SET NX`, else a TTL-indexed `cron-locks` document). Tick lease TTL 3600 s. **Leases fail open** — an unreachable lease store runs the tick everywhere rather than stopping all scheduled work fleet-wide. **`runOnInit` (default `true`) deduplicates over a FIXED per-job key with a 300 s TTL**, because replicas do not share a boot instant: replicas booting within 5 min run the startup tick once between them, and a replica restarting inside that window SKIPS its startup tick — set `distributed: false` on jobs whose `runOnInit` work is per-process (warming a process-local cache). No constructor change needed: `CoreModule` fills `core-cron-jobs.registry.ts` via `CoreCronJobsInitializer` and `CoreCronJobs` reads it lazily; explicit `{ connection, redisService }` in `CoreCronJobsOptions` wins. With neither source it warns once and every replica runs every tick |
|
|
337
337
|
| Shutdown Delay | `shutdownDelayMs` | Numeric Sentinel — Family B (`0` = off) | `0` (default, no delay, no log). Waits N ms **in the SIGTERM/SIGINT handler, before `close()` is entered**, so a load balancer can finish deregistering while the instance is still fully healthy. NOT a lifecycle hook: `close()` runs `onModuleDestroy` → `beforeApplicationShutdown` → dispose → `onApplicationShutdown`, so a delay in `beforeApplicationShutdown` would wait with every module already torn down while the socket still accepts — worse than no delay. **Requires `installGracefulShutdown(app)` in main.ts, which REPLACES `server.enableShutdownHooks()`** — keeping both makes Nest close the app in parallel with the wait, so the delay silently never happens. At delay `0` the helper IS `enableShutdownHooks()`. **Keep the value well below the orchestrator grace period AND leave room for the drain that follows**: Compose `stop_grace_period` 10s, Kubernetes `terminationGracePeriodSeconds` 30s, and `installProcessDiagnostics()` force-exits after 30s — exceed any and the process is SIGKILLed mid-wait with no hook running. Warns above `10000`, capped at `60000`. Non-numeric / negative values behave like `0` |
|
|
338
|
-
| Body Parser Limits | `bodyParser.json.limit`, `bodyParser.urlencoded.limit` | Explicit Value (Express/body-parser default) — invalid → default, never unbounded | **Unset = 100 kB each, exactly as NestJS registers the parsers** (body-parser's own default — a limit nobody chose, and before 11.42.4 the only one in force: over it a request got a bare `request entity too large`, before auth and routing, GraphQL included). A number is bytes, a string a 1024-based size (`'500kb'`, `'2mb'`, units `b`/`kb`/`mb`/`gb`). The two limits are separate on purpose — raising JSON must not raise form posts. **Not raised by default because the parser runs before authentication** and `JSON.parse` blocks the event loop for the whole body: ~0.5 ms for 100 kB, ~16 ms for 1 MB, ~55 ms for 2 MB per request on a realistic document shape. Applied by `CoreBodyParserInitializer` (CoreModule provider) in `onModuleInit` by **swapping the handle of the global `jsonParser`/`urlencodedParser` layers NestJS registered, in place** — NestJS registers them inside `app.init()` before any init hook, and a parser appended later would sit behind the routes. Same position, `extended: true` for URL-encoded, `req.rawBody` kept when the app came from `NestFactory.create(…, { rawBody: true })` (read from the container's context options; under `Test.createTestingModule()` those options never reach the container, so a test app with `rawBody: true` gets no `req.rawBody` from a CONFIGURED parser). Because it runs during module init it **holds under `Test.createTestingModule()`**, which never runs `main.ts` — the reason a `useBodyParser()` in `main.ts` was not enough. A configured value also replaces a global parser registered in `main.ts`; a **path-scoped** one (`server.use('/upload', json({ limit }))`) is left alone and stays the way to give one path its own limit (the parser runs before routing; GraphQL shares one path). An invalid value (`0`, negative, `NaN`, a word) is refused with an error log and the parser keeps its limit. **Independent of configuration**, every 413 from a global parser is answered as `PayloadTooLargeException` with `#LTNS_0304: Request body too large [<n> bytes, limit <m> bytes]` (size only when a `Content-Length` was sent) and logged as a WARN naming method, path without query string, and the config key — no boot warning, because the framework cannot know which routes expect large bodies; the first oversized request is the earliest point anything can be said. Other parser errors pass through unchanged. Pinned by `tests/unit/body-parser.spec.ts` and `tests/body-parser.e2e-spec.ts` (mutations `body-parser-*`). Implementation: `common/services/core-body-parser.initializer.ts` |
|
|
338
|
+
| Body Parser Limits | `bodyParser.json.limit`, `bodyParser.urlencoded.limit` | Explicit Value (Express/body-parser default) — invalid → default, never unbounded | **Unset = 100 kB each, exactly as NestJS registers the parsers** (body-parser's own default — a limit nobody chose, and before 11.42.4 the only one in force: over it a request got a bare `request entity too large`, before auth and routing, GraphQL included). A number is bytes, a string a 1024-based size (`'500kb'`, `'2mb'`, units `b`/`kb`/`mb`/`gb`). The two limits are separate on purpose — raising JSON must not raise form posts. **Not raised by default because the parser runs before authentication** and `JSON.parse` blocks the event loop for the whole body: ~0.5 ms for 100 kB, ~16 ms for 1 MB, ~55 ms for 2 MB per request on a realistic document shape. Applied by `CoreBodyParserInitializer` (CoreModule provider) in `onModuleInit` by **swapping the handle of the global `jsonParser`/`urlencodedParser` layers NestJS registered, in place** — NestJS registers them inside `app.init()` before any init hook, and a parser appended later would sit behind the routes. Same position, `extended: true` for URL-encoded, `req.rawBody` kept when the app came from `NestFactory.create(…, { rawBody: true })` (read from the container's context options; under `Test.createTestingModule()` those options never reach the container, so a test app with `rawBody: true` gets no `req.rawBody` from a CONFIGURED parser). Because it runs during module init it **holds under `Test.createTestingModule()`**, which never runs `main.ts` — the reason a `useBodyParser()` in `main.ts` was not enough. A configured value also replaces a global parser registered in `main.ts`; a **path-scoped** one (`server.use('/upload', json({ limit }))`) is left alone and stays the way to give one path its own limit (the parser runs before routing; GraphQL shares one path). **Keep `server.useBodyParser('json')` in `main.ts` next to a path-scoped parser**: NestJS registers its global parser only when no layer with the same FUNCTION NAME exists (`isMiddlewareApplied()`), so a path-scoped `json()` registered before `app.init()` suppresses it and every other path gets an empty body (a sign-in fails with a validation error). Since 11.42.6 the initializer warns at boot about exactly that (`warnMissingGlobalParser()`). It deliberately does not re-insert the parser: NestJS would have placed it after everything `main.ts` registered, a position no longer knowable during module init, and a raw-body webhook or proxy registered after the path-scoped parser must keep seeing the unread stream. An invalid value (`0`, negative, `NaN`, a word) is refused with an error log and the parser keeps its limit. **Independent of configuration**, every 413 from a global parser is answered as `PayloadTooLargeException` with `#LTNS_0304: Request body too large [<n> bytes, limit <m> bytes]` (size only when a `Content-Length` was sent) and logged as a WARN naming method, path without query string, and the config key — no boot warning, because the framework cannot know which routes expect large bodies; the first oversized request is the earliest point anything can be said. Other parser errors pass through unchanged. Pinned by `tests/unit/body-parser.spec.ts` and `tests/body-parser.e2e-spec.ts` (mutations `body-parser-*`). Implementation: `common/services/core-body-parser.initializer.ts` |
|
|
339
339
|
| Trust Proxy | `trustProxy` | Explicit Value (pass-through, Express default) | `false` (Express's own default — the forwarded chain is not trusted). Passed verbatim to `app.set('trust proxy', …)` by `CoreTrustProxyInitializer`, a `CoreModule` provider, so a consumer inherits it by upgrading and needs no `main.ts` edit. Accepts `false` / a hop count (`1`, `2`) / `'loopback'` / a subnet list — **not** Express's predicate function: the value must survive `NEST_SERVER_CONFIG` / `NSC__*` (JSON) and the ConfigService deep clone. **This is what makes `request.ip` correct, and every IP-keyed rate limit depends on it**: unset behind Caddy/nginx/an ingress, `req.ip` is the PROXY address for every request, so all clients share ONE bucket and `auth.rateLimit.max` throttles everybody at once — exactly fleet-wide once `redis` is configured. Trusting MORE hops than exist is the opposite failure: a client prepends its own header entry and picks a fresh bucket per request. Applied at module init (inside `app.init()`/`listen()`, i.e. AFTER `main.ts`), so a configured value wins over a hand-written `app.set()`; an UNSET value is never applied, which keeps `app.set('trust proxy', fn)` in `main.ts` available as the escape hatch for the predicate form. **Unset + an IP-keyed limiter enabled (`auth.rateLimit` / `betterAuth.rateLimit`) logs a boot warning naming the shared-bucket consequence**; `trustProxy: false` is the explicit "nothing proxies me" answer that silences it. The AI limiter keys on the user id and is unaffected |
|
|
340
340
|
| Outbound URL Guard (SSRF) | `security.allowPrivateOutboundTargets` | Explicit Boolean with DERIVED default | **Opt-in helper for URLs a USER entered** (webhooks, export targets, ERP addresses) — `outboundFetch()`, `assertOutboundUrlAllowed()`, `createOutboundDispatcher()` in `common/helpers/outbound-url.helper.ts` (11.42.0). Nothing is applied globally: configured targets (AI providers, SMTP, S3, Redis, Brevo) never go through it. Refuses loopback, RFC 1918, link-local incl. `169.254.169.254`, CGNAT, `0/8`, benchmarking, multicast/reserved, IPv6 unspecified/loopback/IPv4-compatible (`::/96`), NAT64, ULA, link-local and multicast, and IPv4-mapped IPv6 in every notation (canonicalised through the URL parser). Checked TWICE: on the URL before sending (readable `OutboundUrlBlockedError`) and on every connection through an undici `Agent` with a guarded connector — the only place that sees a redirect's next hop and a DNS answer at connect time (rebinding). **Unset → derived from the environment**: allowed in `local`, `e2e`, `ci`, refused everywhere else — deliberately including `test`, a DEPLOYED stage in starter-based projects; `true`/`false` (also the strings, from `NSC__SECURITY__ALLOW_PRIVATE_OUTBOUND_TARGETS`) decide explicitly. Per call, `allowedHosts` frees single internal hosts (`'erp.local:8443'` = that port, `'erp.local'` = any port) without opening the rest — re-checked per connection, so a redirect does not inherit it. `outboundFetch()` uses undici's OWN `fetch` (runtime dependency `undici` since 11.42.0), because Node 22's built-in fetch bundles a different undici major than the agent |
|
|
341
341
|
| AI Egress Allowlist (SSRF) | `ai.allowedBaseUrlHosts` | Explicit Value — **unset = permissive**, malformed = INTERPRETED or reported, never silently off | `undefined` → no restriction, so a local provider (Ollama on `localhost:11434`) works out of the box. Set → only those hosts are reachable, matched against `URL.host` (incl. port) and `URL.hostname`. **Accepts an array OR a comma-separated string, and the string form is not a convenience** — it is what the framework's own env mapping produces: `NSC__AI__ALLOWED_BASE_URL_HOSTS` becomes `{ ai: { allowedBaseUrlHosts: '<string>' } }` and lodash `merge` assigns that scalar straight over a configured array. Until 11.39.x a bare `!Array.isArray(...) -> return` read that as "not configured" and skipped the check entirely, so the canonical `NSC__` spelling silently disabled SSRF egress control with no log line at all. Entries are trimmed, lowercased and stripped of a fully-qualifying trailing dot, and the SAME normalisation is applied to the URL, so neither side wins by spelling one DNS name differently; a bare hostname entry matches any port, and an entry naming the scheme's default port (`example.com:443` on https) also matches the portless URL. A value that is neither array nor string carries no hostnames — the allowlist is then inactive and that is LOGGED as an error, because from the outside it looks exactly like "correctly unset". Enforced on **all three** outbound paths (`chat()`, the capability `probe()`, and `probeContextWindow()` — the last was unguarded before 11.39.x and is reachable from an ordinary user prompt via `detectAndPersistCapabilities()`, before the rate limit). Implementation: `openai-compatible.provider.ts` → `assertBaseUrlAllowed()` / `resolveAllowedBaseUrlHosts()` |
|
|
@@ -325,9 +325,75 @@ API is reported as `UNVERIFIED` and tolerated locally — but **fails under `CI`
|
|
|
325
325
|
nobody reads is indistinguishable from a check that ran.
|
|
326
326
|
|
|
327
327
|
One consequence worth knowing before you reach for this mechanism: the guard fires when the advisory
|
|
328
|
-
has a patched version for **any** affected range.
|
|
329
|
-
|
|
330
|
-
|
|
328
|
+
has a patched version for **any** affected range. For most findings that is the honest outcome — a
|
|
329
|
+
fix exists, take it, and the case is an override problem rather than a suppression problem.
|
|
330
|
+
|
|
331
|
+
#### When the fix exists and the consumer cannot use it (`unusableFixConsumers`, since 11.42.5)
|
|
332
|
+
|
|
333
|
+
The exception is the case where "a fix exists" and "the fix is usable" come apart: a patched major
|
|
334
|
+
removed an export its consumer imports, or the consumer pins the vulnerable range itself. Then
|
|
335
|
+
`FIX AVAILABLE` is not advice but a dead end, and the only ways out used to be a permanently red
|
|
336
|
+
build or a guard switched off for that entry.
|
|
337
|
+
|
|
338
|
+
Measured case (lt-crm, 2026-10-06): three `simple-git` advisories, one CRITICAL requiring `>=4.0.1`,
|
|
339
|
+
reachable only via `nuxt > @nuxt/devtools > simple-git`. simple-git 4 dropped the default export
|
|
340
|
+
devtools imports, so the override made `nuxt prepare` fail outright. The newest devtools in the 3.x
|
|
341
|
+
line still imports it that way, and devtools is a hard `dependencies` entry of `nuxt` — so it can be
|
|
342
|
+
neither raised nor dropped. No published 3.x carries the fix.
|
|
343
|
+
|
|
344
|
+
**Exhaust the ladder first** (raise the vulnerable package, raise the consumer, raise the framework,
|
|
345
|
+
patch the consumer — see the `running-check-script` skill for the full rungs and the conditions on
|
|
346
|
+
patching). Only then declare it, next to the `ignoreGhsas` entry:
|
|
347
|
+
|
|
348
|
+
```yaml
|
|
349
|
+
auditConfig:
|
|
350
|
+
ignoreGhsas:
|
|
351
|
+
- GHSA-x6jw-m9v5-85vh
|
|
352
|
+
unusableFixConsumers:
|
|
353
|
+
GHSA-x6jw-m9v5-85vh: '@nuxt/devtools@3.4.1 cannot use 4.0.1'
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
The value is the declaration's whole point: it records the consumer, the version it was assessed
|
|
357
|
+
against, **and** the patched versions that were rejected. Each of those can change without anybody
|
|
358
|
+
revisiting the entry, so `check:overrides` re-checks them on every run and fails with `RE-TEST` when
|
|
359
|
+
any has moved:
|
|
360
|
+
|
|
361
|
+
1. the declared consumer left the tree, or the assessed version is no longer in it;
|
|
362
|
+
2. the advisory now offers a patched version that was never assessed — the **backport** case, where
|
|
363
|
+
a fix appears in a line the consumer *can* use while the rejected one stays unusable;
|
|
364
|
+
3. anything other than `consumer@assessedVersion` pulls an affected package, so "only this one
|
|
365
|
+
consumer" no longer holds. The comparison is deliberately strict and includes the **version**: a
|
|
366
|
+
second version of the same consumer is a path nobody assessed, and comparing by name alone let
|
|
367
|
+
one ride along on the other's declaration, with the winner decided by lockfile order.
|
|
368
|
+
|
|
369
|
+
The third check reads **both halves** of the lockfile. `importers:` holds what the repository itself
|
|
370
|
+
declares (`.`, `projects/api`, `projects/app`), `snapshots:` the edges between third-party packages
|
|
371
|
+
— and the first is the likelier production path, because a direct dependency can simply be raised.
|
|
372
|
+
Reading only `snapshots:` hid exactly that case: in this repository `importers:` starts at line 28
|
|
373
|
+
and `snapshots:` at 5264, so everything the project says about itself sat 5000 lines above the scan
|
|
374
|
+
window, with `ignoreGhsas` keeping `pnpm audit` quiet about it too.
|
|
375
|
+
|
|
376
|
+
What counts as an edge, stated precisely: `dependencies`, `devDependencies` and
|
|
377
|
+
`optionalDependencies` do, the `peerDependencies` and `transitivePeerDependencies` *blocks* do not.
|
|
378
|
+
That is **not** the same as "peer edges are ignored" — in a pnpm v9 snapshot a RESOLVED peer is
|
|
379
|
+
written into `dependencies:` like any other edge (verified on `@nestjs/core`, whose peers
|
|
380
|
+
`@nestjs/common`, `reflect-metadata` and `rxjs` all appear there), so it is counted. The check
|
|
381
|
+
therefore over-counts rather than under-counts, which is the safe direction: an extra `RE-TEST` asks
|
|
382
|
+
for a second look at a suppression, where a missed edge would hide a consumer nobody assessed.
|
|
383
|
+
|
|
384
|
+
When a section cannot be found at all, or the advisory names no affected package, the run fails
|
|
385
|
+
rather than passes. "I could not check whether a second consumer exists" must not read like "there
|
|
386
|
+
is none".
|
|
387
|
+
|
|
388
|
+
An accepted residual is also printed on every **green** run, because it is the one kind that can
|
|
389
|
+
stop being true without anything in this repository changing. A suppression with **no** declaration
|
|
390
|
+
still fails on sight — this is a narrow, self-expiring exception, not a wider gate.
|
|
391
|
+
|
|
392
|
+
Pinned by `tests/unit/check-overrides.guard.spec.ts` and six registered mutations
|
|
393
|
+
(`unusable-fix-*` in `tests/regression-mutations.json`), one per way the justification can expire —
|
|
394
|
+
plus one for the opposite failure, a guard that rejects a declaration which is still true. That one
|
|
395
|
+
matters just as much: a check that cries wolf on correct entries is a check that gets switched off,
|
|
396
|
+
which is how the hole this feature closes came about in the first place.
|
|
331
397
|
|
|
332
398
|
**Current entries (since 2026-10-03):** `GHSA-ch52-4w7c-c8xp` (http-cache-semantics, via the
|
|
333
399
|
`@swc/cli` binary downloader) and `GHSA-vfj7-8cjw-p6xm` (braces, via nodemon / npm-watch). Both are
|
package/.claude/rules/testing.md
CHANGED
|
@@ -266,7 +266,7 @@ pnpm run check:mutations -- --id=<id> # one mutation
|
|
|
266
266
|
pnpm run check:mutations -- --list # the registry, without running anything
|
|
267
267
|
pnpm run check:mutations -- --allow-dirty # when the fix and its evidence share a working tree
|
|
268
268
|
pnpm run check:mutations -- --jobs=4 # N mutations at a time (default: 2, or 4 on >=12 cores)
|
|
269
|
-
pnpm run check:mutations -- --no-infra # only the
|
|
269
|
+
pnpm run check:mutations -- --no-infra # only the 109 that need no MongoDB
|
|
270
270
|
pnpm run check:mutations -- --since=<ref> # only mutations touching files changed since <ref>
|
|
271
271
|
```
|
|
272
272
|
|
|
@@ -285,7 +285,7 @@ when the registry, a vitest config or a setup file changed, since those can move
|
|
|
285
285
|
commit, and in CI alongside the publish without blocking it. The price of caching is a cache that
|
|
286
286
|
has to model each spec's full dependency closure correctly, and getting that wrong produces a stale
|
|
287
287
|
PASS for a test that has since gone vacuous — exactly what the gate is there to prevent. Bad trade
|
|
288
|
-
at
|
|
288
|
+
at 172 mutations.
|
|
289
289
|
|
|
290
290
|
**Decided 2026-10-03 (repo owner): keep the full run.** Measured at 128 mutations, the CI job for
|
|
291
291
|
11.41.6 took **14 minutes**. The trigger to revisit is that wall time, not the mutation count —
|
|
@@ -332,7 +332,7 @@ exactly the environment where the answer matters.
|
|
|
332
332
|
|
|
333
333
|
Worth knowing before optimising the wrong thing: the specs behind all 63 e2e mutations add up to
|
|
334
334
|
**~40 seconds**. The step takes ~740s. The remaining ~700s is paying vitest's startup — process
|
|
335
|
-
spawn, transform, module graph, mongod connect, DB create and drop — once per mutation,
|
|
335
|
+
spawn, transform, module graph, mongod connect, DB create and drop — once per mutation, 172 times.
|
|
336
336
|
That work is largely single-threaded I/O and barely scales with cores: the full registry measures
|
|
337
337
|
**744s on a 12-core laptop and 777s on a 4-vCPU CI runner**.
|
|
338
338
|
|
package/FRAMEWORK-API.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lenne.tech/nest-server — Framework API Reference
|
|
2
2
|
|
|
3
|
-
> Auto-generated from source code as of 2026-10-06 (v11.42.
|
|
3
|
+
> Auto-generated from source code as of 2026-10-06 (v11.42.6)
|
|
4
4
|
> File: `FRAMEWORK-API.md` — compact, machine-readable API surface for Claude Code
|
|
5
5
|
|
|
6
6
|
## CoreModule.forRoot()
|
|
@@ -18,9 +18,11 @@ export declare class CoreBodyParserInitializer implements OnModuleInit {
|
|
|
18
18
|
protected getConfig(): IBodyParserConfig | undefined;
|
|
19
19
|
protected getRouterStack(): ExpressLayer[] | undefined;
|
|
20
20
|
protected isGlobalParserLayer(layer: ExpressLayer | undefined, type: CoreBodyParserType): boolean;
|
|
21
|
+
protected isBodyParserEnabled(): boolean;
|
|
21
22
|
protected isRawBodyEnabled(): boolean;
|
|
22
23
|
protected resolveLimit(type: CoreBodyParserType, value: unknown): number | undefined;
|
|
23
24
|
protected translateError(type: CoreBodyParserType, error: unknown, req: Request): unknown;
|
|
25
|
+
protected warnMissingGlobalParser(type: CoreBodyParserType, stack: ExpressLayer[], limit: number | undefined): void;
|
|
24
26
|
protected wrapParser(type: CoreBodyParserType, parser: RequestHandler): RequestHandler;
|
|
25
27
|
}
|
|
26
28
|
export {};
|
|
@@ -53,9 +53,8 @@ let CoreBodyParserInitializer = CoreBodyParserInitializer_1 = class CoreBodyPars
|
|
|
53
53
|
for (const type of ['json', 'urlencoded']) {
|
|
54
54
|
const limit = this.resolveLimit(type, config?.[type]?.limit);
|
|
55
55
|
const layers = stack.filter((layer) => this.isGlobalParserLayer(layer, type));
|
|
56
|
-
if (
|
|
57
|
-
this.
|
|
58
|
-
'(was the app created with `bodyParser: false`?) — the limit has no effect.');
|
|
56
|
+
if (!layers.length) {
|
|
57
|
+
this.warnMissingGlobalParser(type, stack, limit);
|
|
59
58
|
continue;
|
|
60
59
|
}
|
|
61
60
|
for (const layer of layers) {
|
|
@@ -85,6 +84,11 @@ let CoreBodyParserInitializer = CoreBodyParserInitializer_1 = class CoreBodyPars
|
|
|
85
84
|
isGlobalParserLayer(layer, type) {
|
|
86
85
|
return layer?.slash === true && typeof layer.handle === 'function' && layer.handle.name === PARSER_NAMES[type];
|
|
87
86
|
}
|
|
87
|
+
isBodyParserEnabled() {
|
|
88
|
+
const container = this.moduleRef
|
|
89
|
+
?.container;
|
|
90
|
+
return container?.contextOptions?.bodyParser !== false;
|
|
91
|
+
}
|
|
88
92
|
isRawBodyEnabled() {
|
|
89
93
|
const container = this.moduleRef
|
|
90
94
|
?.container;
|
|
@@ -114,6 +118,22 @@ let CoreBodyParserInitializer = CoreBodyParserInitializer_1 = class CoreBodyPars
|
|
|
114
118
|
`raise \`bodyParser.${type}.limit\` in the server options.`);
|
|
115
119
|
return new common_1.PayloadTooLargeException(`${error_codes_1.ErrorCode.REQUEST_BODY_TOO_LARGE} [${sizeText}limit ${details.limit} bytes]`);
|
|
116
120
|
}
|
|
121
|
+
warnMissingGlobalParser(type, stack, limit) {
|
|
122
|
+
const name = PARSER_NAMES[type];
|
|
123
|
+
const shadowed = stack.some((layer) => layer?.slash !== true && layer?.handle?.name === name);
|
|
124
|
+
if (shadowed && this.isBodyParserEnabled()) {
|
|
125
|
+
this.logger.warn(`No global ${type} body parser is registered: NestJS skips its own when a layer named \`${name}\` ` +
|
|
126
|
+
`already exists, and a path-scoped \`${type}()\` parser registered before \`app.init()\` counts as one. ` +
|
|
127
|
+
`Every request outside that path reaches its handler with an EMPTY body. Register the global parser ` +
|
|
128
|
+
`in main.ts as well — \`server.useBodyParser('${type}')\` — a configured \`bodyParser.${type}.limit\` ` +
|
|
129
|
+
'is applied to it.');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (limit !== undefined) {
|
|
133
|
+
this.logger.warn(`bodyParser.${type}.limit is configured, but no global ${type} body parser is registered ` +
|
|
134
|
+
'(was the app created with `bodyParser: false`?) — the limit has no effect.');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
117
137
|
wrapParser(type, parser) {
|
|
118
138
|
const wrapped = (req, res, next) => parser(req, res, (error) => (error ? next(this.translateError(type, error, req)) : next()));
|
|
119
139
|
Object.defineProperty(wrapped, 'name', { value: PARSER_NAMES[type] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-body-parser.initializer.js","sourceRoot":"","sources":["../../../../src/core/common/services/core-body-parser.initializer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAuCA,wCAaC;AApDD,2CAAsG;AACtG,uCAA0D;AAC1D,qCAA2C;AAE3C,sEAAiE;AAEjE,qDAAiD;AAWjD,MAAM,YAAY,GAAuC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AAGhH,MAAM,YAAY,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;AAmB9F,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3F,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxC,CAAC;AAoBM,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAIH;IACA;IAJd,MAAM,GAAG,IAAI,eAAM,CAAC,2BAAyB,CAAC,IAAI,CAAC,CAAC;IAEvE,YACiC,eAAiC,EACjC,SAAqB;QADrB,oBAAe,GAAf,eAAe,CAAkB;QACjC,cAAS,GAAT,SAAS,CAAY;IACnD,CAAC;IAEJ,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YAEX,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,CAAU,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAE9E,IAAI,
|
|
1
|
+
{"version":3,"file":"core-body-parser.initializer.js","sourceRoot":"","sources":["../../../../src/core/common/services/core-body-parser.initializer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAuCA,wCAaC;AApDD,2CAAsG;AACtG,uCAA0D;AAC1D,qCAA2C;AAE3C,sEAAiE;AAEjE,qDAAiD;AAWjD,MAAM,YAAY,GAAuC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AAGhH,MAAM,YAAY,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;AAmB9F,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3F,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxC,CAAC;AAoBM,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAIH;IACA;IAJd,MAAM,GAAG,IAAI,eAAM,CAAC,2BAAyB,CAAC,IAAI,CAAC,CAAC;IAEvE,YACiC,eAAiC,EACjC,SAAqB;QADrB,oBAAe,GAAf,eAAe,CAAkB;QACjC,cAAS,GAAT,SAAS,CAAY;IACnD,CAAC;IAEJ,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YAEX,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,CAAU,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAE9E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACnF,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,KAAK,QAAQ,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IASS,YAAY,CAAC,IAAwB,EAAE,KAAa;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,cAAI,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAA,oBAAU,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC;IAGS,SAAS;QACjB,OAAO,8BAAa,CAAC,kBAAkB,CAAoB,YAAY,CAAC,CAAC;IAC3E,CAAC;IAGS,cAAc;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC;QAC/D,IAAI,OAAO,GAAG,EAAE,GAAG,KAAK,UAAU,IAAI,OAAO,GAAG,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;QAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IASS,mBAAmB,CAAC,KAA+B,EAAE,IAAwB;QACrF,OAAO,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACjH,CAAC;IAQS,mBAAmB;QAC3B,MAAM,SAAS,GAAI,IAAI,CAAC,SAAsF;YAC5G,EAAE,SAAS,CAAC;QACd,OAAO,SAAS,EAAE,cAAc,EAAE,UAAU,KAAK,KAAK,CAAC;IACzD,CAAC;IAUS,gBAAgB;QACxB,MAAM,SAAS,GAAI,IAAI,CAAC,SAAmF;YACzG,EAAE,SAAS,CAAC;QACd,OAAO,SAAS,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,CAAC;IASS,YAAY,CAAC,IAAwB,EAAE,KAAc;QAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,cAAc,IAAI,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,2DAA2D;gBAC1G,kBAAkB,IAAI,oEAAoE,CAC7F,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAQS,cAAc,CAAC,IAAwB,EAAE,KAAc,EAAE,GAAY;QAC7E,MAAM,OAAO,GAAG,KAA0E,CAAC;QAC3F,IAAI,OAAO,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAID,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI,SAAS,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,SAAS,EAAE;YAC5F,wBAAwB,OAAO,CAAC,KAAK,wDAAwD;YAC7F,sBAAsB,IAAI,iCAAiC,CAC9D,CAAC;QACF,OAAO,IAAI,iCAAwB,CACjC,GAAG,uBAAS,CAAC,sBAAsB,KAAK,QAAQ,SAAS,OAAO,CAAC,KAAK,SAAS,CAChF,CAAC;IACJ,CAAC;IAcS,uBAAuB,CAAC,IAAwB,EAAE,KAAqB,EAAE,KAAyB;QAC1G,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9F,IAAI,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,aAAa,IAAI,yEAAyE,IAAI,KAAK;gBACjG,uCAAuC,IAAI,8DAA8D;gBACzG,qGAAqG;gBACrG,gDAAgD,IAAI,oCAAoC,IAAI,WAAW;gBACvG,mBAAmB,CACtB,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,cAAc,IAAI,uCAAuC,IAAI,6BAA6B;gBACxF,4EAA4E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAQS,UAAU,CAAC,IAAwB,EAAE,MAAsB;QACnE,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE,CAClE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAlMY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCADsC,sBAAe;QACrB,gBAAS;GAL3C,yBAAyB,CAkMrC;AAGD,SAAS,cAAc,CAAC,GAAmC,EAAE,IAAc,EAAE,MAAc;IACzF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -58,6 +58,59 @@ export interface TestDownloadOptions {
|
|
|
58
58
|
cookies?: string;
|
|
59
59
|
token?: string;
|
|
60
60
|
}
|
|
61
|
+
export interface TestMcpOptions {
|
|
62
|
+
cookies?: Record<string, string> | string;
|
|
63
|
+
headers?: Record<string, string>;
|
|
64
|
+
log?: boolean;
|
|
65
|
+
logError?: boolean;
|
|
66
|
+
path?: string;
|
|
67
|
+
sessionId?: string;
|
|
68
|
+
statusCode?: number;
|
|
69
|
+
token?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface TestMcpSessionOptions extends Omit<TestMcpOptions, 'sessionId' | 'statusCode'> {
|
|
72
|
+
clientInfo?: {
|
|
73
|
+
name: string;
|
|
74
|
+
version: string;
|
|
75
|
+
};
|
|
76
|
+
protocolVersion?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface TestMcpMessage {
|
|
79
|
+
[key: string]: any;
|
|
80
|
+
error?: any;
|
|
81
|
+
id?: null | number | string;
|
|
82
|
+
jsonrpc?: '2.0';
|
|
83
|
+
result?: any;
|
|
84
|
+
}
|
|
85
|
+
export interface TestMcpResponse {
|
|
86
|
+
message: null | TestMcpMessage;
|
|
87
|
+
response: any;
|
|
88
|
+
sessionId?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface TestMcpToolResult {
|
|
91
|
+
[key: string]: any;
|
|
92
|
+
content: {
|
|
93
|
+
[key: string]: any;
|
|
94
|
+
text?: string;
|
|
95
|
+
type: string;
|
|
96
|
+
}[];
|
|
97
|
+
isError?: boolean;
|
|
98
|
+
json?: any;
|
|
99
|
+
}
|
|
100
|
+
export interface TestMcpTool {
|
|
101
|
+
[key: string]: any;
|
|
102
|
+
description?: string;
|
|
103
|
+
inputSchema?: any;
|
|
104
|
+
name: string;
|
|
105
|
+
}
|
|
106
|
+
export interface TestMcpSession {
|
|
107
|
+
callTool(name: string, args?: Record<string, unknown>): Promise<TestMcpToolResult>;
|
|
108
|
+
close(): Promise<void>;
|
|
109
|
+
initializeResult: any;
|
|
110
|
+
listTools(): Promise<TestMcpTool[]>;
|
|
111
|
+
request(method: string, params?: Record<string, unknown>, options?: Pick<TestMcpOptions, 'log' | 'logError' | 'statusCode'>): Promise<null | TestMcpMessage>;
|
|
112
|
+
sessionId: string;
|
|
113
|
+
}
|
|
61
114
|
export declare class TestHelper {
|
|
62
115
|
app: INestApplication;
|
|
63
116
|
subscriptionUrl: string;
|
|
@@ -65,6 +118,8 @@ export declare class TestHelper {
|
|
|
65
118
|
download(url: string, tokenOrOptions?: string | TestDownloadOptions): Promise<any>;
|
|
66
119
|
downloadBuffer(url: string, tokenOrOptions?: string | TestDownloadOptions): Promise<Buffer>;
|
|
67
120
|
graphQl(graphql: string | TestGraphQLConfig, options?: TestGraphQLOptions): Promise<any>;
|
|
121
|
+
mcp(message: Record<string, unknown>, options?: TestMcpOptions): Promise<TestMcpResponse>;
|
|
122
|
+
mcpSession(options?: TestMcpSessionOptions): Promise<TestMcpSession>;
|
|
68
123
|
rest(url: string, options?: TestRestOptions): Promise<any>;
|
|
69
124
|
prepareArguments(args: any, objects?: WeakMap<any, any>): any;
|
|
70
125
|
prepareFields(fields: any): any;
|
|
@@ -75,5 +130,10 @@ export declare class TestHelper {
|
|
|
75
130
|
static buildBetterAuthCookies(sessionToken: string, basePath?: string): Record<string, string>;
|
|
76
131
|
static extractCookies(response: any): Record<string, string>;
|
|
77
132
|
static extractSessionToken(response: any, cookieName?: string): null | string;
|
|
133
|
+
static parseMcpMessage(response: {
|
|
134
|
+
headers?: Record<string, any>;
|
|
135
|
+
text?: string;
|
|
136
|
+
}): null | TestMcpMessage;
|
|
137
|
+
static parseJsonOrUndefined(text: string | undefined): any;
|
|
78
138
|
parseJwt(token: any): any;
|
|
79
139
|
}
|
package/dist/test/test.helper.js
CHANGED
|
@@ -200,6 +200,79 @@ class TestHelper {
|
|
|
200
200
|
}
|
|
201
201
|
return undefined;
|
|
202
202
|
}
|
|
203
|
+
async mcp(message, options = {}) {
|
|
204
|
+
const isNotification = message.id === undefined;
|
|
205
|
+
const response = await this.rest(options.path ?? '/ai/mcp', {
|
|
206
|
+
cookies: options.cookies,
|
|
207
|
+
headers: {
|
|
208
|
+
Accept: 'application/json, text/event-stream',
|
|
209
|
+
'Content-Type': 'application/json',
|
|
210
|
+
...(options.sessionId ? { 'mcp-session-id': options.sessionId } : {}),
|
|
211
|
+
...options.headers,
|
|
212
|
+
},
|
|
213
|
+
log: options.log,
|
|
214
|
+
logError: options.logError,
|
|
215
|
+
method: 'POST',
|
|
216
|
+
payload: { jsonrpc: '2.0', ...message },
|
|
217
|
+
returnResponse: true,
|
|
218
|
+
statusCode: options.statusCode ?? (isNotification ? 202 : 200),
|
|
219
|
+
token: options.token,
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
message: TestHelper.parseMcpMessage(response),
|
|
223
|
+
response,
|
|
224
|
+
sessionId: response?.headers?.['mcp-session-id'],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
async mcpSession(options = {}) {
|
|
228
|
+
const { clientInfo, protocolVersion, ...base } = options;
|
|
229
|
+
const path = base.path ?? '/ai/mcp';
|
|
230
|
+
const init = await this.mcp({
|
|
231
|
+
id: 1,
|
|
232
|
+
method: 'initialize',
|
|
233
|
+
params: {
|
|
234
|
+
capabilities: {},
|
|
235
|
+
clientInfo: clientInfo ?? { name: 'nest-server-test-helper', version: '1.0.0' },
|
|
236
|
+
protocolVersion: protocolVersion ?? '2025-03-26',
|
|
237
|
+
},
|
|
238
|
+
}, base);
|
|
239
|
+
expect(init.message?.error).toBeUndefined();
|
|
240
|
+
expect(init.sessionId).toBeTruthy();
|
|
241
|
+
const sessionId = init.sessionId;
|
|
242
|
+
await this.mcp({ method: 'notifications/initialized' }, { ...base, sessionId });
|
|
243
|
+
let nextId = 2;
|
|
244
|
+
const request = async (method, params, requestOptions = {}) => {
|
|
245
|
+
const reply = await this.mcp({ id: nextId++, method, ...(params ? { params } : {}) }, { ...base, ...requestOptions, sessionId });
|
|
246
|
+
return reply.message;
|
|
247
|
+
};
|
|
248
|
+
return {
|
|
249
|
+
callTool: async (name, args = {}) => {
|
|
250
|
+
const reply = await request('tools/call', { arguments: args, name });
|
|
251
|
+
expect(reply?.error).toBeUndefined();
|
|
252
|
+
const result = reply?.result ?? { content: [] };
|
|
253
|
+
return { ...result, json: TestHelper.parseJsonOrUndefined(result.content?.[0]?.text) };
|
|
254
|
+
},
|
|
255
|
+
close: async () => {
|
|
256
|
+
await this.rest(path, {
|
|
257
|
+
cookies: base.cookies,
|
|
258
|
+
headers: { ...base.headers, 'mcp-session-id': sessionId },
|
|
259
|
+
log: base.log,
|
|
260
|
+
logError: base.logError,
|
|
261
|
+
method: 'DELETE',
|
|
262
|
+
returnResponse: true,
|
|
263
|
+
token: base.token,
|
|
264
|
+
});
|
|
265
|
+
},
|
|
266
|
+
initializeResult: init.message?.result,
|
|
267
|
+
listTools: async () => {
|
|
268
|
+
const reply = await request('tools/list');
|
|
269
|
+
expect(reply?.error).toBeUndefined();
|
|
270
|
+
return reply?.result?.tools ?? [];
|
|
271
|
+
},
|
|
272
|
+
request,
|
|
273
|
+
sessionId,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
203
276
|
async rest(url, options = {}) {
|
|
204
277
|
const config = {
|
|
205
278
|
log: false,
|
|
@@ -499,6 +572,37 @@ class TestHelper {
|
|
|
499
572
|
}
|
|
500
573
|
return value;
|
|
501
574
|
}
|
|
575
|
+
static parseMcpMessage(response) {
|
|
576
|
+
const text = response?.text ?? '';
|
|
577
|
+
if (!text.trim()) {
|
|
578
|
+
return null;
|
|
579
|
+
}
|
|
580
|
+
const contentType = String(response?.headers?.['content-type'] ?? '');
|
|
581
|
+
if (contentType.includes('text/event-stream') || /^(event|data|id):/m.test(text)) {
|
|
582
|
+
for (const line of text.split(/\r?\n/)) {
|
|
583
|
+
if (!line.startsWith('data:')) {
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
const parsed = TestHelper.parseJsonOrUndefined(line.slice(5).trim());
|
|
587
|
+
if (parsed && (parsed.result !== undefined || parsed.error !== undefined)) {
|
|
588
|
+
return parsed;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
return TestHelper.parseJsonOrUndefined(text) ?? null;
|
|
594
|
+
}
|
|
595
|
+
static parseJsonOrUndefined(text) {
|
|
596
|
+
if (typeof text !== 'string') {
|
|
597
|
+
return undefined;
|
|
598
|
+
}
|
|
599
|
+
try {
|
|
600
|
+
return JSON.parse(text);
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
return undefined;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
502
606
|
parseJwt(token) {
|
|
503
607
|
return JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
|
|
504
608
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.helper.js","sourceRoot":"","sources":["../../src/test/test.helper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test.helper.js","sourceRoot":"","sources":["../../src/test/test.helper.ts"],"names":[],"mappings":"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"}
|