@sima-land/isomorph 11.0.0-alpha.3 → 11.0.0-alpha.30

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 (215) 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 +8 -1
  12. package/di/application.d.ts +10 -0
  13. package/{container → di}/application.js +29 -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/{logger → 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 +20 -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 +4 -2
  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/log.d.ts +27 -0
  46. package/http-client/middleware/log.js +26 -0
  47. package/http-client/middleware/log.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 +20 -5
  52. package/http-client/sauce/index.js +38 -21
  53. package/http-client/sauce/index.js.map +1 -1
  54. package/http-client/types.d.ts +1 -1
  55. package/http-client/utils.d.ts +14 -7
  56. package/http-client/utils.js +43 -12
  57. package/http-client/utils.js.map +1 -1
  58. package/http-server/errors.d.ts +11 -0
  59. package/http-server/errors.js +18 -0
  60. package/http-server/errors.js.map +1 -0
  61. package/http-server/handler/health-check.d.ts +1 -1
  62. package/http-server/handler/health-check.js +1 -1
  63. package/http-server/middleware/{logging.d.ts → log.d.ts} +2 -2
  64. package/http-server/middleware/{logging.js → log.js} +6 -5
  65. package/http-server/middleware/log.js.map +1 -0
  66. package/http-server/middleware/metrics.js +2 -2
  67. package/http-server/middleware/metrics.js.map +1 -1
  68. package/http-server/middleware/tracing.d.ts +7 -1
  69. package/http-server/middleware/tracing.js +20 -2
  70. package/http-server/middleware/tracing.js.map +1 -1
  71. package/http-server/template/index.js +11 -6
  72. package/http-server/template/index.js.map +1 -1
  73. package/http-server/types.d.ts +2 -0
  74. package/http-server/utils.d.ts +14 -5
  75. package/http-server/utils.js +46 -21
  76. package/http-server/utils.js.map +1 -1
  77. package/log/handler/pino.d.ts +8 -0
  78. package/log/handler/pino.js +29 -0
  79. package/log/handler/pino.js.map +1 -0
  80. package/log/handler/sentry.d.ts +8 -0
  81. package/log/handler/sentry.js +50 -0
  82. package/log/handler/sentry.js.map +1 -0
  83. package/log/index.d.ts +2 -0
  84. package/log/index.js +6 -0
  85. package/log/index.js.map +1 -0
  86. package/{logger/index.d.ts → log/logger.d.ts} +0 -0
  87. package/{logger/index.js → log/logger.js} +1 -1
  88. package/log/logger.js.map +1 -0
  89. package/log/types.d.ts +41 -0
  90. package/{logger → log}/types.js +0 -0
  91. package/{preset → log}/types.js.map +1 -1
  92. package/metrics/constants.d.ts +3 -0
  93. package/metrics/constants.js +3 -0
  94. package/metrics/constants.js.map +1 -1
  95. package/metrics/node.d.ts +7 -0
  96. package/metrics/node.js +1 -0
  97. package/metrics/node.js.map +1 -1
  98. package/package.json +35 -30
  99. package/preset/browser/index.d.ts +10 -0
  100. package/preset/browser/index.js +71 -0
  101. package/preset/browser/index.js.map +1 -0
  102. package/preset/node/index.d.ts +16 -11
  103. package/preset/node/index.js +105 -61
  104. package/preset/node/index.js.map +1 -1
  105. package/preset/node/response.d.ts +12 -8
  106. package/preset/node/response.js +98 -28
  107. package/preset/node/response.js.map +1 -1
  108. package/preset/parts/providers.d.ts +7 -0
  109. package/preset/parts/providers.js +26 -0
  110. package/preset/parts/providers.js.map +1 -0
  111. package/preset/parts/types.d.ts +8 -0
  112. package/preset/{types.js → parts/types.js} +0 -0
  113. package/{error-tracker → preset/parts}/types.js.map +1 -1
  114. package/preset/parts/utils.d.ts +110 -0
  115. package/preset/parts/utils.js +261 -0
  116. package/preset/parts/utils.js.map +1 -0
  117. package/tokens.d.ts +39 -21
  118. package/tokens.js +35 -20
  119. package/tokens.js.map +1 -1
  120. package/tracing/index.d.ts +9 -0
  121. package/tracing/index.js +20 -0
  122. package/tracing/index.js.map +1 -0
  123. package/utils/browser/analytics/data-layer.d.ts +2 -2
  124. package/utils/browser/analytics/data-layer.js +4 -5
  125. package/utils/browser/analytics/data-layer.js.map +1 -1
  126. package/utils/browser/analytics/oko.d.ts +3 -2
  127. package/utils/browser/analytics/oko.js +2 -1
  128. package/utils/browser/analytics/oko.js.map +1 -1
  129. package/utils/browser/storage/index.d.ts +8 -0
  130. package/utils/browser/storage/index.js +6 -1
  131. package/utils/browser/storage/index.js.map +1 -1
  132. package/utils/function.d.ts +28 -0
  133. package/utils/function.js +23 -0
  134. package/utils/function.js.map +1 -0
  135. package/utils/react/error-handlers/index.d.ts +11 -8
  136. package/utils/react/error-handlers/index.js +8 -10
  137. package/utils/react/error-handlers/index.js.map +1 -1
  138. package/utils/redux/index.d.ts +3 -0
  139. package/utils/redux/index.js +8 -0
  140. package/utils/redux/index.js.map +1 -0
  141. package/utils/redux/remote-data.d.ts +83 -5
  142. package/utils/redux/remote-data.js +83 -1
  143. package/utils/redux/remote-data.js.map +1 -1
  144. package/utils/redux-saga/index.d.ts +3 -0
  145. package/utils/redux-saga/index.js +8 -0
  146. package/utils/redux-saga/index.js.map +1 -0
  147. package/utils/redux-saga/middleware.d.ts +8 -0
  148. package/utils/redux-saga/middleware.js +84 -0
  149. package/utils/redux-saga/middleware.js.map +1 -0
  150. package/utils/redux-saga/take-chain.d.ts +2 -0
  151. package/utils/redux-saga/take-chain.js +2 -0
  152. package/utils/redux-saga/take-chain.js.map +1 -1
  153. package/utils/redux-saga/types.d.ts +15 -0
  154. package/{saga-runner → utils/redux-saga}/types.js +0 -0
  155. package/utils/redux-saga/types.js.map +1 -0
  156. package/utils/ssr/index.d.ts +41 -0
  157. package/utils/ssr/index.js +54 -0
  158. package/utils/ssr/index.js.map +1 -0
  159. package/utils/webpack/env/index.d.ts +18 -0
  160. package/utils/webpack/env/index.js +76 -0
  161. package/utils/webpack/env/index.js.map +1 -0
  162. package/utils/webpack/env/types.d.ts +11 -0
  163. package/utils/webpack/env/types.js +3 -0
  164. package/utils/webpack/env/types.js.map +1 -0
  165. package/utils/webpack/env/utils.d.ts +15 -0
  166. package/utils/webpack/env/utils.js +52 -0
  167. package/utils/webpack/env/utils.js.map +1 -0
  168. package/utils/webpack/index.d.ts +6 -0
  169. package/utils/webpack/index.js +8 -0
  170. package/utils/webpack/index.js.map +1 -0
  171. package/utils/webpack/module-federation/index.d.ts +7 -1
  172. package/utils/webpack/module-federation/index.js +11 -4
  173. package/utils/webpack/module-federation/index.js.map +1 -1
  174. package/utils/webpack/module-federation/types.d.ts +11 -3
  175. package/utils/webpack/module-federation/utils.d.ts +6 -0
  176. package/utils/webpack/module-federation/utils.js +73 -17
  177. package/utils/webpack/module-federation/utils.js.map +1 -1
  178. package/config/index.js.map +0 -1
  179. package/config/utils.d.ts +0 -5
  180. package/config/utils.js +0 -12
  181. package/config/utils.js.map +0 -1
  182. package/container/application.d.ts +0 -25
  183. package/container/application.js.map +0 -1
  184. package/container/index.d.ts +0 -18
  185. package/container/index.js +0 -74
  186. package/container/index.js.map +0 -1
  187. package/container/types.d.ts +0 -14
  188. package/error-tracker/browser.d.ts +0 -8
  189. package/error-tracker/browser.js +0 -40
  190. package/error-tracker/browser.js.map +0 -1
  191. package/error-tracker/node.d.ts +0 -8
  192. package/error-tracker/node.js +0 -40
  193. package/error-tracker/node.js.map +0 -1
  194. package/error-tracker/types.d.ts +0 -18
  195. package/error-tracker/utils.d.ts +0 -12
  196. package/error-tracker/utils.js +0 -19
  197. package/error-tracker/utils.js.map +0 -1
  198. package/http-server/middleware/logging.js.map +0 -1
  199. package/logger/handler/console.d.ts +0 -8
  200. package/logger/handler/console.js +0 -36
  201. package/logger/handler/console.js.map +0 -1
  202. package/logger/handler/sentry.d.ts +0 -8
  203. package/logger/handler/sentry.js +0 -36
  204. package/logger/handler/sentry.js.map +0 -1
  205. package/logger/index.js.map +0 -1
  206. package/logger/types.d.ts +0 -24
  207. package/preset/index.d.ts +0 -7
  208. package/preset/index.js +0 -25
  209. package/preset/index.js.map +0 -1
  210. package/preset/types.d.ts +0 -7
  211. package/saga-runner/index.d.ts +0 -8
  212. package/saga-runner/index.js +0 -79
  213. package/saga-runner/index.js.map +0 -1
  214. package/saga-runner/types.d.ts +0 -10
  215. package/saga-runner/types.js.map +0 -1
@@ -1,33 +1,64 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HandlerProvider = exports.provideMain = exports.provideTemplate = exports.provideRender = exports.provideSagaRunner = exports.PresetResponse = void 0;
4
- const application_1 = require("../../container/application");
3
+ exports.HandlerProvider = exports.provideParams = exports.provideMain = exports.provideTemplate = exports.provideRender = exports.provideHttpClientFactory = exports.PresetResponse = void 0;
4
+ const di_1 = require("../../di");
5
5
  const tokens_1 = require("../../tokens");
6
- const __1 = require("..");
7
6
  const server_1 = require("react-dom/server");
8
- const saga_runner_1 = require("../../saga-runner");
9
7
  const constants_1 = require("../../http-server/constants");
10
8
  const template_1 = require("../../http-server/template");
11
9
  const utils_1 = require("../../http-server/utils");
10
+ const middleware_axios_1 = require("middleware-axios");
11
+ const tracing_1 = require("../../http-client/middleware/tracing");
12
+ const log_1 = require("../../http-client/middleware/log");
13
+ const headers_1 = require("../../http-client/middleware/headers");
14
+ const cookie_1 = require("../../http-client/middleware/cookie");
15
+ const errors_1 = require("../../http-server/errors");
16
+ const providers_1 = require("../parts/providers");
17
+ const utils_2 = require("../parts/utils");
12
18
  /**
13
19
  * Возвращает preset с зависимостями по умолчанию для работы в рамках ответа на http-запрос.
14
20
  * @return Preset.
15
21
  */
16
22
  function PresetResponse() {
17
- return (0, __1.createPreset)([
18
- [tokens_1.KnownToken.Response.sagaRunner, exports.provideSagaRunner],
19
- [tokens_1.KnownToken.Response.render, exports.provideRender],
20
- [tokens_1.KnownToken.Response.template, exports.provideTemplate],
21
- [tokens_1.KnownToken.Response.main, exports.provideMain],
23
+ return (0, di_1.createPreset)([
24
+ [tokens_1.KnownToken.sagaMiddleware, providers_1.provideSagaMiddleware],
25
+ [tokens_1.KnownToken.Response.builder, () => new utils_1.PageResponse()],
26
+ [tokens_1.KnownToken.Response.render, provideRender],
27
+ [tokens_1.KnownToken.Response.template, provideTemplate],
28
+ [tokens_1.KnownToken.Response.main, provideMain],
29
+ [tokens_1.KnownToken.Response.params, provideParams],
30
+ [tokens_1.KnownToken.Http.Client.factory, provideHttpClientFactory],
31
+ [tokens_1.KnownToken.Http.Client.LogMiddleware.handler, providers_1.provideHttpClientLogHandler],
22
32
  ]);
23
33
  }
24
34
  exports.PresetResponse = PresetResponse;
25
- const provideSagaRunner = resolve => {
26
- const logger = resolve(tokens_1.KnownToken.logger);
27
- return (0, saga_runner_1.createSagaRunner)(logger);
28
- };
29
- exports.provideSagaRunner = provideSagaRunner;
30
- const provideRender = resolve => {
35
+ function provideHttpClientFactory(resolve) {
36
+ // @todo а что если привести все зависимости к виду:
37
+ // const getAppConfig = resolve.lazy(KnownToken.Config.base);
38
+ const appConfig = resolve(tokens_1.KnownToken.Config.base);
39
+ const tracer = resolve(tokens_1.KnownToken.Tracing.tracer);
40
+ const context = resolve(tokens_1.KnownToken.Response.context);
41
+ const logHandler = resolve(tokens_1.KnownToken.Http.Client.LogMiddleware.handler);
42
+ return function createHttpClient(config) {
43
+ const client = (0, middleware_axios_1.create)({
44
+ ...config,
45
+ headers: {
46
+ ...(0, utils_1.getRequestHeaders)(appConfig, context.req),
47
+ ...config.headers,
48
+ },
49
+ });
50
+ client.use(utils_2.HttpStatus.createMiddleware());
51
+ client.use((0, tracing_1.tracingMiddleware)(tracer, context.res.locals.tracing.rootContext));
52
+ client.use((0, log_1.logMiddleware)(logHandler));
53
+ client.use((0, headers_1.passHeadersMiddleware)(context.req, {
54
+ predicate: headerName => headerName.startsWith('simaland-'),
55
+ }));
56
+ client.use((0, cookie_1.collectCookieMiddleware)(context.req, context.res));
57
+ return client;
58
+ };
59
+ }
60
+ exports.provideHttpClientFactory = provideHttpClientFactory;
61
+ function provideRender(resolve) {
31
62
  const { res } = resolve(tokens_1.KnownToken.Response.context);
32
63
  return function render(element) {
33
64
  res.emit(constants_1.RESPONSE_EVENT.renderStart);
@@ -35,37 +66,76 @@ const provideRender = resolve => {
35
66
  res.emit(constants_1.RESPONSE_EVENT.renderFinish);
36
67
  return result;
37
68
  };
38
- };
69
+ }
39
70
  exports.provideRender = provideRender;
40
- const provideTemplate = resolve => {
71
+ function provideTemplate(resolve) {
41
72
  const config = resolve(tokens_1.KnownToken.Config.base);
42
73
  return function template(data) {
43
74
  return data.type === 'html'
44
75
  ? (0, template_1.pageTemplate)({ ...data, title: `[dev] ${config.appName}` })
45
76
  : data.markup;
46
77
  };
47
- };
78
+ }
48
79
  exports.provideTemplate = provideTemplate;
49
- const provideMain = resolve => {
80
+ function provideMain(resolve) {
50
81
  const context = resolve(tokens_1.KnownToken.Response.context);
51
82
  const assets = resolve(tokens_1.KnownToken.Response.assets);
52
83
  const prepare = resolve(tokens_1.KnownToken.Response.prepare);
53
84
  const render = resolve(tokens_1.KnownToken.Response.render);
54
85
  const template = resolve(tokens_1.KnownToken.Response.template);
86
+ const logger = resolve(tokens_1.KnownToken.logger);
87
+ const builder = resolve(tokens_1.KnownToken.Response.builder);
55
88
  return async function main() {
56
- utils_1.PageResponse.create()
57
- .markup(await render(await prepare()))
58
- .script(assets.js)
59
- .styles(assets.css)
60
- .format(utils_1.PageResponse.defineFormat(context.req))
61
- .template(template)
62
- .send(context.res);
89
+ try {
90
+ builder
91
+ .markup(await render(await prepare()))
92
+ .assets(assets)
93
+ .format(utils_1.PageResponse.defineFormat(context.req))
94
+ .template(template)
95
+ .send(context.res);
96
+ }
97
+ catch (error) {
98
+ let message;
99
+ let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500
100
+ if (error instanceof Error) {
101
+ message = error.message;
102
+ if (error instanceof errors_1.SSRError) {
103
+ statusCode = error.statusCode;
104
+ }
105
+ }
106
+ else {
107
+ message = String(error);
108
+ }
109
+ context.res.status(statusCode).send(message);
110
+ logger.error(error);
111
+ }
63
112
  };
64
- };
113
+ }
65
114
  exports.provideMain = provideMain;
115
+ function provideParams(resolve) {
116
+ const context = resolve(tokens_1.KnownToken.Response.context);
117
+ try {
118
+ const headerValue = context.req.header('simaland-params');
119
+ /**
120
+ * Node.js переводит в ASCII.
121
+ * @see {https://github.com/nodejs/node/issues/17390}
122
+ */
123
+ const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';
124
+ return processedValue ? JSON.parse(processedValue) : {};
125
+ }
126
+ catch {
127
+ return {};
128
+ }
129
+ }
130
+ exports.provideParams = provideParams;
131
+ /**
132
+ * Возвращает express-handler, создающий дочернее di-приложение при запросе.
133
+ * @param appFactory Фабрика di-приложения запроса.
134
+ * @return Обработчик.
135
+ */
66
136
  function HandlerProvider(appFactory) {
67
137
  return function provider(resolve) {
68
- const parent = resolve(application_1.Application.self);
138
+ const parent = resolve(di_1.CURRENT_APP);
69
139
  return function handler(req, res, next) {
70
140
  const app = appFactory();
71
141
  app.attach(parent);
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/preset/node/response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/preset/node/response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseConfig } from '../../config/types';
2
+ import { Resolve } from '../../di';
3
+ import { LogMiddlewareHandlerInit } from '../../http-client/middleware/log';
4
+ import { SagaExtendedMiddleware } from '../../utils/redux-saga';
5
+ export declare function provideBaseConfig(resolve: Resolve): BaseConfig;
6
+ export declare function provideSagaMiddleware(resolve: Resolve): SagaExtendedMiddleware;
7
+ export declare function provideHttpClientLogHandler(resolve: Resolve): LogMiddlewareHandlerInit;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.provideHttpClientLogHandler = exports.provideSagaMiddleware = exports.provideBaseConfig = void 0;
4
+ /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
5
+ const base_1 = require("../../config/base");
6
+ const tokens_1 = require("../../tokens");
7
+ const redux_saga_1 = require("../../utils/redux-saga");
8
+ const utils_1 = require("./utils");
9
+ function provideBaseConfig(resolve) {
10
+ const source = resolve(tokens_1.KnownToken.Config.source);
11
+ return (0, base_1.createBaseConfig)(source);
12
+ }
13
+ exports.provideBaseConfig = provideBaseConfig;
14
+ function provideSagaMiddleware(resolve) {
15
+ const logger = resolve(tokens_1.KnownToken.logger);
16
+ return (0, redux_saga_1.createSagaMiddleware)(new utils_1.SagaLogging(logger));
17
+ }
18
+ exports.provideSagaMiddleware = provideSagaMiddleware;
19
+ function provideHttpClientLogHandler(resolve) {
20
+ const logger = resolve(tokens_1.KnownToken.logger);
21
+ return function getLogHandler(data) {
22
+ return new utils_1.HttpClientLogging(logger, data);
23
+ };
24
+ }
25
+ exports.provideHttpClientLogHandler = provideHttpClientLogHandler;
26
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/preset/parts/providers.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,4CAAqD;AAIrD,yCAA0C;AAC1C,uDAAsF;AACtF,mCAAyD;AAEzD,SAAgB,iBAAiB,CAAC,OAAgB;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,IAAA,uBAAgB,EAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAJD,8CAIC;AAED,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAU,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,IAAA,iCAAoB,EAAC,IAAI,mBAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAJD,sDAIC;AAED,SAAgB,2BAA2B,CAAC,OAAgB;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAU,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,SAAS,aAAa,CAAC,IAAI;QAChC,OAAO,IAAI,yBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC;AAND,kEAMC"}
@@ -0,0 +1,8 @@
1
+ export type KnownHttpApiKey = 'ilium' | 'simaV3' | 'simaV4' | 'simaV6';
2
+ /**
3
+ * Строгая версия Map без возможности добавлять/удалять.
4
+ */
5
+ export interface StrictMap<Key extends string> {
6
+ /** Возвращает значение по ключу. */
7
+ get(key: Key): string;
8
+ }
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/error-tracker/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/preset/parts/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { SeverityLevel } from '@sentry/browser';
2
+ import type { Middleware } from 'middleware-axios';
3
+ import { ConfigSource } from '../../config/types';
4
+ import { SharedData, DoneSharedData, FailSharedData, LogMiddlewareHandler } from '../../http-client/middleware/log';
5
+ import { applyAxiosDefaults } from '../../http-client/utils';
6
+ import { Logger } from '../../log';
7
+ import { SagaErrorInfo, SagaInterruptInfo, SagaMiddlewareHandler } from '../../utils/redux-saga/types';
8
+ import { StrictMap } from './types';
9
+ /** Реализация пула хостов. */
10
+ export declare class HttpApiHostPool<Key extends string> implements StrictMap<Key> {
11
+ private map;
12
+ private source;
13
+ /**
14
+ * Конструктор.
15
+ * @param map Карта "Название api >> Название переменной среды с хостом api".
16
+ * @param source Источник конфигурации.
17
+ */
18
+ constructor(map: Record<Key, string>, source: ConfigSource);
19
+ /** @inheritDoc */
20
+ get(key: Key): string;
21
+ }
22
+ /**
23
+ * Возвращает уровень на основе статуса ответа.
24
+ * @param status Статус HTTP-ответа.
25
+ * @return Уровень.
26
+ */
27
+ export declare function severityFromStatus(status: unknown): SeverityLevel;
28
+ /**
29
+ * Обработчик для промежуточного слоя логирования исходящих http-запросов.
30
+ * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.
31
+ */
32
+ export declare class HttpClientLogging implements LogMiddlewareHandler {
33
+ protected logger: Logger;
34
+ protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {
35
+ readyURL: string;
36
+ };
37
+ /**
38
+ * Конструктор.
39
+ * @param logger Logger.
40
+ * @param data Данные запроса.
41
+ */
42
+ constructor(logger: Logger, data: SharedData);
43
+ /**
44
+ * Отправит хлебные крошки перед запросом.
45
+ */
46
+ beforeRequest(): void;
47
+ /**
48
+ * Отправит хлебные крошки после запроса.
49
+ * @param data Данные ответа.
50
+ */
51
+ afterResponse({ response }: DoneSharedData): void;
52
+ /**
53
+ * Отправит данные ошибки при перехвате.
54
+ * @param data Данные запроса.
55
+ */
56
+ onCatch({ error }: FailSharedData): void;
57
+ }
58
+ /**
59
+ * Лог событий запуска и выполнения redux-saga.
60
+ */
61
+ export declare class SagaLogging implements SagaMiddlewareHandler {
62
+ protected logger: Logger;
63
+ /**
64
+ * @param logger Logger.
65
+ */
66
+ constructor(logger: Logger);
67
+ /**
68
+ * При получении ошибки выполнения саги передаст ее логгеру ее с данными стека в extra.
69
+ * @param error Ошибка.
70
+ * @param info Инфо выполнения саги.
71
+ */
72
+ onSagaError(error: Error, info: SagaErrorInfo): void;
73
+ /**
74
+ * При получении ошибки запуска саги передаст ее логгеру.
75
+ * @param error Ошибка.
76
+ */
77
+ onConfigError(error: Error): void;
78
+ /**
79
+ * При прерывании саги передаст информацию логгеру как ошибку.
80
+ * @param info Инфо прерывания саги.
81
+ */
82
+ onTimeoutInterrupt({ timeout }: SagaInterruptInfo): void;
83
+ }
84
+ /** Работа с HTTP-статусами по соглашению. */
85
+ export declare abstract class HttpStatus {
86
+ /**
87
+ * Определяет, является ли переданный статус успешным.
88
+ * @param status Статус.
89
+ * @return Признак.
90
+ */
91
+ static isOk(status: unknown): boolean;
92
+ /**
93
+ * Определяет, является ли переданный статус успешным POST.
94
+ * @param status Статус.
95
+ * @return Признак.
96
+ */
97
+ static isPostOk(status: unknown): boolean;
98
+ /**
99
+ * Определяет, является ли переданный статус успешным DELETE.
100
+ * @param status Статус.
101
+ * @return Признак.
102
+ */
103
+ static isDeleteOk(status: unknown): boolean;
104
+ /**
105
+ * Возвращает новый промежуточный слой для валидации статуса HTTP-ответа.
106
+ * Валидация применяется только если в конфиге запроса не указан validateStatus.
107
+ * @return Промежуточный слой.
108
+ */
109
+ static createMiddleware(): Middleware<unknown>;
110
+ }
@@ -0,0 +1,261 @@
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.HttpStatus = exports.SagaLogging = exports.HttpClientLogging = exports.severityFromStatus = exports.HttpApiHostPool = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const error_tracking_1 = require("../../error-tracking");
9
+ const utils_1 = require("../../http-client/utils");
10
+ /** Реализация пула хостов. */
11
+ class HttpApiHostPool {
12
+ /**
13
+ * Конструктор.
14
+ * @param map Карта "Название api >> Название переменной среды с хостом api".
15
+ * @param source Источник конфигурации.
16
+ */
17
+ constructor(map, source) {
18
+ this.map = map;
19
+ this.source = source;
20
+ }
21
+ /** @inheritDoc */
22
+ get(key) {
23
+ const variableName = this.map[key];
24
+ if (!variableName) {
25
+ throw Error(`Known HTTP API not found by key "${key}"`);
26
+ }
27
+ // "лениво" берём переменную, именно в момент вызова (чтобы не заставлять указывать в сервисах все переменные разом)
28
+ return this.source.require(variableName);
29
+ }
30
+ }
31
+ exports.HttpApiHostPool = HttpApiHostPool;
32
+ /**
33
+ * Возвращает уровень на основе статуса ответа.
34
+ * @param status Статус HTTP-ответа.
35
+ * @return Уровень.
36
+ */
37
+ function severityFromStatus(status) {
38
+ let result;
39
+ if (typeof status === 'number') {
40
+ switch (true) {
41
+ case status >= 200 && status <= 299:
42
+ result = 'info';
43
+ break;
44
+ case status >= 300 && status <= 499:
45
+ result = 'warning';
46
+ break;
47
+ default:
48
+ result = 'error';
49
+ }
50
+ }
51
+ else {
52
+ result = 'error';
53
+ }
54
+ return result;
55
+ }
56
+ exports.severityFromStatus = severityFromStatus;
57
+ /**
58
+ * Обработчик для промежуточного слоя логирования исходящих http-запросов.
59
+ * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.
60
+ */
61
+ class HttpClientLogging {
62
+ /**
63
+ * Конструктор.
64
+ * @param logger Logger.
65
+ * @param data Данные запроса.
66
+ */
67
+ constructor(logger, data) {
68
+ const config = (0, utils_1.applyAxiosDefaults)(data.config, data.defaults);
69
+ this.logger = logger;
70
+ this.requestInfo = {
71
+ ...config,
72
+ readyURL: (0, utils_1.displayUrl)(config.baseURL, config.url),
73
+ };
74
+ }
75
+ /**
76
+ * Отправит хлебные крошки перед запросом.
77
+ */
78
+ beforeRequest() {
79
+ const { readyURL, method, params } = this.requestInfo;
80
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
81
+ category: 'http.request',
82
+ type: 'http',
83
+ data: {
84
+ url: readyURL,
85
+ method,
86
+ params,
87
+ },
88
+ level: 'info',
89
+ }));
90
+ }
91
+ /**
92
+ * Отправит хлебные крошки после запроса.
93
+ * @param data Данные ответа.
94
+ */
95
+ afterResponse({ response }) {
96
+ const { readyURL, method, params } = this.requestInfo;
97
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
98
+ category: 'http.response',
99
+ type: 'http',
100
+ data: {
101
+ url: readyURL,
102
+ method,
103
+ status_code: response.status,
104
+ params,
105
+ },
106
+ level: 'info',
107
+ }));
108
+ }
109
+ /**
110
+ * Отправит данные ошибки при перехвате.
111
+ * @param data Данные запроса.
112
+ */
113
+ onCatch({ error }) {
114
+ if (axios_1.default.isAxiosError(error)) {
115
+ const { requestInfo } = this;
116
+ const statusCode = error.response?.status || 'UNKNOWN';
117
+ // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд
118
+ // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)
119
+ this.logger.error(new error_tracking_1.SentryError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
120
+ level: severityFromStatus(error.response?.status),
121
+ context: [
122
+ {
123
+ key: 'Request details',
124
+ data: {
125
+ url: requestInfo.url,
126
+ baseURL: requestInfo.baseURL,
127
+ method: requestInfo.method,
128
+ headers: requestInfo.headers,
129
+ data: requestInfo.data,
130
+ params: requestInfo.params,
131
+ },
132
+ },
133
+ {
134
+ key: 'Response details',
135
+ data: {
136
+ data: error.response?.data,
137
+ // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
138
+ headers: { ...error.response?.headers },
139
+ error: error.toJSON(),
140
+ },
141
+ },
142
+ ],
143
+ }));
144
+ if (typeof statusCode === 'number') {
145
+ this.logger.info(new error_tracking_1.SentryBreadcrumb({
146
+ category: 'http.response',
147
+ type: 'http',
148
+ data: {
149
+ url: requestInfo.readyURL,
150
+ method: requestInfo.method,
151
+ status_code: statusCode,
152
+ params: requestInfo.params,
153
+ },
154
+ level: 'error',
155
+ }));
156
+ }
157
+ }
158
+ else {
159
+ this.logger.error(error);
160
+ }
161
+ }
162
+ }
163
+ exports.HttpClientLogging = HttpClientLogging;
164
+ /**
165
+ * Лог событий запуска и выполнения redux-saga.
166
+ */
167
+ class SagaLogging {
168
+ /**
169
+ * @param logger Logger.
170
+ */
171
+ constructor(logger) {
172
+ this.logger = logger;
173
+ }
174
+ /**
175
+ * При получении ошибки выполнения саги передаст ее логгеру ее с данными стека в extra.
176
+ * @param error Ошибка.
177
+ * @param info Инфо выполнения саги.
178
+ */
179
+ onSagaError(error, info) {
180
+ this.logger.error(new error_tracking_1.SentryError(error.message, {
181
+ extra: {
182
+ key: 'Saga stack',
183
+ data: info.sagaStack,
184
+ },
185
+ }));
186
+ }
187
+ /**
188
+ * При получении ошибки запуска саги передаст ее логгеру.
189
+ * @param error Ошибка.
190
+ */
191
+ onConfigError(error) {
192
+ this.logger.error(error);
193
+ }
194
+ /**
195
+ * При прерывании саги передаст информацию логгеру как ошибку.
196
+ * @param info Инфо прерывания саги.
197
+ */
198
+ onTimeoutInterrupt({ timeout }) {
199
+ this.logger.error(new Error(`Сага прервана по таймауту (${timeout} миллисекунд)`));
200
+ }
201
+ }
202
+ exports.SagaLogging = SagaLogging;
203
+ /** Работа с HTTP-статусами по соглашению. */
204
+ class HttpStatus {
205
+ /**
206
+ * Определяет, является ли переданный статус успешным.
207
+ * @param status Статус.
208
+ * @return Признак.
209
+ */
210
+ static isOk(status) {
211
+ return typeof status === 'number' && status === 200;
212
+ }
213
+ /**
214
+ * Определяет, является ли переданный статус успешным POST.
215
+ * @param status Статус.
216
+ * @return Признак.
217
+ */
218
+ static isPostOk(status) {
219
+ return typeof status === 'number' && status === 201;
220
+ }
221
+ /**
222
+ * Определяет, является ли переданный статус успешным DELETE.
223
+ * @param status Статус.
224
+ * @return Признак.
225
+ */
226
+ static isDeleteOk(status) {
227
+ return typeof status === 'number' && (status === 204 || status === 200);
228
+ }
229
+ /**
230
+ * Возвращает новый промежуточный слой для валидации статуса HTTP-ответа.
231
+ * Валидация применяется только если в конфиге запроса не указан validateStatus.
232
+ * @return Промежуточный слой.
233
+ */
234
+ static createMiddleware() {
235
+ return async (config, next, defaults) => {
236
+ if (config.validateStatus !== undefined || defaults.validateStatus !== undefined) {
237
+ // если validateStatus указан явно то не применяем валидацию по умолчанию
238
+ await next(config);
239
+ }
240
+ else {
241
+ let validateStatus = null;
242
+ switch (config.method?.toLowerCase()) {
243
+ case 'get':
244
+ case 'put':
245
+ case undefined:
246
+ validateStatus = HttpStatus.isOk;
247
+ break;
248
+ case 'post':
249
+ validateStatus = HttpStatus.isPostOk;
250
+ break;
251
+ case 'delete':
252
+ validateStatus = HttpStatus.isDeleteOk;
253
+ break;
254
+ }
255
+ await next({ ...config, validateStatus });
256
+ }
257
+ };
258
+ }
259
+ }
260
+ exports.HttpStatus = HttpStatus;
261
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/preset/parts/utils.ts"],"names":[],"mappings":"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"}