@sima-land/isomorph 11.0.0-alpha.5 → 11.0.0-alpha.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.
@@ -1,4 +1,4 @@
1
- import type { Client, Severity, Context, Extra } from '@sentry/types';
1
+ import type { Client, Severity, Context, Extra, Breadcrumb } from '@sentry/types';
2
2
  import type { withScope as withScopeBrowser } from '@sentry/browser';
3
3
  import type { withScope as withScopeNode } from '@sentry/node';
4
4
  export interface SentryLib {
@@ -16,3 +16,4 @@ export interface SentryErrorData {
16
16
  data: Extra | null;
17
17
  };
18
18
  }
19
+ export declare type SentryBreadcrumbData = Breadcrumb;
@@ -1,4 +1,4 @@
1
- import { SentryErrorData } from './types';
1
+ import { SentryErrorData, SentryBreadcrumbData } from './types';
2
2
  /**
3
3
  * Ошибка с данными для Sentry.
4
4
  */
@@ -10,3 +10,13 @@ export declare class SentryError extends Error {
10
10
  */
11
11
  constructor(message: string, data?: SentryErrorData);
12
12
  }
13
+ /**
14
+ * Хлебная крошка для Sentry.
15
+ */
16
+ export declare class SentryBreadcrumb {
17
+ data: SentryBreadcrumbData;
18
+ /**
19
+ * @param data Данные.
20
+ */
21
+ constructor(data: SentryBreadcrumbData);
22
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SentryError = void 0;
3
+ exports.SentryBreadcrumb = exports.SentryError = void 0;
4
4
  /**
5
5
  * Ошибка с данными для Sentry.
6
6
  */
@@ -16,4 +16,16 @@ class SentryError extends Error {
16
16
  }
17
17
  }
18
18
  exports.SentryError = SentryError;
19
+ /**
20
+ * Хлебная крошка для Sentry.
21
+ */
22
+ class SentryBreadcrumb {
23
+ /**
24
+ * @param data Данные.
25
+ */
26
+ constructor(data) {
27
+ this.data = data;
28
+ }
29
+ }
30
+ exports.SentryBreadcrumb = SentryBreadcrumb;
19
31
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/error-tracker/utils.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAGpC;;;OAGG;IACH,YAAY,OAAe,EAAE,OAAwB,EAAE;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAZD,kCAYC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/error-tracker/utils.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAGpC;;;OAGG;IACH,YAAY,OAAe,EAAE,OAAwB,EAAE;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAZD,kCAYC;AAED;;GAEG;AACH,MAAa,gBAAgB;IAG3B;;OAEG;IACH,YAAY,IAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,4CASC"}
@@ -0,0 +1,15 @@
1
+ import { Middleware } from 'middleware-axios';
2
+ import { Logger } from '../../logger/types';
3
+ import { Severity } from '@sentry/types';
4
+ /**
5
+ * Возвращает новый middleware для логирования запросов.
6
+ * @param logger Логгер.
7
+ * @return Middleware.
8
+ */
9
+ export declare function loggingMiddleware(logger: Logger): Middleware<any>;
10
+ /**
11
+ * Возвращает уровень на основе статуса ответа.
12
+ * @param status Статус.
13
+ * @return Уровень.
14
+ */
15
+ export declare function severityFromStatus(status: number | undefined): Severity.Error | Severity.Info;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.severityFromStatus = exports.loggingMiddleware = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../error-tracker/utils");
9
+ const types_1 = require("@sentry/types");
10
+ /**
11
+ * Возвращает новый middleware для логирования запросов.
12
+ * @param logger Логгер.
13
+ * @return Middleware.
14
+ */
15
+ function loggingMiddleware(logger) {
16
+ return async function (config, next, defaults) {
17
+ const { baseURL, url, method = 'GET', params, data, headers } = { ...defaults, ...config };
18
+ const readyMethod = method.toUpperCase();
19
+ const readyURL = baseURL ? `${baseURL.replace(/\/$/, '')}${url}` : url;
20
+ try {
21
+ logger.info(new utils_1.SentryBreadcrumb({
22
+ category: 'http.request',
23
+ type: 'http',
24
+ data: {
25
+ url: readyURL,
26
+ status_code: 'FETCHING',
27
+ method: readyMethod,
28
+ params,
29
+ },
30
+ level: types_1.Severity.Info,
31
+ }));
32
+ const response = await next(config);
33
+ logger.info(new utils_1.SentryBreadcrumb({
34
+ category: 'http.response',
35
+ type: 'http',
36
+ data: {
37
+ url: readyURL,
38
+ status_code: response.status,
39
+ method: readyMethod,
40
+ params,
41
+ },
42
+ level: types_1.Severity.Info,
43
+ }));
44
+ }
45
+ catch (error) {
46
+ if (axios_1.default.isAxiosError(error)) {
47
+ const statusCode = error.response?.status || 'UNKNOWN';
48
+ logger.error(new utils_1.SentryError('HTTP request failed', {
49
+ level: severityFromStatus(error.response?.status),
50
+ context: {
51
+ key: 'Request details',
52
+ data: {
53
+ url,
54
+ baseURL,
55
+ method,
56
+ headers,
57
+ params,
58
+ data,
59
+ },
60
+ },
61
+ }));
62
+ logger.info(new utils_1.SentryBreadcrumb({
63
+ category: 'http.response',
64
+ type: 'http',
65
+ data: {
66
+ url: readyURL,
67
+ status_code: statusCode,
68
+ method: readyMethod,
69
+ params,
70
+ },
71
+ level: types_1.Severity.Error,
72
+ }));
73
+ }
74
+ // ВАЖНО: не скрываем ошибку, сообщаем остальному миру про нее
75
+ throw error;
76
+ }
77
+ };
78
+ }
79
+ exports.loggingMiddleware = loggingMiddleware;
80
+ /**
81
+ * Возвращает уровень на основе статуса ответа.
82
+ * @param status Статус.
83
+ * @return Уровень.
84
+ */
85
+ function severityFromStatus(status) {
86
+ return typeof status === 'number' && status >= 200 && status < 300
87
+ ? types_1.Severity.Info
88
+ : types_1.Severity.Error;
89
+ }
90
+ exports.severityFromStatus = severityFromStatus;
91
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-client/middleware/logging.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,qDAA0E;AAC1E,yCAAyC;AAEzC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,KAAK,WAAW,MAAM,EAAE,IAAI,EAAE,QAAQ;QAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvE,IAAI;YACF,MAAM,CAAC,IAAI,CACT,IAAI,wBAAgB,CAAC;gBACnB,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,GAAG,EAAE,QAAQ;oBACb,WAAW,EAAE,UAAU;oBACvB,MAAM,EAAE,WAAW;oBACnB,MAAM;iBACP;gBACD,KAAK,EAAE,gBAAQ,CAAC,IAAI;aACrB,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpC,MAAM,CAAC,IAAI,CACT,IAAI,wBAAgB,CAAC;gBACnB,QAAQ,EAAE,eAAe;gBACzB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,GAAG,EAAE,QAAQ;oBACb,WAAW,EAAE,QAAQ,CAAC,MAAM;oBAC5B,MAAM,EAAE,WAAW;oBACnB,MAAM;iBACP;gBACD,KAAK,EAAE,gBAAQ,CAAC,IAAI;aACrB,CAAC,CACH,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;gBAEvD,MAAM,CAAC,KAAK,CACV,IAAI,mBAAW,CAAC,qBAAqB,EAAE;oBACrC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;oBACjD,OAAO,EAAE;wBACP,GAAG,EAAE,iBAAiB;wBACtB,IAAI,EAAE;4BACJ,GAAG;4BACH,OAAO;4BACP,MAAM;4BACN,OAAO;4BACP,MAAM;4BACN,IAAI;yBACL;qBACF;iBACF,CAAC,CACH,CAAC;gBAEF,MAAM,CAAC,IAAI,CACT,IAAI,wBAAgB,CAAC;oBACnB,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;wBACJ,GAAG,EAAE,QAAQ;wBACb,WAAW,EAAE,UAAU;wBACvB,MAAM,EAAE,WAAW;wBACnB,MAAM;qBACP;oBACD,KAAK,EAAE,gBAAQ,CAAC,KAAK;iBACtB,CAAC,CACH,CAAC;aACH;YAED,8DAA8D;YAC9D,MAAM,KAAK,CAAC;SACb;IACH,CAAC,CAAC;AACJ,CAAC;AA5ED,8CA4EC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,MAA0B;IAC3D,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAChE,CAAC,CAAC,gBAAQ,CAAC,IAAI;QACf,CAAC,CAAC,gBAAQ,CAAC,KAAK,CAAC;AACrB,CAAC;AAJD,gDAIC"}
@@ -9,6 +9,7 @@ const utils_1 = require("../../error-tracker/utils");
9
9
  */
