@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,5 @@
1
+ import { Response } from 'express';
2
+ import { NodeAPIRequest } from '../../types/index.js';
3
+ export declare function postServiceStopRoute(req: NodeAPIRequest<{
4
+ jobId: string;
5
+ }>, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
@@ -0,0 +1,13 @@
1
+ export async function postServiceStopRoute(req, res) {
2
+ const jobId = req.params.jobId;
3
+ if (!jobId) {
4
+ return res.status(400).send('jobId path parameter is required');
5
+ }
6
+ try {
7
+ req.eventEmitter.emit('stop-job', jobId);
8
+ res.status(200).send('job stopped successfully');
9
+ }
10
+ catch (error) {
11
+ res.status(500).send('Error occured while stopping job');
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ export * from './log.js';
2
+ export * from './status.js';
@@ -0,0 +1,2 @@
1
+ export * from './log.js';
2
+ export * from './status.js';
@@ -0,0 +1,14 @@
1
+ import WebSocket from 'ws';
2
+ /**
3
+ * this is for log streaming, this is going to be used by the basic job poster
4
+ * just to show that clients logs, both from the node and the container
5
+ */
6
+ export declare function wssLogRoute(ws: WebSocket, _: string, { jobAddress }: {
7
+ jobAddress: string;
8
+ }): Promise<void>;
9
+ export declare function wssTaskManagerLogRoute(ws: WebSocket, _: string, { jobAddress, group, opId, type, }: {
10
+ jobAddress: string;
11
+ group?: string;
12
+ opId?: string;
13
+ type?: string;
14
+ }): void;
@@ -0,0 +1,34 @@
1
+ import { logStreaming } from '../../../../monitoring/streaming/LogStreamer.js';
2
+ import { getSDK } from '../../../../sdk/index.js';
3
+ import { TaskManagerRegistry } from '../../../task/TaskManagerRegistry.js';
4
+ /**
5
+ * this is for log streaming, this is going to be used by the basic job poster
6
+ * just to show that clients logs, both from the node and the container
7
+ */
8
+ export async function wssLogRoute(ws, _, { jobAddress }) {
9
+ const sdk = getSDK();
10
+ const walletAddress = sdk.solana.wallet.toString();
11
+ logStreaming(walletAddress).subscribe(ws, jobAddress);
12
+ }
13
+ export function wssTaskManagerLogRoute(ws, _, { jobAddress, group, opId, type, }) {
14
+ const task = TaskManagerRegistry.getInstance().get(jobAddress);
15
+ if (!task)
16
+ return ws.close(1008, 'Invalid job address');
17
+ task.subscribe(ws, (log) => {
18
+ return ((!group || log.group === group) &&
19
+ (!opId || log.opId === opId) &&
20
+ (!type || log.type === type));
21
+ });
22
+ // Send historical logs first (optional)
23
+ const logs = opId
24
+ ? task.getLogsByOp(opId)
25
+ : group
26
+ ? task.getLogsByGroup(group)
27
+ : task.getAllLogs();
28
+ for (const log of logs) {
29
+ try {
30
+ ws.send(JSON.stringify({ path: 'flog', data: JSON.stringify(log) }));
31
+ }
32
+ catch { }
33
+ }
34
+ }
@@ -0,0 +1,8 @@
1
+ import WebSocket from 'ws';
2
+ /**
3
+ * this is to handle state streaming, this would be used for external
4
+ * sevices to follow a job or node state
5
+ */
6
+ export declare function wssStatusRoute(ws: WebSocket, _: string, { jobAddress }: {
7
+ jobAddress: string;
8
+ }): Promise<void>;
@@ -0,0 +1,11 @@
1
+ import { getSDK } from '../../../../sdk/index.js';
2
+ import { stateStreaming } from '../../../../monitoring/streaming/StateStreamer.js';
3
+ /**
4
+ * this is to handle state streaming, this would be used for external
5
+ * sevices to follow a job or node state
6
+ */
7
+ export async function wssStatusRoute(ws, _, { jobAddress }) {
8
+ const sdk = getSDK();
9
+ const walletAddress = sdk.solana.wallet.publicKey;
10
+ stateStreaming(walletAddress.toString()).subscribe(ws, jobAddress);
11
+ }
@@ -0,0 +1,12 @@
1
+ import { Request } from 'express';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { NodeRepository } from '../../../repository/NodeRepository.js';
4
+ import ApiEventEmitter from '../ApiEventEmitter.js';
5
+ import { Provider } from '../../../provider/Provider.js';
6
+ export type NodeAPIRequest<Params = {}, Body = {}> = Request<Params, {}, Body> & {
7
+ address?: PublicKey;
8
+ eventEmitter?: ApiEventEmitter;
9
+ repository?: NodeRepository;
10
+ provider?: Provider;
11
+ signature?: string;
12
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Client as SDK } from '@nosana/sdk';
2
+ import { TokenAmount } from '@solana/web3.js';
3
+ export declare class BalanceHandler {
4
+ private sdk;
5
+ private address;
6
+ private balances;
7
+ constructor(sdk: SDK);
8
+ balance(): Promise<boolean>;
9
+ private waitForSufficentSol;
10
+ check(wait?: boolean): Promise<void>;
11
+ getNosBalance(): TokenAmount | undefined;
12
+ }
@@ -0,0 +1,52 @@
1
+ import ora from 'ora';
2
+ import chalk from 'chalk';
3
+ const MINIMUM_SOL_BALANCE = 0.005;
4
+ const SOLANA_DECIMAL = 1e9;
5
+ export class BalanceHandler {
6
+ constructor(sdk) {
7
+ this.sdk = sdk;
8
+ this.balances = {
9
+ sol: 0,
10
+ nos: undefined,
11
+ };
12
+ this.address = this.sdk.solana.provider.wallet.publicKey;
13
+ }
14
+ async balance() {
15
+ try {
16
+ this.balances.sol = await this.sdk.solana.getSolBalance(this.address);
17
+ this.balances.nos = await this.sdk.solana.getNosBalance(this.address);
18
+ return true;
19
+ }
20
+ catch (error) {
21
+ return false;
22
+ }
23
+ }
24
+ async waitForSufficentSol() {
25
+ let balancePollingInterval;
26
+ return new Promise((resolve) => {
27
+ balancePollingInterval = setInterval(async () => {
28
+ if (await this.balance()) {
29
+ const solBalance = this.balances.sol / SOLANA_DECIMAL;
30
+ if (solBalance > MINIMUM_SOL_BALANCE) {
31
+ resolve(true);
32
+ }
33
+ }
34
+ }, 30000);
35
+ }).finally(() => clearInterval(balancePollingInterval));
36
+ }
37
+ async check(wait = false) {
38
+ const solBalance = this.balances.sol / SOLANA_DECIMAL;
39
+ if (solBalance < MINIMUM_SOL_BALANCE) {
40
+ const insufficentSolMessage = `SOL balance ${solBalance} should be 0.005 or higher. Send some SOL to your node address ${this.address} `;
41
+ if (!wait) {
42
+ throw new Error(insufficentSolMessage);
43
+ }
44
+ const spinner = ora(chalk.yellow(insufficentSolMessage)).start();
45
+ await this.waitForSufficentSol();
46
+ spinner.succeed();
47
+ }
48
+ }
49
+ getNosBalance() {
50
+ return this.balances.nos;
51
+ }
52
+ }
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import EventEmitter from 'events';
4
+ import { Client as SDK, Run, Job } from '@nosana/sdk';
5
+ export declare class ExpiryHandler {
6
+ private sdk;
7
+ private jobAddress;
8
+ expiryEndTime: number;
9
+ expiryTimer: NodeJS.Timeout | null;
10
+ warningTimer: NodeJS.Timeout | null;
11
+ private onExpireCallback;
12
+ private extendSubscriptionId?;
13
+ private resolving;
14
+ constructor(sdk: SDK);
15
+ stopExtendMonitoring(): void;
16
+ init<T>(run: Run, job: Job, jobstring: string, accountEmitter: EventEmitter, onExpireCallback: () => Promise<T>): number;
17
+ start(): void;
18
+ stop(): void;
19
+ private startOrResetTimer;
20
+ extendExpiryTime(additionalTimeMs: number): void;
21
+ expired(run: Run, job: Job): boolean;
22
+ waitUntilExpired(): Promise<void>;
23
+ private shortenedExpiry;
24
+ }
@@ -0,0 +1,99 @@
1
+ import BN from 'bn.js';
2
+ import ApiEventEmitter from '../api/ApiEventEmitter.js';
3
+ export class ExpiryHandler {
4
+ constructor(sdk) {
5
+ this.sdk = sdk;
6
+ this.expiryEndTime = 0;
7
+ this.expiryTimer = null;
8
+ this.warningTimer = null;
9
+ this.onExpireCallback = null;
10
+ this.resolving = false;
11
+ ApiEventEmitter.getInstance().on('stop-job', (id) => {
12
+ if (this.jobAddress === id) {
13
+ this.shortenedExpiry();
14
+ }
15
+ });
16
+ }
17
+ stopExtendMonitoring() {
18
+ if (this.extendSubscriptionId !== undefined) {
19
+ this.sdk.jobs.connection.removeProgramAccountChangeListener(this.extendSubscriptionId);
20
+ this.extendSubscriptionId = undefined;
21
+ }
22
+ }
23
+ init(run, job, jobstring, accountEmitter, onExpireCallback) {
24
+ this.resolving = false;
25
+ this.jobAddress = jobstring;
26
+ this.expiryEndTime = new BN(run.account.time)
27
+ .add(new BN(job.timeout))
28
+ .mul(new BN(1000))
29
+ .toNumber();
30
+ accountEmitter.on('changed', ({ timeout }) => {
31
+ const newExpiryTime = new BN(run.account.time)
32
+ .add(new BN(timeout))
33
+ .mul(new BN(1000))
34
+ .toNumber();
35
+ if (newExpiryTime != this.expiryEndTime) {
36
+ this.extendExpiryTime(newExpiryTime - this.expiryEndTime);
37
+ }
38
+ });
39
+ this.onExpireCallback = onExpireCallback;
40
+ this.start();
41
+ return this.expiryEndTime;
42
+ }
43
+ start() {
44
+ this.startOrResetTimer();
45
+ }
46
+ stop() {
47
+ if (this.expiryTimer)
48
+ clearTimeout(this.expiryTimer);
49
+ if (this.warningTimer)
50
+ clearTimeout(this.warningTimer);
51
+ this.expiryTimer = null;
52
+ this.warningTimer = null;
53
+ this.jobAddress = undefined;
54
+ this.stopExtendMonitoring();
55
+ }
56
+ startOrResetTimer() {
57
+ if (this.expiryTimer)
58
+ clearTimeout(this.expiryTimer);
59
+ if (this.warningTimer)
60
+ clearTimeout(this.warningTimer);
61
+ this.expiryTimer = null;
62
+ this.warningTimer = null;
63
+ const remainingTime = this.expiryEndTime - Date.now();
64
+ const warningTime = remainingTime - 2 * 60 * 1000; // 2 minutes before expiry
65
+ // Set up the warning timer
66
+ if (warningTime > 0) {
67
+ this.warningTimer = setTimeout(() => { }, warningTime);
68
+ }
69
+ // Set up the expiry timer
70
+ this.expiryTimer = setTimeout(async () => {
71
+ if (!this.resolving) {
72
+ this.resolving = true;
73
+ this.stop();
74
+ await this.onExpireCallback?.(); // Trigger expiration callback
75
+ }
76
+ }, remainingTime);
77
+ }
78
+ extendExpiryTime(additionalTimeMs) {
79
+ this.expiryEndTime += additionalTimeMs;
80
+ this.startOrResetTimer();
81
+ }
82
+ expired(run, job) {
83
+ const now = Date.now() / 1000;
84
+ const expirationTime = new BN(run.account.time)
85
+ .add(new BN(job.timeout))
86
+ .toNumber();
87
+ return expirationTime < now;
88
+ }
89
+ async waitUntilExpired() {
90
+ return new Promise((resolve) => {
91
+ this.stop();
92
+ resolve();
93
+ });
94
+ }
95
+ shortenedExpiry() {
96
+ this.expiryEndTime = Date.now();
97
+ this.startOrResetTimer(); // Restart timer with updated expiry time
98
+ }
99
+ }
@@ -0,0 +1,19 @@
1
+ import { Client as SDK } from '@nosana/sdk';
2
+ import { NodeRepository } from '../../repository/NodeRepository.js';
3
+ export interface NodeData {
4
+ market?: string;
5
+ status: string;
6
+ }
7
+ export declare class GridHandler {
8
+ private sdk;
9
+ private repository;
10
+ private address;
11
+ constructor(sdk: SDK, repository: NodeRepository);
12
+ private getAuthSignature;
13
+ getNodeStatus(): Promise<NodeData>;
14
+ recommend(): Promise<any>;
15
+ private changeMarket;
16
+ private signAndSendTransaction;
17
+ private confirmTransaction;
18
+ private syncNodeAfterMint;
19
+ }
@@ -0,0 +1,168 @@
1
+ import { applyLoggingProxyToClass } from '../../monitoring/proxy/loggingProxy.js';
2
+ import { VersionedTransaction, } from '@solana/web3.js';
3
+ import { getRawTransaction } from '../../sdk/index.js';
4
+ import { sleep } from '../../utils/utils.js';
5
+ import { configs } from '../../configs/configs.js';
6
+ export class GridHandler {
7
+ constructor(sdk, repository) {
8
+ this.sdk = sdk;
9
+ this.repository = repository;
10
+ this.address = this.sdk.solana.provider.wallet.publicKey;
11
+ applyLoggingProxyToClass(this);
12
+ }
13
+ async getAuthSignature() {
14
+ const signature = (await this.sdk.solana.signMessage(configs().signMessage));
15
+ return Buffer.from(signature).toString('base64');
16
+ }
17
+ async getNodeStatus() {
18
+ try {
19
+ const response = await fetch(`${configs().backendUrl}/nodes/${this.address}`, {
20
+ method: 'GET',
21
+ headers: {
22
+ Authorization: `${this.address}:${await this.getAuthSignature()}`,
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ });
26
+ const data = await response.json();
27
+ if (!data || (data.name === 'Error' && data.message))
28
+ throw new Error(data.message);
29
+ return {
30
+ status: data.status,
31
+ market: data.marketAddress,
32
+ };
33
+ }
34
+ catch (error) {
35
+ if (error instanceof Error &&
36
+ error.message.includes('Node not onboarded yet')) {
37
+ throw new Error('Node is still on the waitlist, wait until you are accepted.');
38
+ }
39
+ else if (error instanceof Error &&
40
+ !error.message.includes('Node not found')) {
41
+ throw error;
42
+ }
43
+ return {
44
+ status: 'not-found',
45
+ market: undefined,
46
+ };
47
+ }
48
+ }
49
+ async recommend() {
50
+ const gpus = this.repository.getNodeInfo().gpus;
51
+ const signature = await this.getAuthSignature();
52
+ try {
53
+ const response = await fetch(`${configs().backendUrl}/nodes/${this.address}/check-market`, {
54
+ method: 'POST',
55
+ headers: {
56
+ Authorization: `${this.address}:${signature}`,
57
+ 'Content-Type': 'application/json',
58
+ },
59
+ body: JSON.stringify({ gpus: JSON.stringify(gpus) }),
60
+ });
61
+ let data = await response.json();
62
+ if (!data) {
63
+ throw new Error('Something went wrong with recommending the market, please try again.');
64
+ }
65
+ if (data.needsChangeMarket) {
66
+ data = await this.changeMarket();
67
+ return data.newMarket;
68
+ }
69
+ if (data.address) {
70
+ return data.address;
71
+ }
72
+ if (data.message) {
73
+ throw new Error(data.message);
74
+ }
75
+ }
76
+ catch (error) {
77
+ throw error;
78
+ }
79
+ }
80
+ async changeMarket() {
81
+ try {
82
+ const response = await fetch(`${configs().backendUrl}/nodes/change-market`, {
83
+ method: 'POST',
84
+ headers: {
85
+ Authorization: `${this.address}:${await this.getAuthSignature()}`,
86
+ 'Content-Type': 'application/json',
87
+ },
88
+ body: JSON.stringify({ address: this.address }),
89
+ });
90
+ const data = await response.json();
91
+ if (!data || data.name === 'Error')
92
+ throw new Error(data.message);
93
+ // Incase of blockheight exceeded error, retry 3 times
94
+ for (let i = 0; i < 3; i++) {
95
+ try {
96
+ const txnSignature = await this.signAndSendTransaction(data.tx);
97
+ await this.confirmTransaction(txnSignature);
98
+ break;
99
+ }
100
+ catch (error) {
101
+ if (i === 2 ||
102
+ !error?.message.includes('TransactionExpiredBlockheightExceededError')) {
103
+ throw error;
104
+ }
105
+ }
106
+ }
107
+ // TODO: verify tx result with code below
108
+ // const result = await this.sdk.solana.connection?.getTransaction(
109
+ // txnSignature as string,
110
+ // { maxSupportedTransactionVersion: 0 },
111
+ // );
112
+ // // @ts-ignore
113
+ // if (result?.meta?.status.Err) {
114
+ // // @ts-ignore
115
+ // throw new Error(JSON.stringify(result?.meta?.status.Err));
116
+ // }
117
+ await sleep(30);
118
+ await this.syncNodeAfterMint();
119
+ return data;
120
+ }
121
+ catch (error) {
122
+ throw new Error('Something went wrong with minting your access key, please try again. ' +
123
+ error);
124
+ }
125
+ }
126
+ async signAndSendTransaction(txData) {
127
+ const feePayer = (this.sdk.solana.provider?.wallet).payer;
128
+ const recoveredTransaction = await getRawTransaction(Uint8Array.from(Object.values(txData)));
129
+ if (recoveredTransaction instanceof VersionedTransaction) {
130
+ recoveredTransaction.sign([feePayer]);
131
+ }
132
+ else {
133
+ recoveredTransaction.partialSign(feePayer);
134
+ }
135
+ const txnSignature = await this.sdk.solana.connection?.sendRawTransaction(recoveredTransaction.serialize());
136
+ return txnSignature;
137
+ }
138
+ async confirmTransaction(txnSignature) {
139
+ const latestBlockHash = await this.sdk.solana.connection?.getLatestBlockhash();
140
+ if (latestBlockHash && txnSignature) {
141
+ const confirmStrategy = {
142
+ blockhash: latestBlockHash.blockhash,
143
+ lastValidBlockHeight: latestBlockHash.lastValidBlockHeight,
144
+ signature: txnSignature,
145
+ };
146
+ await this.sdk.solana.connection?.confirmTransaction(confirmStrategy);
147
+ }
148
+ else {
149
+ throw new Error('Could not confirm minting transaction');
150
+ }
151
+ }
152
+ async syncNodeAfterMint() {
153
+ try {
154
+ const response = await fetch(`${configs().backendUrl}/nodes/sync-node`, {
155
+ method: 'POST',
156
+ headers: {
157
+ Authorization: `${this.address}:${await this.getAuthSignature()}`,
158
+ 'Content-Type': 'application/json',
159
+ },
160
+ body: JSON.stringify({ address: this.address }),
161
+ });
162
+ return response.json();
163
+ }
164
+ catch (error) {
165
+ throw error;
166
+ }
167
+ }
168
+ }
@@ -0,0 +1,16 @@
1
+ import { Market, Client as SDK } from '@nosana/sdk';
2
+ import { MarketHandler } from '../market/marketHandler.js';
3
+ import { KeyHandler } from '../key/keyHandler.js';
4
+ import { ContainerOrchestrationInterface } from '../../provider/containerOrchestration/interface.js';
5
+ export declare class HealthHandler {
6
+ private sdk;
7
+ private containerOrchestration;
8
+ private marketHandler;
9
+ private keyHandler;
10
+ private address;
11
+ private balanceHandler;
12
+ private stakeHandler;
13
+ constructor(sdk: SDK, containerOrchestration: ContainerOrchestrationInterface, marketHandler: MarketHandler, keyHandler: KeyHandler);
14
+ run(market: string): Promise<boolean>;
15
+ stake(market: Market): Promise<boolean>;
16
+ }
@@ -0,0 +1,69 @@
1
+ import { BalanceHandler } from '../balance/balanceHandler.js';
2
+ import { applyLoggingProxyToClass } from '../../monitoring/proxy/loggingProxy.js';
3
+ import { StakeHandler } from '../stake/StakeHandler.js';
4
+ import { askYesNoQuestion } from '../../utils/utils.js';
5
+ export class HealthHandler {
6
+ constructor(sdk, containerOrchestration, marketHandler, keyHandler) {
7
+ this.sdk = sdk;
8
+ this.containerOrchestration = containerOrchestration;
9
+ this.marketHandler = marketHandler;
10
+ this.keyHandler = keyHandler;
11
+ this.address = this.sdk.solana.provider.wallet.publicKey;
12
+ this.balanceHandler = new BalanceHandler(this.sdk);
13
+ this.stakeHandler = new StakeHandler(this.sdk);
14
+ applyLoggingProxyToClass(this);
15
+ }
16
+ async run(market) {
17
+ /**
18
+ * market health check,
19
+ *
20
+ * check if the market supplied is valid and can be joined
21
+ */
22
+ const marketAccount = await this.marketHandler.check(market);
23
+ /**
24
+ * balances (SOL) health check
25
+ *
26
+ * check if the balance can be gotten and check that the balance is
27
+ * sufficient, if the balance can't be gotten skip the check
28
+ */
29
+ if (await this.balanceHandler.balance()) {
30
+ await this.balanceHandler.check();
31
+ }
32
+ /**
33
+ * staking healtcheck, check if market can be joined or staking is needed
34
+ */
35
+ await this.stake(marketAccount);
36
+ /**
37
+ * health check on market access key
38
+ */
39
+ if (this.keyHandler.doesMarketNeedAccessKey(marketAccount)) {
40
+ await this.keyHandler.loadAccessKeyFromChain(marketAccount);
41
+ }
42
+ /**
43
+ * health check for provider (docker or podman) health
44
+ */
45
+ await this.containerOrchestration.check();
46
+ return true;
47
+ }
48
+ async stake(market) {
49
+ /**
50
+ * create/skip creating the ATA account for the node
51
+ * if the node already has this will be skipping
52
+ */
53
+ await this.stakeHandler.createAta();
54
+ if (!(await this.stakeHandler.nodeHasStakingAccount())) {
55
+ await this.stakeHandler.createStakingAccount();
56
+ }
57
+ let stake = this.stakeHandler.getStakeAccount();
58
+ if (!this.stakeHandler.canProceedWithoutStake(market, this.balanceHandler.getNosBalance())) {
59
+ console.log(this.stakeHandler.getStakeActionInfotext(market));
60
+ await askYesNoQuestion(this.stakeHandler.getStakeActionQuerytext(market), async () => {
61
+ await this.stakeHandler.topUpStakingAccount(market);
62
+ stake = this.stakeHandler.getStakeAccount();
63
+ }, () => {
64
+ this.stakeHandler.failTopUpStakingAccount();
65
+ });
66
+ }
67
+ return true;
68
+ }
69
+ }
@@ -0,0 +1,14 @@
1
+ import { Job, Run, Client as SDK } from '@nosana/sdk';
2
+ import { NodeRepository } from '../../repository/NodeRepository.js';
3
+ export declare class JobRegistry {
4
+ private static instance;
5
+ private registry;
6
+ private runs;
7
+ private constructor();
8
+ static getInstance(): JobRegistry;
9
+ register(jobId: string, run: Run, job: Job): void;
10
+ get(jobId: string): Job | undefined;
11
+ remove(jobId: string): void;
12
+ has(jobId: string): boolean;
13
+ stop(sdk: SDK, repository: NodeRepository): Promise<void>;
14
+ }
@@ -0,0 +1,48 @@
1
+ import { JobExternalUtil } from './jobExternalUtil.js';
2
+ export class JobRegistry {
3
+ constructor() {
4
+ this.registry = new Map();
5
+ this.runs = new Map();
6
+ }
7
+ static getInstance() {
8
+ if (!JobRegistry.instance) {
9
+ JobRegistry.instance = new JobRegistry();
10
+ }
11
+ return JobRegistry.instance;
12
+ }
13
+ register(jobId, run, job) {
14
+ this.registry.set(jobId, job);
15
+ this.runs.set(jobId, run);
16
+ }
17
+ get(jobId) {
18
+ return this.registry.get(jobId);
19
+ }
20
+ remove(jobId) {
21
+ this.registry.delete(jobId);
22
+ this.runs.delete(jobId);
23
+ }
24
+ has(jobId) {
25
+ return this.registry.has(jobId);
26
+ }
27
+ async stop(sdk, repository) {
28
+ const stopPromises = [];
29
+ for (const [jobId, job] of this.registry.entries()) {
30
+ const promise = (async () => {
31
+ const jobExternalUtil = new JobExternalUtil(sdk, repository);
32
+ const result = await jobExternalUtil.resolveResult(jobId, job);
33
+ const ipfsResult = await sdk.ipfs.pin(result);
34
+ const bytesArray = sdk.ipfs.IpfsHashToByteArray(ipfsResult);
35
+ await sdk.jobs.submitResult(bytesArray, this.runs.get(jobId), job.market);
36
+ this.runs.delete(jobId);
37
+ this.registry.delete(jobId);
38
+ })();
39
+ stopPromises.push(promise);
40
+ }
41
+ try {
42
+ await Promise.all(stopPromises);
43
+ }
44
+ catch (error) {
45
+ console.log(error);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,13 @@
1
+ import { SendJobDefinationLogicstics, JobDefinition } from '@nosana/sdk';
2
+ export interface JobDefinitionStrategy {
3
+ load(jobId: string, args: SendJobDefinationLogicstics['args']): Promise<JobDefinition>;
4
+ }
5
+ export declare class JobDefinitionStrategySelector {
6
+ constructor();
7
+ /**
8
+ * Selects the appropriate JobDefinitionStrategy based on the name.
9
+ * @param name - The name/type of the strategy ('api-listen' or 'api').
10
+ * @returns JobDefinitionStrategy
11
+ */
12
+ selectStrategy(name: string): JobDefinitionStrategy;
13
+ }