@makebelieve21213-packages/nest-common 1.0.0 → 1.1.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.
Files changed (38) hide show
  1. package/README.md +150 -0
  2. package/dist/errors/__tests__/json-rpc.error.spec.d.ts +2 -0
  3. package/dist/errors/__tests__/json-rpc.error.spec.d.ts.map +1 -0
  4. package/dist/errors/__tests__/json-rpc.error.spec.js +175 -0
  5. package/dist/errors/__tests__/json-rpc.error.spec.js.map +1 -0
  6. package/dist/errors/json-rpc.error.d.ts +13 -0
  7. package/dist/errors/json-rpc.error.d.ts.map +1 -0
  8. package/dist/errors/json-rpc.error.js +78 -0
  9. package/dist/errors/json-rpc.error.js.map +1 -0
  10. package/dist/filters/__tests__/json-rpc-exception.filter.spec.d.ts +2 -0
  11. package/dist/filters/__tests__/json-rpc-exception.filter.spec.d.ts.map +1 -0
  12. package/dist/filters/__tests__/json-rpc-exception.filter.spec.js +208 -0
  13. package/dist/filters/__tests__/json-rpc-exception.filter.spec.js.map +1 -0
  14. package/dist/filters/json-rpc-exception.filter.d.ts +8 -0
  15. package/dist/filters/json-rpc-exception.filter.d.ts.map +1 -0
  16. package/dist/filters/json-rpc-exception.filter.js +114 -0
  17. package/dist/filters/json-rpc-exception.filter.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/pipes/__tests__/json-rpc-validation.pipe.spec.d.ts +2 -0
  23. package/dist/pipes/__tests__/json-rpc-validation.pipe.spec.d.ts.map +1 -0
  24. package/dist/pipes/__tests__/json-rpc-validation.pipe.spec.js +346 -0
  25. package/dist/pipes/__tests__/json-rpc-validation.pipe.spec.js.map +1 -0
  26. package/dist/pipes/json-rpc-validation.pipe.d.ts +6 -0
  27. package/dist/pipes/json-rpc-validation.pipe.d.ts.map +1 -0
  28. package/dist/pipes/json-rpc-validation.pipe.js +89 -0
  29. package/dist/pipes/json-rpc-validation.pipe.js.map +1 -0
  30. package/dist/types/json-rpc-error-codes.d.ts +20 -0
  31. package/dist/types/json-rpc-error-codes.d.ts.map +1 -0
  32. package/dist/types/json-rpc-error-codes.js +99 -0
  33. package/dist/types/json-rpc-error-codes.js.map +1 -0
  34. package/dist/types/json-rpc-types.d.ts +17 -0
  35. package/dist/types/json-rpc-types.d.ts.map +1 -0
  36. package/dist/types/json-rpc-types.js +2 -0
  37. package/dist/types/json-rpc-types.js.map +1 -0
  38. package/package.json +6 -6
package/README.md CHANGED
@@ -261,6 +261,53 @@ async publish(userId: string, event: SOCKET_EVENTS, payload: unknown) {
261
261
  }
