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

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 (181) 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 +17 -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 +109 -0
  47. package/http-client/middleware/logging.js.map +1 -0
  48. package/http-client/middleware/tracing.d.ts +3 -3
  49. package/http-client/middleware/tracing.js +22 -9
  50. package/http-client/middleware/tracing.js.map +1 -1
  51. package/http-client/sauce/index.d.ts +3 -1
  52. package/http-client/sauce/index.js +15 -2
  53. package/http-client/sauce/index.js.map +1 -1
  54. package/http-client/utils.d.ts +6 -7
  55. package/http-client/utils.js +24 -14
  56. package/http-client/utils.js.map +1 -1
  57. package/http-server/errors.d.ts +11 -0
  58. package/http-server/errors.js +18 -0
  59. package/http-server/errors.js.map +1 -0
  60. package/http-server/handler/health-check.d.ts +1 -1
  61. package/http-server/handler/health-check.js +1 -1
  62. package/http-server/middleware/metrics.js +2 -2
  63. package/http-server/middleware/metrics.js.map +1 -1
  64. package/http-server/middleware/tracing.d.ts +8 -2
  65. package/http-server/middleware/tracing.js +19 -1
  66. package/http-server/middleware/tracing.js.map +1 -1
  67. package/http-server/template/index.js +6 -0
  68. package/http-server/template/index.js.map +1 -1
  69. package/http-server/types.d.ts +2 -0
  70. package/http-server/utils.d.ts +11 -5
  71. package/http-server/utils.js +32 -16
  72. package/http-server/utils.js.map +1 -1
  73. package/logger/handler/console.d.ts +1 -1
  74. package/logger/handler/console.js +12 -2
  75. package/logger/handler/console.js.map +1 -1
  76. package/logger/handler/sentry.d.ts +3 -3
  77. package/logger/handler/sentry.js +13 -7
  78. package/logger/handler/sentry.js.map +1 -1
  79. package/logger/index.d.ts +2 -6
  80. package/logger/index.js +2 -27
  81. package/logger/index.js.map +1 -1
  82. package/logger/logger.d.ts +6 -0
  83. package/logger/logger.js +31 -0
  84. package/logger/logger.js.map +1 -0
  85. package/logger/types.d.ts +16 -0
  86. package/metrics/constants.d.ts +3 -0
  87. package/metrics/constants.js +3 -0
  88. package/metrics/constants.js.map +1 -1
  89. package/metrics/node.d.ts +7 -0
  90. package/metrics/node.js +1 -0
  91. package/metrics/node.js.map +1 -1
  92. package/package.json +31 -25
  93. package/preset/browser/index.d.ts +12 -0
  94. package/preset/browser/index.js +69 -0
  95. package/preset/browser/index.js.map +1 -0
  96. package/preset/node/index.d.ts +14 -6
  97. package/preset/node/index.js +94 -36
  98. package/preset/node/index.js.map +1 -1
  99. package/preset/node/response.d.ts +14 -8
  100. package/preset/node/response.js +95 -27
  101. package/preset/node/response.js.map +1 -1
  102. package/preset/types.d.ts +7 -6
  103. package/preset/utils.d.ts +15 -0
  104. package/preset/utils.js +26 -0
  105. package/preset/utils.js.map +1 -0
  106. package/tokens.d.ts +35 -18
  107. package/tokens.js +32 -17
  108. package/tokens.js.map +1 -1
  109. package/tracing/index.d.ts +9 -0
  110. package/tracing/index.js +20 -0
  111. package/tracing/index.js.map +1 -0
  112. package/utils/browser/analytics/oko.d.ts +2 -1
  113. package/utils/browser/analytics/oko.js +2 -1
  114. package/utils/browser/analytics/oko.js.map +1 -1
  115. package/utils/browser/storage/index.d.ts +8 -0
  116. package/utils/browser/storage/index.js +5 -0
  117. package/utils/browser/storage/index.js.map +1 -1
  118. package/utils/react/error-handlers/index.d.ts +9 -6
  119. package/utils/react/error-handlers/index.js +4 -3
  120. package/utils/react/error-handlers/index.js.map +1 -1
  121. package/utils/redux/remote-data.d.ts +9 -0
  122. package/utils/redux/remote-data.js +3 -0
  123. package/utils/redux/remote-data.js.map +1 -1
  124. package/utils/redux-saga/index.d.ts +3 -0
  125. package/utils/redux-saga/index.js +8 -0
  126. package/utils/redux-saga/index.js.map +1 -0
  127. package/utils/redux-saga/middleware.d.ts +9 -0
  128. package/utils/redux-saga/middleware.js +87 -0
  129. package/utils/redux-saga/middleware.js.map +1 -0
  130. package/utils/redux-saga/take-chain.d.ts +2 -0
  131. package/utils/redux-saga/take-chain.js +2 -0
  132. package/utils/redux-saga/take-chain.js.map +1 -1
  133. package/utils/redux-saga/types.d.ts +6 -0
  134. package/{saga-runner → utils/redux-saga}/types.js +0 -0
  135. package/{error-tracker → utils/redux-saga}/types.js.map +1 -1
  136. package/utils/ssr/index.d.ts +41 -0
  137. package/utils/ssr/index.js +54 -0
  138. package/utils/ssr/index.js.map +1 -0
  139. package/utils/webpack/index.d.ts +23 -0
  140. package/utils/webpack/index.js +68 -0
  141. package/utils/webpack/index.js.map +1 -0
  142. package/utils/webpack/module-federation/index.d.ts +4 -1
  143. package/utils/webpack/module-federation/index.js +4 -2
  144. package/utils/webpack/module-federation/index.js.map +1 -1
  145. package/utils/webpack/module-federation/types.d.ts +4 -0
  146. package/utils/webpack/module-federation/utils.d.ts +1 -0
  147. package/utils/webpack/module-federation/utils.js +1 -0
  148. package/utils/webpack/module-federation/utils.js.map +1 -1
  149. package/config/index.js.map +0 -1
  150. package/config/utils.d.ts +0 -5
  151. package/config/utils.js +0 -12
  152. package/config/utils.js.map +0 -1
  153. package/container/application.d.ts +0 -25
  154. package/container/application.js.map +0 -1
  155. package/container/index.d.ts +0 -18
  156. package/container/index.js +0 -74
  157. package/container/index.js.map +0 -1
  158. package/container/types.d.ts +0 -14
  159. package/error-tracker/browser.d.ts +0 -8
  160. package/error-tracker/browser.js +0 -40
  161. package/error-tracker/browser.js.map +0 -1
  162. package/error-tracker/node.d.ts +0 -8
  163. package/error-tracker/node.js +0 -40
  164. package/error-tracker/node.js.map +0 -1
  165. package/error-tracker/types.d.ts +0 -18
  166. package/error-tracker/utils.d.ts +0 -12
  167. package/error-tracker/utils.js +0 -19
  168. package/error-tracker/utils.js.map +0 -1
  169. package/preset/index.d.ts +0 -7
  170. package/preset/index.js +0 -25
  171. package/preset/index.js.map +0 -1
  172. package/saga-runner/index.d.ts +0 -8
  173. package/saga-runner/index.js +0 -79
  174. package/saga-runner/index.js.map +0 -1
  175. package/saga-runner/types.d.ts +0 -10
  176. package/saga-runner/types.js.map +0 -1
  177. package/tracer/node.d.ts +0 -10
  178. package/tracer/node.js +0 -38
  179. package/tracer/node.js.map +0 -1
  180. package/tracer/types.d.ts +0 -2
  181. 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 { SeverityLevel, Context, Extra, Breadcrumb } from '@sentry/types';
