@makebelieve21213-packages/nest-common 1.1.2 → 1.1.4

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/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
  - ✅ **Валидация** - готовые пайпы для валидации DTO, файлов, query параметров и заголовков
22
22
  - ✅ **Логирование** - автоматическое логирование всех HTTP, RPC и WebSocket запросов
23
23
  - ✅ **Guards** - готовые guards для аутентификации, авторизации и rate limiting
24
- - ✅ **Декораторы** - удобные декораторы для метаданных (@Public, @Roles, @Permissions, @ApiKey, @Serialize)
24
+ - ✅ **Декораторы** - удобные декораторы для метаданных (@Public, @Roles, @Permissions, @ApiKey, @Serialize, @User)
25
25
  - ✅ **Утилиты** - функции для работы с контекстом, файлами, CORS, compression, versioning
26
26
  - ✅ **100% покрытие тестами** - надежность и качество кода
27
27
  - ✅ **TypeScript типизация** - полная типобезопасность
@@ -264,7 +264,16 @@ app.useGlobalInterceptors(new UnifiedInterceptor(logger));
264
264
 
265
265
  **ApiKeyGuard** - проверка API ключа (работает с декоратором `@ApiKey()`)
266
266
  ```typescript
267
- @UseGuards(new ApiKeyGuard(undefined, "x-api-key", new Set(["key1", "key2"])))
267
+ // Регистрация в модуле (Reflector из @nestjs/core)
268
+ {
269
+ provide: ApiKeyGuard,
270
+ useFactory: (reflector: Reflector) =>
271
+ new ApiKeyGuard(reflector, "x-api-key", new Set(["key1", "key2"])),
272
+ inject: [Reflector],
273
+ }
274
+
275
+ // В контроллере
276
+ @UseGuards(ApiKeyGuard)
268
277
  @ApiKey()
269
278
  ```
270
279
 
@@ -282,7 +291,16 @@ app.useGlobalInterceptors(new UnifiedInterceptor(logger));
282
291
 
283
292
  **RateLimitGuard** - ограничение частоты запросов
284
293
  ```typescript
285
- @UseGuards(new RateLimitGuard(undefined, 200, 60000)) // 200 запросов в минуту
294
+ // Регистрация в модуле (Reflector из @nestjs/core)
295
+ {
296
+ provide: RateLimitGuard,
297
+ useFactory: (reflector: Reflector) =>
298
+ new RateLimitGuard(reflector, 200, 60000), // 200 запросов в минуту
299
+ inject: [Reflector],
300
+ }
301
+
302
+ // В контроллере
303
+ @UseGuards(RateLimitGuard)
286
304
  ```
287
305
 
288
306
  **WebSocketAuthGuard** - проверка аутентификации WebSocket
@@ -299,6 +317,22 @@ app.useGlobalInterceptors(new UnifiedInterceptor(logger));
299
317
  - `@Permissions(...)` - указание требуемых разрешений
300
318
  - `@ApiKey()` - пометка эндпоинта как требующего API ключ
301
319
  - `@Serialize(DtoClass)` - указание DTO для сериализации ответа
320
+ - `@User()` - получение `req.user` в хендлере (поддерживает generic: `@User<MyUserType>()`)
321
+
322
+ ```typescript
323
+ @UseGuards(JwtAuthGuard)
324
+ @Get("profile")
325
+ getProfile(@User() user: UserFromContext) {
326
+ return user;
327
+ }
328
+
329
+ // С кастомным типом
330
+ @UseGuards(JwtAuthGuard)
331
+ @Get("me")
332
+ getMe(@User<MyUser>() user: MyUser) {
333
+ return user;
334
+ }
335
+ ```
302
336
 
303
337
  ### Утилиты
