@nosana/node 1.0.0-rc

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 (384) hide show
  1. package/README.md +92 -0
  2. package/dist/.env +7 -0
  3. package/dist/.env.dev +5 -0
  4. package/dist/.env.prd +4 -0
  5. package/dist/NodeManager/client/index.d.ts +4 -0
  6. package/dist/NodeManager/client/index.js +14 -0
  7. package/dist/NodeManager/configs/NodeConfigs.d.ts +14 -0
  8. package/dist/NodeManager/configs/NodeConfigs.js +32 -0
  9. package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.d.ts +1 -0
  10. package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.js +161 -0
  11. package/dist/NodeManager/configs/configs.d.ts +21 -0
  12. package/dist/NodeManager/configs/configs.js +23 -0
  13. package/dist/NodeManager/db/__tests__/index.spec.d.ts +1 -0
  14. package/dist/NodeManager/db/__tests__/index.spec.js +65 -0
  15. package/dist/NodeManager/db/index.d.ts +50 -0
  16. package/dist/NodeManager/db/index.js +64 -0
  17. package/dist/NodeManager/errors/NodeAlreadyActiveError.d.ts +3 -0
  18. package/dist/NodeManager/errors/NodeAlreadyActiveError.js +6 -0
  19. package/dist/NodeManager/index.d.ts +24 -0
  20. package/dist/NodeManager/index.js +317 -0
  21. package/dist/NodeManager/jobs/index.d.ts +6 -0
  22. package/dist/NodeManager/jobs/index.js +45 -0
  23. package/dist/NodeManager/monitoring/LogMonitoringRegistry.d.ts +9 -0
  24. package/dist/NodeManager/monitoring/LogMonitoringRegistry.js +23 -0
  25. package/dist/NodeManager/monitoring/log/NodeLog.d.ts +56 -0
  26. package/dist/NodeManager/monitoring/log/NodeLog.js +1357 -0
  27. package/dist/NodeManager/monitoring/log/console/ConsoleLogger.d.ts +20 -0
  28. package/dist/NodeManager/monitoring/log/console/ConsoleLogger.js +290 -0
  29. package/dist/NodeManager/monitoring/ping/PingHandler.d.ts +13 -0
  30. package/dist/NodeManager/monitoring/ping/PingHandler.js +68 -0
  31. package/dist/NodeManager/monitoring/proxy/loggingProxy.d.ts +15 -0
  32. package/dist/NodeManager/monitoring/proxy/loggingProxy.js +145 -0
  33. package/dist/NodeManager/monitoring/state/NodeState.d.ts +29 -0
  34. package/dist/NodeManager/monitoring/state/NodeState.js +680 -0
  35. package/dist/NodeManager/monitoring/state/classifyState.d.ts +14 -0
  36. package/dist/NodeManager/monitoring/state/classifyState.js +57 -0
  37. package/dist/NodeManager/monitoring/streaming/LogStreamer.d.ts +14 -0
  38. package/dist/NodeManager/monitoring/streaming/LogStreamer.js +58 -0
  39. package/dist/NodeManager/monitoring/streaming/StateStreamer.d.ts +15 -0
  40. package/dist/NodeManager/monitoring/streaming/StateStreamer.js +59 -0
  41. package/dist/NodeManager/node/Node.d.ts +44 -0
  42. package/dist/NodeManager/node/Node.js +321 -0
  43. package/dist/NodeManager/node/abort/NodeAbortController.d.ts +6 -0
  44. package/dist/NodeManager/node/abort/NodeAbortController.js +12 -0
  45. package/dist/NodeManager/node/abort/abortControllerSelector.d.ts +3 -0
  46. package/dist/NodeManager/node/abort/abortControllerSelector.js +13 -0
  47. package/dist/NodeManager/node/api/ApiEventEmitter.d.ts +8 -0
  48. package/dist/NodeManager/node/api/ApiEventEmitter.js +13 -0
  49. package/dist/NodeManager/node/api/ApiHandler.d.ts +28 -0
  50. package/dist/NodeManager/node/api/ApiHandler.js +193 -0
  51. package/dist/NodeManager/node/api/eventsource/index.d.ts +6 -0
  52. package/dist/NodeManager/node/api/eventsource/index.js +35 -0
  53. package/dist/NodeManager/node/api/middlewares/index.d.ts +5 -0
  54. package/dist/NodeManager/node/api/middlewares/index.js +7 -0
  55. package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.d.ts +3 -0
  56. package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.js +20 -0
  57. package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.d.ts +5 -0
  58. package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.js +28 -0
  59. package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.d.ts +6 -0
  60. package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.js +30 -0
  61. package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.d.ts +6 -0
  62. package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.js +20 -0
  63. package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.d.ts +6 -0
  64. package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.js +33 -0
  65. package/dist/NodeManager/node/api/routes/get/index.d.ts +6 -0
  66. package/dist/NodeManager/node/api/routes/get/index.js +6 -0
  67. package/dist/NodeManager/node/api/routes/get/job-definition.d.ts +5 -0
  68. package/dist/NodeManager/node/api/routes/get/job-definition.js +16 -0
  69. package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.d.ts +17 -0
  70. package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.js +15 -0
  71. package/dist/NodeManager/node/api/routes/get/job-info/job-info.d.ts +5 -0
  72. package/dist/NodeManager/node/api/routes/get/job-info/job-info.js +18 -0
  73. package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.d.ts +6 -0
  74. package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.js +42 -0
  75. package/dist/NodeManager/node/api/routes/get/job-operation-info.d.ts +28 -0
  76. package/dist/NodeManager/node/api/routes/get/job-operation-info.js +53 -0
  77. package/dist/NodeManager/node/api/routes/get/job-results.d.ts +5 -0
  78. package/dist/NodeManager/node/api/routes/get/job-results.js +15 -0
  79. package/dist/NodeManager/node/api/routes/get/node-info.d.ts +3 -0
  80. package/dist/NodeManager/node/api/routes/get/node-info.js +23 -0
  81. package/dist/NodeManager/node/api/routes/get/service-url.d.ts +5 -0
  82. package/dist/NodeManager/node/api/routes/get/service-url.js +27 -0
  83. package/dist/NodeManager/node/api/routes/index.d.ts +3 -0
  84. package/dist/NodeManager/node/api/routes/index.js +3 -0
  85. package/dist/NodeManager/node/api/routes/post/index.d.ts +4 -0
  86. package/dist/NodeManager/node/api/routes/post/index.js +4 -0
  87. package/dist/NodeManager/node/api/routes/post/job-definition.d.ts +6 -0
  88. package/dist/NodeManager/node/api/routes/post/job-definition.js +15 -0
  89. package/dist/NodeManager/node/api/routes/post/job-operation-actions.d.ts +24 -0
  90. package/dist/NodeManager/node/api/routes/post/job-operation-actions.js +79 -0
  91. package/dist/NodeManager/node/api/routes/post/node-validation.d.ts +4 -0
  92. package/dist/NodeManager/node/api/routes/post/node-validation.js +1783 -0
  93. package/dist/NodeManager/node/api/routes/post/service-stop.d.ts +5 -0
  94. package/dist/NodeManager/node/api/routes/post/service-stop.js +13 -0
  95. package/dist/NodeManager/node/api/routes/wss/index.d.ts +2 -0
  96. package/dist/NodeManager/node/api/routes/wss/index.js +2 -0
  97. package/dist/NodeManager/node/api/routes/wss/log.d.ts +14 -0
  98. package/dist/NodeManager/node/api/routes/wss/log.js +34 -0
  99. package/dist/NodeManager/node/api/routes/wss/status.d.ts +8 -0
  100. package/dist/NodeManager/node/api/routes/wss/status.js +11 -0
  101. package/dist/NodeManager/node/api/types/index.d.ts +12 -0
  102. package/dist/NodeManager/node/api/types/index.js +1 -0
  103. package/dist/NodeManager/node/balance/balanceHandler.d.ts +12 -0
  104. package/dist/NodeManager/node/balance/balanceHandler.js +52 -0
  105. package/dist/NodeManager/node/expiry/expiryHandler.d.ts +24 -0
  106. package/dist/NodeManager/node/expiry/expiryHandler.js +99 -0
  107. package/dist/NodeManager/node/grid/gridHandler.d.ts +19 -0
  108. package/dist/NodeManager/node/grid/gridHandler.js +168 -0
  109. package/dist/NodeManager/node/health/healthHandler.d.ts +16 -0
  110. package/dist/NodeManager/node/health/healthHandler.js +69 -0
  111. package/dist/NodeManager/node/job/JobRegistry.d.ts +14 -0
  112. package/dist/NodeManager/node/job/JobRegistry.js +48 -0
  113. package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.d.ts +13 -0
  114. package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.js +21 -0
  115. package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.d.ts +8 -0
  116. package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.js +40 -0
  117. package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.d.ts +9 -0
  118. package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.js +16 -0
  119. package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.d.ts +7 -0
  120. package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.js +13 -0
  121. package/dist/NodeManager/node/job/jobExternalUtil.d.ts +10 -0
  122. package/dist/NodeManager/node/job/jobExternalUtil.js +82 -0
  123. package/dist/NodeManager/node/job/jobHandler.d.ts +43 -0
  124. package/dist/NodeManager/node/job/jobHandler.js +193 -0
  125. package/dist/NodeManager/node/job/result/ResultReturnStrategy.d.ts +13 -0
  126. package/dist/NodeManager/node/job/result/ResultReturnStrategy.js +21 -0
  127. package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.d.ts +8 -0
  128. package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.js +22 -0
  129. package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.d.ts +8 -0
  130. package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.js +42 -0
  131. package/dist/NodeManager/node/key/keyHandler.d.ts +16 -0
  132. package/dist/NodeManager/node/key/keyHandler.js +74 -0
  133. package/dist/NodeManager/node/market/marketHandler.d.ts +30 -0
  134. package/dist/NodeManager/node/market/marketHandler.js +137 -0
  135. package/dist/NodeManager/node/register/index.d.ts +16 -0
  136. package/dist/NodeManager/node/register/index.js +88 -0
  137. package/dist/NodeManager/node/resource/definition/index.d.ts +2 -0
  138. package/dist/NodeManager/node/resource/definition/index.js +2 -0
  139. package/dist/NodeManager/node/resource/helpers/createHFArgs.d.ts +6 -0
  140. package/dist/NodeManager/node/resource/helpers/createHFArgs.js +26 -0
  141. package/dist/NodeManager/node/resource/helpers/createOllamaArgs.d.ts +2 -0
  142. package/dist/NodeManager/node/resource/helpers/createOllamaArgs.js +20 -0
  143. package/dist/NodeManager/node/resource/helpers/createResourceName.d.ts +2 -0
  144. package/dist/NodeManager/node/resource/helpers/createResourceName.js +18 -0
  145. package/dist/NodeManager/node/resource/helpers/createS3Args.d.ts +7 -0
  146. package/dist/NodeManager/node/resource/helpers/createS3Args.js +32 -0
  147. package/dist/NodeManager/node/resource/helpers/hasDockerVolume.d.ts +2 -0
  148. package/dist/NodeManager/node/resource/helpers/hasDockerVolume.js +3 -0
  149. package/dist/NodeManager/node/resource/helpers/hoursSunceDate.d.ts +1 -0
  150. package/dist/NodeManager/node/resource/helpers/hoursSunceDate.js +3 -0
  151. package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.d.ts +1 -0
  152. package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.js +13 -0
  153. package/dist/NodeManager/node/resource/image/imageManager.d.ts +13 -0
  154. package/dist/NodeManager/node/resource/image/imageManager.js +66 -0
  155. package/dist/NodeManager/node/resource/resourceManager.d.ts +21 -0
  156. package/dist/NodeManager/node/resource/resourceManager.js +57 -0
  157. package/dist/NodeManager/node/resource/volume/volumeManager.d.ts +20 -0
  158. package/dist/NodeManager/node/resource/volume/volumeManager.js +228 -0
  159. package/dist/NodeManager/node/run/runHandler.d.ts +18 -0
  160. package/dist/NodeManager/node/run/runHandler.js +139 -0
  161. package/dist/NodeManager/node/specs/specsHandler.d.ts +17 -0
  162. package/dist/NodeManager/node/specs/specsHandler.js +135 -0
  163. package/dist/NodeManager/node/specs/type.d.ts +15 -0
  164. package/dist/NodeManager/node/specs/type.js +1 -0
  165. package/dist/NodeManager/node/stake/StakeHandler.d.ts +22 -0
  166. package/dist/NodeManager/node/stake/StakeHandler.js +111 -0
  167. package/dist/NodeManager/node/task/TaskManager.d.ts +267 -0
  168. package/dist/NodeManager/node/task/TaskManager.js +480 -0
  169. package/dist/NodeManager/node/task/TaskManagerRegistry.d.ts +49 -0
  170. package/dist/NodeManager/node/task/TaskManagerRegistry.js +68 -0
  171. package/dist/NodeManager/node/task/executions/createDependencyMap.d.ts +18 -0
  172. package/dist/NodeManager/node/task/executions/createDependencyMap.js +32 -0
  173. package/dist/NodeManager/node/task/executions/createExecutionPlan.d.ts +14 -0
  174. package/dist/NodeManager/node/task/executions/createExecutionPlan.js +36 -0
  175. package/dist/NodeManager/node/task/executions/createOperationMap.d.ts +11 -0
  176. package/dist/NodeManager/node/task/executions/createOperationMap.js +34 -0
  177. package/dist/NodeManager/node/task/executions/validateExecutionPlan.d.ts +12 -0
  178. package/dist/NodeManager/node/task/executions/validateExecutionPlan.js +48 -0
  179. package/dist/NodeManager/node/task/globalStore/finalizeEnv.d.ts +2 -0
  180. package/dist/NodeManager/node/task/globalStore/finalizeEnv.js +30 -0
  181. package/dist/NodeManager/node/task/globalStore/getByPath.d.ts +2 -0
  182. package/dist/NodeManager/node/task/globalStore/getByPath.js +12 -0
  183. package/dist/NodeManager/node/task/globalStore/index.d.ts +9 -0
  184. package/dist/NodeManager/node/task/globalStore/index.js +9 -0
  185. package/dist/NodeManager/node/task/globalStore/interpolate.d.ts +2 -0
  186. package/dist/NodeManager/node/task/globalStore/interpolate.js +16 -0
  187. package/dist/NodeManager/node/task/globalStore/interpolateOperation.d.ts +3 -0
  188. package/dist/NodeManager/node/task/globalStore/interpolateOperation.js +221 -0
  189. package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.d.ts +2 -0
  190. package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.js +7 -0
  191. package/dist/NodeManager/node/task/globalStore/setDefaults.d.ts +4 -0
  192. package/dist/NodeManager/node/task/globalStore/setDefaults.js +65 -0
  193. package/dist/NodeManager/node/task/globalStore/setHost.d.ts +2 -0
  194. package/dist/NodeManager/node/task/globalStore/setHost.js +9 -0
  195. package/dist/NodeManager/node/task/globalStore/setResult.d.ts +2 -0
  196. package/dist/NodeManager/node/task/globalStore/setResult.js +10 -0
  197. package/dist/NodeManager/node/task/globalStore/setResults.d.ts +2 -0
  198. package/dist/NodeManager/node/task/globalStore/setResults.js +9 -0
  199. package/dist/NodeManager/node/task/globalStore/stanatizeArrays.d.ts +2 -0
  200. package/dist/NodeManager/node/task/globalStore/stanatizeArrays.js +14 -0
  201. package/dist/NodeManager/node/task/globalStore/transformCollections.d.ts +13 -0
  202. package/dist/NodeManager/node/task/globalStore/transformCollections.js +152 -0
  203. package/dist/NodeManager/node/task/helpers/createDefaultOpState.d.ts +2 -0
  204. package/dist/NodeManager/node/task/helpers/createDefaultOpState.js +20 -0
  205. package/dist/NodeManager/node/task/helpers/createInitialFlow.d.ts +8 -0
  206. package/dist/NodeManager/node/task/helpers/createInitialFlow.js +24 -0
  207. package/dist/NodeManager/node/task/loggers/logManager.d.ts +8 -0
  208. package/dist/NodeManager/node/task/loggers/logManager.js +54 -0
  209. package/dist/NodeManager/node/task/operations/getOperationsInfos.d.ts +6 -0
  210. package/dist/NodeManager/node/task/operations/getOperationsInfos.js +33 -0
  211. package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.d.ts +2 -0
  212. package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.js +65 -0
  213. package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.d.ts +10 -0
  214. package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.js +37 -0
  215. package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.d.ts +14 -0
  216. package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.js +117 -0
  217. package/dist/NodeManager/node/task/operations/runTaskManagerOperation.d.ts +21 -0
  218. package/dist/NodeManager/node/task/operations/runTaskManagerOperation.js +488 -0
  219. package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.d.ts +21 -0
  220. package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.js +54 -0
  221. package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.d.ts +10 -0
  222. package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.js +43 -0
  223. package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.d.ts +14 -0
  224. package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.js +137 -0
  225. package/dist/NodeManager/node/utils/convertFromBytes.d.ts +4 -0
  226. package/dist/NodeManager/node/utils/convertFromBytes.js +11 -0
  227. package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.d.ts +7 -0
  228. package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.js +34 -0
  229. package/dist/NodeManager/node/utils/extractResultsFromLogs.d.ts +18 -0
  230. package/dist/NodeManager/node/utils/extractResultsFromLogs.js +37 -0
  231. package/dist/NodeManager/node/utils/generateRandomId.d.ts +1 -0
  232. package/dist/NodeManager/node/utils/generateRandomId.js +3 -0
  233. package/dist/NodeManager/node/utils/multiProgressBarReporter.d.ts +16 -0
  234. package/dist/NodeManager/node/utils/multiProgressBarReporter.js +22 -0
  235. package/dist/NodeManager/node/utils/poll.d.ts +5 -0
  236. package/dist/NodeManager/node/utils/poll.js +25 -0
  237. package/dist/NodeManager/node/utils/progressBarReporter.d.ts +9 -0
  238. package/dist/NodeManager/node/utils/progressBarReporter.js +28 -0
  239. package/dist/NodeManager/provider/ContainerStateManager.d.ts +24 -0
  240. package/dist/NodeManager/provider/ContainerStateManager.js +122 -0
  241. package/dist/NodeManager/provider/ExposedPortHealthCheck.d.ts +29 -0
  242. package/dist/NodeManager/provider/ExposedPortHealthCheck.js +183 -0
  243. package/dist/NodeManager/provider/Provider.d.ts +70 -0
  244. package/dist/NodeManager/provider/Provider.js +457 -0
  245. package/dist/NodeManager/provider/__tests__/Provider.spec.d.ts +1 -0
  246. package/dist/NodeManager/provider/__tests__/Provider.spec.js +337 -0
  247. package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.d.ts +6 -0
  248. package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.js +45 -0
  249. package/dist/NodeManager/provider/containerOrchestration/docker/index.d.ts +43 -0
  250. package/dist/NodeManager/provider/containerOrchestration/docker/index.js +366 -0
  251. package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.d.ts +5 -0
  252. package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.js +15 -0
  253. package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.d.ts +1 -0
  254. package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.js +15 -0
  255. package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.d.ts +1 -0
  256. package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.js +13 -0
  257. package/dist/NodeManager/provider/containerOrchestration/interface.d.ts +53 -0
  258. package/dist/NodeManager/provider/containerOrchestration/interface.js +1 -0
  259. package/dist/NodeManager/provider/containerOrchestration/podman/index.d.ts +11 -0
  260. package/dist/NodeManager/provider/containerOrchestration/podman/index.js +69 -0
  261. package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.d.ts +103 -0
  262. package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.js +66 -0
  263. package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.d.ts +2 -0
  264. package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.js +11 -0
  265. package/dist/NodeManager/provider/types.d.ts +18 -0
  266. package/dist/NodeManager/provider/types.js +1 -0
  267. package/dist/NodeManager/provider/utils/parseBuffer.d.ts +4 -0
  268. package/dist/NodeManager/provider/utils/parseBuffer.js +19 -0
  269. package/dist/NodeManager/repository/NodeRepository.d.ts +53 -0
  270. package/dist/NodeManager/repository/NodeRepository.js +153 -0
  271. package/dist/NodeManager/sdk/index.d.ts +9 -0
  272. package/dist/NodeManager/sdk/index.js +146 -0
  273. package/dist/NodeManager/types/index.d.ts +27 -0
  274. package/dist/NodeManager/types/index.js +1 -0
  275. package/dist/NodeManager/utils/convertFromBytes.d.ts +4 -0
  276. package/dist/NodeManager/utils/convertFromBytes.js +11 -0
  277. package/dist/NodeManager/utils/expose-util.d.ts +14 -0
  278. package/dist/NodeManager/utils/expose-util.js +88 -0
  279. package/dist/NodeManager/utils/jobDefinitionParser.d.ts +12 -0
  280. package/dist/NodeManager/utils/jobDefinitionParser.js +31 -0
  281. package/dist/NodeManager/utils/ops-util.d.ts +3 -0
  282. package/dist/NodeManager/utils/ops-util.js +19 -0
  283. package/dist/NodeManager/utils/timeoutPromiseWrapper.d.ts +1 -0
  284. package/dist/NodeManager/utils/timeoutPromiseWrapper.js +27 -0
  285. package/dist/NodeManager/utils/utils.d.ts +39 -0
  286. package/dist/NodeManager/utils/utils.js +107 -0
  287. package/dist/NodeManager/utils/wslCheck.d.ts +14 -0
  288. package/dist/NodeManager/utils/wslCheck.js +54 -0
  289. package/dist/cli/address/__tests__/command.spec.d.ts +1 -0
  290. package/dist/cli/address/__tests__/command.spec.js +33 -0
  291. package/dist/cli/address/action.d.ts +4 -0
  292. package/dist/cli/address/action.js +4 -0
  293. package/dist/cli/address/command.d.ts +2 -0
  294. package/dist/cli/address/command.js +9 -0
  295. package/dist/cli/createNosanaCli.d.ts +2 -0
  296. package/dist/cli/createNosanaCli.js +32 -0
  297. package/dist/cli/index.d.ts +1 -0
  298. package/dist/cli/index.js +16 -0
  299. package/dist/cli/node/__tests__/index.spec.d.ts +1 -0
  300. package/dist/cli/node/__tests__/index.spec.js +10 -0
  301. package/dist/cli/node/index.d.ts +5 -0
  302. package/dist/cli/node/index.js +12 -0
  303. package/dist/cli/node/prune/action.d.ts +4 -0
  304. package/dist/cli/node/prune/action.js +18 -0
  305. package/dist/cli/node/prune/command.d.ts +2 -0
  306. package/dist/cli/node/prune/command.js +10 -0
  307. package/dist/cli/node/run/__tests__/command.spec.d.ts +1 -0
  308. package/dist/cli/node/run/__tests__/command.spec.js +38 -0
  309. package/dist/cli/node/run/action.d.ts +3 -0
  310. package/dist/cli/node/run/action.js +82 -0
  311. package/dist/cli/node/run/command.d.ts +3 -0
  312. package/dist/cli/node/run/command.js +17 -0
  313. package/dist/cli/node/run/generateDeploymentEndpointsTable.d.ts +2 -0
  314. package/dist/cli/node/run/generateDeploymentEndpointsTable.js +45 -0
  315. package/dist/cli/node/start/__tests__/command.spec.d.ts +1 -0
  316. package/dist/cli/node/start/__tests__/command.spec.js +39 -0
  317. package/dist/cli/node/start/action.d.ts +4 -0
  318. package/dist/cli/node/start/action.js +48 -0
  319. package/dist/cli/node/start/command.d.ts +3 -0
  320. package/dist/cli/node/start/command.js +19 -0
  321. package/dist/cli/sharedOptions/--api.d.ts +2 -0
  322. package/dist/cli/sharedOptions/--api.js +2 -0
  323. package/dist/cli/sharedOptions/--format.d.ts +2 -0
  324. package/dist/cli/sharedOptions/--format.js +4 -0
  325. package/dist/cli/sharedOptions/--gpu.d.ts +2 -0
  326. package/dist/cli/sharedOptions/--gpu.js +12 -0
  327. package/dist/cli/sharedOptions/--network.d.ts +2 -0
  328. package/dist/cli/sharedOptions/--network.js +4 -0
  329. package/dist/cli/sharedOptions/--port.d.ts +2 -0
  330. package/dist/cli/sharedOptions/--port.js +2 -0
  331. package/dist/cli/sharedOptions/--rpc.d.ts +2 -0
  332. package/dist/cli/sharedOptions/--rpc.js +2 -0
  333. package/dist/cli/sharedOptions/--timeout.d.ts +2 -0
  334. package/dist/cli/sharedOptions/--timeout.js +12 -0
  335. package/dist/cli/sharedOptions/--verbose.d.ts +2 -0
  336. package/dist/cli/sharedOptions/--verbose.js +2 -0
  337. package/dist/cli/sharedOptions/--wallet.d.ts +2 -0
  338. package/dist/cli/sharedOptions/--wallet.js +2 -0
  339. package/dist/cli/sharedOptions/index.d.ts +7 -0
  340. package/dist/cli/sharedOptions/index.js +8 -0
  341. package/dist/index.d.ts +3 -0
  342. package/dist/index.js +7 -0
  343. package/dist/output-formatter/OutputFormatter.d.ts +61 -0
  344. package/dist/output-formatter/OutputFormatter.js +58 -0
  345. package/dist/output-formatter/OutputFormatterFactory.d.ts +4 -0
  346. package/dist/output-formatter/OutputFormatterFactory.js +18 -0
  347. package/dist/output-formatter/__mocks__/outputEvents.mock.d.ts +42 -0
  348. package/dist/output-formatter/__mocks__/outputEvents.mock.js +45 -0
  349. package/dist/output-formatter/__mocks__/outputFormatter.mock.d.ts +0 -0
  350. package/dist/output-formatter/__mocks__/outputFormatter.mock.js +21 -0
  351. package/dist/output-formatter/__tests__/OutputFormatter.spec.d.ts +1 -0
  352. package/dist/output-formatter/__tests__/OutputFormatter.spec.js +34 -0
  353. package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.d.ts +1 -0
  354. package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.js +26 -0
  355. package/dist/output-formatter/__tests__/outputFormatSelector.spec.d.ts +1 -0
  356. package/dist/output-formatter/__tests__/outputFormatSelector.spec.js +21 -0
  357. package/dist/output-formatter/json/JsonOutputEventHandlers.d.ts +8 -0
  358. package/dist/output-formatter/json/JsonOutputEventHandlers.js +191 -0
  359. package/dist/output-formatter/json/JsonOutputFormatter.d.ts +47 -0
  360. package/dist/output-formatter/json/JsonOutputFormatter.js +12 -0
  361. package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.d.ts +1 -0
  362. package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.js +36 -0
  363. package/dist/output-formatter/outputEvents.d.ts +213 -0
  364. package/dist/output-formatter/outputEvents.js +63 -0
  365. package/dist/output-formatter/outputFormatArgumentParser.d.ts +1 -0
  366. package/dist/output-formatter/outputFormatArgumentParser.js +10 -0
  367. package/dist/output-formatter/outputFormatSelector.d.ts +15 -0
  368. package/dist/output-formatter/outputFormatSelector.js +23 -0
  369. package/dist/output-formatter/text/TextOutputEventHandlers.d.ts +7 -0
  370. package/dist/output-formatter/text/TextOutputEventHandlers.js +128 -0
  371. package/dist/output-formatter/text/TextOutputFormatter.d.ts +6 -0
  372. package/dist/output-formatter/text/TextOutputFormatter.js +7 -0
  373. package/dist/output-formatter/text/VerboseTextOutputEventHandlers.d.ts +7 -0
  374. package/dist/output-formatter/text/VerboseTextOutputEventHandlers.js +138 -0
  375. package/dist/output-formatter/text/VerboseTextOutputFormatter.d.ts +6 -0
  376. package/dist/output-formatter/text/VerboseTextOutputFormatter.js +7 -0
  377. package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.d.ts +1 -0
  378. package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.js +25 -0
  379. package/dist/static/index.d.ts +7 -0
  380. package/dist/static/index.js +12 -0
  381. package/dist/version/index.d.ts +1 -0
  382. package/dist/version/index.js +47 -0
  383. package/npm-shrinkwrap.json +9928 -0
  384. package/package.json +102 -0