2
+ /**
3
+ * Данные ошибки для Sentry.
4
+ */
5
+ export interface SentryErrorData {
6
+ level?: SeverityLevel;
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 { SeverityLevel } 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): SeverityLevel;
@@ -0,0 +1,109 @@
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 utils_1 = require("../utils");
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 = (0, utils_1.displayUrl)(baseURL, url);
20
+ try {
21
+ logger.info(new error_tracking_1.SentryBreadcrumb({
22
+ category: 'http.request',
23
+ type: 'http',
24
+ data: {
25
+ url: readyURL,
26
+ method: readyMethod,
27
+ params,
28
+ },
29
+ level: 'info',
30
+ }));
31
+ const response = await next(config);
32
+ logger.info(new error_tracking_1.SentryBreadcrumb({
33
+ category: 'http.response',
34
+ type: 'http',
35
+ data: {
36
+ url: readyURL,
37
+ status_code: response.status,
38
+ method: readyMethod,
39
+ params,
40
+ },
41
+ level: 'info',
42
+ }));
43
+ }
44
+ catch (error) {
45
+ if (axios_1.default.isAxiosError(error)) {
46
+ const statusCode = error.response?.status || 'UNKNOWN';
47
+ logger.error(new error_tracking_1.SentryError(`HTTP request failed with status code ${statusCode}`, {
48
+ // @todo в будущем дать возможность конфигурировать
49
+ level: severityFromStatus(error.response?.status),
50
+ context: {
51
+ key: 'Request details',
52
+ data: {
53
+ url,
54
+ baseURL,
55
+ method: readyMethod,
56
+ headers: {
57
+ ...config.headers,
58
+ ...defaults.headers[readyMethod.toLowerCase()],
59
+ },
60
+ params,
61
+ data,
62
+ },
63
+ },
64
+ }));
65
+ logger.info(new error_tracking_1.SentryBreadcrumb({
66
+ category: 'http.response',
67
+ type: 'http',
68
+ data: {
69
+ url: readyURL,
70
+ status_code: statusCode,
71
+ method: readyMethod,
72
+ params,
73
+ },
74
+ level: 'error',
75
+ }));
76
+ }
77
+ // ВАЖНО: не скрываем ошибку, сообщаем остальному миру про нее
78
+ throw error;
79
+ }
80
+ };
81
+ }
82
+ exports.loggingMiddleware = loggingMiddleware;
83
+ /**
84
+ * Возвращает уровень на основе статуса ответа.
85
+ * @todo Возможно стоит вынести в preset.
86
+ * @param status Статус.
87
+ * @return Уровень.
88
+ */
89
+ function severityFromStatus(status) {
90
+ let result;
91
+ if (typeof status === 'number') {
92
+ switch (true) {
93
+ case status >= 200 && status <= 299:
94
+ result = 'info';
95
+ break;
96
+ case status >= 300 && status <= 499:
97
+ result = 'warning';
98
+ break;
99
+ default:
100
+ result = 'error';
101
+ }
102
+ }
103
+ else {
104
+ result = 'error';
105
+ }
106
+ return result;
107
+ }
108
+ exports.severityFromStatus = severityFromStatus;
109
+ //# 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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"}
@@ -15,10 +15,10 @@ export declare function tracingMiddleware(tracer: Tracer, rootContext: Context):
15
15
  * @param defaults Базовый конфиг экземпляра Axios.
