@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
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # Nosana NODE
2
+
3
+ The Nosana NODE is a command-line tool for interacting with the [Nosana Network](https://nosana.com), enabling users to run a Nosana Node.
4
+
5
+ ---
6
+
7
+ ## Features
8
+
9
+ - **Run a Node**: Set up and manage a Nosana Node.
10
+
11
+ ## Install
12
+
13
+ ```shell
14
+ $ npm install -g @nosana/node
15
+
16
+ # or install with yarn
17
+ $ yarn global add @nosana/node
18
+ ```
19
+
20
+ **HINT**\
21
+ Alternatively, you can use `npx` to use the node directly without installing it globally:
22
+
23
+ ```shell
24
+ $ npx @nosana/node help
25
+ ```
26
+
27
+ ## Basic Usage
28
+
29
+ Once installed, you can invoke NODE commands directly from your OS command line through the `nosana-node` executable. See the available commands by entering the following:
30
+
31
+ ```shell
32
+ $ nosana-node help
33
+ ```
34
+
35
+ All interactions with Nosana NODE are of the form
36
+
37
+ ```shell
38
+ $ nosana [command] [options] [argument]
39
+ ```
40
+
41
+ Available `node` commands:
42
+
43
+ ```
44
+ node start [options] <market> Start Nosana Node
45
+ node run [options] <job-definition-file> Run Job Definition File
46
+ node help [command] display help for command
47
+ ```
48
+
49
+ Global options:
50
+
51
+ ```
52
+ -V, --version output the version number
53
+ -n, --network <network> network to run on (choices: "devnet", "mainnet", default: "mainnet")
54
+ --rpc <url> RPC node to use
55
+ --log <logLevel> Log level (choices: "info", "none", "debug", "trace", default: "debug")
56
+ ```
57
+
58
+ ## Start a Nosana Node
59
+
60
+ To get started with your Nosana Node on the Nosana Grid, you can run a node after you've installed the prerequisites with the following command:
61
+
62
+ `nosana node start [options]`
63
+
64
+ Options:
65
+
66
+ ```
67
+ --provider <provider> provider used to run the job (choices: "docker", "podman", default: "podman")
68
+ -w, --wallet <wallet> path to wallet private key (default: "~/.nosana/nosana_key.json")
69
+ --docker, --podman <URI> Podman/Docker connection URI (default: "~/.nosana/podman/podman.sock")
70
+ -h, --help display help for command
71
+ ```
72
+
73
+ ## Starting node
74
+
75
+ With the `nosana node start [options]` command you can start a Nosana Node and join the Nosana Network.
76
+
77
+ Options:
78
+
79
+ ```
80
+ --provider <provider> provider used to run the job (choices: "docker", "podman", default: "podman")
81
+ -w, --wallet <wallet> path to wallet private key (default: "~/.nosana/nosana_key.json")
82
+ --docker, --podman <URI> Podman/Docker connection URI (default: "~/.nosana/podman/podman.sock")
83
+ -h, --help display help for command
84
+ ```
85
+
86
+ ## Documentation
87
+
88
+ Please [visit our documentation](https://learn.nosana.com/) for a full list of commands and examples.
89
+
90
+ For technical details on how the Nosana NODE works, refer to the technical documentation:
91
+
92
+ [Technical Documentation](https://github.com/nosana-ci/nosana-node/tree/main/docs)
package/dist/.env ADDED
@@ -0,0 +1,7 @@
1
+ BACKEND_SOLANA_ADDRESS=7rFPFnxjXHC2sfDy3qrDa9pEb4j49oivMuV7e8sYDPmB
2
+ FRPC_CONTAINER_IMAGE=registry.hub.docker.com/nosana/frpc:v1.0.32
3
+ FRP_SERVER_IMAGE=registry.hub.docker.com/nosana/frpc:v1.0.32
4
+ FRP_SERVER_PORT=7000
5
+ MIN_DISK_SPACE=25
6
+ SIGN_MESSAGE="Hello Nosana Node!"
7
+ API_PORT=8123
package/dist/.env.dev ADDED
@@ -0,0 +1,5 @@
1
+ BACKEND_URL=https://dashboard.k8s.dev.nos.ci/api
2
+ BACKEND_AUTHORIZATION_ADDRESS=3R1YEz9crQR3tRbtSAuufjSsjQXMqtDr1D4f1YprMUSE
3
+ EXPLORER_URL=https://devnet.nosana.io
4
+ FRP_SERVER_ADDRESS=node.k8s.dev.nos.ci
5
+ MIN_DISK_SPACE=20
package/dist/.env.prd ADDED
@@ -0,0 +1,4 @@
1
+ BACKEND_URL=https://dashboard.k8s.prd.nos.ci/api
2
+ BACKEND_AUTHORIZATION_ADDRESS=FEEw3nDocYSyrLT4HPjibjYuaNekakWNmasNvEx3nHKi
3
+ EXPLORER_URL=https://explore.nosana.com
4
+ FRP_SERVER_ADDRESS=node.k8s.prd.nos.ci
@@ -0,0 +1,4 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { paths } from './schema.js';
3
+ export type QueryClient = ReturnType<typeof createClient<paths>>;
4
+ export declare const clientSelector: () => QueryClient;
@@ -0,0 +1,14 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { configs } from '../configs/configs.js';
3
+ export const clientSelector = () => {
4
+ let instance = undefined;
5
+ if (!instance) {
6
+ instance = createClient({
7
+ baseUrl: configs().backendUrl?.replace('/api', '') || '',
8
+ headers: {
9
+ 'Content-Type': 'application/json',
10
+ },
11
+ });
12
+ }
13
+ return instance;
14
+ };
@@ -0,0 +1,14 @@
1
+ export declare class NodeConfigs {
2
+ private options;
3
+ constructor(options: {
4
+ [key: string]: any;
5
+ });
6
+ loadVariablesToEnv(): void;
7
+ }
8
+ export declare class NodeConfigsSingleton {
9
+ private static instance;
10
+ private constructor();
11
+ static getInstance(options?: {
12
+ [key: string]: any;
13
+ }): NodeConfigs;
14
+ }
@@ -0,0 +1,32 @@
1
+ import dotenv from 'dotenv';
2
+ import { dirname, resolve } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ export class NodeConfigs {
5
+ constructor(options) {
6
+ this.options = options;
7
+ }
8
+ loadVariablesToEnv() {
9
+ const network = this.options.network ? this.options.network : 'mainnet';
10
+ const env = network === 'mainnet' ? 'prd' : 'dev';
11
+ const modulePath = dirname(fileURLToPath(import.meta.url));
12
+ // Load .env.${env} first (higher priority)
13
+ dotenv.config({
14
+ path: [
15
+ resolve(modulePath, `../../../.env.${env}`),
16
+ resolve(modulePath, `../../../.env`),
17
+ ],
18
+ });
19
+ // System env vars have highest priority (never overwritten due to default override: false)
20
+ }
21
+ }
22
+ export class NodeConfigsSingleton {
23
+ constructor() { }
24
+ static getInstance(options) {
25
+ if (!NodeConfigsSingleton.instance) {
26
+ NodeConfigsSingleton.instance = new NodeConfigs(options || {});
27
+ NodeConfigsSingleton.instance.loadVariablesToEnv();
28
+ }
29
+ return NodeConfigsSingleton.instance;
30
+ }
31
+ }
32
+ NodeConfigsSingleton.instance = null;
@@ -0,0 +1,161 @@
1
+ import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest';
2
+ import dotenv from 'dotenv';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ // Read .env files directly to avoid duplicating values
7
+ const modulePath = path.dirname(fileURLToPath(import.meta.url));
8
+ const envBase = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env')));
9
+ const envDev = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env.dev')));
10
+ const envProd = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env.prd')));
11
+ // Test constants for env variable names
12
+ const ENV_VAR_BACKEND_SOLANA_ADDRESS = 'BACKEND_SOLANA_ADDRESS';
13
+ const ENV_VAR_BACKEND_URL = 'BACKEND_URL';
14
+ const ENV_VAR_MIN_DISK_SPACE = 'MIN_DISK_SPACE';
15
+ const DEVNET = 'devnet';
16
+ const MAINNET = 'mainnet';
17
+ describe('NodeConfigs', () => {
18
+ let originalEnv;
19
+ beforeEach(() => {
20
+ originalEnv = { ...process.env };
21
+ vi.resetModules();
22
+ // Clear all relevant env vars to ensure clean state
23
+ delete process.env.APP_ENV;
24
+ delete process.env.NODE_ENV;
25
+ delete process.env.BACKEND_URL;
26
+ delete process.env.BACKEND_SOLANA_ADDRESS;
27
+ delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
28
+ delete process.env.EXPLORER_URL;
29
+ delete process.env.SIGN_MESSAGE;
30
+ delete process.env.FRP_SERVER_ADDRESS;
31
+ delete process.env.FRP_SERVER_PORT;
32
+ delete process.env.FRPC_CONTAINER_IMAGE;
33
+ delete process.env.FRP_SERVER_IMAGE;
34
+ delete process.env.API_PORT;
35
+ delete process.env.MIN_DISK_SPACE;
36
+ });
37
+ afterEach(() => {
38
+ process.env = originalEnv;
39
+ });
40
+ describe('dotenv file merging', () => {
41
+ it('should load common variables from base .env file', async () => {
42
+ const { NodeConfigs } = await import('../NodeConfigs.js');
43
+ const nodeConfigs = new NodeConfigs({ network: MAINNET });
44
+ nodeConfigs.loadVariablesToEnv();
45
+ expect(process.env[ENV_VAR_BACKEND_SOLANA_ADDRESS]).toBe(envBase[ENV_VAR_BACKEND_SOLANA_ADDRESS]);
46
+ });
47
+ it('should load environment-specific variables', async () => {
48
+ const { NodeConfigs } = await import('../NodeConfigs.js');
49
+ const nodeConfigs = new NodeConfigs({ network: DEVNET });
50
+ nodeConfigs.loadVariablesToEnv();
51
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
52
+ });
53
+ it('should override common values with environment-specific values', async () => {
54
+ const { NodeConfigs } = await import('../NodeConfigs.js');
55
+ const nodeConfigs = new NodeConfigs({ network: DEVNET });
56
+ nodeConfigs.loadVariablesToEnv();
57
+ // MIN_DISK_SPACE exists in both .env (base) and .env.dev
58
+ // With override:true and env-specific file loaded last, development value should win
59
+ expect(process.env[ENV_VAR_MIN_DISK_SPACE]).toBe(envDev[ENV_VAR_MIN_DISK_SPACE]);
60
+ });
61
+ it('should use common value when environment-specific file does not override it', async () => {
62
+ const { NodeConfigs } = await import('../NodeConfigs.js');
63
+ const nodeConfigs = new NodeConfigs({ network: MAINNET });
64
+ nodeConfigs.loadVariablesToEnv();
65
+ // MIN_DISK_SPACE only has override in .env.dev, not in .env.prd
66
+ // So production should use the base .env value
67
+ expect(process.env[ENV_VAR_MIN_DISK_SPACE]).toBe(envBase[ENV_VAR_MIN_DISK_SPACE]);
68
+ });
69
+ });
70
+ describe('network to environment mapping', () => {
71
+ it('should use prd environment for mainnet network', async () => {
72
+ const { NodeConfigs } = await import('../NodeConfigs.js');
73
+ const nodeConfigs = new NodeConfigs({ network: MAINNET });
74
+ nodeConfigs.loadVariablesToEnv();
75
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envProd[ENV_VAR_BACKEND_URL]);
76
+ });
77
+ it('should use dev environment for devnet network', async () => {
78
+ const { NodeConfigs } = await import('../NodeConfigs.js');
79
+ const nodeConfigs = new NodeConfigs({ network: DEVNET });
80
+ nodeConfigs.loadVariablesToEnv();
81
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
82
+ });
83
+ it('should use dev environment when network is not mainnet', async () => {
84
+ const { NodeConfigs } = await import('../NodeConfigs.js');
85
+ const nodeConfigs = new NodeConfigs({ network: 'testnet' });
86
+ nodeConfigs.loadVariablesToEnv();
87
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
88
+ });
89
+ it('should default to mainnet (prd) when network is not specified', async () => {
90
+ const { NodeConfigs } = await import('../NodeConfigs.js');
91
+ const nodeConfigs = new NodeConfigs({});
92
+ nodeConfigs.loadVariablesToEnv();
93
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envProd[ENV_VAR_BACKEND_URL]);
94
+ });
95
+ });
96
+ describe('NodeConfigsSingleton', () => {
97
+ it('should only call loadVariablesToEnv once across multiple getInstance calls', async () => {
98
+ const { NodeConfigsSingleton, NodeConfigs } = await import('../NodeConfigs.js');
99
+ const loadSpy = vi.spyOn(NodeConfigs.prototype, 'loadVariablesToEnv');
100
+ NodeConfigsSingleton.getInstance({ network: DEVNET });
101
+ NodeConfigsSingleton.getInstance({ network: MAINNET });
102
+ NodeConfigsSingleton.getInstance();
103
+ expect(loadSpy).toHaveBeenCalledTimes(1);
104
+ });
105
+ it('should use options from first getInstance call', async () => {
106
+ const { NodeConfigsSingleton } = await import('../NodeConfigs.js');
107
+ // First call with devnet
108
+ NodeConfigsSingleton.getInstance({ network: DEVNET });
109
+ // Subsequent calls with different options should not change the config
110
+ NodeConfigsSingleton.getInstance({ network: MAINNET });
111
+ // Should still have dev environment values from first call
112
+ expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
113
+ });
114
+ });
115
+ describe('startup without exceptions', () => {
116
+ it('should load configs for mainnet without throwing when all required variables have defaults', async () => {
117
+ // Clear all config-related environment variables to test defaults
118
+ delete process.env.APP_ENV;
119
+ delete process.env.NODE_ENV;
120
+ delete process.env.BACKEND_URL;
121
+ delete process.env.BACKEND_SOLANA_ADDRESS;
122
+ delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
123
+ delete process.env.EXPLORER_URL;
124
+ delete process.env.SIGN_MESSAGE;
125
+ delete process.env.FRP_SERVER_ADDRESS;
126
+ delete process.env.FRP_SERVER_PORT;
127
+ delete process.env.FRPC_CONTAINER_IMAGE;
128
+ delete process.env.FRP_SERVER_IMAGE;
129
+ delete process.env.API_PORT;
130
+ delete process.env.MIN_DISK_SPACE;
131
+ // Attempt to load configs - should not throw
132
+ const { configs } = await import('../configs.js');
133
+ const config = configs({ network: MAINNET });
134
+ // Verify config object exists and has expected properties
135
+ expect(config).toBeDefined();
136
+ expect(config.network).toBe(MAINNET);
137
+ });
138
+ it('should load configs for devnet without throwing when all required variables have defaults', async () => {
139
+ // Clear all config-related environment variables to test defaults
140
+ delete process.env.APP_ENV;
141
+ delete process.env.NODE_ENV;
142
+ delete process.env.BACKEND_URL;
143
+ delete process.env.BACKEND_SOLANA_ADDRESS;
144
+ delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
145
+ delete process.env.EXPLORER_URL;
146
+ delete process.env.SIGN_MESSAGE;
147
+ delete process.env.FRP_SERVER_ADDRESS;
148
+ delete process.env.FRP_SERVER_PORT;
149
+ delete process.env.FRPC_CONTAINER_IMAGE;
150
+ delete process.env.FRP_SERVER_IMAGE;
151
+ delete process.env.API_PORT;
152
+ delete process.env.MIN_DISK_SPACE;
153
+ // Attempt to load configs - should not throw
154
+ const { configs } = await import('../configs.js');
155
+ const config = configs({ network: DEVNET });
156
+ // Verify config object exists and has expected properties
157
+ expect(config).toBeDefined();
158
+ expect(config.network).toBe(DEVNET);
159
+ });
160
+ });
161
+ });
@@ -0,0 +1,21 @@
1
+ export type configType = {
2
+ isNodeRun: boolean;
3
+ backendUrl: string;
4
+ backendSolanaAddress: string;
5
+ backendAuthorizationAddress: string;
6
+ explorerUrl: string;
7
+ signMessage: string;
8
+ frp: {
9
+ serverAddr: string;
10
+ serverPort: number;
11
+ containerImage: string;
12
+ };
13
+ api: {
14
+ port: number;
15
+ };
16
+ minDiskSpace: number;
17
+ network: 'devnet' | 'mainnet';
18
+ };
19
+ export declare const configs: (options?: {
20
+ [key: string]: any;
21
+ } | undefined) => configType;
@@ -0,0 +1,23 @@
1
+ import { NodeConfigsSingleton } from './NodeConfigs.js';
2
+ import { loadConfigurationValue } from '../utils/utils.js';
3
+ export const configs = (options) => {
4
+ NodeConfigsSingleton.getInstance(options);
5
+ return {
6
+ isNodeRun: options?.isNodeRun,
7
+ backendUrl: loadConfigurationValue('BACKEND_URL'),
8
+ backendSolanaAddress: loadConfigurationValue('BACKEND_SOLANA_ADDRESS'),
9
+ backendAuthorizationAddress: loadConfigurationValue('BACKEND_AUTHORIZATION_ADDRESS'),
10
+ explorerUrl: loadConfigurationValue('EXPLORER_URL'),
11
+ signMessage: loadConfigurationValue('SIGN_MESSAGE'),
12
+ frp: {
13
+ serverAddr: loadConfigurationValue('FRP_SERVER_ADDRESS'),
14
+ serverPort: parseInt(loadConfigurationValue('FRP_SERVER_PORT')),
15
+ containerImage: loadConfigurationValue('FRP_SERVER_IMAGE'),
16
+ },
17
+ api: {
18
+ port: parseInt(loadConfigurationValue('API_PORT')),
19
+ },
20
+ minDiskSpace: parseInt(loadConfigurationValue('MIN_DISK_SPACE')),
21
+ network: options?.network ?? 'mainnet',
22
+ };
23
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ import fs from 'fs';
2
+ import { DB } from '../index.js';
3
+ vi.mock('fs');
4
+ vi.mock('os', () => ({
5
+ default: {
6
+ homedir: () => 'homedir',
7
+ },
8
+ }));
9
+ vi.mock('../../../static/index.js', () => ({
10
+ pkg: {
11
+ version: '0.0.0_TEST',
12
+ },
13
+ }));
14
+ describe('DB', () => {
15
+ const mock_mkdirSync = vi.fn();
16
+ beforeEach(() => {
17
+ fs.mkdirSync.mockImplementation((args1, args2) => mock_mkdirSync(args1, args2));
18
+ });
19
+ afterEach(() => {
20
+ mock_mkdirSync.mockReset();
21
+ });
22
+ it('should create db directory and return a DB instance', () => {
23
+ const result = new DB('test');
24
+ expect(mock_mkdirSync).toHaveBeenCalledTimes(1);
25
+ expect(mock_mkdirSync).toHaveBeenCalledWith('test', { recursive: true });
26
+ expect(result.db.data).toEqual({
27
+ resources: {
28
+ images: {},
29
+ volumes: {},
30
+ },
31
+ flows: {},
32
+ info: {
33
+ version: '0.0.0_TEST',
34
+ country: '',
35
+ network: {
36
+ ip: '',
37
+ ping_ms: 0,
38
+ download_mbps: 0,
39
+ upload_mbps: 0,
40
+ },
41
+ system_environment: '',
42
+ cpu: {
43
+ model: '',
44
+ physical_cores: 0,
45
+ logical_cores: 0,
46
+ },
47
+ disk_gb: 0,
48
+ ram_mb: 0,
49
+ gpus: {
50
+ devices: [],
51
+ runtime_version: 0,
52
+ cuda_driver_version: 0,
53
+ nvml_driver_version: '0.0.0',
54
+ },
55
+ protocol: '',
56
+ },
57
+ });
58
+ });
59
+ test('when configLocation starts with ~ should replace with os.homedir', () => {
60
+ new DB('~/test');
61
+ expect(mock_mkdirSync).toHaveBeenCalledWith('homedir/test', {
62
+ recursive: true,
63
+ });
64
+ });
65
+ });
@@ -0,0 +1,50 @@
1
+ import { LowSync } from 'lowdb/lib';
2
+ import { Flow } from '@nosana/sdk';
3
+ import { CudaCheckSuccessResponse } from '../types/index.js';
4
+ export type NodeDb = {
5
+ flows: {
6
+ [key: string]: Flow;
7
+ };
8
+ resources: Resources;
9
+ info: {
10
+ version: string;
11
+ country: string;
12
+ network: {
13
+ ip: string;
14
+ ping_ms: number;
15
+ download_mbps: number;
16
+ upload_mbps: number;
17
+ };
18
+ system_environment: string;
19
+ cpu: {
20
+ model: string;
21
+ physical_cores: number;
22
+ logical_cores: number;
23
+ };
24
+ disk_gb: number;
25
+ ram_mb: number;
26
+ gpus: CudaCheckSuccessResponse;
27
+ protocol: string;
28
+ };
29
+ };
30
+ export type Resources = {
31
+ images: {
32
+ [key: string]: ResourceHistory;
33
+ };
34
+ volumes: {
35
+ [key: string]: VolumeResource;
36
+ };
37
+ };
38
+ export type ResourceHistory = {
39
+ lastUsed: Date;
40
+ usage: number;
41
+ required: boolean;
42
+ isPrivate?: boolean;
43
+ };
44
+ export type VolumeResource = ResourceHistory & {
45
+ volume: string;
46
+ };
47
+ export declare class DB {
48
+ db: LowSync<NodeDb>;
49
+ constructor(configLocation: string);
50
+ }
@@ -0,0 +1,64 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import { JSONFileSyncPreset } from 'lowdb/node';
4
+ import { pkg } from '../../static/index.js';
5
+ const initial_state = {
6
+ resources: {
7
+ images: {},
8
+ volumes: {},
9
+ },
10
+ flows: {},
11
+ info: {
12
+ version: pkg.version,
13
+ country: '',
14
+ network: {
15
+ ip: '',
16
+ ping_ms: 0,
17
+ download_mbps: 0,
18
+ upload_mbps: 0,
19
+ },
20
+ system_environment: '',
21
+ cpu: {
22
+ model: '',
23
+ physical_cores: 0,
24
+ logical_cores: 0,
25
+ },
26
+ disk_gb: 0,
27
+ ram_mb: 0,
28
+ gpus: {
29
+ devices: [],
30
+ runtime_version: 0,
31
+ cuda_driver_version: 0,
32
+ nvml_driver_version: '0.0.0',
33
+ },
34
+ protocol: '',
35
+ },
36
+ };
37
+ export class DB {
38
+ constructor(configLocation) {
39
+ if (configLocation[0] === '~') {
40
+ configLocation = configLocation.replace('~', os.homedir());
41
+ }
42
+ fs.mkdirSync(configLocation, { recursive: true });
43
+ this.db = JSONFileSyncPreset(`${configLocation}/nosana_db.json`, initial_state);
44
+ if (!this.db.data.resources) {
45
+ this.db.data.resources = initial_state.resources;
46
+ }
47
+ if (!this.db.data.flows) {
48
+ this.db.data.flows = initial_state.flows;
49
+ }
50
+ if (!this.db.data.info) {
51
+ this.db.data.info = initial_state.info;
52
+ }
53
+ if (this.db.data.info) {
54
+ this.db.data.info = { ...initial_state.info, ...this.db.data.info };
55
+ }
56
+ // @ts-ignore
57
+ if (this.db.data.info.disk) {
58
+ // @ts-ignore
59
+ delete this.db.data.info.disk; // remove old key
60
+ }
61
+ this.db.data.info.version = pkg.version;
62
+ this.db.write();
63
+ }
64
+ }
@@ -0,0 +1,3 @@
1
+ export declare class NodeAlreadyActiveError extends Error {
2
+ constructor(address: string);
3
+ }
@@ -0,0 +1,6 @@
1
+ export class NodeAlreadyActiveError extends Error {
2
+ constructor(address) {
3
+ super(`Node ${address} is already online and active; you cannot start a new one`);
4
+ this.name = 'NodeAlreadyActiveError';
5
+ }
6
+ }
@@ -0,0 +1,24 @@
1
+ export default class NodeManager {
2
+ private node;
3
+ private apiHandler;
4
+ private exiting;
5
+ inJobLoop: boolean;
6
+ constructor(options: {
7
+ [key: string]: any;
8
+ });
9
+ init(): Promise<void>;
10
+ start(marketArg?: string): Promise<void>;
11
+ stop(): Promise<void>;
12
+ /**
13
+ * clean is different from stop as it does not stop the API
14
+ * it doesn't quit a job or leave a market, it just clears instances from the handlers
15
+ */
16
+ clean(): Promise<void>;
17
+ restart(marketArg?: string): Promise<void>;
18
+ delay(sec: number): Promise<void>;
19
+ error(): Promise<void>;
20
+ /**
21
+ * Set up handling for process exit signals
22
+ */
23
+ private handleProcessExit;
24
+ }