@sima-land/isomorph 11.0.0-alpha.2 → 11.0.0-alpha.20

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 (177) hide show
  1. package/cache/types.d.ts +24 -2
  2. package/config/{index.d.ts → base.d.ts} +2 -2
  3. package/config/{index.js → base.js} +3 -3
  4. package/config/base.js.map +1 -0
  5. package/config/browser.d.ts +1 -1
  6. package/config/browser.js +11 -2
  7. package/config/browser.js.map +1 -1
  8. package/config/node.d.ts +1 -1
  9. package/config/node.js +16 -6
  10. package/config/node.js.map +1 -1
  11. package/config/types.d.ts +3 -0
  12. package/di/application.d.ts +10 -0
  13. package/{container → di}/application.js +30 -8
  14. package/di/application.js.map +1 -0
  15. package/di/container.d.ts +6 -0
  16. package/di/container.js +52 -0
  17. package/di/container.js.map +1 -0
  18. package/di/errors.d.ts +32 -0
  19. package/di/errors.js +48 -0
  20. package/di/errors.js.map +1 -0
  21. package/di/index.d.ts +6 -0
  22. package/di/index.js +17 -0
  23. package/di/index.js.map +1 -0
  24. package/di/preset.d.ts +9 -0
  25. package/di/preset.js +31 -0
  26. package/di/preset.js.map +1 -0
  27. package/di/token.d.ts +7 -0
  28. package/di/token.js +39 -0
  29. package/di/token.js.map +1 -0
  30. package/di/types.d.ts +88 -0
  31. package/{container → di}/types.js +0 -0
  32. package/{tracer → di}/types.js.map +1 -1
  33. package/error-tracking/index.d.ts +24 -0
  34. package/error-tracking/index.js +32 -0
  35. package/error-tracking/index.js.map +1 -0
  36. package/error-tracking/types.d.ts +19 -0
  37. package/{error-tracker → error-tracking}/types.js +0 -0
  38. package/{container → error-tracking}/types.js.map +1 -1
  39. package/http-client/middleware/cookie.d.ts +1 -0
  40. package/http-client/middleware/cookie.js +2 -1
  41. package/http-client/middleware/cookie.js.map +1 -1
  42. package/http-client/middleware/headers.d.ts +13 -0
  43. package/http-client/middleware/headers.js +24 -0
  44. package/http-client/middleware/headers.js.map +1 -0
  45. package/http-client/middleware/logging.d.ts +16 -0
  46. package/http-client/middleware/logging.js +111 -0
  47. package/http-client/middleware/logging.js.map +1 -0
  48. package/http-client/middleware/tracing.js +9 -1
  49. package/http-client/middleware/tracing.js.map +1 -1
  50. package/http-client/sauce/index.d.ts +3 -1
  51. package/http-client/sauce/index.js +15 -2
  52. package/http-client/sauce/index.js.map +1 -1
  53. package/http-server/errors.d.ts +11 -0
  54. package/http-server/errors.js +18 -0
  55. package/http-server/errors.js.map +1 -0
  56. package/http-server/handler/health-check.d.ts +1 -1
  57. package/http-server/handler/health-check.js +1 -1
  58. package/http-server/middleware/metrics.js +2 -2
  59. package/http-server/middleware/metrics.js.map +1 -1
  60. package/http-server/middleware/tracing.d.ts +8 -2
  61. package/http-server/middleware/tracing.js +19 -1
  62. package/http-server/middleware/tracing.js.map +1 -1
  63. package/http-server/template/index.js +6 -0
  64. package/http-server/template/index.js.map +1 -1
  65. package/http-server/types.d.ts +2 -0
  66. package/http-server/utils.d.ts +3 -5
  67. package/http-server/utils.js +16 -15
  68. package/http-server/utils.js.map +1 -1
  69. package/logger/handler/console.d.ts +1 -1
  70. package/logger/handler/console.js +8 -1
  71. package/logger/handler/console.js.map +1 -1
  72. package/logger/handler/sentry.d.ts +3 -3
  73. package/logger/handler/sentry.js +13 -7
  74. package/logger/handler/sentry.js.map +1 -1
  75. package/logger/index.d.ts +2 -6
  76. package/logger/index.js +2 -27
  77. package/logger/index.js.map +1 -1
  78. package/logger/logger.d.ts +6 -0
  79. package/logger/logger.js +31 -0
  80. package/logger/logger.js.map +1 -0
  81. package/logger/types.d.ts +16 -0
  82. package/metrics/constants.d.ts +3 -0
  83. package/metrics/constants.js +3 -0
  84. package/metrics/constants.js.map +1 -1
  85. package/metrics/node.d.ts +7 -0
  86. package/metrics/node.js +1 -0
  87. package/metrics/node.js.map +1 -1
  88. package/package.json +4 -2
  89. package/preset/browser/index.d.ts +12 -0
  90. package/preset/browser/index.js +67 -0
  91. package/preset/browser/index.js.map +1 -0
  92. package/preset/node/index.d.ts +14 -6
  93. package/preset/node/index.js +92 -36
  94. package/preset/node/index.js.map +1 -1
  95. package/preset/node/response.d.ts +14 -8
  96. package/preset/node/response.js +87 -27
  97. package/preset/node/response.js.map +1 -1
  98. package/preset/types.d.ts +7 -6
  99. package/preset/utils.d.ts +15 -0
  100. package/preset/utils.js +26 -0
  101. package/preset/utils.js.map +1 -0
  102. package/tokens.d.ts +35 -18
  103. package/tokens.js +31 -17
  104. package/tokens.js.map +1 -1
  105. package/tracing/index.d.ts +9 -0
  106. package/tracing/index.js +20 -0
  107. package/tracing/index.js.map +1 -0
  108. package/utils/browser/analytics/oko.d.ts +2 -1
  109. package/utils/browser/analytics/oko.js +2 -1
  110. package/utils/browser/analytics/oko.js.map +1 -1
  111. package/utils/browser/storage/index.d.ts +8 -0
  112. package/utils/browser/storage/index.js +5 -0
  113. package/utils/browser/storage/index.js.map +1 -1
  114. package/utils/react/error-handlers/index.d.ts +9 -6
  115. package/utils/react/error-handlers/index.js +4 -3
  116. package/utils/react/error-handlers/index.js.map +1 -1
  117. package/utils/redux/remote-data.d.ts +9 -0
  118. package/utils/redux/remote-data.js +3 -0
  119. package/utils/redux/remote-data.js.map +1 -1
  120. package/utils/redux-saga/index.d.ts +3 -0
  121. package/utils/redux-saga/index.js +8 -0
  122. package/utils/redux-saga/index.js.map +1 -0
  123. package/utils/redux-saga/middleware.d.ts +9 -0
  124. package/utils/redux-saga/middleware.js +87 -0
  125. package/utils/redux-saga/middleware.js.map +1 -0
  126. package/utils/redux-saga/take-chain.d.ts +2 -0
  127. package/utils/redux-saga/take-chain.js +2 -0
  128. package/utils/redux-saga/take-chain.js.map +1 -1
  129. package/utils/redux-saga/types.d.ts +6 -0
  130. package/{saga-runner → utils/redux-saga}/types.js +0 -0
  131. package/{error-tracker → utils/redux-saga}/types.js.map +1 -1
  132. package/utils/ssr/index.d.ts +41 -0
  133. package/utils/ssr/index.js +54 -0
  134. package/utils/ssr/index.js.map +1 -0
  135. package/utils/webpack/index.d.ts +23 -0
  136. package/utils/webpack/index.js +66 -0
  137. package/utils/webpack/index.js.map +1 -0
  138. package/utils/webpack/module-federation/index.d.ts +4 -1
  139. package/utils/webpack/module-federation/index.js +4 -2
  140. package/utils/webpack/module-federation/index.js.map +1 -1
  141. package/utils/webpack/module-federation/types.d.ts +4 -0
  142. package/utils/webpack/module-federation/utils.d.ts +1 -0
  143. package/utils/webpack/module-federation/utils.js +1 -0
  144. package/utils/webpack/module-federation/utils.js.map +1 -1
  145. package/config/index.js.map +0 -1
  146. package/config/utils.d.ts +0 -5
  147. package/config/utils.js +0 -12
  148. package/config/utils.js.map +0 -1
  149. package/container/application.d.ts +0 -25
  150. package/container/application.js.map +0 -1
  151. package/container/index.d.ts +0 -18
  152. package/container/index.js +0 -74
  153. package/container/index.js.map +0 -1
  154. package/container/types.d.ts +0 -14
  155. package/error-tracker/browser.d.ts +0 -8
  156. package/error-tracker/browser.js +0 -40
  157. package/error-tracker/browser.js.map +0 -1
  158. package/error-tracker/node.d.ts +0 -8
  159. package/error-tracker/node.js +0 -40
  160. package/error-tracker/node.js.map +0 -1
  161. package/error-tracker/types.d.ts +0 -18
  162. package/error-tracker/utils.d.ts +0 -12
  163. package/error-tracker/utils.js +0 -19
  164. package/error-tracker/utils.js.map +0 -1
  165. package/preset/index.d.ts +0 -7
  166. package/preset/index.js +0 -25
  167. package/preset/index.js.map +0 -1
  168. package/saga-runner/index.d.ts +0 -8
  169. package/saga-runner/index.js +0 -79
  170. package/saga-runner/index.js.map +0 -1
  171. package/saga-runner/types.d.ts +0 -10
  172. package/saga-runner/types.js.map +0 -1
  173. package/tracer/node.d.ts +0 -10
  174. package/tracer/node.js +0 -38
  175. package/tracer/node.js.map +0 -1
  176. package/tracer/types.d.ts +0 -2
  177. package/tracer/types.js +0 -3
