@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,21 @@
1
+ import ApiEventEmitter from '../../api/ApiEventEmitter.js';
2
+ import { ApiListenJobDefinitionStrategy } from './strategy/ApiListenJobDefinitionStrategy.js';
3
+ import { ApiJobDefinitionStrategy } from './strategy/ApiJobDefinitionStrategy.js';
4
+ export class JobDefinitionStrategySelector {
5
+ constructor() { }
6
+ /**
7
+ * Selects the appropriate JobDefinitionStrategy based on the name.
8
+ * @param name - The name/type of the strategy ('api-listen' or 'api').
9
+ * @returns JobDefinitionStrategy
10
+ */
11
+ selectStrategy(name) {
12
+ switch (name) {
13
+ case 'api-listen':
14
+ return new ApiListenJobDefinitionStrategy(ApiEventEmitter.getInstance());
15
+ case 'api':
16
+ return new ApiJobDefinitionStrategy(); // assuming you have an ApiJobDefinitionStrategy
17
+ default:
18
+ throw new Error(`Unsupported strategy: ${name}`);
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,8 @@
1
+ import { SendJobDefinationLogicstics, JobDefinition } from '@nosana/sdk';
2
+ import { JobDefinitionStrategy } from '../JobDefinitionStrategy.js';
3
+ export declare class ApiJobDefinitionStrategy implements JobDefinitionStrategy {
4
+ private attempts;
5
+ private jobDefinition;
6
+ private retrieveJobDefinition;
7
+ load(jobId: string, args: SendJobDefinationLogicstics['args']): Promise<JobDefinition>;
8
+ }
@@ -0,0 +1,40 @@
1
+ import { sleep } from '@nosana/sdk';
2
+ import { getSDK } from '../../../../sdk/index.js';
3
+ export class ApiJobDefinitionStrategy {
4
+ constructor() {
5
+ this.attempts = 0;
6
+ this.jobDefinition = undefined;
7
+ }
8
+ async retrieveJobDefinition(endpoint, headers) {
9
+ if (this.attempts > 3)
10
+ return;
11
+ this.attempts += 1;
12
+ try {
13
+ const response = await fetch(endpoint, {
14
+ method: 'GET',
15
+ headers,
16
+ });
17
+ if (response.ok) {
18
+ this.jobDefinition = await response.json();
19
+ }
20
+ }
21
+ catch { }
22
+ if (!this.jobDefinition) {
23
+ await sleep(10);
24
+ await this.retrieveJobDefinition(endpoint, headers);
25
+ }
26
+ }
27
+ async load(jobId, args) {
28
+ if (!args.endpoint)
29
+ throw new Error('Api Job definition logistic requires an endpoint.');
30
+ const endpoint = args.endpoint.replace('%%global.job%%', jobId);
31
+ const headers = await getSDK().authorization.generateHeader(jobId, {
32
+ includeTime: true,
33
+ });
34
+ await this.retrieveJobDefinition(endpoint, headers);
35
+ if (!this.jobDefinition) {
36
+ throw new Error(`Failed to retrieve job definition from ${endpoint}.`);
37
+ }
38
+ return this.jobDefinition;
39
+ }
40
+ }
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { JobDefinitionStrategy } from '../JobDefinitionStrategy.js';
4
+ import { JobDefinition } from '@nosana/sdk';
5
+ export declare class ApiListenJobDefinitionStrategy implements JobDefinitionStrategy {
6
+ private eventEmitter;
7
+ constructor(eventEmitter: EventEmitter);
8
+ load(jobId: string): Promise<JobDefinition>;
9
+ }
@@ -0,0 +1,16 @@
1
+ export class ApiListenJobDefinitionStrategy {
2
+ constructor(eventEmitter) {
3
+ this.eventEmitter = eventEmitter;
4
+ }
5
+ async load(jobId) {
6
+ return new Promise((resolve, reject) => {
7
+ const onJobDefinition = (data) => {
8
+ if (data.id === jobId) {
9
+ resolve(data.jobDefinition);
10
+ this.eventEmitter.removeListener('job-definition', onJobDefinition);
11
+ }
12
+ };
13
+ this.eventEmitter.on('job-definition', onJobDefinition);
14
+ });
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ import { Client as SDK, JobDefinition } from '@nosana/sdk';
2
+ import { JobDefinitionStrategy } from '../JobDefinitionStrategy.js';
3
+ export declare class IpfsJobDefinitionStrategy implements JobDefinitionStrategy {
4
+ private sdk;
5
+ constructor(sdk: SDK);
6
+ load(id: string): Promise<JobDefinition>;
7
+ }
@@ -0,0 +1,13 @@
1
+ export class IpfsJobDefinitionStrategy {
2
+ constructor(sdk) {
3
+ this.sdk = sdk;
4
+ }
5
+ async load(id) {
6
+ try {
7
+ return await this.sdk.ipfs.retrieve(id);
8
+ }
9
+ catch (e) {
10
+ throw new Error(`Failed to load job from IPFS: ${e.message}`);
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ import { Job, Client as SDK, JobDefinition, FlowState } from '@nosana/sdk';
2
+ import { NodeRepository } from '../../repository/NodeRepository.js';
3
+ export declare class JobExternalUtil {
4
+ private sdk;
5
+ private repository;
6
+ constructor(sdk: SDK, repository: NodeRepository);
7
+ resolveJobDefinition(id: string, job: Job): Promise<JobDefinition | null>;
8
+ resolveResult(id: string, job: Job): Promise<FlowState>;
9
+ validate(id: string, jobDefinition: JobDefinition): Promise<boolean>;
10
+ }
@@ -0,0 +1,82 @@
1
+ import { validateJobDefinition } from '@nosana/sdk';
2
+ import { JobDefinitionStrategySelector } from './defination/JobDefinitionStrategy.js';
3
+ import { ResultReturnStrategySelector } from './result/ResultReturnStrategy.js';
4
+ import { createInitialFlow } from '../task/helpers/createInitialFlow.js';
5
+ export class JobExternalUtil {
6
+ constructor(sdk, repository) {
7
+ this.sdk = sdk;
8
+ this.repository = repository;
9
+ }
10
+ async resolveJobDefinition(id, job) {
11
+ let jobDefinition = await this.sdk.ipfs.retrieve(job.ipfsJob);
12
+ if (jobDefinition && jobDefinition.logistics?.send?.type) {
13
+ const strategySelector = new JobDefinitionStrategySelector();
14
+ const strategy = strategySelector.selectStrategy(jobDefinition.logistics.send.type);
15
+ this.repository.setflow(id, createInitialFlow(id, job.project.toString(), jobDefinition, [], 'waiting-for-job-definition', Date.now()));
16
+ try {
17
+ jobDefinition = await strategy.load(id, jobDefinition.logistics.send.args);
18
+ }
19
+ catch (error) {
20
+ jobDefinition = null;
21
+ this.repository.updateflowStateError(id, {
22
+ status: 'logistics-error',
23
+ error: error,
24
+ });
25
+ }
26
+ }
27
+ return jobDefinition;
28
+ }
29
+ async resolveResult(id, job) {
30
+ let result = this.repository.getFlowState(id);
31
+ let jobDefinition = await this.sdk.ipfs.retrieve(job.ipfsJob);
32
+ if (result) {
33
+ const orginalStatus = result.status;
34
+ if (jobDefinition.logistics?.receive?.type) {
35
+ const strategySelector = new ResultReturnStrategySelector();
36
+ const strategy = strategySelector.selectStrategy(jobDefinition.logistics.receive.type);
37
+ this.repository.updateflowState(id, {
38
+ status: 'waiting-for-result',
39
+ });
40
+ const blankResult = {
41
+ status: orginalStatus,
42
+ startTime: result.startTime,
43
+ endTime: result.endTime,
44
+ opStates: [],
45
+ errors: result.errors ?? [],
46
+ };
47
+ try {
48
+ await strategy.load(id, jobDefinition.logistics.receive.args, result, orginalStatus);
49
+ }
50
+ catch (error) {
51
+ this.repository.updateflowStateError(id, {
52
+ error: error,
53
+ });
54
+ blankResult.errors?.push(error);
55
+ }
56
+ result = blankResult;
57
+ }
58
+ return result;
59
+ }
60
+ return {
61
+ status: '',
62
+ startTime: 0,
63
+ endTime: 0,
64
+ opStates: [],
65
+ };
66
+ }
67
+ async validate(id, jobDefinition) {
68
+ const validation = validateJobDefinition(jobDefinition);
69
+ if (!validation.success) {
70
+ this.repository.updateflowState(id, {
71
+ endTime: Date.now(),
72
+ status: 'failed',
73
+ });
74
+ this.repository.updateflowStateError(id, {
75
+ status: 'validation-error',
76
+ error: validation.errors,
77
+ });
78
+ return false;
79
+ }
80
+ return true;
81
+ }
82
+ }
@@ -0,0 +1,43 @@
1
+ /// <reference types="node" />
2
+ import EventEmitter from 'events';
3
+ import { Job, Run, Client as SDK, JobDefinition } from '@nosana/sdk';
4
+ import { Provider } from '../../provider/Provider.js';
5
+ import { NodeRepository } from '../../repository/NodeRepository.js';
6
+ import { StopReason } from '../task/TaskManager.js';
7
+ export declare const jobEmitter: EventEmitter<[never]>;
8
+ export declare class JobHandler {
9
+ private sdk;
10
+ private provider;
11
+ private repository;
12
+ private id;
13
+ private job;
14
+ private runSubscriptionId;
15
+ private jobExternalUtil;
16
+ private eventEmitter;
17
+ private finishing;
18
+ accountEmitter: EventEmitter;
19
+ constructor(sdk: SDK, provider: Provider, repository: NodeRepository);
20
+ /**
21
+ * Expose a method to allow external consumers to listen for events
22
+ */
23
+ on(event: string, listener: (...args: any[]) => void): void;
24
+ /**
25
+ * Expose a method to remove listeners
26
+ */
27
+ off(event: string, listener: (...args: any[]) => void): void;
28
+ get(): Job | undefined;
29
+ private jobId;
30
+ private getJobOrThrow;
31
+ clearJob(): void;
32
+ claim(jobAddress: string): Promise<Job>;
33
+ register(jobAddress: string, run: Run, job: Job): void;
34
+ deregister(jobAddress: string): void;
35
+ nodeStop(): Promise<void>;
36
+ validate(jobDefinition: JobDefinition): Promise<boolean>;
37
+ private listenForAccountChanges;
38
+ private stopListeningForAccountChanges;
39
+ start(job: Job): Promise<boolean>;
40
+ runWithErrorHandling(): Promise<void>;
41
+ finish(run: Run, reason: StopReason): Promise<void>;
42
+ clearOldJobs(): Promise<void>;
43
+ }
@@ -0,0 +1,193 @@
1
+ import EventEmitter from 'events';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { validateJobDefinition } from '@nosana/sdk';
4
+ import { applyLoggingProxyToClass, createLoggingProxy, } from '../../monitoring/proxy/loggingProxy.js';
5
+ import { JobExternalUtil } from './jobExternalUtil.js';
6
+ import { abortControllerSelector } from '../abort/abortControllerSelector.js';
7
+ import { TaskManagerRegistry } from '../task/TaskManagerRegistry.js';
8
+ import TaskManager, { StopReasons } from '../task/TaskManager.js';
9
+ import { JobRegistry } from './JobRegistry.js';
10
+ import { createInitialFlow } from '../task/helpers/createInitialFlow.js';
11
+ export const jobEmitter = new EventEmitter();
12
+ export class JobHandler {
13
+ constructor(sdk, provider, repository) {
14
+ this.sdk = sdk;
15
+ this.provider = provider;
16
+ this.repository = repository;
17
+ this.finishing = false;
18
+ this.jobExternalUtil = new JobExternalUtil(sdk, this.repository);
19
+ applyLoggingProxyToClass(this);
20
+ this.eventEmitter = new EventEmitter();
21
+ this.accountEmitter = new EventEmitter();
22
+ }
23
+ /**
24
+ * Expose a method to allow external consumers to listen for events
25
+ */
26
+ on(event, listener) {
27
+ this.eventEmitter.on(event, listener);
28
+ }
29
+ /**
30
+ * Expose a method to remove listeners
31
+ */
32
+ off(event, listener) {
33
+ this.eventEmitter.off(event, listener);
34
+ }
35
+ get() {
36
+ return this.job;
37
+ }
38
+ jobId() {
39
+ if (!this.id) {
40
+ throw new Error('Job ID is not set');
41
+ }
42
+ return this.id;
43
+ }
44
+ getJobOrThrow() {
45
+ if (!this.job) {
46
+ throw new Error('Job is not set');
47
+ }
48
+ return this.job;
49
+ }
50
+ clearJob() {
51
+ this.job = undefined;
52
+ this.finishing = false;
53
+ }
54
+ async claim(jobAddress) {
55
+ try {
56
+ const job = await this.sdk.jobs.get(jobAddress);
57
+ this.id = jobAddress;
58
+ this.job = job;
59
+ return job;
60
+ }
61
+ catch (_) {
62
+ throw new Error('could not start job');
63
+ }
64
+ }
65
+ register(jobAddress, run, job) {
66
+ JobRegistry.getInstance().register(jobAddress, run, job);
67
+ }
68
+ deregister(jobAddress) {
69
+ JobRegistry.getInstance().remove(jobAddress);
70
+ }
71
+ async nodeStop() {
72
+ await TaskManagerRegistry.getInstance().stop();
73
+ await JobRegistry.getInstance().stop(this.sdk, this.repository);
74
+ this.stopListeningForAccountChanges();
75
+ this.clearJob();
76
+ }
77
+ async validate(jobDefinition) {
78
+ const validation = validateJobDefinition(jobDefinition);
79
+ if (!validation.success) {
80
+ this.repository.updateflowStateError(this.jobId(), {
81
+ status: 'validation-error',
82
+ error: validation.errors,
83
+ });
84
+ return false;
85
+ }
86
+ return true;
87
+ }
88
+ listenForAccountChanges() {
89
+ return new Promise(async (resolve, reject) => {
90
+ try {
91
+ await this.sdk.jobs.loadNosanaJobs();
92
+ this.runSubscriptionId = this.sdk.jobs.connection.onAccountChange(new PublicKey(this.jobId()), (accountInfo) => {
93
+ const jobAccount = this.sdk.jobs.jobs.coder.accounts.decode(this.sdk.jobs.jobs.account.jobAccount.idlAccount.name, accountInfo.data);
94
+ if (jobAccount.state >= 2) {
95
+ this.finishing = true;
96
+ this.accountEmitter.emit('stopped', jobAccount);
97
+ resolve();
98
+ return;
99
+ }
100
+ this.accountEmitter.emit('changed', jobAccount);
101
+ });
102
+ }
103
+ catch (error) {
104
+ reject(error);
105
+ }
106
+ });
107
+ }
108
+ stopListeningForAccountChanges() {
109
+ if (this.runSubscriptionId !== undefined) {
110
+ this.sdk.jobs.connection.removeProgramAccountChangeListener(this.runSubscriptionId);
111
+ this.runSubscriptionId = undefined;
112
+ }
113
+ }
114
+ async start(job) {
115
+ const flow = this.repository.getFlow(this.jobId());
116
+ if (!flow) {
117
+ const jobDefinition = await Promise.race([
118
+ this.jobExternalUtil.resolveJobDefinition(this.jobId(), job),
119
+ new Promise((resolve) => abortControllerSelector().signal.addEventListener('abort', () => resolve(null))),
120
+ ]);
121
+ if (!jobDefinition) {
122
+ return false;
123
+ }
124
+ if (!(await this.jobExternalUtil.validate(this.jobId(), jobDefinition))) {
125
+ return false;
126
+ }
127
+ try {
128
+ TaskManagerRegistry.getInstance().register(this.jobId(), createLoggingProxy(new TaskManager(this.provider, this.repository, this.jobId(), job.project.toString(), jobDefinition)));
129
+ const task = TaskManagerRegistry.getInstance().get(this.jobId());
130
+ task.bootstrap();
131
+ }
132
+ catch (error) {
133
+ this.repository.setflow(this.jobId(), createInitialFlow(this.jobId(), job.project.toString(), jobDefinition, [], 'init error', Date.now(), error));
134
+ TaskManagerRegistry.getInstance().remove(this.jobId());
135
+ return false;
136
+ }
137
+ }
138
+ else {
139
+ try {
140
+ TaskManagerRegistry.getInstance().register(this.jobId(), new TaskManager(this.provider, this.repository, this.jobId(), job.project.toString()));
141
+ const task = TaskManagerRegistry.getInstance().get(this.jobId());
142
+ task.bootstrap();
143
+ }
144
+ catch (error) {
145
+ this.repository.updateflowStateError(this.jobId(), {
146
+ status: 'init error',
147
+ error: error,
148
+ });
149
+ TaskManagerRegistry.getInstance().remove(this.jobId());
150
+ return false;
151
+ }
152
+ }
153
+ this.listenForAccountChanges();
154
+ return true;
155
+ }
156
+ async runWithErrorHandling() {
157
+ const task = TaskManagerRegistry.getInstance().get(this.jobId());
158
+ await task.start();
159
+ TaskManagerRegistry.getInstance().remove(this.jobId());
160
+ if (this.finishing) {
161
+ // We’ve already emitted 'stopped' (or are otherwise finishing).
162
+ return;
163
+ }
164
+ this.accountEmitter.emit('completed');
165
+ }
166
+ async finish(run, reason) {
167
+ try {
168
+ const jobId = this.jobId();
169
+ let result = await this.jobExternalUtil.resolveResult(jobId, this.get());
170
+ const ipfsResult = await this.sdk.ipfs.pin(result);
171
+ const bytesArray = this.sdk.ipfs.IpfsHashToByteArray(ipfsResult);
172
+ if (reason == StopReasons.STOPPED) {
173
+ await this.sdk.jobs.complete(bytesArray, jobId);
174
+ }
175
+ else {
176
+ await this.sdk.jobs.submitResult(bytesArray, run, this.getJobOrThrow().market.toString());
177
+ }
178
+ }
179
+ catch (e) {
180
+ throw new Error(`Failed to finish job: ${e}`);
181
+ }
182
+ }
183
+ async clearOldJobs() {
184
+ const date = new Date();
185
+ date.setDate(date.getDate() - 1);
186
+ for (const id in this.repository.getFlows()) {
187
+ const flow = this.repository.getFlow(id);
188
+ if (flow.state.endTime && flow.state.endTime < date.valueOf()) {
189
+ this.repository.deleteflow(id);
190
+ }
191
+ }
192
+ }
193
+ }
@@ -0,0 +1,13 @@
1
+ import { FlowState, ReceiveJobResultLogicstics } from '@nosana/sdk';
2
+ export interface ResultReturnStrategy {
3
+ load(jobId: string, args: ReceiveJobResultLogicstics['args'], results: FlowState, orginalState: string): Promise<boolean>;
4
+ }
5
+ export declare class ResultReturnStrategySelector {
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): ResultReturnStrategy;
13
+ }
@@ -0,0 +1,21 @@
1
+ import ApiEventEmitter from '../../api/ApiEventEmitter.js';
2
+ import { ApiResultReturnStrategy } from './startegy/ApiResultReturnStrategy.js';
3
+ import { ApiListenResultReturnStrategy } from './startegy/ApiListenResultReturnStrategy.js';
4
+ export class ResultReturnStrategySelector {
5
+ constructor() { }
6
+ /**
7
+ * Selects the appropriate JobDefinitionStrategy based on the name.
8
+ * @param name - The name/type of the strategy ('api-listen' or 'api').
9
+ * @returns JobDefinitionStrategy
10
+ */
11
+ selectStrategy(name) {
12
+ switch (name) {
13
+ case 'api-listen':
14
+ return new ApiListenResultReturnStrategy(ApiEventEmitter.getInstance());
15
+ case 'api':
16
+ return new ApiResultReturnStrategy();
17
+ default:
18
+ throw new Error(`Unsupported strategy: ${name}`);
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ import EventEmitter from 'events';
3
+ import { ResultReturnStrategy } from '../ResultReturnStrategy.js';
4
+ export declare class ApiListenResultReturnStrategy implements ResultReturnStrategy {
5
+ private eventEmitter;
6
+ constructor(eventEmitter: EventEmitter);
7
+ load(jobId: string): Promise<boolean>;
8
+ }
@@ -0,0 +1,22 @@
1
+ export class ApiListenResultReturnStrategy {
2
+ constructor(eventEmitter) {
3
+ this.eventEmitter = eventEmitter;
4
+ }
5
+ async load(jobId) {
6
+ return new Promise((resolve, reject) => {
7
+ const onResultReturn = (data) => {
8
+ if (data.id === jobId) {
9
+ clearTimeout(timeout); // Clear the timeout if the result is received
10
+ resolve(true);
11
+ this.eventEmitter.removeListener('job-result', onResultReturn);
12
+ }
13
+ };
14
+ // Set a timeout to reject if the result isn't received within 1 minutes
15
+ const timeout = setTimeout(() => {
16
+ this.eventEmitter.removeListener('job-result', onResultReturn);
17
+ reject('Results were not collected before the timeout.');
18
+ }, 1 * 60 * 1000); // 2 * 60 * 1000 ms = 1 minutes
19
+ this.eventEmitter.on('job-result', onResultReturn);
20
+ });
21
+ }
22
+ }
@@ -0,0 +1,8 @@
1
+ import { FlowState, ReceiveJobResultLogicstics } from '@nosana/sdk';
2
+ import { ResultReturnStrategy } from '../ResultReturnStrategy.js';
3
+ export declare class ApiResultReturnStrategy implements ResultReturnStrategy {
4
+ private attempts;
5
+ private success;
6
+ private postJobResults;
7
+ load(jobId: string, args: ReceiveJobResultLogicstics['args'], results: FlowState, orginalStatus: string): Promise<boolean>;
8
+ }
@@ -0,0 +1,42 @@
1
+ import { sleep, } from '@nosana/sdk';
2
+ import { getSDK } from '../../../../sdk/index.js';
3
+ export class ApiResultReturnStrategy {
4
+ constructor() {
5
+ this.attempts = 0;
6
+ this.success = false;
7
+ }
8
+ async postJobResults(endpoint, headers, body, orginalStatus) {
9
+ if (this.attempts > 3)
10
+ return;
11
+ this.attempts += 1;
12
+ try {
13
+ const response = await fetch(endpoint, {
14
+ method: 'POST',
15
+ headers,
16
+ body: JSON.stringify({ ...body, status: orginalStatus }),
17
+ });
18
+ if (response.ok) {
19
+ this.success = true;
20
+ }
21
+ }
22
+ catch { }
23
+ if (!this.success) {
24
+ await sleep(10);
25
+ await this.postJobResults(endpoint, headers, body, orginalStatus);
26
+ }
27
+ }
28
+ async load(jobId, args, results, orginalStatus) {
29
+ if (!args.endpoint)
30
+ throw new Error('Api result logictic requires an endpoint.');
31
+ const endpoint = args.endpoint.replace('%%global.job%%', jobId);
32
+ const headers = await getSDK().authorization.generateHeader(jobId, {
33
+ includeTime: true,
34
+ });
35
+ headers.append('Content-Type', 'application/json');
36
+ await this.postJobResults(endpoint, headers, results, orginalStatus);
37
+ if (!this.success) {
38
+ throw new Error(`Failed to post results to ${endpoint}.`);
39
+ }
40
+ return this.success;
41
+ }
42
+ }
@@ -0,0 +1,16 @@
1
+ import { Market, Client as SDK } from '@nosana/sdk';
2
+ import { PublicKey } from '@solana/web3.js';
3
+ export declare class KeyHandler {
4
+ private sdk;
5
+ private address;
6
+ private key;
7
+ private market;
8
+ constructor(sdk: SDK);
9
+ getMarket(): PublicKey | undefined;
10
+ setMarket(market?: PublicKey): void;
11
+ getAccessKey(): PublicKey | undefined;
12
+ setAccessKey(key?: PublicKey): void;
13
+ doesMarketNeedAccessKey(market: Market): boolean;
14
+ loadAccessKeyFromChain(market: Market): Promise<PublicKey | undefined>;
15
+ join(): Promise<void>;
16
+ }
@@ -0,0 +1,74 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { EMPTY_ADDRESS } from '../../jobs/index.js';
3
+ import { configs } from '../../configs/configs.js';
4
+ import { isNodeOnboarded } from '../../utils/utils.js';
5
+ export class KeyHandler {
6
+ constructor(sdk) {
7
+ this.sdk = sdk;
8
+ this.address = this.sdk.solana.provider.wallet.publicKey;
9
+ }
10
+ getMarket() {
11
+ return this.market;
12
+ }
13
+ setMarket(market) {
14
+ this.market = market;
15
+ }
16
+ getAccessKey() {
17
+ return this.key;
18
+ }
19
+ setAccessKey(key) {
20
+ this.key = key;
21
+ }
22
+ doesMarketNeedAccessKey(market) {
23
+ if (market.nodeAccessKey.toString() === EMPTY_ADDRESS.toString()) {
24
+ return false;
25
+ }
26
+ return true;
27
+ }
28
+ async loadAccessKeyFromChain(market) {
29
+ try {
30
+ this.key = await this.sdk.solana.getNftFromCollection(this.address, market.nodeAccessKey.toString());
31
+ if (!this.key) {
32
+ throw new Error('Could not find access key');
33
+ }
34
+ return this.key;
35
+ }
36
+ catch (error) {
37
+ throw new Error(`error loading Access Key from chain: ${error}`);
38
+ }
39
+ }
40
+ async join() {
41
+ const signature = (await this.sdk.solana.signMessage(configs().signMessage));
42
+ const base64Signature = Buffer.from(signature).toString('base64');
43
+ // If we don't specify a market, try to get the correct market from the backend
44
+ try {
45
+ // Check if node is onboarded and has received access key
46
+ // if not call onboard endpoint to create access key tx
47
+ const response = await fetch(`${configs().backendUrl}/nodes/${this.address}`, {
48
+ method: 'GET',
49
+ headers: {
50
+ Authorization: `${this.address}:${base64Signature}`,
51
+ 'Content-Type': 'application/json',
52
+ },
53
+ });
54
+ const result = await response.json();
55
+ if (!result || (result && result.name === 'Error')) {
56
+ throw new Error(result.message);
57
+ }
58
+ if (!isNodeOnboarded(result.status)) {
59
+ throw new Error('Node not onboarded yet');
60
+ }
61
+ this.key = new PublicKey(result.accessKeyMint);
62
+ this.market = new PublicKey(result.marketAddress);
63
+ }
64
+ catch (e) {
65
+ if (e instanceof Error && e.message.includes('Node not onboarded yet')) {
66
+ throw new Error('Node is still on the waitlist, wait until you are accepted.');
67
+ }
68
+ else if (e instanceof Error && e.message.includes('Node not found')) {
69
+ throw new Error('Node is not registred yet. To register run the `node join` command.');
70
+ }
71
+ throw e;
72
+ }
73
+ }
74
+ }