@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,152 @@
|
|
|
1
|
+
const SpreadMarker = {
|
|
2
|
+
key: '__spread__',
|
|
3
|
+
objectHandler: (raw) => {
|
|
4
|
+
const parse = (label, v) => {
|
|
5
|
+
const obj = typeof v === 'string'
|
|
6
|
+
? (() => {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(v);
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
throw new Error(`${label} is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
12
|
+
}
|
|
13
|
+
})()
|
|
14
|
+
: v;
|
|
15
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
16
|
+
throw new Error(`${label} must be a JSON object`);
|
|
17
|
+
}
|
|
18
|
+
return obj;
|
|
19
|
+
};
|
|
20
|
+
return parse('__spread__', raw);
|
|
21
|
+
},
|
|
22
|
+
arrayHandler: (raw, chunked) => {
|
|
23
|
+
const parse = (label, v, isChunked) => {
|
|
24
|
+
let arr = v;
|
|
25
|
+
if (typeof v === 'string') {
|
|
26
|
+
// Single JSON string
|
|
27
|
+
try {
|
|
28
|
+
arr = JSON.parse(v);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
throw new Error(`${label} is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (isChunked &&
|
|
35
|
+
Array.isArray(v) &&
|
|
36
|
+
v.every((item) => typeof item === 'string')) {
|
|
37
|
+
// Chunked JSON array - join strings and parse
|
|
38
|
+
const joined = v.join('');
|
|
39
|
+
try {
|
|
40
|
+
arr = JSON.parse(joined);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
throw new Error(`${label} chunked array is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!Array.isArray(arr)) {
|
|
47
|
+
throw new Error(`${label} must be a JSON array`);
|
|
48
|
+
}
|
|
49
|
+
return arr.flat();
|
|
50
|
+
};
|
|
51
|
+
return parse('__spread__', raw, chunked);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const PairsMarker = {
|
|
55
|
+
key: '__pairs__',
|
|
56
|
+
objectHandler: (raw) => {
|
|
57
|
+
const parseArray = (label, v) => {
|
|
58
|
+
const parsed = typeof v === 'string'
|
|
59
|
+
? (() => {
|
|
60
|
+
try {
|
|
61
|
+
return JSON.parse(v);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
throw new Error(`${label} is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
65
|
+
}
|
|
66
|
+
})()
|
|
67
|
+
: v;
|
|
68
|
+
if (!Array.isArray(parsed)) {
|
|
69
|
+
throw new Error(`${label} must be a JSON array`);
|
|
70
|
+
}
|
|
71
|
+
return parsed;
|
|
72
|
+
};
|
|
73
|
+
const arr = parseArray('__pairs__', raw);
|
|
74
|
+
const out = {};
|
|
75
|
+
for (const it of arr) {
|
|
76
|
+
if (!it || typeof it !== 'object' || Array.isArray(it)) {
|
|
77
|
+
throw new Error(`__pairs__ items must be objects`);
|
|
78
|
+
}
|
|
79
|
+
const rec = it;
|
|
80
|
+
const key = rec.key;
|
|
81
|
+
const value = rec.value;
|
|
82
|
+
if (typeof key !== 'string') {
|
|
83
|
+
throw new Error(`__pairs__ item.key must be string`);
|
|
84
|
+
}
|
|
85
|
+
out[key] = value ?? '';
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
},
|
|
89
|
+
arrayHandler: (raw) => {
|
|
90
|
+
const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;
|
|
91
|
+
if (!Array.isArray(parsed))
|
|
92
|
+
throw new Error(`__pairs__ must be a JSON array`);
|
|
93
|
+
return parsed;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
export const DefaultCollectionMarkers = [
|
|
97
|
+
SpreadMarker,
|
|
98
|
+
PairsMarker,
|
|
99
|
+
];
|
|
100
|
+
export function transformCollections(op, overwrite = true) {
|
|
101
|
+
const markers = DefaultCollectionMarkers;
|
|
102
|
+
const isMarkerKey = (k) => markers.some((m) => m.key === k);
|
|
103
|
+
const getMarker = (k) => markers.find((m) => m.key === k);
|
|
104
|
+
const visit = (node) => {
|
|
105
|
+
if (Array.isArray(node)) {
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const el0 of node) {
|
|
108
|
+
if (el0 && typeof el0 === 'object' && !Array.isArray(el0)) {
|
|
109
|
+
const entries = Object.entries(el0);
|
|
110
|
+
const markerEntry = entries.find(([k]) => isMarkerKey(k));
|
|
111
|
+
if (markerEntry) {
|
|
112
|
+
const [mk, raw] = markerEntry;
|
|
113
|
+
const spec = getMarker(mk);
|
|
114
|
+
if (spec?.arrayHandler) {
|
|
115
|
+
const items = spec
|
|
116
|
+
.arrayHandler(raw, el0.chunked === true)
|
|
117
|
+
.map(visit);
|
|
118
|
+
out.push(...items);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
out.push(visit(el0));
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
if (node && typeof node === 'object') {
|
|
128
|
+
const obj = node;
|
|
129
|
+
const base = {};
|
|
130
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
131
|
+
if (!isMarkerKey(k))
|
|
132
|
+
base[k] = visit(v);
|
|
133
|
+
}
|
|
134
|
+
for (const [k, raw] of Object.entries(obj)) {
|
|
135
|
+
if (!isMarkerKey(k))
|
|
136
|
+
continue;
|
|
137
|
+
const spec = getMarker(k);
|
|
138
|
+
if (!spec?.objectHandler)
|
|
139
|
+
continue;
|
|
140
|
+
const patch = spec.objectHandler(raw);
|
|
141
|
+
for (const [pk, pv] of Object.entries(patch)) {
|
|
142
|
+
if (overwrite || !(pk in base))
|
|
143
|
+
base[pk] = pv;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return base;
|
|
147
|
+
}
|
|
148
|
+
return node;
|
|
149
|
+
};
|
|
150
|
+
const nextArgs = visit(op.args);
|
|
151
|
+
return { ...op, args: nextArgs };
|
|
152
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function createDefaultOpState(op) {
|
|
2
|
+
return {
|
|
3
|
+
operationId: op.id,
|
|
4
|
+
group: op.execution?.group ?? op.id,
|
|
5
|
+
providerId: null,
|
|
6
|
+
status: 'init',
|
|
7
|
+
startTime: null,
|
|
8
|
+
endTime: null,
|
|
9
|
+
exitCode: null,
|
|
10
|
+
logs: [],
|
|
11
|
+
errors: [],
|
|
12
|
+
diagnostics: {
|
|
13
|
+
reason: {
|
|
14
|
+
hostShutDown: false,
|
|
15
|
+
jobStopped: false,
|
|
16
|
+
jobExpired: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JobDefinition, Operation, OperationType } from '@nosana/sdk';
|
|
2
|
+
import { Flow } from '@nosana/sdk';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the initial flow structure for a given job.
|
|
5
|
+
*
|
|
6
|
+
* This sets up the default flow object with placeholder metadata and default op states.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createInitialFlow(jobId: string, project: string, definition: JobDefinition, operations: Operation<OperationType>[], status: string, timestamp: number, error?: Error | unknown): Flow;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createDefaultOpState } from './createDefaultOpState.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the initial flow structure for a given job.
|
|
4
|
+
*
|
|
5
|
+
* This sets up the default flow object with placeholder metadata and default op states.
|
|
6
|
+
*/
|
|
7
|
+
export function createInitialFlow(jobId, project, definition, operations, status, timestamp, error) {
|
|
8
|
+
const flow = {
|
|
9
|
+
id: jobId,
|
|
10
|
+
jobDefinition: definition,
|
|
11
|
+
project,
|
|
12
|
+
state: {
|
|
13
|
+
status,
|
|
14
|
+
startTime: timestamp,
|
|
15
|
+
endTime: null,
|
|
16
|
+
secrets: {},
|
|
17
|
+
opStates: operations.map(createDefaultOpState),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
if (error) {
|
|
21
|
+
flow.state.errors = [error instanceof Error ? error.message : error];
|
|
22
|
+
}
|
|
23
|
+
return flow;
|
|
24
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import TaskManager, { TaskLog } from '../TaskManager.js';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
export declare function addLog(this: TaskManager, log: TaskLog): void;
|
|
4
|
+
export declare function getLogsByOp(this: TaskManager, opId: string): TaskLog[];
|
|
5
|
+
export declare function getLogsByGroup(this: TaskManager, group: string): TaskLog[];
|
|
6
|
+
export declare function getAllLogs(this: TaskManager): TaskLog[];
|
|
7
|
+
export declare function subscribe(this: TaskManager, ws: WebSocket, matcher: (log: TaskLog) => boolean): void;
|
|
8
|
+
export declare function unsubscribe(this: TaskManager, ws: WebSocket): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const MAX_LOGS_PER_OP = 10000000;
|
|
2
|
+
// Ensure strictly increasing timestamps per TaskManager to avoid mis-ordered logs
|
|
3
|
+
const lastTimestampByTask = new WeakMap();
|
|
4
|
+
export function addLog(log) {
|
|
5
|
+
// Normalize timestamp to be strictly increasing per TaskManager instance
|
|
6
|
+
const prev = lastTimestampByTask.get(this) || 0;
|
|
7
|
+
if (typeof log.timestamp !== 'number' || !isFinite(log.timestamp)) {
|
|
8
|
+
log.timestamp = prev + 1;
|
|
9
|
+
}
|
|
10
|
+
else if (log.timestamp <= prev) {
|
|
11
|
+
log.timestamp = prev + 1;
|
|
12
|
+
}
|
|
13
|
+
lastTimestampByTask.set(this, log.timestamp);
|
|
14
|
+
if (!this.opLogBuffers.has(log.opId)) {
|
|
15
|
+
this.opLogBuffers.set(log.opId, []);
|
|
16
|
+
}
|
|
17
|
+
const buffer = this.opLogBuffers.get(log.opId);
|
|
18
|
+
buffer.push(log);
|
|
19
|
+
if (buffer.length > MAX_LOGS_PER_OP)
|
|
20
|
+
buffer.shift();
|
|
21
|
+
for (const ws of this.subscribers) {
|
|
22
|
+
const matcher = this.logMatchers.get(ws);
|
|
23
|
+
if (matcher && matcher(log)) {
|
|
24
|
+
try {
|
|
25
|
+
ws.send(JSON.stringify({ path: 'flog', data: JSON.stringify(log) }));
|
|
26
|
+
}
|
|
27
|
+
catch (_) { }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function getLogsByOp(opId) {
|
|
32
|
+
return this.opLogBuffers.get(opId) || [];
|
|
33
|
+
}
|
|
34
|
+
export function getLogsByGroup(group) {
|
|
35
|
+
const logs = [];
|
|
36
|
+
for (const buffer of this.opLogBuffers.values()) {
|
|
37
|
+
logs.push(...buffer.filter((log) => log.group === group));
|
|
38
|
+
}
|
|
39
|
+
return logs;
|
|
40
|
+
}
|
|
41
|
+
export function getAllLogs() {
|
|
42
|
+
return Array.from(this.opLogBuffers.values()).flat();
|
|
43
|
+
}
|
|
44
|
+
export function subscribe(ws, matcher) {
|
|
45
|
+
this.subscribers.add(ws);
|
|
46
|
+
this.logMatchers.set(ws, matcher);
|
|
47
|
+
ws.on('close', () => {
|
|
48
|
+
unsubscribe.call(this, ws);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function unsubscribe(ws) {
|
|
52
|
+
this.subscribers.delete(ws);
|
|
53
|
+
this.logMatchers.delete(ws);
|
|
54
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import TaskManager from '../TaskManager.js';
|
|
2
|
+
export declare function getOperationsStatus(this: TaskManager): Record<string, string>;
|
|
3
|
+
export declare function getOperationStatus(this: TaskManager, id: string): Record<string, string | null>;
|
|
4
|
+
export declare function getCurrentGroup(this: TaskManager): string | undefined;
|
|
5
|
+
export declare function getCurrentGroupStatus(this: TaskManager): Record<string, string | null>;
|
|
6
|
+
export declare function getGroupStatus(this: TaskManager, group: string): Record<string, string | null>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function getOperationsStatus() {
|
|
2
|
+
return Object.fromEntries(this.operationStatus);
|
|
3
|
+
}
|
|
4
|
+
export function getOperationStatus(id) {
|
|
5
|
+
const status = this.operationStatus.get(id);
|
|
6
|
+
return {
|
|
7
|
+
[id]: status ?? null,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function getCurrentGroup() {
|
|
11
|
+
return this.currentGroup;
|
|
12
|
+
}
|
|
13
|
+
export function getCurrentGroupStatus() {
|
|
14
|
+
const record = {};
|
|
15
|
+
const group = this.currentGroup;
|
|
16
|
+
const context = this.executionPlan.find((ctx) => ctx.group === group);
|
|
17
|
+
if (!context)
|
|
18
|
+
return record;
|
|
19
|
+
for (const opId of context.ops) {
|
|
20
|
+
record[opId] = this.operationStatus.get(opId) ?? null;
|
|
21
|
+
}
|
|
22
|
+
return record;
|
|
23
|
+
}
|
|
24
|
+
export function getGroupStatus(group) {
|
|
25
|
+
const record = {};
|
|
26
|
+
const context = this.executionPlan.find((ctx) => ctx.group === group);
|
|
27
|
+
if (!context)
|
|
28
|
+
return record;
|
|
29
|
+
for (const opId of context.ops) {
|
|
30
|
+
record[opId] = this.operationStatus.get(opId) ?? null;
|
|
31
|
+
}
|
|
32
|
+
return record;
|
|
33
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export async function moveTaskManagerGroupOperations(group) {
|
|
2
|
+
/**
|
|
3
|
+
* Look up the group context to get its operation IDs.
|
|
4
|
+
* If the group doesn't exist in the execution plan, it's invalid.
|
|
5
|
+
*/
|
|
6
|
+
const groupContext = this.executionPlan.find((ctx) => ctx.group === group);
|
|
7
|
+
if (!groupContext) {
|
|
8
|
+
throw new Error('GROUP_NOT_FOUND');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Ensure we're currently within the provided group context before proceeding.
|
|
12
|
+
* Prevents stopping inactive or completed groups.
|
|
13
|
+
*/
|
|
14
|
+
if (this.currentGroup == group) {
|
|
15
|
+
throw new Error('GROUP_ACTIVE');
|
|
16
|
+
}
|
|
17
|
+
const currentGroupContext = this.executionPlan.find((ctx) => ctx.group === this.currentGroup);
|
|
18
|
+
if (!currentGroupContext) {
|
|
19
|
+
throw new Error('GROUP_NOT_FOUND');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The following block creates a "placeholder promise" that we temporarily insert into the group’s
|
|
23
|
+
* operation map. This ensures that even if all the original ops complete while we're restarting,
|
|
24
|
+
* the group will not advance to the next one until we explicitly release this block.
|
|
25
|
+
*
|
|
26
|
+
* This is CRITICAL to prevent race conditions where the restart is too late, and the system
|
|
27
|
+
* thinks the group has completed.
|
|
28
|
+
*/
|
|
29
|
+
const groupHold = (() => {
|
|
30
|
+
let release;
|
|
31
|
+
const placeholder = new Promise((res) => (release = res));
|
|
32
|
+
const abortHandler = () => {
|
|
33
|
+
release();
|
|
34
|
+
this.mainAbortController.signal.removeEventListener('abort', abortHandler);
|
|
35
|
+
};
|
|
36
|
+
this.mainAbortController.signal.addEventListener('abort', abortHandler);
|
|
37
|
+
return {
|
|
38
|
+
groupHoldPromisePlaceHolder: placeholder,
|
|
39
|
+
releaseGroupOperationBlock: () => {
|
|
40
|
+
release();
|
|
41
|
+
this.mainAbortController.signal.removeEventListener('abort', abortHandler);
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
// Use a special ID to register this placeholder in the group tracking map
|
|
46
|
+
// The op will still retain its original ID for restart purposes
|
|
47
|
+
const placeholderId = `${group}::restart-group`;
|
|
48
|
+
this.trackGroupOperationPromise(placeholderId, groupHold.groupHoldPromisePlaceHolder);
|
|
49
|
+
if (this.currentGroup) {
|
|
50
|
+
await this.stopTaskManagerGroupOperations(this.currentGroup);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* update the current group to the group we about to start
|
|
54
|
+
*/
|
|
55
|
+
this.currentGroup = group;
|
|
56
|
+
/**
|
|
57
|
+
* restart the new current group
|
|
58
|
+
*/
|
|
59
|
+
await this.restartTaskManagerGroupOperations(group);
|
|
60
|
+
/**
|
|
61
|
+
* Now that we've re-launched the op and it's being tracked,
|
|
62
|
+
* we can safely release the group hold so the group can eventually complete.
|
|
63
|
+
*/
|
|
64
|
+
groupHold.releaseGroupOperationBlock();
|
|
65
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import TaskManager from '../TaskManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Restarts all operations in the given group sequentially.
|
|
4
|
+
*
|
|
5
|
+
* This method:
|
|
6
|
+
* - Validates the group exists and is active
|
|
7
|
+
* - Iterates through ops one-by-one, restarting each in order
|
|
8
|
+
* - If any restart fails, it logs and continues to the next op
|
|
9
|
+
*/
|
|
10
|
+
export declare function restartTaskManagerGroupOperations(this: TaskManager, group: string): Promise<void>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restarts all operations in the given group sequentially.
|
|
3
|
+
*
|
|
4
|
+
* This method:
|
|
5
|
+
* - Validates the group exists and is active
|
|
6
|
+
* - Iterates through ops one-by-one, restarting each in order
|
|
7
|
+
* - If any restart fails, it logs and continues to the next op
|
|
8
|
+
*/
|
|
9
|
+
export async function restartTaskManagerGroupOperations(group) {
|
|
10
|
+
/**
|
|
11
|
+
* Look up the group and its operation list.
|
|
12
|
+
* If the group doesn't exist in the plan, it's invalid.
|
|
13
|
+
*/
|
|
14
|
+
const groupContext = this.executionPlan.find((ctx) => ctx.group === group);
|
|
15
|
+
if (!groupContext) {
|
|
16
|
+
throw new Error('GROUP_NOT_FOUND');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Ensure the provided group is currently active.
|
|
20
|
+
* Restarting ops from inactive or future groups is not allowed.
|
|
21
|
+
*/
|
|
22
|
+
if (this.currentGroup !== group) {
|
|
23
|
+
throw new Error('GROUP_NOT_ACTIVE');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Restart each operation one at a time.
|
|
27
|
+
* If any restart fails, log and continue.
|
|
28
|
+
*/
|
|
29
|
+
for (const id of groupContext.ops) {
|
|
30
|
+
try {
|
|
31
|
+
await this.restartTaskManagerOperation(group, id);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.warn(`Failed to restart operation ${id}:`, err);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import TaskManager from '../TaskManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Restarts a single operation (`opId`) within the currently running group (`group`).
|
|
4
|
+
*
|
|
5
|
+
* This function is meant to be rebound to a `TaskManager` instance using `.bind(this)`, so it can
|
|
6
|
+
* interact with all internal state and methods just like a native class method.
|
|
7
|
+
*
|
|
8
|
+
* The restart process:
|
|
9
|
+
* - Aborts the operation's current execution
|
|
10
|
+
* - Waits for its cleanup to complete
|
|
11
|
+
* - Holds the group's completion to avoid premature advancement
|
|
12
|
+
* - Re-executes the same operation within the current group
|
|
13
|
+
*/
|
|
14
|
+
export declare function restartTaskManagerOperation(this: TaskManager, group: string, opId: string): Promise<void>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { OperationProgressStatuses } from '../TaskManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Restarts a single operation (`opId`) within the currently running group (`group`).
|
|
4
|
+
*
|
|
5
|
+
* This function is meant to be rebound to a `TaskManager` instance using `.bind(this)`, so it can
|
|
6
|
+
* interact with all internal state and methods just like a native class method.
|
|
7
|
+
*
|
|
8
|
+
* The restart process:
|
|
9
|
+
* - Aborts the operation's current execution
|
|
10
|
+
* - Waits for its cleanup to complete
|
|
11
|
+
* - Holds the group's completion to avoid premature advancement
|
|
12
|
+
* - Re-executes the same operation within the current group
|
|
13
|
+
*/
|
|
14
|
+
export async function restartTaskManagerOperation(group, opId) {
|
|
15
|
+
/**
|
|
16
|
+
* Check if the provided group actually exists in the execution plan.
|
|
17
|
+
* If not, it likely means the group name is invalid or not registered.
|
|
18
|
+
*/
|
|
19
|
+
const groupExists = this.executionPlan.some((ctx) => ctx.group === group);
|
|
20
|
+
if (!groupExists)
|
|
21
|
+
throw new Error(`GROUP_NOT_FOUND`);
|
|
22
|
+
/**
|
|
23
|
+
* Only allow restart if the group is the one currently being executed.
|
|
24
|
+
* This prevents restarting ops from already-finished groups or future ones.
|
|
25
|
+
*/
|
|
26
|
+
if (this.currentGroup !== group) {
|
|
27
|
+
throw new Error('GROUP_NOT_ACTIVE');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* If the operation is already in the process of being restarted or stopped,
|
|
31
|
+
* we don't want to allow another concurrent mutation.
|
|
32
|
+
*/
|
|
33
|
+
if (this.lockedOperations.has(opId)) {
|
|
34
|
+
throw new Error(`OPERATION_${this.lockedOperations.get(opId)}`);
|
|
35
|
+
}
|
|
36
|
+
// Mark this op as "RESTARTING" so no one else touches it mid-process
|
|
37
|
+
this.lockedOperations.set(opId, 'RESTARTING');
|
|
38
|
+
this.operationStatus.set(opId, OperationProgressStatuses.RESTARTING);
|
|
39
|
+
const emitter = this.operationsEventEmitters.get(opId);
|
|
40
|
+
if (emitter) {
|
|
41
|
+
emitter.emit('log', 'Restarting Operation', 'info');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the controller used to abort this operation's execution.
|
|
45
|
+
* This should have been set up when the op was first started.
|
|
46
|
+
*/
|
|
47
|
+
const controller = this.abortControllerMap.get(opId);
|
|
48
|
+
/**
|
|
49
|
+
* The following block creates a "placeholder promise" that we temporarily insert into the group’s
|
|
50
|
+
* operation map. This ensures that even if all the original ops complete while we're restarting,
|
|
51
|
+
* the group will not advance to the next one until we explicitly release this block.
|
|
52
|
+
*
|
|
53
|
+
* This is CRITICAL to prevent race conditions where the restart is too late, and the system
|
|
54
|
+
* thinks the group has completed.
|
|
55
|
+
*/
|
|
56
|
+
const groupHold = (() => {
|
|
57
|
+
let release;
|
|
58
|
+
const placeholder = new Promise((res) => (release = res));
|
|
59
|
+
const abortHandler = () => {
|
|
60
|
+
release();
|
|
61
|
+
this.mainAbortController.signal.removeEventListener('abort', abortHandler);
|
|
62
|
+
};
|
|
63
|
+
this.mainAbortController.signal.addEventListener('abort', abortHandler);
|
|
64
|
+
return {
|
|
65
|
+
groupHoldPromisePlaceHolder: placeholder,
|
|
66
|
+
releaseGroupOperationBlock: () => {
|
|
67
|
+
release();
|
|
68
|
+
this.mainAbortController.signal.removeEventListener('abort', abortHandler);
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
})();
|
|
72
|
+
// Use a special ID to register this placeholder in the group tracking map
|
|
73
|
+
// The op will still retain its original ID for restart purposes
|
|
74
|
+
const placeholderId = `${opId}::restart-block`;
|
|
75
|
+
this.trackGroupOperationPromise(placeholderId, groupHold.groupHoldPromisePlaceHolder);
|
|
76
|
+
// Abort the currently running operation
|
|
77
|
+
// This should trigger container teardown, logs finalization, and state updates
|
|
78
|
+
controller?.abort('restart');
|
|
79
|
+
/**
|
|
80
|
+
* If the operation had already started, wait for it to finish fully (even if it failed).
|
|
81
|
+
* This avoids stomping over any still-pending teardown work.
|
|
82
|
+
*/
|
|
83
|
+
const originalPromise = this.currentGroupOperationsPromises.get(opId);
|
|
84
|
+
if (originalPromise) {
|
|
85
|
+
try {
|
|
86
|
+
await originalPromise;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// We intentionally ignore any error here.
|
|
90
|
+
// Our goal is just to make sure the cleanup is finished, not whether it succeeded.
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Now that the original op has been stopped, we need to restart it.
|
|
95
|
+
* Get the latest flow data from storage — this could’ve been updated elsewhere in the meantime.
|
|
96
|
+
*/
|
|
97
|
+
const flow = this.repository.getFlow(this.job);
|
|
98
|
+
/**
|
|
99
|
+
* Look up the original operation details.
|
|
100
|
+
* This should always exist unless something went very wrong.
|
|
101
|
+
*/
|
|
102
|
+
const op = this.opMap.get(opId);
|
|
103
|
+
if (!op)
|
|
104
|
+
throw new Error(`INVALID_OPID`);
|
|
105
|
+
/**
|
|
106
|
+
* Re-register the operation for execution and begin tracking it again.
|
|
107
|
+
* This effectively restarts the operation from scratch.
|
|
108
|
+
*/
|
|
109
|
+
this.currentGroupOperationsPromises.set(opId, this.trackGroupOperationPromise(opId, this.setUpOperationFunc(flow, opId, [])));
|
|
110
|
+
/**
|
|
111
|
+
* Now that we've re-launched the op and it's being tracked,
|
|
112
|
+
* we can safely release the group hold so the group can eventually complete.
|
|
113
|
+
*/
|
|
114
|
+
groupHold.releaseGroupOperationBlock();
|
|
115
|
+
// Finally, unlock the operation so other calls (like restart or stop) can act on it again
|
|
116
|
+
this.lockedOperations.delete(opId);
|
|
117
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Operation, OperationType } from '@nosana/sdk';
|
|
2
|
+
import TaskManager from '../TaskManager.js';
|
|
3
|
+
import { Flow } from '@nosana/sdk';
|
|
4
|
+
/**
|
|
5
|
+
* Executes a full lifecycle of a container-based operation using internal class state.
|
|
6
|
+
*
|
|
7
|
+
* This function is intended to be bound to a `TaskManager` instance using `.bind(this)`.
|
|
8
|
+
* It handles:
|
|
9
|
+
* - Setup
|
|
10
|
+
* - Log streaming
|
|
11
|
+
* - Abort controller registration
|
|
12
|
+
* - Container execution
|
|
13
|
+
* - Exit/error handling
|
|
14
|
+
* - Cleanup
|
|
15
|
+
*
|
|
16
|
+
* It uses internal state like `this.repository`, `this.provider`, `this.job`, etc.,
|
|
17
|
+
* and serves as the core execution driver for all operations.
|
|
18
|
+
*
|
|
19
|
+
* Keeps lifecycle doc comments in sync with original `setUpOperationFunc`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function runTaskManagerOperation(this: TaskManager, flow: Flow, op: Operation<OperationType>, dependent: string[]): Promise<void>;
|