@milaboratories/pl-middle-layer 1.48.11 → 1.48.13

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 (589) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.cjs +59 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.js +58 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/block_registry/index.cjs +3 -0
  5. package/dist/block_registry/index.d.ts +3 -4
  6. package/dist/block_registry/index.js +3 -0
  7. package/dist/block_registry/registry-v2-provider.cjs +18 -19
  8. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  9. package/dist/block_registry/registry-v2-provider.d.ts +10 -6
  10. package/dist/block_registry/registry-v2-provider.js +17 -17
  11. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  12. package/dist/block_registry/registry.cjs +188 -219
  13. package/dist/block_registry/registry.cjs.map +1 -1
  14. package/dist/block_registry/registry.d.ts +18 -14
  15. package/dist/block_registry/registry.js +184 -217
  16. package/dist/block_registry/registry.js.map +1 -1
  17. package/dist/block_registry/watcher.cjs +141 -170
  18. package/dist/block_registry/watcher.cjs.map +1 -1
  19. package/dist/block_registry/watcher.d.ts +26 -24
  20. package/dist/block_registry/watcher.js +139 -168
  21. package/dist/block_registry/watcher.js.map +1 -1
  22. package/dist/block_registry/well_known_registries.cjs +9 -8
  23. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  24. package/dist/block_registry/well_known_registries.d.ts +8 -4
  25. package/dist/block_registry/well_known_registries.js +9 -7
  26. package/dist/block_registry/well_known_registries.js.map +1 -1
  27. package/dist/cfg_render/executor.cjs +136 -137
  28. package/dist/cfg_render/executor.cjs.map +1 -1
  29. package/dist/cfg_render/executor.js +133 -135
  30. package/dist/cfg_render/executor.js.map +1 -1
  31. package/dist/cfg_render/renderer.cjs +354 -462
  32. package/dist/cfg_render/renderer.cjs.map +1 -1
  33. package/dist/cfg_render/renderer.js +353 -460
  34. package/dist/cfg_render/renderer.js.map +1 -1
  35. package/dist/cfg_render/traverse.cjs +58 -60
  36. package/dist/cfg_render/traverse.cjs.map +1 -1
  37. package/dist/cfg_render/traverse.js +57 -58
  38. package/dist/cfg_render/traverse.js.map +1 -1
  39. package/dist/cfg_render/util.cjs +14 -19
  40. package/dist/cfg_render/util.cjs.map +1 -1
  41. package/dist/cfg_render/util.js +14 -17
  42. package/dist/cfg_render/util.js.map +1 -1
  43. package/dist/debug/index.cjs +13 -17
  44. package/dist/debug/index.cjs.map +1 -1
  45. package/dist/debug/index.js +13 -16
  46. package/dist/debug/index.js.map +1 -1
  47. package/dist/dev_env/index.cjs +60 -44
  48. package/dist/dev_env/index.cjs.map +1 -1
  49. package/dist/dev_env/index.js +57 -33
  50. package/dist/dev_env/index.js.map +1 -1
  51. package/dist/dev_env/util.cjs +12 -32
  52. package/dist/dev_env/util.cjs.map +1 -1
  53. package/dist/dev_env/util.js +10 -11
  54. package/dist/dev_env/util.js.map +1 -1
  55. package/dist/index.cjs +75 -74
  56. package/dist/index.d.ts +21 -13
  57. package/dist/index.js +25 -18
  58. package/dist/js_render/computable_context.cjs +432 -568
  59. package/dist/js_render/computable_context.cjs.map +1 -1
  60. package/dist/js_render/computable_context.js +431 -566
  61. package/dist/js_render/computable_context.js.map +1 -1
  62. package/dist/js_render/context.cjs +184 -237
  63. package/dist/js_render/context.cjs.map +1 -1
  64. package/dist/js_render/context.js +184 -235
  65. package/dist/js_render/context.js.map +1 -1
  66. package/dist/js_render/index.cjs +137 -156
  67. package/dist/js_render/index.cjs.map +1 -1
  68. package/dist/js_render/index.js +136 -154
  69. package/dist/js_render/index.js.map +1 -1
  70. package/dist/middle_layer/active_cfg.cjs +28 -35
  71. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  72. package/dist/middle_layer/active_cfg.js +27 -33
  73. package/dist/middle_layer/active_cfg.js.map +1 -1
  74. package/dist/middle_layer/block.cjs +36 -42
  75. package/dist/middle_layer/block.cjs.map +1 -1
  76. package/dist/middle_layer/block.js +35 -40
  77. package/dist/middle_layer/block.js.map +1 -1
  78. package/dist/middle_layer/block_ctx.cjs +91 -133
  79. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  80. package/dist/middle_layer/block_ctx.js +90 -131
  81. package/dist/middle_layer/block_ctx.js.map +1 -1
  82. package/dist/middle_layer/block_ctx_unsafe.cjs +20 -19
  83. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  84. package/dist/middle_layer/block_ctx_unsafe.js +20 -18
  85. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  86. package/dist/middle_layer/driver_kit.cjs +47 -51
  87. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  88. package/dist/middle_layer/driver_kit.d.ts +31 -27
  89. package/dist/middle_layer/driver_kit.js +46 -49
  90. package/dist/middle_layer/driver_kit.js.map +1 -1
  91. package/dist/middle_layer/frontend_path.cjs +49 -55
  92. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  93. package/dist/middle_layer/frontend_path.js +48 -53
  94. package/dist/middle_layer/frontend_path.js.map +1 -1
  95. package/dist/middle_layer/index.cjs +4 -0
  96. package/dist/middle_layer/index.d.ts +4 -5
  97. package/dist/middle_layer/index.js +4 -0
  98. package/dist/middle_layer/middle_layer.cjs +216 -245
  99. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  100. package/dist/middle_layer/middle_layer.d.ts +95 -91
  101. package/dist/middle_layer/middle_layer.js +215 -243
  102. package/dist/middle_layer/middle_layer.js.map +1 -1
  103. package/dist/middle_layer/navigation_states.cjs +45 -38
  104. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  105. package/dist/middle_layer/navigation_states.js +44 -36
  106. package/dist/middle_layer/navigation_states.js.map +1 -1
  107. package/dist/middle_layer/ops.cjs +56 -57
  108. package/dist/middle_layer/ops.cjs.map +1 -1
  109. package/dist/middle_layer/ops.d.ts +86 -96
  110. package/dist/middle_layer/ops.js +54 -55
  111. package/dist/middle_layer/ops.js.map +1 -1
  112. package/dist/middle_layer/project.cjs +497 -527
  113. package/dist/middle_layer/project.cjs.map +1 -1
  114. package/dist/middle_layer/project.d.ts +155 -152
  115. package/dist/middle_layer/project.js +494 -525
  116. package/dist/middle_layer/project.js.map +1 -1
  117. package/dist/middle_layer/project_list.cjs +45 -43
  118. package/dist/middle_layer/project_list.cjs.map +1 -1
  119. package/dist/middle_layer/project_list.js +45 -41
  120. package/dist/middle_layer/project_list.js.map +1 -1
  121. package/dist/middle_layer/project_overview.cjs +202 -240
  122. package/dist/middle_layer/project_overview.cjs.map +1 -1
  123. package/dist/middle_layer/project_overview.js +201 -238
  124. package/dist/middle_layer/project_overview.js.map +1 -1
  125. package/dist/middle_layer/project_overview_light.cjs +11 -14
  126. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  127. package/dist/middle_layer/project_overview_light.js +10 -12
  128. package/dist/middle_layer/project_overview_light.js.map +1 -1
  129. package/dist/middle_layer/render.cjs +14 -18
  130. package/dist/middle_layer/render.cjs.map +1 -1
  131. package/dist/middle_layer/render.js +13 -16
  132. package/dist/middle_layer/render.js.map +1 -1
  133. package/dist/middle_layer/types.d.ts +7 -10
  134. package/dist/middle_layer/util.cjs +26 -21
  135. package/dist/middle_layer/util.cjs.map +1 -1
  136. package/dist/middle_layer/util.js +25 -19
  137. package/dist/middle_layer/util.js.map +1 -1
  138. package/dist/model/args.cjs +44 -53
  139. package/dist/model/args.cjs.map +1 -1
  140. package/dist/model/args.js +44 -51
  141. package/dist/model/args.js.map +1 -1
  142. package/dist/model/block_pack_spec.cjs +9 -5
  143. package/dist/model/block_pack_spec.cjs.map +1 -1
  144. package/dist/model/block_pack_spec.d.ts +34 -30
  145. package/dist/model/block_pack_spec.js +9 -4
  146. package/dist/model/block_pack_spec.js.map +1 -1
  147. package/dist/model/frontend.d.ts +8 -5
  148. package/dist/model/index.d.ts +2 -3
  149. package/dist/model/project_helper.cjs +154 -193
  150. package/dist/model/project_helper.cjs.map +1 -1
  151. package/dist/model/project_helper.d.ts +96 -92
  152. package/dist/model/project_helper.js +153 -191
  153. package/dist/model/project_helper.js.map +1 -1
  154. package/dist/model/project_model.cjs +33 -32
  155. package/dist/model/project_model.cjs.map +1 -1
  156. package/dist/model/project_model.d.ts +13 -64
  157. package/dist/model/project_model.js +34 -30
  158. package/dist/model/project_model.js.map +1 -1
  159. package/dist/model/project_model_util.cjs +119 -158
  160. package/dist/model/project_model_util.cjs.map +1 -1
  161. package/dist/model/project_model_util.js +120 -156
  162. package/dist/model/project_model_util.js.map +1 -1
  163. package/dist/model/project_model_v1.cjs +3 -2
  164. package/dist/model/project_model_v1.cjs.map +1 -1
  165. package/dist/model/project_model_v1.js +3 -1
  166. package/dist/model/project_model_v1.js.map +1 -1
  167. package/dist/model/template_spec.d.ts +20 -16
  168. package/dist/mutator/block-pack/block_pack.cjs +200 -223
  169. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  170. package/dist/mutator/block-pack/block_pack.d.ts +20 -19
  171. package/dist/mutator/block-pack/block_pack.js +199 -221
  172. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  173. package/dist/mutator/block-pack/frontend.cjs +14 -16
  174. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  175. package/dist/mutator/block-pack/frontend.js +13 -14
  176. package/dist/mutator/block-pack/frontend.js.map +1 -1
  177. package/dist/mutator/context_export.cjs +18 -17
  178. package/dist/mutator/context_export.cjs.map +1 -1
  179. package/dist/mutator/context_export.js +17 -15
  180. package/dist/mutator/context_export.js.map +1 -1
  181. package/dist/mutator/migration.cjs +86 -112
  182. package/dist/mutator/migration.cjs.map +1 -1
  183. package/dist/mutator/migration.js +85 -110
  184. package/dist/mutator/migration.js.map +1 -1
  185. package/dist/mutator/project.cjs +903 -1240
  186. package/dist/mutator/project.cjs.map +1 -1
  187. package/dist/mutator/project.js +901 -1237
  188. package/dist/mutator/project.js.map +1 -1
  189. package/dist/mutator/template/direct_template_loader.cjs +104 -130
  190. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  191. package/dist/mutator/template/direct_template_loader.js +103 -128
  192. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  193. package/dist/mutator/template/direct_template_loader_v3.cjs +104 -124
  194. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  195. package/dist/mutator/template/direct_template_loader_v3.js +103 -122
  196. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  197. package/dist/mutator/template/render_block.cjs +26 -30
  198. package/dist/mutator/template/render_block.cjs.map +1 -1
  199. package/dist/mutator/template/render_block.js +26 -23
  200. package/dist/mutator/template/render_block.js.map +1 -1
  201. package/dist/mutator/template/render_template.cjs +25 -25
  202. package/dist/mutator/template/render_template.cjs.map +1 -1
  203. package/dist/mutator/template/render_template.d.ts +6 -3
  204. package/dist/mutator/template/render_template.js +24 -23
  205. package/dist/mutator/template/render_template.js.map +1 -1
  206. package/dist/mutator/template/template_loading.cjs +42 -46
  207. package/dist/mutator/template/template_loading.cjs.map +1 -1
  208. package/dist/mutator/template/template_loading.d.ts +16 -12
  209. package/dist/mutator/template/template_loading.js +40 -44
  210. package/dist/mutator/template/template_loading.js.map +1 -1
  211. package/dist/network_check/network_check.cjs +149 -194
  212. package/dist/network_check/network_check.cjs.map +1 -1
  213. package/dist/network_check/network_check.d.ts +50 -66
  214. package/dist/network_check/network_check.js +146 -190
  215. package/dist/network_check/network_check.js.map +1 -1
  216. package/dist/network_check/pings.cjs +71 -69
  217. package/dist/network_check/pings.cjs.map +1 -1
  218. package/dist/network_check/pings.js +71 -65
  219. package/dist/network_check/pings.js.map +1 -1
  220. package/dist/network_check/template.cjs +256 -273
  221. package/dist/network_check/template.cjs.map +1 -1
  222. package/dist/network_check/template.js +253 -265
  223. package/dist/network_check/template.js.map +1 -1
  224. package/dist/pool/data.cjs +205 -226
  225. package/dist/pool/data.cjs.map +1 -1
  226. package/dist/pool/data.d.ts +10 -27
  227. package/dist/pool/data.js +196 -209
  228. package/dist/pool/data.js.map +1 -1
  229. package/dist/pool/driver.cjs +180 -207
  230. package/dist/pool/driver.cjs.map +1 -1
  231. package/dist/pool/driver.d.ts +12 -17
  232. package/dist/pool/driver.js +178 -205
  233. package/dist/pool/driver.js.map +1 -1
  234. package/dist/pool/index.cjs +2 -0
  235. package/dist/pool/index.d.ts +2 -3
  236. package/dist/pool/index.js +2 -0
  237. package/dist/pool/p_object_collection.cjs +67 -79
  238. package/dist/pool/p_object_collection.cjs.map +1 -1
  239. package/dist/pool/p_object_collection.d.ts +7 -28
  240. package/dist/pool/p_object_collection.js +65 -77
  241. package/dist/pool/p_object_collection.js.map +1 -1
  242. package/dist/pool/result_pool.cjs +217 -262
  243. package/dist/pool/result_pool.cjs.map +1 -1
  244. package/dist/pool/result_pool.d.ts +4 -27
  245. package/dist/pool/result_pool.js +216 -260
  246. package/dist/pool/result_pool.js.map +1 -1
  247. package/dist/worker/WorkerManager.cjs +51 -49
  248. package/dist/worker/WorkerManager.cjs.map +1 -1
  249. package/dist/worker/WorkerManager.js +49 -47
  250. package/dist/worker/WorkerManager.js.map +1 -1
  251. package/dist/worker/worker.cjs +19 -15
  252. package/dist/worker/worker.cjs.map +1 -1
  253. package/dist/worker/worker.d.ts +1 -2
  254. package/dist/worker/worker.js +18 -13
  255. package/dist/worker/worker.js.map +1 -1
  256. package/dist/worker/workerApi.cjs +14 -18
  257. package/dist/worker/workerApi.cjs.map +1 -1
  258. package/dist/worker/workerApi.js +13 -16
  259. package/dist/worker/workerApi.js.map +1 -1
  260. package/package.json +24 -24
  261. package/src/mutator/template/template_render.test.ts +22 -18
  262. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -77
  263. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
  264. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -74
  265. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
  266. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.cjs +0 -162
  267. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.cjs.map +0 -1
  268. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.js +0 -160
  269. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.js.map +0 -1
  270. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.cjs +0 -576
  271. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.cjs.map +0 -1
  272. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.js +0 -574
  273. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.js.map +0 -1
  274. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.cjs +0 -337
  275. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.cjs.map +0 -1
  276. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.js +0 -335
  277. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.js.map +0 -1
  278. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.cjs +0 -22
  279. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.cjs.map +0 -1
  280. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.js +0 -20
  281. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.js.map +0 -1
  282. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.cjs +0 -73
  283. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.cjs.map +0 -1
  284. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.js +0 -71
  285. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.js.map +0 -1
  286. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.cjs +0 -78
  287. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.cjs.map +0 -1
  288. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.js +0 -76
  289. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.js.map +0 -1
  290. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.cjs +0 -23
  291. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.cjs.map +0 -1
  292. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.js +0 -21
  293. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.js.map +0 -1
  294. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.cjs +0 -19
  295. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.cjs.map +0 -1
  296. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.js +0 -17
  297. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.js.map +0 -1
  298. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.cjs +0 -21
  299. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.cjs.map +0 -1
  300. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.js +0 -19
  301. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.js.map +0 -1
  302. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.cjs +0 -74
  303. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.cjs.map +0 -1
  304. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.js +0 -72
  305. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.js.map +0 -1
  306. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.cjs +0 -19
  307. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.cjs.map +0 -1
  308. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.js +0 -17
  309. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.js.map +0 -1
  310. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.cjs +0 -19
  311. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.cjs.map +0 -1
  312. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.js +0 -17
  313. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.js.map +0 -1
  314. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.cjs +0 -19
  315. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.cjs.map +0 -1
  316. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.js +0 -17
  317. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.js.map +0 -1
  318. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.cjs +0 -35
  319. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.cjs.map +0 -1
  320. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.js +0 -33
  321. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.js.map +0 -1
  322. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.cjs +0 -19
  323. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.cjs.map +0 -1
  324. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.js +0 -17
  325. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.js.map +0 -1
  326. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.cjs +0 -19
  327. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.cjs.map +0 -1
  328. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.js +0 -17
  329. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.js.map +0 -1
  330. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.cjs +0 -19
  331. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.cjs.map +0 -1
  332. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.js +0 -17
  333. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.js.map +0 -1
  334. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.cjs +0 -19
  335. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.cjs.map +0 -1
  336. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.js +0 -17
  337. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.js.map +0 -1
  338. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.cjs +0 -19
  339. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.cjs.map +0 -1
  340. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.js +0 -17
  341. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.js.map +0 -1
  342. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.cjs +0 -32
  343. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.cjs.map +0 -1
  344. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.js +0 -30
  345. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.js.map +0 -1
  346. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.cjs +0 -19
  347. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.cjs.map +0 -1
  348. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.js +0 -17
  349. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.js.map +0 -1
  350. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.cjs +0 -22
  351. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.cjs.map +0 -1
  352. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.js +0 -20
  353. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.js.map +0 -1
  354. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.cjs +0 -19
  355. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.cjs.map +0 -1
  356. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.js +0 -17
  357. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.js.map +0 -1
  358. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.cjs +0 -19
  359. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.cjs.map +0 -1
  360. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.js +0 -17
  361. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.js.map +0 -1
  362. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.cjs +0 -26
  363. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.cjs.map +0 -1
  364. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.js +0 -24
  365. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.js.map +0 -1
  366. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.cjs +0 -19
  367. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.cjs.map +0 -1
  368. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.js +0 -17
  369. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.js.map +0 -1
  370. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.cjs +0 -22
  371. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.cjs.map +0 -1
  372. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.js +0 -20
  373. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.js.map +0 -1
  374. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.cjs +0 -145
  375. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.cjs.map +0 -1
  376. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.js +0 -143
  377. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.js.map +0 -1
  378. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.cjs +0 -49
  379. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.cjs.map +0 -1
  380. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.js +0 -47
  381. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.js.map +0 -1
  382. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.cjs +0 -23
  383. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.cjs.map +0 -1
  384. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.js +0 -21
  385. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.js.map +0 -1
  386. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.cjs +0 -37
  387. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.cjs.map +0 -1
  388. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.js +0 -35
  389. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.js.map +0 -1
  390. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.cjs +0 -54
  391. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.cjs.map +0 -1
  392. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.js +0 -52
  393. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.js.map +0 -1
  394. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.cjs +0 -29
  395. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.cjs.map +0 -1
  396. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.js +0 -27
  397. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.js.map +0 -1
  398. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.cjs +0 -240
  399. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.cjs.map +0 -1
  400. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.js +0 -238
  401. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.js.map +0 -1
  402. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.cjs +0 -20
  403. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.cjs.map +0 -1
  404. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.js +0 -18
  405. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.js.map +0 -1
  406. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.cjs +0 -23
  407. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.cjs.map +0 -1
  408. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.js +0 -21
  409. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.js.map +0 -1
  410. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.cjs +0 -20
  411. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.cjs.map +0 -1
  412. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.js +0 -18
  413. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.js.map +0 -1
  414. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.cjs +0 -42
  415. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.cjs.map +0 -1
  416. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.js +0 -40
  417. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.js.map +0 -1
  418. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.cjs +0 -41
  419. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.cjs.map +0 -1
  420. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.js +0 -39
  421. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.js.map +0 -1
  422. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.cjs +0 -79
  423. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.cjs.map +0 -1
  424. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.js +0 -77
  425. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.js.map +0 -1
  426. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.cjs +0 -103
  427. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.cjs.map +0 -1
  428. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.js +0 -101
  429. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.js.map +0 -1
  430. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.cjs +0 -64
  431. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.cjs.map +0 -1
  432. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.js +0 -62
  433. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.js.map +0 -1
  434. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.cjs +0 -266
  435. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.cjs.map +0 -1
  436. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.js +0 -264
  437. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.js.map +0 -1
  438. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.cjs +0 -24
  439. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.cjs.map +0 -1
  440. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.js +0 -22
  441. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.js.map +0 -1
  442. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.cjs +0 -27
  443. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.cjs.map +0 -1
  444. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.js +0 -25
  445. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.js.map +0 -1
  446. package/dist/_virtual/index.cjs +0 -8
  447. package/dist/_virtual/index.cjs.map +0 -1
  448. package/dist/_virtual/index.js +0 -6
  449. package/dist/_virtual/index.js.map +0 -1
  450. package/dist/_virtual/re.cjs +0 -6
  451. package/dist/_virtual/re.cjs.map +0 -1
  452. package/dist/_virtual/re.js +0 -4
  453. package/dist/_virtual/re.js.map +0 -1
  454. package/dist/block_registry/index.d.ts.map +0 -1
  455. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  456. package/dist/block_registry/registry.d.ts.map +0 -1
  457. package/dist/block_registry/registry.test.d.ts +0 -2
  458. package/dist/block_registry/registry.test.d.ts.map +0 -1
  459. package/dist/block_registry/watcher.d.ts.map +0 -1
  460. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  461. package/dist/cfg_render/executor.d.ts +0 -9
  462. package/dist/cfg_render/executor.d.ts.map +0 -1
  463. package/dist/cfg_render/executor.test.d.ts +0 -2
  464. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  465. package/dist/cfg_render/operation.d.ts +0 -29
  466. package/dist/cfg_render/operation.d.ts.map +0 -1
  467. package/dist/cfg_render/renderer.d.ts +0 -6
  468. package/dist/cfg_render/renderer.d.ts.map +0 -1
  469. package/dist/cfg_render/traverse.d.ts +0 -3
  470. package/dist/cfg_render/traverse.d.ts.map +0 -1
  471. package/dist/cfg_render/util.d.ts +0 -5
  472. package/dist/cfg_render/util.d.ts.map +0 -1
  473. package/dist/debug/index.d.ts +0 -9
  474. package/dist/debug/index.d.ts.map +0 -1
  475. package/dist/dev_env/index.d.ts +0 -21
  476. package/dist/dev_env/index.d.ts.map +0 -1
  477. package/dist/dev_env/util.d.ts +0 -3
  478. package/dist/dev_env/util.d.ts.map +0 -1
  479. package/dist/index.cjs.map +0 -1
  480. package/dist/index.d.ts.map +0 -1
  481. package/dist/index.js.map +0 -1
  482. package/dist/js_render/computable_context.d.ts +0 -74
  483. package/dist/js_render/computable_context.d.ts.map +0 -1
  484. package/dist/js_render/context.d.ts +0 -73
  485. package/dist/js_render/context.d.ts.map +0 -1
  486. package/dist/js_render/index.d.ts +0 -57
  487. package/dist/js_render/index.d.ts.map +0 -1
  488. package/dist/middle_layer/active_cfg.d.ts +0 -6
  489. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  490. package/dist/middle_layer/block.d.ts +0 -10
  491. package/dist/middle_layer/block.d.ts.map +0 -1
  492. package/dist/middle_layer/block_ctx.d.ts +0 -23
  493. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  494. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -16
  495. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  496. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  497. package/dist/middle_layer/frontend_path.d.ts +0 -6
  498. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  499. package/dist/middle_layer/index.d.ts.map +0 -1
  500. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  501. package/dist/middle_layer/navigation_states.d.ts +0 -10
  502. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  503. package/dist/middle_layer/ops.d.ts.map +0 -1
  504. package/dist/middle_layer/project.d.ts.map +0 -1
  505. package/dist/middle_layer/project_list.d.ts +0 -11
  506. package/dist/middle_layer/project_list.d.ts.map +0 -1
  507. package/dist/middle_layer/project_overview.d.ts +0 -8
  508. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  509. package/dist/middle_layer/project_overview_light.d.ts +0 -8
  510. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  511. package/dist/middle_layer/render.d.ts +0 -7
  512. package/dist/middle_layer/render.d.ts.map +0 -1
  513. package/dist/middle_layer/render.test.d.ts +0 -5
  514. package/dist/middle_layer/render.test.d.ts.map +0 -1
  515. package/dist/middle_layer/types.d.ts.map +0 -1
  516. package/dist/middle_layer/util.d.ts +0 -16
  517. package/dist/middle_layer/util.d.ts.map +0 -1
  518. package/dist/model/args.d.ts +0 -14
  519. package/dist/model/args.d.ts.map +0 -1
  520. package/dist/model/block_pack.d.ts +0 -8
  521. package/dist/model/block_pack.d.ts.map +0 -1
  522. package/dist/model/block_pack_spec.d.ts.map +0 -1
  523. package/dist/model/frontend.d.ts.map +0 -1
  524. package/dist/model/index.d.ts.map +0 -1
  525. package/dist/model/project_helper.d.ts.map +0 -1
  526. package/dist/model/project_model.d.ts.map +0 -1
  527. package/dist/model/project_model.test.d.ts +0 -2
  528. package/dist/model/project_model.test.d.ts.map +0 -1
  529. package/dist/model/project_model_util.d.ts +0 -43
  530. package/dist/model/project_model_util.d.ts.map +0 -1
  531. package/dist/model/project_model_util.test.d.ts +0 -2
  532. package/dist/model/project_model_util.test.d.ts.map +0 -1
  533. package/dist/model/project_model_v1.d.ts +0 -8
  534. package/dist/model/project_model_v1.d.ts.map +0 -1
  535. package/dist/model/template_spec.d.ts.map +0 -1
  536. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  537. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -2
  538. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  539. package/dist/mutator/block-pack/frontend.d.ts +0 -4
  540. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  541. package/dist/mutator/context_export.d.ts +0 -9
  542. package/dist/mutator/context_export.d.ts.map +0 -1
  543. package/dist/mutator/migration.d.ts +0 -9
  544. package/dist/mutator/migration.d.ts.map +0 -1
  545. package/dist/mutator/project-v3.test.d.ts +0 -2
  546. package/dist/mutator/project-v3.test.d.ts.map +0 -1
  547. package/dist/mutator/project.d.ts +0 -211
  548. package/dist/mutator/project.d.ts.map +0 -1
  549. package/dist/mutator/project.test.d.ts +0 -2
  550. package/dist/mutator/project.test.d.ts.map +0 -1
  551. package/dist/mutator/template/direct_template_loader.d.ts +0 -5
  552. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  553. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -15
  554. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  555. package/dist/mutator/template/render_block.d.ts +0 -32
  556. package/dist/mutator/template/render_block.d.ts.map +0 -1
  557. package/dist/mutator/template/render_template.d.ts.map +0 -1
  558. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  559. package/dist/mutator/template/template_render.test.d.ts +0 -2
  560. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  561. package/dist/network_check/network_check.d.ts.map +0 -1
  562. package/dist/network_check/network_check.test.d.ts +0 -2
  563. package/dist/network_check/network_check.test.d.ts.map +0 -1
  564. package/dist/network_check/pings.d.ts +0 -32
  565. package/dist/network_check/pings.d.ts.map +0 -1
  566. package/dist/network_check/template.d.ts +0 -57
  567. package/dist/network_check/template.d.ts.map +0 -1
  568. package/dist/network_check/template.test.d.ts +0 -2
  569. package/dist/network_check/template.test.d.ts.map +0 -1
  570. package/dist/network_check/test_utils.d.ts +0 -6
  571. package/dist/network_check/test_utils.d.ts.map +0 -1
  572. package/dist/pool/data.d.ts.map +0 -1
  573. package/dist/pool/driver.d.ts.map +0 -1
  574. package/dist/pool/index.d.ts.map +0 -1
  575. package/dist/pool/p_object_collection.d.ts.map +0 -1
  576. package/dist/pool/result_pool.d.ts.map +0 -1
  577. package/dist/test/block_packs.d.ts +0 -6
  578. package/dist/test/block_packs.d.ts.map +0 -1
  579. package/dist/test/explicit_templates.d.ts +0 -3
  580. package/dist/test/explicit_templates.d.ts.map +0 -1
  581. package/dist/test/known_templates.d.ts +0 -6
  582. package/dist/test/known_templates.d.ts.map +0 -1
  583. package/dist/test_env.d.ts +0 -6
  584. package/dist/test_env.d.ts.map +0 -1
  585. package/dist/worker/WorkerManager.d.ts +0 -12
  586. package/dist/worker/WorkerManager.d.ts.map +0 -1
  587. package/dist/worker/worker.d.ts.map +0 -1
  588. package/dist/worker/workerApi.d.ts +0 -15
  589. package/dist/worker/workerApi.d.ts.map +0 -1
