@lenne.tech/nest-server 11.29.1 → 11.30.0
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.
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Migration Guide: 11.29.x → 11.30.x
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
| Category | Details |
|
|
6
|
+
|----------|---------|
|
|
7
|
+
| **Breaking Changes** | None in nest-server's own API. Two transitive changes may affect projects: `@nestjs/websockets` removed from dependencies; `@nestjs/swagger` 11.4.6 blocks deep imports |
|
|
8
|
+
| **New Features** | None (dependency maintenance release) |
|
|
9
|
+
| **Bugfixes** | Dependency updates incl. security-relevant `ws` 8.21.1 override; 6 obsolete pnpm overrides removed |
|
|
10
|
+
| **Migration Effort** | Very Low (~5 minutes) — most projects need no changes |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Quick Migration
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Update package
|
|
18
|
+
npm install @lenne.tech/nest-server@11.30.x
|
|
19
|
+
|
|
20
|
+
# Verify build
|
|
21
|
+
npm run build
|
|
22
|
+
|
|
23
|
+
# Run tests
|
|
24
|
+
npm test
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Most projects need no code changes. Read the two notes below only if your
|
|
28
|
+
project uses `@WebSocketGateway` or deep-imports from `@nestjs/swagger`.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## What Changed in 11.30.x
|
|
33
|
+
|
|
34
|
+
Dependency maintenance across the board (all checks green, 2157 tests, 0 audit
|
|
35
|
+
findings):
|
|
36
|
+
|
|
37
|
+
- **dependencies:** `@getbrevo/brevo` 3.0.4, `@nestjs/swagger` 11.4.6,
|
|
38
|
+
`jose` 6.2.3, `ws` 8.21.1, `graphql-ws` 6.1.0, `ejs` 6.0.1,
|
|
39
|
+
`ts-morph` 28.0.0
|
|
40
|
+
- **removed:** `@nestjs/websockets` (unused by the framework itself — see below)
|
|
41
|
+
- **devDependencies:** `@nestjs/cli` 11.0.24, `vite` 8.1.5, `oxfmt` 0.59.0,
|
|
42
|
+
`@compodoc/compodoc` 2.0.0, `@types/node` 26.1.1
|
|
43
|
+
- **pnpm overrides:** 6 obsolete entries removed (`ajv`, `picomatch`,
|
|
44
|
+
`js-yaml`, `uuid`, `@babel/core`, `websocket-driver` — all resolved
|
|
45
|
+
upstream); the `ws` override stays (load-bearing against
|
|
46
|
+
GHSA-96hv-2xvq-fx4p)
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Notes for Consuming Projects
|
|
51
|
+
|
|
52
|
+
### 1. `@nestjs/websockets` is no longer a nest-server dependency
|
|
53
|
+
|
|
54
|
+
The framework itself never used it. If your project uses `@WebSocketGateway`
|
|
55
|
+
(or anything else from `@nestjs/websockets`) it previously worked only as a
|
|
56
|
+
phantom dependency — add it explicitly now:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm install @nestjs/websockets@^11.1.28
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
GraphQL subscriptions are NOT affected (`@nestjs/graphql` uses
|
|
63
|
+
`graphql-ws`/`ws` directly).
|
|
64
|
+
|
|
65
|
+
### 2. `@nestjs/swagger` 11.4.6 ships an `exports` map — deep imports fail at runtime
|
|
66
|
+
|
|
67
|
+
**Before:**
|
|
68
|
+
```typescript
|
|
69
|
+
import { DECORATORS } from '@nestjs/swagger/dist/constants';
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**After:**
|
|
73
|
+
```typescript
|
|
74
|
+
import { DECORATORS } from '@nestjs/swagger';
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Deep imports like `@nestjs/swagger/dist/*` now throw
|
|
78
|
+
`ERR_PACKAGE_PATH_NOT_EXPORTED` at runtime (type-only imports still compile).
|
|
79
|
+
Everything you need is available from the root export.
|
|
80
|
+
|
|
81
|
+
### 3. `ejs` 5 → 6 (framework-internal)
|
|
82
|
+
|
|
83
|
+
The framework's own template rendering (`ejs.compile`) is unchanged and fully
|
|
84
|
+
tested. Only if your project passes removed legacy ejs options to its own
|
|
85
|
+
templates would you be affected — unlikely; check the ejs 6 changelog if you
|
|
86
|
+
use custom ejs options.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Detailed Migration Steps
|
|
91
|
+
|
|
92
|
+
1. Update the package (`npm install @lenne.tech/nest-server@11.30.x` or
|
|
93
|
+
`pnpm run update` in starter-based projects).
|
|
94
|
+
2. Search your project for `@nestjs/swagger/dist` deep imports and replace
|
|
95
|
+
them with root imports.
|
|
96
|
+
3. If you use `@WebSocketGateway`: add `@nestjs/websockets` to your own
|
|
97
|
+
dependencies.
|
|
98
|
+
4. `npm run build` + `npm test` — both should pass without further changes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lenne.tech/nest-server",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.30.0",
|
|
4
4
|
"description": "Modern, fast, powerful Node.js web framework in TypeScript based on Nest with a GraphQL API and a connection to MongoDB (or other databases).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@apollo/server": "5.5.1",
|
|
85
85
|
"@as-integrations/express5": "1.1.2",
|
|
86
86
|
"@better-auth/passkey": "1.6.23",
|
|
87
|
-
"@getbrevo/brevo": "3.0.
|
|
87
|
+
"@getbrevo/brevo": "3.0.4",
|
|
88
88
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
89
89
|
"@nestjs/apollo": "13.4.2",
|
|
90
90
|
"@nestjs/common": "11.1.28",
|
|
@@ -95,9 +95,8 @@
|
|
|
95
95
|
"@nestjs/passport": "11.0.5",
|
|
96
96
|
"@nestjs/platform-express": "11.1.28",
|
|
97
97
|
"@nestjs/schedule": "6.1.3",
|
|
98
|
-
"@nestjs/swagger": "11.4.
|
|
98
|
+
"@nestjs/swagger": "11.4.6",
|
|
99
99
|
"@nestjs/terminus": "11.1.1",
|
|
100
|
-
"@nestjs/websockets": "11.1.28",
|
|
101
100
|
"@tus/file-store": "2.1.0",
|
|
102
101
|
"@tus/server": "2.4.1",
|
|
103
102
|
"@types/supertest": "7.2.1",
|
|
@@ -109,14 +108,14 @@
|
|
|
109
108
|
"cookie-parser": "1.4.7",
|
|
110
109
|
"cron": "4.4.0",
|
|
111
110
|
"dotenv": "17.4.2",
|
|
112
|
-
"ejs": "
|
|
111
|
+
"ejs": "6.0.1",
|
|
113
112
|
"express": "5.2.1",
|
|
114
113
|
"graphql": "16.14.0",
|
|
115
114
|
"graphql-query-complexity": "1.1.1",
|
|
116
115
|
"graphql-subscriptions": "3.0.0",
|
|
117
116
|
"graphql-upload": "15.0.2",
|
|
118
|
-
"graphql-ws": "6.0
|
|
119
|
-
"jose": "6.2.
|
|
117
|
+
"graphql-ws": "6.1.0",
|
|
118
|
+
"jose": "6.2.3",
|
|
120
119
|
"js-sha256": "0.11.1",
|
|
121
120
|
"json-to-graphql-query": "2.3.0",
|
|
122
121
|
"lodash": "4.18.1",
|
|
@@ -131,13 +130,13 @@
|
|
|
131
130
|
"rfdc": "1.4.1",
|
|
132
131
|
"rxjs": "7.8.2",
|
|
133
132
|
"supertest": "7.2.2",
|
|
134
|
-
"ts-morph": "
|
|
135
|
-
"ws": "8.21.
|
|
133
|
+
"ts-morph": "28.0.0",
|
|
134
|
+
"ws": "8.21.1",
|
|
136
135
|
"yuml-diagram": "1.2.0"
|
|
137
136
|
},
|
|
138
137
|
"devDependencies": {
|
|
139
|
-
"@compodoc/compodoc": "
|
|
140
|
-
"@nestjs/cli": "11.0.
|
|
138
|
+
"@compodoc/compodoc": "2.0.0",
|
|
139
|
+
"@nestjs/cli": "11.0.24",
|
|
141
140
|
"@nestjs/schematics": "11.1.0",
|
|
142
141
|
"@nestjs/testing": "11.1.28",
|
|
143
142
|
"@swc/cli": "0.8.1",
|
|
@@ -148,7 +147,7 @@
|
|
|
148
147
|
"@types/express": "5.0.6",
|
|
149
148
|
"@types/lodash": "4.17.24",
|
|
150
149
|
"@types/multer": "2.2.0",
|
|
151
|
-
"@types/node": "
|
|
150
|
+
"@types/node": "26.1.1",
|
|
152
151
|
"@types/nodemailer": "8.0.1",
|
|
153
152
|
"@types/passport": "1.0.17",
|
|
154
153
|
"@vitest/coverage-v8": "4.1.10",
|
|
@@ -159,7 +158,7 @@
|
|
|
159
158
|
"nodemon": "3.1.14",
|
|
160
159
|
"npm-watch": "0.13.0",
|
|
161
160
|
"otpauth": "9.5.1",
|
|
162
|
-
"oxfmt": "0.
|
|
161
|
+
"oxfmt": "0.59.0",
|
|
163
162
|
"oxlint": "1.74.0",
|
|
164
163
|
"rimraf": "6.1.3",
|
|
165
164
|
"ts-node": "10.9.2",
|
|
@@ -168,7 +167,7 @@
|
|
|
168
167
|
"tus-js-client": "4.3.1",
|
|
169
168
|
"typescript": "5.9.3",
|
|
170
169
|
"unplugin-swc": "1.5.9",
|
|
171
|
-
"vite": "8.1.
|
|
170
|
+
"vite": "8.1.5",
|
|
172
171
|
"vite-plugin-node": "8.0.0",
|
|
173
172
|
"vitest": "4.1.10"
|
|
174
173
|
},
|
|
@@ -273,9 +273,7 @@ export class FindUsersAiTool extends AiTool {
|
|
|
273
273
|
// Routes through CrudService with the caller's serviceOptions → permissions apply.
|
|
274
274
|
const users = await this.userService.find(
|
|
275
275
|
{
|
|
276
|
-
filterQuery: {
|
|
277
|
-
/* … */
|
|
278
|
-
},
|
|
276
|
+
filterQuery: {/* … */},
|
|
279
277
|
},
|
|
280
278
|
context.serviceOptions,
|
|
281
279
|
);
|
|
@@ -297,13 +297,14 @@ const localConfig = {
|
|
|
297
297
|
- **Graceful Degradation**: If auto-detection fails (no baseUrl), Passkey is disabled with a warning - other auth methods (Email/Password, 2FA) continue to work
|
|
298
298
|
|
|
299
299
|
**Auto-Detection Resolution:**
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
|
303
|
-
| `
|
|
304
|
-
| `
|
|
305
|
-
| `
|
|
306
|
-
| `
|
|
300
|
+
|
|
301
|
+
| Value | Priority | Source |
|
|
302
|
+
| ---------------- | ------------------------------------------------------------------------------------------------- | ------ |
|
|
303
|
+
| `baseUrl` | 1. Explicit `betterAuth.baseUrl` → 2. Root-level `baseUrl` → 3. Localhost default (env: 'local') |
|
|
304
|
+
| `appUrl` | 1. Root-level `appUrl` → 2. Derived from `baseUrl` (removes `api.` prefix) → 3. Localhost default |
|
|
305
|
+
| `rpId` | 1. Explicit `passkey.rpId` → 2. Auto-detect from appUrl hostname |
|
|
306
|
+
| `origin` | 1. Explicit `passkey.origin` → 2. Auto-detect from appUrl |
|
|
307
|
+
| `trustedOrigins` | 1. Explicit `trustedOrigins` → 2. Auto-detect from appUrl |
|
|
307
308
|
|
|
308
309
|
### Explicit Passkey Configuration (Advanced)
|
|
309
310
|
|