@escapenavigator/utils 1.10.142 → 1.10.143

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.
@@ -66,6 +66,23 @@ const SKIP_AXIOS_CODES = new Set(['ERR_CANCELED', 'CANCELED']);
66
66
  * ошибкой только потому что код != 200.
67
67
  */
68
68
  const SKIP_HTTP_STATUSES = new Set([401, 403, 304]);
69
+ /**
70
+ * Бизнес-коды 4xx, которые НЕ нужно репортить вообще: это ожидаемое
71
+ * состояние, а не баг кода, и юзер уже видит понятное сообщение.
72
+ *
73
+ * widgetUnavailable — 404 на /openapi/widget/info для несуществующего /
74
+ * удалённого/переименованного widgetUid. Это «протухший» embed-сниппет
75
+ * на хост-сайте партнёра (его надо обновить — задача поддержки/данных,
76
+ * не кода). Один битый embed генерил 145 событий / 97 юзеров в день
77
+ * (ESCAPE-NAVIGATOR-WIDGET-E). Раньше эта же ситуация прилетала как 500
78
+ * (WIDGET-7) — мы починили бэк на чистый 404, теперь глушим и фронт-репорт.
79
+ *
80
+ * orderFinalizedUseCancel — 400 на DELETE /openapi/orders/preorder, когда
81
+ * юзер удаляет уже подтверждённую бронь (надо отменять, а не чистить
82
+ * draft). Ожидаемое бизнес-состояние, юзер видит понятное сообщение
83
+ * (ESCAPE-NAVIGATOR-WIDGET-B). Не баг кода — глушим фронт-репорт.
84
+ */
85
+ const SKIP_BUSINESS_CODES = new Set(['widgetUnavailable', 'orderFinalizedUseCancel']);
69
86
  function classifyApiError(ctx) {
70
87
  const { status, code, apiKey, errorCode, originalErrorCode } = ctx;
71
88
  if (code && SKIP_AXIOS_CODES.has(code)) {
@@ -74,6 +91,10 @@ function classifyApiError(ctx) {
74
91
  if (typeof status === 'number' && SKIP_HTTP_STATUSES.has(status)) {
75
92
  return { severity: 'skip', level: 'info', fingerprint: null, shouldReport: false };
76
93
  }
94
+ if ((errorCode && SKIP_BUSINESS_CODES.has(errorCode)) ||
95
+ (originalErrorCode && SKIP_BUSINESS_CODES.has(originalErrorCode))) {
96
+ return { severity: 'skip', level: 'info', fingerprint: null, shouldReport: false };
97
+ }
77
98
  // 5xx → critical. Включаем status в fingerprint, чтобы 502/503/504 не
78
99
  // схлопывались в один issue с 500 — у них разные источники проблем
79
100
  // (proxy/CDN vs само приложение vs gateway-timeout).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@escapenavigator/utils",
3
- "version": "1.10.142",
3
+ "version": "1.10.143",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -14,7 +14,7 @@
14
14
  "test": "jest"
15
15
  },
16
16
  "dependencies": {
17
- "@escapenavigator/types": "^1.10.138",
17
+ "@escapenavigator/types": "^1.10.139",
18
18
  "axios": "^0.21.4",
19
19
  "class-transformer": "^0.5.1",
20
20
  "class-validator": "^0.13.2",
@@ -28,5 +28,5 @@
28
28
  "ts-jest": "^29.1.1",
29
29
  "typescript": "^5.6"
30
30
  },
31
- "gitHead": "4592522583b49fd2c99c8c916e3713f11eb3cf61"
31
+ "gitHead": "c1bf866b6192e757b79dad2334450054429f9be4"
32
32
  }