@sima-land/isomorph 11.0.0-alpha.4 → 11.0.0-alpha.40

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 (691) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/cache/package.json +6 -0
  4. package/config/package.json +6 -0
  5. package/di/package.json +6 -0
  6. package/dist/cjs/cache/index.js +6 -0
  7. package/dist/cjs/cache/index.js.map +1 -0
  8. package/dist/cjs/cache/types.js +6 -0
  9. package/dist/cjs/cache/types.js.map +1 -0
  10. package/dist/cjs/config/base.js +22 -0
  11. package/dist/cjs/config/base.js.map +1 -0
  12. package/dist/cjs/config/index.js +20 -0
  13. package/dist/cjs/config/index.js.map +1 -0
  14. package/dist/cjs/config/source.js +25 -0
  15. package/dist/cjs/config/source.js.map +1 -0
  16. package/dist/cjs/config/types.js +6 -0
  17. package/dist/cjs/config/types.js.map +1 -0
  18. package/dist/cjs/di/application.js +106 -0
  19. package/dist/cjs/di/application.js.map +1 -0
  20. package/dist/cjs/di/container.js +55 -0
  21. package/dist/cjs/di/container.js.map +1 -0
  22. package/dist/cjs/di/errors.js +65 -0
  23. package/dist/cjs/di/errors.js.map +1 -0
  24. package/dist/cjs/di/index.js +59 -0
  25. package/dist/cjs/di/index.js.map +1 -0
  26. package/dist/cjs/di/preset.js +32 -0
  27. package/dist/cjs/di/preset.js.map +1 -0
  28. package/dist/cjs/di/token.js +44 -0
  29. package/dist/cjs/di/token.js.map +1 -0
  30. package/dist/cjs/di/types.js +6 -0
  31. package/dist/cjs/di/types.js.map +1 -0
  32. package/dist/cjs/http/errors.js +47 -0
  33. package/dist/cjs/http/errors.js.map +1 -0
  34. package/dist/cjs/http/index.js +63 -0
  35. package/dist/cjs/http/index.js.map +1 -0
  36. package/dist/cjs/http/types.js +6 -0
  37. package/dist/cjs/http/types.js.map +1 -0
  38. package/dist/cjs/log/errors.js +35 -0
  39. package/dist/cjs/log/errors.js.map +1 -0
  40. package/dist/cjs/log/handler/pino.js +31 -0
  41. package/dist/cjs/log/handler/pino.js.map +1 -0
  42. package/dist/cjs/log/handler/sentry.js +57 -0
  43. package/dist/cjs/log/handler/sentry.js.map +1 -0
  44. package/dist/cjs/log/index.js +26 -0
  45. package/dist/cjs/log/index.js.map +1 -0
  46. package/dist/cjs/log/logger.js +35 -0
  47. package/dist/cjs/log/logger.js.map +1 -0
  48. package/dist/cjs/log/types.js +6 -0
  49. package/dist/cjs/log/types.js.map +1 -0
  50. package/dist/cjs/package.json +5 -0
  51. package/dist/cjs/preset/isomorphic/constants.js +14 -0
  52. package/dist/cjs/preset/isomorphic/constants.js.map +1 -0
  53. package/dist/cjs/preset/isomorphic/index.js +6 -0
  54. package/dist/cjs/preset/isomorphic/index.js.map +1 -0
  55. package/dist/cjs/preset/isomorphic/providers/index.js +42 -0
  56. package/dist/cjs/preset/isomorphic/providers/index.js.map +1 -0
  57. package/dist/cjs/preset/isomorphic/types.js +6 -0
  58. package/dist/cjs/preset/isomorphic/types.js.map +1 -0
  59. package/dist/cjs/preset/isomorphic/utils/index.js +322 -0
  60. package/dist/cjs/preset/isomorphic/utils/index.js.map +1 -0
  61. package/dist/cjs/preset/node/handler/index.js +52 -0
  62. package/dist/cjs/preset/node/handler/index.js.map +1 -0
  63. package/dist/cjs/preset/node/handler/providers/index.js +212 -0
  64. package/dist/cjs/preset/node/handler/providers/index.js.map +1 -0
  65. package/dist/cjs/preset/node/handler/utils/index.js +132 -0
  66. package/dist/cjs/preset/node/handler/utils/index.js.map +1 -0
  67. package/dist/cjs/preset/node/index.js +26 -0
  68. package/dist/cjs/preset/node/index.js.map +1 -0
  69. package/dist/cjs/preset/node/node/index.js +61 -0
  70. package/dist/cjs/preset/node/node/index.js.map +1 -0
  71. package/dist/cjs/preset/node/node/providers/index.js +403 -0
  72. package/dist/cjs/preset/node/node/providers/index.js.map +1 -0
  73. package/dist/cjs/preset/node/node/utils/http-client/index.js +122 -0
  74. package/dist/cjs/preset/node/node/utils/http-client/index.js.map +1 -0
  75. package/dist/cjs/preset/node/node/utils/http-server/index.js +18 -0
  76. package/dist/cjs/preset/node/node/utils/http-server/index.js.map +1 -0
  77. package/dist/cjs/preset/node/node/utils/index.js +20 -0
  78. package/dist/cjs/preset/node/node/utils/index.js.map +1 -0
  79. package/dist/cjs/preset/node/types.js +6 -0
  80. package/dist/cjs/preset/node/types.js.map +1 -0
  81. package/dist/cjs/preset/web/index.js +34 -0
  82. package/dist/cjs/preset/web/index.js.map +1 -0
  83. package/dist/cjs/preset/web/providers/index.js +94 -0
  84. package/dist/cjs/preset/web/providers/index.js.map +1 -0
  85. package/dist/cjs/tokens.js +86 -0
  86. package/dist/cjs/tokens.js.map +1 -0
  87. package/dist/cjs/utils/axios/index.js +40 -0
  88. package/dist/cjs/utils/axios/index.js.map +1 -0
  89. package/dist/cjs/utils/axios/middleware/cookie.js +28 -0
  90. package/dist/cjs/utils/axios/middleware/cookie.js.map +1 -0
  91. package/dist/cjs/utils/axios/middleware/log.js +37 -0
  92. package/dist/cjs/utils/axios/middleware/log.js.map +1 -0
  93. package/dist/cjs/utils/axios/sauce/index.js +57 -0
  94. package/dist/cjs/utils/axios/sauce/index.js.map +1 -0
  95. package/dist/cjs/utils/axios/utils/index.js +30 -0
  96. package/dist/cjs/utils/axios/utils/index.js.map +1 -0
  97. package/dist/cjs/utils/express/handler/health-check.js +19 -0
  98. package/dist/cjs/utils/express/handler/health-check.js.map +1 -0
  99. package/dist/cjs/utils/express/index.js +20 -0
  100. package/dist/cjs/utils/express/index.js.map +1 -0
  101. package/dist/cjs/utils/express/utils/index.js +22 -0
  102. package/dist/cjs/utils/express/utils/index.js.map +1 -0
  103. package/dist/cjs/utils/function.js +44 -0
  104. package/dist/cjs/utils/function.js.map +1 -0
  105. package/dist/cjs/utils/index.js +20 -0
  106. package/dist/cjs/utils/index.js.map +1 -0
  107. package/{utils/number.js → dist/cjs/utils/math.js} +7 -5
  108. package/dist/cjs/utils/math.js.map +1 -0
  109. package/dist/cjs/utils/react/error-handlers/index.js +80 -0
  110. package/dist/cjs/utils/react/error-handlers/index.js.map +1 -0
  111. package/dist/cjs/utils/react/index.js +19 -0
  112. package/dist/cjs/utils/react/index.js.map +1 -0
  113. package/dist/cjs/utils/redux/index.js +19 -0
  114. package/dist/cjs/utils/redux/index.js.map +1 -0
  115. package/dist/cjs/utils/redux/remote-data.js +118 -0
  116. package/dist/cjs/utils/redux/remote-data.js.map +1 -0
  117. package/dist/cjs/utils/redux-saga/index.js +20 -0
  118. package/dist/cjs/utils/redux-saga/index.js.map +1 -0
  119. package/dist/cjs/utils/redux-saga/middleware.js +149 -0
  120. package/dist/cjs/utils/redux-saga/middleware.js.map +1 -0
  121. package/dist/cjs/utils/redux-saga/take-chain.js +66 -0
  122. package/dist/cjs/utils/redux-saga/take-chain.js.map +1 -0
  123. package/dist/cjs/utils/redux-saga/types.js +6 -0
  124. package/dist/cjs/utils/redux-saga/types.js.map +1 -0
  125. package/dist/cjs/utils/ssr/index.js +73 -0
  126. package/dist/cjs/utils/ssr/index.js.map +1 -0
  127. package/dist/cjs/utils/web/analytics/data-layer.js +20 -0
  128. package/dist/cjs/utils/web/analytics/data-layer.js.map +1 -0
  129. package/dist/cjs/utils/web/analytics/index.js +20 -0
  130. package/dist/cjs/utils/web/analytics/index.js.map +1 -0
  131. package/dist/cjs/utils/web/analytics/oko.js +20 -0
  132. package/dist/cjs/utils/web/analytics/oko.js.map +1 -0
  133. package/dist/cjs/utils/web/storage/index.js +75 -0
  134. package/dist/cjs/utils/web/storage/index.js.map +1 -0
  135. package/dist/cjs/utils/webpack/env/index.js +96 -0
  136. package/dist/cjs/utils/webpack/env/index.js.map +1 -0
  137. package/dist/cjs/utils/webpack/env/types.js +6 -0
  138. package/dist/cjs/utils/webpack/env/types.js.map +1 -0
  139. package/dist/cjs/utils/webpack/env/utils.js +55 -0
  140. package/dist/cjs/utils/webpack/env/utils.js.map +1 -0
  141. package/dist/cjs/utils/webpack/index.js +20 -0
  142. package/dist/cjs/utils/webpack/index.js.map +1 -0
  143. package/dist/cjs/utils/webpack/module-federation/index.js +110 -0
  144. package/dist/cjs/utils/webpack/module-federation/index.js.map +1 -0
  145. package/dist/cjs/utils/webpack/module-federation/types.js +6 -0
  146. package/dist/cjs/utils/webpack/module-federation/types.js.map +1 -0
  147. package/dist/cjs/utils/webpack/module-federation/utils.js +87 -0
  148. package/dist/cjs/utils/webpack/module-federation/utils.js.map +1 -0
  149. package/dist/esm/cache/index.js +2 -0
  150. package/dist/esm/cache/index.js.map +1 -0
  151. package/dist/esm/cache/types.js +2 -0
  152. package/dist/esm/cache/types.js.map +1 -0
  153. package/dist/esm/config/base.js +16 -0
  154. package/dist/esm/config/base.js.map +1 -0
  155. package/dist/esm/config/index.js +3 -0
  156. package/dist/esm/config/index.js.map +1 -0
  157. package/dist/esm/config/source.js +19 -0
  158. package/dist/esm/config/source.js.map +1 -0
  159. package/dist/esm/config/types.js +2 -0
  160. package/dist/esm/config/types.js.map +1 -0
  161. package/dist/esm/di/application.js +100 -0
  162. package/dist/esm/di/application.js.map +1 -0
  163. package/dist/esm/di/container.js +49 -0
  164. package/dist/esm/di/container.js.map +1 -0
  165. package/dist/esm/di/errors.js +56 -0
  166. package/dist/esm/di/errors.js.map +1 -0
  167. package/dist/esm/di/index.js +6 -0
  168. package/dist/esm/di/index.js.map +1 -0
  169. package/dist/esm/di/preset.js +26 -0
  170. package/dist/esm/di/preset.js.map +1 -0
  171. package/dist/esm/di/token.js +38 -0
  172. package/dist/esm/di/token.js.map +1 -0
  173. package/dist/esm/di/types.js +2 -0
  174. package/dist/esm/di/types.js.map +1 -0
  175. package/dist/esm/http/errors.js +39 -0
  176. package/dist/esm/http/errors.js.map +1 -0
  177. package/dist/esm/http/index.js +4 -0
  178. package/dist/esm/http/index.js.map +1 -0
  179. package/dist/esm/http/types.js +2 -0
  180. package/dist/esm/http/types.js.map +1 -0
  181. package/dist/esm/log/errors.js +27 -0
  182. package/dist/esm/log/errors.js.map +1 -0
  183. package/dist/esm/log/handler/pino.js +25 -0
  184. package/dist/esm/log/handler/pino.js.map +1 -0
  185. package/dist/esm/log/handler/sentry.js +52 -0
  186. package/dist/esm/log/handler/sentry.js.map +1 -0
  187. package/dist/esm/log/index.js +3 -0
  188. package/dist/esm/log/index.js.map +1 -0
  189. package/dist/esm/log/logger.js +29 -0
  190. package/dist/esm/log/logger.js.map +1 -0
  191. package/dist/esm/log/types.js +2 -0
  192. package/dist/esm/log/types.js.map +1 -0
  193. package/dist/esm/package.json +5 -0
  194. package/dist/esm/preset/isomorphic/constants.js +8 -0
  195. package/dist/esm/preset/isomorphic/constants.js.map +1 -0
  196. package/dist/esm/preset/isomorphic/index.js +2 -0
  197. package/dist/esm/preset/isomorphic/index.js.map +1 -0
  198. package/dist/esm/preset/isomorphic/providers/index.js +35 -0
  199. package/dist/esm/preset/isomorphic/providers/index.js.map +1 -0
  200. package/dist/esm/preset/isomorphic/types.js +2 -0
  201. package/dist/esm/preset/isomorphic/types.js.map +1 -0
  202. package/dist/esm/preset/isomorphic/utils/index.js +309 -0
  203. package/dist/esm/preset/isomorphic/utils/index.js.map +1 -0
  204. package/dist/esm/preset/node/handler/index.js +42 -0
  205. package/dist/esm/preset/node/handler/index.js.map +1 -0
  206. package/dist/esm/preset/node/handler/providers/index.js +194 -0
  207. package/dist/esm/preset/node/handler/providers/index.js.map +1 -0
  208. package/dist/esm/preset/node/handler/utils/index.js +113 -0
  209. package/dist/esm/preset/node/handler/utils/index.js.map +1 -0
  210. package/dist/esm/preset/node/index.js +3 -0
  211. package/dist/esm/preset/node/index.js.map +1 -0
  212. package/dist/esm/preset/node/node/index.js +56 -0
  213. package/dist/esm/preset/node/node/index.js.map +1 -0
  214. package/dist/esm/preset/node/node/providers/index.js +378 -0
  215. package/dist/esm/preset/node/node/providers/index.js.map +1 -0
  216. package/dist/esm/preset/node/node/utils/http-client/index.js +114 -0
  217. package/dist/esm/preset/node/node/utils/http-client/index.js.map +1 -0
  218. package/dist/esm/preset/node/node/utils/http-server/index.js +12 -0
  219. package/dist/esm/preset/node/node/utils/http-server/index.js.map +1 -0
  220. package/dist/esm/preset/node/node/utils/index.js +3 -0
  221. package/dist/esm/preset/node/node/utils/index.js.map +1 -0
  222. package/dist/esm/preset/node/types.js +2 -0
  223. package/dist/esm/preset/node/types.js.map +1 -0
  224. package/dist/esm/preset/web/index.js +29 -0
  225. package/dist/esm/preset/web/index.js.map +1 -0
  226. package/dist/esm/preset/web/providers/index.js +85 -0
  227. package/dist/esm/preset/web/providers/index.js.map +1 -0
  228. package/dist/esm/tokens.js +81 -0
  229. package/dist/esm/tokens.js.map +1 -0
  230. package/dist/esm/utils/axios/index.js +5 -0
  231. package/dist/esm/utils/axios/index.js.map +1 -0
  232. package/dist/esm/utils/axios/middleware/cookie.js +22 -0
  233. package/dist/esm/utils/axios/middleware/cookie.js.map +1 -0
  234. package/dist/esm/utils/axios/middleware/log.js +31 -0
  235. package/dist/esm/utils/axios/middleware/log.js.map +1 -0
  236. package/dist/esm/utils/axios/sauce/index.js +50 -0
  237. package/dist/esm/utils/axios/sauce/index.js.map +1 -0
  238. package/dist/esm/utils/axios/utils/index.js +24 -0
  239. package/dist/esm/utils/axios/utils/index.js.map +1 -0
  240. package/dist/esm/utils/express/handler/health-check.js +13 -0
  241. package/dist/esm/utils/express/handler/health-check.js.map +1 -0
  242. package/dist/esm/utils/express/index.js +3 -0
  243. package/dist/esm/utils/express/index.js.map +1 -0
  244. package/dist/esm/utils/express/utils/index.js +16 -0
  245. package/dist/esm/utils/express/utils/index.js.map +1 -0
  246. package/dist/esm/utils/function.js +38 -0
  247. package/dist/esm/utils/function.js.map +1 -0
  248. package/dist/esm/utils/index.js +3 -0
  249. package/dist/esm/utils/index.js.map +1 -0
  250. package/dist/esm/utils/math.js +9 -0
  251. package/dist/esm/utils/math.js.map +1 -0
  252. package/dist/esm/utils/react/error-handlers/index.js +69 -0
  253. package/dist/esm/utils/react/error-handlers/index.js.map +1 -0
  254. package/dist/esm/utils/react/index.js +3 -0
  255. package/dist/esm/utils/react/index.js.map +1 -0
  256. package/dist/esm/utils/redux/index.js +3 -0
  257. package/dist/esm/utils/redux/index.js.map +1 -0
  258. package/dist/esm/utils/redux/remote-data.js +108 -0
  259. package/dist/esm/utils/redux/remote-data.js.map +1 -0
  260. package/dist/esm/utils/redux-saga/index.js +3 -0
  261. package/dist/esm/utils/redux-saga/index.js.map +1 -0
  262. package/dist/esm/utils/redux-saga/middleware.js +143 -0
  263. package/dist/esm/utils/redux-saga/middleware.js.map +1 -0
  264. package/dist/esm/utils/redux-saga/take-chain.js +59 -0
  265. package/dist/esm/utils/redux-saga/take-chain.js.map +1 -0
  266. package/dist/esm/utils/redux-saga/types.js +2 -0
  267. package/dist/esm/utils/redux-saga/types.js.map +1 -0
  268. package/dist/esm/utils/ssr/index.js +66 -0
  269. package/dist/esm/utils/ssr/index.js.map +1 -0
  270. package/dist/esm/utils/web/analytics/data-layer.js +14 -0
  271. package/dist/esm/utils/web/analytics/data-layer.js.map +1 -0
  272. package/dist/esm/utils/web/analytics/index.js +3 -0
  273. package/dist/esm/utils/web/analytics/index.js.map +1 -0
  274. package/dist/esm/utils/web/analytics/oko.js +14 -0
  275. package/dist/esm/utils/web/analytics/oko.js.map +1 -0
  276. package/dist/esm/utils/web/storage/index.js +69 -0
  277. package/dist/esm/utils/web/storage/index.js.map +1 -0
  278. package/dist/esm/utils/webpack/env/index.js +89 -0
  279. package/dist/esm/utils/webpack/env/index.js.map +1 -0
  280. package/dist/esm/utils/webpack/env/types.js +2 -0
  281. package/dist/esm/utils/webpack/env/types.js.map +1 -0
  282. package/dist/esm/utils/webpack/env/utils.js +48 -0
  283. package/dist/esm/utils/webpack/env/utils.js.map +1 -0
  284. package/dist/esm/utils/webpack/index.js +4 -0
  285. package/dist/esm/utils/webpack/index.js.map +1 -0
  286. package/dist/esm/utils/webpack/module-federation/index.js +96 -0
  287. package/dist/esm/utils/webpack/module-federation/index.js.map +1 -0
  288. package/dist/esm/utils/webpack/module-federation/types.js +2 -0
  289. package/dist/esm/utils/webpack/module-federation/types.js.map +1 -0
  290. package/dist/esm/utils/webpack/module-federation/utils.js +80 -0
  291. package/dist/esm/utils/webpack/module-federation/utils.js.map +1 -0
  292. package/dist/types/cache/index.d.ts +2 -0
  293. package/dist/types/cache/index.d.ts.map +1 -0
  294. package/dist/types/cache/types.d.ts +31 -0
  295. package/dist/types/cache/types.d.ts.map +1 -0
  296. package/{config → dist/types/config}/base.d.ts +3 -2
  297. package/dist/types/config/base.d.ts.map +1 -0
  298. package/dist/types/config/index.d.ts +4 -0
  299. package/dist/types/config/index.d.ts.map +1 -0
  300. package/dist/types/config/source.d.ts +8 -0
  301. package/dist/types/config/source.d.ts.map +1 -0
  302. package/dist/types/config/types.d.ts +21 -0
  303. package/dist/types/config/types.d.ts.map +1 -0
  304. package/{di → dist/types/di}/application.d.ts +6 -1
  305. package/dist/types/di/application.d.ts.map +1 -0
  306. package/{di → dist/types/di}/container.d.ts +1 -0
  307. package/dist/types/di/container.d.ts.map +1 -0
  308. package/dist/types/di/errors.d.ts +36 -0
  309. package/dist/types/di/errors.d.ts.map +1 -0
  310. package/dist/types/di/index.d.ts +7 -0
  311. package/dist/types/di/index.d.ts.map +1 -0
  312. package/dist/types/di/preset.d.ts +10 -0
  313. package/dist/types/di/preset.d.ts.map +1 -0
  314. package/{di → dist/types/di}/token.d.ts +1 -0
  315. package/dist/types/di/token.d.ts.map +1 -0
  316. package/dist/types/di/types.d.ts +87 -0
  317. package/dist/types/di/types.d.ts.map +1 -0
  318. package/dist/types/http/errors.d.ts +29 -0
  319. package/dist/types/http/errors.d.ts.map +1 -0
  320. package/dist/types/http/index.d.ts +5 -0
  321. package/dist/types/http/index.d.ts.map +1 -0
  322. package/dist/types/http/types.d.ts +3 -0
  323. package/dist/types/http/types.d.ts.map +1 -0
  324. package/dist/types/log/errors.d.ts +24 -0
  325. package/dist/types/log/errors.d.ts.map +1 -0
  326. package/dist/types/log/handler/pino.d.ts +9 -0
  327. package/dist/types/log/handler/pino.d.ts.map +1 -0
  328. package/dist/types/log/handler/sentry.d.ts +9 -0
  329. package/dist/types/log/handler/sentry.d.ts.map +1 -0
  330. package/dist/types/log/index.d.ts +4 -0
  331. package/dist/types/log/index.d.ts.map +1 -0
  332. package/{logger/index.d.ts → dist/types/log/logger.d.ts} +1 -0
  333. package/dist/types/log/logger.d.ts.map +1 -0
  334. package/dist/types/log/types.d.ts +65 -0
  335. package/dist/types/log/types.d.ts.map +1 -0
  336. package/dist/types/preset/isomorphic/constants.d.ts +8 -0
  337. package/dist/types/preset/isomorphic/constants.d.ts.map +1 -0
  338. package/dist/types/preset/isomorphic/index.d.ts +2 -0
  339. package/dist/types/preset/isomorphic/index.d.ts.map +1 -0
  340. package/dist/types/preset/isomorphic/providers/index.d.ts +23 -0
  341. package/dist/types/preset/isomorphic/providers/index.d.ts.map +1 -0
  342. package/dist/types/preset/isomorphic/types.d.ts +35 -0
  343. package/dist/types/preset/isomorphic/types.d.ts.map +1 -0
  344. package/dist/types/preset/isomorphic/utils/index.d.ts +119 -0
  345. package/dist/types/preset/isomorphic/utils/index.d.ts.map +1 -0
  346. package/dist/types/preset/node/handler/index.d.ts +11 -0
  347. package/dist/types/preset/node/handler/index.d.ts.map +1 -0
  348. package/dist/types/preset/node/handler/providers/index.d.ts +36 -0
  349. package/dist/types/preset/node/handler/providers/index.d.ts.map +1 -0
  350. package/dist/types/preset/node/handler/utils/index.d.ts +47 -0
  351. package/dist/types/preset/node/handler/utils/index.d.ts.map +1 -0
  352. package/dist/types/preset/node/index.d.ts +4 -0
  353. package/dist/types/preset/node/index.d.ts.map +1 -0
  354. package/dist/types/preset/node/node/index.d.ts +9 -0
  355. package/dist/types/preset/node/node/index.d.ts.map +1 -0
  356. package/dist/types/preset/node/node/providers/index.d.ts +113 -0
  357. package/dist/types/preset/node/node/providers/index.d.ts.map +1 -0
  358. package/{http-client/middleware/tracing.d.ts → dist/types/preset/node/node/utils/http-client/index.d.ts} +13 -3
  359. package/dist/types/preset/node/node/utils/http-client/index.d.ts.map +1 -0
  360. package/dist/types/preset/node/node/utils/http-server/index.d.ts +8 -0
  361. package/dist/types/preset/node/node/utils/http-server/index.d.ts.map +1 -0
  362. package/dist/types/preset/node/node/utils/index.d.ts +3 -0
  363. package/dist/types/preset/node/node/utils/index.d.ts.map +1 -0
  364. package/dist/types/preset/node/types.d.ts +10 -0
  365. package/dist/types/preset/node/types.d.ts.map +1 -0
  366. package/dist/types/preset/web/index.d.ts +9 -0
  367. package/dist/types/preset/web/index.d.ts.map +1 -0
  368. package/dist/types/preset/web/providers/index.d.ts +36 -0
  369. package/dist/types/preset/web/providers/index.d.ts.map +1 -0
  370. package/dist/types/tokens.d.ts +83 -0
  371. package/dist/types/tokens.d.ts.map +1 -0
  372. package/dist/types/utils/axios/index.d.ts +5 -0
  373. package/dist/types/utils/axios/index.d.ts.map +1 -0
  374. package/dist/types/utils/axios/middleware/cookie.d.ts +9 -0
  375. package/dist/types/utils/axios/middleware/cookie.d.ts.map +1 -0
  376. package/dist/types/utils/axios/middleware/log.d.ts +28 -0
  377. package/dist/types/utils/axios/middleware/log.d.ts.map +1 -0
  378. package/dist/types/utils/axios/sauce/index.d.ts +43 -0
  379. package/dist/types/utils/axios/sauce/index.d.ts.map +1 -0
  380. package/dist/types/utils/axios/utils/index.d.ts +10 -0
  381. package/dist/types/utils/axios/utils/index.d.ts.map +1 -0
  382. package/dist/types/utils/express/handler/health-check.d.ts +7 -0
  383. package/dist/types/utils/express/handler/health-check.d.ts.map +1 -0
  384. package/dist/types/utils/express/index.d.ts +3 -0
  385. package/dist/types/utils/express/index.d.ts.map +1 -0
  386. package/dist/types/utils/express/utils/index.d.ts +8 -0
  387. package/dist/types/utils/express/utils/index.d.ts.map +1 -0
  388. package/dist/types/utils/function.d.ts +29 -0
  389. package/dist/types/utils/function.d.ts.map +1 -0
  390. package/dist/types/utils/index.d.ts +3 -0
  391. package/dist/types/utils/index.d.ts.map +1 -0
  392. package/{utils/number.d.ts → dist/types/utils/math.d.ts} +1 -0
  393. package/dist/types/utils/math.d.ts.map +1 -0
  394. package/dist/types/utils/react/error-handlers/index.d.ts +42 -0
  395. package/dist/types/utils/react/error-handlers/index.d.ts.map +1 -0
  396. package/dist/types/utils/react/index.d.ts +3 -0
  397. package/dist/types/utils/react/index.d.ts.map +1 -0
  398. package/dist/types/utils/redux/index.d.ts +4 -0
  399. package/dist/types/utils/redux/index.d.ts.map +1 -0
  400. package/dist/types/utils/redux/remote-data.d.ts +86 -0
  401. package/dist/types/utils/redux/remote-data.d.ts.map +1 -0
  402. package/dist/types/utils/redux-saga/index.d.ts +4 -0
  403. package/dist/types/utils/redux-saga/index.d.ts.map +1 -0
  404. package/dist/types/utils/redux-saga/middleware.d.ts +9 -0
  405. package/dist/types/utils/redux-saga/middleware.d.ts.map +1 -0
  406. package/{utils → dist/types/utils}/redux-saga/take-chain.d.ts +3 -0
  407. package/dist/types/utils/redux-saga/take-chain.d.ts.map +1 -0
  408. package/dist/types/utils/redux-saga/types.d.ts +37 -0
  409. package/dist/types/utils/redux-saga/types.d.ts.map +1 -0
  410. package/dist/types/utils/ssr/index.d.ts +42 -0
  411. package/dist/types/utils/ssr/index.d.ts.map +1 -0
  412. package/dist/types/utils/web/analytics/data-layer.d.ts +6 -0
  413. package/dist/types/utils/web/analytics/data-layer.d.ts.map +1 -0
  414. package/dist/types/utils/web/analytics/index.d.ts +3 -0
  415. package/dist/types/utils/web/analytics/index.d.ts.map +1 -0
  416. package/dist/types/utils/web/analytics/oko.d.ts +7 -0
  417. package/dist/types/utils/web/analytics/oko.d.ts.map +1 -0
  418. package/dist/types/utils/web/storage/index.d.ts +14 -0
  419. package/dist/types/utils/web/storage/index.d.ts.map +1 -0
  420. package/dist/types/utils/webpack/env/index.d.ts +19 -0
  421. package/dist/types/utils/webpack/env/index.d.ts.map +1 -0
  422. package/dist/types/utils/webpack/env/types.d.ts +12 -0
  423. package/dist/types/utils/webpack/env/types.d.ts.map +1 -0
  424. package/dist/types/utils/webpack/env/utils.d.ts +16 -0
  425. package/dist/types/utils/webpack/env/utils.d.ts.map +1 -0
  426. package/dist/types/utils/webpack/index.d.ts +7 -0
  427. package/dist/types/utils/webpack/index.d.ts.map +1 -0
  428. package/{utils → dist/types/utils}/webpack/module-federation/index.d.ts +10 -3
  429. package/dist/types/utils/webpack/module-federation/index.d.ts.map +1 -0
  430. package/{utils → dist/types/utils}/webpack/module-federation/types.d.ts +12 -3
  431. package/dist/types/utils/webpack/module-federation/types.d.ts.map +1 -0
  432. package/{utils → dist/types/utils}/webpack/module-federation/utils.d.ts +7 -0
  433. package/dist/types/utils/webpack/module-federation/utils.d.ts.map +1 -0
  434. package/http/package.json +6 -0
  435. package/log/package.json +6 -0
  436. package/package.json +232 -48
  437. package/preset/isomorphic/package.json +6 -0
  438. package/preset/isomorphic/providers/package.json +6 -0
  439. package/preset/isomorphic/utils/package.json +6 -0
  440. package/preset/node/handler/providers/package.json +6 -0
  441. package/preset/node/handler/utils/package.json +6 -0
  442. package/preset/node/node/providers/package.json +6 -0
  443. package/preset/node/node/utils/package.json +6 -0
  444. package/preset/node/package.json +6 -0
  445. package/preset/web/package.json +6 -0
  446. package/preset/web/providers/package.json +6 -0
  447. package/src/cache/index.ts +1 -0
  448. package/src/cache/types.ts +34 -0
  449. package/src/config/base.ts +18 -0
  450. package/src/config/index.ts +3 -0
  451. package/src/config/source.ts +23 -0
  452. package/src/config/types.ts +25 -0
  453. package/src/di/__test__/application.test.ts +258 -0
  454. package/src/di/__test__/container.test.ts +103 -0
  455. package/src/di/__test__/errors.test.ts +56 -0
  456. package/src/di/__test__/preset.test.ts +23 -0
  457. package/src/di/__test__/token.test.ts +25 -0
  458. package/src/di/application.ts +126 -0
  459. package/src/di/container.ts +60 -0
  460. package/src/di/errors.ts +59 -0
  461. package/{di/index.d.ts → src/di/index.ts} +2 -2
  462. package/src/di/preset.ts +32 -0
  463. package/src/di/token.ts +41 -0
  464. package/src/di/types.ts +105 -0
  465. package/src/http/__test__/errors.test.ts +35 -0
  466. package/src/http/errors.ts +42 -0
  467. package/src/http/index.ts +14 -0
  468. package/src/http/types.ts +8 -0
  469. package/src/log/__test__/errors.test.ts +13 -0
  470. package/src/log/__test__/logger.test.ts +24 -0
  471. package/src/log/errors.ts +33 -0
  472. package/src/log/handler/pino.ts +27 -0
  473. package/src/log/handler/sentry.ts +57 -0
  474. package/src/log/index.ts +12 -0
  475. package/src/log/logger.ts +30 -0
  476. package/src/log/types.ts +76 -0
  477. package/src/preset/isomorphic/constants.ts +7 -0
  478. package/src/preset/isomorphic/index.ts +7 -0
  479. package/src/preset/isomorphic/providers/index.ts +40 -0
  480. package/src/preset/isomorphic/types.ts +37 -0
  481. package/src/preset/isomorphic/utils/__test__/index.test.ts +541 -0
  482. package/src/preset/isomorphic/utils/index.ts +349 -0
  483. package/src/preset/node/handler/index.ts +46 -0
  484. package/src/preset/node/handler/providers/index.tsx +214 -0
  485. package/src/preset/node/handler/utils/index.tsx +110 -0
  486. package/src/preset/node/index.ts +3 -0
  487. package/src/preset/node/node/index.ts +73 -0
  488. package/src/preset/node/node/providers/index.ts +434 -0
  489. package/src/preset/node/node/utils/http-client/__test__/index.test.ts +232 -0
  490. package/src/preset/node/node/utils/http-client/index.ts +129 -0
  491. package/src/preset/node/node/utils/http-server/index.ts +17 -0
  492. package/src/preset/node/node/utils/index.ts +2 -0
  493. package/src/preset/node/types.ts +10 -0
  494. package/src/preset/web/index.ts +40 -0
  495. package/src/preset/web/providers/index.ts +108 -0
  496. package/src/tokens.ts +108 -0
  497. package/src/utils/axios/index.ts +12 -0
  498. package/src/utils/axios/middleware/__test__/cookie.test.ts +94 -0
  499. package/src/utils/axios/middleware/__test__/log.test.ts +121 -0
  500. package/src/utils/axios/middleware/cookie.ts +26 -0
  501. package/src/utils/axios/middleware/log.ts +52 -0
  502. package/src/utils/axios/sauce/index.ts +76 -0
  503. package/src/utils/axios/utils/__test__/index.test.ts +89 -0
  504. package/src/utils/axios/utils/index.ts +26 -0
  505. package/src/utils/express/handler/health-check.ts +13 -0
  506. package/src/utils/express/index.ts +2 -0
  507. package/src/utils/express/utils/index.ts +18 -0
  508. package/src/utils/function.ts +57 -0
  509. package/src/utils/index.ts +2 -0
  510. package/src/utils/math.ts +8 -0
  511. package/src/utils/react/error-handlers/__test__/__snapshots__/index.test.tsx.snap +27 -0
  512. package/src/utils/react/error-handlers/__test__/index.test.tsx +63 -0
  513. package/src/utils/react/error-handlers/index.tsx +68 -0
  514. package/src/utils/react/index.ts +3 -0
  515. package/src/utils/redux/__test__/remote-data.test.ts +172 -0
  516. package/src/utils/redux/index.ts +4 -0
  517. package/src/utils/redux/remote-data.ts +138 -0
  518. package/src/utils/redux-saga/__test__/take-chain.test.ts +141 -0
  519. package/src/utils/redux-saga/index.ts +3 -0
  520. package/src/utils/redux-saga/middleware.ts +168 -0
  521. package/src/utils/redux-saga/take-chain.ts +67 -0
  522. package/src/utils/redux-saga/types.ts +43 -0
  523. package/src/utils/ssr/index.tsx +78 -0
  524. package/src/utils/web/analytics/__test__/data-layer.test.ts +50 -0
  525. package/src/utils/web/analytics/__test__/oko.test.ts +50 -0
  526. package/src/utils/web/analytics/data-layer.ts +12 -0
  527. package/src/utils/web/analytics/index.ts +2 -0
  528. package/src/utils/web/analytics/oko.ts +14 -0
  529. package/src/utils/web/storage/index.ts +84 -0
  530. package/src/utils/webpack/env/index.ts +91 -0
  531. package/src/utils/webpack/env/types.ts +14 -0
  532. package/src/utils/webpack/env/utils.ts +53 -0
  533. package/src/utils/webpack/index.ts +7 -0
  534. package/src/utils/webpack/module-federation/__test__/__snapshots__/utils.test.ts.snap +124 -0
  535. package/src/utils/webpack/module-federation/__test__/index.test.ts +311 -0
  536. package/src/utils/webpack/module-federation/__test__/utils.test.ts +28 -0
  537. package/src/utils/webpack/module-federation/index.ts +102 -0
  538. package/src/utils/webpack/module-federation/types.ts +54 -0
  539. package/src/utils/webpack/module-federation/utils.ts +104 -0
  540. package/utils/axios/package.json +6 -0
  541. package/utils/express/package.json +6 -0
  542. package/utils/package.json +6 -0
  543. package/utils/react/package.json +6 -0
  544. package/utils/redux/package.json +6 -0
  545. package/utils/redux-saga/package.json +6 -0
  546. package/utils/ssr/package.json +6 -0
  547. package/utils/web/analytics/package.json +6 -0
  548. package/utils/webpack/package.json +6 -0
  549. package/cache/types.d.ts +0 -7
  550. package/cache/types.js +0 -3
  551. package/cache/types.js.map +0 -1
  552. package/config/base.js +0 -20
  553. package/config/base.js.map +0 -1
  554. package/config/browser.d.ts +0 -6
  555. package/config/browser.js +0 -13
  556. package/config/browser.js.map +0 -1
  557. package/config/node.d.ts +0 -6
  558. package/config/node.js +0 -19
  559. package/config/node.js.map +0 -1
  560. package/config/types.d.ts +0 -7
  561. package/config/types.js +0 -3
  562. package/config/types.js.map +0 -1
  563. package/config/utils.d.ts +0 -5
  564. package/config/utils.js +0 -12
  565. package/config/utils.js.map +0 -1
  566. package/di/application.js +0 -71
  567. package/di/application.js.map +0 -1
  568. package/di/container.js +0 -49
  569. package/di/container.js.map +0 -1
  570. package/di/errors.d.ts +0 -21
  571. package/di/errors.js +0 -33
  572. package/di/errors.js.map +0 -1
  573. package/di/index.js +0 -16
  574. package/di/index.js.map +0 -1
  575. package/di/preset.d.ts +0 -9
  576. package/di/preset.js +0 -25
  577. package/di/preset.js.map +0 -1
  578. package/di/token.js +0 -17
  579. package/di/token.js.map +0 -1
  580. package/di/types.d.ts +0 -32
  581. package/di/types.js +0 -3
  582. package/di/types.js.map +0 -1
  583. package/error-tracker/browser.d.ts +0 -8
  584. package/error-tracker/browser.js +0 -40
  585. package/error-tracker/browser.js.map +0 -1
  586. package/error-tracker/node.d.ts +0 -8
  587. package/error-tracker/node.js +0 -40
  588. package/error-tracker/node.js.map +0 -1
  589. package/error-tracker/types.d.ts +0 -18
  590. package/error-tracker/types.js +0 -3
  591. package/error-tracker/types.js.map +0 -1
  592. package/error-tracker/utils.d.ts +0 -12
  593. package/error-tracker/utils.js +0 -19
  594. package/error-tracker/utils.js.map +0 -1
  595. package/http-client/middleware/cookie.d.ts +0 -19
  596. package/http-client/middleware/cookie.js +0 -62
  597. package/http-client/middleware/cookie.js.map +0 -1
  598. package/http-client/middleware/tracing.js +0 -67
  599. package/http-client/middleware/tracing.js.map +0 -1
  600. package/http-client/sauce/index.d.ts +0 -27
  601. package/http-client/sauce/index.js +0 -33
  602. package/http-client/sauce/index.js.map +0 -1
  603. package/http-client/types.d.ts +0 -6
  604. package/http-client/types.js +0 -3
  605. package/http-client/types.js.map +0 -1
  606. package/http-client/utils.d.ts +0 -9
  607. package/http-client/utils.js +0 -20
  608. package/http-client/utils.js.map +0 -1
  609. package/http-server/constants.d.ts +0 -4
  610. package/http-server/constants.js +0 -8
  611. package/http-server/constants.js.map +0 -1
  612. package/http-server/handler/health-check.d.ts +0 -6
  613. package/http-server/handler/health-check.js +0 -15
  614. package/http-server/handler/health-check.js.map +0 -1
  615. package/http-server/middleware/logging.d.ts +0 -10
  616. package/http-server/middleware/logging.js +0 -31
  617. package/http-server/middleware/logging.js.map +0 -1
  618. package/http-server/middleware/metrics.d.ts +0 -23
  619. package/http-server/middleware/metrics.js +0 -60
  620. package/http-server/middleware/metrics.js.map +0 -1
  621. package/http-server/middleware/tracing.d.ts +0 -14
  622. package/http-server/middleware/tracing.js +0 -51
  623. package/http-server/middleware/tracing.js.map +0 -1
  624. package/http-server/template/index.d.ts +0 -1
  625. package/http-server/template/index.js +0 -36
  626. package/http-server/template/index.js.map +0 -1
  627. package/http-server/types.d.ts +0 -33
  628. package/http-server/types.js +0 -3
  629. package/http-server/types.js.map +0 -1
  630. package/http-server/utils.d.ts +0 -30
  631. package/http-server/utils.js +0 -100
  632. package/http-server/utils.js.map +0 -1
  633. package/logger/handler/console.d.ts +0 -8
  634. package/logger/handler/console.js +0 -36
  635. package/logger/handler/console.js.map +0 -1
  636. package/logger/handler/sentry.d.ts +0 -8
  637. package/logger/handler/sentry.js +0 -36
  638. package/logger/handler/sentry.js.map +0 -1
  639. package/logger/index.js +0 -31
  640. package/logger/index.js.map +0 -1
  641. package/logger/types.d.ts +0 -24
  642. package/logger/types.js +0 -3
  643. package/logger/types.js.map +0 -1
  644. package/metrics/constants.d.ts +0 -4
  645. package/metrics/constants.js +0 -8
  646. package/metrics/constants.js.map +0 -1
  647. package/metrics/node.d.ts +0 -18
  648. package/metrics/node.js +0 -74
  649. package/metrics/node.js.map +0 -1
  650. package/preset/node/index.d.ts +0 -19
  651. package/preset/node/index.js +0 -121
  652. package/preset/node/index.js.map +0 -1
  653. package/preset/node/response.d.ts +0 -15
  654. package/preset/node/response.js +0 -77
  655. package/preset/node/response.js.map +0 -1
  656. package/saga-runner/index.d.ts +0 -8
  657. package/saga-runner/index.js +0 -79
  658. package/saga-runner/index.js.map +0 -1
  659. package/saga-runner/types.d.ts +0 -10
  660. package/saga-runner/types.js +0 -3
  661. package/saga-runner/types.js.map +0 -1
  662. package/tokens.d.ts +0 -48
  663. package/tokens.js +0 -49
  664. package/tokens.js.map +0 -1
  665. package/tracing/utils.d.ts +0 -9
  666. package/tracing/utils.js +0 -22
  667. package/tracing/utils.js.map +0 -1
  668. package/utils/browser/analytics/data-layer.d.ts +0 -5
  669. package/utils/browser/analytics/data-layer.js +0 -15
  670. package/utils/browser/analytics/data-layer.js.map +0 -1
  671. package/utils/browser/analytics/oko.d.ts +0 -12
  672. package/utils/browser/analytics/oko.js +0 -39
  673. package/utils/browser/analytics/oko.js.map +0 -1
  674. package/utils/browser/storage/index.d.ts +0 -4
  675. package/utils/browser/storage/index.js +0 -63
  676. package/utils/browser/storage/index.js.map +0 -1
  677. package/utils/number.js.map +0 -1
  678. package/utils/react/error-handlers/index.d.ts +0 -38
  679. package/utils/react/error-handlers/index.js +0 -47
  680. package/utils/react/error-handlers/index.js.map +0 -1
  681. package/utils/redux/remote-data.d.ts +0 -23
  682. package/utils/redux/remote-data.js +0 -28
  683. package/utils/redux/remote-data.js.map +0 -1
  684. package/utils/redux-saga/take-chain.js +0 -56
  685. package/utils/redux-saga/take-chain.js.map +0 -1
  686. package/utils/webpack/module-federation/index.js +0 -74
  687. package/utils/webpack/module-federation/index.js.map +0 -1
  688. package/utils/webpack/module-federation/types.js +0 -3
  689. package/utils/webpack/module-federation/types.js.map +0 -1
  690. package/utils/webpack/module-federation/utils.js +0 -36
  691. package/utils/webpack/module-federation/utils.js.map +0 -1