262
262
  ```
263
263
 
264
+ ### JsonRpcException
265
+
266
+ Класс исключений для JSON-RPC 2.0 протокола. Используется для обработки ошибок в формате JSON-RPC.
267
+
268
+ **Расположение:** `src/errors/json-rpc.error.ts`
269
+
270
+ **Наследование:** `HttpException` (NestJS) - для совместимости с NestJS фильтрами
271
+
272
+ **Особенности:**
273
+ - Поддерживает стандартные коды ошибок JSON-RPC 2.0
274
+ - Автоматически маппит HTTP статусы на JSON-RPC коды ошибок
275
+ - Поддерживает дополнительные данные в поле `data`
276
+ - Может быть создан из `HttpException` или обычной `Error`
277
+ - Возвращает ответ в формате JSON-RPC 2.0
278
+
279
+ **Пример использования:**
280
+
281
+ ```typescript
282
+ import { JsonRpcException, JsonRpcErrorCode } from "@packages/nest-common";
283
+
284
+ // Создание исключения с кодом ошибки
285
+ throw new JsonRpcException(
286
+ JsonRpcErrorCode.INVALID_REQUEST,
287
+ "Invalid request parameters",
288
+ { requestId: "123", details: "Missing required field" },
289
+ );
290
+
291
+ // Создание из HttpException
292
+ const httpException = new HttpException("Not found", HttpStatus.NOT_FOUND);
293
+ const rpcException = JsonRpcException.fromHttpException(httpException, "request-id");
294
+
295
+ // Создание из обычной Error
296
+ const error = new Error("Something went wrong");
297
+ const rpcException = JsonRpcException.fromError(error, "request-id");
298
+ ```
299
+
300
+ **Коды ошибок JSON-RPC 2.0:**
301
+ - `PARSE_ERROR` (-32700) - Ошибка парсинга JSON
302
+ - `INVALID_REQUEST` (-32600) - Невалидный запрос
303
+ - `METHOD_NOT_FOUND` (-32601) - Метод не найден
304
+ - `INVALID_PARAMS` (-32602) - Невалидные параметры
305
+ - `INTERNAL_ERROR` (-32603) - Внутренняя ошибка сервера
306
+ - `UNAUTHORIZED` (-32001) - Неавторизованный доступ
307
+ - `FORBIDDEN` (-32002) - Доступ запрещен
308
+ - `NOT_FOUND` (-32003) - Ресурс не найден
309
+ - И другие кастомные коды (-32004 до -32099)
310
+
264
311
  ---
265
312
 
266
313
  ## 🛡️ Глобальные фильтры
@@ -271,6 +318,70 @@ async publish(userId: string, event: SOCKET_EVENTS, payload: unknown) {
271
318
 
272
319
  **Расположение:** `src/filters/unified-exception.filter.ts`
273
320
 
321
+ ### JsonRpcExceptionFilter
322
+
323
+ Фильтр исключений для обработки ошибок в формате JSON-RPC 2.0. Преобразует все исключения NestJS в формат JSON-RPC 2.0.
324
+
325
+ **Расположение:** `src/filters/json-rpc-exception.filter.ts`
326
+
327
+ **Особенности:**
328
+ - Автоматически извлекает `requestId` из тела запроса
329
+ - Преобразует `JsonRpcException` в JSON-RPC формат ответа
330
+ - Преобразует обычные `Error` в JSON-RPC формат с автоматическим определением статуса
331
+ - Обрабатывает неизвестные типы исключений
332
+ - Логирует все ошибки с контекстом
333
+
334
+ **Использование:**
335
+
336
+ ```typescript
337
+ import { Controller, Post, Body, UseFilters } from "@nestjs/common";
338
+ import { JsonRpcExceptionFilter, JsonRpcValidationPipe } from "@packages/nest-common";
339
+ import type { JsonRpcRequest } from "@packages/nest-common";
340
+
341
+ @Controller("mcp")
342
+ @UseFilters(JsonRpcExceptionFilter)
343
+ export default class McpController extends BaseController {
344
+ constructor(private readonly logger: LoggerService) {
345
+ super();
346
+ }
347
+
348
+ @Post()
349
+ async handleJsonRpcRequest(
350
+ @Body(JsonRpcValidationPipe) request: JsonRpcRequest,
351
+ ) {
352
+ // Обработка запроса
353
+ if (request.method === "test.method") {
354
+ return {
355
+ jsonrpc: "2.0",
356
+ id: request.id,
357
+ result: { success: true },
358
+ };
359
+ }
360
+
361
+ throw new JsonRpcException(
362
+ JsonRpcErrorCode.METHOD_NOT_FOUND,
363
+ `Method ${request.method} not found`,
364
+ );
365
+ }
366
+ }
367
+ ```
368
+
369
+ **Регистрация глобально:**
370
+
371
+ ```typescript
372
+ // В main.ts
373
+ import { JsonRpcExceptionFilter } from "@packages/nest-common";
374
+
375
+ async function bootstrap() {
376
+ const app = await NestFactory.create(AppModule);
377
+ const logger = await connectLogger(app, "ServiceName");
378
+
379
+ app.useGlobalFilters(new JsonRpcExceptionFilter(logger));
380
+
381
+ await app.listen(PORT);
382
+ }
383
+ ```
384
+
274
385
  **Регистрация:**
275
386
 
276
387
  ```typescript
