@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,30 @@
1
+ import { Client as SDK, Market } from '@nosana/sdk';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ export declare class MarketHandler {
4
+ private sdk;
5
+ private market;
6
+ private address;
7
+ private checkQueuedInterval?;
8
+ private inMarket;
9
+ constructor(sdk: SDK);
10
+ clear(): void;
11
+ isInMarket(): boolean;
12
+ setInMarket(): void;
13
+ check(market: string): Promise<Market>;
14
+ stopMarket(): Promise<boolean>;
15
+ getJobMarket(market: string): Promise<Market>;
16
+ getMarket(): Market | undefined;
17
+ setMarket(market: string): Promise<Market>;
18
+ checkQueuedInMarket(): Promise<Market | undefined>;
19
+ join(accessKey?: PublicKey): Promise<Market>;
20
+ refresh(): Promise<Market>;
21
+ leave(): Promise<void>;
22
+ processMarketQueuePosition(market: Market, isFirst: boolean): {
23
+ position: number;
24
+ count: number;
25
+ };
26
+ startMarketQueueMonitoring(updateCallback: (market: Market | undefined) => void): Promise<void>;
27
+ stopMarketQueueMonitoring(): void;
28
+ stop(): Promise<void>;
29
+ clean(): Promise<void>;
30
+ }
@@ -0,0 +1,137 @@
1
+ export class MarketHandler {
2
+ constructor(sdk) {
3
+ this.sdk = sdk;
4
+ this.inMarket = false;
5
+ this.address = this.sdk.solana.provider.wallet.publicKey;
6
+ }
7
+ clear() {
8
+ this.market = undefined;
9
+ }
10
+ isInMarket() {
11
+ return this.inMarket;
12
+ }
13
+ setInMarket() {
14
+ this.inMarket = true;
15
+ }
16
+ async check(market) {
17
+ try {
18
+ return await this.sdk.jobs.getMarket(market);
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Error resolving Market: ${error}`);
22
+ }
23
+ }
24
+ async stopMarket() {
25
+ if (this.market) {
26
+ try {
27
+ await this.sdk.jobs.stop(this.market.address);
28
+ }
29
+ catch (e) {
30
+ return false;
31
+ }
32
+ }
33
+ return true;
34
+ }
35
+ async getJobMarket(market) {
36
+ try {
37
+ this.market = await this.sdk.jobs.getMarket(market);
38
+ return this.market;
39
+ }
40
+ catch (error) {
41
+ throw new Error('market does not exists');
42
+ }
43
+ }
44
+ getMarket() {
45
+ return this.market;
46
+ }
47
+ async setMarket(market) {
48
+ try {
49
+ this.market = await this.sdk.jobs.getMarket(market);
50
+ return this.market;
51
+ }
52
+ catch (error) {
53
+ throw new Error('market does not exists');
54
+ }
55
+ }
56
+ async checkQueuedInMarket() {
57
+ let markets = [];
58
+ markets = await this.sdk.jobs.allMarkets();
59
+ for (const market of markets) {
60
+ if (market?.queue?.some((e) => e.toString() === this.address.toString())) {
61
+ this.market = market;
62
+ return this.getMarket();
63
+ }
64
+ }
65
+ return undefined;
66
+ }
67
+ async join(accessKey) {
68
+ if (!this.market) {
69
+ throw new Error('market not defined');
70
+ }
71
+ try {
72
+ await this.sdk.jobs.work(this.market.address, accessKey);
73
+ this.inMarket = true;
74
+ }
75
+ catch (e) {
76
+ throw new Error(`could not join queue: ${e}`);
77
+ }
78
+ return this.market;
79
+ }
80
+ async refresh() {
81
+ return this.setMarket(this.market?.address.toString());
82
+ }
83
+ async leave() {
84
+ if (this.market) {
85
+ try {
86
+ await this.sdk.jobs.stop(this.market.address);
87
+ }
88
+ catch (error) { }
89
+ this.inMarket = false;
90
+ }
91
+ }
92
+ processMarketQueuePosition(market, isFirst) {
93
+ const position = market.queue.findIndex((e) => e.toString() === this.address.toString()) + 1;
94
+ return {
95
+ position,
96
+ count: market.queue.length,
97
+ };
98
+ }
99
+ async startMarketQueueMonitoring(updateCallback) {
100
+ // Ensure no multiple intervals
101
+ this.stopMarketQueueMonitoring();
102
+ try {
103
+ // Perform an immediate check
104
+ const queuedMarketInfo = await this.checkQueuedInMarket();
105
+ updateCallback(queuedMarketInfo);
106
+ }
107
+ catch (error) {
108
+ console.warn('\nCould not update queue status', error);
109
+ }
110
+ // Check market queue status every minute
111
+ this.checkQueuedInterval = setInterval(async () => {
112
+ try {
113
+ const queuedMarketInfo = await this.checkQueuedInMarket();
114
+ updateCallback(queuedMarketInfo);
115
+ }
116
+ catch (error) {
117
+ console.warn('\nCould not update queue status', error);
118
+ }
119
+ }, 60000);
120
+ }
121
+ // Stop monitoring market queue status
122
+ stopMarketQueueMonitoring() {
123
+ if (this.checkQueuedInterval) {
124
+ clearInterval(this.checkQueuedInterval);
125
+ this.checkQueuedInterval = undefined; // Clean up reference
126
+ }
127
+ }
128
+ async stop() {
129
+ this.stopMarketQueueMonitoring();
130
+ await this.leave();
131
+ this.clear();
132
+ }
133
+ async clean() {
134
+ this.stopMarketQueueMonitoring();
135
+ this.clear();
136
+ }
137
+ }
@@ -0,0 +1,16 @@
1
+ import { Client } from '@nosana/sdk';
2
+ import { Provider } from '../../provider/Provider.js';
3
+ import { NodeRepository } from '../../repository/NodeRepository.js';
4
+ export declare class RegisterHandler {
5
+ private sdk;
6
+ private provider;
7
+ private repository;
8
+ private nodeId;
9
+ private answers;
10
+ constructor(sdk: Client, provider: Provider, repository: NodeRepository);
11
+ private gainConstent;
12
+ private generateHeaders;
13
+ private runSpecs;
14
+ private submitOnboarding;
15
+ register(): Promise<void>;
16
+ }
@@ -0,0 +1,88 @@
1
+ import chalk from 'chalk';
2
+ import { confirm, input } from '@inquirer/prompts';
3
+ import { configs } from '../../configs/configs.js';
4
+ import { specsAndNetworkJob } from '../../../static/index.js';
5
+ import { applyLoggingProxyToClass } from '../../monitoring/proxy/loggingProxy.js';
6
+ import { generateRandomId } from '../utils/generateRandomId.js';
7
+ import TaskManager from '../task/TaskManager.js';
8
+ export class RegisterHandler {
9
+ constructor(sdk, provider, repository) {
10
+ this.sdk = sdk;
11
+ this.provider = provider;
12
+ this.repository = repository;
13
+ this.nodeId = this.sdk.solana.provider.wallet.publicKey.toString();
14
+ applyLoggingProxyToClass(this);
15
+ }
16
+ async gainConstent() {
17
+ this.answers = {
18
+ email: await input({
19
+ message: 'Your Email Address',
20
+ validate: (value) => /\S+@\S+\.\S+/.test(value),
21
+ }),
22
+ discord: await input({
23
+ message: 'Join our Discord server for direct support from the team and community: https://nosana.com/discord. \nDiscord username:',
24
+ }),
25
+ twitter: await input({
26
+ message: "What is your Twitter username? (If you don't use Twitter, leave blank)",
27
+ }),
28
+ };
29
+ if (!this.answers.email) {
30
+ console.log(chalk.red('Email address is required'));
31
+ process.exit();
32
+ }
33
+ const accept = await confirm({
34
+ message: `Have you read the Participation Agreement and agree to the terms and conditions contained within?\nParticipation agreement: ${chalk.blue('https://drive.google.com/file/d/1dFWCT5Zon08pCPrftdxB9ByvbuDafTwy/view')}`,
35
+ });
36
+ if (!accept) {
37
+ console.log(chalk.red('To continue you must agree to the terms and conditions'));
38
+ process.exit();
39
+ }
40
+ }
41
+ // TODO: convert backend to support sdk.authorization.generate()
42
+ async generateHeaders() {
43
+ const conf = configs();
44
+ const signature = (await this.sdk.solana.signMessage(conf.signMessage));
45
+ const base64Signature = Buffer.from(signature).toString('base64');
46
+ return `${this.nodeId}:${base64Signature}`;
47
+ }
48
+ async runSpecs() {
49
+ const flowId = generateRandomId(32);
50
+ const task = new TaskManager(this.provider, this.repository, flowId, this.sdk.solana.wallet.publicKey.toString(), specsAndNetworkJob);
51
+ task.bootstrap();
52
+ await task.start();
53
+ const result = this.repository.getFlow(flowId);
54
+ if (!result || result.state.status !== 'success') {
55
+ throw new Error('Registration Benchmark Failed');
56
+ }
57
+ return result;
58
+ }
59
+ async submitOnboarding(results) {
60
+ try {
61
+ const headers = new Headers();
62
+ headers.append('Authorization', await this.generateHeaders());
63
+ headers.append('Content-Type', 'application/json');
64
+ const joinTestGridResult = await fetch(`${configs().backendUrl}/nodes/join-test-grid`, {
65
+ method: 'POST',
66
+ headers,
67
+ body: JSON.stringify({
68
+ ...this.answers,
69
+ nodeAddress: this.nodeId,
70
+ results,
71
+ }),
72
+ });
73
+ if (!joinTestGridResult.ok) {
74
+ console.error('Error whilst submiting onboarding request.');
75
+ process.exit();
76
+ }
77
+ }
78
+ catch (error) {
79
+ console.error('Error whilst submiting onboarding request.', error);
80
+ process.exit();
81
+ }
82
+ }
83
+ async register() {
84
+ await this.gainConstent();
85
+ const results = await this.runSpecs();
86
+ await this.submitOnboarding(results.state.opStates);
87
+ }
88
+ }
@@ -0,0 +1,2 @@
1
+ export declare const s3HelperImage = "registry.hub.docker.com/nosana/resource-manager:1.1.8";
2
+ export declare const nosanaBucket = "https://models.nosana.io";
@@ -0,0 +1,2 @@
1
+ export const s3HelperImage = 'registry.hub.docker.com/nosana/resource-manager:1.1.8';
2
+ export const nosanaBucket = 'https://models.nosana.io';
@@ -0,0 +1,6 @@
1
+ import { ContainerCreateOptions } from 'dockerode';
2
+ export declare const createHFArgs: (volumeName: string, hf: {
3
+ repo: string;
4
+ revision?: string;
5
+ files?: string[];
6
+ }, accessToken?: string | undefined) => ContainerCreateOptions;
@@ -0,0 +1,26 @@
1
+ import { s3HelperImage } from '../definition/index.js';
2
+ export const createHFArgs = (volumeName, hf, accessToken) => ({
3
+ AttachStdin: false,
4
+ AttachStdout: true,
5
+ AttachStderr: true,
6
+ Tty: false,
7
+ OpenStdin: false,
8
+ StdinOnce: false,
9
+ Cmd: [
10
+ 'HF',
11
+ hf.repo,
12
+ hf.revision ?? (hf.files ? 'main' : ''),
13
+ hf.files ? hf.files.join(',') : '',
14
+ ],
15
+ Image: s3HelperImage,
16
+ Env: accessToken ? [`HUGGING_FACE_TOKEN=${accessToken}`] : undefined,
17
+ HostConfig: {
18
+ Mounts: [
19
+ {
20
+ Target: '/s3/temp',
21
+ Source: volumeName,
22
+ Type: 'volume',
23
+ },
24
+ ],
25
+ },
26
+ });
@@ -0,0 +1,2 @@
1
+ import { ContainerCreateOptions } from 'dockerode';
2
+ export declare const createOllamaArgs: (volumeName: string, model: string) => ContainerCreateOptions;
@@ -0,0 +1,20 @@
1
+ import { s3HelperImage } from '../definition/index.js';
2
+ export const createOllamaArgs = (volumeName, model) => ({
3
+ AttachStdin: false,
4
+ AttachStdout: true,
5
+ AttachStderr: true,
6
+ Tty: false,
7
+ OpenStdin: false,
8
+ StdinOnce: false,
9
+ Cmd: ['Ollama', model],
10
+ Image: s3HelperImage,
11
+ HostConfig: {
12
+ Mounts: [
13
+ {
14
+ Target: '/s3/temp',
15
+ Source: volumeName,
16
+ Type: 'volume',
17
+ },
18
+ ],
19
+ },
20
+ });
@@ -0,0 +1,2 @@
1
+ import { RequiredResource } from '@nosana/sdk';
2
+ export declare function createResourceName(resource: RequiredResource): string;
@@ -0,0 +1,18 @@
1
+ import { nosanaBucket } from '../definition/index.js';
2
+ export function createResourceName(resource) {
3
+ switch (resource.type) {
4
+ case 'S3':
5
+ const s3Resource = resource;
6
+ if (s3Resource.url) {
7
+ return s3Resource.url.replace('s3://nos-ai-models-qllsn32u', nosanaBucket);
8
+ }
9
+ return s3Resource
10
+ .buckets.map((bucket) => bucket.url)
11
+ .join('-');
12
+ case 'HF':
13
+ const hfResource = resource;
14
+ return `${hfResource.repo}${hfResource.revision ? '-' + hfResource.revision : ''}${hfResource.files ? '-' + hfResource.files.join('-') : ''}`;
15
+ case 'Ollama':
16
+ return resource.model;
17
+ }
18
+ }
@@ -0,0 +1,7 @@
1
+ import { ContainerCreateOptions } from 'dockerode';
2
+ import { S3Auth } from '@nosana/sdk/dist/types/resources';
3
+ export declare const createS3Args: (volumeName: string, s3: {
4
+ url: string;
5
+ files?: string[];
6
+ bucket?: string;
7
+ }, s3Auth: S3Auth | undefined) => ContainerCreateOptions;
@@ -0,0 +1,32 @@
1
+ import { nosanaBucket, s3HelperImage } from '../definition/index.js';
2
+ export const createS3Args = (volumeName, s3, s3Auth) => ({
3
+ AttachStdin: false,
4
+ AttachStdout: true,
5
+ AttachStderr: true,
6
+ Tty: false,
7
+ OpenStdin: false,
8
+ StdinOnce: false,
9
+ Cmd: [
10
+ 'S3',
11
+ s3.url.replace('s3://nos-ai-models-qllsn32u', nosanaBucket),
12
+ s3.files ? s3.files.join(',') : '',
13
+ ],
14
+ Image: s3HelperImage,
15
+ Env: s3Auth
16
+ ? [
17
+ s3.bucket ? `BUCKET=${s3.bucket}` : '',
18
+ `REGION=${s3Auth.REGION}`,
19
+ `ACCESS_KEY_ID=${s3Auth.ACCESS_KEY_ID}`,
20
+ `SECRET_ACCESS_KEY=${s3Auth.SECRET_ACCESS_KEY}`,
21
+ ]
22
+ : undefined,
23
+ HostConfig: {
24
+ Mounts: [
25
+ {
26
+ Target: '/s3/temp',
27
+ Source: volumeName,
28
+ Type: 'volume',
29
+ },
30
+ ],
31
+ },
32
+ });
@@ -0,0 +1,2 @@
1
+ import { VolumeInspectInfo } from 'dockerode';
2
+ export declare function hasDockerVolume(volume: string, volumes: VolumeInspectInfo[]): boolean;
@@ -0,0 +1,3 @@
1
+ export function hasDockerVolume(volume, volumes) {
2
+ return volumes.findIndex((vol) => vol.Name === volume) !== -1;
3
+ }
@@ -0,0 +1 @@
1
+ export declare function hoursSinceDate(date: Date): number;
@@ -0,0 +1,3 @@
1
+ export function hoursSinceDate(date) {
2
+ return Math.abs(date.getTime() - new Date().getTime()) / 36e5;
3
+ }
@@ -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,13 @@
1
+ import { ContainerOrchestrationInterface } from '../../../provider/containerOrchestration/interface.js';
2
+ import { NodeRepository } from '../../../repository/NodeRepository.js';
3
+ export declare class ImageManager {
4
+ private containerOrchestration;
5
+ private repository;
6
+ private fetched;
7
+ private market_required_images;
8
+ constructor(containerOrchestration: ContainerOrchestrationInterface, repository: NodeRepository);
9
+ pullMarketRequiredImages(required_images: string[]): Promise<void>;
10
+ pruneImages(): Promise<void>;
11
+ resyncImagesDB(): Promise<void>;
12
+ setImage(image: string, isPrivate?: boolean): Promise<void>;
13
+ }
@@ -0,0 +1,66 @@
1
+ import { applyLoggingProxyToClass } from '../../../monitoring/proxy/loggingProxy.js';
2
+ import { hoursSinceDate } from '../helpers/hoursSunceDate.js';
3
+ import { repoTagsContainsImage } from '../helpers/repoTagsContainsImage.js';
4
+ export class ImageManager {
5
+ constructor(containerOrchestration, repository) {
6
+ this.containerOrchestration = containerOrchestration;
7
+ this.repository = repository;
8
+ this.fetched = false;
9
+ this.market_required_images = [];
10
+ applyLoggingProxyToClass(this);
11
+ }
12
+ async pullMarketRequiredImages(required_images) {
13
+ this.fetched = true;
14
+ this.market_required_images = required_images;
15
+ for (const image of required_images) {
16
+ if (!(await this.containerOrchestration.hasImage(image))) {
17
+ await this.containerOrchestration.pullImage(image);
18
+ }
19
+ if (!this.repository.getImageResource(image)) {
20
+ this.repository.updateImageResource(image, {
21
+ required: true,
22
+ lastUsed: new Date(),
23
+ usage: 1,
24
+ });
25
+ }
26
+ }
27
+ }
28
+ async pruneImages() {
29
+ const cachedImages = await this.containerOrchestration.listImages();
30
+ for (const { Id, RepoTags } of cachedImages) {
31
+ const dbEntry = Object.entries(this.repository.getImagesResources()).find((img) => (repoTagsContainsImage(img[0], RepoTags) ? img : undefined));
32
+ if (dbEntry && dbEntry[1].required) {
33
+ continue;
34
+ }
35
+ await this.containerOrchestration.deleteImage(Id);
36
+ if (dbEntry) {
37
+ this.repository.deleteImageResource(dbEntry[0]);
38
+ }
39
+ }
40
+ }
41
+ async resyncImagesDB() {
42
+ for (const [image, { lastUsed, required, isPrivate }] of Object.entries(this.repository.getImagesResources())) {
43
+ if (!(await this.containerOrchestration.hasImage(image))) {
44
+ this.repository.deleteImageResource(image);
45
+ continue;
46
+ }
47
+ if ((!this.fetched && required) ||
48
+ this.market_required_images.includes(image)) {
49
+ continue;
50
+ }
51
+ const hoursSinceLastUsed = hoursSinceDate(new Date(lastUsed));
52
+ if (hoursSinceLastUsed > 24 || isPrivate) {
53
+ await this.containerOrchestration.deleteImage(image);
54
+ this.repository.deleteImageResource(image);
55
+ }
56
+ }
57
+ }
58
+ async setImage(image, isPrivate = false) {
59
+ const imageObj = this.repository.getImageResource(image);
60
+ this.repository.updateImageResource(image, {
61
+ lastUsed: new Date(),
62
+ usage: imageObj?.usage + 1 || 1,
63
+ isPrivate,
64
+ });
65
+ }
66
+ }
@@ -0,0 +1,21 @@
1
+ import { Resource } from '@nosana/sdk/dist/types/resources.js';
2
+ import { ContainerOrchestrationInterface } from '../../provider/containerOrchestration/interface.js';
3
+ import { NodeRepository } from '../../repository/NodeRepository.js';
4
+ import { ImageManager } from './image/imageManager.js';
5
+ import { VolumeManager } from './volume/volumeManager.js';
6
+ export declare class ResourceManager {
7
+ private containerOrchestration;
8
+ private repository;
9
+ private required_market;
10
+ images: ImageManager;
11
+ volumes: VolumeManager;
12
+ constructor(containerOrchestration: ContainerOrchestrationInterface, repository: NodeRepository);
13
+ resyncResourcesDB(): Promise<void>;
14
+ fetchMarketRequiredResources(market: string): Promise<void>;
15
+ prune(): Promise<void>;
16
+ getResourceVolumes(resources: Resource[], controller: AbortController): Promise<{
17
+ dest: string;
18
+ name: string;
19
+ readonly?: boolean;
20
+ }[]>;
21
+ }
@@ -0,0 +1,57 @@
1
+ import { clientSelector } from '../../client/index.js';
2
+ import { createResourceName } from './helpers/createResourceName.js';
3
+ import { ImageManager } from './image/imageManager.js';
4
+ import { VolumeManager } from './volume/volumeManager.js';
5
+ export class ResourceManager {
6
+ constructor(containerOrchestration, repository) {
7
+ this.containerOrchestration = containerOrchestration;
8
+ this.repository = repository;
9
+ this.images = new ImageManager(containerOrchestration, repository);
10
+ this.volumes = new VolumeManager(containerOrchestration, repository);
11
+ }
12
+ async resyncResourcesDB() {
13
+ await this.images.resyncImagesDB();
14
+ await this.volumes.resyncResourcesDB();
15
+ if (this.required_market) {
16
+ await this.fetchMarketRequiredResources(this.required_market);
17
+ }
18
+ }
19
+ async fetchMarketRequiredResources(market) {
20
+ this.required_market = market;
21
+ try {
22
+ const { data, error } = await clientSelector().GET('/api/markets/{id}/required-resources', { params: { path: { id: market } } });
23
+ if (error) {
24
+ return;
25
+ }
26
+ await this.images.pullMarketRequiredImages(data.required_images);
27
+ await this.volumes.pullMarketRequiredVolumes(data.required_remote_resources);
28
+ }
29
+ catch (error) {
30
+ throw error;
31
+ }
32
+ }
33
+ async prune() {
34
+ await this.images.pruneImages();
35
+ await this.volumes.pruneVolumes();
36
+ }
37
+ async getResourceVolumes(resources, controller) {
38
+ const volumes = [];
39
+ for (const resource of resources) {
40
+ await this.volumes.createRemoteVolume(resource, controller);
41
+ if ((await this.volumes.hasVolume(resource)) === false) {
42
+ const error = new Error(`Missing required resource ${createResourceName(resource)}.`);
43
+ throw error;
44
+ }
45
+ volumes.push({
46
+ dest: resource.type === 'Ollama'
47
+ ? resource.target === undefined
48
+ ? '/root/.ollama/models'
49
+ : resource.target
50
+ : resource.target,
51
+ name: await this.volumes.getVolume(resource),
52
+ readonly: resource.type === 'S3' && resource.allowWrite ? false : true,
53
+ });
54
+ }
55
+ return volumes;
56
+ }
57
+ }
@@ -0,0 +1,20 @@
1
+ import { Resource } from '@nosana/sdk/dist/types/resources.js';
2
+ import { RequiredResource } from '@nosana/sdk';
3
+ import { ContainerOrchestrationInterface } from '../../../provider/containerOrchestration/interface.js';
4
+ import { NodeRepository } from '../../../repository/NodeRepository.js';
5
+ export declare class VolumeManager {
6
+ private containerOrchestration;
7
+ private repository;
8
+ private fetched;
9
+ private market_required_volumes;
10
+ private progressBarReporter;
11
+ constructor(containerOrchestration: ContainerOrchestrationInterface, repository: NodeRepository);
12
+ pullMarketRequiredVolumes(remoteResources: RequiredResource[]): Promise<void>;
13
+ createRemoteVolume(resource: RequiredResource, controller: AbortController): Promise<string>;
14
+ private runResourceManagerContainer;
15
+ setVolume(bucket: string, volume: string): Promise<void>;
16
+ hasVolume(resource: Resource): Promise<boolean>;
17
+ getVolume(resource: RequiredResource | Resource): Promise<string>;
18
+ pruneVolumes(): Promise<void>;
19
+ resyncResourcesDB(): Promise<void>;
20
+ }