@@ -0,0 +1,366 @@
1
+ import os from 'os';
2
+ import { DockerExtended } from './dockerExtended/index.js';
3
+ import { createSeverObject } from './utils/createServerObject.js';
4
+ import { checkDeprecationDeadline } from './utils/deadline.js';
5
+ export class DockerContainerOrchestration {
6
+ constructor(server, gpu) {
7
+ this.name = 'docker';
8
+ this.gpu = 'all';
9
+ this.listeners = new Map();
10
+ this.gpu = gpu;
11
+ if (server.startsWith('http') || server.startsWith('ssh')) {
12
+ const { host, port, protocol } = createSeverObject(server);
13
+ this.host = host;
14
+ this.port = port;
15
+ this.protocol = protocol;
16
+ this.docker = new DockerExtended({
17
+ host: this.host,
18
+ port: this.port,
19
+ protocol: this.protocol,
20
+ });
21
+ }
22
+ else {
23
+ // Assume server is a socket path
24
+ this.protocol = 'socket';
25
+ if (server.startsWith('~')) {
26
+ server = server.replace('~', os.homedir());
27
+ }
28
+ this.host = server;
29
+ this.port = '';
30
+ this.docker = new DockerExtended({ socketPath: this.host });
31
+ }
32
+ }
33
+ async getContainerByName(name) {
34
+ const containers = await this.docker
35
+ .listContainers({ all: true })
36
+ .catch((_) => {
37
+ throw new Error('could not get containers');
38
+ });
39
+ const matchedContainer = containers.find((container) => container.Names.includes(`/${name}`));
40
+ if (!matchedContainer)
41
+ return undefined;
42
+ return this.docker.getContainer(matchedContainer.Id);
43
+ }
44
+ async getContainersByName(names) {
45
+ try {
46
+ const containers = await this.docker.listContainers({ all: true });
47
+ const matchedContainers = containers.filter((container) => names.some((name) => container.Names.includes(`/${name}`)));
48
+ if (matchedContainers.length > 0) {
49
+ const containerObjects = matchedContainers.map((containerInfo) => this.docker.getContainer(containerInfo.Id));
50
+ return containerObjects;
51
+ }
52
+ else {
53
+ return [];
54
+ }
55
+ }
56
+ catch (_) {
57
+ throw new Error('could not get containers');
58
+ }
59
+ }
60
+ getConnection() {
61
+ return this.docker;
62
+ }
63
+ async pullImage(image, authorisation, controller) {
64
+ try {
65
+ if (controller?.signal.aborted)
66
+ throw controller.signal.reason;
67
+ if (await this.docker.hasImage(image))
68
+ return;
69
+ await this.docker.promisePull(image, controller ?? new AbortController(), authorisation);
70
+ }
71
+ catch (error) {
72
+ if (error instanceof Error) {
73
+ error.eventType = 'image-pull-error';
74
+ }
75
+ throw error;
76
+ }
77
+ }
78
+ async hasImage(image) {
79
+ return await this.docker.hasImage(image);
80
+ }
81
+ async getImage(image) {
82
+ return this.docker.getImage(image);
83
+ }
84
+ async listImages() {
85
+ return this.docker.listImages();
86
+ }
87
+ async deleteImage(image, controller) {
88
+ if (await this.docker.hasImage(image)) {
89
+ await this.docker
90
+ .getImage(image)
91
+ .remove({ force: true, abortSignal: controller?.signal });
92
+ }
93
+ }
94
+ async createNetwork(name, controller) {
95
+ try {
96
+ if (await this.hasNetwork('NOSANA_GATEWAY'))
97
+ return;
98
+ await this.docker.createNetwork({
99
+ Name: 'NOSANA_GATEWAY',
100
+ IPAM: {
101
+ Driver: 'bridge',
102
+ Config: [{ Subnet: '192.168.101.0/24', Gateway: '192.168.101.1' }],
103
+ },
104
+ abortSignal: controller?.signal,
105
+ });
106
+ }
107
+ catch (error) {
108
+ if (error instanceof Error) {
109
+ error.eventType = 'resource-error';
110
+ }
111
+ throw error;
112
+ }
113
+ }
114
+ async hasNetwork(name) {
115
+ const networks = await this.docker.listNetworks();
116
+ return networks.some((network) => network.Name === name);
117
+ }
118
+ async deleteNetwork(name, controller) {
119
+ // await this.docker.getNetwork(name).remove({ abortSignal: controller?.signal });
120
+ }
121
+ async createVolume(name, controller) {
122
+ try {
123
+ return await this.docker.createVolume({ Name: name });
124
+ }
125
+ catch (error) {
126
+ if (error instanceof Error) {
127
+ error.eventType = 'resource-error';
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ async hasVolume(name) {
133
+ try {
134
+ const volumes = await this.docker.listVolumes();
135
+ return volumes.Volumes.some((volume) => volume.Name === name);
136
+ }
137
+ catch (error) {
138
+ return false;
139
+ }
140
+ }
141
+ async listVolumes() {
142
+ return (await this.docker.listVolumes()).Volumes;
143
+ }
144
+ async getVolume(name) {
145
+ return this.docker.getVolume(name);
146
+ }
147
+ async getRawVolume(name) {
148
+ return this.docker.getVolume(name);
149
+ }
150
+ async deleteVolume(name, controller) {
151
+ const volume = this.docker.getVolume(name);
152
+ try {
153
+ await volume.inspect(); // This will throw if the volume doesn't exist
154
+ await volume.remove({ force: true, abortSignal: controller?.signal });
155
+ }
156
+ catch (error) {
157
+ if (error.statusCode === 404) {
158
+ // Volume doesn't exist, nothing to delete
159
+ return;
160
+ }
161
+ throw error;
162
+ }
163
+ }
164
+ async healthy() {
165
+ if (this.protocol != 'socket') {
166
+ checkDeprecationDeadline();
167
+ }
168
+ try {
169
+ const info = await this.docker.info();
170
+ if (typeof info === 'object' && info !== null && info.ID) {
171
+ return { status: true };
172
+ }
173
+ return { status: false, error: new Error('invalid docker info') };
174
+ }
175
+ catch (error) {
176
+ return { status: false, error };
177
+ }
178
+ }
179
+ async getContainer(id) {
180
+ const container = this.docker.getContainer(id);
181
+ return container;
182
+ }
183
+ getProtocol() {
184
+ return this.protocol;
185
+ }
186
+ setupContainerAbortListener(containerId, controller) {
187
+ if (controller.signal.aborted) {
188
+ this.stopContainer(containerId);
189
+ }
190
+ const stopFunction = async () => {
191
+ await this.stopContainer(containerId);
192
+ };
193
+ controller.signal.addEventListener('abort', stopFunction);
194
+ const current = this.listeners.get(containerId) || [];
195
+ current.push(stopFunction);
196
+ this.listeners.set(containerId, current);
197
+ }
198
+ async runContainer(args, controller) {
199
+ try {
200
+ if (controller?.signal.aborted) {
201
+ throw controller.signal.reason;
202
+ }
203
+ const container = await this.docker.createContainer({
204
+ ...args,
205
+ abortSignal: controller?.signal,
206
+ });
207
+ await container.start();
208
+ if (controller) {
209
+ this.setupContainerAbortListener(container.id, controller);
210
+ }
211
+ return container;
212
+ }
213
+ catch (error) {
214
+ if (error instanceof Error) {
215
+ error.eventType = 'container-runtime-error';
216
+ }
217
+ throw error;
218
+ }
219
+ }
220
+ async runFlowContainer(image, args, controller) {
221
+ try {
222
+ if (controller?.signal.aborted) {
223
+ throw controller.signal.reason;
224
+ }
225
+ const container = await this.docker.createContainer({
226
+ ...mapRunContainerArgsToContainerCreateOpts(image, args, this.gpu),
227
+ abortSignal: controller?.signal,
228
+ });
229
+ await container.start();
230
+ if (controller) {
231
+ this.setupContainerAbortListener(container.id, controller);
232
+ }
233
+ return container;
234
+ }
235
+ catch (error) {
236
+ if (error instanceof Error) {
237
+ error.eventType = 'container-runtime-error';
238
+ }
239
+ throw error;
240
+ }
241
+ }
242
+ async stopContainer(id, controller) {
243
+ const listeners = this.listeners.get(id) || [];
244
+ if (controller) {
245
+ for (const l of listeners)
246
+ controller.signal.removeEventListener('abort', l);
247
+ }
248
+ const container = this.docker.getContainer(id);
249
+ try {
250
+ const info = await container.inspect();
251
+ if (info.State.Status !== 'exited')
252
+ await container.stop({ abortSignal: controller?.signal });
253
+ }
254
+ catch { }
255
+ }
256
+ async stopAndDeleteContainer(id, controller) {
257
+ const listeners = this.listeners.get(id) || [];
258
+ if (controller) {
259
+ for (const l of listeners)
260
+ controller.signal.removeEventListener('abort', l);
261
+ }
262
+ const container = await this.docker.getContainer(id);
263
+ try {
264
+ // Need to catch in case container is already stopped
265
+ await container.stop({ abortSignal: controller?.signal }).catch(() => { });
266
+ const info = await container.inspect();
267
+ await container.remove({
268
+ force: true,
269
+ v: true,
270
+ abortSignal: controller?.signal,
271
+ });
272
+ return info;
273
+ }
274
+ catch (error) {
275
+ return undefined;
276
+ }
277
+ }
278
+ async isContainerExited(id) {
279
+ try {
280
+ const info = await this.docker.getContainer(id).inspect();
281
+ return info.State.Status === 'exited';
282
+ }
283
+ catch {
284
+ return true;
285
+ }
286
+ }
287
+ async doesContainerExist(id) {
288
+ try {
289
+ await this.docker.getContainer(id).inspect();
290
+ return true;
291
+ }
292
+ catch (e) {
293
+ if (e.statusCode === 404)
294
+ return false;
295
+ throw e;
296
+ }
297
+ }
298
+ async check() {
299
+ const { status, error } = await this.healthy();
300
+ if (!status) {
301
+ throw new Error(`error on container orchestration (docker or podman), error: ${error}`);
302
+ }
303
+ return `${this.protocol}://${this.host}:${this.port}`;
304
+ }
305
+ }
306
+ function mapRunContainerArgsToContainerCreateOpts(image, { name, cmd, gpu, volumes, env, work_dir, entrypoint, aliases, }, gpuOption) {
307
+ const devices = gpu
308
+ ? [
309
+ {
310
+ ...(gpuOption === 'all'
311
+ ? { Count: -1 }
312
+ : { device_ids: gpuOption.split(',') }),
313
+ Driver: 'nvidia',
314
+ Capabilities: [['gpu']],
315
+ },
316
+ ]
317
+ : [];
318
+ const dockerVolumes = [];
319
+ if (volumes && volumes.length > 0) {
320
+ for (let i = 0; i < volumes.length; i++) {
321
+ const volume = volumes[i];
322
+ dockerVolumes.push({
323
+ Target: volume.dest,
324
+ Source: volume.name,
325
+ Type: 'volume',
326
+ ReadOnly: volume.readonly || false,
327
+ });
328
+ }
329
+ }
330
+ const vars = [];
331
+ if (env) {
332
+ for (const [key, value] of Object.entries(env)) {
333
+ vars.push(`${key}=${value}`);
334
+ }
335
+ }
336
+ return {
337
+ name: name,
338
+ Hostname: '',
339
+ User: '',
340
+ AttachStdin: false,
341
+ AttachStdout: true,
342
+ AttachStderr: true,
343
+ Tty: false,
344
+ OpenStdin: false,
345
+ StdinOnce: false,
346
+ Env: vars,
347
+ Cmd: cmd,
348
+ Image: image,
349
+ WorkingDir: work_dir,
350
+ Entrypoint: entrypoint,
351
+ NetworkingConfig: {
352
+ EndpointsConfig: {
353
+ NOSANA_GATEWAY: aliases ? { Aliases: aliases } : {},
354
+ },
355
+ },
356
+ HostConfig: {
357
+ ExtraHosts: [
358
+ 'host.docker.internal:8.8.8.8',
359
+ 'host.containers.internal:8.8.8.8',
360
+ ],
361
+ Mounts: dockerVolumes,
362
+ NetworkMode: 'bridge',
363
+ DeviceRequests: devices,
364
+ },
365
+ };
366
+ }
@@ -0,0 +1,5 @@
1
+ export declare function createSeverObject(server: string): {
2
+ host: string;
3
+ port: string;
4
+ protocol: 'https' | 'http' | 'ssh';
5
+ };
@@ -0,0 +1,15 @@
1
+ export function createSeverObject(server) {
2
+ const { hostname, port, protocol } = new URL(server.startsWith('http') || server.startsWith('ssh')
3
+ ? server
4
+ : `http://${server}`);
5
+ const formattedProtocol = protocol.replace(':', '');
6
+ if (!['https', 'http', 'ssh'].includes(formattedProtocol) &&
7
+ typeof protocol !== 'undefined') {
8
+ throw new Error(`Protocol ${protocol} not supported`);
9
+ }
10
+ return {
11
+ host: hostname,
12
+ port,
13
+ protocol: formattedProtocol,
14
+ };
15
+ }
@@ -0,0 +1 @@
1
+ export declare function checkDeprecationDeadline(): void;
@@ -0,0 +1,15 @@
1
+ import chalk from 'chalk';
2
+ export function checkDeprecationDeadline() {
3
+ // 4pm CET today before the error starts showing
4
+ // Check if current time is after the deadline
5
+ const warning = new Date('2025-06-05T16:00:00+02:00'); // 05-06-2025 16:00 CET
6
+ const deadline = new Date('2025-06-07T15:00:00+02:00'); // 06-07-2025 15:00 CET
7
+ const now = new Date();
8
+ if (now > deadline) {
9
+ throw new Error('HTTP connections are no longer supported. Please use socket connection instead. Restart your host with `bash <(wget -qO- https://nosana.com/start.sh)`');
10
+ }
11
+ if (now > warning) {
12
+ console.error(chalk.red('WARNING: Using podman over HTTP is deprecated, use socket instead'));
13
+ console.error(chalk.red('Restart your host with `bash <(wget -qO- https://nosana.com/start.sh)` before 06-06-2025 15:00 CET'));
14
+ }
15
+ }
@@ -0,0 +1 @@
1
+ export declare function repoTagsContainsImage(image: string, repoTags: string[] | undefined): boolean;
@@ -0,0 +1,13 @@
1
+ export function repoTagsContainsImage(image, repoTags) {
2
+ if (!repoTags)
3
+ return false;
4
+ const imageWithTag = `${image}${!image.includes(':') ? ':latest' : ''}`;
5
+ const possible_options = [
6
+ imageWithTag,
7
+ `docker.io/${imageWithTag}`,
8
+ `docker.io/library/${imageWithTag}`,
9
+ `registry.hub.docker.com//${imageWithTag}`,
10
+ `registry.hub.docker.com/library/${imageWithTag}`,
11
+ ];
12
+ return repoTags.some((tag) => possible_options.includes(tag));
13
+ }
@@ -0,0 +1,53 @@
1
+ import { Container, ImageInfo, Image, Volume, VolumeCreateResponse, VolumeInspectInfo, ContainerCreateOptions, ContainerInspectInfo } from 'dockerode';
2
+ import { DockerAuth, RestartPolicy } from '@nosana/sdk';
3
+ import { ReturnedStatus } from '../types.js';
4
+ export type RunContainerArgs = {
5
+ name?: string;
6
+ networks?: {
7
+ [key: string]: {};
8
+ };
9
+ cmd?: string[];
10
+ gpu?: boolean;
11
+ requires_network_mode?: boolean;
12
+ volumes?: Array<{
13
+ dest: string;
14
+ name: string;
15
+ readonly?: boolean;
16
+ }>;
17
+ env?: {
18
+ [key: string]: string;
19
+ };
20
+ work_dir?: string;
21
+ entrypoint?: string | string[];
22
+ restart_policy?: RestartPolicy;
23
+ aliases?: string[] | undefined;
24
+ };
25
+ export interface ContainerOrchestrationInterface {
26
+ getConnection(): any;
27
+ pullImage(image: string, auth?: DockerAuth, controller?: AbortController): Promise<void>;
28
+ hasImage(image: string): Promise<boolean>;
29
+ getImage(image: string): Promise<Image>;
30
+ listImages(): Promise<ImageInfo[]>;
31
+ deleteImage(image: string, controller?: AbortController): Promise<void>;
32
+ createNetwork(name: string, controller?: AbortController): Promise<void>;
33
+ hasNetwork(name: string): Promise<boolean>;
34
+ deleteNetwork(name: string, controller?: AbortController): Promise<void>;
35
+ createVolume(name?: string, controller?: AbortController): Promise<VolumeCreateResponse>;
36
+ getVolume(name: string): Promise<Volume>;
37
+ hasVolume(name: string): Promise<boolean>;
38
+ getRawVolume(name: string): Promise<Volume>;
39
+ listVolumes(): Promise<VolumeInspectInfo[]>;
40
+ deleteVolume(name: string, controller?: AbortController): Promise<void>;
41
+ getContainerByName(name: string): Promise<Container | undefined>;
42
+ getContainersByName(names: string[]): Promise<Container[]>;
43
+ getContainer(id: string): Promise<Container>;
44
+ runContainer(args: ContainerCreateOptions, controller?: AbortController): Promise<Container>;
45
+ runFlowContainer(image: string, args: RunContainerArgs, controller?: AbortController): Promise<Container>;
46
+ stopContainer(id: string, controller?: AbortController): Promise<void>;
47
+ stopAndDeleteContainer(id: string, controller?: AbortController): Promise<ContainerInspectInfo | undefined>;
48
+ isContainerExited(id: string): Promise<boolean>;
49
+ doesContainerExist(id: string): Promise<boolean>;
50
+ healthy(): Promise<ReturnedStatus>;
51
+ check(): Promise<string>;
52
+ getProtocol(): string;
53
+ }
@@ -0,0 +1,11 @@
1
+ import { Container } from 'dockerode';
2
+ import { DockerContainerOrchestration } from '../docker/index.js';
3
+ import { RunContainerArgs } from '../interface.js';
4
+ import { RequestInit, Response } from 'undici';
5
+ export declare class PodmanContainerOrchestration extends DockerContainerOrchestration {
6
+ private api;
7
+ name: string;
8
+ constructor(server: string, gpu: string);
9
+ libPodAPICall(path: string, options: RequestInit): Promise<Response>;
10
+ runFlowContainer(image: string, args: RunContainerArgs, controller?: AbortController): Promise<Container>;
11
+ }
@@ -0,0 +1,69 @@
1
+ import { DockerContainerOrchestration } from '../docker/index.js';
2
+ import { createPodmanRunOptions } from './utils/createPodmanRunOptions.js';
3
+ import { fetch, Agent } from 'undici';
4
+ export class PodmanContainerOrchestration extends DockerContainerOrchestration {
5
+ constructor(server, gpu) {
6
+ super(server, gpu);
7
+ this.name = 'podman';
8
+ if (this.protocol === 'socket') {
9
+ this.api = `http://localhost/v4.5.0/libpod`;
10
+ }
11
+ else {
12
+ this.api = `${this.protocol}://${this.host}:${this.port}/v4.5.0/libpod`;
13
+ }
14
+ }
15
+ async libPodAPICall(path, options) {
16
+ if (this.protocol === 'socket') {
17
+ options.dispatcher = new Agent({
18
+ connect: {
19
+ socketPath: this.host,
20
+ },
21
+ });
22
+ }
23
+ return fetch(`${this.api}${path}`, options);
24
+ }
25
+ async runFlowContainer(image, args, controller) {
26
+ try {
27
+ let error;
28
+ // Incase of error, retry 3 times
29
+ for (let i = 0; i < 3; i++) {
30
+ // Sleep between retries to try and let podman image copying finalise
31
+ await new Promise((res) => setTimeout(res, 3000 * i));
32
+ const create = await this.libPodAPICall(`/containers/create`, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ },
37
+ body: JSON.stringify(createPodmanRunOptions(image, args, this.gpu)),
38
+ });
39
+ if (create.status === 201) {
40
+ const createResult = await create.json();
41
+ const start = await this.libPodAPICall(`/containers/${createResult.Id}/start`, {
42
+ method: 'POST',
43
+ });
44
+ if (start.status === 204) {
45
+ const container = this.docker.getContainer(createResult.Id);
46
+ if (controller) {
47
+ this.setupContainerAbortListener(container.id, controller);
48
+ }
49
+ return container;
50
+ }
51
+ else {
52
+ throw new Error('Cannot start container: ' +
53
+ (await start.json()).message);
54
+ }
55
+ }
56
+ error = await create.json();
57
+ if (error.message !== `${image}: image not known`)
58
+ break;
59
+ }
60
+ throw error;
61
+ }
62
+ catch (error) {
63
+ if (error instanceof Error) {
64
+ error.eventType = 'container-runtime-error';
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,103 @@
1
+ import type { RunContainerArgs } from '../../interface.js';
2
+ /**
3
+ * Takes image and args and return podman run options
4
+ * @param image
5
+ * @param args
6
+ * @param gpu
7
+ * @returns
8
+ */
9
+ export declare function createPodmanRunOptions(image: string, args: RunContainerArgs, gpuOption: string): {
10
+ hostadd: string[];
11
+ netns: {
12
+ nsmode: string;
13
+ };
14
+ Networks: {
15
+ NOSANA_GATEWAY: {
16
+ aliases: string[];
17
+ } | {
18
+ aliases?: undefined;
19
+ };
20
+ };
21
+ create_working_dir: boolean;
22
+ cgroups_mode: string;
23
+ work_dir: string | undefined;
24
+ restart_policy: "" | "no" | "unless-stopped" | "on-failure";
25
+ env: {
26
+ [key: string]: string;
27
+ } | undefined;
28
+ devices: {
29
+ path: string;
30
+ }[];
31
+ entrypoint?: string[] | undefined;
32
+ image: string;
33
+ name: string | undefined;
34
+ command: string[] | undefined;
35
+ volumes: {
36
+ dest: string;
37
+ name: string;
38
+ Options: string[];
39
+ }[] | undefined;
40
+ } | {
41
+ hostadd: string[];
42
+ netns: {
43
+ nsmode: string;
44
+ };
45
+ Networks: {
46
+ NOSANA_GATEWAY: {
47
+ aliases: string[];
48
+ } | {
49
+ aliases?: undefined;
50
+ };
51
+ };
52
+ create_working_dir: boolean;
53
+ cgroups_mode: string;
54
+ work_dir: string | undefined;
55
+ restart_tries?: number | undefined;
56
+ restart_policy: "on-failure";
57
+ env: {
58
+ [key: string]: string;
59
+ } | undefined;
60
+ devices: {
61
+ path: string;
62
+ }[];
63
+ entrypoint?: string[] | undefined;
64
+ image: string;
65
+ name: string | undefined;
66
+ command: string[] | undefined;
67
+ volumes: {
68
+ dest: string;
69
+ name: string;
70
+ Options: string[];
71
+ }[] | undefined;
72
+ } | {
73
+ hostadd: string[];
74
+ netns: {
75
+ nsmode: string;
76
+ };
77
+ Networks: {
78
+ NOSANA_GATEWAY: {
79
+ aliases: string[];
80
+ } | {
81
+ aliases?: undefined;
82
+ };
83
+ };
84
+ create_working_dir: boolean;
85
+ cgroups_mode: string;
86
+ work_dir: string | undefined;
87
+ restart_policy?: undefined;
88
+ env: {
89
+ [key: string]: string;
90
+ } | undefined;
91
+ devices: {
92
+ path: string;
93
+ }[];
94
+ entrypoint?: string[] | undefined;
95
+ image: string;
96
+ name: string | undefined;
97
+ command: string[] | undefined;
98
+ volumes: {
99
+ dest: string;
100
+ name: string;
101
+ Options: string[];
102
+ }[] | undefined;
103
+ };