@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,31 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { parse as parseYaml, stringify as toYaml } from 'yaml';
4
+ /**
5
+ * Converts a YAML string to a JSON-compatible object.
6
+ */
7
+ export function yamlToJson(yamlString) {
8
+ return parseYaml(yamlString);
9
+ }
10
+ /**
11
+ * Converts a JSON-compatible object to a YAML string.
12
+ */
13
+ export function jsonToYaml(obj) {
14
+ return toYaml(obj);
15
+ }
16
+ /**
17
+ * Loads a job definition file (YAML or JSON) and returns the parsed object.
18
+ */
19
+ export function loadJobDefinitionFromFile(filePath) {
20
+ const ext = path.extname(filePath).toLowerCase();
21
+ const raw = fs.readFileSync(filePath, 'utf-8');
22
+ if (ext === '.yaml' || ext === '.yml') {
23
+ return yamlToJson(raw);
24
+ }
25
+ else if (ext === '.json') {
26
+ return JSON.parse(raw);
27
+ }
28
+ else {
29
+ throw new Error(`Unsupported file extension: ${ext}. Expected .json, .yaml or .yml`);
30
+ }
31
+ }
@@ -0,0 +1,3 @@
1
+ import type { JobDefinition } from '@nosana/sdk';
2
+ export declare const isPrivate: (job: JobDefinition) => boolean;
3
+ export declare const isExposed: (job: JobDefinition) => boolean;
@@ -0,0 +1,19 @@
1
+ export const isPrivate = (job) => {
2
+ return job.ops.some((op) => {
3
+ if (op.type !== 'container/run')
4
+ return false;
5
+ const args = op.args;
6
+ const expose = args.expose;
7
+ const isExposed = (Array.isArray(expose) && expose.length > 0) ||
8
+ typeof expose === 'number';
9
+ return isExposed && args.private === true;
10
+ });
11
+ };
12
+ export const isExposed = (job) => {
13
+ return job.ops.some((op) => {
14
+ if (op.type !== 'container/run')
15
+ return false;
16
+ const expose = op.args.expose;
17
+ return ((Array.isArray(expose) && expose.length > 0) || typeof expose === 'number');
18
+ });
19
+ };
@@ -0,0 +1 @@
1
+ export declare function promiseTimeoutWrapper<T extends unknown>(promise: Promise<T>, expiry_time: number, abortController: AbortController): Promise<T>;
@@ -0,0 +1,27 @@
1
+ export function promiseTimeoutWrapper(promise, expiry_time, abortController) {
2
+ const timeoutError = new Error('Promise took too long to settle, expiry timeout met.');
3
+ const timer = setTimeout(() => {
4
+ abortController.abort();
5
+ }, expiry_time * 1000);
6
+ if (abortController.signal.aborted) {
7
+ return Promise.reject(timeoutError);
8
+ }
9
+ return new Promise((resolve, reject) => {
10
+ const onSettled = () => {
11
+ clearTimeout(timer);
12
+ abortController.signal.removeEventListener('abort', abortHandler);
13
+ };
14
+ const abortHandler = () => {
15
+ onSettled();
16
+ reject(timeoutError);
17
+ };
18
+ abortController.signal.addEventListener('abort', abortHandler);
19
+ promise
20
+ .then((value) => resolve(value))
21
+ .catch((error) => {
22
+ abortController.abort();
23
+ reject(error);
24
+ })
25
+ .finally(onSettled);
26
+ });
27
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Method to pause the process
3
+ * @param seconds Number of seconds to pause
4
+ */
5
+ declare const sleep: (seconds: number) => Promise<void>;
6
+ /**
7
+ * Method to easily get a universal timestamp
8
+ */
9
+ declare const now: () => number;
10
+ declare function askYesNoQuestion(question: string, onYes: () => Promise<void>, onNo: () => void): Promise<void>;
11
+ declare const clearLine: () => void;
12
+ declare const colors: {
13
+ RED: string;
14
+ GREEN: string;
15
+ YELLOW: string;
16
+ BLUE: string;
17
+ CYAN: string;
18
+ WHITE: string;
19
+ RESET: string;
20
+ };
21
+ /**
22
+ * Method to test and cast strings into string arrays
23
+ * @param {string | string[]} value The string or string array being tested and casted
24
+ * @returns { string[] } Returns a string array
25
+ */
26
+ declare const ifStringCastToArray: (value: string | string[]) => string[];
27
+ declare function logTable(data: any): void;
28
+ declare function isNodeOnboarded(status: string): boolean;
29
+ declare const SECONDS_PER_DAY: number;
30
+ export { logTable, now, sleep, clearLine, askYesNoQuestion, colors, ifStringCastToArray, SECONDS_PER_DAY, isNodeOnboarded, };
31
+ /**
32
+ * Loads the configuration value for a given environment variable key.
33
+ * Throws an error at runtime if the environment variable is not set.
34
+ *
35
+ * @param {string} key - The name of the environment variable to retrieve.
36
+ * @return {string} The value of the specified environment variable.
37
+ * @throws {Error} If the environment variable is not defined.
38
+ */
39
+ export declare function loadConfigurationValue(key: string): string;
@@ -0,0 +1,107 @@
1
+ import { Console } from 'console';
2
+ import { Transform } from 'stream';
3
+ import inquirer from 'inquirer';
4
+ /**
5
+ * Method to pause the process
6
+ * @param seconds Number of seconds to pause
7
+ */
8
+ const sleep = (seconds) => new Promise((res) => setTimeout(res, seconds * 1e3));
9
+ /**
10
+ * Method to easily get a universal timestamp
11
+ */
12
+ const now = () => Math.floor(Date.now() / 1e3);
13
+ async function askYesNoQuestion(question, onYes, onNo) {
14
+ return inquirer
15
+ .prompt([
16
+ {
17
+ type: 'input',
18
+ name: 'confirm',
19
+ message: question,
20
+ default: 'y',
21
+ validate: (input) => {
22
+ const lowerInput = input.toLowerCase();
23
+ if (lowerInput === 'y' ||
24
+ lowerInput === 'yes' ||
25
+ lowerInput === 'n' ||
26
+ lowerInput === 'no') {
27
+ return true; // Valid input
28
+ }
29
+ return 'Please enter "y" or "yes" for yes or "n" or "no" for no.'; // Repeat question if invalid
30
+ },
31
+ filter: (input) => input.toLowerCase(), // Normalize input to lowercase
32
+ },
33
+ ])
34
+ .then((answers) => {
35
+ if (answers.confirm === 'y' || answers.confirm === 'yes') {
36
+ return onYes();
37
+ }
38
+ else {
39
+ onNo();
40
+ }
41
+ });
42
+ }
43
+ const clearLine = () => {
44
+ process.stdout.moveCursor(0, -1); // up one line
45
+ process.stdout.clearLine(1); // from cursor to end
46
+ };
47
+ const colors = {
48
+ RED: '\u001b[1;31m',
49
+ GREEN: '\u001b[1;32m',
50
+ YELLOW: '\u001b[1;33m',
51
+ BLUE: '\u001b[1;34m',
52
+ CYAN: '\u001b[1;36m',
53
+ WHITE: '\u001b[1;38;5;231m',
54
+ RESET: '\u001b[0m',
55
+ };
56
+ /**
57
+ * Method to test and cast strings into string arrays
58
+ * @param {string | string[]} value The string or string array being tested and casted
59
+ * @returns { string[] } Returns a string array
60
+ */
61
+ const ifStringCastToArray = (value) => typeof value === 'string' ? [value] : value;
62
+ function logTable(data) {
63
+ if (data && data.length > 0) {
64
+ const ts = new Transform({
65
+ transform(chunk, enc, cb) {
66
+ cb(null, chunk);
67
+ },
68
+ });
69
+ const logger = new Console({ stdout: ts });
70
+ logger.table(data);
71
+ const table = (ts.read() || '').toString();
72
+ let result = '';
73
+ for (let row of table.split(/[\r\n]+/)) {
74
+ let r = row.replace(/[^┬]*┬/, '┌');
75
+ r = r.replace(/^├─*┼/, '├');
76
+ r = r.replace(/│[^│]*/, '');
77
+ r = r.replace(/^└─*┴/, '└');
78
+ r = r.replace(/'/g, ' ');
79
+ result += `${r}\n`;
80
+ }
81
+ console.log(result);
82
+ clearLine();
83
+ }
84
+ else {
85
+ console.log('[]');
86
+ }
87
+ }
88
+ function isNodeOnboarded(status) {
89
+ return ['ONBOARDED', 'PREMIUM'].includes(status);
90
+ }
91
+ const SECONDS_PER_DAY = 24 * 60 * 60;
92
+ export { logTable, now, sleep, clearLine, askYesNoQuestion, colors, ifStringCastToArray, SECONDS_PER_DAY, isNodeOnboarded, };
93
+ /**
94
+ * Loads the configuration value for a given environment variable key.
95
+ * Throws an error at runtime if the environment variable is not set.
96
+ *
97
+ * @param {string} key - The name of the environment variable to retrieve.
98
+ * @return {string} The value of the specified environment variable.
99
+ * @throws {Error} If the environment variable is not defined.
100
+ */
101
+ export function loadConfigurationValue(key) {
102
+ let value = process.env[key];
103
+ if (!value) {
104
+ throw new Error(`Missing environment variable ${key}`);
105
+ }
106
+ return value;
107
+ }
@@ -0,0 +1,14 @@
1
+ export declare function isWSLHost(systemEnvironment: string): boolean;
2
+ export declare function isWSLBlockActive(): boolean;
3
+ export declare function displayWSLWarning(): void;
4
+ export declare function displayWSLBlockMessage(): void;
5
+ export declare class WSLBlockedError extends Error {
6
+ constructor();
7
+ }
8
+ /**
9
+ * Check WSL status and handle warning/blocking
10
+ *
11
+ * @param systemEnvironment - The system_environment value from specs
12
+ * @throws WSLBlockedError if WSL host and block date has passed
13
+ */
14
+ export declare function checkWSLStatus(systemEnvironment: string): void;
@@ -0,0 +1,54 @@
1
+ import chalk from 'chalk';
2
+ const WSL_QUEUE_BLOCK_DATE = new Date('2025-12-15T00:00:00Z');
3
+ export function isWSLHost(systemEnvironment) {
4
+ if (!systemEnvironment)
5
+ return false;
6
+ return systemEnvironment.toLowerCase().includes('wsl');
7
+ }
8
+ export function isWSLBlockActive() {
9
+ return new Date() >= WSL_QUEUE_BLOCK_DATE;
10
+ }
11
+ export function displayWSLWarning() {
12
+ console.log('');
13
+ console.log(chalk.bgYellow.black.bold(' ⚠️ WSL DEPRECATION WARNING '));
14
+ console.log('');
15
+ console.log(chalk.yellow('WSL hosts are being removed from the Nosana network.'));
16
+ console.log('');
17
+ console.log(chalk.yellow(`• ${chalk.bold('December 15, 2025')}: WSL hosts will be blocked from joining the queue`));
18
+ console.log(chalk.yellow(`• ${chalk.bold('January 15, 2026')}: Premium market keys for WSL hosts will be revoked`));
19
+ console.log('');
20
+ console.log(chalk.yellow('Please migrate to a native Linux installation to continue participating in the network.'));
21
+ console.log('');
22
+ }
23
+ export function displayWSLBlockMessage() {
24
+ console.log('');
25
+ console.log(chalk.bgRed.white.bold(' 🚫 WSL HOST BLOCKED '));
26
+ console.log('');
27
+ console.log(chalk.red(`WSL hosts have been blocked from the queue since ${chalk.bold('December 15, 2025')}.`));
28
+ console.log(chalk.red(`Premium market keys for WSL hosts will be revoked on ${chalk.bold('January 15, 2026')}.`));
29
+ console.log('');
30
+ console.log(chalk.red('Please migrate to a native Linux installation to continue participating in the network.'));
31
+ console.log('');
32
+ }
33
+ export class WSLBlockedError extends Error {
34
+ constructor() {
35
+ super('WSL hosts are no longer allowed to join the queue');
36
+ this.name = 'WSLBlockedError';
37
+ }
38
+ }
39
+ /**
40
+ * Check WSL status and handle warning/blocking
41
+ *
42
+ * @param systemEnvironment - The system_environment value from specs
43
+ * @throws WSLBlockedError if WSL host and block date has passed
44
+ */
45
+ export function checkWSLStatus(systemEnvironment) {
46
+ if (!isWSLHost(systemEnvironment)) {
47
+ return;
48
+ }
49
+ if (isWSLBlockActive()) {
50
+ displayWSLBlockMessage();
51
+ throw new WSLBlockedError();
52
+ }
53
+ displayWSLWarning();
54
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { addressCommand } from '../command';
2
+ import { getAddress } from '../action';
3
+ vi.mock('../action', () => ({
4
+ getAddress: vi.fn(),
5
+ }));
6
+ describe('addressCommand', () => {
7
+ const mock_getAddress_action = vi.fn();
8
+ const parseArgs = ['node', 'get', 'run command'];
9
+ beforeEach(() => {
10
+ mock_getAddress_action.mockReset();
11
+ getAddress.mockImplementation(mock_getAddress_action);
12
+ });
13
+ it('should call run action', () => {
14
+ addressCommand.parse(parseArgs);
15
+ expect(mock_getAddress_action).toHaveBeenCalledTimes(1);
16
+ });
17
+ it('should set post job args', () => {
18
+ addressCommand.parse(parseArgs);
19
+ expect(addressCommand.args[0]).toBe('run command');
20
+ });
21
+ it('should have 2 options', () => {
22
+ expect(addressCommand.options.length).toBe(2);
23
+ });
24
+ it.each([
25
+ ['--network', '-n', 'mainnet'],
26
+ ['--wallet', '-w', '~/.nosana/nosana_key.json'],
27
+ ])('should have %s option', (long, short, defaultValue) => {
28
+ const option = addressCommand.options.find((i) => i.long === long);
29
+ expect(option?.long).toBe(long);
30
+ expect(option?.short).toBe(short);
31
+ expect(option?.defaultValue).toBe(defaultValue);
32
+ });
33
+ });
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare function getAddress(options: {
3
+ [key: string]: any;
4
+ }, cmd: Command): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import { getSDK } from '../../NodeManager/sdk/index.js';
2
+ export async function getAddress(options, cmd) {
3
+ const nosana = getSDK();
4
+ }
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const addressCommand: Command;
@@ -0,0 +1,9 @@
1
+ import { program } from 'commander';
2
+ import { getAddress } from './action.js';
3
+ import { networkOption, walletOption } from '../sharedOptions/index.js';
4
+ export const addressCommand = program
5
+ .command('address')
6
+ .description('Print your public key address')
7
+ .addOption(walletOption)
8
+ .addOption(networkOption)
9
+ .action(getAddress);
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const createNosanaCLI: (version: string) => Command;
@@ -0,0 +1,32 @@
1
+ import { Command, Option } from 'commander';
2
+ import { nodeCommand } from './node/index.js';
3
+ import { addressCommand } from './address/command.js';
4
+ import { OUTPUT_EVENTS } from '../output-formatter/outputEvents.js';
5
+ import { outputFormatArgumentParser } from '../output-formatter/outputFormatArgumentParser.js';
6
+ import { outputFormatSelector } from '../output-formatter/outputFormatSelector.js';
7
+ import { setSDK } from '../NodeManager/sdk/index.js';
8
+ import { configs } from '../NodeManager/configs/configs.js';
9
+ import { NodeConfigsSingleton } from '../NodeManager/configs/NodeConfigs.js';
10
+ export const createNosanaCLI = (version) => new Command()
11
+ .name('nosana-node')
12
+ .description('Nosana Node')
13
+ .version(version)
14
+ .configureHelp({ showGlobalOptions: true })
15
+ .hook('preSubcommand', async (_, actionCommand) => {
16
+ outputFormatSelector(outputFormatArgumentParser(actionCommand.parent?.args ?? [])).output(OUTPUT_EVENTS.OUTPUT_HEADER_LOGO, { text: 'Nosana' });
17
+ })
18
+ .hook('preAction', async (command, actionCommand) => {
19
+ const opts = actionCommand.optsWithGlobals();
20
+ NodeConfigsSingleton.getInstance(opts);
21
+ let market = opts.market;
22
+ if (opts.network || opts.wallet) {
23
+ await setSDK(opts.network, opts.rpc, market, opts.wallet, actionCommand.opts());
24
+ }
25
+ const isNodeRun = command.args[0] === 'node' && command.args[1] === 'run';
26
+ configs({ ...opts, isNodeRun });
27
+ })
28
+ .addOption(new Option('--log <logLevel>', 'Log level')
29
+ .default('debug')
30
+ .choices(['info', 'none', 'debug', 'trace']))
31
+ .addCommand(nodeCommand)
32
+ .addCommand(addressCommand);
@@ -0,0 +1 @@
1
+ export declare function startCLI(version: string): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import { createNosanaCLI } from './createNosanaCli.js';
2
+ import { outputFormatSelector } from '../output-formatter/outputFormatSelector.js';
3
+ import { validateCLIVersion } from '../version/index.js';
4
+ export async function startCLI(version) {
5
+ const cli = createNosanaCLI(version);
6
+ try {
7
+ await validateCLIVersion();
8
+ await cli.parseAsync(process.argv);
9
+ outputFormatSelector('').finalize();
10
+ }
11
+ catch (e) {
12
+ outputFormatSelector('').finalize();
13
+ console.error(e);
14
+ process.exit(1);
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { nodeCommand } from '../';
2
+ describe('nodeCommand', () => {
3
+ it('should have only three commands', () => {
4
+ expect(nodeCommand.commands.length).toBe(3);
5
+ });
6
+ it.each([['run'], ['start'], ['prune']])('should contain %s command', (command) => {
7
+ // @ts-ignore
8
+ expect(nodeCommand.commands.map((command) => command._name)).toContain(command);
9
+ });
10
+ });
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ export * from './run/command.js';
3
+ export * from './start/command.js';
4
+ export * from './prune/command.js';
5
+ export declare const nodeCommand: Command;
@@ -0,0 +1,12 @@
1
+ import { program } from 'commander';
2
+ import { runNodeCommand } from './run/command.js';
3
+ import { startNodeCommand } from './start/command.js';
4
+ import { nodePruneCommand } from './prune/command.js';
5
+ export * from './run/command.js';
6
+ export * from './start/command.js';
7
+ export * from './prune/command.js';
8
+ export const nodeCommand = program
9
+ .command('node')
10
+ .addCommand(nodePruneCommand)
11
+ .addCommand(runNodeCommand)
12
+ .addCommand(startNodeCommand);
@@ -0,0 +1,4 @@
1
+ export * from './action.js';
2
+ export declare function pruneResources(options: {
3
+ [key: string]: any;
4
+ }): Promise<void>;
@@ -0,0 +1,18 @@
1
+ import { DB } from '../../../NodeManager/db/index.js';
2
+ import { ResourceManager } from '../../../NodeManager/node/resource/resourceManager.js';
3
+ import { selectContainerOrchestrationProvider } from '../../../NodeManager/provider/containerOrchestration/selectContainerOrchestration.js';
4
+ import { NodeRepository } from '../../../NodeManager/repository/NodeRepository.js';
5
+ export * from './action.js';
6
+ export async function pruneResources(options) {
7
+ try {
8
+ const db = new DB(options.config).db;
9
+ const repository = new NodeRepository(db);
10
+ const containerOrchestration = selectContainerOrchestrationProvider(options.provider, options.podman, options.gpu);
11
+ const resourceManager = new ResourceManager(containerOrchestration, repository);
12
+ await resourceManager.prune();
13
+ console.log('Finished pruning system');
14
+ }
15
+ catch (error) {
16
+ throw new Error(`Pruning system failed: ${error}`);
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const nodePruneCommand: Command;
@@ -0,0 +1,10 @@
1
+ import { Command, Option } from 'commander';
2
+ import { pruneResources } from './action.js';
3
+ export const nodePruneCommand = new Command('prune')
4
+ .description('Safely prune none required images and resources.')
5
+ .addOption(new Option('--provider <provider>', 'provider used to run the job')
6
+ .choices(['docker', 'podman'])
7
+ .default('podman'))
8
+ .addOption(new Option('--docker, --podman <URI>', 'Podman/Docker connection URI').default('~/.nosana/podman/podman.sock'))
9
+ .addOption(new Option('-c, --config <path>', 'Config path (to store the flows database and other config)').default('~/.nosana/'))
10
+ .action(pruneResources);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ import { runNodeCommand } from '../command';
2
+ import { runJob } from '../action';
3
+ vi.mock('../action', () => ({
4
+ runJob: vi.fn(),
5
+ }));
6
+ describe('runNodeCommand', () => {
7
+ const mock_run_job_action = vi.fn();
8
+ const parseArgs = ['node', 'run', 'job definition path'];
9
+ beforeEach(() => {
10
+ mock_run_job_action.mockReset();
11
+ runJob.mockImplementation(mock_run_job_action);
12
+ });
13
+ it('should call runJob action', () => {
14
+ runNodeCommand.parse(parseArgs);
15
+ expect(mock_run_job_action).toHaveBeenCalledTimes(1);
16
+ });
17
+ it('should set run job args', () => {
18
+ runNodeCommand.parse(parseArgs);
19
+ expect(runNodeCommand.args[0]).toBe('job definition path');
20
+ });
21
+ it('should have 7 options', () => {
22
+ expect(runNodeCommand.options.length).toBe(7);
23
+ });
24
+ it.each([
25
+ ['--provider', undefined, 'podman'],
26
+ ['--config', '-c', '~/.nosana/'],
27
+ ['--podman', '--docker', '~/.nosana/podman/podman.sock'],
28
+ ['--url', undefined, undefined],
29
+ ['--gpu', undefined, 'all'],
30
+ ['--verbose', undefined, undefined],
31
+ ['--wallet', '-w', '~/.nosana/nosana_key.json'],
32
+ ])('should have %s option', (long, short, defaultValue) => {
33
+ const option = runNodeCommand.options.find((i) => i.long === long);
34
+ expect(option?.long).toBe(long);
35
+ expect(option?.short).toBe(short);
36
+ expect(option?.defaultValue).toBe(defaultValue);
37
+ });
38
+ });
@@ -0,0 +1,3 @@
1
+ export declare function runJob(jobDefinitionFile: string, options: {
2
+ [key: string]: any;
3
+ }): Promise<void>;
@@ -0,0 +1,82 @@
1
+ import util from 'util';
2
+ import { createHash } from '@nosana/sdk';
3
+ import { Provider } from '../../../NodeManager/provider/Provider.js';
4
+ import { ResourceManager } from '../../../NodeManager/node/resource/resourceManager.js';
5
+ import { NodeRepository } from '../../../NodeManager/repository/NodeRepository.js';
6
+ import { DB } from '../../../NodeManager/db/index.js';
7
+ import { selectContainerOrchestrationProvider } from '../../../NodeManager/provider/containerOrchestration/selectContainerOrchestration.js';
8
+ import { log } from '../../../NodeManager/monitoring/log/NodeLog.js';
9
+ import { ConsoleLogger } from '../../../NodeManager/monitoring/log/console/ConsoleLogger.js';
10
+ import TaskManager, { StopReasons, } from '../../../NodeManager/node/task/TaskManager.js';
11
+ import { loadJobDefinitionFromFile } from '../../../NodeManager/utils/jobDefinitionParser.js';
12
+ import { generateDeploymentEndpointsTable } from './generateDeploymentEndpointsTable.js';
13
+ import { generateRandomId } from '../../../NodeManager/node/utils/generateRandomId.js';
14
+ import { getSDK } from '../../../NodeManager/sdk/index.js';
15
+ import { createLoggingProxy } from '../../../NodeManager/monitoring/proxy/loggingProxy.js';
16
+ export async function runJob(jobDefinitionFile, options) {
17
+ try {
18
+ const sdk = getSDK();
19
+ const jobDefinition = await resolveJobDefinition(options, jobDefinitionFile);
20
+ if (jobDefinition.deployment_id) {
21
+ jobDefinition.deployment_id = createHash(`local-${jobDefinition.deployment_id}:${sdk.solana.wallet.publicKey.toString()}`, 45);
22
+ generateDeploymentEndpointsTable(jobDefinition);
23
+ }
24
+ /**
25
+ * set up log listening, any instance can listen to log produces from the node
26
+ * the logs are produces from the log proxy
27
+ */
28
+ log();
29
+ const db = new DB(options.config).db;
30
+ const repository = createLoggingProxy(new NodeRepository(db));
31
+ const containerOrchestration = selectContainerOrchestrationProvider(options.provider, options.podman, options.gpu);
32
+ const resourceManager = new ResourceManager(containerOrchestration, repository);
33
+ const provider = new Provider(containerOrchestration, repository, resourceManager);
34
+ const logger = new ConsoleLogger(false);
35
+ logger.addObserver();
36
+ const job = generateRandomId(32);
37
+ const tm = new TaskManager(provider, repository, job, sdk.solana.wallet.publicKey.toString(), jobDefinition);
38
+ tm.bootstrap();
39
+ const exitHandler = async () => {
40
+ await tm.stop(StopReasons.STOPPED);
41
+ };
42
+ process.on('SIGINT', exitHandler); // Handle Ctrl+C
43
+ process.on('SIGTERM', exitHandler); // Handle termination signals
44
+ await tm.start();
45
+ const result = repository.getFlowState(job);
46
+ console.log('\nResult: ', util.inspect(result, { showHidden: false, depth: null, colors: true }));
47
+ }
48
+ catch (error) {
49
+ const formattedError = `
50
+ ========== ERROR ==========
51
+ Timestamp: ${new Date().toISOString()}
52
+ Error Name: ${error.name || 'Unknown Error'}
53
+ Message: ${error.message || 'No message available'}${options.verbose
54
+ ? `
55
+ Trace: ${error.stack ?? error.trace}`
56
+ : ''}
57
+ ============================
58
+ `;
59
+ console.error(formattedError);
60
+ }
61
+ process.exit();
62
+ }
63
+ async function resolveJobDefinition(options, jobDefinitionFile) {
64
+ let jobDefinition;
65
+ if (options.url) {
66
+ try {
67
+ const data = await fetch(options.url);
68
+ const json = await data.json();
69
+ jobDefinition = json;
70
+ }
71
+ catch (e) {
72
+ throw new Error(`Failed to fetch remote job flow.\n${e}`);
73
+ }
74
+ }
75
+ else {
76
+ if (!jobDefinitionFile) {
77
+ throw new Error('Missing Job Definition Argument');
78
+ }
79
+ jobDefinition = loadJobDefinitionFromFile(jobDefinitionFile);
80
+ }
81
+ return jobDefinition;
82
+ }
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export * from './action.js';
3
+ export declare const runNodeCommand: Command;