@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,31 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { parse as parseYaml, stringify as toYaml } from 'yaml';
|
|
4
|
+
/**
|
|
5
|
+
* Converts a YAML string to a JSON-compatible object.
|
|
6
|
+
*/
|
|
7
|
+
export function yamlToJson(yamlString) {
|
|
8
|
+
return parseYaml(yamlString);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Converts a JSON-compatible object to a YAML string.
|
|
12
|
+
*/
|
|
13
|
+
export function jsonToYaml(obj) {
|
|
14
|
+
return toYaml(obj);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Loads a job definition file (YAML or JSON) and returns the parsed object.
|
|
18
|
+
*/
|
|
19
|
+
export function loadJobDefinitionFromFile(filePath) {
|
|
20
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
21
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
22
|
+
if (ext === '.yaml' || ext === '.yml') {
|
|
23
|
+
return yamlToJson(raw);
|
|
24
|
+
}
|
|
25
|
+
else if (ext === '.json') {
|
|
26
|
+
return JSON.parse(raw);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error(`Unsupported file extension: ${ext}. Expected .json, .yaml or .yml`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const isPrivate = (job) => {
|
|
2
|
+
return job.ops.some((op) => {
|
|
3
|
+
if (op.type !== 'container/run')
|
|
4
|
+
return false;
|
|
5
|
+
const args = op.args;
|
|
6
|
+
const expose = args.expose;
|
|
7
|
+
const isExposed = (Array.isArray(expose) && expose.length > 0) ||
|
|
8
|
+
typeof expose === 'number';
|
|
9
|
+
return isExposed && args.private === true;
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
export const isExposed = (job) => {
|
|
13
|
+
return job.ops.some((op) => {
|
|
14
|
+
if (op.type !== 'container/run')
|
|
15
|
+
return false;
|
|
16
|
+
const expose = op.args.expose;
|
|
17
|
+
return ((Array.isArray(expose) && expose.length > 0) || typeof expose === 'number');
|
|
18
|
+
});
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function promiseTimeoutWrapper<T extends unknown>(promise: Promise<T>, expiry_time: number, abortController: AbortController): Promise<T>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function promiseTimeoutWrapper(promise, expiry_time, abortController) {
|
|
2
|
+
const timeoutError = new Error('Promise took too long to settle, expiry timeout met.');
|
|
3
|
+
const timer = setTimeout(() => {
|
|
4
|
+
abortController.abort();
|
|
5
|
+
}, expiry_time * 1000);
|
|
6
|
+
if (abortController.signal.aborted) {
|
|
7
|
+
return Promise.reject(timeoutError);
|
|
8
|
+
}
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const onSettled = () => {
|
|
11
|
+
clearTimeout(timer);
|
|
12
|
+
abortController.signal.removeEventListener('abort', abortHandler);
|
|
13
|
+
};
|
|
14
|
+
const abortHandler = () => {
|
|
15
|
+
onSettled();
|
|
16
|
+
reject(timeoutError);
|
|
17
|
+
};
|
|
18
|
+
abortController.signal.addEventListener('abort', abortHandler);
|
|
19
|
+
promise
|
|
20
|
+
.then((value) => resolve(value))
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
abortController.abort();
|
|
23
|
+
reject(error);
|
|
24
|
+
})
|
|
25
|
+
.finally(onSettled);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Method to pause the process
|
|
3
|
+
* @param seconds Number of seconds to pause
|
|
4
|
+
*/
|
|
5
|
+
declare const sleep: (seconds: number) => Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Method to easily get a universal timestamp
|
|
8
|
+
*/
|
|
9
|
+
declare const now: () => number;
|
|
10
|
+
declare function askYesNoQuestion(question: string, onYes: () => Promise<void>, onNo: () => void): Promise<void>;
|
|
11
|
+
declare const clearLine: () => void;
|
|
12
|
+
declare const colors: {
|
|
13
|
+
RED: string;
|
|
14
|
+
GREEN: string;
|
|
15
|
+
YELLOW: string;
|
|
16
|
+
BLUE: string;
|
|
17
|
+
CYAN: string;
|
|
18
|
+
WHITE: string;
|
|
19
|
+
RESET: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Method to test and cast strings into string arrays
|
|
23
|
+
* @param {string | string[]} value The string or string array being tested and casted
|
|
24
|
+
* @returns { string[] } Returns a string array
|
|
25
|
+
*/
|
|
26
|
+
declare const ifStringCastToArray: (value: string | string[]) => string[];
|
|
27
|
+
declare function logTable(data: any): void;
|
|
28
|
+
declare function isNodeOnboarded(status: string): boolean;
|
|
29
|
+
declare const SECONDS_PER_DAY: number;
|
|
30
|
+
export { logTable, now, sleep, clearLine, askYesNoQuestion, colors, ifStringCastToArray, SECONDS_PER_DAY, isNodeOnboarded, };
|
|
31
|
+
/**
|
|
32
|
+
* Loads the configuration value for a given environment variable key.
|
|
33
|
+
* Throws an error at runtime if the environment variable is not set.
|
|
34
|
+
*
|
|
35
|
+
* @param {string} key - The name of the environment variable to retrieve.
|
|
36
|
+
* @return {string} The value of the specified environment variable.
|
|
37
|
+
* @throws {Error} If the environment variable is not defined.
|
|
38
|
+
*/
|
|
39
|
+
export declare function loadConfigurationValue(key: string): string;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Console } from 'console';
|
|
2
|
+
import { Transform } from 'stream';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
/**
|
|
5
|
+
* Method to pause the process
|
|
6
|
+
* @param seconds Number of seconds to pause
|
|
7
|
+
*/
|
|
8
|
+
const sleep = (seconds) => new Promise((res) => setTimeout(res, seconds * 1e3));
|
|
9
|
+
/**
|
|
10
|
+
* Method to easily get a universal timestamp
|
|
11
|
+
*/
|
|
12
|
+
const now = () => Math.floor(Date.now() / 1e3);
|
|
13
|
+
async function askYesNoQuestion(question, onYes, onNo) {
|
|
14
|
+
return inquirer
|
|
15
|
+
.prompt([
|
|
16
|
+
{
|
|
17
|
+
type: 'input',
|
|
18
|
+
name: 'confirm',
|
|
19
|
+
message: question,
|
|
20
|
+
default: 'y',
|
|
21
|
+
validate: (input) => {
|
|
22
|
+
const lowerInput = input.toLowerCase();
|
|
23
|
+
if (lowerInput === 'y' ||
|
|
24
|
+
lowerInput === 'yes' ||
|
|
25
|
+
lowerInput === 'n' ||
|
|
26
|
+
lowerInput === 'no') {
|
|
27
|
+
return true; // Valid input
|
|
28
|
+
}
|
|
29
|
+
return 'Please enter "y" or "yes" for yes or "n" or "no" for no.'; // Repeat question if invalid
|
|
30
|
+
},
|
|
31
|
+
filter: (input) => input.toLowerCase(), // Normalize input to lowercase
|
|
32
|
+
},
|
|
33
|
+
])
|
|
34
|
+
.then((answers) => {
|
|
35
|
+
if (answers.confirm === 'y' || answers.confirm === 'yes') {
|
|
36
|
+
return onYes();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
onNo();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const clearLine = () => {
|
|
44
|
+
process.stdout.moveCursor(0, -1); // up one line
|
|
45
|
+
process.stdout.clearLine(1); // from cursor to end
|
|
46
|
+
};
|
|
47
|
+
const colors = {
|
|
48
|
+
RED: '\u001b[1;31m',
|
|
49
|
+
GREEN: '\u001b[1;32m',
|
|
50
|
+
YELLOW: '\u001b[1;33m',
|
|
51
|
+
BLUE: '\u001b[1;34m',
|
|
52
|
+
CYAN: '\u001b[1;36m',
|
|
53
|
+
WHITE: '\u001b[1;38;5;231m',
|
|
54
|
+
RESET: '\u001b[0m',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Method to test and cast strings into string arrays
|
|
58
|
+
* @param {string | string[]} value The string or string array being tested and casted
|
|
59
|
+
* @returns { string[] } Returns a string array
|
|
60
|
+
*/
|
|
61
|
+
const ifStringCastToArray = (value) => typeof value === 'string' ? [value] : value;
|
|
62
|
+
function logTable(data) {
|
|
63
|
+
if (data && data.length > 0) {
|
|
64
|
+
const ts = new Transform({
|
|
65
|
+
transform(chunk, enc, cb) {
|
|
66
|
+
cb(null, chunk);
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const logger = new Console({ stdout: ts });
|
|
70
|
+
logger.table(data);
|
|
71
|
+
const table = (ts.read() || '').toString();
|
|
72
|
+
let result = '';
|
|
73
|
+
for (let row of table.split(/[\r\n]+/)) {
|
|
74
|
+
let r = row.replace(/[^┬]*┬/, '┌');
|
|
75
|
+
r = r.replace(/^├─*┼/, '├');
|
|
76
|
+
r = r.replace(/│[^│]*/, '');
|
|
77
|
+
r = r.replace(/^└─*┴/, '└');
|
|
78
|
+
r = r.replace(/'/g, ' ');
|
|
79
|
+
result += `${r}\n`;
|
|
80
|
+
}
|
|
81
|
+
console.log(result);
|
|
82
|
+
clearLine();
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log('[]');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function isNodeOnboarded(status) {
|
|
89
|
+
return ['ONBOARDED', 'PREMIUM'].includes(status);
|
|
90
|
+
}
|
|
91
|
+
const SECONDS_PER_DAY = 24 * 60 * 60;
|
|
92
|
+
export { logTable, now, sleep, clearLine, askYesNoQuestion, colors, ifStringCastToArray, SECONDS_PER_DAY, isNodeOnboarded, };
|
|
93
|
+
/**
|
|
94
|
+
* Loads the configuration value for a given environment variable key.
|
|
95
|
+
* Throws an error at runtime if the environment variable is not set.
|
|
96
|
+
*
|
|
97
|
+
* @param {string} key - The name of the environment variable to retrieve.
|
|
98
|
+
* @return {string} The value of the specified environment variable.
|
|
99
|
+
* @throws {Error} If the environment variable is not defined.
|
|
100
|
+
*/
|
|
101
|
+
export function loadConfigurationValue(key) {
|
|
102
|
+
let value = process.env[key];
|
|
103
|
+
if (!value) {
|
|
104
|
+
throw new Error(`Missing environment variable ${key}`);
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function isWSLHost(systemEnvironment: string): boolean;
|
|
2
|
+
export declare function isWSLBlockActive(): boolean;
|
|
3
|
+
export declare function displayWSLWarning(): void;
|
|
4
|
+
export declare function displayWSLBlockMessage(): void;
|
|
5
|
+
export declare class WSLBlockedError extends Error {
|
|
6
|
+
constructor();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Check WSL status and handle warning/blocking
|
|
10
|
+
*
|
|
11
|
+
* @param systemEnvironment - The system_environment value from specs
|
|
12
|
+
* @throws WSLBlockedError if WSL host and block date has passed
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkWSLStatus(systemEnvironment: string): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
const WSL_QUEUE_BLOCK_DATE = new Date('2025-12-15T00:00:00Z');
|
|
3
|
+
export function isWSLHost(systemEnvironment) {
|
|
4
|
+
if (!systemEnvironment)
|
|
5
|
+
return false;
|
|
6
|
+
return systemEnvironment.toLowerCase().includes('wsl');
|
|
7
|
+
}
|
|
8
|
+
export function isWSLBlockActive() {
|
|
9
|
+
return new Date() >= WSL_QUEUE_BLOCK_DATE;
|
|
10
|
+
}
|
|
11
|
+
export function displayWSLWarning() {
|
|
12
|
+
console.log('');
|
|
13
|
+
console.log(chalk.bgYellow.black.bold(' ⚠️ WSL DEPRECATION WARNING '));
|
|
14
|
+
console.log('');
|
|
15
|
+
console.log(chalk.yellow('WSL hosts are being removed from the Nosana network.'));
|
|
16
|
+
console.log('');
|
|
17
|
+
console.log(chalk.yellow(`• ${chalk.bold('December 15, 2025')}: WSL hosts will be blocked from joining the queue`));
|
|
18
|
+
console.log(chalk.yellow(`• ${chalk.bold('January 15, 2026')}: Premium market keys for WSL hosts will be revoked`));
|
|
19
|
+
console.log('');
|
|
20
|
+
console.log(chalk.yellow('Please migrate to a native Linux installation to continue participating in the network.'));
|
|
21
|
+
console.log('');
|
|
22
|
+
}
|
|
23
|
+
export function displayWSLBlockMessage() {
|
|
24
|
+
console.log('');
|
|
25
|
+
console.log(chalk.bgRed.white.bold(' 🚫 WSL HOST BLOCKED '));
|
|
26
|
+
console.log('');
|
|
27
|
+
console.log(chalk.red(`WSL hosts have been blocked from the queue since ${chalk.bold('December 15, 2025')}.`));
|
|
28
|
+
console.log(chalk.red(`Premium market keys for WSL hosts will be revoked on ${chalk.bold('January 15, 2026')}.`));
|
|
29
|
+
console.log('');
|
|
30
|
+
console.log(chalk.red('Please migrate to a native Linux installation to continue participating in the network.'));
|
|
31
|
+
console.log('');
|
|
32
|
+
}
|
|
33
|
+
export class WSLBlockedError extends Error {
|
|
34
|
+
constructor() {
|
|
35
|
+
super('WSL hosts are no longer allowed to join the queue');
|
|
36
|
+
this.name = 'WSLBlockedError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check WSL status and handle warning/blocking
|
|
41
|
+
*
|
|
42
|
+
* @param systemEnvironment - The system_environment value from specs
|
|
43
|
+
* @throws WSLBlockedError if WSL host and block date has passed
|
|
44
|
+
*/
|
|
45
|
+
export function checkWSLStatus(systemEnvironment) {
|
|
46
|
+
if (!isWSLHost(systemEnvironment)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (isWSLBlockActive()) {
|
|
50
|
+
displayWSLBlockMessage();
|
|
51
|
+
throw new WSLBlockedError();
|
|
52
|
+
}
|
|
53
|
+
displayWSLWarning();
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { addressCommand } from '../command';
|
|
2
|
+
import { getAddress } from '../action';
|
|
3
|
+
vi.mock('../action', () => ({
|
|
4
|
+
getAddress: vi.fn(),
|
|
5
|
+
}));
|
|
6
|
+
describe('addressCommand', () => {
|
|
7
|
+
const mock_getAddress_action = vi.fn();
|
|
8
|
+
const parseArgs = ['node', 'get', 'run command'];
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
mock_getAddress_action.mockReset();
|
|
11
|
+
getAddress.mockImplementation(mock_getAddress_action);
|
|
12
|
+
});
|
|
13
|
+
it('should call run action', () => {
|
|
14
|
+
addressCommand.parse(parseArgs);
|
|
15
|
+
expect(mock_getAddress_action).toHaveBeenCalledTimes(1);
|
|
16
|
+
});
|
|
17
|
+
it('should set post job args', () => {
|
|
18
|
+
addressCommand.parse(parseArgs);
|
|
19
|
+
expect(addressCommand.args[0]).toBe('run command');
|
|
20
|
+
});
|
|
21
|
+
it('should have 2 options', () => {
|
|
22
|
+
expect(addressCommand.options.length).toBe(2);
|
|
23
|
+
});
|
|
24
|
+
it.each([
|
|
25
|
+
['--network', '-n', 'mainnet'],
|
|
26
|
+
['--wallet', '-w', '~/.nosana/nosana_key.json'],
|
|
27
|
+
])('should have %s option', (long, short, defaultValue) => {
|
|
28
|
+
const option = addressCommand.options.find((i) => i.long === long);
|
|
29
|
+
expect(option?.long).toBe(long);
|
|
30
|
+
expect(option?.short).toBe(short);
|
|
31
|
+
expect(option?.defaultValue).toBe(defaultValue);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { program } from 'commander';
|
|
2
|
+
import { getAddress } from './action.js';
|
|
3
|
+
import { networkOption, walletOption } from '../sharedOptions/index.js';
|
|
4
|
+
export const addressCommand = program
|
|
5
|
+
.command('address')
|
|
6
|
+
.description('Print your public key address')
|
|
7
|
+
.addOption(walletOption)
|
|
8
|
+
.addOption(networkOption)
|
|
9
|
+
.action(getAddress);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import { nodeCommand } from './node/index.js';
|
|
3
|
+
import { addressCommand } from './address/command.js';
|
|
4
|
+
import { OUTPUT_EVENTS } from '../output-formatter/outputEvents.js';
|
|
5
|
+
import { outputFormatArgumentParser } from '../output-formatter/outputFormatArgumentParser.js';
|
|
6
|
+
import { outputFormatSelector } from '../output-formatter/outputFormatSelector.js';
|
|
7
|
+
import { setSDK } from '../NodeManager/sdk/index.js';
|
|
8
|
+
import { configs } from '../NodeManager/configs/configs.js';
|
|
9
|
+
import { NodeConfigsSingleton } from '../NodeManager/configs/NodeConfigs.js';
|
|
10
|
+
export const createNosanaCLI = (version) => new Command()
|
|
11
|
+
.name('nosana-node')
|
|
12
|
+
.description('Nosana Node')
|
|
13
|
+
.version(version)
|
|
14
|
+
.configureHelp({ showGlobalOptions: true })
|
|
15
|
+
.hook('preSubcommand', async (_, actionCommand) => {
|
|
16
|
+
outputFormatSelector(outputFormatArgumentParser(actionCommand.parent?.args ?? [])).output(OUTPUT_EVENTS.OUTPUT_HEADER_LOGO, { text: 'Nosana' });
|
|
17
|
+
})
|
|
18
|
+
.hook('preAction', async (command, actionCommand) => {
|
|
19
|
+
const opts = actionCommand.optsWithGlobals();
|
|
20
|
+
NodeConfigsSingleton.getInstance(opts);
|
|
21
|
+
let market = opts.market;
|
|
22
|
+
if (opts.network || opts.wallet) {
|
|
23
|
+
await setSDK(opts.network, opts.rpc, market, opts.wallet, actionCommand.opts());
|
|
24
|
+
}
|
|
25
|
+
const isNodeRun = command.args[0] === 'node' && command.args[1] === 'run';
|
|
26
|
+
configs({ ...opts, isNodeRun });
|
|
27
|
+
})
|
|
28
|
+
.addOption(new Option('--log <logLevel>', 'Log level')
|
|
29
|
+
.default('debug')
|
|
30
|
+
.choices(['info', 'none', 'debug', 'trace']))
|
|
31
|
+
.addCommand(nodeCommand)
|
|
32
|
+
.addCommand(addressCommand);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startCLI(version: string): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createNosanaCLI } from './createNosanaCli.js';
|
|
2
|
+
import { outputFormatSelector } from '../output-formatter/outputFormatSelector.js';
|
|
3
|
+
import { validateCLIVersion } from '../version/index.js';
|
|
4
|
+
export async function startCLI(version) {
|
|
5
|
+
const cli = createNosanaCLI(version);
|
|
6
|
+
try {
|
|
7
|
+
await validateCLIVersion();
|
|
8
|
+
await cli.parseAsync(process.argv);
|
|
9
|
+
outputFormatSelector('').finalize();
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
outputFormatSelector('').finalize();
|
|
13
|
+
console.error(e);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { nodeCommand } from '../';
|
|
2
|
+
describe('nodeCommand', () => {
|
|
3
|
+
it('should have only three commands', () => {
|
|
4
|
+
expect(nodeCommand.commands.length).toBe(3);
|
|
5
|
+
});
|
|
6
|
+
it.each([['run'], ['start'], ['prune']])('should contain %s command', (command) => {
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
expect(nodeCommand.commands.map((command) => command._name)).toContain(command);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { program } from 'commander';
|
|
2
|
+
import { runNodeCommand } from './run/command.js';
|
|
3
|
+
import { startNodeCommand } from './start/command.js';
|
|
4
|
+
import { nodePruneCommand } from './prune/command.js';
|
|
5
|
+
export * from './run/command.js';
|
|
6
|
+
export * from './start/command.js';
|
|
7
|
+
export * from './prune/command.js';
|
|
8
|
+
export const nodeCommand = program
|
|
9
|
+
.command('node')
|
|
10
|
+
.addCommand(nodePruneCommand)
|
|
11
|
+
.addCommand(runNodeCommand)
|
|
12
|
+
.addCommand(startNodeCommand);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DB } from '../../../NodeManager/db/index.js';
|
|
2
|
+
import { ResourceManager } from '../../../NodeManager/node/resource/resourceManager.js';
|
|
3
|
+
import { selectContainerOrchestrationProvider } from '../../../NodeManager/provider/containerOrchestration/selectContainerOrchestration.js';
|
|
4
|
+
import { NodeRepository } from '../../../NodeManager/repository/NodeRepository.js';
|
|
5
|
+
export * from './action.js';
|
|
6
|
+
export async function pruneResources(options) {
|
|
7
|
+
try {
|
|
8
|
+
const db = new DB(options.config).db;
|
|
9
|
+
const repository = new NodeRepository(db);
|
|
10
|
+
const containerOrchestration = selectContainerOrchestrationProvider(options.provider, options.podman, options.gpu);
|
|
11
|
+
const resourceManager = new ResourceManager(containerOrchestration, repository);
|
|
12
|
+
await resourceManager.prune();
|
|
13
|
+
console.log('Finished pruning system');
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw new Error(`Pruning system failed: ${error}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import { pruneResources } from './action.js';
|
|
3
|
+
export const nodePruneCommand = new Command('prune')
|
|
4
|
+
.description('Safely prune none required images and resources.')
|
|
5
|
+
.addOption(new Option('--provider <provider>', 'provider used to run the job')
|
|
6
|
+
.choices(['docker', 'podman'])
|
|
7
|
+
.default('podman'))
|
|
8
|
+
.addOption(new Option('--docker, --podman <URI>', 'Podman/Docker connection URI').default('~/.nosana/podman/podman.sock'))
|
|
9
|
+
.addOption(new Option('-c, --config <path>', 'Config path (to store the flows database and other config)').default('~/.nosana/'))
|
|
10
|
+
.action(pruneResources);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { runNodeCommand } from '../command';
|
|
2
|
+
import { runJob } from '../action';
|
|
3
|
+
vi.mock('../action', () => ({
|
|
4
|
+
runJob: vi.fn(),
|
|
5
|
+
}));
|
|
6
|
+
describe('runNodeCommand', () => {
|
|
7
|
+
const mock_run_job_action = vi.fn();
|
|
8
|
+
const parseArgs = ['node', 'run', 'job definition path'];
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
mock_run_job_action.mockReset();
|
|
11
|
+
runJob.mockImplementation(mock_run_job_action);
|
|
12
|
+
});
|
|
13
|
+
it('should call runJob action', () => {
|
|
14
|
+
runNodeCommand.parse(parseArgs);
|
|
15
|
+
expect(mock_run_job_action).toHaveBeenCalledTimes(1);
|
|
16
|
+
});
|
|
17
|
+
it('should set run job args', () => {
|
|
18
|
+
runNodeCommand.parse(parseArgs);
|
|
19
|
+
expect(runNodeCommand.args[0]).toBe('job definition path');
|
|
20
|
+
});
|
|
21
|
+
it('should have 7 options', () => {
|
|
22
|
+
expect(runNodeCommand.options.length).toBe(7);
|
|
23
|
+
});
|
|
24
|
+
it.each([
|
|
25
|
+
['--provider', undefined, 'podman'],
|
|
26
|
+
['--config', '-c', '~/.nosana/'],
|
|
27
|
+
['--podman', '--docker', '~/.nosana/podman/podman.sock'],
|
|
28
|
+
['--url', undefined, undefined],
|
|
29
|
+
['--gpu', undefined, 'all'],
|
|
30
|
+
['--verbose', undefined, undefined],
|
|
31
|
+
['--wallet', '-w', '~/.nosana/nosana_key.json'],
|
|
32
|
+
])('should have %s option', (long, short, defaultValue) => {
|
|
33
|
+
const option = runNodeCommand.options.find((i) => i.long === long);
|
|
34
|
+
expect(option?.long).toBe(long);
|
|
35
|
+
expect(option?.short).toBe(short);
|
|
36
|
+
expect(option?.defaultValue).toBe(defaultValue);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import util from 'util';
|
|
2
|
+
import { createHash } from '@nosana/sdk';
|
|
3
|
+
import { Provider } from '../../../NodeManager/provider/Provider.js';
|
|
4
|
+
import { ResourceManager } from '../../../NodeManager/node/resource/resourceManager.js';
|
|
5
|
+
import { NodeRepository } from '../../../NodeManager/repository/NodeRepository.js';
|
|
6
|
+
import { DB } from '../../../NodeManager/db/index.js';
|
|
7
|
+
import { selectContainerOrchestrationProvider } from '../../../NodeManager/provider/containerOrchestration/selectContainerOrchestration.js';
|
|
8
|
+
import { log } from '../../../NodeManager/monitoring/log/NodeLog.js';
|
|
9
|
+
import { ConsoleLogger } from '../../../NodeManager/monitoring/log/console/ConsoleLogger.js';
|
|
10
|
+
import TaskManager, { StopReasons, } from '../../../NodeManager/node/task/TaskManager.js';
|
|
11
|
+
import { loadJobDefinitionFromFile } from '../../../NodeManager/utils/jobDefinitionParser.js';
|
|
12
|
+
import { generateDeploymentEndpointsTable } from './generateDeploymentEndpointsTable.js';
|
|
13
|
+
import { generateRandomId } from '../../../NodeManager/node/utils/generateRandomId.js';
|
|
14
|
+
import { getSDK } from '../../../NodeManager/sdk/index.js';
|
|
15
|
+
import { createLoggingProxy } from '../../../NodeManager/monitoring/proxy/loggingProxy.js';
|
|
16
|
+
export async function runJob(jobDefinitionFile, options) {
|
|
17
|
+
try {
|
|
18
|
+
const sdk = getSDK();
|
|
19
|
+
const jobDefinition = await resolveJobDefinition(options, jobDefinitionFile);
|
|
20
|
+
if (jobDefinition.deployment_id) {
|
|
21
|
+
jobDefinition.deployment_id = createHash(`local-${jobDefinition.deployment_id}:${sdk.solana.wallet.publicKey.toString()}`, 45);
|
|
22
|
+
generateDeploymentEndpointsTable(jobDefinition);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* set up log listening, any instance can listen to log produces from the node
|
|
26
|
+
* the logs are produces from the log proxy
|
|
27
|
+
*/
|
|
28
|
+
log();
|
|
29
|
+
const db = new DB(options.config).db;
|
|
30
|
+
const repository = createLoggingProxy(new NodeRepository(db));
|
|
31
|
+
const containerOrchestration = selectContainerOrchestrationProvider(options.provider, options.podman, options.gpu);
|
|
32
|
+
const resourceManager = new ResourceManager(containerOrchestration, repository);
|
|
33
|
+
const provider = new Provider(containerOrchestration, repository, resourceManager);
|
|
34
|
+
const logger = new ConsoleLogger(false);
|
|
35
|
+
logger.addObserver();
|
|
36
|
+
const job = generateRandomId(32);
|
|
37
|
+
const tm = new TaskManager(provider, repository, job, sdk.solana.wallet.publicKey.toString(), jobDefinition);
|
|
38
|
+
tm.bootstrap();
|
|
39
|
+
const exitHandler = async () => {
|
|
40
|
+
await tm.stop(StopReasons.STOPPED);
|
|
41
|
+
};
|
|
42
|
+
process.on('SIGINT', exitHandler); // Handle Ctrl+C
|
|
43
|
+
process.on('SIGTERM', exitHandler); // Handle termination signals
|
|
44
|
+
await tm.start();
|
|
45
|
+
const result = repository.getFlowState(job);
|
|
46
|
+
console.log('\nResult: ', util.inspect(result, { showHidden: false, depth: null, colors: true }));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const formattedError = `
|
|
50
|
+
========== ERROR ==========
|
|
51
|
+
Timestamp: ${new Date().toISOString()}
|
|
52
|
+
Error Name: ${error.name || 'Unknown Error'}
|
|
53
|
+
Message: ${error.message || 'No message available'}${options.verbose
|
|
54
|
+
? `
|
|
55
|
+
Trace: ${error.stack ?? error.trace}`
|
|
56
|
+
: ''}
|
|
57
|
+
============================
|
|
58
|
+
`;
|
|
59
|
+
console.error(formattedError);
|
|
60
|
+
}
|
|
61
|
+
process.exit();
|
|
62
|
+
}
|
|
63
|
+
async function resolveJobDefinition(options, jobDefinitionFile) {
|
|
64
|
+
let jobDefinition;
|
|
65
|
+
if (options.url) {
|
|
66
|
+
try {
|
|
67
|
+
const data = await fetch(options.url);
|
|
68
|
+
const json = await data.json();
|
|
69
|
+
jobDefinition = json;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
throw new Error(`Failed to fetch remote job flow.\n${e}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
if (!jobDefinitionFile) {
|
|
77
|
+
throw new Error('Missing Job Definition Argument');
|
|
78
|
+
}
|
|
79
|
+
jobDefinition = loadJobDefinitionFromFile(jobDefinitionFile);
|
|
80
|
+
}
|
|
81
|
+
return jobDefinition;
|
|
82
|
+
}
|