16
16
  * @return Базовые данные запроса.
17
17
  */
18
- export declare const getRequestInfo: (config: AxiosRequestConfig, defaults: AxiosDefaults) => {
18
+ export declare function getRequestInfo(config: AxiosRequestConfig, defaults: AxiosDefaults): {
19
19
  method: string;
20
20
  url: string;
21
- foundId?: number | undefined;
21
+ foundId?: number;
22
22
  };
23
23
  /**
24
24
  * Преобразует строку вида:
@@ -29,4 +29,4 @@ export declare const getRequestInfo: (config: AxiosRequestConfig, defaults: Axio
29
29
  * @param url Url.
30
30
  * @return Кортеж со строкой и результатом поиска числа.
31
31
  */
32
- export declare const hideFirstId: (url: string) => [string, number | undefined];
32
+ export declare function hideFirstId(url: string): [string, number | undefined];
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hideFirstId = exports.getRequestInfo = exports.tracingMiddleware = void 0;
4
4
  const api_1 = require("@opentelemetry/api");
5
5
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
6
+ const utils_1 = require("../utils");
6
7
  /**
7
8
  * Возвращает новый middleware для трассировки исходящих запросов.
8
9
  * @param tracer Трейсер.
@@ -10,12 +11,20 @@ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
10
11
  * @return Middleware.
11
12
  */
12
13
  function tracingMiddleware(tracer, rootContext) {
13
- return async function (config, next, defaults) {
14
- const { method, url, foundId } = (0, exports.getRequestInfo)(config, defaults);
14
+ return async function trace(config, next, defaults) {
15
+ const { method, url, foundId } = getRequestInfo(config, defaults);
15
16
  const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);
16
17
  span.setAttributes({
17
18
  [semantic_conventions_1.SemanticAttributes.HTTP_URL]: url,
18
19
  [semantic_conventions_1.SemanticAttributes.HTTP_METHOD]: method,
20
+ 'request.params': JSON.stringify({
21
+ ...defaults.params,
22
+ ...config.params,
23
+ }),
24
+ 'request.headers': JSON.stringify({
25
+ ...defaults.headers[method.toLowerCase()],
26
+ ...config.headers,
27
+ }),
19
28
  // если нашли id - добавляем в теги
20
29
  ...(foundId && { 'request.id': foundId }),
21
30
  });
@@ -27,6 +36,7 @@ function tracingMiddleware(tracer, rootContext) {
27
36
  code: api_1.SpanStatusCode.ERROR,
28
37
  message: 'HTTP Request failed',
29
38
  });
39
+ span.end();
30
40
  // не прячем ошибку
31
41
  throw error;
32
42
  }
@@ -41,14 +51,17 @@ exports.tracingMiddleware = tracingMiddleware;
41
51
  * @param defaults Базовый конфиг экземпляра Axios.
42
52
  * @return Базовые данные запроса.
43
53
  */
44
- const getRequestInfo = (config, defaults) => {
54
+ function getRequestInfo(config, defaults) {
45
55
  const method = (config.method || 'GET').toUpperCase();
46
56
  const baseURL = config.baseURL || defaults.baseURL || '';
47
57
  // ВАЖНО: абстрагируем id только в url игнорируя baseURL
48
- const [url, foundId] = (0, exports.hideFirstId)(config.url || defaults.url || '');
49
- const readyUrl = `${baseURL}${url}`;
50
- return { method, url: readyUrl, foundId };
51
- };
58
+ const [url, foundId] = hideFirstId(config.url || defaults.url || '');
59
+ return {
60
+ method,
61
+ url: (0, utils_1.displayUrl)(baseURL, url),
62
+ foundId,
63
+ };
64
+ }
52
65
  exports.getRequestInfo = getRequestInfo;
53
66
  /**
54
67
  * Преобразует строку вида:
@@ -59,9 +72,9 @@ exports.getRequestInfo = getRequestInfo;
59
72
  * @param url Url.
60
73
  * @return Кортеж со строкой и результатом поиска числа.
61
74
  */
62
- const hideFirstId = (url) => {
75
+ function hideFirstId(url) {
63
76
  const found = /\d{2,}/.exec(url);
64
77
  return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];
65
- };
78
+ }
66
79
  exports.hideFirstId = hideFirstId;