@@ -1,60 +1,56 @@
1
- import { field, Pl } from '@milaboratories/pl-client';
2
- import fs from 'node:fs';
3
- import { assertNever } from '@milaboratories/ts-helpers';
4
- import { loadTemplateFromPrepared, loadTemplateFromExplicitDirect } from './direct_template_loader.js';
1
+ import { loadTemplateFromExplicitDirect, loadTemplateFromPrepared } from "./direct_template_loader.js";
2
+ import fs from "node:fs";
3
+ import { assertNever } from "@milaboratories/ts-helpers";
4
+ import { Pl, field } from "@milaboratories/pl-client";
5
5
 
6
- //
7
- // Resource schema
8
- //
9
- const TengoTemplateGet = { name: "TengoTemplateGet", version: "1" };
6
+ //#region src/mutator/template/template_loading.ts
7
+ const TengoTemplateGet = {
8
+ name: "TengoTemplateGet",
9
+ version: "1"
10
+ };
10
11
  const TengoTemplateGetRegistry = "registry";
11
12
  const TengoTemplateGetTemplateURI = "templateURI";
12
13
  const TengoTemplateGetTemplate = "template";
13
- const TengoTemplatePack = { name: "TengoTemplatePack", version: "1" };
14
+ const TengoTemplatePack = {
15
+ name: "TengoTemplatePack",
16
+ version: "1"
17
+ };
14
18
  const TengoTemplatePackConvert = {
15
- name: "TengoTemplatePackConvert",
16
- version: "1",
19
+ name: "TengoTemplatePackConvert",
20
+ version: "1"
17
21
  };
