@milaboratories/pl-middle-layer 1.42.2 → 1.42.4

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 (410) hide show
  1. package/dist/block_registry/index.d.ts +0 -1
  2. package/dist/block_registry/registry-v2-provider.cjs +22 -0
  3. package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
  4. package/dist/block_registry/registry-v2-provider.d.ts +0 -1
  5. package/dist/block_registry/registry-v2-provider.js +20 -0
  6. package/dist/block_registry/registry-v2-provider.js.map +1 -0
  7. package/dist/block_registry/registry.cjs +231 -0
  8. package/dist/block_registry/registry.cjs.map +1 -0
  9. package/dist/block_registry/registry.d.ts +0 -1
  10. package/dist/block_registry/registry.js +227 -0
  11. package/dist/block_registry/registry.js.map +1 -0
  12. package/dist/block_registry/registry.test.d.ts +0 -1
  13. package/dist/block_registry/watcher.cjs +174 -0
  14. package/dist/block_registry/watcher.cjs.map +1 -0
  15. package/dist/block_registry/watcher.d.ts +0 -1
  16. package/dist/block_registry/watcher.js +171 -0
  17. package/dist/block_registry/watcher.js.map +1 -0
  18. package/dist/block_registry/well_known_registries.cjs +19 -0
  19. package/dist/block_registry/well_known_registries.cjs.map +1 -0
  20. package/dist/block_registry/well_known_registries.d.ts +0 -1
  21. package/dist/block_registry/well_known_registries.js +15 -0
  22. package/dist/block_registry/well_known_registries.js.map +1 -0
  23. package/dist/cfg_render/executor.cjs +159 -0
  24. package/dist/cfg_render/executor.cjs.map +1 -0
  25. package/dist/cfg_render/executor.d.ts +0 -1
  26. package/dist/cfg_render/executor.js +156 -0
  27. package/dist/cfg_render/executor.js.map +1 -0
  28. package/dist/cfg_render/executor.test.d.ts +0 -1
  29. package/dist/cfg_render/operation.d.ts +0 -1
  30. package/dist/cfg_render/renderer.cjs +528 -0
  31. package/dist/cfg_render/renderer.cjs.map +1 -0
  32. package/dist/cfg_render/renderer.d.ts +0 -1
  33. package/dist/cfg_render/renderer.js +525 -0
  34. package/dist/cfg_render/renderer.js.map +1 -0
  35. package/dist/cfg_render/traverse.cjs +65 -0
  36. package/dist/cfg_render/traverse.cjs.map +1 -0
  37. package/dist/cfg_render/traverse.d.ts +0 -1
  38. package/dist/cfg_render/traverse.js +63 -0
  39. package/dist/cfg_render/traverse.js.map +1 -0
  40. package/dist/cfg_render/util.cjs +32 -0
  41. package/dist/cfg_render/util.cjs.map +1 -0
  42. package/dist/cfg_render/util.d.ts +0 -1
  43. package/dist/cfg_render/util.js +28 -0
  44. package/dist/cfg_render/util.js.map +1 -0
  45. package/dist/debug/index.cjs +21 -0
  46. package/dist/debug/index.cjs.map +1 -0
  47. package/dist/debug/index.d.ts +0 -1
  48. package/dist/debug/index.js +19 -0
  49. package/dist/debug/index.js.map +1 -0
  50. package/dist/dev_env/index.cjs +59 -0
  51. package/dist/dev_env/index.cjs.map +1 -0
  52. package/dist/dev_env/index.d.ts +0 -1
  53. package/dist/dev_env/index.js +48 -0
  54. package/dist/dev_env/index.js.map +1 -0
  55. package/dist/dev_env/util.cjs +37 -0
  56. package/dist/dev_env/util.cjs.map +1 -0
  57. package/dist/dev_env/util.d.ts +0 -1
  58. package/dist/dev_env/util.js +16 -0
  59. package/dist/dev_env/util.js.map +1 -0
  60. package/dist/index.cjs +74 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +15 -75
  64. package/dist/index.js.map +1 -1
  65. package/dist/js_render/computable_context.cjs +525 -0
  66. package/dist/js_render/computable_context.cjs.map +1 -0
  67. package/dist/js_render/computable_context.d.ts +0 -1
  68. package/dist/js_render/computable_context.js +523 -0
  69. package/dist/js_render/computable_context.js.map +1 -0
  70. package/dist/js_render/context.cjs +229 -0
  71. package/dist/js_render/context.cjs.map +1 -0
  72. package/dist/js_render/context.d.ts +0 -1
  73. package/dist/js_render/context.js +226 -0
  74. package/dist/js_render/context.js.map +1 -0
  75. package/dist/js_render/index.cjs +163 -0
  76. package/dist/js_render/index.cjs.map +1 -0
  77. package/dist/js_render/index.d.ts +0 -1
  78. package/dist/js_render/index.js +160 -0
  79. package/dist/js_render/index.js.map +1 -0
  80. package/dist/middle_layer/active_cfg.cjs +37 -0
  81. package/dist/middle_layer/active_cfg.cjs.map +1 -0
  82. package/dist/middle_layer/active_cfg.d.ts +0 -1
  83. package/dist/middle_layer/active_cfg.js +35 -0
  84. package/dist/middle_layer/active_cfg.js.map +1 -0
  85. package/dist/middle_layer/block.cjs +51 -0
  86. package/dist/middle_layer/block.cjs.map +1 -0
  87. package/dist/middle_layer/block.d.ts +0 -1
  88. package/dist/middle_layer/block.js +48 -0
  89. package/dist/middle_layer/block.js.map +1 -0
  90. package/dist/middle_layer/block_ctx.cjs +87 -0
  91. package/dist/middle_layer/block_ctx.cjs.map +1 -0
  92. package/dist/middle_layer/block_ctx.d.ts +0 -1
  93. package/dist/middle_layer/block_ctx.js +84 -0
  94. package/dist/middle_layer/block_ctx.js.map +1 -0
  95. package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
  96. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
  97. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js +16 -0
  99. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
  100. package/dist/middle_layer/driver_kit.cjs +42 -0
  101. package/dist/middle_layer/driver_kit.cjs.map +1 -0
  102. package/dist/middle_layer/driver_kit.d.ts +0 -1
  103. package/dist/middle_layer/driver_kit.js +40 -0
  104. package/dist/middle_layer/driver_kit.js.map +1 -0
  105. package/dist/middle_layer/frontend_path.cjs +64 -0
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -0
  107. package/dist/middle_layer/frontend_path.d.ts +0 -1
  108. package/dist/middle_layer/frontend_path.js +62 -0
  109. package/dist/middle_layer/frontend_path.js.map +1 -0
  110. package/dist/middle_layer/index.d.ts +0 -1
  111. package/dist/middle_layer/middle_layer.cjs +226 -0
  112. package/dist/middle_layer/middle_layer.cjs.map +1 -0
  113. package/dist/middle_layer/middle_layer.d.ts +0 -1
  114. package/dist/middle_layer/middle_layer.js +224 -0
  115. package/dist/middle_layer/middle_layer.js.map +1 -0
  116. package/dist/middle_layer/navigation_states.cjs +41 -0
  117. package/dist/middle_layer/navigation_states.cjs.map +1 -0
  118. package/dist/middle_layer/navigation_states.d.ts +0 -1
  119. package/dist/middle_layer/navigation_states.js +39 -0
  120. package/dist/middle_layer/navigation_states.js.map +1 -0
  121. package/dist/middle_layer/ops.cjs +75 -0
  122. package/dist/middle_layer/ops.cjs.map +1 -0
  123. package/dist/middle_layer/ops.d.ts +0 -1
  124. package/dist/middle_layer/ops.js +70 -0
  125. package/dist/middle_layer/ops.js.map +1 -0
  126. package/dist/middle_layer/project.cjs +446 -0
  127. package/dist/middle_layer/project.cjs.map +1 -0
  128. package/dist/middle_layer/project.d.ts +0 -1
  129. package/dist/middle_layer/project.js +444 -0
  130. package/dist/middle_layer/project.js.map +1 -0
  131. package/dist/middle_layer/project_list.cjs +53 -0
  132. package/dist/middle_layer/project_list.cjs.map +1 -0
  133. package/dist/middle_layer/project_list.d.ts +0 -1
  134. package/dist/middle_layer/project_list.js +48 -0
  135. package/dist/middle_layer/project_list.js.map +1 -0
  136. package/dist/middle_layer/project_overview.cjs +225 -0
  137. package/dist/middle_layer/project_overview.cjs.map +1 -0
  138. package/dist/middle_layer/project_overview.d.ts +0 -1
  139. package/dist/middle_layer/project_overview.js +204 -0
  140. package/dist/middle_layer/project_overview.js.map +1 -0
  141. package/dist/middle_layer/project_overview_light.cjs +20 -0
  142. package/dist/middle_layer/project_overview_light.cjs.map +1 -0
  143. package/dist/middle_layer/project_overview_light.d.ts +0 -1
  144. package/dist/middle_layer/project_overview_light.js +18 -0
  145. package/dist/middle_layer/project_overview_light.js.map +1 -0
  146. package/dist/middle_layer/render.cjs +26 -0
  147. package/dist/middle_layer/render.cjs.map +1 -0
  148. package/dist/middle_layer/render.d.ts +0 -1
  149. package/dist/middle_layer/render.js +23 -0
  150. package/dist/middle_layer/render.js.map +1 -0
  151. package/dist/middle_layer/render.test.d.ts +0 -1
  152. package/dist/middle_layer/types.d.ts +0 -1
  153. package/dist/middle_layer/util.cjs +22 -0
  154. package/dist/middle_layer/util.cjs.map +1 -0
  155. package/dist/middle_layer/util.d.ts +0 -1
  156. package/dist/middle_layer/util.js +20 -0
  157. package/dist/middle_layer/util.js.map +1 -0
  158. package/dist/model/args.cjs +62 -0
  159. package/dist/model/args.cjs.map +1 -0
  160. package/dist/model/args.d.ts +0 -1
  161. package/dist/model/args.js +58 -0
  162. package/dist/model/args.js.map +1 -0
  163. package/dist/model/block_pack.d.ts +0 -1
  164. package/dist/model/block_pack_spec.cjs +11 -0
  165. package/dist/model/block_pack_spec.cjs.map +1 -0
  166. package/dist/model/block_pack_spec.d.ts +0 -1
  167. package/dist/model/block_pack_spec.js +8 -0
  168. package/dist/model/block_pack_spec.js.map +1 -0
  169. package/dist/model/frontend.d.ts +0 -1
  170. package/dist/model/index.d.ts +0 -1
  171. package/dist/model/project_helper.cjs +36 -0
  172. package/dist/model/project_helper.cjs.map +1 -0
  173. package/dist/model/project_helper.d.ts +0 -1
  174. package/dist/model/project_helper.js +34 -0
  175. package/dist/model/project_helper.js.map +1 -0
  176. package/dist/model/project_model.cjs +74 -0
  177. package/dist/model/project_model.cjs.map +1 -0
  178. package/dist/model/project_model.d.ts +0 -1
  179. package/dist/model/project_model.js +54 -0
  180. package/dist/model/project_model.js.map +1 -0
  181. package/dist/model/project_model.test.d.ts +0 -1
  182. package/dist/model/project_model_util.cjs +176 -0
  183. package/dist/model/project_model_util.cjs.map +1 -0
  184. package/dist/model/project_model_util.d.ts +0 -1
  185. package/dist/model/project_model_util.js +170 -0
  186. package/dist/model/project_model_util.js.map +1 -0
  187. package/dist/model/project_model_util.test.d.ts +0 -1
  188. package/dist/model/project_model_v1.cjs +9 -0
  189. package/dist/model/project_model_v1.cjs.map +1 -0
  190. package/dist/model/project_model_v1.d.ts +0 -1
  191. package/dist/model/project_model_v1.js +6 -0
  192. package/dist/model/project_model_v1.js.map +1 -0
  193. package/dist/model/template_spec.d.ts +0 -1
  194. package/dist/mutator/block-pack/block_pack.cjs +233 -0
  195. package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
  196. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  197. package/dist/mutator/block-pack/block_pack.js +227 -0
  198. package/dist/mutator/block-pack/block_pack.js.map +1 -0
  199. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
  200. package/dist/mutator/block-pack/frontend.cjs +21 -0
  201. package/dist/mutator/block-pack/frontend.cjs.map +1 -0
  202. package/dist/mutator/block-pack/frontend.d.ts +0 -1
  203. package/dist/mutator/block-pack/frontend.js +19 -0
  204. package/dist/mutator/block-pack/frontend.js.map +1 -0
  205. package/dist/mutator/context_export.cjs +26 -0
  206. package/dist/mutator/context_export.cjs.map +1 -0
  207. package/dist/mutator/context_export.d.ts +2 -3
  208. package/dist/mutator/context_export.js +23 -0
  209. package/dist/mutator/context_export.js.map +1 -0
  210. package/dist/mutator/migration.cjs +57 -0
  211. package/dist/mutator/migration.cjs.map +1 -0
  212. package/dist/mutator/migration.d.ts +0 -1
  213. package/dist/mutator/migration.js +55 -0
  214. package/dist/mutator/migration.js.map +1 -0
  215. package/dist/mutator/project.cjs +997 -0
  216. package/dist/mutator/project.cjs.map +1 -0
  217. package/dist/mutator/project.d.ts +0 -1
  218. package/dist/mutator/project.js +992 -0
  219. package/dist/mutator/project.js.map +1 -0
  220. package/dist/mutator/project.test.d.ts +0 -1
  221. package/dist/mutator/template/direct_template_loader.cjs +146 -0
  222. package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
  223. package/dist/mutator/template/direct_template_loader.d.ts +0 -1
  224. package/dist/mutator/template/direct_template_loader.js +143 -0
  225. package/dist/mutator/template/direct_template_loader.js.map +1 -0
  226. package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
  227. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
  228. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
  229. package/dist/mutator/template/direct_template_loader_v3.js +137 -0
  230. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
  231. package/dist/mutator/template/render_block.cjs +43 -0
  232. package/dist/mutator/template/render_block.cjs.map +1 -0
  233. package/dist/mutator/template/render_block.d.ts +0 -1
  234. package/dist/mutator/template/render_block.js +34 -0
  235. package/dist/mutator/template/render_block.js.map +1 -0
  236. package/dist/mutator/template/render_template.cjs +35 -0
  237. package/dist/mutator/template/render_template.cjs.map +1 -0
  238. package/dist/mutator/template/render_template.d.ts +0 -1
  239. package/dist/mutator/template/render_template.js +33 -0
  240. package/dist/mutator/template/render_template.js.map +1 -0
  241. package/dist/mutator/template/template_loading.cjs +71 -0
  242. package/dist/mutator/template/template_loading.cjs.map +1 -0
  243. package/dist/mutator/template/template_loading.d.ts +0 -1
  244. package/dist/mutator/template/template_loading.js +60 -0
  245. package/dist/mutator/template/template_loading.js.map +1 -0
  246. package/dist/mutator/template/template_render.test.d.ts +0 -1
  247. package/dist/network_check/network_check.cjs +267 -0
  248. package/dist/network_check/network_check.cjs.map +1 -0
  249. package/dist/network_check/network_check.d.ts +0 -1
  250. package/dist/network_check/network_check.js +264 -0
  251. package/dist/network_check/network_check.js.map +1 -0
  252. package/dist/network_check/network_check.test.d.ts +0 -1
  253. package/dist/network_check/pings.cjs +107 -0
  254. package/dist/network_check/pings.cjs.map +1 -0
  255. package/dist/network_check/pings.d.ts +0 -1
  256. package/dist/network_check/pings.js +96 -0
  257. package/dist/network_check/pings.js.map +1 -0
  258. package/dist/network_check/template.cjs +318 -0
  259. package/dist/network_check/template.cjs.map +1 -0
  260. package/dist/network_check/template.d.ts +0 -1
  261. package/dist/network_check/template.js +302 -0
  262. package/dist/network_check/template.js.map +1 -0
  263. package/dist/network_check/template.test.d.ts +0 -1
  264. package/dist/network_check/test_utils.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs +77 -0
  266. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs.map +1 -0
  267. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js +74 -0
  268. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js.map +1 -0
  269. package/dist/pool/data.cjs +298 -0
  270. package/dist/pool/data.cjs.map +1 -0
  271. package/dist/pool/data.d.ts +7 -9
  272. package/dist/pool/data.js +282 -0
  273. package/dist/pool/data.js.map +1 -0
  274. package/dist/pool/driver.cjs +620 -0
  275. package/dist/pool/driver.cjs.map +1 -0
  276. package/dist/pool/driver.d.ts +0 -1
  277. package/dist/pool/driver.js +598 -0
  278. package/dist/pool/driver.js.map +1 -0
  279. package/dist/pool/index.d.ts +0 -1
  280. package/dist/pool/p_object_collection.cjs +87 -0
  281. package/dist/pool/p_object_collection.cjs.map +1 -0
  282. package/dist/pool/p_object_collection.d.ts +0 -1
  283. package/dist/pool/p_object_collection.js +84 -0
  284. package/dist/pool/p_object_collection.js.map +1 -0
  285. package/dist/pool/ref_count_pool.cjs +58 -0
  286. package/dist/pool/ref_count_pool.cjs.map +1 -0
  287. package/dist/pool/ref_count_pool.d.ts +0 -1
  288. package/dist/pool/ref_count_pool.js +56 -0
  289. package/dist/pool/ref_count_pool.js.map +1 -0
  290. package/dist/pool/result_pool.cjs +265 -0
  291. package/dist/pool/result_pool.cjs.map +1 -0
  292. package/dist/pool/result_pool.d.ts +0 -1
  293. package/dist/pool/result_pool.js +263 -0
  294. package/dist/pool/result_pool.js.map +1 -0
  295. package/dist/test/block_packs.d.ts +0 -1
  296. package/dist/test/explicit_templates.d.ts +0 -1
  297. package/dist/test/known_templates.d.ts +0 -1
  298. package/dist/test_env.d.ts +0 -1
  299. package/dist/worker/WorkerManager.cjs +53 -0
  300. package/dist/worker/WorkerManager.cjs.map +1 -0
  301. package/dist/worker/WorkerManager.d.ts +0 -1
  302. package/dist/worker/WorkerManager.js +51 -0
  303. package/dist/worker/WorkerManager.js.map +1 -0
  304. package/dist/worker/worker.cjs +16 -0
  305. package/dist/worker/worker.cjs.map +1 -0
  306. package/dist/worker/worker.d.ts +0 -1
  307. package/dist/worker/worker.js +14 -0
  308. package/dist/worker/worker.js.map +1 -0
  309. package/dist/worker/workerApi.cjs +20 -0
  310. package/dist/worker/workerApi.cjs.map +1 -0
  311. package/dist/worker/workerApi.d.ts +1 -3
  312. package/dist/worker/workerApi.js +18 -0
  313. package/dist/worker/workerApi.js.map +1 -0
  314. package/package.json +25 -33
  315. package/src/cfg_render/executor.test.ts +5 -4
  316. package/src/model/project_model.test.ts +3 -3
  317. package/src/model/project_model_util.test.ts +3 -2
  318. package/src/mutator/block-pack/block_pack.test.ts +5 -4
  319. package/src/mutator/project.test.ts +4 -4
  320. package/src/mutator/template/template_render.test.ts +7 -6
  321. package/src/network_check/network_check.test.ts +1 -0
  322. package/src/network_check/test_utils.ts +2 -0
  323. package/src/worker/WorkerManager.ts +6 -8
  324. package/dist/block_registry/index.d.ts.map +0 -1
  325. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  326. package/dist/block_registry/registry.d.ts.map +0 -1
  327. package/dist/block_registry/registry.test.d.ts.map +0 -1
  328. package/dist/block_registry/watcher.d.ts.map +0 -1
  329. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  330. package/dist/cfg_render/executor.d.ts.map +0 -1
  331. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  332. package/dist/cfg_render/operation.d.ts.map +0 -1
  333. package/dist/cfg_render/renderer.d.ts.map +0 -1
  334. package/dist/cfg_render/traverse.d.ts.map +0 -1
  335. package/dist/cfg_render/util.d.ts.map +0 -1
  336. package/dist/debug/index.d.ts.map +0 -1
  337. package/dist/dev_env/index.d.ts.map +0 -1
  338. package/dist/dev_env/util.d.ts.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.mjs +0 -6742
  341. package/dist/index.mjs.map +0 -1
  342. package/dist/js_render/computable_context.d.ts.map +0 -1
  343. package/dist/js_render/context.d.ts.map +0 -1
  344. package/dist/js_render/index.d.ts.map +0 -1
  345. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  346. package/dist/middle_layer/block.d.ts.map +0 -1
  347. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  348. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  349. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  350. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  351. package/dist/middle_layer/index.d.ts.map +0 -1
  352. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  353. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  354. package/dist/middle_layer/ops.d.ts.map +0 -1
  355. package/dist/middle_layer/project.d.ts.map +0 -1
  356. package/dist/middle_layer/project_list.d.ts.map +0 -1
  357. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  358. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  359. package/dist/middle_layer/render.d.ts.map +0 -1
  360. package/dist/middle_layer/render.test.d.ts.map +0 -1
  361. package/dist/middle_layer/types.d.ts.map +0 -1
  362. package/dist/middle_layer/util.d.ts.map +0 -1
  363. package/dist/model/args.d.ts.map +0 -1
  364. package/dist/model/block_pack.d.ts.map +0 -1
  365. package/dist/model/block_pack_spec.d.ts.map +0 -1
  366. package/dist/model/frontend.d.ts.map +0 -1
  367. package/dist/model/index.d.ts.map +0 -1
  368. package/dist/model/project_helper.d.ts.map +0 -1
  369. package/dist/model/project_model.d.ts.map +0 -1
  370. package/dist/model/project_model.test.d.ts.map +0 -1
  371. package/dist/model/project_model_util.d.ts.map +0 -1
  372. package/dist/model/project_model_util.test.d.ts.map +0 -1
  373. package/dist/model/project_model_v1.d.ts.map +0 -1
  374. package/dist/model/template_spec.d.ts.map +0 -1
  375. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  376. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  377. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  378. package/dist/mutator/context_export.d.ts.map +0 -1
  379. package/dist/mutator/migration.d.ts.map +0 -1
  380. package/dist/mutator/project.d.ts.map +0 -1
  381. package/dist/mutator/project.test.d.ts.map +0 -1
  382. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  383. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  384. package/dist/mutator/template/render_block.d.ts.map +0 -1
  385. package/dist/mutator/template/render_template.d.ts.map +0 -1
  386. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  387. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  388. package/dist/network_check/network_check.d.ts.map +0 -1
  389. package/dist/network_check/network_check.test.d.ts.map +0 -1
  390. package/dist/network_check/pings.d.ts.map +0 -1
  391. package/dist/network_check/template.d.ts.map +0 -1
  392. package/dist/network_check/template.test.d.ts.map +0 -1
  393. package/dist/network_check/test_utils.d.ts.map +0 -1
  394. package/dist/pool/data.d.ts.map +0 -1
  395. package/dist/pool/driver.d.ts.map +0 -1
  396. package/dist/pool/index.d.ts.map +0 -1
  397. package/dist/pool/p_object_collection.d.ts.map +0 -1
  398. package/dist/pool/ref_count_pool.d.ts.map +0 -1
  399. package/dist/pool/result_pool.d.ts.map +0 -1
  400. package/dist/test/block_packs.d.ts.map +0 -1
  401. package/dist/test/explicit_templates.d.ts.map +0 -1
  402. package/dist/test/known_templates.d.ts.map +0 -1
  403. package/dist/test_env.d.ts.map +0 -1
  404. package/dist/worker/WorkerManager.d.ts.map +0 -1
  405. package/dist/worker/worker.d.ts.map +0 -1
  406. package/dist/worker/workerApi.d.ts.map +0 -1
  407. package/dist/worker.js +0 -2
  408. package/dist/worker.js.map +0 -1
  409. package/dist/worker.mjs +0 -20
  410. package/dist/worker.mjs.map +0 -1