@@ -0,0 +1,378 @@
1
+ import { SsrBridge } from "./../../../../utils/ssr/index.js";
2
+ import { createConfigSource } from "./../../../../config/index.js";
3
+ import { createLogger } from "./../../../../log/index.js";
4
+ import { createPinoHandler } from "../../../../log/handler/pino.js";
5
+ import { createSentryHandler } from "../../../../log/handler/sentry.js";
6
+ import { HttpApiHostPool } from "./../../../isomorphic/utils/index.js";
7
+ import { KnownToken } from "../../../../tokens.js";
8
+ import { toMilliseconds } from "./../../../../utils/index.js";
9
+ import { RESPONSE_EVENT_TYPE } from "../../../isomorphic/constants.js";
10
+ import { getClientIp } from "./../utils/http-server/index.js";
11
+
12
+ // Node.js specific packages
13
+ import os from 'node:os';
14
+ import path from 'node:path';
15
+
16
+ // Node.js libraries (not isomorphic)
17
+ import { config as applyDotenv } from 'dotenv';
18
+ import { init, getCurrentHub, Handlers } from '@sentry/node';
19
+ import * as PromClient from 'prom-client';
20
+ import Express from 'express';
21
+ import pino from 'pino';
22
+ import PinoPretty from 'pino-pretty';
23
+
24
+ // opentelemetry
25
+ import { propagation, ROOT_CONTEXT, trace } from '@opentelemetry/api';
26
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
27
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
28
+ import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
29
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
30
+ import { Resource } from '@opentelemetry/resources';
31
+ import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
32
+ import { create } from 'middleware-axios';
33
+
34
+ /**
35
+ * Провайдер источника конфигурации.
36
+ * @return Источник конфигурации.
37
+ */
38
+ export function provideConfigSource() {
39
+ const envName = process.env.NODE_ENV;
40
+
41
+ // подключаем соответствующий среде файл со значениями по умолчанию
42
+ if (envName) {
43
+ applyDotenv({
44
+ path: path.resolve(process.cwd(), `./.env.${envName}`)
45
+ });
46
+ }
47
+ return createConfigSource(process.env);
48
+ }
49
+
50
+ /**
51
+ * Провайдер Logger'а.
52
+ * @param resolve Функция для получения зависимости по токену.
53
+ * @return Logger.
54
+ */
55
+ export function provideLogger(resolve) {
56
+ const logger = createLogger();
57
+
58
+ // @todo возможно надо придумать как не давать вызывать провайдеры внутри провайдеров
59
+ logger.subscribe(providePinoHandler(resolve));
60
+ logger.subscribe(provideSentryHandler(resolve));
61
+ return logger;
62
+ }
63
+
64
+ /**
65
+ * Провайдер обработчика логирования для Sentry.
66
+ * @param resolve Функция для получения зависимости по токену.
67
+ * @return Обработчик.
68
+ */
69
+ export function provideSentryHandler(resolve) {
70
+ const source = resolve(KnownToken.Config.source);
71
+
72
+ // экспериментально пробуем не использовать вручную созданный клиент
73
+ init({
74
+ dsn: source.require('SENTRY_DSN'),
75
+ release: source.require('SENTRY_RELEASE'),
76
+ environment: source.require('SENTRY_ENVIRONMENT')
77
+ });
78
+
79
+ // ВАЖНО: передаем функцию чтобы брать текущий hub в момент вызова метода logger'а
80
+ // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам
81
+ return createSentryHandler(getCurrentHub);
82
+ }
83
+
84
+ /**
85
+ * Провайдер обработчика логирования для Pino.
86
+ * @param resolve Функция для получения зависимости по токену.
87
+ * @return Обработчик.
88
+ */
89
+ export function providePinoHandler(resolve) {
90
+ const config = resolve(KnownToken.Config.base);
91
+ const pinoLogger = pino(config.env === 'production' ? {
92
+ formatters: {
93
+ // ВАЖНО: для Fluent необходимо наличие поля level: string
94
+ level: label => ({
95
+ level: label
96
+ })
97
+ }
98
+ } : PinoPretty({
99
+ colorize: true,
100
+ translateTime: 'yyyy-mm-dd HH:MM:ss.l o'
101
+ }));
102
+ return createPinoHandler(pinoLogger);
103
+ }
104
+
105
+ /**
106
+ * Провайдер объекта Tracer.
107
+ * @param resolve Функция для получения зависимости по токену.
108
+ * @return Tracer.
109
+ */
110
+ export function provideTracer(resolve) {
111
+ const config = resolve(KnownToken.Config.base);
112
+ const provider = resolve(KnownToken.Tracing.tracerProvider);
113
+ return provider.getTracer(config.appName, config.appVersion);
114
+ }
115
+
116
+ /**
117
+ * Провайдер объекта SpanExporter.
118
+ * @param resolve Функция для получения зависимости по токену.
119
+ * @return SpanExporter.
120
+ */
121
+ export function provideSpanExporter(resolve) {
122
+ const source = resolve(KnownToken.Config.source);
123
+ return new OTLPTraceExporter({
124
+ url: source.require('JAEGER_AGENT_URL')
125
+ });
126
+ }
127
+
128
+ /**
129
+ * Провайдер объекта BasicTracerProvider.
130
+ * @param resolve Функция для получения зависимости по токену.
131
+ * @return BasicTracerProvider.
132
+ */
133
+ export function provideTracerProvider(resolve) {
134
+ const exporter = resolve(KnownToken.Tracing.spanExporter);
135
+ const resource = resolve(KnownToken.Tracing.tracerProviderResource);
136
+ const provider = new NodeTracerProvider({
137
+ resource
138
+ });
139
+ provider.addSpanProcessor(new BatchSpanProcessor(exporter));
140
+ provider.register({
141
+ propagator: new JaegerPropagator()
142
+ });
143
+ return provider;
144
+ }
145
+
146
+ /**
147
+ * Провайдер объекта Resource.
148
+ * @param resolve Функция для получения зависимости по токену.
149
+ * @return Resource.
150
+ */
151
+ export function provideTracerProviderResource(resolve) {
152
+ const config = resolve(KnownToken.Config.base);
153
+ return new Resource({
154
+ [SemanticResourceAttributes.HOST_NAME]: os.hostname(),
155
+ [SemanticResourceAttributes.SERVICE_NAME]: config.appName,
156
+ [SemanticResourceAttributes.SERVICE_VERSION]: config.appVersion,
157
+ [SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: config.env
158
+ });
159
+ }
160
+
161
+ /**
162
+ * Провайдер фабрики http-клиентов.
163
+ * @return Фабрика.
164
+ */
165
+ export function provideHttpClientFactory() {
166
+ return create;
167
+ }
168
+
169
+ /**
170
+ * Провайдер фабрики http-серверов.
171
+ * @return Фабрика.
172
+ */
173
+ export function provideHttpServerFactory() {
174
+ return Express;
175
+ }
176
+
177
+ /**
178
+ * Провайдер промежуточного слоя учета входящих http-запросов.
179
+ * @return Промежуточный слой.
180
+ */
181
+ export function provideHttpServerRequestMiddleware() {
182
+ return Handlers.requestHandler();
183
+ }
184
+
185
+ /**
186
+ * Провайдер промежуточного слоя логирования входящих http-запросов.
187
+ * @param resolve Функция для получения зависимости по токену.
188
+ * @return Промежуточный слой.
189
+ */
190
+ export function provideHttpServerLogMiddleware(resolve) {
191
+ const config = resolve(KnownToken.Config.base);
192
+ const logger = resolve(KnownToken.logger);
193
+ return (req, res, next) => {
194
+ const start = process.hrtime.bigint();
195
+ const remoteIp = getClientIp(req) ?? '';
196
+ const startMsg = {
197
+ type: 'http.request[incoming]',
198
+ version: config.appVersion,
199
+ route: req.originalUrl,
200
+ method: req.method,
201
+ remote_ip: remoteIp
202
+ };
203
+ logger.info(startMsg);
204
+ res.once('finish', () => {
205
+ const finish = process.hrtime.bigint();
206
+ const finishMsg = {
207
+ type: 'http.response[outgoing]',
208
+ version: config.appVersion,
209
+ route: req.originalUrl,
210
+ method: req.method,
211
+ status: res.statusCode,
212
+ remote_ip: remoteIp,
213
+ latency: toMilliseconds(finish - start)
214
+ };
215
+ logger.info(finishMsg);
216
+ });
217
+ next();
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Провайдер промежуточного слоя сбора метрик входящих http-запросов.
223
+ * @param resolve Функция для получения зависимости по токену.
224
+ * @return Промежуточный слой.
225
+ */
226
+ export function provideHttpServerMetricsMiddleware(resolve) {
227
+ const config = resolve(KnownToken.Config.base);
228
+ const ConventionalLabels = {
229
+ HTTP_RESPONSE: ['version', 'route', 'code', 'method'],
230
+ SSR: ['version', 'route', 'method']
231
+ };
232
+ const requestCount = new PromClient.Counter({
233
+ name: 'http_request_count',
234
+ help: 'Incoming HTTP request count',
235
+ labelNames: ConventionalLabels.HTTP_RESPONSE
236
+ });
237
+ const responseDuration = new PromClient.Histogram({
238
+ name: 'http_response_duration_ms',
239
+ help: 'Duration of incoming HTTP requests in ms',
240
+ labelNames: ConventionalLabels.HTTP_RESPONSE,
241
+ buckets: [30, 100, 200, 500, 1000, 2500, 5000, 10000]
242
+ });
243
+ const renderDuration = new PromClient.Histogram({
244
+ name: 'render_duration_ms',
245
+ help: 'Duration of SSR ms',
246
+ labelNames: ConventionalLabels.SSR,
247
+ buckets: [0.1, 15, 50, 100, 250, 500, 800, 1500]
248
+ });
249
+
250
+ /**
251
+ * Функция формирования labels.
252
+ * @param req Request.
253
+ * @param res Response.
254
+ * @return Labels.
255
+ */
256
+ const getLabels = (req, res) => ({
257
+ version: config.appVersion,
258
+ route: req.baseUrl + req.path,
259
+ code: res.statusCode,
260
+ method: req.method
261
+ });
262
+ return (req, res, next) => {
263
+ const responseStart = process.hrtime.bigint();
264
+ requestCount.inc(getLabels(req, res), 1);
265
+ res.once(RESPONSE_EVENT_TYPE.renderStart, () => {
266
+ const renderStart = process.hrtime.bigint();
267
+ res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {
268
+ const renderFinish = process.hrtime.bigint();
269
+ renderDuration.observe({
270
+ version: config.appVersion,
271
+ method: req.method,
272
+ route: req.baseUrl + req.path
273
+ }, toMilliseconds(renderFinish - renderStart));
274
+ });
275
+ });
276
+ res.once('finish', () => {
277
+ const responseFinish = process.hrtime.bigint();
278
+ responseDuration.observe(getLabels(req, res), toMilliseconds(responseFinish - responseStart));
279
+ });
280
+ next();
281
+ };
282
+ }
283
+
284
+ /**
285
+ * Провайдер промежуточного слоя трассировки входящих http-запросов.
286
+ * @param resolve Функция для получения зависимости по токену.
287
+ * @return Промежуточный слой.
288
+ */
289
+ export function provideHttpServerTracingMiddleware(resolve) {
290
+ const tracer = resolve(KnownToken.Tracing.tracer);
291
+
292
+ /**
293
+ * Возвращает набор стандартных атрибутов для спана.
294
+ * @param req Входящий http-запрос.
295
+ * @return Атрибуты.
296
+ */
297
+ const getConventionalRequestAttrs = req => {
298
+ const result = {
299
+ 'request.path': req.originalUrl
300
+ };
301
+ for (const headerName in req.headers) {
302
+ if (headerName.toLowerCase().startsWith('simaland-')) {
303
+ result[headerName] = req.header(headerName);
304
+ }
305
+ }
306
+ return result;
307
+ };
308
+ return (req, res, next) => {
309
+ const externalContext = propagation.extract(ROOT_CONTEXT, req.headers);
310
+ const rootSpan = tracer.startSpan('response', undefined, externalContext);
311
+ rootSpan.setAttributes(getConventionalRequestAttrs(req));
312
+ const rootContext = trace.setSpan(externalContext, rootSpan);
313
+ res.locals.tracing = {
314
+ rootSpan,
315
+ rootContext,
316
+ renderSpan: null
317
+ };
318
+ res.once(RESPONSE_EVENT_TYPE.renderStart, () => {
319
+ res.locals.tracing.renderSpan = tracer.startSpan('render', undefined, rootContext);
320
+ res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {
321
+ res.locals.tracing.renderSpan.end();
322
+ });
323
+ });
324
+ res.once('finish', () => {
325
+ rootSpan.end();
326
+ });
327
+ next();
328
+ };
329
+ }
330
+
331
+ /**
332
+ * Провайдер промежуточного слоя обработки ошибок в рамках ответ на http-запросы.
333
+ * @return Промежуточный слой.
334
+ */
335
+ export function provideHttpServerErrorMiddleware() {
336
+ return Handlers.errorHandler();
337
+ }
338
+
339
+ /**
340
+ * Провайдер серверной части "моста" для передачи данных между сервером и клиентом.
341
+ * @param resolve Функция для получения зависимости по токену.
342
+ * @return Серверная часть "моста".
343
+ */
344
+ export function provideSsrBridgeServerSide(resolve) {
345
+ const config = resolve(KnownToken.Config.base);
346
+ return SsrBridge.prepare(config.appName);
347
+ }
348
+
349
+ /**
350
+ * Провайдер известных http-хостов.
351
+ * @param resolve Функция для получения зависимости по токену.
352
+ * @return Пул известных http-хостов.
353
+ */
354
+ export function provideKnownHttpApiHosts(resolve) {
355
+ const source = resolve(KnownToken.Config.source);
356
+ return new HttpApiHostPool({
357
+ ilium: 'API_URL_ILIUM',
358
+ simaV3: 'API_URL_SIMALAND_V3',
359
+ simaV4: 'API_URL_SIMALAND_V4',
360
+ simaV6: 'API_URL_SIMALAND_V6'
361
+ }, source);
362
+ }
363
+
364
+ /**
365
+ * Провайдер express-приложения метрик.
366
+ * @return Пул известных http-хостов.
367
+ */
368
+ export function provideMetricsHttpApp() {
369
+ PromClient.collectDefaultMetrics();
370
+ const app = Express();
371
+ app.get('/', async function (req, res) {
372
+ const metrics = await PromClient.register.metrics();
373
+ res.setHeader('Content-Type', PromClient.register.contentType);
374
+ res.send(metrics);
375
+ });
376
+ return app;
377
+ }
378
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["SsrBridge","createConfigSource","createLogger","createPinoHandler","createSentryHandler","HttpApiHostPool","KnownToken","toMilliseconds","RESPONSE_EVENT_TYPE","getClientIp","os","path","config","applyDotenv","init","getCurrentHub","Handlers","PromClient","Express","pino","PinoPretty","propagation","ROOT_CONTEXT","trace","BatchSpanProcessor","OTLPTraceExporter","JaegerPropagator","NodeTracerProvider","Resource","SemanticResourceAttributes","create","provideConfigSource","envName","process","env","NODE_ENV","resolve","cwd","provideLogger","logger","subscribe","providePinoHandler","provideSentryHandler","source","Config","dsn","require","release","environment","base","pinoLogger","formatters","level","label","colorize","translateTime","provideTracer","provider","Tracing","tracerProvider","getTracer","appName","appVersion","provideSpanExporter","url","provideTracerProvider","exporter","spanExporter","resource","tracerProviderResource","addSpanProcessor","register","propagator","provideTracerProviderResource","HOST_NAME","hostname","SERVICE_NAME","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT","provideHttpClientFactory","provideHttpServerFactory","provideHttpServerRequestMiddleware","requestHandler","provideHttpServerLogMiddleware","req","res","next","start","hrtime","bigint","remoteIp","startMsg","type","version","route","originalUrl","method","remote_ip","info","once","finish","finishMsg","status","statusCode","latency","provideHttpServerMetricsMiddleware","ConventionalLabels","HTTP_RESPONSE","SSR","requestCount","Counter","name","help","labelNames","responseDuration","Histogram","buckets","renderDuration","getLabels","baseUrl","code","responseStart","inc","renderStart","renderFinish","observe","responseFinish","provideHttpServerTracingMiddleware","tracer","getConventionalRequestAttrs","result","headerName","headers","toLowerCase","startsWith","header","externalContext","extract","rootSpan","startSpan","undefined","setAttributes","rootContext","setSpan","locals","tracing","renderSpan","end","provideHttpServerErrorMiddleware","errorHandler","provideSsrBridgeServerSide","prepare","provideKnownHttpApiHosts","ilium","simaV3","simaV4","simaV6","provideMetricsHttpApp","collectDefaultMetrics","app","get","metrics","setHeader","contentType","send"],"sources":["../../../../../../src/preset/node/node/providers/index.ts"],"sourcesContent":["import type { ConventionalFluentInfo, Logger, LogHandler } from '../../../../log/types';\nimport { BridgeServerSide, SsrBridge } from '../../../../utils/ssr';\nimport { ConfigSource, createConfigSource } from '../../../../config';\nimport { createLogger } from '../../../../log';\nimport { createPinoHandler } from '../../../../log/handler/pino';\nimport { createSentryHandler } from '../../../../log/handler/sentry';\nimport { HttpApiHostPool } from '../../../isomorphic/utils';\nimport { KnownToken } from '../../../../tokens';\nimport { Resolve } from '../../../../di';\nimport { StrictMap, KnownHttpApiKey } from '../../../isomorphic/types';\nimport { toMilliseconds } from '../../../../utils';\nimport { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';\nimport { getClientIp } from '../utils/http-server';\n\n// Node.js specific packages\nimport os from 'node:os';\nimport path from 'node:path';\n\n// Node.js libraries (not isomorphic)\nimport { config as applyDotenv } from 'dotenv';\nimport { init, getCurrentHub, Handlers } from '@sentry/node';\nimport * as PromClient from 'prom-client';\nimport Express, { Application, ErrorRequestHandler, Handler, Request, Response } from 'express';\nimport pino from 'pino';\nimport PinoPretty from 'pino-pretty';\n\n// opentelemetry\nimport { propagation, ROOT_CONTEXT, trace, type Tracer } from '@opentelemetry/api';\nimport {\n BasicTracerProvider,\n BatchSpanProcessor,\n SpanExporter,\n} from '@opentelemetry/sdk-trace-base';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { Resource } from '@opentelemetry/resources';\nimport { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';\nimport { create } from 'middleware-axios';\n\n/**\n * Провайдер источника конфигурации.\n * @return Источник конфигурации.\n */\nexport function provideConfigSource(): ConfigSource {\n const envName = process.env.NODE_ENV;\n\n // подключаем соответствующий среде файл со значениями по умолчанию\n if (envName) {\n applyDotenv({ path: path.resolve(process.cwd(), `./.env.${envName}`) });\n }\n\n return createConfigSource(process.env);\n}\n\n/**\n * Провайдер Logger'а.\n * @param resolve Функция для получения зависимости по токену.\n * @return Logger.\n */\nexport function provideLogger(resolve: Resolve): Logger {\n const logger = createLogger();\n\n // @todo возможно надо придумать как не давать вызывать провайдеры внутри провайдеров\n logger.subscribe(providePinoHandler(resolve));\n logger.subscribe(provideSentryHandler(resolve));\n\n return logger;\n}\n\n/**\n * Провайдер обработчика логирования для Sentry.\n * @param resolve Функция для получения зависимости по токену.\n * @return Обработчик.\n */\nexport function provideSentryHandler(resolve: Resolve): LogHandler {\n const source = resolve(KnownToken.Config.source);\n\n // экспериментально пробуем не использовать вручную созданный клиент\n init({\n dsn: source.require('SENTRY_DSN'),\n release: source.require('SENTRY_RELEASE'),\n environment: source.require('SENTRY_ENVIRONMENT'),\n });\n\n // ВАЖНО: передаем функцию чтобы брать текущий hub в момент вызова метода logger'а\n // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам\n return createSentryHandler(getCurrentHub);\n}\n\n/**\n * Провайдер обработчика логирования для Pino.\n * @param resolve Функция для получения зависимости по токену.\n * @return Обработчик.\n */\nexport function providePinoHandler(resolve: Resolve): LogHandler {\n const config = resolve(KnownToken.Config.base);\n\n const pinoLogger = pino(\n config.env === 'production'\n ? {\n formatters: {\n // ВАЖНО: для Fluent необходимо наличие поля level: string\n level: label => ({ level: label }),\n },\n }\n : PinoPretty({\n colorize: true,\n translateTime: 'yyyy-mm-dd HH:MM:ss.l o',\n }),\n );\n\n return createPinoHandler(pinoLogger);\n}\n\n/**\n * Провайдер объекта Tracer.\n * @param resolve Функция для получения зависимости по токену.\n * @return Tracer.\n */\nexport function provideTracer(resolve: Resolve): Tracer {\n const config = resolve(KnownToken.Config.base);\n const provider = resolve(KnownToken.Tracing.tracerProvider);\n\n return provider.getTracer(config.appName, config.appVersion);\n}\n\n/**\n * Провайдер объекта SpanExporter.\n * @param resolve Функция для получения зависимости по токену.\n * @return SpanExporter.\n */\nexport function provideSpanExporter(resolve: Resolve): SpanExporter {\n const source = resolve(KnownToken.Config.source);\n\n return new OTLPTraceExporter({\n url: source.require('JAEGER_AGENT_URL'),\n });\n}\n\n/**\n * Провайдер объекта BasicTracerProvider.\n * @param resolve Функция для получения зависимости по токену.\n * @return BasicTracerProvider.\n */\nexport function provideTracerProvider(resolve: Resolve): BasicTracerProvider {\n const exporter = resolve(KnownToken.Tracing.spanExporter);\n const resource = resolve(KnownToken.Tracing.tracerProviderResource);\n\n const provider = new NodeTracerProvider({ resource });\n\n provider.addSpanProcessor(new BatchSpanProcessor(exporter));\n provider.register({ propagator: new JaegerPropagator() });\n\n return provider;\n}\n\n/**\n * Провайдер объекта Resource.\n * @param resolve Функция для получения зависимости по токену.\n * @return Resource.\n */\nexport function provideTracerProviderResource(resolve: Resolve): Resource {\n const config = resolve(KnownToken.Config.base);\n\n return new Resource({\n [SemanticResourceAttributes.HOST_NAME]: os.hostname(),\n [SemanticResourceAttributes.SERVICE_NAME]: config.appName,\n [SemanticResourceAttributes.SERVICE_VERSION]: config.appVersion,\n [SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: config.env,\n });\n}\n\n/**\n * Провайдер фабрики http-клиентов.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory() {\n return create;\n}\n\n/**\n * Провайдер фабрики http-серверов.\n * @return Фабрика.\n */\nexport function provideHttpServerFactory() {\n return Express;\n}\n\n/**\n * Провайдер промежуточного слоя учета входящих http-запросов.\n * @return Промежуточный слой.\n */\nexport function provideHttpServerRequestMiddleware(): Handler {\n return Handlers.requestHandler();\n}\n\n/**\n * Провайдер промежуточного слоя логирования входящих http-запросов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Промежуточный слой.\n */\nexport function provideHttpServerLogMiddleware(resolve: Resolve): Handler {\n const config = resolve(KnownToken.Config.base);\n const logger = resolve(KnownToken.logger);\n\n return (req, res, next) => {\n const start = process.hrtime.bigint();\n const remoteIp = getClientIp(req) ?? '';\n\n const startMsg: Omit<ConventionalFluentInfo, 'latency' | 'status'> & { type: string } = {\n type: 'http.request[incoming]',\n version: config.appVersion,\n route: req.originalUrl,\n method: req.method,\n remote_ip: remoteIp,\n };\n\n logger.info(startMsg);\n\n res.once('finish', () => {\n const finish = process.hrtime.bigint();\n\n const finishMsg: ConventionalFluentInfo & { type: string } = {\n type: 'http.response[outgoing]',\n version: config.appVersion,\n route: req.originalUrl,\n method: req.method,\n status: res.statusCode,\n remote_ip: remoteIp,\n latency: toMilliseconds(finish - start),\n };\n\n logger.info(finishMsg);\n });\n\n next();\n };\n}\n\n/**\n * Провайдер промежуточного слоя сбора метрик входящих http-запросов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Промежуточный слой.\n */\nexport function provideHttpServerMetricsMiddleware(resolve: Resolve): Handler {\n const config = resolve(KnownToken.Config.base);\n\n const ConventionalLabels = {\n HTTP_RESPONSE: ['version', 'route', 'code', 'method'],\n SSR: ['version', 'route', 'method'],\n } as const;\n\n const requestCount = new PromClient.Counter({\n name: 'http_request_count',\n help: 'Incoming HTTP request count',\n labelNames: ConventionalLabels.HTTP_RESPONSE,\n });\n\n const responseDuration = new PromClient.Histogram({\n name: 'http_response_duration_ms',\n help: 'Duration of incoming HTTP requests in ms',\n labelNames: ConventionalLabels.HTTP_RESPONSE,\n buckets: [30, 100, 200, 500, 1000, 2500, 5000, 10000],\n });\n\n const renderDuration = new PromClient.Histogram({\n name: 'render_duration_ms',\n help: 'Duration of SSR ms',\n labelNames: ConventionalLabels.SSR,\n buckets: [0.1, 15, 50, 100, 250, 500, 800, 1500],\n });\n\n /**\n * Функция формирования labels.\n * @param req Request.\n * @param res Response.\n * @return Labels.\n */\n const getLabels = (\n req: Request,\n res: Response,\n ): Record<(typeof ConventionalLabels.HTTP_RESPONSE)[number], string | number> => ({\n version: config.appVersion,\n route: req.baseUrl + req.path,\n code: res.statusCode,\n method: req.method,\n });\n\n return (req, res, next) => {\n const responseStart = process.hrtime.bigint();\n\n requestCount.inc(getLabels(req, res), 1);\n\n res.once(RESPONSE_EVENT_TYPE.renderStart, () => {\n const renderStart = process.hrtime.bigint();\n\n res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {\n const renderFinish = process.hrtime.bigint();\n\n renderDuration.observe(\n {\n version: config.appVersion,\n method: req.method,\n route: req.baseUrl + req.path,\n },\n toMilliseconds(renderFinish - renderStart),\n );\n });\n });\n\n res.once('finish', () => {\n const responseFinish = process.hrtime.bigint();\n\n responseDuration.observe(getLabels(req, res), toMilliseconds(responseFinish - responseStart));\n });\n\n next();\n };\n}\n\n/**\n * Провайдер промежуточного слоя трассировки входящих http-запросов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Промежуточный слой.\n */\nexport function provideHttpServerTracingMiddleware(resolve: Resolve): Handler {\n const tracer = resolve(KnownToken.Tracing.tracer);\n\n /**\n * Возвращает набор стандартных атрибутов для спана.\n * @param req Входящий http-запрос.\n * @return Атрибуты.\n */\n const getConventionalRequestAttrs = (req: Request): Record<string, string | undefined> => {\n const result: Record<string, string | undefined> = {\n 'request.path': req.originalUrl,\n };\n\n for (const headerName in req.headers) {\n if (headerName.toLowerCase().startsWith('simaland-')) {\n result[headerName] = req.header(headerName);\n }\n }\n\n return result;\n };\n\n return (req, res, next) => {\n const externalContext = propagation.extract(ROOT_CONTEXT, req.headers);\n const rootSpan = tracer.startSpan('response', undefined, externalContext);\n\n rootSpan.setAttributes(getConventionalRequestAttrs(req));\n\n const rootContext = trace.setSpan(externalContext, rootSpan);\n\n res.locals.tracing = {\n rootSpan,\n rootContext,\n renderSpan: null,\n };\n\n res.once(RESPONSE_EVENT_TYPE.renderStart, () => {\n res.locals.tracing.renderSpan = tracer.startSpan('render', undefined, rootContext);\n\n res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {\n res.locals.tracing.renderSpan.end();\n });\n });\n\n res.once('finish', () => {\n rootSpan.end();\n });\n\n next();\n };\n}\n\n/**\n * Провайдер промежуточного слоя обработки ошибок в рамках ответ на http-запросы.\n * @return Промежуточный слой.\n */\nexport function provideHttpServerErrorMiddleware(): ErrorRequestHandler {\n return Handlers.errorHandler();\n}\n\n/**\n * Провайдер серверной части \"моста\" для передачи данных между сервером и клиентом.\n * @param resolve Функция для получения зависимости по токену.\n * @return Серверная часть \"моста\".\n */\nexport function provideSsrBridgeServerSide(resolve: Resolve): BridgeServerSide {\n const config = resolve(KnownToken.Config.base);\n\n return SsrBridge.prepare(config.appName);\n}\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool(\n {\n ilium: 'API_URL_ILIUM',\n simaV3: 'API_URL_SIMALAND_V3',\n simaV4: 'API_URL_SIMALAND_V4',\n simaV6: 'API_URL_SIMALAND_V6',\n },\n source,\n );\n}\n\n/**\n * Провайдер express-приложения метрик.\n * @return Пул известных http-хостов.\n */\nexport function provideMetricsHttpApp(): Application {\n PromClient.collectDefaultMetrics();\n\n const app = Express();\n\n app.get('/', async function (req, res) {\n const metrics = await PromClient.register.metrics();\n\n res.setHeader('Content-Type', PromClient.register.contentType);\n res.send(metrics);\n });\n\n return app;\n}\n"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { SpanStatusCode } from '@opentelemetry/api';
2
+ import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
3
+ import { getClientIp } from "./../http-server/index.js";
4
+ import { displayUrl } from "./../../../../isomorphic/utils/index.js";
5
+
6
+ /**
7
+ * Возвращает новый middleware для трассировки исходящих запросов.
8
+ * @param tracer Трейсер.
9
+ * @param rootContext Контекст.
10
+ * @return Middleware.
11
+ */
12
+ export function tracingMiddleware(tracer, rootContext) {
13
+ return async function trace(config, next, defaults) {
14
+ const {
15
+ method,
16
+ url,
17
+ foundId
18
+ } = getRequestInfo(config, defaults);
19
+ const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);
20
+ span.setAttributes({
21
+ [SemanticAttributes.HTTP_URL]: url,
22
+ [SemanticAttributes.HTTP_METHOD]: method,
23
+ 'request.params': JSON.stringify({
24
+ ...defaults.params,
25
+ ...config.params
26
+ }),
27
+ 'request.headers': JSON.stringify({
28
+ ...defaults.headers[method.toLowerCase()],
29
+ ...config.headers
30
+ }),
31
+ // если нашли id - добавляем в теги
32
+ ...(foundId && {
33
+ 'request.id': foundId
34
+ })
35
+ });
36
+ try {
37
+ await next(config);
38
+ } catch (error) {
39
+ span.setStatus({
40
+ code: SpanStatusCode.ERROR,
41
+ message: 'HTTP Request failed'
42
+ });
43
+ span.end();
44
+
45
+ // не прячем ошибку
46
+ throw error;
47
+ }
48
+ span.end();
49
+ };
50
+ }
51
+
52
+ /**
53
+ * Формирует базовые данные запроса.
54
+ * Заменяет первое найденное число в url на "{id}", возвращая его в результате.
55
+ * @param config Axios-конфиг запроса.
56
+ * @param defaults Базовый конфиг экземпляра Axios.
57
+ * @return Базовые данные запроса.
58
+ */
59
+ export function getRequestInfo(config, defaults) {
60
+ const method = (config.method || 'GET').toUpperCase();
61
+ const baseURL = config.baseURL || defaults.baseURL || '';
62
+
63
+ // ВАЖНО: абстрагируем id только в url игнорируя baseURL
64
+ const [url, foundId] = hideFirstId(config.url || defaults.url || '');
65
+ return {
66
+ method,
67
+ url: displayUrl(baseURL, url),
68
+ foundId
69
+ };
70
+ }
71
+
72
+ /**
73
+ * Преобразует строку вида:
74
+ * "/api/v2/something/123456/some-bff/123456"
75
+ * в строку вида:
76
+ * "/api/v2/something/{id}/some-bff/123456"
77
+ * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.
78
+ * @param url Url.
79
+ * @return Кортеж со строкой и результатом поиска числа.
80
+ */
81
+ export function hideFirstId(url) {
82
+ const found = /\d{2,}/.exec(url);
83
+ return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];
84
+ }
85
+
86
+ /**
87
+ * Формирует заголовки для исходящих запросов с сервера по соглашению.
88
+ * @param config Конфиг.
89
+ * @param request Входящий запрос.
90
+ * @return Заголовки для исходящих запросов.
91
+ */
92
+ export function getRequestHeaders(config, request) {
93
+ const result = {
94
+ 'User-Agent': `simaland-${config.appName}/${config.appVersion}`
95
+ };
96
+ const clientIp = getClientIp(request);
97
+ if (clientIp) {
98
+ result['X-Client-Ip'] = clientIp;
99
+ }
100
+ const cookie = request.get('cookie');
101
+ if (cookie) {
102
+ result.Cookie = cookie;
103
+ }
104
+
105
+ // добавляем специфичные заголовки
106
+ for (const key of Object.keys(request.headers)) {
107
+ const value = request.header(key);
108
+ if (key.toLowerCase().indexOf('simaland-') === 0 && value) {
109
+ result[key] = value;
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["SpanStatusCode","SemanticAttributes","getClientIp","displayUrl","tracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","url","foundId","getRequestInfo","span","startSpan","undefined","setAttributes","HTTP_URL","HTTP_METHOD","JSON","stringify","params","headers","toLowerCase","error","setStatus","code","ERROR","message","end","toUpperCase","baseURL","hideFirstId","found","exec","replace","Number","getRequestHeaders","request","result","appName","appVersion","clientIp","cookie","get","Cookie","key","Object","keys","value","header","indexOf"],"sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport type { Request } from 'express';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { BaseConfig } from '../../../../../config';\nimport { getClientIp } from '../http-server';\nimport { displayUrl } from '../../../../isomorphic/utils';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function tracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, url, foundId } = getRequestInfo(config, defaults);\n const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [SemanticAttributes.HTTP_URL]: url,\n [SemanticAttributes.HTTP_METHOD]: method,\n 'request.params': JSON.stringify({\n ...defaults.params,\n ...config.params,\n }),\n 'request.headers': JSON.stringify({\n ...defaults.headers[method.toLowerCase() as 'get'],\n ...config.headers,\n }),\n\n // если нашли id - добавляем в теги\n ...(foundId && { 'request.id': foundId }),\n });\n\n try {\n await next(config);\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'HTTP Request failed',\n });\n\n span.end();\n\n // не прячем ошибку\n throw error;\n }\n\n span.end();\n };\n}\n\n/**\n * Формирует базовые данные запроса.\n * Заменяет первое найденное число в url на \"{id}\", возвращая его в результате.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): {\n method: string;\n url: string;\n foundId?: number;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n // ВАЖНО: абстрагируем id только в url игнорируя baseURL\n const [url, foundId] = hideFirstId(config.url || defaults.url || '');\n\n return {\n method,\n url: displayUrl(baseURL, url),\n foundId,\n };\n}\n\n/**\n * Преобразует строку вида:\n * \"/api/v2/something/123456/some-bff/123456\"\n * в строку вида:\n * \"/api/v2/something/{id}/some-bff/123456\"\n * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.\n * @param url Url.\n * @return Кортеж со строкой и результатом поиска числа.\n */\nexport function hideFirstId(url: string): [string, number | undefined] {\n const found = /\\d{2,}/.exec(url);\n\n return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];\n}\n\n/**\n * Формирует заголовки для исходящих запросов с сервера по соглашению.\n * @param config Конфиг.\n * @param request Входящий запрос.\n * @return Заголовки для исходящих запросов.\n */\nexport function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string> {\n const result: Record<string, string> = {\n 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,\n };\n\n const clientIp = getClientIp(request);\n if (clientIp) {\n result['X-Client-Ip'] = clientIp;\n }\n\n const cookie = request.get('cookie');\n if (cookie) {\n result.Cookie = cookie;\n }\n\n // добавляем специфичные заголовки\n for (const key of Object.keys(request.headers)) {\n const value = request.header(key);\n\n if (key.toLowerCase().indexOf('simaland-') === 0 && value) {\n result[key] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import net from 'node:net';
2
+
3
+ /**
4
+ * Определяет IP входящего запроса.
5
+ * @param request Входящий запрос.
6
+ * @return IP.
7
+ */
8
+ export function getClientIp(request) {
9
+ const headerValue = request.get('x-client-ip') || request.get('x-forwarded-for') || request.socket.remoteAddress || '';
10
+ return net.isIP(headerValue) ? headerValue : undefined;
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["net","getClientIp","request","headerValue","get","socket","remoteAddress","isIP","undefined"],"sources":["../../../../../../../src/preset/node/node/utils/http-server/index.ts"],"sourcesContent":["import type { Request } from 'express';\nimport net from 'node:net';\n\n/**\n * Определяет IP входящего запроса.\n * @param request Входящий запрос.\n * @return IP.\n */\nexport function getClientIp(request: Request): string | undefined {\n const headerValue =\n request.get('x-client-ip') ||\n request.get('x-forwarded-for') ||\n request.socket.remoteAddress ||\n '';\n\n return net.isIP(headerValue) ? headerValue : undefined;\n}\n"],"mappings":"AACA,OAAOA,GAAG,MAAM,UAAU;;AAE1B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,OAAgB,EAAsB;EAChE,MAAMC,WAAW,GACfD,OAAO,CAACE,GAAG,CAAC,aAAa,CAAC,IAC1BF,OAAO,CAACE,GAAG,CAAC,iBAAiB,CAAC,IAC9BF,OAAO,CAACG,MAAM,CAACC,aAAa,IAC5B,EAAE;EAEJ,OAAON,GAAG,CAACO,IAAI,CAACJ,WAAW,CAAC,GAAGA,WAAW,GAAGK,SAAS;AACxD"}
@@ -0,0 +1,3 @@
1
+ export { tracingMiddleware } from "./http-client/index.js";
2
+ export { getClientIp } from "./http-server/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["tracingMiddleware","getClientIp"],"sources":["../../../../../../src/preset/node/node/utils/index.ts"],"sourcesContent":["export { tracingMiddleware } from './http-client';\nexport { getClientIp } from './http-server';\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,wBAAe;AACjD,SAASC,WAAW,QAAQ,wBAAe"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/node/types.ts"],"sourcesContent":["import type { Request, Response, NextFunction } from 'express';\n\n/**\n * Контекст обработчика express.\n */\nexport interface HandlerContext {\n req: Request;\n res: Response;\n next: NextFunction;\n}\n"],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { createPreset } from "./../../di/index.js";
2
+ import { KnownToken } from "../../tokens.js";
3
+ import { provideBaseConfig, provideSagaMiddleware, provideHttpClientLogHandler } from "./../isomorphic/providers/index.js";
4
+ import { provideBridgeClientSide, provideConfigSource, provideHttpClientFactory, provideKnownHttpApiHosts, provideLogger } from "./providers/index.js";
5
+
6
+ /**
7
+ * Возвращает preset с зависимостями для frontend-микросервисов в браузере.
8
+ * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.
9
+ * @return Preset.
10
+ */
11
+ export function PresetWeb(customize) {
12
+ // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости
13
+ const preset = createPreset();
14
+ preset.set(KnownToken.Config.source, provideConfigSource);
15
+ preset.set(KnownToken.Config.base, provideBaseConfig);
16
+ preset.set(KnownToken.logger, provideLogger);
17
+ preset.set(KnownToken.sagaMiddleware, provideSagaMiddleware);
18
+ preset.set(KnownToken.Http.Client.factory, provideHttpClientFactory);
19
+ preset.set(KnownToken.Http.Client.Middleware.Log.handler, provideHttpClientLogHandler);
20
+ preset.set(KnownToken.SsrBridge.clientSide, provideBridgeClientSide);
21
+ preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);
22
+ if (customize) {
23
+ customize({
24
+ override: preset.set.bind(preset)
25
+ });
26
+ }
27
+ return preset;
28
+ }
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["createPreset","KnownToken","provideBaseConfig","provideSagaMiddleware","provideHttpClientLogHandler","provideBridgeClientSide","provideConfigSource","provideHttpClientFactory","provideKnownHttpApiHosts","provideLogger","PresetWeb","customize","preset","set","Config","source","base","logger","sagaMiddleware","Http","Client","factory","Middleware","Log","handler","SsrBridge","clientSide","Api","knownHosts","override","bind"],"sources":["../../../../src/preset/web/index.ts"],"sourcesContent":["import { createPreset, Preset } from '../../di';\nimport { KnownToken } from '../../tokens';\nimport { PresetTuner } from '../isomorphic/types';\nimport {\n provideBaseConfig,\n provideSagaMiddleware,\n provideHttpClientLogHandler,\n} from '../isomorphic/providers';\nimport {\n provideBridgeClientSide,\n provideConfigSource,\n provideHttpClientFactory,\n provideKnownHttpApiHosts,\n provideLogger,\n} from './providers';\n\n/**\n * Возвращает preset с зависимостями для frontend-микросервисов в браузере.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetWeb(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n preset.set(KnownToken.logger, provideLogger);\n preset.set(KnownToken.sagaMiddleware, provideSagaMiddleware);\n preset.set(KnownToken.Http.Client.factory, provideHttpClientFactory);\n preset.set(KnownToken.Http.Client.Middleware.Log.handler, provideHttpClientLogHandler);\n preset.set(KnownToken.SsrBridge.clientSide, provideBridgeClientSide);\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAgB,qBAAU;AAC/C,SAASC,UAAU,QAAQ,iBAAc;AAEzC,SACEC,iBAAiB,EACjBC,qBAAqB,EACrBC,2BAA2B,QACtB,oCAAyB;AAChC,SACEC,uBAAuB,EACvBC,mBAAmB,EACnBC,wBAAwB,EACxBC,wBAAwB,EACxBC,aAAa,QACR,sBAAa;;AAEpB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,SAAuB,EAAU;EACzD;EACA,MAAMC,MAAM,GAAGZ,YAAY,CAAC,CAAC;EAE7BY,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACa,MAAM,CAACC,MAAM,EAAET,mBAAmB,CAAC;EACzDM,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACa,MAAM,CAACE,IAAI,EAAEd,iBAAiB,CAAC;EACrDU,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACgB,MAAM,EAAER,aAAa,CAAC;EAC5CG,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACiB,cAAc,EAAEf,qBAAqB,CAAC;EAC5DS,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACkB,IAAI,CAACC,MAAM,CAACC,OAAO,EAAEd,wBAAwB,CAAC;EACpEK,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACkB,IAAI,CAACC,MAAM,CAACE,UAAU,CAACC,GAAG,CAACC,OAAO,EAAEpB,2BAA2B,CAAC;EACtFQ,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACwB,SAAS,CAACC,UAAU,EAAErB,uBAAuB,CAAC;EACpEO,MAAM,CAACC,GAAG,CAACZ,UAAU,CAACkB,IAAI,CAACQ,GAAG,CAACC,UAAU,EAAEpB,wBAAwB,CAAC;EAEpE,IAAIG,SAAS,EAAE;IACbA,SAAS,CAAC;MAAEkB,QAAQ,EAAEjB,MAAM,CAACC,GAAG,CAACiB,IAAI,CAAClB,MAAM;IAAE,CAAC,CAAC;EAClD;EAEA,OAAOA,MAAM;AACf"}