18
22
  const TengoTemplatePackConvertTemplatePack = "templatePack";
19
23
  const TengoTemplatePackConvertTemplate = "template";
20
24
  async function prepareTemplateSpec(tpl) {
21
- switch (tpl.type) {
22
- case "from-file":
23
- return {
24
- type: "explicit",
25
- content: await fs.promises.readFile(tpl.path),
26
- };
27
- case "from-registry":
28
- case "explicit":
29
- return tpl;
30
- case "prepared":
31
- return tpl;
32
- default:
33
- return assertNever(tpl);
34
- }
25
+ switch (tpl.type) {
26
+ case "from-file": return {
27
+ type: "explicit",
28
+ content: await fs.promises.readFile(tpl.path)
29
+ };
30
+ case "from-registry":
31
+ case "explicit": return tpl;
32
+ case "prepared": return tpl;
33
+ default: return assertNever(tpl);
34
+ }
35
35
  }
36
36
  function loadTemplateFromRegistry(tx, spec) {
37
- const getTemplate = tx.createStruct(TengoTemplateGet);
38
- const registry = field(getTemplate, TengoTemplateGetRegistry);
39
- const uri = field(getTemplate, TengoTemplateGetTemplateURI);
40
- const templateFromRegistry = field(getTemplate, TengoTemplateGetTemplate);
41
- // Note: it has a resource schema, so platforma creates fields by itself.
42
- tx.setField(registry, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.registry))));
43
- tx.setField(uri, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.path))));
44
- return templateFromRegistry;
37
+ const getTemplate = tx.createStruct(TengoTemplateGet);
38
+ const registry = field(getTemplate, TengoTemplateGetRegistry);
39
+ const uri = field(getTemplate, TengoTemplateGetTemplateURI);
40
+ const templateFromRegistry = field(getTemplate, TengoTemplateGetTemplate);
41
+ tx.setField(registry, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.registry))));
42
+ tx.setField(uri, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.path))));
43
+ return templateFromRegistry;
45
44
  }
46
45
  function loadTemplate(tx, spec) {
47
- switch (spec.type) {
48
- case "from-registry":
49
- return loadTemplateFromRegistry(tx, spec);
50
- case "explicit":
51
- return loadTemplateFromExplicitDirect(tx, spec);
52
- case "prepared":
53
- return loadTemplateFromPrepared(tx, spec);
54
- default:
55
- return assertNever(spec);
56
- }
46
+ switch (spec.type) {
47
+ case "from-registry": return loadTemplateFromRegistry(tx, spec);
48
+ case "explicit": return loadTemplateFromExplicitDirect(tx, spec);
49
+ case "prepared": return loadTemplateFromPrepared(tx, spec);
50
+ default: return assertNever(spec);
51
+ }
57
52
  }
58
53
 
54
+ //#endregion
59
55
  export { TengoTemplateGet, TengoTemplateGetRegistry, TengoTemplateGetTemplate, TengoTemplateGetTemplateURI, TengoTemplatePack, TengoTemplatePackConvert, TengoTemplatePackConvertTemplate, TengoTemplatePackConvertTemplatePack, loadTemplate, prepareTemplateSpec };