@@ -617,6 +728,45 @@ export default class ApiController extends BaseController {
617
728
  }
618
729
  ```
619
730
 
731
+ ### JsonRpcValidationPipe
732
+
733
+ Валидация JSON-RPC 2.0 запросов согласно спецификации протокола.
734
+
735
+ **Расположение:** `src/pipes/json-rpc-validation.pipe.ts`
736
+
737
+ **Особенности:**
738
+ - Проверяет структуру запроса согласно спецификации JSON-RPC 2.0
739
+ - Валидирует версию протокола (`jsonrpc: "2.0"`)
740
+ - Проверяет наличие и тип поля `method` (должно быть строкой)
741
+ - Валидирует тип поля `id` (должно быть string, number или null)
742
+ - Валидирует тип поля `params` (должно быть object или undefined)
743
+ - Игнорирует объекты с NestJS метаданными (constructorRef, handler, contextType)
744
+ - Выбрасывает `JsonRpcException` при ошибках валидации
745
+
746
+ **Использование:**
747
+
748
+ ```typescript
749
+ import { Controller, Post, Body } from "@nestjs/common";
750
+ import { JsonRpcValidationPipe, JsonRpcExceptionFilter } from "@packages/nest-common";
751
+ import type { JsonRpcRequest } from "@packages/nest-common";
752
+
753
+ @Controller("mcp")
754
+ @UseFilters(JsonRpcExceptionFilter)
755
+ export default class McpController extends BaseController {
756
+ @Post()
757
+ async handleJsonRpcRequest(
758
+ @Body(JsonRpcValidationPipe) request: JsonRpcRequest,
759
+ ) {
760
+ // Обработка JSON-RPC запроса
761
+ return {
762
+ jsonrpc: "2.0",
763
+ id: request.id,
764
+ result: { /* результат */ },
765
+ };
766
+ }
767
+ }
768
+ ```
769
+
620
770
  ---
621
771
 
622
772
  ## 🔍 Перехватчики (дополнительные)
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=json-rpc.error.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc.error.spec.d.ts","sourceRoot":"","sources":["../../../src/errors/__tests__/json-rpc.error.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { HttpException, HttpStatus } from "@nestjs/common";
3
+ import JsonRpcException from "../../errors/json-rpc.error.js";
4
+ import { JsonRpcErrorCode, JSON_RPC_ERROR_MESSAGES } from "../../types/json-rpc-error-codes.js";
5
+ describe("JsonRpcException", () => {
6
+ describe("constructor", () => {
7
+ it("должен создать исключение с кодом ошибки и сообщением по умолчанию", () => {
8
+ const exception = new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR);
9
+ expect(exception).toBeInstanceOf(HttpException);
10
+ expect(exception.getRpcErrorCode()).toBe(JsonRpcErrorCode.INTERNAL_ERROR);
11
+ expect(exception.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
12
+ const response = exception.getResponse();
13
+ expect(response).toEqual({
14
+ jsonrpc: "2.0",
15
+ error: {
16
+ code: JsonRpcErrorCode.INTERNAL_ERROR,
17
+ message: JSON_RPC_ERROR_MESSAGES[JsonRpcErrorCode.INTERNAL_ERROR],
18
+ },
19
+ });
20
+ });
21
+ it("должен создать исключение с кастомным сообщением", () => {
22
+ const customMessage = "Custom error message";
23
+ const exception = new JsonRpcException(JsonRpcErrorCode.INVALID_REQUEST, customMessage);
24
+ expect(exception.getRpcErrorCode()).toBe(JsonRpcErrorCode.INVALID_REQUEST);
25
+ const response = exception.getResponse();
26
+ expect(response).toEqual({
27
+ jsonrpc: "2.0",
28
+ error: {
29
+ code: JsonRpcErrorCode.INVALID_REQUEST,
30
+ message: customMessage,
31
+ },
32
+ });
33
+ });
34
+ it("должен создать исключение с данными", () => {
35
+ const data = { requestId: "123", details: "Some details" };
36
+ const exception = new JsonRpcException(JsonRpcErrorCode.INVALID_PARAMS, "Invalid params", data);
37
+ expect(exception.getRpcData()).toEqual(data);
38
+ const response = exception.getResponse();
39
+ expect(response).toEqual({
40
+ jsonrpc: "2.0",
41
+ error: {
42
+ code: JsonRpcErrorCode.INVALID_PARAMS,
43
+ message: "Invalid params",
44
+ data,
45
+ },
46
+ });
47
+ });
48
+ it("должен создать исключение с кастомным HTTP статусом", () => {
49
+ const exception = new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR, "Error", undefined, HttpStatus.BAD_REQUEST);
50
+ expect(exception.getStatus()).toBe(HttpStatus.BAD_REQUEST);
51
+ });
52
+ });
53
+ describe("getRpcErrorCode", () => {
54
+ it("должен вернуть код ошибки JSON-RPC", () => {
55
+ const exception = new JsonRpcException(JsonRpcErrorCode.PARSE_ERROR);
56
+ expect(exception.getRpcErrorCode()).toBe(JsonRpcErrorCode.PARSE_ERROR);
57
+ });
58
+ });
59
+ describe("getRpcData", () => {
60
+ it("должен вернуть данные ошибки", () => {
61
+ const data = { key: "value" };
62
+ const exception = new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR, "Error", data);
63
+ expect(exception.getRpcData()).toEqual(data);
64
+ });
65
+ it("должен вернуть undefined если данные не были переданы", () => {
66
+ const exception = new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR);
67
+ expect(exception.getRpcData()).toBeUndefined();
68
+ });
69
+ });
70
+ describe("fromHttpException", () => {
71
+ it("должен создать JsonRpcException из HttpException со строковым ответом", () => {
72
+ const httpException = new HttpException("Error message", HttpStatus.BAD_REQUEST);
73
+ const rpcException = JsonRpcException.fromHttpException(httpException, "123");
74
+ expect(rpcException).toBeInstanceOf(JsonRpcException);
75
+ expect(rpcException.getStatus()).toBe(HttpStatus.BAD_REQUEST);
76
+ expect(rpcException.getRpcData()).toEqual({ requestId: "123" });
77
+ });
78
+ it("должен создать JsonRpcException из HttpException с объектным ответом", () => {
79
+ const httpException = new HttpException({ message: "Error message" }, HttpStatus.NOT_FOUND);
80
+ const rpcException = JsonRpcException.fromHttpException(httpException, 456);
81
+ expect(rpcException).toBeInstanceOf(JsonRpcException);
82
+ expect(rpcException.getStatus()).toBe(HttpStatus.NOT_FOUND);
83
+ expect(rpcException.getRpcData()).toEqual({ requestId: 456 });
84
+ });
85
+ it("должен использовать message из exception если response не содержит message", () => {
86
+ const httpException = new HttpException({ error: "Error" }, HttpStatus.INTERNAL_SERVER_ERROR);
87
+ httpException.message = "Exception message";
88
+ const rpcException = JsonRpcException.fromHttpException(httpException);
89
+ const response = rpcException.getResponse();
90
+ expect(typeof response === "object" &&
91
+ response !== null &&
92
+ "error" in response &&
93
+ typeof response.error === "object" &&
94
+ response.error !== null &&
95
+ "message" in response.error
96
+ ? response.error.message
97
+ : "").toBe("Exception message");
98
+ });
99
+ });
100
+ describe("fromError", () => {
101
+ it("должен создать JsonRpcException из обычной Error", () => {
102
+ const error = new Error("Something went wrong");
103
+ const rpcException = JsonRpcException.fromError(error, "789");
104
+ expect(rpcException).toBeInstanceOf(JsonRpcException);
105
+ expect(rpcException.getRpcErrorCode()).toBe(JsonRpcErrorCode.INTERNAL_ERROR);
106
+ expect(rpcException.getRpcData()).toEqual({
107
+ requestId: "789",
108
+ name: "Error",
109
+ });
110
+ });
111
+ it("должен использовать null как requestId по умолчанию", () => {
112
+ const error = new Error("Error");
113
+ const rpcException = JsonRpcException.fromError(error);
114
+ expect(rpcException.getRpcData()).toEqual({
115
+ requestId: null,
116
+ name: "Error",
117
+ });
118
+ });
119
+ });
120
+ describe("HTTP статусы для различных кодов ошибок", () => {
121
+ it("должен вернуть BAD_REQUEST для PARSE_ERROR", () => {
122
+ const exception = new JsonRpcException(JsonRpcErrorCode.PARSE_ERROR);
123
+ expect(exception.getStatus()).toBe(HttpStatus.BAD_REQUEST);
124
+ });
125
+ it("должен вернуть BAD_REQUEST для INVALID_REQUEST", () => {
126
+ const exception = new JsonRpcException(JsonRpcErrorCode.INVALID_REQUEST);
127
+ expect(exception.getStatus()).toBe(HttpStatus.BAD_REQUEST);
128
+ });
129
+ it("должен вернуть BAD_REQUEST для INVALID_PARAMS", () => {
130
+ const exception = new JsonRpcException(JsonRpcErrorCode.INVALID_PARAMS);
131
+ expect(exception.getStatus()).toBe(HttpStatus.BAD_REQUEST);
132
+ });
133
+ it("должен вернуть UNAUTHORIZED для UNAUTHORIZED", () => {
134
+ const exception = new JsonRpcException(JsonRpcErrorCode.UNAUTHORIZED);
135
+ expect(exception.getStatus()).toBe(HttpStatus.UNAUTHORIZED);
136
+ });
137
+ it("должен вернуть FORBIDDEN для FORBIDDEN", () => {
138
+ const exception = new JsonRpcException(JsonRpcErrorCode.FORBIDDEN);
139
+ expect(exception.getStatus()).toBe(HttpStatus.FORBIDDEN);
140
+ });
141
+ it("должен вернуть NOT_FOUND для NOT_FOUND", () => {
142
+ const exception = new JsonRpcException(JsonRpcErrorCode.NOT_FOUND);
143
+ expect(exception.getStatus()).toBe(HttpStatus.NOT_FOUND);
144
+ });
145
+ it("должен вернуть NOT_FOUND для METHOD_NOT_FOUND", () => {
146
+ const exception = new JsonRpcException(JsonRpcErrorCode.METHOD_NOT_FOUND);
147
+ expect(exception.getStatus()).toBe(HttpStatus.NOT_FOUND);
148
+ });
149
+ it("должен вернуть TOO_MANY_REQUESTS для TOO_MANY_REQUESTS", () => {
150
+ const exception = new JsonRpcException(JsonRpcErrorCode.TOO_MANY_REQUESTS);
151
+ expect(exception.getStatus()).toBe(HttpStatus.TOO_MANY_REQUESTS);
152
+ });
153
+ it("должен вернуть BAD_GATEWAY для BAD_GATEWAY", () => {
154
+ const exception = new JsonRpcException(JsonRpcErrorCode.BAD_GATEWAY);
155
+ expect(exception.getStatus()).toBe(HttpStatus.BAD_GATEWAY);
156
+ });
157
+ it("должен вернуть SERVICE_UNAVAILABLE для SERVICE_UNAVAILABLE", () => {
158
+ const exception = new JsonRpcException(JsonRpcErrorCode.SERVICE_UNAVAILABLE);
159
+ expect(exception.getStatus()).toBe(HttpStatus.SERVICE_UNAVAILABLE);
160
+ });
161
+ it("должен вернуть GATEWAY_TIMEOUT для GATEWAY_TIMEOUT", () => {
162
+ const exception = new JsonRpcException(JsonRpcErrorCode.GATEWAY_TIMEOUT);
163
+ expect(exception.getStatus()).toBe(HttpStatus.GATEWAY_TIMEOUT);
164
+ });
165
+ it("должен вернуть INTERNAL_SERVER_ERROR для INTERNAL_ERROR", () => {
166
+ const exception = new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR);
167
+ expect(exception.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
168
+ });
169
+ it("должен вернуть INTERNAL_SERVER_ERROR для SERVER_ERROR", () => {
170
+ const exception = new JsonRpcException(JsonRpcErrorCode.SERVER_ERROR);
171
+ expect(exception.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
172
+ });
173
+ });
174
+ });
175
+ //# sourceMappingURL=json-rpc.error.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc.error.spec.js","sourceRoot":"","sources":["../../../src/errors/__tests__/json-rpc.error.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { HttpException, HttpStatus } from "@nestjs/common";
2
+ import { JsonRpcErrorCode } from "../types/json-rpc-error-codes.js";
3
+ export default class JsonRpcException extends HttpException {
4
+ private readonly rpcErrorCode;
5
+ private readonly rpcData?;
6
+ constructor(rpcErrorCode: JsonRpcErrorCode, message?: string, data?: unknown, httpStatus?: HttpStatus);
7
+ getRpcErrorCode(): JsonRpcErrorCode;
8
+ getRpcData(): unknown;
9
+ static fromHttpException(exception: HttpException, requestId?: number | string | null): JsonRpcException;
10
+ static fromError(error: Error, requestId?: number | string | null): JsonRpcException;
11
+ private static getHttpStatus;
12
+ }
13
+ //# sourceMappingURL=json-rpc.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc.error.d.ts","sourceRoot":"","sources":["../../src/errors/json-rpc.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACN,gBAAgB,EAGhB,MAAM,gCAAgC,CAAC;AAIxC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAU;gBAGlC,YAAY,EAAE,gBAAgB,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,UAAU,CAAC,EAAE,UAAU;IAsBxB,eAAe,IAAI,gBAAgB;IAKnC,UAAU,IAAI,OAAO;IAKrB,MAAM,CAAC,iBAAiB,CACvB,SAAS,EAAE,aAAa,EACxB,SAAS,GAAE,MAAM,GAAG,MAAM,GAAG,IAAW,GACtC,gBAAgB;IAgBnB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,GAAE,MAAM,GAAG,MAAM,GAAG,IAAW,GAAG,gBAAgB;IAQ1F,OAAO,CAAC,MAAM,CAAC,aAAa;CA2B5B"}
@@ -0,0 +1,78 @@
1
+ import { HttpException, HttpStatus } from "@nestjs/common";
2
+ import { JsonRpcErrorCode, JSON_RPC_ERROR_MESSAGES, mapHttpStatusToJsonRpcErrorCode, } from "../types/json-rpc-error-codes.js";
3
+ // Кастомное исключение для JSON-RPC 2.0 протокола
4
+ // Наследуется от HttpException для совместимости с NestJS фильтрами
5
+ export default class JsonRpcException extends HttpException {
6
+ rpcErrorCode;
7
+ rpcData;
8
+ constructor(rpcErrorCode, message, data, httpStatus) {
9
+ const rpcMessage = message || JSON_RPC_ERROR_MESSAGES[rpcErrorCode];
10
+ const status = httpStatus || JsonRpcException.getHttpStatus(rpcErrorCode);
11
+ super({
12
+ jsonrpc: "2.0",
13
+ error: {
14
+ code: rpcErrorCode,
15
+ message: rpcMessage,
16
+ ...(data !== undefined && { data }),
17
+ },
18
+ }, status);
19
+ this.rpcErrorCode = rpcErrorCode;
20
+ this.rpcData = data;
21
+ }
22
+ // Получить JSON-RPC код ошибки
23
+ getRpcErrorCode() {
24
+ return this.rpcErrorCode;
25
+ }
26
+ // Получить данные ошибки
27
+ getRpcData() {
28
+ return this.rpcData;
29
+ }
30
+ // Создать JsonRpcException из стандартного HttpException
31
+ static fromHttpException(exception, requestId = null) {
32
+ const status = exception.getStatus();
33
+ const response = exception.getResponse();
34
+ const message = typeof response === "string"
35
+ ? response
36
+ : typeof response === "object" && response !== null && "message" in response
37
+ ? String(response.message)
38
+ : exception.message;
39
+ const rpcErrorCode = mapHttpStatusToJsonRpcErrorCode(status);
40
+ return new JsonRpcException(rpcErrorCode, message, { requestId }, status);
41
+ }
42
+ // Создать JsonRpcException из обычной Error
43
+ static fromError(error, requestId = null) {
44
+ return new JsonRpcException(JsonRpcErrorCode.INTERNAL_ERROR, error.message, {
45
+ requestId,
46
+ name: error.name,
47
+ });
48
+ }
49
+ // Получить HTTP статус из JSON-RPC кода ошибки
50
+ static getHttpStatus(rpcErrorCode) {
51
+ switch (rpcErrorCode) {
52
+ case JsonRpcErrorCode.PARSE_ERROR:
53
+ case JsonRpcErrorCode.INVALID_REQUEST:
54
+ case JsonRpcErrorCode.INVALID_PARAMS:
55
+ return HttpStatus.BAD_REQUEST;
56
+ case JsonRpcErrorCode.UNAUTHORIZED:
57
+ return HttpStatus.UNAUTHORIZED;
58
+ case JsonRpcErrorCode.FORBIDDEN:
59
+ return HttpStatus.FORBIDDEN;
60
+ case JsonRpcErrorCode.NOT_FOUND:
61
+ case JsonRpcErrorCode.METHOD_NOT_FOUND:
62
+ return HttpStatus.NOT_FOUND;
63
+ case JsonRpcErrorCode.TOO_MANY_REQUESTS:
64
+ return HttpStatus.TOO_MANY_REQUESTS;
65
+ case JsonRpcErrorCode.BAD_GATEWAY:
66
+ return HttpStatus.BAD_GATEWAY;
67
+ case JsonRpcErrorCode.SERVICE_UNAVAILABLE:
68
+ return HttpStatus.SERVICE_UNAVAILABLE;
69
+ case JsonRpcErrorCode.GATEWAY_TIMEOUT:
70
+ return HttpStatus.GATEWAY_TIMEOUT;
71
+ case JsonRpcErrorCode.INTERNAL_ERROR:
72
+ case JsonRpcErrorCode.SERVER_ERROR:
73
+ default:
74
+ return HttpStatus.INTERNAL_SERVER_ERROR;
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=json-rpc.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc.error.js","sourceRoot":"","sources":["../../src/errors/json-rpc.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=json-rpc-exception.filter.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-rpc-exception.filter.spec.d.ts","sourceRoot":"","sources":["../../../src/filters/__tests__/json-rpc-exception.filter.spec.ts"],"names":[],"mappings":""}