10
10
  function createSentryHandler(sentry) {
11
11
  return event => {
12
+ // error
12
13
  if (event.type === 'error') {
13
14
  const error = event.data;
14
15
  if (error instanceof utils_1.SentryError) {
@@ -30,6 +31,13 @@ function createSentryHandler(sentry) {
30
31
  sentry.client.captureException(error);
31
32
  }
32
33
  }
34
+ // breadcrumb
35
+ if (event.data instanceof utils_1.SentryBreadcrumb) {
36
+ const breadcrumb = event.data.data;
37
+ sentry.withScope(scope => {
38
+ scope.addBreadcrumb(breadcrumb);
39
+ });
40
+ }
33
41
  };
34
42
  }
35
43
  exports.createSentryHandler = createSentryHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/logger/handler/sentry.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAExD;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,MAAiB;IACnD,OAAO,KAAK,CAAC,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;YAEzB,IAAI,KAAK,YAAY,mBAAW,EAAE;gBAChC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;gBAE7C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBACvB,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBACvB;oBAED,IAAI,OAAO,EAAE;wBACX,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;qBAC7C;oBAED,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBACvC;oBAED,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACvC;SACF;IACH,CAAC,CAAC;AACJ,CAAC;AA5BD,kDA4BC"}
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/logger/handler/sentry.ts"],"names":[],"mappings":";;;AAEA,qDAA0E;AAE1E;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,MAAiB;IACnD,OAAO,KAAK,CAAC,EAAE;QACb,QAAQ;QACR,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;YAEzB,IAAI,KAAK,YAAY,mBAAW,EAAE;gBAChC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;gBAE7C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBACvB,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBACvB;oBAED,IAAI,OAAO,EAAE;wBACX,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;qBAC7C;oBAED,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBACvC;oBAED,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACvC;SACF;QAED,aAAa;QACb,IAAI,KAAK,CAAC,IAAI,YAAY,wBAAgB,EAAE;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAEnC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBACvB,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC;AACJ,CAAC;AAtCD,kDAsCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/isomorph",
3
- "version": "11.0.0-alpha.5",
3
+ "version": "11.0.0-alpha.6",
4
4
  "description": "Tiny framework for fast start frontend microservices",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",