60
- //# sourceMappingURL=template_loading.js.map
56
+ //# sourceMappingURL=template_loading.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template_loading.js","sources":["../../../src/mutator/template/template_loading.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport fs from \"node:fs\";\nimport type {\n TemplateFromRegistry,\n TemplateSpecAny,\n TemplateSpecPrepared,\n} from \"../../model/template_spec\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { loadTemplateFromExplicitDirect, loadTemplateFromPrepared } from \"./direct_template_loader\";\n\n//\n// Resource schema\n//\n\nexport const TengoTemplateGet: ResourceType = { name: \"TengoTemplateGet\", version: \"1\" };\nexport const TengoTemplateGetRegistry = \"registry\";\nexport const TengoTemplateGetTemplateURI = \"templateURI\";\nexport const TengoTemplateGetTemplate = \"template\";\n\nexport const TengoTemplatePack: ResourceType = { name: \"TengoTemplatePack\", version: \"1\" };\nexport const TengoTemplatePackConvert: ResourceType = {\n name: \"TengoTemplatePackConvert\",\n version: \"1\",\n};\nexport const TengoTemplatePackConvertTemplatePack = \"templatePack\";\nexport const TengoTemplatePackConvertTemplate = \"template\";\n\nexport async function prepareTemplateSpec(tpl: TemplateSpecAny): Promise<TemplateSpecPrepared> {\n switch (tpl.type) {\n case \"from-file\":\n return {\n type: \"explicit\",\n content: await fs.promises.readFile(tpl.path),\n };\n case \"from-registry\":\n case \"explicit\":\n return tpl;\n case \"prepared\":\n return tpl;\n default:\n return assertNever(tpl);\n }\n}\n\nfunction loadTemplateFromRegistry(tx: PlTransaction, spec: TemplateFromRegistry): AnyRef {\n const getTemplate = tx.createStruct(TengoTemplateGet);\n const registry = field(getTemplate, TengoTemplateGetRegistry);\n const uri = field(getTemplate, TengoTemplateGetTemplateURI);\n const templateFromRegistry = field(getTemplate, TengoTemplateGetTemplate);\n\n // Note: it has a resource schema, so platforma creates fields by itself.\n\n tx.setField(registry, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.registry))));\n tx.setField(uri, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.path))));\n\n return templateFromRegistry;\n}\n\nexport function loadTemplate(tx: PlTransaction, spec: TemplateSpecPrepared): AnyRef {\n switch (spec.type) {\n case \"from-registry\":\n return loadTemplateFromRegistry(tx, spec);\n case \"explicit\":\n return loadTemplateFromExplicitDirect(tx, spec);\n case \"prepared\":\n return loadTemplateFromPrepared(tx, spec);\n default:\n return assertNever(spec);\n }\n}\n"],"names":[],"mappings":";;;;;AAWA;AACA;AACA;AAEO,MAAM,gBAAgB,GAAiB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG;AAC/E,MAAM,wBAAwB,GAAG;AACjC,MAAM,2BAA2B,GAAG;AACpC,MAAM,wBAAwB,GAAG;AAEjC,MAAM,iBAAiB,GAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG;AACjF,MAAM,wBAAwB,GAAiB;AACpD,IAAA,IAAI,EAAE,0BAA0B;AAChC,IAAA,OAAO,EAAE,GAAG;;AAEP,MAAM,oCAAoC,GAAG;AAC7C,MAAM,gCAAgC,GAAG;AAEzC,eAAe,mBAAmB,CAAC,GAAoB,EAAA;AAC5D,IAAA,QAAQ,GAAG,CAAC,IAAI;AACd,QAAA,KAAK,WAAW;YACd,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;aAC9C;AACH,QAAA,KAAK,eAAe;AACpB,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,GAAG;AACZ,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,GAAG;AACZ,QAAA;AACE,YAAA,OAAO,WAAW,CAAC,GAAG,CAAC;;AAE7B;AAEA,SAAS,wBAAwB,CAAC,EAAiB,EAAE,IAA0B,EAAA;IAC7E,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAC3D,MAAM,oBAAoB,GAAG,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC;;AAIzE,IAAA,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChG,IAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvF,IAAA,OAAO,oBAAoB;AAC7B;AAEM,SAAU,YAAY,CAAC,EAAiB,EAAE,IAA0B,EAAA;AACxE,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,eAAe;AAClB,YAAA,OAAO,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC;AAC3C,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,8BAA8B,CAAC,EAAE,EAAE,IAAI,CAAC;AACjD,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC;AAC3C,QAAA;AACE,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC;;AAE9B;;;;"}
1
+ {"version":3,"file":"template_loading.js","names":[],"sources":["../../../src/mutator/template/template_loading.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport fs from \"node:fs\";\nimport type {\n TemplateFromRegistry,\n TemplateSpecAny,\n TemplateSpecPrepared,\n} from \"../../model/template_spec\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { loadTemplateFromExplicitDirect, loadTemplateFromPrepared } from \"./direct_template_loader\";\n\n//\n// Resource schema\n//\n\nexport const TengoTemplateGet: ResourceType = { name: \"TengoTemplateGet\", version: \"1\" };\nexport const TengoTemplateGetRegistry = \"registry\";\nexport const TengoTemplateGetTemplateURI = \"templateURI\";\nexport const TengoTemplateGetTemplate = \"template\";\n\nexport const TengoTemplatePack: ResourceType = { name: \"TengoTemplatePack\", version: \"1\" };\nexport const TengoTemplatePackConvert: ResourceType = {\n name: \"TengoTemplatePackConvert\",\n version: \"1\",\n};\nexport const TengoTemplatePackConvertTemplatePack = \"templatePack\";\nexport const TengoTemplatePackConvertTemplate = \"template\";\n\nexport async function prepareTemplateSpec(tpl: TemplateSpecAny): Promise<TemplateSpecPrepared> {\n switch (tpl.type) {\n case \"from-file\":\n return {\n type: \"explicit\",\n content: await fs.promises.readFile(tpl.path),\n };\n case \"from-registry\":\n case \"explicit\":\n return tpl;\n case \"prepared\":\n return tpl;\n default:\n return assertNever(tpl);\n }\n}\n\nfunction loadTemplateFromRegistry(tx: PlTransaction, spec: TemplateFromRegistry): AnyRef {\n const getTemplate = tx.createStruct(TengoTemplateGet);\n const registry = field(getTemplate, TengoTemplateGetRegistry);\n const uri = field(getTemplate, TengoTemplateGetTemplateURI);\n const templateFromRegistry = field(getTemplate, TengoTemplateGetTemplate);\n\n // Note: it has a resource schema, so platforma creates fields by itself.\n\n tx.setField(registry, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.registry))));\n tx.setField(uri, tx.createValue(Pl.JsonString, Buffer.from(JSON.stringify(spec.path))));\n\n return templateFromRegistry;\n}\n\nexport function loadTemplate(tx: PlTransaction, spec: TemplateSpecPrepared): AnyRef {\n switch (spec.type) {\n case \"from-registry\":\n return loadTemplateFromRegistry(tx, spec);\n case \"explicit\":\n return loadTemplateFromExplicitDirect(tx, spec);\n case \"prepared\":\n return loadTemplateFromPrepared(tx, spec);\n default:\n return assertNever(spec);\n }\n}\n"],"mappings":";;;;;;AAeA,MAAa,mBAAiC;CAAE,MAAM;CAAoB,SAAS;CAAK;AACxF,MAAa,2BAA2B;AACxC,MAAa,8BAA8B;AAC3C,MAAa,2BAA2B;AAExC,MAAa,oBAAkC;CAAE,MAAM;CAAqB,SAAS;CAAK;AAC1F,MAAa,2BAAyC;CACpD,MAAM;CACN,SAAS;CACV;AACD,MAAa,uCAAuC;AACpD,MAAa,mCAAmC;AAEhD,eAAsB,oBAAoB,KAAqD;AAC7F,SAAQ,IAAI,MAAZ;EACE,KAAK,YACH,QAAO;GACL,MAAM;GACN,SAAS,MAAM,GAAG,SAAS,SAAS,IAAI,KAAK;GAC9C;EACH,KAAK;EACL,KAAK,WACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,QACE,QAAO,YAAY,IAAI;;;AAI7B,SAAS,yBAAyB,IAAmB,MAAoC;CACvF,MAAM,cAAc,GAAG,aAAa,iBAAiB;CACrD,MAAM,WAAW,MAAM,aAAa,yBAAyB;CAC7D,MAAM,MAAM,MAAM,aAAa,4BAA4B;CAC3D,MAAM,uBAAuB,MAAM,aAAa,yBAAyB;AAIzE,IAAG,SAAS,UAAU,GAAG,YAAY,GAAG,YAAY,OAAO,KAAK,KAAK,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC;AAChG,IAAG,SAAS,KAAK,GAAG,YAAY,GAAG,YAAY,OAAO,KAAK,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC;AAEvF,QAAO;;AAGT,SAAgB,aAAa,IAAmB,MAAoC;AAClF,SAAQ,KAAK,MAAb;EACE,KAAK,gBACH,QAAO,yBAAyB,IAAI,KAAK;EAC3C,KAAK,WACH,QAAO,+BAA+B,IAAI,KAAK;EACjD,KAAK,WACH,QAAO,yBAAyB,IAAI,KAAK;EAC3C,QACE,QAAO,YAAY,KAAK"}
@@ -1,180 +1,135 @@
1
- 'use strict';
2
-
3
- var plClient = require('@milaboratories/pl-client');
4
- var tsHelpers = require('@milaboratories/ts-helpers');
5
- var node_diagnostics_channel = require('node:diagnostics_channel');
6
- var plDrivers = require('@milaboratories/pl-drivers');
7
- var pings = require('./pings.cjs');
8
- var template = require('./template.cjs');
9
- var node_crypto = require('node:crypto');
10
-
11
- /** A utility to check network problems and gather statistics.
12
- * It's useful when we cannot connect to the server of a company
13
- * because of security reasons,
14
- * but they can send us and their DevOps team this report.
15
- *
16
- * What we check:
17
- * - pings to backend
18
- * - block registry for block overview and ui.
19
- * - autoupdate CDN.
20
- * - upload workflow to backend (workflow part via our API).
21
- * - the desktop could do multipart upload.
22
- * - the desktop could download files from S3.
23
- * - backend could download software and run it.
24
- * - backend could run python software.
25
- * - try to get something from every storage to work storage.
26
- *
27
- * We don't check backend access to S3 storage, it is checked on the start of backend.
28
- */
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ const require_pings = require('./pings.cjs');
3
+ const require_template = require('./template.cjs');
4
+ let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
5
+ let _milaboratories_pl_client = require("@milaboratories/pl-client");
6
+ let node_crypto = require("node:crypto");
7
+ let _milaboratories_pl_drivers = require("@milaboratories/pl-drivers");
8
+ let node_diagnostics_channel = require("node:diagnostics_channel");
9
+
10
+ //#region src/network_check/network_check.ts
29
11
  /** Checks connectivity to Platforma Backend, to block registry
30
- * and to auto-update CDN,
31
- * and generates a string report. */
12
+ * and to auto-update CDN,
13
+ * and generates a string report. */
32
14
  async function checkNetwork(plCredentials, plUser, plPassword, optsOverrides = {}) {
33
- const undiciLogs = [];
34
- // Subscribe to all Undici diagnostic events
35
- undiciEvents.forEach((event) => {
36
- const diagnosticChannel = node_diagnostics_channel.channel(event);
37
- diagnosticChannel.subscribe((message) => {
38
- const timestamp = new Date().toISOString();
39
- const data = { ...message };
40
- if (data?.response?.headers) {
41
- data.response = { ...data.response };
42
- data.response.headers = data.response.headers.slice();
43
- data.response.headers = data.response.headers.map((h) => h.toString());
44
- }
45
- // we try to upload big files, don't include the buffer in the report.
46
- if (data?.request?.body) {
47
- data.request = { ...data.request };
48
- data.request.body = `too big`;
49
- }
50
- undiciLogs.push(JSON.stringify({
51
- timestamp,
52
- event,
53
- data,
54
- }));
55
- });
56
- });
57
- try {
58
- const { logger, plConfig, client, signer, downloadClient, uploadBlobClient, lsDriver, httpClient, ops, } = await initNetworkCheck(plCredentials, plUser, plPassword, optsOverrides);
59
- const { filePath: filePathToDownload, fileContent: fileContentToDownload } = await template.createTempFile();
60
- const { filePath: filePathToUpload } = await template.createBigTempFile();
61
- const report = {
62
- plPings: await pings.backendPings(ops, plConfig),
63
- blockRegistryOverviewChecks: await pings.blockRegistryOverviewPings(ops, httpClient),
64
- blockGARegistryOverviewChecks: await pings.blockGARegistryOverviewPings(ops, httpClient),
65
- blockRegistryUiChecks: await pings.blockRegistryUiPings(ops, httpClient),
66
- blockGARegistryUiChecks: await pings.blockGARegistryUiPings(ops, httpClient),
67
- autoUpdateCdnChecks: await pings.autoUpdateCdnPings(ops, httpClient),
68
- uploadTemplateCheck: await template.uploadTemplate(logger, client, "Jack"),
69
- uploadFileCheck: await template.uploadFile(logger, signer, lsDriver, uploadBlobClient, client, filePathToUpload),
70
- downloadFileCheck: await template.downloadFile(logger, client, lsDriver, uploadBlobClient, downloadClient, filePathToDownload, fileContentToDownload),
71
- softwareCheck: await template.softwareCheck(client),
72
- pythonSoftwareCheck: await template.pythonSoftware(client, "Jack"),
73
- storageToDownloadReport: await template.downloadFromEveryStorage(logger, client, lsDriver, {
74
- minLsRequests: ops.everyStorageMinLsRequests,
75
- bytesLimit: ops.everyStorageBytesLimit,
76
- minFileSize: ops.everyStorageMinFileSize,
77
- maxFileSize: ops.everyStorageMaxFileSize,
78
- nFilesToCheck: ops.everyStorageNFilesToCheck,
79
- }),
80
- };
81
- return reportsToString(report, plCredentials, ops, undiciLogs);
82
- }
83
- catch (e) {
84
- return `Unhandled error while checking the network: ${e}`;
85
- }
15
+ const undiciLogs = [];
16
+ undiciEvents.forEach((event) => {
17
+ (0, node_diagnostics_channel.channel)(event).subscribe((message) => {
18
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
19
+ const data = { ...message };
20
+ if (data?.response?.headers) {
21
+ data.response = { ...data.response };
22
+ data.response.headers = data.response.headers.slice();
23
+ data.response.headers = data.response.headers.map((h) => h.toString());
24
+ }
25
+ if (data?.request?.body) {
26
+ data.request = { ...data.request };
27
+ data.request.body = `too big`;
28
+ }
29
+ undiciLogs.push(JSON.stringify({
30
+ timestamp,
31
+ event,
32
+ data
33
+ }));
34
+ });
35
+ });
36
+ try {
37
+ const { logger, plConfig, client, signer, downloadClient, uploadBlobClient, lsDriver, httpClient, ops } = await initNetworkCheck(plCredentials, plUser, plPassword, optsOverrides);
38
+ const { filePath: filePathToDownload, fileContent: fileContentToDownload } = await require_template.createTempFile();
39
+ const { filePath: filePathToUpload } = await require_template.createBigTempFile();
40
+ return reportsToString({
41
+ plPings: await require_pings.backendPings(ops, plConfig),
42
+ blockRegistryOverviewChecks: await require_pings.blockRegistryOverviewPings(ops, httpClient),
43
+ blockGARegistryOverviewChecks: await require_pings.blockGARegistryOverviewPings(ops, httpClient),
44
+ blockRegistryUiChecks: await require_pings.blockRegistryUiPings(ops, httpClient),
45
+ blockGARegistryUiChecks: await require_pings.blockGARegistryUiPings(ops, httpClient),
46
+ autoUpdateCdnChecks: await require_pings.autoUpdateCdnPings(ops, httpClient),
47
+ uploadTemplateCheck: await require_template.uploadTemplate(logger, client, "Jack"),
48
+ uploadFileCheck: await require_template.uploadFile(logger, signer, lsDriver, uploadBlobClient, client, filePathToUpload),
49
+ downloadFileCheck: await require_template.downloadFile(logger, client, lsDriver, uploadBlobClient, downloadClient, filePathToDownload, fileContentToDownload),
50
+ softwareCheck: await require_template.softwareCheck(client),
51
+ pythonSoftwareCheck: await require_template.pythonSoftware(client, "Jack"),
52
+ storageToDownloadReport: await require_template.downloadFromEveryStorage(logger, client, lsDriver, {
53
+ minLsRequests: ops.everyStorageMinLsRequests,
54
+ bytesLimit: ops.everyStorageBytesLimit,
55
+ minFileSize: ops.everyStorageMinFileSize,
56
+ maxFileSize: ops.everyStorageMaxFileSize,
57
+ nFilesToCheck: ops.everyStorageNFilesToCheck
58
+ })
59
+ }, plCredentials, ops, undiciLogs);
60
+ } catch (e) {
61
+ return `Unhandled error while checking the network: ${e}`;
62
+ }
86
63
  }