304
338
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user.decorator.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.decorator.spec.d.ts","sourceRoot":"","sources":["../../../src/decorators/__tests__/user.decorator.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import User from "../../decorators/user.decorator.js";
14
+ import * as contextUtils from "../../utils/context.utils.js";
15
+ let capturedFactory = null;
16
+ jest.mock("@nestjs/common", () => {
17
+ const actual = jest.requireActual("@nestjs/common");
18
+ return {
19
+ ...actual,
20
+ createParamDecorator: (factory) => {
21
+ capturedFactory = factory;
22
+ return () => () => { };
23
+ },
24
+ };
25
+ });
26
+ describe("User decorator", () => {
27
+ beforeEach(() => {
28
+ capturedFactory = null;
29
+ });
30
+ it("should return a parameter decorator when called", () => {
31
+ const decorator = User();
32
+ expect(typeof decorator).toBe("function");
33
+ });
34
+ it("should not throw when applied to a class method parameter", () => {
35
+ class TestController {
36
+ getUser(user) {
37
+ return user;
38
+ }
39
+ }
40
+ __decorate([
41
+ __param(0, User()),
42
+ __metadata("design:type", Function),
43
+ __metadata("design:paramtypes", [Object]),
44
+ __metadata("design:returntype", void 0)
45
+ ], TestController.prototype, "getUser", null);
46
+ expect(TestController).toBeDefined();
47
+ });
48
+ it("should support generic type parameter", () => {
49
+ const decorator = User();
50
+ expect(typeof decorator).toBe("function");
51
+ class TestController {
52
+ getUser(user) {
53
+ return user;
54
+ }
55
+ }
56
+ __decorate([
57
+ __param(0, User()),
58
+ __metadata("design:type", Function),
59
+ __metadata("design:paramtypes", [Object]),
60
+ __metadata("design:returntype", void 0)
61
+ ], TestController.prototype, "getUser", null);
62
+ expect(TestController).toBeDefined();
63
+ });
64
+ it("should call getUserFromContext and return user when factory is invoked", () => {
65
+ const mockUser = { id: "1", email: "test@test.com", roles: ["admin"] };
66
+ const mockContext = {
67
+ switchToHttp: () => ({
68
+ getRequest: () => ({ user: mockUser }),
69
+ }),
70
+ };
71
+ class TestController {
72
+ getUser(_user) {
73
+ return _user;
74
+ }
75
+ }
76
+ __decorate([
77
+ __param(0, User()),
78
+ __metadata("design:type", Function),
79
+ __metadata("design:paramtypes", [Object]),
80
+ __metadata("design:returntype", void 0)
81
+ ], TestController.prototype, "getUser", null);
82
+ expect(TestController).toBeDefined();
83
+ expect(capturedFactory).toBeDefined();
84
+ expect(typeof capturedFactory).toBe("function");
85
+ const result = capturedFactory?.(undefined, mockContext);
86
+ expect(result).toEqual(mockUser);
87
+ });
88
+ it("should return undefined when user is not in request", () => {
89
+ const mockContext = {
90
+ switchToHttp: () => ({
91
+ getRequest: () => ({}),
92
+ }),
93
+ };
94
+ class TestController {
95
+ getUser(_user) {
96
+ return _user;
97
+ }
98
+ }
99
+ __decorate([
100
+ __param(0, User()),
101
+ __metadata("design:type", Function),
102
+ __metadata("design:paramtypes", [Object]),
103
+ __metadata("design:returntype", void 0)
104
+ ], TestController.prototype, "getUser", null);
105
+ expect(TestController).toBeDefined();
106
+ const result = capturedFactory?.(undefined, mockContext);
107
+ expect(result).toBeUndefined();
108
+ });
109
+ it("should invoke getUserFromContext when factory runs", () => {
110
+ const getUserSpy = jest.spyOn(contextUtils, "getUserFromContext");
111
+ const mockUser = { id: "2", email: "user@example.com" };
112
+ const mockContext = {
113
+ switchToHttp: () => ({
114
+ getRequest: () => ({ user: mockUser }),
115
+ }),
116
+ };
117
+ class TestController {
118
+ getUser(_user) {
119
+ return _user;
120
+ }
121
+ }
122
+ __decorate([
123
+ __param(0, User()),
124
+ __metadata("design:type", Function),
125
+ __metadata("design:paramtypes", [Object]),
126
+ __metadata("design:returntype", void 0)
127
+ ], TestController.prototype, "getUser", null);
128
+ expect(TestController).toBeDefined();
129
+ capturedFactory?.(undefined, mockContext);
130
+ expect(getUserSpy).toHaveBeenCalledWith(mockContext);
131
+ expect(getUserSpy).toHaveBeenCalledTimes(1);
132
+ getUserSpy.mockRestore();
133
+ });
134
+ });
135
+ //# sourceMappingURL=user.decorator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.decorator.spec.js","sourceRoot":"","sources":["../../../src/decorators/__tests__/user.decorator.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { UserFromContext } from "../types/context-types.js";
2
+ /**
3
+ * Декоратор для получения req.user из запроса в хендлере контроллера
4
+ * Требует аутентификации (например, JwtAuthGuard) для гарантированного наличия user
5
+ */
6
+ export default function User<T = UserFromContext>(): ParameterDecorator;
7
+ //# sourceMappingURL=user.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/user.decorator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,CAAC,GAAG,eAAe,KAAK,kBAAkB,CAItE"}
@@ -0,0 +1,12 @@
1
+ import { createParamDecorator } from "@nestjs/common";
2
+ import { getUserFromContext } from "../utils/context.utils.js";
3
+ /**
4
+ * Декоратор для получения req.user из запроса в хендлере контроллера
5
+ * Требует аутентификации (например, JwtAuthGuard) для гарантированного наличия user
6
+ */
7
+ export default function User() {
8
+ return createParamDecorator((_data, ctx) => {
9
+ return getUserFromContext(ctx);
10
+ });
11
+ }
12
+ //# sourceMappingURL=user.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.decorator.js","sourceRoot":"","sources":["../../src/decorators/user.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI;IAC3B,OAAO,oBAAoB,CAAC,CAAC,KAAc,EAAE,GAAqB,EAAiB,EAAE;QACpF,OAAO,kBAAkB,CAAC,GAAG,CAAkB,CAAC;IACjD,CAAC,CAAuB,CAAC;AAC1B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -31,6 +31,7 @@ export { Roles, ROLES_KEY } from "./decorators/roles.decorator.js";
31
31
  export { Permissions, PERMISSIONS_KEY } from "./decorators/permissions.decorator.js";
