@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
package/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Nosana NODE
|
|
2
|
+
|
|
3
|
+
The Nosana NODE is a command-line tool for interacting with the [Nosana Network](https://nosana.com), enabling users to run a Nosana Node.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Run a Node**: Set up and manage a Nosana Node.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```shell
|
|
14
|
+
$ npm install -g @nosana/node
|
|
15
|
+
|
|
16
|
+
# or install with yarn
|
|
17
|
+
$ yarn global add @nosana/node
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**HINT**\
|
|
21
|
+
Alternatively, you can use `npx` to use the node directly without installing it globally:
|
|
22
|
+
|
|
23
|
+
```shell
|
|
24
|
+
$ npx @nosana/node help
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Basic Usage
|
|
28
|
+
|
|
29
|
+
Once installed, you can invoke NODE commands directly from your OS command line through the `nosana-node` executable. See the available commands by entering the following:
|
|
30
|
+
|
|
31
|
+
```shell
|
|
32
|
+
$ nosana-node help
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
All interactions with Nosana NODE are of the form
|
|
36
|
+
|
|
37
|
+
```shell
|
|
38
|
+
$ nosana [command] [options] [argument]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Available `node` commands:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
node start [options] <market> Start Nosana Node
|
|
45
|
+
node run [options] <job-definition-file> Run Job Definition File
|
|
46
|
+
node help [command] display help for command
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Global options:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
-V, --version output the version number
|
|
53
|
+
-n, --network <network> network to run on (choices: "devnet", "mainnet", default: "mainnet")
|
|
54
|
+
--rpc <url> RPC node to use
|
|
55
|
+
--log <logLevel> Log level (choices: "info", "none", "debug", "trace", default: "debug")
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Start a Nosana Node
|
|
59
|
+
|
|
60
|
+
To get started with your Nosana Node on the Nosana Grid, you can run a node after you've installed the prerequisites with the following command:
|
|
61
|
+
|
|
62
|
+
`nosana node start [options]`
|
|
63
|
+
|
|
64
|
+
Options:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
--provider <provider> provider used to run the job (choices: "docker", "podman", default: "podman")
|
|
68
|
+
-w, --wallet <wallet> path to wallet private key (default: "~/.nosana/nosana_key.json")
|
|
69
|
+
--docker, --podman <URI> Podman/Docker connection URI (default: "~/.nosana/podman/podman.sock")
|
|
70
|
+
-h, --help display help for command
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Starting node
|
|
74
|
+
|
|
75
|
+
With the `nosana node start [options]` command you can start a Nosana Node and join the Nosana Network.
|
|
76
|
+
|
|
77
|
+
Options:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
--provider <provider> provider used to run the job (choices: "docker", "podman", default: "podman")
|
|
81
|
+
-w, --wallet <wallet> path to wallet private key (default: "~/.nosana/nosana_key.json")
|
|
82
|
+
--docker, --podman <URI> Podman/Docker connection URI (default: "~/.nosana/podman/podman.sock")
|
|
83
|
+
-h, --help display help for command
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
|
|
88
|
+
Please [visit our documentation](https://learn.nosana.com/) for a full list of commands and examples.
|
|
89
|
+
|
|
90
|
+
For technical details on how the Nosana NODE works, refer to the technical documentation:
|
|
91
|
+
|
|
92
|
+
[Technical Documentation](https://github.com/nosana-ci/nosana-node/tree/main/docs)
|
package/dist/.env
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
BACKEND_SOLANA_ADDRESS=7rFPFnxjXHC2sfDy3qrDa9pEb4j49oivMuV7e8sYDPmB
|
|
2
|
+
FRPC_CONTAINER_IMAGE=registry.hub.docker.com/nosana/frpc:v1.0.32
|
|
3
|
+
FRP_SERVER_IMAGE=registry.hub.docker.com/nosana/frpc:v1.0.32
|
|
4
|
+
FRP_SERVER_PORT=7000
|
|
5
|
+
MIN_DISK_SPACE=25
|
|
6
|
+
SIGN_MESSAGE="Hello Nosana Node!"
|
|
7
|
+
API_PORT=8123
|
package/dist/.env.dev
ADDED
package/dist/.env.prd
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import createClient from 'openapi-fetch';
|
|
2
|
+
import { configs } from '../configs/configs.js';
|
|
3
|
+
export const clientSelector = () => {
|
|
4
|
+
let instance = undefined;
|
|
5
|
+
if (!instance) {
|
|
6
|
+
instance = createClient({
|
|
7
|
+
baseUrl: configs().backendUrl?.replace('/api', '') || '',
|
|
8
|
+
headers: {
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return instance;
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class NodeConfigs {
|
|
2
|
+
private options;
|
|
3
|
+
constructor(options: {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
});
|
|
6
|
+
loadVariablesToEnv(): void;
|
|
7
|
+
}
|
|
8
|
+
export declare class NodeConfigsSingleton {
|
|
9
|
+
private static instance;
|
|
10
|
+
private constructor();
|
|
11
|
+
static getInstance(options?: {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
}): NodeConfigs;
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import { dirname, resolve } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
export class NodeConfigs {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.options = options;
|
|
7
|
+
}
|
|
8
|
+
loadVariablesToEnv() {
|
|
9
|
+
const network = this.options.network ? this.options.network : 'mainnet';
|
|
10
|
+
const env = network === 'mainnet' ? 'prd' : 'dev';
|
|
11
|
+
const modulePath = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
// Load .env.${env} first (higher priority)
|
|
13
|
+
dotenv.config({
|
|
14
|
+
path: [
|
|
15
|
+
resolve(modulePath, `../../../.env.${env}`),
|
|
16
|
+
resolve(modulePath, `../../../.env`),
|
|
17
|
+
],
|
|
18
|
+
});
|
|
19
|
+
// System env vars have highest priority (never overwritten due to default override: false)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class NodeConfigsSingleton {
|
|
23
|
+
constructor() { }
|
|
24
|
+
static getInstance(options) {
|
|
25
|
+
if (!NodeConfigsSingleton.instance) {
|
|
26
|
+
NodeConfigsSingleton.instance = new NodeConfigs(options || {});
|
|
27
|
+
NodeConfigsSingleton.instance.loadVariablesToEnv();
|
|
28
|
+
}
|
|
29
|
+
return NodeConfigsSingleton.instance;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
NodeConfigsSingleton.instance = null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import dotenv from 'dotenv';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
// Read .env files directly to avoid duplicating values
|
|
7
|
+
const modulePath = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const envBase = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env')));
|
|
9
|
+
const envDev = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env.dev')));
|
|
10
|
+
const envProd = dotenv.parse(fs.readFileSync(path.resolve(modulePath, '../../../../.env.prd')));
|
|
11
|
+
// Test constants for env variable names
|
|
12
|
+
const ENV_VAR_BACKEND_SOLANA_ADDRESS = 'BACKEND_SOLANA_ADDRESS';
|
|
13
|
+
const ENV_VAR_BACKEND_URL = 'BACKEND_URL';
|
|
14
|
+
const ENV_VAR_MIN_DISK_SPACE = 'MIN_DISK_SPACE';
|
|
15
|
+
const DEVNET = 'devnet';
|
|
16
|
+
const MAINNET = 'mainnet';
|
|
17
|
+
describe('NodeConfigs', () => {
|
|
18
|
+
let originalEnv;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
originalEnv = { ...process.env };
|
|
21
|
+
vi.resetModules();
|
|
22
|
+
// Clear all relevant env vars to ensure clean state
|
|
23
|
+
delete process.env.APP_ENV;
|
|
24
|
+
delete process.env.NODE_ENV;
|
|
25
|
+
delete process.env.BACKEND_URL;
|
|
26
|
+
delete process.env.BACKEND_SOLANA_ADDRESS;
|
|
27
|
+
delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
|
|
28
|
+
delete process.env.EXPLORER_URL;
|
|
29
|
+
delete process.env.SIGN_MESSAGE;
|
|
30
|
+
delete process.env.FRP_SERVER_ADDRESS;
|
|
31
|
+
delete process.env.FRP_SERVER_PORT;
|
|
32
|
+
delete process.env.FRPC_CONTAINER_IMAGE;
|
|
33
|
+
delete process.env.FRP_SERVER_IMAGE;
|
|
34
|
+
delete process.env.API_PORT;
|
|
35
|
+
delete process.env.MIN_DISK_SPACE;
|
|
36
|
+
});
|
|
37
|
+
afterEach(() => {
|
|
38
|
+
process.env = originalEnv;
|
|
39
|
+
});
|
|
40
|
+
describe('dotenv file merging', () => {
|
|
41
|
+
it('should load common variables from base .env file', async () => {
|
|
42
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
43
|
+
const nodeConfigs = new NodeConfigs({ network: MAINNET });
|
|
44
|
+
nodeConfigs.loadVariablesToEnv();
|
|
45
|
+
expect(process.env[ENV_VAR_BACKEND_SOLANA_ADDRESS]).toBe(envBase[ENV_VAR_BACKEND_SOLANA_ADDRESS]);
|
|
46
|
+
});
|
|
47
|
+
it('should load environment-specific variables', async () => {
|
|
48
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
49
|
+
const nodeConfigs = new NodeConfigs({ network: DEVNET });
|
|
50
|
+
nodeConfigs.loadVariablesToEnv();
|
|
51
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
|
|
52
|
+
});
|
|
53
|
+
it('should override common values with environment-specific values', async () => {
|
|
54
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
55
|
+
const nodeConfigs = new NodeConfigs({ network: DEVNET });
|
|
56
|
+
nodeConfigs.loadVariablesToEnv();
|
|
57
|
+
// MIN_DISK_SPACE exists in both .env (base) and .env.dev
|
|
58
|
+
// With override:true and env-specific file loaded last, development value should win
|
|
59
|
+
expect(process.env[ENV_VAR_MIN_DISK_SPACE]).toBe(envDev[ENV_VAR_MIN_DISK_SPACE]);
|
|
60
|
+
});
|
|
61
|
+
it('should use common value when environment-specific file does not override it', async () => {
|
|
62
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
63
|
+
const nodeConfigs = new NodeConfigs({ network: MAINNET });
|
|
64
|
+
nodeConfigs.loadVariablesToEnv();
|
|
65
|
+
// MIN_DISK_SPACE only has override in .env.dev, not in .env.prd
|
|
66
|
+
// So production should use the base .env value
|
|
67
|
+
expect(process.env[ENV_VAR_MIN_DISK_SPACE]).toBe(envBase[ENV_VAR_MIN_DISK_SPACE]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('network to environment mapping', () => {
|
|
71
|
+
it('should use prd environment for mainnet network', async () => {
|
|
72
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
73
|
+
const nodeConfigs = new NodeConfigs({ network: MAINNET });
|
|
74
|
+
nodeConfigs.loadVariablesToEnv();
|
|
75
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envProd[ENV_VAR_BACKEND_URL]);
|
|
76
|
+
});
|
|
77
|
+
it('should use dev environment for devnet network', async () => {
|
|
78
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
79
|
+
const nodeConfigs = new NodeConfigs({ network: DEVNET });
|
|
80
|
+
nodeConfigs.loadVariablesToEnv();
|
|
81
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
|
|
82
|
+
});
|
|
83
|
+
it('should use dev environment when network is not mainnet', async () => {
|
|
84
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
85
|
+
const nodeConfigs = new NodeConfigs({ network: 'testnet' });
|
|
86
|
+
nodeConfigs.loadVariablesToEnv();
|
|
87
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
|
|
88
|
+
});
|
|
89
|
+
it('should default to mainnet (prd) when network is not specified', async () => {
|
|
90
|
+
const { NodeConfigs } = await import('../NodeConfigs.js');
|
|
91
|
+
const nodeConfigs = new NodeConfigs({});
|
|
92
|
+
nodeConfigs.loadVariablesToEnv();
|
|
93
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envProd[ENV_VAR_BACKEND_URL]);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('NodeConfigsSingleton', () => {
|
|
97
|
+
it('should only call loadVariablesToEnv once across multiple getInstance calls', async () => {
|
|
98
|
+
const { NodeConfigsSingleton, NodeConfigs } = await import('../NodeConfigs.js');
|
|
99
|
+
const loadSpy = vi.spyOn(NodeConfigs.prototype, 'loadVariablesToEnv');
|
|
100
|
+
NodeConfigsSingleton.getInstance({ network: DEVNET });
|
|
101
|
+
NodeConfigsSingleton.getInstance({ network: MAINNET });
|
|
102
|
+
NodeConfigsSingleton.getInstance();
|
|
103
|
+
expect(loadSpy).toHaveBeenCalledTimes(1);
|
|
104
|
+
});
|
|
105
|
+
it('should use options from first getInstance call', async () => {
|
|
106
|
+
const { NodeConfigsSingleton } = await import('../NodeConfigs.js');
|
|
107
|
+
// First call with devnet
|
|
108
|
+
NodeConfigsSingleton.getInstance({ network: DEVNET });
|
|
109
|
+
// Subsequent calls with different options should not change the config
|
|
110
|
+
NodeConfigsSingleton.getInstance({ network: MAINNET });
|
|
111
|
+
// Should still have dev environment values from first call
|
|
112
|
+
expect(process.env[ENV_VAR_BACKEND_URL]).toBe(envDev[ENV_VAR_BACKEND_URL]);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('startup without exceptions', () => {
|
|
116
|
+
it('should load configs for mainnet without throwing when all required variables have defaults', async () => {
|
|
117
|
+
// Clear all config-related environment variables to test defaults
|
|
118
|
+
delete process.env.APP_ENV;
|
|
119
|
+
delete process.env.NODE_ENV;
|
|
120
|
+
delete process.env.BACKEND_URL;
|
|
121
|
+
delete process.env.BACKEND_SOLANA_ADDRESS;
|
|
122
|
+
delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
|
|
123
|
+
delete process.env.EXPLORER_URL;
|
|
124
|
+
delete process.env.SIGN_MESSAGE;
|
|
125
|
+
delete process.env.FRP_SERVER_ADDRESS;
|
|
126
|
+
delete process.env.FRP_SERVER_PORT;
|
|
127
|
+
delete process.env.FRPC_CONTAINER_IMAGE;
|
|
128
|
+
delete process.env.FRP_SERVER_IMAGE;
|
|
129
|
+
delete process.env.API_PORT;
|
|
130
|
+
delete process.env.MIN_DISK_SPACE;
|
|
131
|
+
// Attempt to load configs - should not throw
|
|
132
|
+
const { configs } = await import('../configs.js');
|
|
133
|
+
const config = configs({ network: MAINNET });
|
|
134
|
+
// Verify config object exists and has expected properties
|
|
135
|
+
expect(config).toBeDefined();
|
|
136
|
+
expect(config.network).toBe(MAINNET);
|
|
137
|
+
});
|
|
138
|
+
it('should load configs for devnet without throwing when all required variables have defaults', async () => {
|
|
139
|
+
// Clear all config-related environment variables to test defaults
|
|
140
|
+
delete process.env.APP_ENV;
|
|
141
|
+
delete process.env.NODE_ENV;
|
|
142
|
+
delete process.env.BACKEND_URL;
|
|
143
|
+
delete process.env.BACKEND_SOLANA_ADDRESS;
|
|
144
|
+
delete process.env.BACKEND_AUTHORIZATION_ADDRESS;
|
|
145
|
+
delete process.env.EXPLORER_URL;
|
|
146
|
+
delete process.env.SIGN_MESSAGE;
|
|
147
|
+
delete process.env.FRP_SERVER_ADDRESS;
|
|
148
|
+
delete process.env.FRP_SERVER_PORT;
|
|
149
|
+
delete process.env.FRPC_CONTAINER_IMAGE;
|
|
150
|
+
delete process.env.FRP_SERVER_IMAGE;
|
|
151
|
+
delete process.env.API_PORT;
|
|
152
|
+
delete process.env.MIN_DISK_SPACE;
|
|
153
|
+
// Attempt to load configs - should not throw
|
|
154
|
+
const { configs } = await import('../configs.js');
|
|
155
|
+
const config = configs({ network: DEVNET });
|
|
156
|
+
// Verify config object exists and has expected properties
|
|
157
|
+
expect(config).toBeDefined();
|
|
158
|
+
expect(config.network).toBe(DEVNET);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type configType = {
|
|
2
|
+
isNodeRun: boolean;
|
|
3
|
+
backendUrl: string;
|
|
4
|
+
backendSolanaAddress: string;
|
|
5
|
+
backendAuthorizationAddress: string;
|
|
6
|
+
explorerUrl: string;
|
|
7
|
+
signMessage: string;
|
|
8
|
+
frp: {
|
|
9
|
+
serverAddr: string;
|
|
10
|
+
serverPort: number;
|
|
11
|
+
containerImage: string;
|
|
12
|
+
};
|
|
13
|
+
api: {
|
|
14
|
+
port: number;
|
|
15
|
+
};
|
|
16
|
+
minDiskSpace: number;
|
|
17
|
+
network: 'devnet' | 'mainnet';
|
|
18
|
+
};
|
|
19
|
+
export declare const configs: (options?: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
} | undefined) => configType;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NodeConfigsSingleton } from './NodeConfigs.js';
|
|
2
|
+
import { loadConfigurationValue } from '../utils/utils.js';
|
|
3
|
+
export const configs = (options) => {
|
|
4
|
+
NodeConfigsSingleton.getInstance(options);
|
|
5
|
+
return {
|
|
6
|
+
isNodeRun: options?.isNodeRun,
|
|
7
|
+
backendUrl: loadConfigurationValue('BACKEND_URL'),
|
|
8
|
+
backendSolanaAddress: loadConfigurationValue('BACKEND_SOLANA_ADDRESS'),
|
|
9
|
+
backendAuthorizationAddress: loadConfigurationValue('BACKEND_AUTHORIZATION_ADDRESS'),
|
|
10
|
+
explorerUrl: loadConfigurationValue('EXPLORER_URL'),
|
|
11
|
+
signMessage: loadConfigurationValue('SIGN_MESSAGE'),
|
|
12
|
+
frp: {
|
|
13
|
+
serverAddr: loadConfigurationValue('FRP_SERVER_ADDRESS'),
|
|
14
|
+
serverPort: parseInt(loadConfigurationValue('FRP_SERVER_PORT')),
|
|
15
|
+
containerImage: loadConfigurationValue('FRP_SERVER_IMAGE'),
|
|
16
|
+
},
|
|
17
|
+
api: {
|
|
18
|
+
port: parseInt(loadConfigurationValue('API_PORT')),
|
|
19
|
+
},
|
|
20
|
+
minDiskSpace: parseInt(loadConfigurationValue('MIN_DISK_SPACE')),
|
|
21
|
+
network: options?.network ?? 'mainnet',
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { DB } from '../index.js';
|
|
3
|
+
vi.mock('fs');
|
|
4
|
+
vi.mock('os', () => ({
|
|
5
|
+
default: {
|
|
6
|
+
homedir: () => 'homedir',
|
|
7
|
+
},
|
|
8
|
+
}));
|
|
9
|
+
vi.mock('../../../static/index.js', () => ({
|
|
10
|
+
pkg: {
|
|
11
|
+
version: '0.0.0_TEST',
|
|
12
|
+
},
|
|
13
|
+
}));
|
|
14
|
+
describe('DB', () => {
|
|
15
|
+
const mock_mkdirSync = vi.fn();
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
fs.mkdirSync.mockImplementation((args1, args2) => mock_mkdirSync(args1, args2));
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
mock_mkdirSync.mockReset();
|
|
21
|
+
});
|
|
22
|
+
it('should create db directory and return a DB instance', () => {
|
|
23
|
+
const result = new DB('test');
|
|
24
|
+
expect(mock_mkdirSync).toHaveBeenCalledTimes(1);
|
|
25
|
+
expect(mock_mkdirSync).toHaveBeenCalledWith('test', { recursive: true });
|
|
26
|
+
expect(result.db.data).toEqual({
|
|
27
|
+
resources: {
|
|
28
|
+
images: {},
|
|
29
|
+
volumes: {},
|
|
30
|
+
},
|
|
31
|
+
flows: {},
|
|
32
|
+
info: {
|
|
33
|
+
version: '0.0.0_TEST',
|
|
34
|
+
country: '',
|
|
35
|
+
network: {
|
|
36
|
+
ip: '',
|
|
37
|
+
ping_ms: 0,
|
|
38
|
+
download_mbps: 0,
|
|
39
|
+
upload_mbps: 0,
|
|
40
|
+
},
|
|
41
|
+
system_environment: '',
|
|
42
|
+
cpu: {
|
|
43
|
+
model: '',
|
|
44
|
+
physical_cores: 0,
|
|
45
|
+
logical_cores: 0,
|
|
46
|
+
},
|
|
47
|
+
disk_gb: 0,
|
|
48
|
+
ram_mb: 0,
|
|
49
|
+
gpus: {
|
|
50
|
+
devices: [],
|
|
51
|
+
runtime_version: 0,
|
|
52
|
+
cuda_driver_version: 0,
|
|
53
|
+
nvml_driver_version: '0.0.0',
|
|
54
|
+
},
|
|
55
|
+
protocol: '',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
test('when configLocation starts with ~ should replace with os.homedir', () => {
|
|
60
|
+
new DB('~/test');
|
|
61
|
+
expect(mock_mkdirSync).toHaveBeenCalledWith('homedir/test', {
|
|
62
|
+
recursive: true,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { LowSync } from 'lowdb/lib';
|
|
2
|
+
import { Flow } from '@nosana/sdk';
|
|
3
|
+
import { CudaCheckSuccessResponse } from '../types/index.js';
|
|
4
|
+
export type NodeDb = {
|
|
5
|
+
flows: {
|
|
6
|
+
[key: string]: Flow;
|
|
7
|
+
};
|
|
8
|
+
resources: Resources;
|
|
9
|
+
info: {
|
|
10
|
+
version: string;
|
|
11
|
+
country: string;
|
|
12
|
+
network: {
|
|
13
|
+
ip: string;
|
|
14
|
+
ping_ms: number;
|
|
15
|
+
download_mbps: number;
|
|
16
|
+
upload_mbps: number;
|
|
17
|
+
};
|
|
18
|
+
system_environment: string;
|
|
19
|
+
cpu: {
|
|
20
|
+
model: string;
|
|
21
|
+
physical_cores: number;
|
|
22
|
+
logical_cores: number;
|
|
23
|
+
};
|
|
24
|
+
disk_gb: number;
|
|
25
|
+
ram_mb: number;
|
|
26
|
+
gpus: CudaCheckSuccessResponse;
|
|
27
|
+
protocol: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type Resources = {
|
|
31
|
+
images: {
|
|
32
|
+
[key: string]: ResourceHistory;
|
|
33
|
+
};
|
|
34
|
+
volumes: {
|
|
35
|
+
[key: string]: VolumeResource;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export type ResourceHistory = {
|
|
39
|
+
lastUsed: Date;
|
|
40
|
+
usage: number;
|
|
41
|
+
required: boolean;
|
|
42
|
+
isPrivate?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type VolumeResource = ResourceHistory & {
|
|
45
|
+
volume: string;
|
|
46
|
+
};
|
|
47
|
+
export declare class DB {
|
|
48
|
+
db: LowSync<NodeDb>;
|
|
49
|
+
constructor(configLocation: string);
|
|
50
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import { JSONFileSyncPreset } from 'lowdb/node';
|
|
4
|
+
import { pkg } from '../../static/index.js';
|
|
5
|
+
const initial_state = {
|
|
6
|
+
resources: {
|
|
7
|
+
images: {},
|
|
8
|
+
volumes: {},
|
|
9
|
+
},
|
|
10
|
+
flows: {},
|
|
11
|
+
info: {
|
|
12
|
+
version: pkg.version,
|
|
13
|
+
country: '',
|
|
14
|
+
network: {
|
|
15
|
+
ip: '',
|
|
16
|
+
ping_ms: 0,
|
|
17
|
+
download_mbps: 0,
|
|
18
|
+
upload_mbps: 0,
|
|
19
|
+
},
|
|
20
|
+
system_environment: '',
|
|
21
|
+
cpu: {
|
|
22
|
+
model: '',
|
|
23
|
+
physical_cores: 0,
|
|
24
|
+
logical_cores: 0,
|
|
25
|
+
},
|
|
26
|
+
disk_gb: 0,
|
|
27
|
+
ram_mb: 0,
|
|
28
|
+
gpus: {
|
|
29
|
+
devices: [],
|
|
30
|
+
runtime_version: 0,
|
|
31
|
+
cuda_driver_version: 0,
|
|
32
|
+
nvml_driver_version: '0.0.0',
|
|
33
|
+
},
|
|
34
|
+
protocol: '',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export class DB {
|
|
38
|
+
constructor(configLocation) {
|
|
39
|
+
if (configLocation[0] === '~') {
|
|
40
|
+
configLocation = configLocation.replace('~', os.homedir());
|
|
41
|
+
}
|
|
42
|
+
fs.mkdirSync(configLocation, { recursive: true });
|
|
43
|
+
this.db = JSONFileSyncPreset(`${configLocation}/nosana_db.json`, initial_state);
|
|
44
|
+
if (!this.db.data.resources) {
|
|
45
|
+
this.db.data.resources = initial_state.resources;
|
|
46
|
+
}
|
|
47
|
+
if (!this.db.data.flows) {
|
|
48
|
+
this.db.data.flows = initial_state.flows;
|
|
49
|
+
}
|
|
50
|
+
if (!this.db.data.info) {
|
|
51
|
+
this.db.data.info = initial_state.info;
|
|
52
|
+
}
|
|
53
|
+
if (this.db.data.info) {
|
|
54
|
+
this.db.data.info = { ...initial_state.info, ...this.db.data.info };
|
|
55
|
+
}
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
if (this.db.data.info.disk) {
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
delete this.db.data.info.disk; // remove old key
|
|
60
|
+
}
|
|
61
|
+
this.db.data.info.version = pkg.version;
|
|
62
|
+
this.db.write();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default class NodeManager {
|
|
2
|
+
private node;
|
|
3
|
+
private apiHandler;
|
|
4
|
+
private exiting;
|
|
5
|
+
inJobLoop: boolean;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
});
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
start(marketArg?: string): Promise<void>;
|
|
11
|
+
stop(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* clean is different from stop as it does not stop the API
|
|
14
|
+
* it doesn't quit a job or leave a market, it just clears instances from the handlers
|
|
15
|
+
*/
|
|
16
|
+
clean(): Promise<void>;
|
|
17
|
+
restart(marketArg?: string): Promise<void>;
|
|
18
|
+
delay(sec: number): Promise<void>;
|
|
19
|
+
error(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Set up handling for process exit signals
|
|
22
|
+
*/
|
|
23
|
+
private handleProcessExit;
|
|
24
|
+
}
|