87
64
  async function initNetworkCheck(plCredentials, plUser, plPassword, optsOverrides = {}) {
88
- const ops = {
89
- pingCheckDurationMs: 10000,
90
- pingTimeoutMs: 3000,
91
- maxPingsPerSecond: 50,
92
- httpTimeoutMs: 3000,
93
- blockRegistryDurationMs: 3000,
94
- maxRegistryChecksPerSecond: 1,
95
- blockRegistryUrl: "https://blocks.pl-open.science",
96
- blockGARegistryUrl: "https://blocks-ga.pl-open.science",
97
- blockOverviewPath: "v2/overview.json",
98
- blockUiPath: "v2/milaboratories/samples-and-data/1.7.0/ui.tgz",
99
- autoUpdateCdnDurationMs: 5000,
100
- maxAutoUpdateCdnChecksPerSecond: 1,
101
- autoUpdateCdnUrl: "https://cdn.platforma.bio/software/platforma-desktop-v2/windows/amd64/latest.yml",
102
- bodyLimit: 300,
103
- everyStorageBytesLimit: 1024,
104
- everyStorageMinFileSize: 1024,
105
- everyStorageMaxFileSize: 200 * 1024 * 1024, // 200 MB
106
- everyStorageNFilesToCheck: 300,
107
- everyStorageMinLsRequests: 50,
108
- ...optsOverrides,
109
- };
110
- const plConfig = plClient.plAddressToConfig(plCredentials, {
111
- defaultRequestTimeout: ops.pingTimeoutMs,
112
- });
113
- // exposing alternative root for fields not to interfere with
114
- // projects of the user.
115
- plConfig.alternativeRoot = `check_network_${node_crypto.randomUUID()}`;
116
- const uaClient = await plClient.UnauthenticatedPlClient.build(plConfig);
117
- let auth = {};
118
- if (plUser && plPassword) {
119
- auth = await uaClient.login(plUser, plPassword);
120
- }
121
- const client = await plClient.PlClient.init(plCredentials, { authInformation: auth });
122
- const httpClient = uaClient.ll.httpDispatcher;
123
- const logger = new tsHelpers.ConsoleLoggerAdapter();
124
- // FIXME: do we need to get an actual secret?
125
- const signer = new tsHelpers.HmacSha256Signer("localSecret");
126
- // We could initialize middle-layer here, but for now it seems like an overkill.
127
- // Here's the code to do it:
128
- //
129
- // const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'platforma-network-check-'));
130
- // const ml = await MiddleLayer.init(client, tmpDir, {
131
- // logger,
132
- // localSecret: '',
133
- // localProjections: [],
134
- // openFileDialogCallback: () => Promise.resolve([]),
135
- // preferredUpdateChannel: 'stable',
136
- // });
137
- const downloadClient = plDrivers.createDownloadClient(logger, client, []);
138
- const uploadBlobClient = plDrivers.createUploadBlobClient(client, logger);
139
- const lsDriver = await plDrivers.LsDriver.init(logger, client, signer, [], () => Promise.resolve([]), []);
140
- const terminate = async () => {
141
- downloadClient.close();
142
- uploadBlobClient.close();
143
- await httpClient.close();
144
- await client.close();
145
- };
146
- return {
147
- logger,
148
- plConfig,
149
- client,
150
- signer,
151
- downloadClient,
152
- uploadBlobClient,
153
- lsDriver,
154
- httpClient,
155
- ops,
156
- terminate,
157
- };
65
+ const ops = {
66
+ pingCheckDurationMs: 1e4,
67
+ pingTimeoutMs: 3e3,
68
+ maxPingsPerSecond: 50,
69
+ httpTimeoutMs: 3e3,
70
+ blockRegistryDurationMs: 3e3,
71
+ maxRegistryChecksPerSecond: 1,
72
+ blockRegistryUrl: "https://blocks.pl-open.science",
73
+ blockGARegistryUrl: "https://blocks-ga.pl-open.science",
74
+ blockOverviewPath: "v2/overview.json",
75
+ blockUiPath: "v2/milaboratories/samples-and-data/1.7.0/ui.tgz",
76
+ autoUpdateCdnDurationMs: 5e3,
77
+ maxAutoUpdateCdnChecksPerSecond: 1,
78
+ autoUpdateCdnUrl: "https://cdn.platforma.bio/software/platforma-desktop-v2/windows/amd64/latest.yml",
79
+ bodyLimit: 300,
80
+ everyStorageBytesLimit: 1024,
81
+ everyStorageMinFileSize: 1024,
82
+ everyStorageMaxFileSize: 200 * 1024 * 1024,
83
+ everyStorageNFilesToCheck: 300,
84
+ everyStorageMinLsRequests: 50,
85
+ ...optsOverrides
86
+ };
87
+ const plConfig = (0, _milaboratories_pl_client.plAddressToConfig)(plCredentials, { defaultRequestTimeout: ops.pingTimeoutMs });
88
+ plConfig.alternativeRoot = `check_network_${(0, node_crypto.randomUUID)()}`;
89
+ const uaClient = await _milaboratories_pl_client.UnauthenticatedPlClient.build(plConfig);
90
+ let auth = {};
91
+ if (plUser && plPassword) auth = await uaClient.login(plUser, plPassword);
92
+ const client = await _milaboratories_pl_client.PlClient.init(plCredentials, { authInformation: auth });
93
+ const httpClient = uaClient.ll.httpDispatcher;
94
+ const logger = new _milaboratories_ts_helpers.ConsoleLoggerAdapter();
95
+ const signer = new _milaboratories_ts_helpers.HmacSha256Signer("localSecret");
96
+ const downloadClient = (0, _milaboratories_pl_drivers.createDownloadClient)(logger, client, []);
97
+ const uploadBlobClient = (0, _milaboratories_pl_drivers.createUploadBlobClient)(client, logger);
98
+ const lsDriver = await _milaboratories_pl_drivers.LsDriver.init(logger, client, signer, [], () => Promise.resolve([]), []);
99
+ const terminate = async () => {
100
+ downloadClient.close();
101
+ uploadBlobClient.close();
102
+ await httpClient.close();
103
+ await client.close();
104
+ };
105
+ return {
106
+ logger,
107
+ plConfig,
108
+ client,
109
+ signer,
110
+ downloadClient,
111
+ uploadBlobClient,
112
+ lsDriver,
113
+ httpClient,
114
+ ops,
115
+ terminate
116
+ };
158
117
  }