67
80
  //# sourceMappingURL=tracing.js.map
@@ -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;AACzE,oCAAsC;AAEtC;;;;;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,cAAc,CAAC,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,IAAI,CAAC,GAAG,EAAE,CAAC;YAEX,mBAAmB;YACnB,MAAM,KAAK,CAAC;SACb;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AArCD,8CAqCC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,MAA0B,EAC1B,QAAuB;IAMvB,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,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAErE,OAAO;QACL,MAAM;QACN,GAAG,EAAE,IAAA,kBAAU,EAAC,OAAO,EAAE,GAAG,CAAC;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAnBD,wCAmBC;AAED;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,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;AAJD,kCAIC"}
@@ -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"}
@@ -1,9 +1,8 @@
1
- import type { Request } from 'express';
2
- import type { BaseConfig } from '../config/types';
1
+ import type { AxiosDefaults, AxiosRequestConfig } from 'axios';
3
2
  /**
4
- * Формирует заголовки для исходящих запросов с сервера по соглашению.
5
- * @param config Конфиг.
6
- * @param request Входящий запрос.
7
- * @return Заголовки для исходящих запросов.
3
+ * Объединяет значения опций baseURL и url (axios) в одну строку для логирования.
4
+ * @param baseURL Опция baseURL.
5
+ * @param url Опция url.
6
+ * @return Отображение. Не является валидным URL.
8
7
  */