32
32
  export { ApiKey, API_KEY_KEY } from "./decorators/api-key.decorator.js";
33
33
  export { Serialize, SERIALIZE_KEY } from "./decorators/serialize.decorator.js";
34
+ export { default as User } from "./decorators/user.decorator.js";
34
35
  export { getUserFromContext, getIpFromContext, getUserAgentFromContext, getRequestIdFromContext, } from "./utils/context.utils.js";
35
36
  export type { UserFromContext } from "./types/context-types.js";
36
37
  export { default as createCorsOptions } from "./utils/cors.utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE1F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAE3G,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAC/B,cAAc,GACd,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACN,OAAO,IAAI,kBAAkB,EAC7B,KAAK,cAAc,GACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAClF,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAChF,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEnG,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAElG,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE/F,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ export { Roles, ROLES_KEY } from "./decorators/roles.decorator.js";
30
30
  export { Permissions, PERMISSIONS_KEY } from "./decorators/permissions.decorator.js";
31
31
  export { ApiKey, API_KEY_KEY } from "./decorators/api-key.decorator.js";
32
32
  export { Serialize, SERIALIZE_KEY } from "./decorators/serialize.decorator.js";
33
+ export { default as User } from "./decorators/user.decorator.js";
33
34
  export { getUserFromContext, getIpFromContext, getUserAgentFromContext, getRequestIdFromContext, } from "./utils/context.utils.js";
34
35
  export { default as createCorsOptions } from "./utils/cors.utils.js";
35
36
  export { default as createCompressionOptions } from "./utils/compression.utils.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makebelieve21213-packages/nest-common",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Common NestJS utilities, guards, interceptors, and shared modules for NakolenkeChain microservices",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -36,7 +36,7 @@
36
36
  "pnpm": ">=10.18.0"
37
37
  },
38
38
  "dependencies": {
39
- "@makebelieve21213-packages/logger": "1.0.5",
39
+ "@makebelieve21213-packages/logger": "1.0.7",
40
40
  "@nestjs/common": "^11.1.6",
41
41
  "@nestjs/core": "^11.1.6",
42
42
  "@nestjs/microservices": "^11.1.3",
@@ -89,7 +89,7 @@
89
89
  "test:coverage": "jest --coverage",
90
90
  "lint": "tsc --noEmit && eslint \"src/**/*.ts\"",
91
91
  "lint:fix": "tsc --noEmit && eslint \"src/**/*.ts\" --fix",
92
- "format": "prettier --check \"src/**/*.ts\"",
93
- "format:fix": "prettier --write \"src/**/*.ts\""
92
+ "format": "prettier --check .",
93
+ "format:fix": "prettier --write ."
94
94
  }
95
95
  }