159
118
  function reportsToString(report, plEndpoint, opts, undiciLogs) {
160
- const successPings = report.plPings.filter((p) => p.response.ok);
161
- const failedPings = report.plPings.filter((p) => !p.response.ok);
162
- const successPingsBodies = [
163
- ...new Set(successPings.map((p) => JSON.stringify(p.response.value))),
164
- ];
165
- const summary = (ok) => (ok ? "OK" : "FAILED");
166
- const templateSummary = (report) => report.status === "ok" ? "OK" : report.status === "warn" ? "WARN" : "FAILED";
167
- const pings$1 = pings.reportToString(report.plPings);
168
- const blockRegistryOverview = pings.reportToString(report.blockRegistryOverviewChecks);
169
- const blockGARegistryOverview = pings.reportToString(report.blockGARegistryOverviewChecks);
170
- const blockRegistryUi = pings.reportToString(report.blockRegistryUiChecks);
171
- const blockGARegistryUi = pings.reportToString(report.blockGARegistryUiChecks);
172
- const autoUpdateCdn = pings.reportToString(report.autoUpdateCdnChecks);
173
- const storagesSummary = Object.entries(report.storageToDownloadReport)
174
- .map(([storage, report]) => `${templateSummary(report)} ${storage} storage check`)
175
- .join("\n");
176
- return `
177
- ${summary(pings$1.ok)} pings to Platforma Backend
119
+ const successPings = report.plPings.filter((p) => p.response.ok);
120
+ const failedPings = report.plPings.filter((p) => !p.response.ok);
121
+ const successPingsBodies = [...new Set(successPings.map((p) => JSON.stringify(p.response.value)))];
122
+ const summary = (ok) => ok ? "OK" : "FAILED";
123
+ const templateSummary = (report) => report.status === "ok" ? "OK" : report.status === "warn" ? "WARN" : "FAILED";
124
+ const pings = require_pings.reportToString(report.plPings);
125
+ const blockRegistryOverview = require_pings.reportToString(report.blockRegistryOverviewChecks);
126
+ const blockGARegistryOverview = require_pings.reportToString(report.blockGARegistryOverviewChecks);
127
+ const blockRegistryUi = require_pings.reportToString(report.blockRegistryUiChecks);
128
+ const blockGARegistryUi = require_pings.reportToString(report.blockGARegistryUiChecks);
129
+ const autoUpdateCdn = require_pings.reportToString(report.autoUpdateCdnChecks);
130
+ const storagesSummary = Object.entries(report.storageToDownloadReport).map(([storage, report]) => `${templateSummary(report)} ${storage} storage check`).join("\n");
131
+ return `
132
+ ${summary(pings.ok)} pings to Platforma Backend
178
133
  ${summary(blockRegistryOverview.ok)} block registry overview
179
134
  ${summary(blockGARegistryOverview.ok)} block ga registry overview
180
135
  ${summary(blockRegistryUi.ok)} block registry ui
@@ -201,7 +156,7 @@ Software check response: ${report.softwareCheck.message}
201
156
  Python software check response: ${report.pythonSoftwareCheck.message}
202
157
  Storage to download responses: ${JSON.stringify(report.storageToDownloadReport, null, 2)}
203
158
 
204
- Platforma pings: ${pings$1.details}
159
+ Platforma pings: ${pings.details}
205
160
 
206
161
  Block registry overview responses: ${blockRegistryOverview.details}
207
162
 
@@ -239,30 +194,30 @@ Undici logs:
239
194
  ${undiciLogs.join("\n")}
240
195
  `;
241
196
  }
242
- // List of Undici diagnostic channels
243
197
  const undiciEvents = [
244
- "undici:request:create", // When a new request is created
245
- "undici:request:bodySent", // When the request body is sent
246
- "undici:request:headers", // When request headers are sent
247
- "undici:request:error", // When a request encounters an error
248
- "undici:request:trailers", // When a response completes.
249
- "undici:client:sendHeaders",
250
- "undici:client:beforeConnect",
251
- "undici:client:connected",
252
- "undici:client:connectError",
253
- "undici:socket:close", // When a socket is closed
254
- "undici:socket:connect", // When a socket connects
255
- "undici:socket:error", // When a socket encounters an error
256
- "undici:pool:request", // When a request is added to the pool
257
- "undici:pool:connect", // When a pool creates a new connection
258
- "undici:pool:disconnect", // When a pool connection is closed
259
- "undici:pool:destroy", // When a pool is destroyed
260
- "undici:dispatcher:request", // When a dispatcher processes a request
261
- "undici:dispatcher:connect", // When a dispatcher connects
262
- "undici:dispatcher:disconnect", // When a dispatcher disconnects
263
- "undici:dispatcher:retry", // When a dispatcher retries a request
198
+ "undici:request:create",
199
+ "undici:request:bodySent",
200
+ "undici:request:headers",
201
+ "undici:request:error",
202
+ "undici:request:trailers",
203
+ "undici:client:sendHeaders",
204
+ "undici:client:beforeConnect",
205
+ "undici:client:connected",
206
+ "undici:client:connectError",
207
+ "undici:socket:close",
208
+ "undici:socket:connect",
209
+ "undici:socket:error",
210
+ "undici:pool:request",
211
+ "undici:pool:connect",
212
+ "undici:pool:disconnect",
213
+ "undici:pool:destroy",
214
+ "undici:dispatcher:request",
215
+ "undici:dispatcher:connect",
216
+ "undici:dispatcher:disconnect",
217
+ "undici:dispatcher:retry"
264
218
  ];
265
219
 
220
+ //#endregion
266
221
  exports.checkNetwork = checkNetwork;
267
222
  exports.initNetworkCheck = initNetworkCheck;
268
- //# sourceMappingURL=network_check.cjs.map
223
+ //# sourceMappingURL=network_check.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"network_check.cjs","sources":["../../src/network_check/network_check.ts"],"sourcesContent":["/** A utility to check network problems and gather statistics.\n * It's useful when we cannot connect to the server of a company\n * because of security reasons,\n * but they can send us and their DevOps team this report.\n *\n * What we check:\n * - pings to backend\n * - block registry for block overview and ui.\n * - autoupdate CDN.\n * - upload workflow to backend (workflow part via our API).\n * - the desktop could do multipart upload.\n * - the desktop could download files from S3.\n * - backend could download software and run it.\n * - backend could run python software.\n * - try to get something from every storage to work storage.\n *\n * We don't check backend access to S3 storage, it is checked on the start of backend.\n */\n\nimport type { AuthInformation, PlClientConfig } from \"@milaboratories/pl-client\";\nimport { PlClient, UnauthenticatedPlClient, plAddressToConfig } from \"@milaboratories/pl-client\";\nimport type { MiLogger, Signer } from \"@milaboratories/ts-helpers\";\nimport { ConsoleLoggerAdapter, HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport { channel } from \"node:diagnostics_channel\";\nimport type { ClientDownload, ClientUpload } from \"@milaboratories/pl-drivers\";\nimport { LsDriver, createDownloadClient, createUploadBlobClient } from \"@milaboratories/pl-drivers\";\nimport type { HttpNetworkReport, NetworkReport } from \"./pings\";\nimport {\n autoUpdateCdnPings,\n backendPings,\n blockGARegistryOverviewPings,\n blockGARegistryUiPings,\n blockRegistryOverviewPings,\n blockRegistryUiPings,\n reportToString,\n} from \"./pings\";\nimport type { Dispatcher } from \"undici\";\nimport type { TemplateReport } from \"./template\";\nimport {\n uploadTemplate,\n uploadFile,\n downloadFile,\n createTempFile,\n pythonSoftware,\n softwareCheck,\n createBigTempFile,\n downloadFromEveryStorage,\n} from \"./template\";\nimport { randomUUID } from \"node:crypto\";\n\n/** All reports we need to collect. */\ninterface NetworkReports {\n plPings: NetworkReport<string>[];\n\n blockRegistryOverviewChecks: HttpNetworkReport[];\n blockGARegistryOverviewChecks: HttpNetworkReport[];\n blockRegistryUiChecks: HttpNetworkReport[];\n blockGARegistryUiChecks: HttpNetworkReport[];\n\n autoUpdateCdnChecks: HttpNetworkReport[];\n\n uploadTemplateCheck: TemplateReport;\n uploadFileCheck: TemplateReport;\n downloadFileCheck: TemplateReport;\n softwareCheck: TemplateReport;\n pythonSoftwareCheck: TemplateReport;\n storageToDownloadReport: Record<string, TemplateReport>;\n}\n\nexport interface CheckNetworkOpts {\n /** Platforma Backend pings options. */\n pingCheckDurationMs: number;\n pingTimeoutMs: number;\n maxPingsPerSecond: number;\n\n /** An options for CDN and block registry. */\n httpTimeoutMs: number;\n\n /** Block registry pings options. */\n blockRegistryDurationMs: number;\n maxRegistryChecksPerSecond: number;\n blockRegistryUrl: string;\n blockGARegistryUrl: string;\n blockOverviewPath: string;\n blockUiPath: string;\n\n /** CDN for auto-update pings options. */\n autoUpdateCdnDurationMs: number;\n maxAutoUpdateCdnChecksPerSecond: number;\n autoUpdateCdnUrl: string;\n\n /** Body limit for requests. */\n bodyLimit: number;\n\n /** Limit for the size of files to download from every storage. */\n everyStorageBytesLimit: number;\n /** Minimal size of files to create a directory from for every storage. */\n everyStorageMinFileSize: number;\n /** Maximal size of files to create a directory from for every storage. */\n everyStorageMaxFileSize: number;\n /** How many files to check from every storage. */\n everyStorageNFilesToCheck: number;\n /** Minimal number of ls requests for every storage. */\n everyStorageMinLsRequests: number;\n}\n\n/** Checks connectivity to Platforma Backend, to block registry\n * and to auto-update CDN,\n * and generates a string report. */\nexport async function checkNetwork(\n plCredentials: string,\n plUser: string | undefined,\n plPassword: string | undefined,\n optsOverrides: Partial<CheckNetworkOpts> = {},\n): Promise<string> {\n const undiciLogs: any[] = [];\n // Subscribe to all Undici diagnostic events\n undiciEvents.forEach((event) => {\n const diagnosticChannel = channel(event);\n diagnosticChannel.subscribe((message: any) => {\n const timestamp = new Date().toISOString();\n const data = { ...message };\n if (data?.response?.headers) {\n data.response = { ...data.response };\n data.response.headers = data.response.headers.slice();\n data.response.headers = data.response.headers.map((h: any) => h.toString());\n }\n\n // we try to upload big files, don't include the buffer in the report.\n if (data?.request?.body) {\n data.request = { ...data.request };\n data.request.body = `too big`;\n }\n\n undiciLogs.push(\n JSON.stringify({\n timestamp,\n event,\n data,\n }),\n );\n });\n });\n\n try {\n const {\n logger,\n plConfig,\n client,\n signer,\n downloadClient,\n uploadBlobClient,\n lsDriver,\n httpClient,\n ops,\n } = await initNetworkCheck(plCredentials, plUser, plPassword, optsOverrides);\n\n const { filePath: filePathToDownload, fileContent: fileContentToDownload } =\n await createTempFile();\n const { filePath: filePathToUpload } = await createBigTempFile();\n\n const report: NetworkReports = {\n plPings: await backendPings(ops, plConfig),\n blockRegistryOverviewChecks: await blockRegistryOverviewPings(ops, httpClient),\n blockGARegistryOverviewChecks: await blockGARegistryOverviewPings(ops, httpClient),\n blockRegistryUiChecks: await blockRegistryUiPings(ops, httpClient),\n blockGARegistryUiChecks: await blockGARegistryUiPings(ops, httpClient),\n\n autoUpdateCdnChecks: await autoUpdateCdnPings(ops, httpClient),\n\n uploadTemplateCheck: await uploadTemplate(logger, client, \"Jack\"),\n uploadFileCheck: await uploadFile(\n logger,\n signer,\n lsDriver,\n uploadBlobClient,\n client,\n filePathToUpload,\n ),\n downloadFileCheck: await downloadFile(\n logger,\n client,\n lsDriver,\n uploadBlobClient,\n downloadClient,\n filePathToDownload,\n fileContentToDownload,\n ),\n softwareCheck: await softwareCheck(client),\n pythonSoftwareCheck: await pythonSoftware(client, \"Jack\"),\n storageToDownloadReport: await downloadFromEveryStorage(logger, client, lsDriver, {\n minLsRequests: ops.everyStorageMinLsRequests,\n bytesLimit: ops.everyStorageBytesLimit,\n minFileSize: ops.everyStorageMinFileSize,\n maxFileSize: ops.everyStorageMaxFileSize,\n nFilesToCheck: ops.everyStorageNFilesToCheck,\n }),\n };\n\n return reportsToString(report, plCredentials, ops, undiciLogs);\n } catch (e) {\n return `Unhandled error while checking the network: ${e}`;\n }\n}\n\nexport async function initNetworkCheck(\n plCredentials: string,\n plUser: string | undefined,\n plPassword: string | undefined,\n optsOverrides: Partial<CheckNetworkOpts> = {},\n): Promise<{\n logger: MiLogger;\n plConfig: PlClientConfig;\n signer: Signer;\n client: PlClient;\n downloadClient: ClientDownload;\n uploadBlobClient: ClientUpload;\n lsDriver: LsDriver;\n httpClient: Dispatcher;\n ops: CheckNetworkOpts;\n terminate: () => Promise<void>;\n}> {\n const ops: CheckNetworkOpts = {\n pingCheckDurationMs: 10000,\n pingTimeoutMs: 3000,\n maxPingsPerSecond: 50,\n\n httpTimeoutMs: 3000,\n\n blockRegistryDurationMs: 3000,\n maxRegistryChecksPerSecond: 1,\n\n blockRegistryUrl: \"https://blocks.pl-open.science\",\n blockGARegistryUrl: \"https://blocks-ga.pl-open.science\",\n blockOverviewPath: \"v2/overview.json\",\n blockUiPath: \"v2/milaboratories/samples-and-data/1.7.0/ui.tgz\",\n\n autoUpdateCdnDurationMs: 5000,\n maxAutoUpdateCdnChecksPerSecond: 1,\n autoUpdateCdnUrl:\n \"https://cdn.platforma.bio/software/platforma-desktop-v2/windows/amd64/latest.yml\",\n\n bodyLimit: 300,\n\n everyStorageBytesLimit: 1024,\n everyStorageMinFileSize: 1024,\n everyStorageMaxFileSize: 200 * 1024 * 1024, // 200 MB\n everyStorageNFilesToCheck: 300,\n everyStorageMinLsRequests: 50,\n ...optsOverrides,\n };\n\n const plConfig = plAddressToConfig(plCredentials, {\n defaultRequestTimeout: ops.pingTimeoutMs,\n });\n\n // exposing alternative root for fields not to interfere with\n // projects of the user.\n plConfig.alternativeRoot = `check_network_${randomUUID()}`;\n\n const uaClient = await UnauthenticatedPlClient.build(plConfig);\n\n let auth: AuthInformation = {};\n if (plUser && plPassword) {\n auth = await uaClient.login(plUser, plPassword);\n }\n\n const client = await PlClient.init(plCredentials, { authInformation: auth });\n\n const httpClient = uaClient.ll.httpDispatcher;\n const logger = new ConsoleLoggerAdapter();\n\n // FIXME: do we need to get an actual secret?\n const signer = new HmacSha256Signer(\"localSecret\");\n\n // We could initialize middle-layer here, but for now it seems like an overkill.\n // Here's the code to do it:\n //\n // const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'platforma-network-check-'));\n // const ml = await MiddleLayer.init(client, tmpDir, {\n // logger,\n // localSecret: '',\n // localProjections: [],\n // openFileDialogCallback: () => Promise.resolve([]),\n // preferredUpdateChannel: 'stable',\n // });\n\n const downloadClient = createDownloadClient(logger, client, []);\n const uploadBlobClient = createUploadBlobClient(client, logger);\n\n const lsDriver = await LsDriver.init(logger, client, signer, [], () => Promise.resolve([]), []);\n\n const terminate = async () => {\n downloadClient.close();\n uploadBlobClient.close();\n await httpClient.close();\n await client.close();\n };\n\n return {\n logger,\n plConfig,\n client,\n signer,\n downloadClient,\n uploadBlobClient,\n lsDriver,\n httpClient,\n ops,\n terminate,\n };\n}\n\nfunction reportsToString(\n report: NetworkReports,\n plEndpoint: string,\n opts: CheckNetworkOpts,\n undiciLogs: any[],\n): string {\n const successPings = report.plPings.filter((p) => p.response.ok);\n const failedPings = report.plPings.filter((p) => !p.response.ok);\n const successPingsBodies = [\n ...new Set(successPings.map((p) => JSON.stringify((p.response as any).value))),\n ];\n\n const summary = (ok: boolean) => (ok ? \"OK\" : \"FAILED\");\n const templateSummary = (report: TemplateReport) =>\n report.status === \"ok\" ? \"OK\" : report.status === \"warn\" ? \"WARN\" : \"FAILED\";\n\n const pings = reportToString(report.plPings);\n const blockRegistryOverview = reportToString(report.blockRegistryOverviewChecks);\n const blockGARegistryOverview = reportToString(report.blockGARegistryOverviewChecks);\n const blockRegistryUi = reportToString(report.blockRegistryUiChecks);\n const blockGARegistryUi = reportToString(report.blockGARegistryUiChecks);\n const autoUpdateCdn = reportToString(report.autoUpdateCdnChecks);\n\n const storagesSummary = Object.entries(report.storageToDownloadReport)\n .map(([storage, report]) => `${templateSummary(report)} ${storage} storage check`)\n .join(\"\\n\");\n\n return `\n${summary(pings.ok)} pings to Platforma Backend\n${summary(blockRegistryOverview.ok)} block registry overview\n${summary(blockGARegistryOverview.ok)} block ga registry overview\n${summary(blockRegistryUi.ok)} block registry ui\n${summary(blockGARegistryUi.ok)} block ga registry ui\n${summary(autoUpdateCdn.ok)} auto-update CDN\n${templateSummary(report.uploadTemplateCheck)} upload template\n${templateSummary(report.uploadFileCheck)} upload file\n${templateSummary(report.downloadFileCheck)} download file\n${templateSummary(report.softwareCheck)} software check\n${templateSummary(report.pythonSoftwareCheck)} python software check\n${storagesSummary}\n\ndetails:\npl endpoint: ${plEndpoint};\noptions: ${JSON.stringify(opts, null, 2)}.\n\nUpload template response: ${report.uploadTemplateCheck.message}\n\nUpload file response: ${report.uploadFileCheck.message}\n\nDownload file response: ${report.downloadFileCheck.message}\n\nSoftware check response: ${report.softwareCheck.message}\nPython software check response: ${report.pythonSoftwareCheck.message}\nStorage to download responses: ${JSON.stringify(report.storageToDownloadReport, null, 2)}\n\nPlatforma pings: ${pings.details}\n\nBlock registry overview responses: ${blockRegistryOverview.details}\n\nBlock ga registry overview responses: ${blockGARegistryOverview.details}\n\nBlock registry ui responses: ${blockRegistryUi.details}\n\nBlock ga registry ui responses: ${blockGARegistryUi.details}\n\nAuto-update CDN responses: ${autoUpdateCdn.details}\n\ndumps:\nBlock registry overview dumps:\n${JSON.stringify(report.blockRegistryOverviewChecks, null, 2)}\n\nBlock ga registry overview dumps:\n${JSON.stringify(report.blockGARegistryOverviewChecks, null, 2)}\n\nBlock registry ui dumps:\n${JSON.stringify(report.blockRegistryUiChecks, null, 2)}\n\nBlock ga registry ui dumps:\n${JSON.stringify(report.blockGARegistryUiChecks, null, 2)}\n\nAuto-update CDN dumps:\n${JSON.stringify(report.autoUpdateCdnChecks, null, 2)}\n\nPlatforma pings error dumps:\n${JSON.stringify(failedPings, null, 2)}\n\nPlatforma pings success dump examples:\n${JSON.stringify(successPingsBodies, null, 2)}\n\nUndici logs:\n${undiciLogs.join(\"\\n\")}\n`;\n}\n\n// List of Undici diagnostic channels\nconst undiciEvents: string[] = [\n \"undici:request:create\", // When a new request is created\n \"undici:request:bodySent\", // When the request body is sent\n \"undici:request:headers\", // When request headers are sent\n \"undici:request:error\", // When a request encounters an error\n \"undici:request:trailers\", // When a response completes.\n\n \"undici:client:sendHeaders\",\n \"undici:client:beforeConnect\",\n \"undici:client:connected\",\n \"undici:client:connectError\",\n\n \"undici:socket:close\", // When a socket is closed\n \"undici:socket:connect\", // When a socket connects\n \"undici:socket:error\", // When a socket encounters an error\n\n \"undici:pool:request\", // When a request is added to the pool\n \"undici:pool:connect\", // When a pool creates a new connection\n \"undici:pool:disconnect\", // When a pool connection is closed\n \"undici:pool:destroy\", // When a pool is destroyed\n \"undici:dispatcher:request\", // When a dispatcher processes a request\n \"undici:dispatcher:connect\", // When a dispatcher connects\n \"undici:dispatcher:disconnect\", // When a dispatcher disconnects\n \"undici:dispatcher:retry\", // When a dispatcher retries a request\n];\n"],"names":["channel","createTempFile","createBigTempFile","backendPings","blockRegistryOverviewPings","blockGARegistryOverviewPings","blockRegistryUiPings","blockGARegistryUiPings","autoUpdateCdnPings","uploadTemplate","uploadFile","downloadFile","softwareCheck","pythonSoftware","downloadFromEveryStorage","plAddressToConfig","randomUUID","UnauthenticatedPlClient","PlClient","ConsoleLoggerAdapter","HmacSha256Signer","createDownloadClient","createUploadBlobClient","LsDriver","pings","reportToString"],"mappings":"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"}
1
+ {"version":3,"file":"network_check.cjs","names":["createTempFile","createBigTempFile","backendPings","blockRegistryOverviewPings","blockGARegistryOverviewPings","blockRegistryUiPings","blockGARegistryUiPings","autoUpdateCdnPings","uploadTemplate","uploadFile","downloadFile","softwareCheck","pythonSoftware","downloadFromEveryStorage","UnauthenticatedPlClient","PlClient","ConsoleLoggerAdapter","HmacSha256Signer","LsDriver","reportToString"],"sources":["../../src/network_check/network_check.ts"],"sourcesContent":["/** A utility to check network problems and gather statistics.\n * It's useful when we cannot connect to the server of a company\n * because of security reasons,\n * but they can send us and their DevOps team this report.\n *\n * What we check:\n * - pings to backend\n * - block registry for block overview and ui.\n * - autoupdate CDN.\n * - upload workflow to backend (workflow part via our API).\n * - the desktop could do multipart upload.\n * - the desktop could download files from S3.\n * - backend could download software and run it.\n * - backend could run python software.\n * - try to get something from every storage to work storage.\n *\n * We don't check backend access to S3 storage, it is checked on the start of backend.\n */\n\nimport type { AuthInformation, PlClientConfig } from \"@milaboratories/pl-client\";\nimport { PlClient, UnauthenticatedPlClient, plAddressToConfig } from \"@milaboratories/pl-client\";\nimport type { MiLogger, Signer } from \"@milaboratories/ts-helpers\";\nimport { ConsoleLoggerAdapter, HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport { channel } from \"node:diagnostics_channel\";\nimport type { ClientDownload, ClientUpload } from \"@milaboratories/pl-drivers\";\nimport { LsDriver, createDownloadClient, createUploadBlobClient } from \"@milaboratories/pl-drivers\";\nimport type { HttpNetworkReport, NetworkReport } from \"./pings\";\nimport {\n autoUpdateCdnPings,\n backendPings,\n blockGARegistryOverviewPings,\n blockGARegistryUiPings,\n blockRegistryOverviewPings,\n blockRegistryUiPings,\n reportToString,\n} from \"./pings\";\nimport type { Dispatcher } from \"undici\";\nimport type { TemplateReport } from \"./template\";\nimport {\n uploadTemplate,\n uploadFile,\n downloadFile,\n createTempFile,\n pythonSoftware,\n softwareCheck,\n createBigTempFile,\n downloadFromEveryStorage,\n} from \"./template\";\nimport { randomUUID } from \"node:crypto\";\n\n/** All reports we need to collect. */\ninterface NetworkReports {\n plPings: NetworkReport<string>[];\n\n blockRegistryOverviewChecks: HttpNetworkReport[];\n blockGARegistryOverviewChecks: HttpNetworkReport[];\n blockRegistryUiChecks: HttpNetworkReport[];\n blockGARegistryUiChecks: HttpNetworkReport[];\n\n autoUpdateCdnChecks: HttpNetworkReport[];\n\n uploadTemplateCheck: TemplateReport;\n uploadFileCheck: TemplateReport;\n downloadFileCheck: TemplateReport;\n softwareCheck: TemplateReport;\n pythonSoftwareCheck: TemplateReport;\n storageToDownloadReport: Record<string, TemplateReport>;\n}\n\nexport interface CheckNetworkOpts {\n /** Platforma Backend pings options. */\n pingCheckDurationMs: number;\n pingTimeoutMs: number;\n maxPingsPerSecond: number;\n\n /** An options for CDN and block registry. */\n httpTimeoutMs: number;\n\n /** Block registry pings options. */\n blockRegistryDurationMs: number;\n maxRegistryChecksPerSecond: number;\n blockRegistryUrl: string;\n blockGARegistryUrl: string;\n blockOverviewPath: string;\n blockUiPath: string;\n\n /** CDN for auto-update pings options. */\n autoUpdateCdnDurationMs: number;\n maxAutoUpdateCdnChecksPerSecond: number;\n autoUpdateCdnUrl: string;\n\n /** Body limit for requests. */\n bodyLimit: number;\n\n /** Limit for the size of files to download from every storage. */\n everyStorageBytesLimit: number;\n /** Minimal size of files to create a directory from for every storage. */\n everyStorageMinFileSize: number;\n /** Maximal size of files to create a directory from for every storage. */\n everyStorageMaxFileSize: number;\n /** How many files to check from every storage. */\n everyStorageNFilesToCheck: number;\n /** Minimal number of ls requests for every storage. */\n everyStorageMinLsRequests: number;\n}\n\n/** Checks connectivity to Platforma Backend, to block registry\n * and to auto-update CDN,\n * and generates a string report. */\nexport async function checkNetwork(\n plCredentials: string,\n plUser: string | undefined,\n plPassword: string | undefined,\n optsOverrides: Partial<CheckNetworkOpts> = {},\n): Promise<string> {\n const undiciLogs: any[] = [];\n // Subscribe to all Undici diagnostic events\n undiciEvents.forEach((event) => {\n const diagnosticChannel = channel(event);\n diagnosticChannel.subscribe((message: any) => {\n const timestamp = new Date().toISOString();\n const data = { ...message };\n if (data?.response?.headers) {\n data.response = { ...data.response };\n data.response.headers = data.response.headers.slice();\n data.response.headers = data.response.headers.map((h: any) => h.toString());\n }\n\n // we try to upload big files, don't include the buffer in the report.\n if (data?.request?.body) {\n data.request = { ...data.request };\n data.request.body = `too big`;\n }\n\n undiciLogs.push(\n JSON.stringify({\n timestamp,\n event,\n data,\n }),\n );\n });\n });\n\n try {\n const {\n logger,\n plConfig,\n client,\n signer,\n downloadClient,\n uploadBlobClient,\n lsDriver,\n httpClient,\n ops,\n } = await initNetworkCheck(plCredentials, plUser, plPassword, optsOverrides);\n\n const { filePath: filePathToDownload, fileContent: fileContentToDownload } =\n await createTempFile();\n const { filePath: filePathToUpload } = await createBigTempFile();\n\n const report: NetworkReports = {\n plPings: await backendPings(ops, plConfig),\n blockRegistryOverviewChecks: await blockRegistryOverviewPings(ops, httpClient),\n blockGARegistryOverviewChecks: await blockGARegistryOverviewPings(ops, httpClient),\n blockRegistryUiChecks: await blockRegistryUiPings(ops, httpClient),\n blockGARegistryUiChecks: await blockGARegistryUiPings(ops, httpClient),\n\n autoUpdateCdnChecks: await autoUpdateCdnPings(ops, httpClient),\n\n uploadTemplateCheck: await uploadTemplate(logger, client, \"Jack\"),\n uploadFileCheck: await uploadFile(\n logger,\n signer,\n lsDriver,\n uploadBlobClient,\n client,\n filePathToUpload,\n ),\n downloadFileCheck: await downloadFile(\n logger,\n client,\n lsDriver,\n uploadBlobClient,\n downloadClient,\n filePathToDownload,\n fileContentToDownload,\n ),\n softwareCheck: await softwareCheck(client),\n pythonSoftwareCheck: await pythonSoftware(client, \"Jack\"),\n storageToDownloadReport: await downloadFromEveryStorage(logger, client, lsDriver, {\n minLsRequests: ops.everyStorageMinLsRequests,\n bytesLimit: ops.everyStorageBytesLimit,\n minFileSize: ops.everyStorageMinFileSize,\n maxFileSize: ops.everyStorageMaxFileSize,\n nFilesToCheck: ops.everyStorageNFilesToCheck,\n }),\n };\n\n return reportsToString(report, plCredentials, ops, undiciLogs);\n } catch (e) {\n return `Unhandled error while checking the network: ${e}`;\n }\n}\n\nexport async function initNetworkCheck(\n plCredentials: string,\n plUser: string | undefined,\n plPassword: string | undefined,\n optsOverrides: Partial<CheckNetworkOpts> = {},\n): Promise<{\n logger: MiLogger;\n plConfig: PlClientConfig;\n signer: Signer;\n client: PlClient;\n downloadClient: ClientDownload;\n uploadBlobClient: ClientUpload;\n lsDriver: LsDriver;\n httpClient: Dispatcher;\n ops: CheckNetworkOpts;\n terminate: () => Promise<void>;\n}> {\n const ops: CheckNetworkOpts = {\n pingCheckDurationMs: 10000,\n pingTimeoutMs: 3000,\n maxPingsPerSecond: 50,\n\n httpTimeoutMs: 3000,\n\n blockRegistryDurationMs: 3000,\n maxRegistryChecksPerSecond: 1,\n\n blockRegistryUrl: \"https://blocks.pl-open.science\",\n blockGARegistryUrl: \"https://blocks-ga.pl-open.science\",\n blockOverviewPath: \"v2/overview.json\",\n blockUiPath: \"v2/milaboratories/samples-and-data/1.7.0/ui.tgz\",\n\n autoUpdateCdnDurationMs: 5000,\n maxAutoUpdateCdnChecksPerSecond: 1,\n autoUpdateCdnUrl:\n \"https://cdn.platforma.bio/software/platforma-desktop-v2/windows/amd64/latest.yml\",\n\n bodyLimit: 300,\n\n everyStorageBytesLimit: 1024,\n everyStorageMinFileSize: 1024,\n everyStorageMaxFileSize: 200 * 1024 * 1024, // 200 MB\n everyStorageNFilesToCheck: 300,\n everyStorageMinLsRequests: 50,\n ...optsOverrides,\n };\n\n const plConfig = plAddressToConfig(plCredentials, {\n defaultRequestTimeout: ops.pingTimeoutMs,\n });\n\n // exposing alternative root for fields not to interfere with\n // projects of the user.\n plConfig.alternativeRoot = `check_network_${randomUUID()}`;\n\n const uaClient = await UnauthenticatedPlClient.build(plConfig);\n\n let auth: AuthInformation = {};\n if (plUser && plPassword) {\n auth = await uaClient.login(plUser, plPassword);\n }\n\n const client = await PlClient.init(plCredentials, { authInformation: auth });\n\n const httpClient = uaClient.ll.httpDispatcher;\n const logger = new ConsoleLoggerAdapter();\n\n // FIXME: do we need to get an actual secret?\n const signer = new HmacSha256Signer(\"localSecret\");\n\n // We could initialize middle-layer here, but for now it seems like an overkill.\n // Here's the code to do it:\n //\n // const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'platforma-network-check-'));\n // const ml = await MiddleLayer.init(client, tmpDir, {\n // logger,\n // localSecret: '',\n // localProjections: [],\n // openFileDialogCallback: () => Promise.resolve([]),\n // preferredUpdateChannel: 'stable',\n // });\n\n const downloadClient = createDownloadClient(logger, client, []);\n const uploadBlobClient = createUploadBlobClient(client, logger);\n\n const lsDriver = await LsDriver.init(logger, client, signer, [], () => Promise.resolve([]), []);\n\n const terminate = async () => {\n downloadClient.close();\n uploadBlobClient.close();\n await httpClient.close();\n await client.close();\n };\n\n return {\n logger,\n plConfig,\n client,\n signer,\n downloadClient,\n uploadBlobClient,\n lsDriver,\n httpClient,\n ops,\n terminate,\n };\n}\n\nfunction reportsToString(\n report: NetworkReports,\n plEndpoint: string,\n opts: CheckNetworkOpts,\n undiciLogs: any[],\n): string {\n const successPings = report.plPings.filter((p) => p.response.ok);\n const failedPings = report.plPings.filter((p) => !p.response.ok);\n const successPingsBodies = [\n ...new Set(successPings.map((p) => JSON.stringify((p.response as any).value))),\n ];\n\n const summary = (ok: boolean) => (ok ? \"OK\" : \"FAILED\");\n const templateSummary = (report: TemplateReport) =>\n report.status === \"ok\" ? \"OK\" : report.status === \"warn\" ? \"WARN\" : \"FAILED\";\n\n const pings = reportToString(report.plPings);\n const blockRegistryOverview = reportToString(report.blockRegistryOverviewChecks);\n const blockGARegistryOverview = reportToString(report.blockGARegistryOverviewChecks);\n const blockRegistryUi = reportToString(report.blockRegistryUiChecks);\n const blockGARegistryUi = reportToString(report.blockGARegistryUiChecks);\n const autoUpdateCdn = reportToString(report.autoUpdateCdnChecks);\n\n const storagesSummary = Object.entries(report.storageToDownloadReport)\n .map(([storage, report]) => `${templateSummary(report)} ${storage} storage check`)\n .join(\"\\n\");\n\n return `\n${summary(pings.ok)} pings to Platforma Backend\n${summary(blockRegistryOverview.ok)} block registry overview\n${summary(blockGARegistryOverview.ok)} block ga registry overview\n${summary(blockRegistryUi.ok)} block registry ui\n${summary(blockGARegistryUi.ok)} block ga registry ui\n${summary(autoUpdateCdn.ok)} auto-update CDN\n${templateSummary(report.uploadTemplateCheck)} upload template\n${templateSummary(report.uploadFileCheck)} upload file\n${templateSummary(report.downloadFileCheck)} download file\n${templateSummary(report.softwareCheck)} software check\n${templateSummary(report.pythonSoftwareCheck)} python software check\n${storagesSummary}\n\ndetails:\npl endpoint: ${plEndpoint};\noptions: ${JSON.stringify(opts, null, 2)}.\n\nUpload template response: ${report.uploadTemplateCheck.message}\n\nUpload file response: ${report.uploadFileCheck.message}\n\nDownload file response: ${report.downloadFileCheck.message}\n\nSoftware check response: ${report.softwareCheck.message}\nPython software check response: ${report.pythonSoftwareCheck.message}\nStorage to download responses: ${JSON.stringify(report.storageToDownloadReport, null, 2)}\n\nPlatforma pings: ${pings.details}\n\nBlock registry overview responses: ${blockRegistryOverview.details}\n\nBlock ga registry overview responses: ${blockGARegistryOverview.details}\n\nBlock registry ui responses: ${blockRegistryUi.details}\n\nBlock ga registry ui responses: ${blockGARegistryUi.details}\n\nAuto-update CDN responses: ${autoUpdateCdn.details}\n\ndumps:\nBlock registry overview dumps:\n${JSON.stringify(report.blockRegistryOverviewChecks, null, 2)}\n\nBlock ga registry overview dumps:\n${JSON.stringify(report.blockGARegistryOverviewChecks, null, 2)}\n\nBlock registry ui dumps:\n${JSON.stringify(report.blockRegistryUiChecks, null, 2)}\n\nBlock ga registry ui dumps:\n${JSON.stringify(report.blockGARegistryUiChecks, null, 2)}\n\nAuto-update CDN dumps:\n${JSON.stringify(report.autoUpdateCdnChecks, null, 2)}\n\nPlatforma pings error dumps:\n${JSON.stringify(failedPings, null, 2)}\n\nPlatforma pings success dump examples:\n${JSON.stringify(successPingsBodies, null, 2)}\n\nUndici logs:\n${undiciLogs.join(\"\\n\")}\n`;\n}\n\n// List of Undici diagnostic channels\nconst undiciEvents: string[] = [\n \"undici:request:create\", // When a new request is created\n \"undici:request:bodySent\", // When the request body is sent\n \"undici:request:headers\", // When request headers are sent\n \"undici:request:error\", // When a request encounters an error\n \"undici:request:trailers\", // When a response completes.\n\n \"undici:client:sendHeaders\",\n \"undici:client:beforeConnect\",\n \"undici:client:connected\",\n \"undici:client:connectError\",\n\n \"undici:socket:close\", // When a socket is closed\n \"undici:socket:connect\", // When a socket connects\n \"undici:socket:error\", // When a socket encounters an error\n\n \"undici:pool:request\", // When a request is added to the pool\n \"undici:pool:connect\", // When a pool creates a new connection\n \"undici:pool:disconnect\", // When a pool connection is closed\n \"undici:pool:destroy\", // When a pool is destroyed\n \"undici:dispatcher:request\", // When a dispatcher processes a request\n \"undici:dispatcher:connect\", // When a dispatcher connects\n \"undici:dispatcher:disconnect\", // When a dispatcher disconnects\n \"undici:dispatcher:retry\", // When a dispatcher retries a request\n];\n"],"mappings":"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"}