9
- export declare function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string>;
8
+ export declare function displayUrl(baseURL?: AxiosDefaults['baseURL'], url?: AxiosRequestConfig['url']): string;
@@ -1,20 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRequestHeaders = void 0;
4
- const utils_1 = require("../http-server/utils");
3
+ exports.displayUrl = void 0;
5
4
  /**
6
- * Формирует заголовки для исходящих запросов с сервера по соглашению.
7
- * @param config Конфиг.
8
- * @param request Входящий запрос.
9
- * @return Заголовки для исходящих запросов.
5
+ * Объединяет значения опций baseURL и url (axios) в одну строку для логирования.
6
+ * @param baseURL Опция baseURL.
7
+ * @param url Опция url.
8
+ * @return Отображение. Не является валидным URL.
10
9
  */
11
- function getRequestHeaders(config, request) {
12
- return {
13
- 'X-Client-Ip': (0, utils_1.getXClientIp)(request),
14
- 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,
15
- Cookie: request.get('cookie') || '',
16
- ...(0, utils_1.getServiceHeaders)(request),
17
- };
10
+ function displayUrl(baseURL = '', url = '') {
11
+ let result;
12
+ switch (true) {
13
+ case Boolean(baseURL && url):
14
+ result = `${baseURL.replace(/\/$/, '')}/${url.replace(/^\//, '')}`;
15
+ break;
16
+ case Boolean(baseURL) && !url:
17
+ result = baseURL;
18
+ break;
19
+ case !baseURL && Boolean(url):
20
+ result = url;
21
+ break;
22
+ case !baseURL && !url:
23
+ default:
24
+ result = '[empty]';
25
+ break;
26
+ }
27
+ return result;
18
28
  }
19
- exports.getRequestHeaders = getRequestHeaders;
29
+ exports.displayUrl = displayUrl;
20
30
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/http-client/utils.ts"],"names":[],"mappings":";;;AAAA,gDAAuE;AAIvE;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAkB,EAAE,OAAgB;IACpE,OAAO;QACL,aAAa,EAAE,IAAA,oBAAY,EAAC,OAAO,CAAC;QACpC,YAAY,EAAE,YAAY,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE;QAC/D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACnC,GAAG,IAAA,yBAAiB,EAAC,OAAO,CAAC;KAC9B,CAAC;AACJ,CAAC;AAPD,8CAOC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/http-client/utils.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,SAAgB,UAAU,CACxB,UAAoC,EAAE,EACtC,MAAiC,EAAE;IAEnC,IAAI,MAAc,CAAC;IAEnB,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YACnE,MAAM;QACR,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;YAC3B,MAAM,GAAG,OAAO,CAAC;YACjB,MAAM;QACR,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC;YACb,MAAM;QACR,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;QACtB;YACE,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM;KACT;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,gCAuBC"}
@@ -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"}