@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.
- package/README.md +92 -0
- package/dist/.env +7 -0
- package/dist/.env.dev +5 -0
- package/dist/.env.prd +4 -0
- package/dist/NodeManager/client/index.d.ts +4 -0
- package/dist/NodeManager/client/index.js +14 -0
- package/dist/NodeManager/configs/NodeConfigs.d.ts +14 -0
- package/dist/NodeManager/configs/NodeConfigs.js +32 -0
- package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.d.ts +1 -0
- package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.js +161 -0
- package/dist/NodeManager/configs/configs.d.ts +21 -0
- package/dist/NodeManager/configs/configs.js +23 -0
- package/dist/NodeManager/db/__tests__/index.spec.d.ts +1 -0
- package/dist/NodeManager/db/__tests__/index.spec.js +65 -0
- package/dist/NodeManager/db/index.d.ts +50 -0
- package/dist/NodeManager/db/index.js +64 -0
- package/dist/NodeManager/errors/NodeAlreadyActiveError.d.ts +3 -0
- package/dist/NodeManager/errors/NodeAlreadyActiveError.js +6 -0
- package/dist/NodeManager/index.d.ts +24 -0
- package/dist/NodeManager/index.js +317 -0
- package/dist/NodeManager/jobs/index.d.ts +6 -0
- package/dist/NodeManager/jobs/index.js +45 -0
- package/dist/NodeManager/monitoring/LogMonitoringRegistry.d.ts +9 -0
- package/dist/NodeManager/monitoring/LogMonitoringRegistry.js +23 -0
- package/dist/NodeManager/monitoring/log/NodeLog.d.ts +56 -0
- package/dist/NodeManager/monitoring/log/NodeLog.js +1357 -0
- package/dist/NodeManager/monitoring/log/console/ConsoleLogger.d.ts +20 -0
- package/dist/NodeManager/monitoring/log/console/ConsoleLogger.js +290 -0
- package/dist/NodeManager/monitoring/ping/PingHandler.d.ts +13 -0
- package/dist/NodeManager/monitoring/ping/PingHandler.js +68 -0
- package/dist/NodeManager/monitoring/proxy/loggingProxy.d.ts +15 -0
- package/dist/NodeManager/monitoring/proxy/loggingProxy.js +145 -0
- package/dist/NodeManager/monitoring/state/NodeState.d.ts +29 -0
- package/dist/NodeManager/monitoring/state/NodeState.js +680 -0
- package/dist/NodeManager/monitoring/state/classifyState.d.ts +14 -0
- package/dist/NodeManager/monitoring/state/classifyState.js +57 -0
- package/dist/NodeManager/monitoring/streaming/LogStreamer.d.ts +14 -0
- package/dist/NodeManager/monitoring/streaming/LogStreamer.js +58 -0
- package/dist/NodeManager/monitoring/streaming/StateStreamer.d.ts +15 -0
- package/dist/NodeManager/monitoring/streaming/StateStreamer.js +59 -0
- package/dist/NodeManager/node/Node.d.ts +44 -0
- package/dist/NodeManager/node/Node.js +321 -0
- package/dist/NodeManager/node/abort/NodeAbortController.d.ts +6 -0
- package/dist/NodeManager/node/abort/NodeAbortController.js +12 -0
- package/dist/NodeManager/node/abort/abortControllerSelector.d.ts +3 -0
- package/dist/NodeManager/node/abort/abortControllerSelector.js +13 -0
- package/dist/NodeManager/node/api/ApiEventEmitter.d.ts +8 -0
- package/dist/NodeManager/node/api/ApiEventEmitter.js +13 -0
- package/dist/NodeManager/node/api/ApiHandler.d.ts +28 -0
- package/dist/NodeManager/node/api/ApiHandler.js +193 -0
- package/dist/NodeManager/node/api/eventsource/index.d.ts +6 -0
- package/dist/NodeManager/node/api/eventsource/index.js +35 -0
- package/dist/NodeManager/node/api/middlewares/index.d.ts +5 -0
- package/dist/NodeManager/node/api/middlewares/index.js +7 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.d.ts +3 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.js +20 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.d.ts +5 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.js +28 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.js +30 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.js +20 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.js +33 -0
- package/dist/NodeManager/node/api/routes/get/index.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/get/index.js +6 -0
- package/dist/NodeManager/node/api/routes/get/job-definition.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-definition.js +16 -0
- package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.d.ts +17 -0
- package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.js +15 -0
- package/dist/NodeManager/node/api/routes/get/job-info/job-info.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-info/job-info.js +18 -0
- package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.js +42 -0
- package/dist/NodeManager/node/api/routes/get/job-operation-info.d.ts +28 -0
- package/dist/NodeManager/node/api/routes/get/job-operation-info.js +53 -0
- package/dist/NodeManager/node/api/routes/get/job-results.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-results.js +15 -0
- package/dist/NodeManager/node/api/routes/get/node-info.d.ts +3 -0
- package/dist/NodeManager/node/api/routes/get/node-info.js +23 -0
- package/dist/NodeManager/node/api/routes/get/service-url.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/service-url.js +27 -0
- package/dist/NodeManager/node/api/routes/index.d.ts +3 -0
- package/dist/NodeManager/node/api/routes/index.js +3 -0
- package/dist/NodeManager/node/api/routes/post/index.d.ts +4 -0
- package/dist/NodeManager/node/api/routes/post/index.js +4 -0
- package/dist/NodeManager/node/api/routes/post/job-definition.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/post/job-definition.js +15 -0
- package/dist/NodeManager/node/api/routes/post/job-operation-actions.d.ts +24 -0
- package/dist/NodeManager/node/api/routes/post/job-operation-actions.js +79 -0
- package/dist/NodeManager/node/api/routes/post/node-validation.d.ts +4 -0
- package/dist/NodeManager/node/api/routes/post/node-validation.js +1783 -0
- package/dist/NodeManager/node/api/routes/post/service-stop.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/post/service-stop.js +13 -0
- package/dist/NodeManager/node/api/routes/wss/index.d.ts +2 -0
- package/dist/NodeManager/node/api/routes/wss/index.js +2 -0
- package/dist/NodeManager/node/api/routes/wss/log.d.ts +14 -0
- package/dist/NodeManager/node/api/routes/wss/log.js +34 -0
- package/dist/NodeManager/node/api/routes/wss/status.d.ts +8 -0
- package/dist/NodeManager/node/api/routes/wss/status.js +11 -0
- package/dist/NodeManager/node/api/types/index.d.ts +12 -0
- package/dist/NodeManager/node/api/types/index.js +1 -0
- package/dist/NodeManager/node/balance/balanceHandler.d.ts +12 -0
- package/dist/NodeManager/node/balance/balanceHandler.js +52 -0
- package/dist/NodeManager/node/expiry/expiryHandler.d.ts +24 -0
- package/dist/NodeManager/node/expiry/expiryHandler.js +99 -0
- package/dist/NodeManager/node/grid/gridHandler.d.ts +19 -0
- package/dist/NodeManager/node/grid/gridHandler.js +168 -0
- package/dist/NodeManager/node/health/healthHandler.d.ts +16 -0
- package/dist/NodeManager/node/health/healthHandler.js +69 -0
- package/dist/NodeManager/node/job/JobRegistry.d.ts +14 -0
- package/dist/NodeManager/node/job/JobRegistry.js +48 -0
- package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.d.ts +13 -0
- package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.js +21 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.js +40 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.d.ts +9 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.js +16 -0
- package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.d.ts +7 -0
- package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.js +13 -0
- package/dist/NodeManager/node/job/jobExternalUtil.d.ts +10 -0
- package/dist/NodeManager/node/job/jobExternalUtil.js +82 -0
- package/dist/NodeManager/node/job/jobHandler.d.ts +43 -0
- package/dist/NodeManager/node/job/jobHandler.js +193 -0
- package/dist/NodeManager/node/job/result/ResultReturnStrategy.d.ts +13 -0
- package/dist/NodeManager/node/job/result/ResultReturnStrategy.js +21 -0
- package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.js +22 -0
- package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.js +42 -0
- package/dist/NodeManager/node/key/keyHandler.d.ts +16 -0
- package/dist/NodeManager/node/key/keyHandler.js +74 -0
- package/dist/NodeManager/node/market/marketHandler.d.ts +30 -0
- package/dist/NodeManager/node/market/marketHandler.js +137 -0
- package/dist/NodeManager/node/register/index.d.ts +16 -0
- package/dist/NodeManager/node/register/index.js +88 -0
- package/dist/NodeManager/node/resource/definition/index.d.ts +2 -0
- package/dist/NodeManager/node/resource/definition/index.js +2 -0
- package/dist/NodeManager/node/resource/helpers/createHFArgs.d.ts +6 -0
- package/dist/NodeManager/node/resource/helpers/createHFArgs.js +26 -0
- package/dist/NodeManager/node/resource/helpers/createOllamaArgs.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/createOllamaArgs.js +20 -0
- package/dist/NodeManager/node/resource/helpers/createResourceName.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/createResourceName.js +18 -0
- package/dist/NodeManager/node/resource/helpers/createS3Args.d.ts +7 -0
- package/dist/NodeManager/node/resource/helpers/createS3Args.js +32 -0
- package/dist/NodeManager/node/resource/helpers/hasDockerVolume.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/hasDockerVolume.js +3 -0
- package/dist/NodeManager/node/resource/helpers/hoursSunceDate.d.ts +1 -0
- package/dist/NodeManager/node/resource/helpers/hoursSunceDate.js +3 -0
- package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.d.ts +1 -0
- package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.js +13 -0
- package/dist/NodeManager/node/resource/image/imageManager.d.ts +13 -0
- package/dist/NodeManager/node/resource/image/imageManager.js +66 -0
- package/dist/NodeManager/node/resource/resourceManager.d.ts +21 -0
- package/dist/NodeManager/node/resource/resourceManager.js +57 -0
- package/dist/NodeManager/node/resource/volume/volumeManager.d.ts +20 -0
- package/dist/NodeManager/node/resource/volume/volumeManager.js +228 -0
- package/dist/NodeManager/node/run/runHandler.d.ts +18 -0
- package/dist/NodeManager/node/run/runHandler.js +139 -0
- package/dist/NodeManager/node/specs/specsHandler.d.ts +17 -0
- package/dist/NodeManager/node/specs/specsHandler.js +135 -0
- package/dist/NodeManager/node/specs/type.d.ts +15 -0
- package/dist/NodeManager/node/specs/type.js +1 -0
- package/dist/NodeManager/node/stake/StakeHandler.d.ts +22 -0
- package/dist/NodeManager/node/stake/StakeHandler.js +111 -0
- package/dist/NodeManager/node/task/TaskManager.d.ts +267 -0
- package/dist/NodeManager/node/task/TaskManager.js +480 -0
- package/dist/NodeManager/node/task/TaskManagerRegistry.d.ts +49 -0
- package/dist/NodeManager/node/task/TaskManagerRegistry.js +68 -0
- package/dist/NodeManager/node/task/executions/createDependencyMap.d.ts +18 -0
- package/dist/NodeManager/node/task/executions/createDependencyMap.js +32 -0
- package/dist/NodeManager/node/task/executions/createExecutionPlan.d.ts +14 -0
- package/dist/NodeManager/node/task/executions/createExecutionPlan.js +36 -0
- package/dist/NodeManager/node/task/executions/createOperationMap.d.ts +11 -0
- package/dist/NodeManager/node/task/executions/createOperationMap.js +34 -0
- package/dist/NodeManager/node/task/executions/validateExecutionPlan.d.ts +12 -0
- package/dist/NodeManager/node/task/executions/validateExecutionPlan.js +48 -0
- package/dist/NodeManager/node/task/globalStore/finalizeEnv.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/finalizeEnv.js +30 -0
- package/dist/NodeManager/node/task/globalStore/getByPath.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/getByPath.js +12 -0
- package/dist/NodeManager/node/task/globalStore/index.d.ts +9 -0
- package/dist/NodeManager/node/task/globalStore/index.js +9 -0
- package/dist/NodeManager/node/task/globalStore/interpolate.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/interpolate.js +16 -0
- package/dist/NodeManager/node/task/globalStore/interpolateOperation.d.ts +3 -0
- package/dist/NodeManager/node/task/globalStore/interpolateOperation.js +221 -0
- package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.js +7 -0
- package/dist/NodeManager/node/task/globalStore/setDefaults.d.ts +4 -0
- package/dist/NodeManager/node/task/globalStore/setDefaults.js +65 -0
- package/dist/NodeManager/node/task/globalStore/setHost.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setHost.js +9 -0
- package/dist/NodeManager/node/task/globalStore/setResult.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setResult.js +10 -0
- package/dist/NodeManager/node/task/globalStore/setResults.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setResults.js +9 -0
- package/dist/NodeManager/node/task/globalStore/stanatizeArrays.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/stanatizeArrays.js +14 -0
- package/dist/NodeManager/node/task/globalStore/transformCollections.d.ts +13 -0
- package/dist/NodeManager/node/task/globalStore/transformCollections.js +152 -0
- package/dist/NodeManager/node/task/helpers/createDefaultOpState.d.ts +2 -0
- package/dist/NodeManager/node/task/helpers/createDefaultOpState.js +20 -0
- package/dist/NodeManager/node/task/helpers/createInitialFlow.d.ts +8 -0
- package/dist/NodeManager/node/task/helpers/createInitialFlow.js +24 -0
- package/dist/NodeManager/node/task/loggers/logManager.d.ts +8 -0
- package/dist/NodeManager/node/task/loggers/logManager.js +54 -0
- package/dist/NodeManager/node/task/operations/getOperationsInfos.d.ts +6 -0
- package/dist/NodeManager/node/task/operations/getOperationsInfos.js +33 -0
- package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.d.ts +2 -0
- package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.js +65 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.d.ts +10 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.js +37 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.d.ts +14 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.js +117 -0
- package/dist/NodeManager/node/task/operations/runTaskManagerOperation.d.ts +21 -0
- package/dist/NodeManager/node/task/operations/runTaskManagerOperation.js +488 -0
- package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.d.ts +21 -0
- package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.js +54 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.d.ts +10 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.js +43 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.d.ts +14 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.js +137 -0
- package/dist/NodeManager/node/utils/convertFromBytes.d.ts +4 -0
- package/dist/NodeManager/node/utils/convertFromBytes.js +11 -0
- package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.d.ts +7 -0
- package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.js +34 -0
- package/dist/NodeManager/node/utils/extractResultsFromLogs.d.ts +18 -0
- package/dist/NodeManager/node/utils/extractResultsFromLogs.js +37 -0
- package/dist/NodeManager/node/utils/generateRandomId.d.ts +1 -0
- package/dist/NodeManager/node/utils/generateRandomId.js +3 -0
- package/dist/NodeManager/node/utils/multiProgressBarReporter.d.ts +16 -0
- package/dist/NodeManager/node/utils/multiProgressBarReporter.js +22 -0
- package/dist/NodeManager/node/utils/poll.d.ts +5 -0
- package/dist/NodeManager/node/utils/poll.js +25 -0
- package/dist/NodeManager/node/utils/progressBarReporter.d.ts +9 -0
- package/dist/NodeManager/node/utils/progressBarReporter.js +28 -0
- package/dist/NodeManager/provider/ContainerStateManager.d.ts +24 -0
- package/dist/NodeManager/provider/ContainerStateManager.js +122 -0
- package/dist/NodeManager/provider/ExposedPortHealthCheck.d.ts +29 -0
- package/dist/NodeManager/provider/ExposedPortHealthCheck.js +183 -0
- package/dist/NodeManager/provider/Provider.d.ts +70 -0
- package/dist/NodeManager/provider/Provider.js +457 -0
- package/dist/NodeManager/provider/__tests__/Provider.spec.d.ts +1 -0
- package/dist/NodeManager/provider/__tests__/Provider.spec.js +337 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.d.ts +6 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.js +45 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/index.d.ts +43 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/index.js +366 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.d.ts +5 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.js +15 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.d.ts +1 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.js +15 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.d.ts +1 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.js +13 -0
- package/dist/NodeManager/provider/containerOrchestration/interface.d.ts +53 -0
- package/dist/NodeManager/provider/containerOrchestration/interface.js +1 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/index.d.ts +11 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/index.js +69 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.d.ts +103 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.js +66 -0
- package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.d.ts +2 -0
- package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.js +11 -0
- package/dist/NodeManager/provider/types.d.ts +18 -0
- package/dist/NodeManager/provider/types.js +1 -0
- package/dist/NodeManager/provider/utils/parseBuffer.d.ts +4 -0
- package/dist/NodeManager/provider/utils/parseBuffer.js +19 -0
- package/dist/NodeManager/repository/NodeRepository.d.ts +53 -0
- package/dist/NodeManager/repository/NodeRepository.js +153 -0
- package/dist/NodeManager/sdk/index.d.ts +9 -0
- package/dist/NodeManager/sdk/index.js +146 -0
- package/dist/NodeManager/types/index.d.ts +27 -0
- package/dist/NodeManager/types/index.js +1 -0
- package/dist/NodeManager/utils/convertFromBytes.d.ts +4 -0
- package/dist/NodeManager/utils/convertFromBytes.js +11 -0
- package/dist/NodeManager/utils/expose-util.d.ts +14 -0
- package/dist/NodeManager/utils/expose-util.js +88 -0
- package/dist/NodeManager/utils/jobDefinitionParser.d.ts +12 -0
- package/dist/NodeManager/utils/jobDefinitionParser.js +31 -0
- package/dist/NodeManager/utils/ops-util.d.ts +3 -0
- package/dist/NodeManager/utils/ops-util.js +19 -0
- package/dist/NodeManager/utils/timeoutPromiseWrapper.d.ts +1 -0
- package/dist/NodeManager/utils/timeoutPromiseWrapper.js +27 -0
- package/dist/NodeManager/utils/utils.d.ts +39 -0
- package/dist/NodeManager/utils/utils.js +107 -0
- package/dist/NodeManager/utils/wslCheck.d.ts +14 -0
- package/dist/NodeManager/utils/wslCheck.js +54 -0
- package/dist/cli/address/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/address/__tests__/command.spec.js +33 -0
- package/dist/cli/address/action.d.ts +4 -0
- package/dist/cli/address/action.js +4 -0
- package/dist/cli/address/command.d.ts +2 -0
- package/dist/cli/address/command.js +9 -0
- package/dist/cli/createNosanaCli.d.ts +2 -0
- package/dist/cli/createNosanaCli.js +32 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/node/__tests__/index.spec.d.ts +1 -0
- package/dist/cli/node/__tests__/index.spec.js +10 -0
- package/dist/cli/node/index.d.ts +5 -0
- package/dist/cli/node/index.js +12 -0
- package/dist/cli/node/prune/action.d.ts +4 -0
- package/dist/cli/node/prune/action.js +18 -0
- package/dist/cli/node/prune/command.d.ts +2 -0
- package/dist/cli/node/prune/command.js +10 -0
- package/dist/cli/node/run/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/node/run/__tests__/command.spec.js +38 -0
- package/dist/cli/node/run/action.d.ts +3 -0
- package/dist/cli/node/run/action.js +82 -0
- package/dist/cli/node/run/command.d.ts +3 -0
- package/dist/cli/node/run/command.js +17 -0
- package/dist/cli/node/run/generateDeploymentEndpointsTable.d.ts +2 -0
- package/dist/cli/node/run/generateDeploymentEndpointsTable.js +45 -0
- package/dist/cli/node/start/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/node/start/__tests__/command.spec.js +39 -0
- package/dist/cli/node/start/action.d.ts +4 -0
- package/dist/cli/node/start/action.js +48 -0
- package/dist/cli/node/start/command.d.ts +3 -0
- package/dist/cli/node/start/command.js +19 -0
- package/dist/cli/sharedOptions/--api.d.ts +2 -0
- package/dist/cli/sharedOptions/--api.js +2 -0
- package/dist/cli/sharedOptions/--format.d.ts +2 -0
- package/dist/cli/sharedOptions/--format.js +4 -0
- package/dist/cli/sharedOptions/--gpu.d.ts +2 -0
- package/dist/cli/sharedOptions/--gpu.js +12 -0
- package/dist/cli/sharedOptions/--network.d.ts +2 -0
- package/dist/cli/sharedOptions/--network.js +4 -0
- package/dist/cli/sharedOptions/--port.d.ts +2 -0
- package/dist/cli/sharedOptions/--port.js +2 -0
- package/dist/cli/sharedOptions/--rpc.d.ts +2 -0
- package/dist/cli/sharedOptions/--rpc.js +2 -0
- package/dist/cli/sharedOptions/--timeout.d.ts +2 -0
- package/dist/cli/sharedOptions/--timeout.js +12 -0
- package/dist/cli/sharedOptions/--verbose.d.ts +2 -0
- package/dist/cli/sharedOptions/--verbose.js +2 -0
- package/dist/cli/sharedOptions/--wallet.d.ts +2 -0
- package/dist/cli/sharedOptions/--wallet.js +2 -0
- package/dist/cli/sharedOptions/index.d.ts +7 -0
- package/dist/cli/sharedOptions/index.js +8 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/output-formatter/OutputFormatter.d.ts +61 -0
- package/dist/output-formatter/OutputFormatter.js +58 -0
- package/dist/output-formatter/OutputFormatterFactory.d.ts +4 -0
- package/dist/output-formatter/OutputFormatterFactory.js +18 -0
- package/dist/output-formatter/__mocks__/outputEvents.mock.d.ts +42 -0
- package/dist/output-formatter/__mocks__/outputEvents.mock.js +45 -0
- package/dist/output-formatter/__mocks__/outputFormatter.mock.d.ts +0 -0
- package/dist/output-formatter/__mocks__/outputFormatter.mock.js +21 -0
- package/dist/output-formatter/__tests__/OutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/OutputFormatter.spec.js +34 -0
- package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.js +26 -0
- package/dist/output-formatter/__tests__/outputFormatSelector.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/outputFormatSelector.spec.js +21 -0
- package/dist/output-formatter/json/JsonOutputEventHandlers.d.ts +8 -0
- package/dist/output-formatter/json/JsonOutputEventHandlers.js +191 -0
- package/dist/output-formatter/json/JsonOutputFormatter.d.ts +47 -0
- package/dist/output-formatter/json/JsonOutputFormatter.js +12 -0
- package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.js +36 -0
- package/dist/output-formatter/outputEvents.d.ts +213 -0
- package/dist/output-formatter/outputEvents.js +63 -0
- package/dist/output-formatter/outputFormatArgumentParser.d.ts +1 -0
- package/dist/output-formatter/outputFormatArgumentParser.js +10 -0
- package/dist/output-formatter/outputFormatSelector.d.ts +15 -0
- package/dist/output-formatter/outputFormatSelector.js +23 -0
- package/dist/output-formatter/text/TextOutputEventHandlers.d.ts +7 -0
- package/dist/output-formatter/text/TextOutputEventHandlers.js +128 -0
- package/dist/output-formatter/text/TextOutputFormatter.d.ts +6 -0
- package/dist/output-formatter/text/TextOutputFormatter.js +7 -0
- package/dist/output-formatter/text/VerboseTextOutputEventHandlers.d.ts +7 -0
- package/dist/output-formatter/text/VerboseTextOutputEventHandlers.js +138 -0
- package/dist/output-formatter/text/VerboseTextOutputFormatter.d.ts +6 -0
- package/dist/output-formatter/text/VerboseTextOutputFormatter.js +7 -0
- package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.js +25 -0
- package/dist/static/index.d.ts +7 -0
- package/dist/static/index.js +12 -0
- package/dist/version/index.d.ts +1 -0
- package/dist/version/index.js +47 -0
- package/npm-shrinkwrap.json +9928 -0
- package/package.json +102 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export var StateCategory;
|
|
2
|
+
(function (StateCategory) {
|
|
3
|
+
StateCategory["RUNNING_JOB"] = "RUNNING_JOB";
|
|
4
|
+
StateCategory["BENCHMARKING"] = "BENCHMARKING";
|
|
5
|
+
StateCategory["HEALTHCHECK"] = "HEALTHCHECK";
|
|
6
|
+
StateCategory["RESTARTING"] = "RESTARTING";
|
|
7
|
+
StateCategory["STARTING"] = "STARTING";
|
|
8
|
+
StateCategory["JOINING_MARKET"] = "JOINING_MARKET";
|
|
9
|
+
StateCategory["QUEUED"] = "QUEUED";
|
|
10
|
+
StateCategory["OTHER"] = "OTHER";
|
|
11
|
+
})(StateCategory || (StateCategory = {}));
|
|
12
|
+
export const stateClassificationMap = {
|
|
13
|
+
// RUNNING JOB states
|
|
14
|
+
'job-running': StateCategory.RUNNING_JOB,
|
|
15
|
+
'job-running-success': StateCategory.RUNNING_JOB,
|
|
16
|
+
'job-running-failed': StateCategory.RUNNING_JOB,
|
|
17
|
+
'claiming-job': StateCategory.RUNNING_JOB,
|
|
18
|
+
'claiming-job-success': StateCategory.RUNNING_JOB,
|
|
19
|
+
'claiming-job-failed': StateCategory.RUNNING_JOB,
|
|
20
|
+
'job-starting': StateCategory.RUNNING_JOB,
|
|
21
|
+
'job-starting-success': StateCategory.RUNNING_JOB,
|
|
22
|
+
'job-starting-failed': StateCategory.RUNNING_JOB,
|
|
23
|
+
'awaiting-job-definition': StateCategory.RUNNING_JOB,
|
|
24
|
+
'awaiting-job-definition-success': StateCategory.RUNNING_JOB,
|
|
25
|
+
'awaiting-job-definition-failed': StateCategory.RUNNING_JOB,
|
|
26
|
+
'job-resuming': StateCategory.RUNNING_JOB,
|
|
27
|
+
'job-finishing': StateCategory.RUNNING_JOB,
|
|
28
|
+
'job-finishing-success': StateCategory.RUNNING_JOB,
|
|
29
|
+
'job-finishing-failed': StateCategory.RUNNING_JOB,
|
|
30
|
+
// BENCHMARKING states
|
|
31
|
+
'benchmark-running': StateCategory.BENCHMARKING,
|
|
32
|
+
'benchmark-passed': StateCategory.BENCHMARKING,
|
|
33
|
+
'benchmark-failed': StateCategory.BENCHMARKING,
|
|
34
|
+
// HEALTHCHECK states
|
|
35
|
+
'health-check-running': StateCategory.HEALTHCHECK,
|
|
36
|
+
'health-check-failed': StateCategory.HEALTHCHECK,
|
|
37
|
+
// RESTARTING states
|
|
38
|
+
'node-restarting': StateCategory.RESTARTING,
|
|
39
|
+
'node-restarted': StateCategory.RESTARTING,
|
|
40
|
+
// STARTING states
|
|
41
|
+
'node-starting': StateCategory.STARTING,
|
|
42
|
+
'node-starting-failed': StateCategory.STARTING,
|
|
43
|
+
'node-started': StateCategory.STARTING,
|
|
44
|
+
// JOINING MARKET states
|
|
45
|
+
'queueing-in-market': StateCategory.JOINING_MARKET,
|
|
46
|
+
'queueing-in-market-success': StateCategory.QUEUED,
|
|
47
|
+
'queueing-in-market-failed': StateCategory.QUEUED,
|
|
48
|
+
'queueing-in-market-position': StateCategory.QUEUED,
|
|
49
|
+
// QUEUED states
|
|
50
|
+
'awaiting-job-queue': StateCategory.QUEUED,
|
|
51
|
+
'job-queued': StateCategory.QUEUED,
|
|
52
|
+
// Add other mappings here as needed
|
|
53
|
+
};
|
|
54
|
+
// Function to classify a state based on its status string
|
|
55
|
+
export function classifyState(status) {
|
|
56
|
+
return stateClassificationMap[status] || StateCategory.OTHER;
|
|
57
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { LogObserver, NodeLogEntry } from '../log/NodeLog.js';
|
|
3
|
+
export declare const logStreaming: (node: string) => LogStreamer;
|
|
4
|
+
export declare class LogStreamer implements LogObserver {
|
|
5
|
+
logs: Map<string, string[]>;
|
|
6
|
+
private index;
|
|
7
|
+
private clients;
|
|
8
|
+
constructor(privatenode: string);
|
|
9
|
+
isNodeObserver(): boolean;
|
|
10
|
+
clear(): void;
|
|
11
|
+
update(log: NodeLogEntry): void;
|
|
12
|
+
subscribe(ws: WebSocket, job: string): void;
|
|
13
|
+
unsubscribe(ws: WebSocket): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { log } from '../log/NodeLog.js';
|
|
3
|
+
export const logStreaming = (() => {
|
|
4
|
+
let instance = null;
|
|
5
|
+
return (node) => {
|
|
6
|
+
if (!instance) {
|
|
7
|
+
instance = new LogStreamer(node);
|
|
8
|
+
}
|
|
9
|
+
return instance;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
export class LogStreamer {
|
|
13
|
+
constructor(privatenode) {
|
|
14
|
+
this.logs = new Map();
|
|
15
|
+
this.index = 0;
|
|
16
|
+
this.clients = new Map();
|
|
17
|
+
log().addObserver(this);
|
|
18
|
+
}
|
|
19
|
+
isNodeObserver() {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
clear() {
|
|
23
|
+
this.logs.clear();
|
|
24
|
+
}
|
|
25
|
+
update(log) {
|
|
26
|
+
const logMessage = JSON.stringify(log);
|
|
27
|
+
this.index = this.index + 1;
|
|
28
|
+
const job = log.job;
|
|
29
|
+
if (job) {
|
|
30
|
+
this.logs.set(job, (this.logs.get(job) ?? []).concat([logMessage]));
|
|
31
|
+
const clients = this.clients.get(job) ?? [];
|
|
32
|
+
clients.forEach((ws) => {
|
|
33
|
+
ws.send(JSON.stringify({ data: logMessage, path: 'log' }));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
this.logs.set('all', (this.logs.get('all') ?? []).concat([logMessage]));
|
|
37
|
+
}
|
|
38
|
+
subscribe(ws, job) {
|
|
39
|
+
this.clients.set(job, (this.clients.get(job) ?? []).concat([ws]));
|
|
40
|
+
const logs = this.logs.get(job) ?? [];
|
|
41
|
+
logs.forEach((log) => {
|
|
42
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
43
|
+
ws.send(JSON.stringify({ data: log, path: 'log' }));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
unsubscribe(ws) {
|
|
48
|
+
for (const [job, clients] of this.clients) {
|
|
49
|
+
const updatedClients = clients.filter((client) => client !== ws);
|
|
50
|
+
if (updatedClients.length > 0) {
|
|
51
|
+
this.clients.set(job, updatedClients);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.clients.delete(job);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { StateObserver } from '../state/NodeState.js';
|
|
3
|
+
export declare const stateStreaming: (node: string) => StateStreamer;
|
|
4
|
+
export declare class StateStreamer implements StateObserver {
|
|
5
|
+
states: Map<string, string[]>;
|
|
6
|
+
private index;
|
|
7
|
+
private clients;
|
|
8
|
+
constructor(node: string);
|
|
9
|
+
clear(): void;
|
|
10
|
+
update(status: string, state: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
}, timestamp: number): void;
|
|
13
|
+
subscribe(ws: WebSocket, job: string): void;
|
|
14
|
+
unsubscribe(ws: WebSocket): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { state } from '../state/NodeState.js';
|
|
3
|
+
export const stateStreaming = (() => {
|
|
4
|
+
let instance = null;
|
|
5
|
+
return (node) => {
|
|
6
|
+
if (!instance) {
|
|
7
|
+
instance = new StateStreamer(node);
|
|
8
|
+
}
|
|
9
|
+
return instance;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
export class StateStreamer {
|
|
13
|
+
constructor(node) {
|
|
14
|
+
this.states = new Map();
|
|
15
|
+
this.index = 0;
|
|
16
|
+
this.clients = new Map();
|
|
17
|
+
state(node).addObserver(this);
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this.states.clear();
|
|
21
|
+
}
|
|
22
|
+
update(status, state, timestamp) {
|
|
23
|
+
const stateMessage = JSON.stringify({
|
|
24
|
+
status,
|
|
25
|
+
state,
|
|
26
|
+
timestamp,
|
|
27
|
+
index: this.index,
|
|
28
|
+
});
|
|
29
|
+
this.index = this.index + 1;
|
|
30
|
+
if (state.job) {
|
|
31
|
+
this.states.set(state.job, (this.states.get(state.job) ?? []).concat([stateMessage]));
|
|
32
|
+
const clients = this.clients.get(state.job) ?? [];
|
|
33
|
+
clients.forEach((ws) => {
|
|
34
|
+
ws.send(JSON.stringify({ data: stateMessage, path: 'state' }));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
this.states.set('all', (this.states.get('all') ?? []).concat([stateMessage]));
|
|
38
|
+
}
|
|
39
|
+
subscribe(ws, job) {
|
|
40
|
+
this.clients.set(job, (this.clients.get(job) ?? []).concat([ws]));
|
|
41
|
+
const states = this.states.get(job) ?? [];
|
|
42
|
+
states.forEach((state) => {
|
|
43
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
44
|
+
ws.send(JSON.stringify({ data: state, path: 'state' }));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
unsubscribe(ws) {
|
|
49
|
+
for (const [job, clients] of this.clients) {
|
|
50
|
+
const updatedClients = clients.filter((client) => client !== ws);
|
|
51
|
+
if (updatedClients.length > 0) {
|
|
52
|
+
this.clients.set(job, updatedClients);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.clients.delete(job);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ApiHandler } from './api/ApiHandler.js';
|
|
2
|
+
export declare class BasicNode {
|
|
3
|
+
isOnboarded: boolean;
|
|
4
|
+
private apiHandler;
|
|
5
|
+
private balanceHandler;
|
|
6
|
+
private runHandler;
|
|
7
|
+
private marketHandler;
|
|
8
|
+
private jobHandler;
|
|
9
|
+
private specsHandler;
|
|
10
|
+
private keyHandler;
|
|
11
|
+
private healthHandler;
|
|
12
|
+
private expiryHandler;
|
|
13
|
+
private gridHandler;
|
|
14
|
+
private registerHandler;
|
|
15
|
+
private repository;
|
|
16
|
+
private resourceManager;
|
|
17
|
+
private provider;
|
|
18
|
+
private containerOrchestration;
|
|
19
|
+
private exiting;
|
|
20
|
+
private sdk;
|
|
21
|
+
constructor(options: {
|
|
22
|
+
[key: string]: any;
|
|
23
|
+
});
|
|
24
|
+
register(): Promise<void>;
|
|
25
|
+
healthcheck(market: string): Promise<boolean>;
|
|
26
|
+
specs(): Promise<boolean>;
|
|
27
|
+
recommend(): Promise<string>;
|
|
28
|
+
api(): ApiHandler;
|
|
29
|
+
isApiActive(): Promise<boolean>;
|
|
30
|
+
node(): string;
|
|
31
|
+
getSystemEnvironment(): string;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
clean(): Promise<void>;
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
setup(market: string): Promise<void>;
|
|
36
|
+
run(): Promise<void>;
|
|
37
|
+
pending(): Promise<boolean>;
|
|
38
|
+
queue(market?: string): Promise<void>;
|
|
39
|
+
monitorMarket(): Promise<unknown>;
|
|
40
|
+
maintenance(): Promise<void>;
|
|
41
|
+
exit(): void;
|
|
42
|
+
conclude(): Promise<void>;
|
|
43
|
+
restartDelay(time: number): Promise<void>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { getSDK } from '../sdk/index.js';
|
|
2
|
+
import { MarketHandler } from './market/marketHandler.js';
|
|
3
|
+
import { RunHandler } from './run/runHandler.js';
|
|
4
|
+
import { JobHandler } from './job/jobHandler.js';
|
|
5
|
+
import { DB } from '../db/index.js';
|
|
6
|
+
import { Provider } from '../provider/Provider.js';
|
|
7
|
+
import { applyLoggingProxyToClass } from '../monitoring/proxy/loggingProxy.js';
|
|
8
|
+
import { isNodeOnboarded } from '../utils/utils.js';
|
|
9
|
+
import { ApiHandler } from './api/ApiHandler.js';
|
|
10
|
+
import { NodeRepository } from '../repository/NodeRepository.js';
|
|
11
|
+
import { SpecsHandler } from './specs/specsHandler.js';
|
|
12
|
+
import { HealthHandler } from './health/healthHandler.js';
|
|
13
|
+
import { KeyHandler } from './key/keyHandler.js';
|
|
14
|
+
import { ExpiryHandler } from './expiry/expiryHandler.js';
|
|
15
|
+
import { GridHandler } from './grid/gridHandler.js';
|
|
16
|
+
import { ResourceManager } from './resource/resourceManager.js';
|
|
17
|
+
import { selectContainerOrchestrationProvider } from '../provider/containerOrchestration/selectContainerOrchestration.js';
|
|
18
|
+
import { RegisterHandler } from './register/index.js';
|
|
19
|
+
import { BalanceHandler } from './balance/balanceHandler.js';
|
|
20
|
+
import { abortControllerSelector, nodeAbortControllerSelector, } from './abort/abortControllerSelector.js';
|
|
21
|
+
import { pollForRun } from './utils/poll.js';
|
|
22
|
+
import { configs } from '../configs/configs.js';
|
|
23
|
+
import { TaskManagerRegistry } from './task/TaskManagerRegistry.js';
|
|
24
|
+
import { StopReasons } from './task/TaskManager.js';
|
|
25
|
+
export class BasicNode {
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.isOnboarded = false;
|
|
28
|
+
this.exiting = false;
|
|
29
|
+
this.sdk = getSDK();
|
|
30
|
+
const db = new DB(options.config).db;
|
|
31
|
+
this.repository = new NodeRepository(db);
|
|
32
|
+
this.containerOrchestration = selectContainerOrchestrationProvider(options.provider, options.podman, options.gpu);
|
|
33
|
+
this.resourceManager = new ResourceManager(this.containerOrchestration, this.repository);
|
|
34
|
+
this.provider = new Provider(this.containerOrchestration, this.repository, this.resourceManager);
|
|
35
|
+
this.apiHandler = new ApiHandler(this.sdk, this.repository, this.provider, options.port);
|
|
36
|
+
this.balanceHandler = new BalanceHandler(this.sdk);
|
|
37
|
+
this.gridHandler = new GridHandler(this.sdk, this.repository);
|
|
38
|
+
this.specsHandler = new SpecsHandler(this.provider, this.repository, this.sdk);
|
|
39
|
+
this.jobHandler = new JobHandler(this.sdk, this.provider, this.repository);
|
|
40
|
+
this.marketHandler = new MarketHandler(this.sdk);
|
|
41
|
+
this.runHandler = new RunHandler(this.sdk);
|
|
42
|
+
this.keyHandler = new KeyHandler(this.sdk);
|
|
43
|
+
this.healthHandler = new HealthHandler(this.sdk, this.containerOrchestration, this.marketHandler, this.keyHandler);
|
|
44
|
+
this.registerHandler = new RegisterHandler(this.sdk, this.provider, this.repository);
|
|
45
|
+
this.expiryHandler = new ExpiryHandler(this.sdk);
|
|
46
|
+
applyLoggingProxyToClass(this);
|
|
47
|
+
}
|
|
48
|
+
async register() {
|
|
49
|
+
await this.registerHandler.register();
|
|
50
|
+
}
|
|
51
|
+
async healthcheck(market) {
|
|
52
|
+
/**
|
|
53
|
+
* run health check,
|
|
54
|
+
*/
|
|
55
|
+
return await this.healthHandler.run(market);
|
|
56
|
+
}
|
|
57
|
+
async specs() {
|
|
58
|
+
/**
|
|
59
|
+
* check the system using a premade job definitions
|
|
60
|
+
* run dependent on market status
|
|
61
|
+
*/
|
|
62
|
+
return await this.specsHandler.check();
|
|
63
|
+
}
|
|
64
|
+
async recommend() {
|
|
65
|
+
/**
|
|
66
|
+
* this means even tho we have been onboarded there might be no market assigned to us
|
|
67
|
+
* or we need to check if we are still in the right market,
|
|
68
|
+
* so we need to get a recommended one and return it
|
|
69
|
+
*/
|
|
70
|
+
return await this.gridHandler.recommend();
|
|
71
|
+
}
|
|
72
|
+
api() {
|
|
73
|
+
return this.apiHandler;
|
|
74
|
+
}
|
|
75
|
+
async isApiActive() {
|
|
76
|
+
const server = `https://${this.node()}.${configs().frp.serverAddr}`;
|
|
77
|
+
return await this.apiHandler.testApiServerOnce(server);
|
|
78
|
+
}
|
|
79
|
+
node() {
|
|
80
|
+
return this.sdk.solana.provider.wallet.publicKey.toString();
|
|
81
|
+
}
|
|
82
|
+
getSystemEnvironment() {
|
|
83
|
+
return this.repository.getNodeInfo().system_environment;
|
|
84
|
+
}
|
|
85
|
+
async stop() {
|
|
86
|
+
await this.marketHandler.stop();
|
|
87
|
+
await this.runHandler.stop();
|
|
88
|
+
await this.jobHandler.nodeStop();
|
|
89
|
+
this.expiryHandler.stop();
|
|
90
|
+
nodeAbortControllerSelector().refresh();
|
|
91
|
+
}
|
|
92
|
+
async clean() {
|
|
93
|
+
/**
|
|
94
|
+
* we want to use stop because it functions like we want
|
|
95
|
+
*/
|
|
96
|
+
await this.jobHandler.nodeStop();
|
|
97
|
+
await this.marketHandler.clean();
|
|
98
|
+
await this.runHandler.clean();
|
|
99
|
+
// await this.jobHandler.stop();
|
|
100
|
+
this.expiryHandler.stop();
|
|
101
|
+
nodeAbortControllerSelector().refresh();
|
|
102
|
+
}
|
|
103
|
+
async start() {
|
|
104
|
+
/**
|
|
105
|
+
* we query the grid to find out if the node has already been onboarded
|
|
106
|
+
* if it has been onboarded it might have been assigned/recommended a market
|
|
107
|
+
* if it has not been onboarded quit the process
|
|
108
|
+
*/
|
|
109
|
+
const nodeData = await this.gridHandler.getNodeStatus();
|
|
110
|
+
this.isOnboarded = isNodeOnboarded(nodeData.status);
|
|
111
|
+
if (await this.balanceHandler.balance()) {
|
|
112
|
+
await this.balanceHandler.check(true);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* get an instance to the container
|
|
116
|
+
*/
|
|
117
|
+
await this.containerOrchestration.getConnection();
|
|
118
|
+
/**
|
|
119
|
+
* check if the container is fine and healthy
|
|
120
|
+
*/
|
|
121
|
+
const { status, error } = await this.containerOrchestration.healthy();
|
|
122
|
+
if (!status) {
|
|
123
|
+
throw new Error(`error on container orchestration (docker or podman), error: ${error}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async setup(market) {
|
|
127
|
+
await this.resourceManager.resyncResourcesDB();
|
|
128
|
+
await this.resourceManager.fetchMarketRequiredResources(market);
|
|
129
|
+
}
|
|
130
|
+
run() {
|
|
131
|
+
return new Promise(async (resolve, reject) => {
|
|
132
|
+
try {
|
|
133
|
+
let resolvedStatus = StopReasons.COMPLETED;
|
|
134
|
+
const periodicHealthcheck = async () => {
|
|
135
|
+
const { status, error } = await this.containerOrchestration.healthy();
|
|
136
|
+
if (!status) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
return true;
|
|
140
|
+
};
|
|
141
|
+
const run = await this.runHandler.startRunMonitoring(periodicHealthcheck);
|
|
142
|
+
/**
|
|
143
|
+
* Once we have found a run in the queue, we want to stop this run monitoring
|
|
144
|
+
*/
|
|
145
|
+
this.runHandler.stopRunMonitoring();
|
|
146
|
+
/**
|
|
147
|
+
* Once we have found a run in the run, we want to stop this market queue monitoring,
|
|
148
|
+
* because this can come earlier than the market queue.
|
|
149
|
+
*/
|
|
150
|
+
this.marketHandler.stopMarketQueueMonitoring();
|
|
151
|
+
const jobAddress = run.account.job.toString();
|
|
152
|
+
/**
|
|
153
|
+
* Claim the job by polling the job and setting it in the job handler
|
|
154
|
+
* as the current job for this cycle.
|
|
155
|
+
*/
|
|
156
|
+
const job = await this.jobHandler.claim(jobAddress);
|
|
157
|
+
/**
|
|
158
|
+
* register the job in the job registry
|
|
159
|
+
*/
|
|
160
|
+
this.jobHandler.register(jobAddress, run, job);
|
|
161
|
+
/**
|
|
162
|
+
* Check if the job is expired. If it is, quit the job;
|
|
163
|
+
* otherwise, continue to start.
|
|
164
|
+
*/
|
|
165
|
+
if (!this.expiryHandler.expired(run, job)) {
|
|
166
|
+
const stopReason = new Promise((resolveStop) => {
|
|
167
|
+
/**
|
|
168
|
+
* start monitoring for the stop signal from the smart contract
|
|
169
|
+
*/
|
|
170
|
+
this.jobHandler.accountEmitter.once('stopped', async () => {
|
|
171
|
+
const task = TaskManagerRegistry.getInstance().get(jobAddress);
|
|
172
|
+
if (task) {
|
|
173
|
+
await task.stop(StopReasons.STOPPED);
|
|
174
|
+
}
|
|
175
|
+
abortControllerSelector().abort('stopped');
|
|
176
|
+
resolveStop(StopReasons.STOPPED);
|
|
177
|
+
});
|
|
178
|
+
/**
|
|
179
|
+
* start the signal from the job completed
|
|
180
|
+
*/
|
|
181
|
+
this.jobHandler.accountEmitter.once('completed', async () => {
|
|
182
|
+
resolveStop(StopReasons.COMPLETED);
|
|
183
|
+
});
|
|
184
|
+
/**
|
|
185
|
+
* This starts the expiry settings to monitor expiry time
|
|
186
|
+
*/
|
|
187
|
+
this.expiryHandler.init(run, job, jobAddress, this.jobHandler.accountEmitter, async () => {
|
|
188
|
+
/**
|
|
189
|
+
* we now use the abort controller to close the container operations
|
|
190
|
+
*/
|
|
191
|
+
const task = TaskManagerRegistry.getInstance().get(jobAddress);
|
|
192
|
+
if (task) {
|
|
193
|
+
await task.stop(StopReasons.EXPIRED);
|
|
194
|
+
}
|
|
195
|
+
abortControllerSelector().abort('expired');
|
|
196
|
+
resolveStop(StopReasons.EXPIRED);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
/**
|
|
200
|
+
* Start the job. This includes downloading the job definition, starting the flow,
|
|
201
|
+
* checking if the flow exists, and quitting the job if it fails to start.
|
|
202
|
+
*/
|
|
203
|
+
const shouldStart = await this.jobHandler.start(job);
|
|
204
|
+
if (shouldStart) {
|
|
205
|
+
/**
|
|
206
|
+
* Run the flow asynchronously and handle errors via a Promise.
|
|
207
|
+
* This lets us run the job in the background (async) and still get an error in this main process.
|
|
208
|
+
*/
|
|
209
|
+
await this.jobHandler.runWithErrorHandling();
|
|
210
|
+
/**
|
|
211
|
+
* Wait for the job to expire before continuing if the setup was successful.
|
|
212
|
+
*/
|
|
213
|
+
// await this.expiryHandler.waitUntilExpired();
|
|
214
|
+
resolvedStatus = await stopReason;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!this.exiting) {
|
|
218
|
+
/**
|
|
219
|
+
* Upload the result and end the flow; also clean up flow.
|
|
220
|
+
*/
|
|
221
|
+
await this.jobHandler.finish(run, resolvedStatus);
|
|
222
|
+
this.jobHandler.deregister(jobAddress);
|
|
223
|
+
// Resolve the Promise normally
|
|
224
|
+
resolve();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
// Reject the Promise if any errors occur
|
|
229
|
+
reject(error);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
async pending() {
|
|
234
|
+
return !!(await this.runHandler.checkRun());
|
|
235
|
+
}
|
|
236
|
+
async queue(market) {
|
|
237
|
+
/**
|
|
238
|
+
*
|
|
239
|
+
* check if market was specified and if it wasnt select market from list
|
|
240
|
+
*/
|
|
241
|
+
if (!market) {
|
|
242
|
+
throw new Error('market is not specified, TODO: market will be recommended');
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* check if the node is already queued in a market and if not
|
|
246
|
+
* this node will join the market, or skip if it is already joined
|
|
247
|
+
*/
|
|
248
|
+
let joinedMarket = await this.marketHandler.checkQueuedInMarket();
|
|
249
|
+
/**
|
|
250
|
+
* set the market that will be all through the marketHandler for
|
|
251
|
+
* the rest of this cycle until this job is finished
|
|
252
|
+
*/
|
|
253
|
+
await this.marketHandler.setMarket(market);
|
|
254
|
+
if (!joinedMarket) {
|
|
255
|
+
joinedMarket = await this.marketHandler.join(this.keyHandler.getAccessKey());
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.marketHandler.setInMarket();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async monitorMarket() {
|
|
262
|
+
const timeout = 30000;
|
|
263
|
+
let firstMarketCheck = true;
|
|
264
|
+
return new Promise((reject) => {
|
|
265
|
+
this.marketHandler.startMarketQueueMonitoring((market) => {
|
|
266
|
+
try {
|
|
267
|
+
if (!market) {
|
|
268
|
+
this.marketHandler.stopMarketQueueMonitoring();
|
|
269
|
+
const { promise: runPolling, cancel } = pollForRun(() => this.runHandler.getRun());
|
|
270
|
+
Promise.race([
|
|
271
|
+
runPolling,
|
|
272
|
+
new Promise((_, rejectTimeout) => setTimeout(() => rejectTimeout(new Error('TimedOutWaitingForRuns')), timeout)),
|
|
273
|
+
])
|
|
274
|
+
.then(() => {
|
|
275
|
+
cancel();
|
|
276
|
+
// job found no need to do anything
|
|
277
|
+
})
|
|
278
|
+
.catch((err) => {
|
|
279
|
+
cancel();
|
|
280
|
+
if (err.message === 'TimedOutWaitingForRuns' &&
|
|
281
|
+
!this.runHandler.getRun()) {
|
|
282
|
+
reject(new Error('Market Timeout Error: node exited market'));
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
this.marketHandler.processMarketQueuePosition(market, firstMarketCheck);
|
|
290
|
+
firstMarketCheck = false;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch (error) { }
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
async maintenance() {
|
|
298
|
+
this.jobHandler.clearOldJobs();
|
|
299
|
+
}
|
|
300
|
+
exit() {
|
|
301
|
+
this.exiting = true;
|
|
302
|
+
}
|
|
303
|
+
async conclude() {
|
|
304
|
+
const run = this.runHandler.getRun();
|
|
305
|
+
if (run) {
|
|
306
|
+
await this.jobHandler.finish(run, StopReasons.QUIT);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
restartDelay(time) {
|
|
310
|
+
return new Promise((resolve) => {
|
|
311
|
+
let timer = time;
|
|
312
|
+
const intervalId = setInterval(() => {
|
|
313
|
+
timer--;
|
|
314
|
+
if (timer <= 0) {
|
|
315
|
+
clearInterval(intervalId);
|
|
316
|
+
resolve();
|
|
317
|
+
}
|
|
318
|
+
}, 1000); // 1000 ms = 1 second
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NodeAbortController } from './NodeAbortController.js';
|
|
2
|
+
export const nodeAbortControllerSelector = (() => {
|
|
3
|
+
let instance = null;
|
|
4
|
+
return () => {
|
|
5
|
+
if (!instance) {
|
|
6
|
+
instance = new NodeAbortController();
|
|
7
|
+
}
|
|
8
|
+
return instance;
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
export const abortControllerSelector = () => {
|
|
12
|
+
return nodeAbortControllerSelector().getController();
|
|
13
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
class ApiEventEmitter extends EventEmitter {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
}
|
|
6
|
+
static getInstance() {
|
|
7
|
+
if (!ApiEventEmitter.instance) {
|
|
8
|
+
ApiEventEmitter.instance = new ApiEventEmitter();
|
|
9
|
+
}
|
|
10
|
+
return ApiEventEmitter.instance;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export default ApiEventEmitter;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Client as SDK } from '@nosana/sdk';
|
|
2
|
+
import { Provider } from '../../provider/Provider.js';
|
|
3
|
+
import { NodeRepository } from '../../repository/NodeRepository.js';
|
|
4
|
+
export declare class ApiHandler {
|
|
5
|
+
private sdk;
|
|
6
|
+
private repository;
|
|
7
|
+
private provider;
|
|
8
|
+
private port;
|
|
9
|
+
private api;
|
|
10
|
+
private address;
|
|
11
|
+
private server;
|
|
12
|
+
private wss;
|
|
13
|
+
private eventEmitter;
|
|
14
|
+
private apiCheckInterval;
|
|
15
|
+
constructor(sdk: SDK, repository: NodeRepository, provider: Provider, port: number);
|
|
16
|
+
start(): Promise<string>;
|
|
17
|
+
preventMultipleApiStarts(): Promise<void>;
|
|
18
|
+
testApiServerOnce(server: string): Promise<boolean>;
|
|
19
|
+
private restartApiProxy;
|
|
20
|
+
private stopApiProxy;
|
|
21
|
+
private startWebSocketServer;
|
|
22
|
+
private startApiCheck;
|
|
23
|
+
private registerRoutes;
|
|
24
|
+
private listen;
|
|
25
|
+
private stopApiCheck;
|
|
26
|
+
stopServerAndWebSocket(): void;
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
}
|