@@ -0,0 +1,24 @@
1
+ import { SentryErrorData, SentryBreadcrumbData } from './types';
2
+ /**
3
+ * Ошибка с данными для Sentry.
4
+ * @todo Этот класс должен называться либо SentryReadyError либо в названии вообще не должен фигурировать Sentry.
5
+ */
6
+ export declare class SentryError extends Error {
7
+ data: SentryErrorData;
8
+ /**
9
+ * @param message Сообщение.
10
+ * @param data Данные.
11
+ */
12
+ constructor(message: string, data?: SentryErrorData);
13
+ }
14
+ /**
15
+ * Хлебная крошка для Sentry.
16
+ * @todo Этот класс должен называться либо SentryReadyBreadcrumb либо в названии вообще не должен фигурировать Sentry.
17
+ */
18
+ export declare class SentryBreadcrumb {
19
+ data: SentryBreadcrumbData;
20
+ /**
21
+ * @param data Данные.
22
+ */
23
+ constructor(data: SentryBreadcrumbData);
24
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SentryBreadcrumb = exports.SentryError = void 0;
4
+ /**
5
+ * Ошибка с данными для Sentry.
6
+ * @todo Этот класс должен называться либо SentryReadyError либо в названии вообще не должен фигурировать Sentry.
7
+ */
8
+ class SentryError extends Error {
9
+ /**
10
+ * @param message Сообщение.
11
+ * @param data Данные.
12
+ */
13
+ constructor(message, data = {}) {
14
+ super(message);
15
+ this.data = data;
16
+ }
17
+ }
18
+ exports.SentryError = SentryError;
19
+ /**
20
+ * Хлебная крошка для Sentry.
21
+ * @todo Этот класс должен называться либо SentryReadyBreadcrumb либо в названии вообще не должен фигурировать Sentry.
22
+ */
23
+ class SentryBreadcrumb {
24
+ /**
25
+ * @param data Данные.
26
+ */
27
+ constructor(data) {
28
+ this.data = data;
29
+ }
30
+ }
31
+ exports.SentryBreadcrumb = SentryBreadcrumb;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error-tracking/index.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;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;IACnB,CAAC;CACF;AAXD,kCAWC;AAED;;;GAGG;AACH,MAAa,gBAAgB;IAG3B;;OAEG;IACH,YAAY,IAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,4CASC"}
@@ -0,0 +1,19 @@
1
+ import type { Severity, Context, Extra, Breadcrumb } from '@sentry/types';
2
+ /**
3
+ * Данные ошибки для Sentry.
4
+ */
5
+ export interface SentryErrorData {
6
+ level?: Severity;
7
+ context?: {
8
+ key: string;
9
+ data: Context | null;
10
+ };
11
+ extra?: {
12
+ key: string;
13
+ data: Extra | null;
14
+ };
15
+ }
16
+ /**
17
+ * Данные хлебной крошки для Sentry.
18
+ */
19
+ export declare type SentryBreadcrumbData = Breadcrumb;
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/container/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/error-tracking/types.ts"],"names":[],"mappings":""}
@@ -13,6 +13,7 @@ export interface CookieStore {
13
13
  export declare function collectCookieMiddleware(request: Request, response: Response): Middleware<any>;
14
14
  /**
15
15
  * Возвращает новое хранилище cookie.
16
+ * @internal
16
17
  * @param initialCookie Начальное значение cookie.
17
18
  * @return Хранилище cookie.
18
19
  */
@@ -9,7 +9,7 @@ exports.createCookieStore = exports.collectCookieMiddleware = void 0;
9
9
  */
10
10
  function collectCookieMiddleware(request, response) {
11
11
  const store = createCookieStore(request.get('cookie'));
12
- return async function (config, next) {
12
+ return async function collectCookie(config, next) {
13
13
  const result = await next({
14
14
  ...config,
15
15
  headers: {
@@ -26,6 +26,7 @@ function collectCookieMiddleware(request, response) {
26
26
  exports.collectCookieMiddleware = collectCookieMiddleware;
27
27
  /**
28
28
  * Возвращает новое хранилище cookie.
29
+ * @internal
29
30
  * @param initialCookie Начальное значение cookie.
30
31
  * @return Хранилище cookie.
31
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../../src/http-client/middleware/cookie.ts"],"names":[],"mappings":";;;AAQA;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,OAAgB,EAAE,QAAkB;IAC1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,OAAO,KAAK,WAAW,MAAM,EAAE,IAAI;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,GAAG,MAAM;YACT,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,OAAO;gBACjB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE;aACzB;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAChC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACxC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;IACH,CAAC,CAAC;AACJ,CAAC;AAjBD,0DAiBC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,aAAsB;IACtD,MAAM,IAAI,GAAoD,EAAE,CAAC;IAEjE,8DAA8D;IAC9D,SAAS,OAAO,CAAC,UAAkB;QACjC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjF,IAAI,UAAU,IAAI,WAAW,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;SAC7D;IACH,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;QACzC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;SACf;KACF;IAED,8DAA8D;IAC9D,SAAS,GAAG,CAAC,qBAA+B;QAC1C,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE;YACxC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB;IACH,CAAC;IAED,8DAA8D;IAC9D,SAAS,QAAQ;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;aACvB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;aAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAlCD,8CAkCC"}
1
+ {"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../../src/http-client/middleware/cookie.ts"],"names":[],"mappings":";;;AAQA;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,OAAgB,EAAE,QAAkB;IAC1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,OAAO,KAAK,UAAU,aAAa,CAAC,MAAM,EAAE,IAAI;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,GAAG,MAAM;YACT,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,OAAO;gBACjB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE;aACzB;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAChC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACxC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;IACH,CAAC,CAAC;AACJ,CAAC;AAjBD,0DAiBC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,aAAsB;IACtD,MAAM,IAAI,GAAoD,EAAE,CAAC;IAEjE,8DAA8D;IAC9D,SAAS,OAAO,CAAC,UAAkB;QACjC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjF,IAAI,UAAU,IAAI,WAAW,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;SAC7D;IACH,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;QACzC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;SACf;KACF;IAED,8DAA8D;IAC9D,SAAS,GAAG,CAAC,qBAA+B;QAC1C,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE;YACxC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB;IACH,CAAC;IAED,8DAA8D;IAC9D,SAAS,QAAQ;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;aACvB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;aAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAlCD,8CAkCC"}
@@ -0,0 +1,13 @@
1
+ import type { Request } from 'express';
2
+ import type { Middleware } from 'middleware-axios';
3
+ export interface PassHeadersOptions {
4
+ predicate: (headerName: string, headerValue: string) => boolean;
5
+ }
6
+ /**
7
+ * Возвращает новый промежуточный слой для проброса заголовков входящего запроса во все исходящие запросы.
8
+ * Принудительно игнорирует заголовок Cookie.
9
+ * @param req Request.
10
+ * @param options Опции.
11
+ * @return Промежуточный слой.
12
+ */
13
+ export declare function passHeadersMiddleware(req: Request, { predicate }?: PassHeadersOptions): Middleware<any>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.passHeadersMiddleware = void 0;
4
+ /**
5
+ * Возвращает новый промежуточный слой для проброса заголовков входящего запроса во все исходящие запросы.
6
+ * Принудительно игнорирует заголовок Cookie.
7
+ * @param req Request.
8
+ * @param options Опции.
9
+ * @return Промежуточный слой.
10
+ */
11
+ function passHeadersMiddleware(req, { predicate } = { predicate: () => true }) {
12
+ return async function passHeaders(config, next) {
13
+ const headers = { ...config.headers };
14
+ for (const headerName in req.headers) {
15
+ const headerValue = req.headers[headerName];
16
+ if (typeof headerValue === 'string' && predicate(headerName, headerValue)) {
17
+ headers[headerName] = headerValue;
18
+ }
19
+ }
20
+ await next({ ...config, headers });
21
+ };
22
+ }
23
+ exports.passHeadersMiddleware = passHeadersMiddleware;
24
+ //# sourceMappingURL=headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/http-client/middleware/headers.ts"],"names":[],"mappings":";;;AAOA;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACnC,GAAY,EACZ,EAAE,SAAS,KAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;IAE7D,OAAO,KAAK,UAAU,WAAW,CAAC,MAAM,EAAE,IAAI;QAC5C,MAAM,OAAO,GAA2B,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9D,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE;YACpC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;gBACzE,OAAO,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;aACnC;SACF;QAED,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAjBD,sDAiBC"}
@@ -0,0 +1,16 @@
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
+ * @todo Возможно стоит вынести в preset.
13
+ * @param status Статус.
14
+ * @return Уровень.
15
+ */
16
+ export declare function severityFromStatus(status: number | undefined): Severity.Error | Severity.Warning | Severity.Info;
@@ -0,0 +1,111 @@
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 error_tracking_1 = require("../../error-tracking");
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 log(config, next, defaults) {
17
+ const { baseURL, url, method = 'get', params, data } = { ...defaults, ...config };
18
+ const readyMethod = method.toUpperCase();
19
+ const readyURL = baseURL
20
+ ? `${baseURL.replace(/\/$/, '')}/${(url || '').replace(/^\//, '')}`
21
+ : url;
22
+ try {
23
+ logger.info(new error_tracking_1.SentryBreadcrumb({
24
+ category: 'http.request',
25
+ type: 'http',
26
+ data: {
27
+ url: readyURL,
28
+ method: readyMethod,
29
+ params,
30
+ },
31
+ level: types_1.Severity.Info,
32
+ }));
33
+ const response = await next(config);
34
+ logger.info(new error_tracking_1.SentryBreadcrumb({
35
+ category: 'http.response',
36
+ type: 'http',
37
+ data: {
38
+ url: readyURL,
39
+ status_code: response.status,
40
+ method: readyMethod,
41
+ params,
42
+ },
43
+ level: types_1.Severity.Info,
44
+ }));
45
+ }
46
+ catch (error) {
47
+ if (axios_1.default.isAxiosError(error)) {
48
+ const statusCode = error.response?.status || 'UNKNOWN';
49
+ logger.error(new error_tracking_1.SentryError(`HTTP request failed with status code ${statusCode}`, {
50
+ // @todo в будущем дать возможность конфигурировать
51
+ level: severityFromStatus(error.response?.status),
52
+ context: {
53
+ key: 'Request details',
54
+ data: {
55
+ url,
56
+ baseURL,
57
+ method: readyMethod,
58
+ headers: {
59
+ ...config.headers,
60
+ ...defaults.headers[readyMethod.toLowerCase()],
61
+ },
62
+ params,
63
+ data,
64
+ },
65
+ },
66
+ }));
67
+ logger.info(new error_tracking_1.SentryBreadcrumb({
68
+ category: 'http.response',
69
+ type: 'http',
70
+ data: {
71
+ url: readyURL,
72
+ status_code: statusCode,
73
+ method: readyMethod,
74
+ params,
75
+ },
76
+ level: types_1.Severity.Error,
77
+ }));
78
+ }
79
+ // ВАЖНО: не скрываем ошибку, сообщаем остальному миру про нее
80
+ throw error;
81
+ }
82
+ };
83
+ }
84
+ exports.loggingMiddleware = loggingMiddleware;
85
+ /**
86
+ * Возвращает уровень на основе статуса ответа.
87
+ * @todo Возможно стоит вынести в preset.
88
+ * @param status Статус.
89
+ * @return Уровень.
90
+ */
91
+ function severityFromStatus(status) {
92
+ let result;
93
+ if (typeof status === 'number') {
94
+ switch (true) {
95
+ case status >= 200 && status <= 299:
96
+ result = types_1.Severity.Info;
97
+ break;
98
+ case status >= 300 && status <= 499:
99
+ result = types_1.Severity.Warning;
100
+ break;
101
+ default:
102
+ result = types_1.Severity.Error;
103
+ }
104
+ }
105
+ else {
106
+ result = types_1.Severity.Error;
107
+ }
108
+ return result;
109
+ }
110
+ exports.severityFromStatus = severityFromStatus;
111
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/http-client/middleware/logging.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,20 @@ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
10
10
  * @return Middleware.
11
11
  */
12
12
  function tracingMiddleware(tracer, rootContext) {
13
- return async function (config, next, defaults) {
13
+ return async function trace(config, next, defaults) {
14
14
  const { method, url, foundId } = (0, exports.getRequestInfo)(config, defaults);
15
15
  const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);
16
16
  span.setAttributes({
17
17
  [semantic_conventions_1.SemanticAttributes.HTTP_URL]: url,
18
18
  [semantic_conventions_1.SemanticAttributes.HTTP_METHOD]: method,
19
+ 'request.params': JSON.stringify({
20
+ ...defaults.params,
21
+ ...config.params,
22
+ }),
23
+ 'request.headers': JSON.stringify({
24
+ ...defaults.headers[method.toLowerCase()],
25
+ ...config.headers,
26
+ }),
19
27
  // если нашли id - добавляем в теги
20
28
  ...(foundId && { 'request.id': foundId }),
21
29
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-client/middleware/tracing.ts"],"names":[],"mappings":";;;AAEA,4CAAqE;AACrE,8EAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAc,EAAE,WAAoB;IACpE,OAAO,KAAK,WAAW,MAAM,EAAE,IAAI,EAAE,QAAQ;QAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAA,sBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,MAAM,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAE/E,IAAI,CAAC,aAAa,CAAC;YACjB,CAAC,yCAAkB,CAAC,QAAQ,CAAC,EAAE,GAAG;YAClC,CAAC,yCAAkB,CAAC,WAAW,CAAC,EAAE,MAAM;YAExC,mCAAmC;YACnC,GAAG,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;SAC1C,CAAC,CAAC;QAEH,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;SACpB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAC;YAEH,mBAAmB;YACnB,MAAM,KAAK,CAAC;SACb;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AA3BD,8CA2BC;AAED;;;;;;GAMG;AACI,MAAM,cAAc,GAAG,CAC5B,MAA0B,EAC1B,QAAuB,EAKvB,EAAE;IACF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAEzD,wDAAwD;IACxD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,GAAG,OAAO,GAAG,GAAG,EAAE,CAAC;IAEpC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC;AAhBW,QAAA,cAAc,kBAgBzB;AAEF;;;;;;;;GAQG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAgC,EAAE;IACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACtF,CAAC,CAAC;AAJW,QAAA,WAAW,eAItB"}
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-client/middleware/tracing.ts"],"names":[],"mappings":";;;AAEA,4CAAqE;AACrE,8EAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAc,EAAE,WAAoB;IACpE,OAAO,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAA,sBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,MAAM,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAE/E,IAAI,CAAC,aAAa,CAAC;YACjB,CAAC,yCAAkB,CAAC,QAAQ,CAAC,EAAE,GAAG;YAClC,CAAC,yCAAkB,CAAC,WAAW,CAAC,EAAE,MAAM;YACxC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/B,GAAG,QAAQ,CAAC,MAAM;gBAClB,GAAG,MAAM,CAAC,MAAM;aACjB,CAAC;YACF,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC;gBAChC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAW,CAAC;gBAClD,GAAG,MAAM,CAAC,OAAO;aAClB,CAAC;YAEF,mCAAmC;YACnC,GAAG,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;SAC1C,CAAC,CAAC;QAEH,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;SACpB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAC;YAEH,mBAAmB;YACnB,MAAM,KAAK,CAAC;SACb;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAnCD,8CAmCC;AAED;;;;;;GAMG;AACI,MAAM,cAAc,GAAG,CAC5B,MAA0B,EAC1B,QAAuB,EAKvB,EAAE;IACF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAEzD,wDAAwD;IACxD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,GAAG,OAAO,GAAG,GAAG,EAAE,CAAC;IAEpC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC;AAhBW,QAAA,cAAc,kBAgBzB;AAEF;;;;;;;;GAQG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAgC,EAAE;IACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACtF,CAAC,CAAC;AAJW,QAAA,WAAW,eAItB"}
@@ -1,10 +1,12 @@
1
- import type { AxiosInstance } from 'axios';
1
+ import { AxiosInstance } from 'axios';
2
2
  import type { AxiosInstanceWrapper, MethodName } from 'middleware-axios';
3
3
  export declare type SauceResponse<T = any> = {
4
4
  ok: true;
5
+ status: number;
5
6
  data: T;
6
7
  } | {
7
8
  ok: false;
9
+ status?: unknown;
8
10
  error: any;
9
11
  };
10
12
  export interface SauceMethod<K extends MethodName> {
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.sauce = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
4
8
  /**
5
9
  * Оборачивает экземпляр axios. Все методы обертки возвращают promise, который никогда не попадают в состояние rejected.
6
10
  * @param instance Экземпляр axios или AxiosInstanceWrapper.
@@ -12,10 +16,19 @@ function sauce(instance) {
12
16
  return async function (...args) {
13
17
  try {
14
18
  const response = await instance[methodName](...args);
15
- return { ok: true, data: response.data };
19
+ return {
20
+ ok: true,
21
+ status: response.status,
22
+ data: response.data,
23
+ };
16
24
  }
17
25
  catch (error) {
18
- return { ok: false, error };
26
+ const status = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
27
+ return {
28
+ ok: false,
29
+ status,
30
+ error,
31
+ };
19
32
  }
20
33
  };
21
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-client/sauce/index.ts"],"names":[],"mappings":";;;AA4BA;;;;GAIG;AACH,SAAgB,KAAK,CAAC,QAA8C;IAClE,8DAA8D;IAC9D,SAAS,YAAY,CAAyB,UAAe;QAC3D,OAAO,KAAK,WACV,GAAG,IAAoC;YAEvC,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAI,IAAc,CAAC,CAAC;gBAChE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aAC7B;QACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;QAC9B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC;QAChC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;QAC1B,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;KAC7B,CAAC;AACJ,CAAC;AAxBD,sBAwBC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-client/sauce/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AA8B7C;;;;GAIG;AACH,SAAgB,KAAK,CAAC,QAA8C;IAClE,8DAA8D;IAC9D,SAAS,YAAY,CAAyB,UAAe;QAC3D,OAAO,KAAK,WACV,GAAG,IAAoC;YAEvC,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAI,IAAc,CAAC,CAAC;gBAEhE,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB,CAAC;aACH;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,MAAM,GAAG,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE9E,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM;oBACN,KAAK;iBACN,CAAC;aACH;QACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;QAC9B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC;QAChC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;QAC1B,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;KAC7B,CAAC;AACJ,CAAC;AAnCD,sBAmCC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Ошибка в процессе серверного рендеринга.
3
+ */
4
+ export declare class SSRError extends Error {
5
+ statusCode: number;
6
+ /**
7
+ * @param message Сообщение.
8
+ * @param statusCode Код ответа.
9
+ */
10
+ constructor(message: string, statusCode?: number);
11
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SSRError = void 0;
4
+ /**
5
+ * Ошибка в процессе серверного рендеринга.
6
+ */
7
+ class SSRError extends Error {
8
+ /**
9
+ * @param message Сообщение.
10
+ * @param statusCode Код ответа.
11
+ */
12
+ constructor(message, statusCode = 500) {
13
+ super(message);
14
+ this.statusCode = statusCode;
15
+ }
16
+ }
17
+ exports.SSRError = SSRError;
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http-server/errors.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IAGjC;;;OAGG;IACH,YAAY,OAAe,EAAE,UAAU,GAAG,GAAG;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAXD,4BAWC"}
@@ -1,6 +1,6 @@
1
1
  import type { Handler } from 'express';
2
2
  /**
3
- * Обработчик, отвечающий данными о времени работы приложения.
3
+ * Возвращает обработчик, отвечающий данными о времени работы приложения.
4
4
  * @return Обработчик http-запроса.
5
5
  */
6
6
  export declare function healthCheck(): Handler;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.healthCheck = void 0;
4
4
  /**
5
- * Обработчик, отвечающий данными о времени работы приложения.
5
+ * Возвращает обработчик, отвечающий данными о времени работы приложения.
6
6
  * @return Обработчик http-запроса.
7
7
  */
8
8
  function healthCheck() {
@@ -19,7 +19,7 @@ function responseMetricsMiddleware(config, metrics) {
19
19
  method: req.method,
20
20
  };
21
21
  }
22
- return (req, res, next) => {
22
+ return function responseMetrics(req, res, next) {
23
23
  const start = process.hrtime.bigint();
24
24
  metrics.counter.inc(resolveLabels(req, res), 1);
25
25
  res.once('finish', () => {
@@ -37,7 +37,7 @@ exports.responseMetricsMiddleware = responseMetricsMiddleware;
37
37
  * @return Middleware.
38
38
  */
39
39
  function renderMetricsMiddleware(config, metrics) {
40
- return (req, res, next) => {
40
+ return function renderMetrics(req, res, next) {
41
41
  let start;
42
42
  res.once(constants_1.RESPONSE_EVENT.renderStart, () => {
43
43
  start = process.hrtime.bigint();
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/http-server/middleware/metrics.ts"],"names":[],"mappings":";;;AAGA,+CAAoD;AACpD,4CAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,MAAkB,EAClB,OAGC;IAED,8DAA8D;IAC9D,SAAS,aAAa,CACpB,GAAY,EACZ,GAAa;QAEb,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;YAC7B,IAAI,EAAE,GAAG,CAAC,UAAU;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhD,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEvC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAA,uBAAc,EAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAjCD,8DAiCC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAAkB,EAClB,OAEC;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,KAAyB,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,WAAW,EAAE,GAAG,EAAE;YACxC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,YAAY,EAAE,GAAG,EAAE;YACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;aAC5D;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEvC,OAAO,CAAC,SAAS,CAAC,OAAO,CACvB;gBACE,OAAO,EAAE,MAAM,CAAC,UAAU;gBAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;aAC9B,EACD,IAAA,uBAAc,EAAC,MAAM,GAAG,KAAK,CAAC,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAhCD,0DAgCC"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/http-server/middleware/metrics.ts"],"names":[],"mappings":";;;AAGA,+CAAoD;AACpD,4CAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,MAAkB,EAClB,OAGC;IAED,8DAA8D;IAC9D,SAAS,aAAa,CACpB,GAAY,EACZ,GAAa;QAEb,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;YAC7B,IAAI,EAAE,GAAG,CAAC,UAAU;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhD,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEvC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAA,uBAAc,EAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAjCD,8DAiCC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAAkB,EAClB,OAEC;IAED,OAAO,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAC1C,IAAI,KAAyB,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,WAAW,EAAE,GAAG,EAAE;YACxC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,YAAY,EAAE,GAAG,EAAE;YACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;aAC5D;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEvC,OAAO,CAAC,SAAS,CAAC,OAAO,CACvB;gBACE,OAAO,EAAE,MAAM,CAAC,UAAU;gBAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;aAC9B,EACD,IAAA,uBAAc,EAAC,MAAM,GAAG,KAAK,CAAC,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAhCD,0DAgCC"}
@@ -1,8 +1,14 @@
1
- import type { Tracer } from '../../tracer/types';
2
- import type { Handler } from 'express';
1
+ import { Tracer } from '@opentelemetry/api';
2
+ import type { Request, Handler } from 'express';
3
3
  /**
4
4
  * Возвращает новый middleware для трассировки стадий входящего запроса.
5
5
  * @param tracer Tracer.
6
6
  * @return Middleware.
7
7
  */
8
8
  export declare function tracingMiddleware(tracer: Tracer): Handler;
9
+ /**
10
+ * Возвращает набор стандартных атрибутов для спана.
11
+ * @param req Входящий http-запрос.
12
+ * @return Атрибуты.
13
+ */
14
+ export declare function getConventionalRequestAttrs(req: Request): Record<string, string | undefined>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tracingMiddleware = void 0;
3
+ exports.getConventionalRequestAttrs = exports.tracingMiddleware = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const api_1 = require("@opentelemetry/api");
6
6
  /**
@@ -12,6 +12,7 @@ function tracingMiddleware(tracer) {
12
12
  return (req, res, next) => {
13
13
  const externalContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, req.headers);
14
14
  const rootSpan = tracer.startSpan('response', undefined, externalContext);
15
+ rootSpan.setAttributes(getConventionalRequestAttrs(req));
15
16
  const rootContext = api_1.trace.setSpan(externalContext, rootSpan);
16
17
  res.locals.tracing = {
17
18
  rootSpan,
@@ -30,4 +31,21 @@ function tracingMiddleware(tracer) {
30
31
  };
31
32
  }
32
33
  exports.tracingMiddleware = tracingMiddleware;
34
+ /**
35
+ * Возвращает набор стандартных атрибутов для спана.
36
+ * @param req Входящий http-запрос.
37
+ * @return Атрибуты.
38
+ */
39
+ function getConventionalRequestAttrs(req) {
40
+ const result = {
41
+ 'request.path': req.originalUrl,
42
+ };
43
+ for (const headerName in req.headers) {
44
+ if (headerName.toLowerCase().startsWith('simaland-')) {
45
+ result[headerName] = req.header(headerName);
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ exports.getConventionalRequestAttrs = getConventionalRequestAttrs;
33
51
  //# sourceMappingURL=tracing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-server/middleware/tracing.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,4CAAsE;AAItE;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,eAAe,GAAG,iBAAW,CAAC,OAAO,CAAC,kBAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE7D,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG;YACnB,QAAQ;YACR,WAAW;SACZ,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,WAAW,EAAE,GAAG,EAAE;YACxC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,YAAY,EAAE,GAAG,EAAE;YACzC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAzBD,8CAyBC"}
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/http-server/middleware/tracing.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,4CAA8E;AAG9E;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,eAAe,GAAG,iBAAW,CAAC,OAAO,CAAC,kBAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAE1E,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE7D,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG;YACnB,QAAQ;YACR,WAAW;SACZ,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,WAAW,EAAE,GAAG,EAAE;YACxC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,0BAAc,CAAC,YAAY,EAAE,GAAG,EAAE;YACzC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AA5BD,8CA4BC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,GAAY;IACtD,MAAM,MAAM,GAAuC;QACjD,cAAc,EAAE,GAAG,CAAC,WAAW;KAChC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE;QACpC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YACpD,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC7C;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,kEAYC"}
@@ -21,9 +21,15 @@ exports.pageTemplate = (0, ejs_1.compile)(`
21
21
  line-height: inherit;
22
22
  }
23
23
  </style>
24
+ <% if (assets.criticalCss) { %>
25
+ <link rel="stylesheet" href="<%= assets.criticalCss %>">
26
+ <% } %>
24
27
  <% if (assets.css) { %>
25
28
  <link rel="stylesheet" href="<%= assets.css %>">
26
29
  <% } %>
30
+ <% if (assets.criticalJs) { %>
31
+ <script src="<%= assets.criticalJs %>"></script>
32
+ <% } %>
27
33
  </head>
28
34
  <body>
29
35
  <%- markup %>
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-server/template/index.ts"],"names":[],"mappings":";;;AAAA,6BAA8B;AAEjB,QAAA,YAAY,GAAG,IAAA,aAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BnC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http-server/template/index.ts"],"names":[],"mappings":";;;AAAA,6BAA8B;AAEjB,QAAA,YAAY,GAAG,IAAA,aAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCnC,CAAC,CAAC"}
@@ -7,6 +7,8 @@ export interface ResponseContext {
7
7
  export interface PageAssets {
8
8
  js: string;
9
9
  css: string;
10
+ criticalJs?: string;
11
+ criticalCss?: string;
10
12
  }
11
13
  export interface PageTemplateData {
12
14
  markup: string;
@@ -1,5 +1,5 @@
1
1
  import type { Request, Response } from 'express';
2
- import type { PageTemplate, PageTemplateData } from './types';
2
+ import type { PageAssets, PageTemplate, PageTemplateData } from './types';
3
3
  /**
4
4
  * Определяет IP входящего запроса.
5
5
  * @param req Входящий запрос.
@@ -15,15 +15,13 @@ export declare function getServiceHeaders(req: Request): Record<string, string |
15
15
  export declare class PageResponse {
16
16
  private type;
17
17
  private html;
18
- private assets;
18
+ private _assets;
19
19
  private _template;
20
- static create(): PageResponse;
21
20
  static defineFormat(req: Request): PageResponse['type'];
22
21
  static defaultTemplate({ markup }: PageTemplateData): string;
23
22
  constructor();
24
23
  markup(html: string): this;
25
- script(url: string): this;
26
- styles(url: string): this;
24
+ assets(assets: PageAssets): this;
27
25
  format(type: PageResponse['type']): this;
28
26
  template(template: PageTemplate): this;
29
27
  send(res: Response): void;