@@ -0,0 +1,318 @@
1
+ 'use strict';
2
+
3
+ var plClient = require('@milaboratories/pl-client');
4
+ var render_template = require('../mutator/template/render_template.cjs');
5
+ var workflowTengo = require('@platforma-sdk/workflow-tengo');
6
+ var template_loading = require('../mutator/template/template_loading.cjs');
7
+ var plDrivers = require('@milaboratories/pl-drivers');
8
+ var tsHelpers = require('@milaboratories/ts-helpers');
9
+ var consumers = require('node:stream/consumers');
10
+ var path = require('node:path');
11
+ var fs = require('node:fs/promises');
12
+ var os = require('node:os');
13
+ var node_crypto = require('node:crypto');
14
+
15
+ /** Uploads `hello-world` template and checks the output is correct. */
16
+ async function uploadTemplate(logger, pl, name) {
17
+ try {
18
+ const gotGreeting = await runUploadTemplate(logger, pl, name);
19
+ if (gotGreeting !== `Hello, ${name}`) {
20
+ return { status: 'failed', message: `Template uploading failed: expected: ${name}, got: ${gotGreeting}` };
21
+ }
22
+ return { status: 'ok', message: `Template uploading succeeded: ${gotGreeting}` };
23
+ }
24
+ catch (e) {
25
+ return { status: 'failed', message: `Template uploading failed: error occurred: ${e}` };
26
+ }
27
+ }
28
+ async function runUploadTemplate(logger, pl, name) {
29
+ const outputs = await runTemplate(pl, workflowTengo.Templates['check_network.upload_template'], true, (tx) => ({
30
+ name: tx.createValue(plClient.Pl.JsonObject, JSON.stringify(name)),
31
+ }), ['greeting']);
32
+ try {
33
+ return JSON.parse(tsHelpers.notEmpty((await getFieldValue(pl, outputs.greeting)).data?.toString()));
34
+ }
35
+ finally {
36
+ if (outputs != undefined) {
37
+ await deleteFields(pl, Object.values(outputs));
38
+ }
39
+ }
40
+ }
41
+ /** Uploads a file to the backend and checks the output is a Blob resource. */
42
+ async function uploadFile(logger, signer, lsDriver, uploadClient, pl, filePath) {
43
+ try {
44
+ const gotBlob = await runUploadFile(logger, signer, lsDriver, uploadClient, pl, filePath);
45
+ if (gotBlob.type.name !== 'Blob') {
46
+ return { status: 'failed', message: `File uploading failed: ${gotBlob.type.name}` };
47
+ }
48
+ return { status: 'ok', message: `File uploading succeeded: ${gotBlob.type.name}` };
49
+ }
50
+ catch (e) {
51
+ return { status: 'failed', message: `File uploading failed: error occurred: ${e}` };
52
+ }
53
+ }
54
+ async function runUploadFile(logger, signer, lsDriver, uploadClient, pl, filePath) {
55
+ const handle = await lsDriver.getLocalFileHandle(filePath);
56
+ const result = await runTemplate(pl, workflowTengo.Templates['check_network.upload_blob'], true, (tx) => ({
57
+ file: tx.createValue(plClient.Pl.JsonObject, JSON.stringify(handle)),
58
+ }), ['progress', 'file']);
59
+ try {
60
+ const progress = await getFieldValue(pl, result.progress);
61
+ if (plDrivers.isUpload(progress)) {
62
+ const uploadData = plDrivers.ImportFileHandleUploadData.parse(JSON.parse(tsHelpers.notEmpty(progress.data?.toString())));
63
+ const isUploadSignMatch = plDrivers.isSignMatch(signer, uploadData.localPath, uploadData.pathSignature);
64
+ if (isUploadSignMatch) {
65
+ await plDrivers.uploadBlob(logger, uploadClient, progress, uploadData, () => false, {
66
+ nPartsWithThisUploadSpeed: 10,
67
+ nPartsToIncreaseUpload: 10,
68
+ currentSpeed: 10,
69
+ maxSpeed: 10,
70
+ });
71
+ }
72
+ }
73
+ return await getFieldValue(pl, result.file);
74
+ }
75
+ finally {
76
+ await deleteFields(pl, Object.values(result));
77
+ }
78
+ }
79
+ /** Uploads a file to the backend and then tries to download it back. */
80
+ async function downloadFile(logger, pl, lsDriver, uploadClient, downloadClient, filePath, fileContent) {
81
+ try {
82
+ const gotFileContent = await runDownloadFile(logger, pl, lsDriver, uploadClient, downloadClient, filePath);
83
+ if (gotFileContent !== fileContent) {
84
+ return { status: 'failed', message: `File downloading failed: expected: ${fileContent}, got: ${gotFileContent}` };
85
+ }
86
+ return { status: 'ok', message: `File downloading succeeded: ${gotFileContent}` };
87
+ }
88
+ catch (e) {
89
+ return { status: 'failed', message: `File downloading failed: error occurred: ${e}` };
90
+ }
91
+ }
92
+ async function runDownloadFile(logger, pl, lsDriver, uploadClient, downloadClient, filePath) {
93
+ const handle = await lsDriver.getLocalFileHandle(filePath);
94
+ const outputs = await runTemplate(pl, workflowTengo.Templates['check_network.download_blob'], true, (tx) => ({ file: tx.createValue(plClient.Pl.JsonObject, JSON.stringify(handle)) }), ['progress', 'file']);
95
+ try {
96
+ const progress = await getFieldValue(pl, outputs.progress);
97
+ await plDrivers.uploadBlob(logger, uploadClient, progress, plDrivers.ImportFileHandleUploadData.parse(JSON.parse(tsHelpers.notEmpty(progress.data?.toString()))), () => false, {
98
+ nPartsWithThisUploadSpeed: 1,
99
+ nPartsToIncreaseUpload: 1,
100
+ currentSpeed: 1,
101
+ maxSpeed: 1,
102
+ });
103
+ const fileInfo = await getFieldValue(pl, outputs.file);
104
+ return await downloadClient.withBlobContent(fileInfo, {}, {}, async (content) => await consumers.text(content));
105
+ }
106
+ finally {
107
+ await deleteFields(pl, Object.values(outputs));
108
+ }
109
+ }
110
+ /** Runs Go's hello-world binary. */
111
+ async function softwareCheck(pl) {
112
+ try {
113
+ const gotGreeting = await runSoftware(pl);
114
+ if (gotGreeting !== 'Hello from go binary\n') {
115
+ return { status: 'failed', message: `Software check failed: got: ${gotGreeting}` };
116
+ }
117
+ return { status: 'ok', message: `Software check succeeded: ${gotGreeting}` };
118
+ }
119
+ catch (e) {
120
+ return { status: 'failed', message: `Software check failed: error occurred: ${e}` };
121
+ }
122
+ }
123
+ async function runSoftware(pl) {
124
+ const result = await runTemplate(pl, workflowTengo.Templates['check_network.run_hello_world'], true, (_) => ({}), ['greeting']);
125
+ try {
126
+ return tsHelpers.notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());
127
+ }
128
+ finally {
129
+ await deleteFields(pl, Object.values(result));
130
+ }
131
+ }
132
+ /** Runs Python hello-world. */
133
+ async function pythonSoftware(pl, name) {
134
+ try {
135
+ const gotGreeting = await runPythonSoftware(pl, name);
136
+ if (gotGreeting !== `Hello, ${name}!\n`) {
137
+ return { status: 'failed', message: `Python software check failed: got: ${gotGreeting}` };
138
+ }
139
+ return { status: 'ok', message: `Python software check succeeded: ${gotGreeting}` };
140
+ }
141
+ catch (e) {
142
+ return { status: 'failed', message: `Python software check failed: error occurred: ${e}` };
143
+ }
144
+ }
145
+ async function runPythonSoftware(pl, name) {
146
+ const result = await runTemplate(pl, workflowTengo.Templates['check_network.run_hello_world_py'], true, (tx) => ({ name: tx.createValue(plClient.Pl.JsonObject, JSON.stringify(name)) }), ['greeting']);
147
+ try {
148
+ return tsHelpers.notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());
149
+ }
150
+ finally {
151
+ await deleteFields(pl, Object.values(result));
152
+ }
153
+ }
154
+ /** Tries to download a file from every storage. */
155
+ async function downloadFromEveryStorage(logger, pl, lsDriver, ops) {
156
+ try {
157
+ const storages = await lsDriver.getStorageList();
158
+ const results = {};
159
+ for (const storage of storages) {
160
+ const result = await chooseFile(lsDriver, storage, ops.nFilesToCheck, ops.minFileSize, ops.maxFileSize, ops.minLsRequests);
161
+ if (result.file === undefined) {
162
+ results[storage.name] = {
163
+ status: 'warn',
164
+ message: `No file between ${ops.minFileSize} and ${ops.maxFileSize} bytes `
165
+ + `found in storage ${storage.name}, checked ${result.nCheckedFiles} files, `
166
+ + `did ${result.nLsRequests} ls requests`,
167
+ };
168
+ continue;
169
+ }
170
+ logger.info(`Downloading file ${JSON.stringify(result)} from storage ${storage.name}`);
171
+ const outputs = await runTemplate(pl, workflowTengo.Templates['check_network.create_workdir_from_storage'], true, (tx) => ({ file: tx.createValue(plClient.Pl.JsonObject, JSON.stringify(result.file.handle)) }), ['workdirTypeName']);
172
+ try {
173
+ const workdirTypeName = JSON.parse(Buffer.from((await getFieldValue(pl, outputs.workdirTypeName)).data).toString());
174
+ if (workdirTypeName?.startsWith('WorkingDirectory')) {
175
+ results[storage.name] = {
176
+ status: 'ok',
177
+ message: `Workdir creation succeeded, size of file: ${result.file?.size}, `
178
+ + `checked ${result.nCheckedFiles} files, did ${result.nLsRequests} ls requests`,
179
+ };
180
+ }
181
+ else {
182
+ results[storage.name] = {
183
+ status: 'failed',
184
+ message: `Workdir creation failed: ${workdirTypeName}, size of file: ${result.file?.size}, `
185
+ + `checked ${result.nCheckedFiles} files, did ${result.nLsRequests} ls requests`,
186
+ };
187
+ }
188
+ }
189
+ finally {
190
+ await deleteFields(pl, Object.values(outputs));
191
+ }
192
+ }
193
+ return results;
194
+ }
195
+ catch (e) {
196
+ return { unknown: { status: 'failed', message: `Download from every storage failed: error occurred: ${e}` } };
197
+ }
198
+ }
199
+ /** Chooses a random file from the storage in a size range.
200
+ * If we couldn't find a normal-sized file, we'll return a small file to check at least something.
201
+ */
202
+ async function chooseFile(lsDriver, storage, limit, minSize, maxSize, minLsRequests) {
203
+ const files = listFilesSequence(lsDriver, storage, '', 0);
204
+ // return small file in case we don't have many normal-sized files.
205
+ // While we'll download only a small range of bytes from the file,
206
+ // we don't want to return a big file in case the underlying S3 doesn't support range requests.
207
+ let smallFile;
208
+ let nCheckedFiles = 0;
209
+ let maxNLsRequests = 0;
210
+ for await (const { file, nLsRequests } of files) {
211
+ maxNLsRequests = Math.max(maxNLsRequests, nLsRequests);
212
+ if (nCheckedFiles >= limit && maxNLsRequests > minLsRequests) {
213
+ // we reached a limit on both the number of files and the number of ls requests.
214
+ return { file: smallFile, nLsRequests: maxNLsRequests, nCheckedFiles };
215
+ }
216
+ nCheckedFiles++;
217
+ if (minSize <= file.size && file.size <= maxSize) {
218
+ return { file, nLsRequests: maxNLsRequests, nCheckedFiles };
219
+ }
220
+ else if (file.size < minSize) {
221
+ smallFile = file;
222
+ }
223
+ }
224
+ return { file: smallFile, nLsRequests: maxNLsRequests, nCheckedFiles };
225
+ }
226
+ /** Deep-first search for files in the storage. */
227
+ async function* listFilesSequence(lsDriver, storage, parent, nLsRequests) {
228
+ nLsRequests++;
229
+ const files = await lsDriver.listRemoteFilesWithAdditionalInfo(storage.handle, parent);
230
+ for (const file of files.entries) {
231
+ if (file.type === 'file' && file.fullPath.startsWith(parent)) {
232
+ yield {
233
+ file,
234
+ nLsRequests,
235
+ };
236
+ }
237
+ else if (file.type === 'dir') {
238
+ for await (const nestedFile of listFilesSequence(lsDriver, storage, file.fullPath, nLsRequests)) {
239
+ nLsRequests = Math.max(nestedFile.nLsRequests, nLsRequests);
240
+ yield nestedFile;
241
+ }
242
+ }
243
+ }
244
+ }
245
+ /** Creates a big temporary file with random content. */
246
+ async function createBigTempFile() {
247
+ const filePath = path.join(os.tmpdir(), `check-network-big-temp-${Date.now()}.bin`);
248
+ const fileSize = 20 * 1024 * 1024; // 20 MiB
249
+ const fileContent = node_crypto.randomBytes(fileSize);
250
+ await fs.appendFile(filePath, fileContent);
251
+ return { filePath };
252
+ }
253
+ /** Creates a temporarly file we could use for uploading and downloading. */
254
+ async function createTempFile() {
255
+ const filePath = path.join(os.tmpdir(), `check-network-temp-${Date.now()}.txt`);
256
+ const fileContent = 'Hello, world! ' + new Date().toISOString();
257
+ await fs.writeFile(filePath, fileContent);
258
+ return { filePath, fileContent };
259
+ }
260
+ /** Creates a template and RenderTemplate resources, gets all resources from outputs.
261
+ * Throws a error if any of the outputs failed.
262
+ */
263
+ async function runTemplate(client, tpl, ephemeral, inputs, outputs) {
264
+ return await client.withWriteTx('TemplateRender', async (tx) => {
265
+ const preparedTemplate = await template_loading.prepareTemplateSpec(tpl);
266
+ const tplResource = template_loading.loadTemplate(tx, preparedTemplate);
267
+ const outputFields = render_template.createRenderTemplate(tx, tplResource, ephemeral, inputs(tx), outputs);
268
+ const outputsIds = {};
269
+ for (const output of outputs) {
270
+ const fieldRef = plClient.field(client.clientRoot, output);
271
+ tx.createField(fieldRef, 'Dynamic', outputFields[output]);
272
+ outputsIds[output] = await plClient.toGlobalFieldId(fieldRef);
273
+ }
274
+ await tx.commit();
275
+ return outputsIds;
276
+ });
277
+ }
278
+ /** Gets a resource from field's value or throws a error. */
279
+ async function getFieldValue(client, fieldId) {
280
+ // We could also do polling with pl-tree, but it seemed like an overkill,
281
+ // that's why we have a simple polling here.
282
+ return await plClient.poll(client, async (tx) => {
283
+ const field = await tx.tx.getField(fieldId);
284
+ if (plClient.isNotNullResourceId(field.error)) {
285
+ const err = await tx.tx.getResourceData(field.error, true);
286
+ throw new Error(`getFieldValue of "${fieldId.fieldName}" field failed: ${err.data}`);
287
+ }
288
+ if (plClient.isNullResourceId(field.value)) {
289
+ throw new plClient.ContinuePolling();
290
+ }
291
+ return await tx.tx.getResourceData(field.value, true);
292
+ });
293
+ }
294
+ async function deleteFields(client, fieldIds) {
295
+ await client.withWriteTx('DeleteFields', async (tx) => {
296
+ for (const fieldId of fieldIds) {
297
+ tx.resetField(fieldId);
298
+ }
299
+ await tx.commit();
300
+ });
301
+ }
302
+
303
+ exports.chooseFile = chooseFile;
304
+ exports.createBigTempFile = createBigTempFile;
305
+ exports.createTempFile = createTempFile;
306
+ exports.downloadFile = downloadFile;
307
+ exports.downloadFromEveryStorage = downloadFromEveryStorage;
308
+ exports.listFilesSequence = listFilesSequence;
309
+ exports.pythonSoftware = pythonSoftware;
310
+ exports.runDownloadFile = runDownloadFile;
311
+ exports.runPythonSoftware = runPythonSoftware;
312
+ exports.runSoftware = runSoftware;
313
+ exports.runUploadFile = runUploadFile;
314
+ exports.runUploadTemplate = runUploadTemplate;
315
+ exports.softwareCheck = softwareCheck;
316
+ exports.uploadFile = uploadFile;
317
+ exports.uploadTemplate = uploadTemplate;
318
+ //# sourceMappingURL=template.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.cjs","sources":["../../src/network_check/template.ts"],"sourcesContent":["import type { FieldId, FieldRef, PlClient, ResourceData } from '@milaboratories/pl-client';\nimport { type PlTransaction, ContinuePolling, field, isNotNullResourceId, isNullResourceId, Pl, poll, toGlobalFieldId } from '@milaboratories/pl-client';\nimport { createRenderTemplate } from '../mutator/template/render_template';\nimport { Templates as SdkTemplates } from '@platforma-sdk/workflow-tengo';\nimport type { TemplateSpecAny } from '../model/template_spec';\nimport { loadTemplate, prepareTemplateSpec } from '../mutator/template/template_loading';\nimport type { ClientDownload, LsDriver } from '@milaboratories/pl-drivers';\nimport { ImportFileHandleUploadData, isSignMatch, isUpload, uploadBlob, type ClientUpload, type LsEntryWithAdditionalInfo } from '@milaboratories/pl-drivers';\nimport type { Signer } from '@milaboratories/ts-helpers';\nimport { notEmpty, type MiLogger } from '@milaboratories/ts-helpers';\nimport type { ResourceInfo } from '@milaboratories/pl-tree';\nimport { text } from 'node:stream/consumers';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport { randomBytes } from 'node:crypto';\nimport type { StorageEntry } from '@milaboratories/pl-model-common';\n\nexport interface TemplateReport {\n status: 'ok' | 'warn' | 'failed';\n message: string;\n}\n\n/** Uploads `hello-world` template and checks the output is correct. */\nexport async function uploadTemplate(logger: MiLogger, pl: PlClient, name: string): Promise<TemplateReport> {\n try {\n const gotGreeting = await runUploadTemplate(logger, pl, name);\n if (gotGreeting !== `Hello, ${name}`) {\n return { status: 'failed', message: `Template uploading failed: expected: ${name}, got: ${gotGreeting}` };\n }\n\n return { status: 'ok', message: `Template uploading succeeded: ${gotGreeting}` };\n } catch (e: unknown) {\n return { status: 'failed', message: `Template uploading failed: error occurred: ${e}` };\n }\n}\n\nexport async function runUploadTemplate(\n logger: MiLogger,\n pl: PlClient,\n name: string,\n): Promise<string> {\n const outputs = await runTemplate(\n pl,\n SdkTemplates['check_network.upload_template'],\n true,\n (tx) => ({\n name: tx.createValue(Pl.JsonObject, JSON.stringify(name)),\n }),\n ['greeting'],\n );\n\n try {\n return JSON.parse(notEmpty((await getFieldValue(pl, outputs.greeting)).data?.toString()));\n } finally {\n if (outputs != undefined) {\n await deleteFields(pl, Object.values(outputs));\n }\n }\n}\n\n/** Uploads a file to the backend and checks the output is a Blob resource. */\nexport async function uploadFile(\n logger: MiLogger,\n signer: Signer,\n lsDriver: LsDriver,\n uploadClient: ClientUpload,\n pl: PlClient,\n filePath: string,\n): Promise<TemplateReport> {\n try {\n const gotBlob = await runUploadFile(logger, signer, lsDriver, uploadClient, pl, filePath);\n\n if (gotBlob.type.name !== 'Blob') {\n return { status: 'failed', message: `File uploading failed: ${gotBlob.type.name}` };\n }\n\n return { status: 'ok', message: `File uploading succeeded: ${gotBlob.type.name}` };\n } catch (e: unknown) {\n return { status: 'failed', message: `File uploading failed: error occurred: ${e}` };\n }\n}\n\nexport async function runUploadFile(\n logger: MiLogger,\n signer: Signer,\n lsDriver: LsDriver,\n uploadClient: ClientUpload,\n pl: PlClient,\n filePath: string,\n): Promise<ResourceInfo> {\n const handle = await lsDriver.getLocalFileHandle(filePath);\n const result = await runTemplate(\n pl,\n SdkTemplates['check_network.upload_blob'],\n true,\n (tx) => ({\n file: tx.createValue(Pl.JsonObject, JSON.stringify(handle)),\n }),\n ['progress', 'file'],\n );\n\n try {\n const progress = await getFieldValue(pl, result.progress);\n\n if (isUpload(progress)) {\n const uploadData = ImportFileHandleUploadData.parse(JSON.parse(notEmpty(progress.data?.toString())));\n const isUploadSignMatch = isSignMatch(signer, uploadData.localPath, uploadData.pathSignature);\n\n if (isUploadSignMatch) {\n await uploadBlob(\n logger,\n uploadClient,\n progress,\n uploadData,\n () => false,\n {\n nPartsWithThisUploadSpeed: 10,\n nPartsToIncreaseUpload: 10,\n currentSpeed: 10,\n maxSpeed: 10,\n },\n );\n }\n }\n\n return await getFieldValue(pl, result.file);\n } finally {\n await deleteFields(pl, Object.values(result));\n }\n}\n\n/** Uploads a file to the backend and then tries to download it back. */\nexport async function downloadFile(\n logger: MiLogger,\n pl: PlClient,\n lsDriver: LsDriver,\n uploadClient: ClientUpload,\n downloadClient: ClientDownload,\n filePath: string,\n fileContent: string,\n): Promise<TemplateReport> {\n try {\n const gotFileContent = await runDownloadFile(logger, pl, lsDriver, uploadClient, downloadClient, filePath);\n\n if (gotFileContent !== fileContent) {\n return { status: 'failed', message: `File downloading failed: expected: ${fileContent}, got: ${gotFileContent}` };\n }\n return { status: 'ok', message: `File downloading succeeded: ${gotFileContent}` };\n } catch (e: unknown) {\n return { status: 'failed', message: `File downloading failed: error occurred: ${e}` };\n }\n}\n\nexport async function runDownloadFile(\n logger: MiLogger,\n pl: PlClient,\n lsDriver: LsDriver,\n uploadClient: ClientUpload,\n downloadClient: ClientDownload,\n filePath: string,\n) {\n const handle = await lsDriver.getLocalFileHandle(filePath);\n\n const outputs = await runTemplate(\n pl,\n SdkTemplates['check_network.download_blob'],\n true,\n (tx) => ({ file: tx.createValue(Pl.JsonObject, JSON.stringify(handle)) }),\n ['progress', 'file'],\n );\n\n try {\n const progress = await getFieldValue(pl, outputs.progress);\n\n await uploadBlob(\n logger,\n uploadClient,\n progress,\n ImportFileHandleUploadData.parse(JSON.parse(notEmpty(progress.data?.toString()))),\n () => false,\n {\n nPartsWithThisUploadSpeed: 1,\n nPartsToIncreaseUpload: 1,\n currentSpeed: 1,\n maxSpeed: 1,\n },\n );\n\n const fileInfo = await getFieldValue(pl, outputs.file);\n\n return await downloadClient.withBlobContent(\n fileInfo,\n {},\n {},\n async (content) => await text(content),\n );\n } finally {\n await deleteFields(pl, Object.values(outputs));\n }\n}\n\n/** Runs Go's hello-world binary. */\nexport async function softwareCheck(pl: PlClient): Promise<TemplateReport> {\n try {\n const gotGreeting = await runSoftware(pl);\n\n if (gotGreeting !== 'Hello from go binary\\n') {\n return { status: 'failed', message: `Software check failed: got: ${gotGreeting}` };\n }\n return { status: 'ok', message: `Software check succeeded: ${gotGreeting}` };\n } catch (e: unknown) {\n return { status: 'failed', message: `Software check failed: error occurred: ${e}` };\n }\n}\n\nexport async function runSoftware(pl: PlClient): Promise<string> {\n const result = await runTemplate(\n pl,\n SdkTemplates['check_network.run_hello_world'],\n true,\n (_: PlTransaction) => ({}),\n ['greeting'],\n );\n\n try {\n return notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());\n } finally {\n await deleteFields(pl, Object.values(result));\n }\n}\n\n/** Runs Python hello-world. */\nexport async function pythonSoftware(pl: PlClient, name: string): Promise<TemplateReport> {\n try {\n const gotGreeting = await runPythonSoftware(pl, name);\n\n if (gotGreeting !== `Hello, ${name}!\\n`) {\n return { status: 'failed', message: `Python software check failed: got: ${gotGreeting}` };\n }\n return { status: 'ok', message: `Python software check succeeded: ${gotGreeting}` };\n } catch (e: unknown) {\n return { status: 'failed', message: `Python software check failed: error occurred: ${e}` };\n }\n}\n\nexport async function runPythonSoftware(pl: PlClient, name: string): Promise<string> {\n const result = await runTemplate(\n pl,\n SdkTemplates['check_network.run_hello_world_py'],\n true,\n (tx) => ({ name: tx.createValue(Pl.JsonObject, JSON.stringify(name)) }),\n ['greeting'],\n );\n\n try {\n return notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());\n } finally {\n await deleteFields(pl, Object.values(result));\n }\n}\n\n/** Tries to download a file from every storage. */\nexport async function downloadFromEveryStorage(\n logger: MiLogger,\n pl: PlClient,\n lsDriver: LsDriver,\n ops: {\n minLsRequests: number;\n bytesLimit: number;\n minFileSize: number;\n maxFileSize: number;\n nFilesToCheck: number;\n },\n): Promise<Record<string, TemplateReport>> {\n try {\n const storages = await lsDriver.getStorageList();\n const results: Record<string, TemplateReport> = {};\n\n for (const storage of storages) {\n const result = await chooseFile(lsDriver, storage, ops.nFilesToCheck, ops.minFileSize, ops.maxFileSize, ops.minLsRequests);\n if (result.file === undefined) {\n results[storage.name] = {\n status: 'warn',\n message: `No file between ${ops.minFileSize} and ${ops.maxFileSize} bytes `\n + `found in storage ${storage.name}, checked ${result.nCheckedFiles} files, `\n + `did ${result.nLsRequests} ls requests`,\n };\n continue;\n }\n\n logger.info(`Downloading file ${JSON.stringify(result)} from storage ${storage.name}`);\n const outputs = await runTemplate(\n pl,\n SdkTemplates['check_network.create_workdir_from_storage'],\n true,\n (tx) => ({ file: tx.createValue(Pl.JsonObject, JSON.stringify((result.file as { handle: string }).handle)) }),\n ['workdirTypeName'],\n );\n\n try {\n const workdirTypeName = JSON.parse(Buffer.from((await getFieldValue(pl, outputs.workdirTypeName)).data!).toString()) as string;\n\n if (workdirTypeName?.startsWith('WorkingDirectory')) {\n results[storage.name] = {\n status: 'ok',\n message: `Workdir creation succeeded, size of file: ${result.file?.size}, `\n + `checked ${result.nCheckedFiles} files, did ${result.nLsRequests} ls requests`,\n };\n } else {\n results[storage.name] = {\n status: 'failed',\n message: `Workdir creation failed: ${workdirTypeName}, size of file: ${result.file?.size}, `\n + `checked ${result.nCheckedFiles} files, did ${result.nLsRequests} ls requests`,\n };\n }\n } finally {\n await deleteFields(pl, Object.values(outputs));\n }\n }\n\n return results;\n } catch (e: unknown) {\n return { unknown: { status: 'failed', message: `Download from every storage failed: error occurred: ${e}` } };\n }\n}\n\n/** Chooses a random file from the storage in a size range.\n * If we couldn't find a normal-sized file, we'll return a small file to check at least something.\n */\nexport async function chooseFile(\n lsDriver: LsDriver,\n storage: StorageEntry,\n limit: number,\n minSize: number,\n maxSize: number,\n minLsRequests: number,\n): Promise<{\n file: LsEntryWithAdditionalInfo | undefined;\n nLsRequests: number;\n nCheckedFiles: number;\n }> {\n const files = listFilesSequence(lsDriver, storage, '', 0);\n\n // return small file in case we don't have many normal-sized files.\n // While we'll download only a small range of bytes from the file,\n // we don't want to return a big file in case the underlying S3 doesn't support range requests.\n let smallFile: LsEntryWithAdditionalInfo | undefined;\n let nCheckedFiles = 0;\n let maxNLsRequests = 0;\n\n for await (const { file, nLsRequests } of files) {\n maxNLsRequests = Math.max(maxNLsRequests, nLsRequests);\n\n if (nCheckedFiles >= limit && maxNLsRequests > minLsRequests) {\n // we reached a limit on both the number of files and the number of ls requests.\n return { file: smallFile, nLsRequests: maxNLsRequests, nCheckedFiles };\n }\n nCheckedFiles++;\n if (minSize <= file.size && file.size <= maxSize) {\n return { file, nLsRequests: maxNLsRequests, nCheckedFiles };\n } else if (file.size < minSize) {\n smallFile = file;\n }\n }\n\n return { file: smallFile, nLsRequests: maxNLsRequests, nCheckedFiles };\n}\n\n/** Deep-first search for files in the storage. */\nexport async function* listFilesSequence(\n lsDriver: LsDriver,\n storage: StorageEntry,\n parent: string,\n nLsRequests: number,\n): AsyncGenerator<{ file: LsEntryWithAdditionalInfo; nLsRequests: number }, void, unknown> {\n nLsRequests++;\n const files = await lsDriver.listRemoteFilesWithAdditionalInfo(storage.handle, parent);\n\n for (const file of files.entries) {\n if (file.type === 'file' && file.fullPath.startsWith(parent)) {\n yield {\n file,\n nLsRequests,\n };\n } else if (file.type === 'dir') {\n for await (const nestedFile of listFilesSequence(lsDriver, storage, file.fullPath, nLsRequests)) {\n nLsRequests = Math.max(nestedFile.nLsRequests, nLsRequests);\n yield nestedFile;\n }\n }\n }\n}\n\n/** Creates a big temporary file with random content. */\nexport async function createBigTempFile(): Promise<{ filePath: string }> {\n const filePath = path.join(os.tmpdir(), `check-network-big-temp-${Date.now()}.bin`);\n const fileSize = 20 * 1024 * 1024; // 20 MiB\n\n const fileContent = randomBytes(fileSize);\n\n await fs.appendFile(filePath, fileContent);\n\n return { filePath };\n}\n\n/** Creates a temporarly file we could use for uploading and downloading. */\nexport async function createTempFile(): Promise<{ filePath: string; fileContent: string }> {\n const filePath = path.join(os.tmpdir(), `check-network-temp-${Date.now()}.txt`);\n\n const fileContent = 'Hello, world! ' + new Date().toISOString();\n await fs.writeFile(filePath, fileContent);\n\n return { filePath, fileContent };\n}\n\n/** Creates a template and RenderTemplate resources, gets all resources from outputs.\n * Throws a error if any of the outputs failed.\n */\nasync function runTemplate(\n client: PlClient,\n tpl: TemplateSpecAny,\n ephemeral: boolean,\n inputs: (tx: PlTransaction) => Pl.PlRecord,\n outputs: string[],\n): Promise<Record<string, FieldId>> {\n return await client.withWriteTx('TemplateRender', async (tx) => {\n const preparedTemplate = await prepareTemplateSpec(tpl);\n const tplResource = loadTemplate(tx, preparedTemplate);\n\n const outputFields: Record<string, FieldRef> = createRenderTemplate(\n tx, tplResource, ephemeral, inputs(tx), outputs,\n );\n\n const outputsIds: Record<string, FieldId> = {};\n\n for (const output of outputs) {\n const fieldRef = field(client.clientRoot, output);\n tx.createField(fieldRef, 'Dynamic', outputFields[output]);\n outputsIds[output] = await toGlobalFieldId(fieldRef);\n }\n\n await tx.commit();\n\n return outputsIds;\n });\n}\n\n/** Gets a resource from field's value or throws a error. */\nasync function getFieldValue(\n client: PlClient,\n fieldId: FieldId,\n): Promise<ResourceData> {\n // We could also do polling with pl-tree, but it seemed like an overkill,\n // that's why we have a simple polling here.\n\n return await poll(client, async (tx) => {\n const field = await tx.tx.getField(fieldId);\n if (isNotNullResourceId(field.error)) {\n const err = await tx.tx.getResourceData(field.error, true);\n throw new Error(`getFieldValue of \"${fieldId.fieldName}\" field failed: ${err.data}`);\n }\n\n if (isNullResourceId(field.value)) {\n throw new ContinuePolling();\n }\n\n return await tx.tx.getResourceData(field.value, true);\n });\n}\n\nasync function deleteFields(client: PlClient, fieldIds: FieldId[]) {\n await client.withWriteTx('DeleteFields', async (tx) => {\n for (const fieldId of fieldIds) {\n tx.resetField(fieldId);\n }\n await tx.commit();\n });\n}\n"],"names":["SdkTemplates","Pl","notEmpty","isUpload","ImportFileHandleUploadData","isSignMatch","uploadBlob","text","randomBytes","prepareTemplateSpec","loadTemplate","createRenderTemplate","field","toGlobalFieldId","poll","isNotNullResourceId","isNullResourceId","ContinuePolling"],"mappings":"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"}
@@ -52,4 +52,3 @@ export declare function createTempFile(): Promise<{
52
52
  filePath: string;
53
53
  fileContent: string;
54
54
  }>;
55
- //# sourceMappingURL=template.d.ts.map