@orbytautomation/engine 0.1.0
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 +0 -0
- package/dist/adapters/AdapterRegistry.d.ts +129 -0
- package/dist/adapters/AdapterRegistry.d.ts.map +1 -0
- package/dist/adapters/AdapterRegistry.js +236 -0
- package/dist/adapters/AdapterRegistry.js.map +1 -0
- package/dist/adapters/StepAdapter.d.ts +2 -0
- package/dist/adapters/StepAdapter.d.ts.map +1 -0
- package/dist/adapters/StepAdapter.js +2 -0
- package/dist/adapters/StepAdapter.js.map +1 -0
- package/dist/adapters/WorkflowAdapter.d.ts +2 -0
- package/dist/adapters/WorkflowAdapter.d.ts.map +1 -0
- package/dist/adapters/WorkflowAdapter.js +2 -0
- package/dist/adapters/WorkflowAdapter.js.map +1 -0
- package/dist/adapters/builtins/CLIAdapter.d.ts +38 -0
- package/dist/adapters/builtins/CLIAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/CLIAdapter.js +173 -0
- package/dist/adapters/builtins/CLIAdapter.js.map +1 -0
- package/dist/adapters/builtins/CLICommandResolver.d.ts +49 -0
- package/dist/adapters/builtins/CLICommandResolver.d.ts.map +1 -0
- package/dist/adapters/builtins/CLICommandResolver.js +63 -0
- package/dist/adapters/builtins/CLICommandResolver.js.map +1 -0
- package/dist/adapters/builtins/CLIResultParser.d.ts +61 -0
- package/dist/adapters/builtins/CLIResultParser.d.ts.map +1 -0
- package/dist/adapters/builtins/CLIResultParser.js +113 -0
- package/dist/adapters/builtins/CLIResultParser.js.map +1 -0
- package/dist/adapters/builtins/ConnectionManager.d.ts +106 -0
- package/dist/adapters/builtins/ConnectionManager.d.ts.map +1 -0
- package/dist/adapters/builtins/ConnectionManager.js +162 -0
- package/dist/adapters/builtins/ConnectionManager.js.map +1 -0
- package/dist/adapters/builtins/Consumer.d.ts +110 -0
- package/dist/adapters/builtins/Consumer.d.ts.map +1 -0
- package/dist/adapters/builtins/Consumer.js +113 -0
- package/dist/adapters/builtins/Consumer.js.map +1 -0
- package/dist/adapters/builtins/DBAdapter.d.ts +79 -0
- package/dist/adapters/builtins/DBAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/DBAdapter.js +259 -0
- package/dist/adapters/builtins/DBAdapter.js.map +1 -0
- package/dist/adapters/builtins/EnvResolver.d.ts +66 -0
- package/dist/adapters/builtins/EnvResolver.d.ts.map +1 -0
- package/dist/adapters/builtins/EnvResolver.js +121 -0
- package/dist/adapters/builtins/EnvResolver.js.map +1 -0
- package/dist/adapters/builtins/FSAdapter.d.ts +50 -0
- package/dist/adapters/builtins/FSAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/FSAdapter.js +282 -0
- package/dist/adapters/builtins/FSAdapter.js.map +1 -0
- package/dist/adapters/builtins/FileResolver.d.ts +50 -0
- package/dist/adapters/builtins/FileResolver.d.ts.map +1 -0
- package/dist/adapters/builtins/FileResolver.js +77 -0
- package/dist/adapters/builtins/FileResolver.js.map +1 -0
- package/dist/adapters/builtins/HTTPAdapter.d.ts +58 -0
- package/dist/adapters/builtins/HTTPAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/HTTPAdapter.js +213 -0
- package/dist/adapters/builtins/HTTPAdapter.js.map +1 -0
- package/dist/adapters/builtins/HTTPRequestBuilder.d.ts +95 -0
- package/dist/adapters/builtins/HTTPRequestBuilder.d.ts.map +1 -0
- package/dist/adapters/builtins/HTTPRequestBuilder.js +159 -0
- package/dist/adapters/builtins/HTTPRequestBuilder.js.map +1 -0
- package/dist/adapters/builtins/HTTPResponseParser.d.ts +74 -0
- package/dist/adapters/builtins/HTTPResponseParser.d.ts.map +1 -0
- package/dist/adapters/builtins/HTTPResponseParser.js +144 -0
- package/dist/adapters/builtins/HTTPResponseParser.js.map +1 -0
- package/dist/adapters/builtins/PathSecurityPolicy.d.ts +38 -0
- package/dist/adapters/builtins/PathSecurityPolicy.d.ts.map +1 -0
- package/dist/adapters/builtins/PathSecurityPolicy.js +125 -0
- package/dist/adapters/builtins/PathSecurityPolicy.js.map +1 -0
- package/dist/adapters/builtins/Producer.d.ts +99 -0
- package/dist/adapters/builtins/Producer.d.ts.map +1 -0
- package/dist/adapters/builtins/Producer.js +59 -0
- package/dist/adapters/builtins/Producer.js.map +1 -0
- package/dist/adapters/builtins/QueryExecutor.d.ts +102 -0
- package/dist/adapters/builtins/QueryExecutor.d.ts.map +1 -0
- package/dist/adapters/builtins/QueryExecutor.js +90 -0
- package/dist/adapters/builtins/QueryExecutor.js.map +1 -0
- package/dist/adapters/builtins/QueueAdapter.d.ts +72 -0
- package/dist/adapters/builtins/QueueAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/QueueAdapter.js +209 -0
- package/dist/adapters/builtins/QueueAdapter.js.map +1 -0
- package/dist/adapters/builtins/SecretProvider.d.ts +69 -0
- package/dist/adapters/builtins/SecretProvider.d.ts.map +1 -0
- package/dist/adapters/builtins/SecretProvider.js +71 -0
- package/dist/adapters/builtins/SecretProvider.js.map +1 -0
- package/dist/adapters/builtins/SecretsAdapter.d.ts +48 -0
- package/dist/adapters/builtins/SecretsAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/SecretsAdapter.js +154 -0
- package/dist/adapters/builtins/SecretsAdapter.js.map +1 -0
- package/dist/adapters/builtins/ShellAdapter.d.ts +46 -0
- package/dist/adapters/builtins/ShellAdapter.d.ts.map +1 -0
- package/dist/adapters/builtins/ShellAdapter.js +200 -0
- package/dist/adapters/builtins/ShellAdapter.js.map +1 -0
- package/dist/adapters/builtins/ShellExecutor.d.ts +72 -0
- package/dist/adapters/builtins/ShellExecutor.d.ts.map +1 -0
- package/dist/adapters/builtins/ShellExecutor.js +94 -0
- package/dist/adapters/builtins/ShellExecutor.js.map +1 -0
- package/dist/adapters/builtins/ShellSecurityPolicy.d.ts +58 -0
- package/dist/adapters/builtins/ShellSecurityPolicy.d.ts.map +1 -0
- package/dist/adapters/builtins/ShellSecurityPolicy.js +135 -0
- package/dist/adapters/builtins/ShellSecurityPolicy.js.map +1 -0
- package/dist/adapters/builtins/index.d.ts +27 -0
- package/dist/adapters/builtins/index.d.ts.map +1 -0
- package/dist/adapters/builtins/index.js +35 -0
- package/dist/adapters/builtins/index.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +6 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/automation/BackoffStrategy.d.ts +106 -0
- package/dist/automation/BackoffStrategy.d.ts.map +1 -0
- package/dist/automation/BackoffStrategy.js +168 -0
- package/dist/automation/BackoffStrategy.js.map +1 -0
- package/dist/automation/FailureStrategy.d.ts +141 -0
- package/dist/automation/FailureStrategy.d.ts.map +1 -0
- package/dist/automation/FailureStrategy.js +246 -0
- package/dist/automation/FailureStrategy.js.map +1 -0
- package/dist/automation/RetryPolicy.d.ts +132 -0
- package/dist/automation/RetryPolicy.d.ts.map +1 -0
- package/dist/automation/RetryPolicy.js +241 -0
- package/dist/automation/RetryPolicy.js.map +1 -0
- package/dist/automation/TimeoutManager.d.ts +145 -0
- package/dist/automation/TimeoutManager.d.ts.map +1 -0
- package/dist/automation/TimeoutManager.js +241 -0
- package/dist/automation/TimeoutManager.js.map +1 -0
- package/dist/automation/index.d.ts +16 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +16 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/runtime/BackoffTimer.d.ts +74 -0
- package/dist/automation/runtime/BackoffTimer.d.ts.map +1 -0
- package/dist/automation/runtime/BackoffTimer.js +139 -0
- package/dist/automation/runtime/BackoffTimer.js.map +1 -0
- package/dist/automation/runtime/FailureHandler.d.ts +138 -0
- package/dist/automation/runtime/FailureHandler.d.ts.map +1 -0
- package/dist/automation/runtime/FailureHandler.js +197 -0
- package/dist/automation/runtime/FailureHandler.js.map +1 -0
- package/dist/automation/runtime/RetryExecutor.d.ts +104 -0
- package/dist/automation/runtime/RetryExecutor.d.ts.map +1 -0
- package/dist/automation/runtime/RetryExecutor.js +173 -0
- package/dist/automation/runtime/RetryExecutor.js.map +1 -0
- package/dist/automation/runtime/index.d.ts +13 -0
- package/dist/automation/runtime/index.d.ts.map +1 -0
- package/dist/automation/runtime/index.js +13 -0
- package/dist/automation/runtime/index.js.map +1 -0
- package/dist/context/ContextStore.d.ts +185 -0
- package/dist/context/ContextStore.d.ts.map +1 -0
- package/dist/context/ContextStore.js +228 -0
- package/dist/context/ContextStore.js.map +1 -0
- package/dist/context/VariableResolver.d.ts +184 -0
- package/dist/context/VariableResolver.d.ts.map +1 -0
- package/dist/context/VariableResolver.js +368 -0
- package/dist/context/VariableResolver.js.map +1 -0
- package/dist/context/index.d.ts +17 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +17 -0
- package/dist/context/index.js.map +1 -0
- package/dist/core/EngineConfig.d.ts +156 -0
- package/dist/core/EngineConfig.d.ts.map +1 -0
- package/dist/core/EngineConfig.js +61 -0
- package/dist/core/EngineConfig.js.map +1 -0
- package/dist/core/EngineContext.d.ts +94 -0
- package/dist/core/EngineContext.d.ts.map +1 -0
- package/dist/core/EngineContext.js +29 -0
- package/dist/core/EngineContext.js.map +1 -0
- package/dist/core/OrbytEngine.d.ts +234 -0
- package/dist/core/OrbytEngine.d.ts.map +1 -0
- package/dist/core/OrbytEngine.js +421 -0
- package/dist/core/OrbytEngine.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/errors/ErrorCodes.d.ts +71 -0
- package/dist/errors/ErrorCodes.d.ts.map +1 -0
- package/dist/errors/ErrorCodes.js +95 -0
- package/dist/errors/ErrorCodes.js.map +1 -0
- package/dist/errors/ErrorFormatter.d.ts +34 -0
- package/dist/errors/ErrorFormatter.d.ts.map +1 -0
- package/dist/errors/ErrorFormatter.js +140 -0
- package/dist/errors/ErrorFormatter.js.map +1 -0
- package/dist/errors/FieldRegistry.d.ts +83 -0
- package/dist/errors/FieldRegistry.d.ts.map +1 -0
- package/dist/errors/FieldRegistry.js +217 -0
- package/dist/errors/FieldRegistry.js.map +1 -0
- package/dist/errors/OrbytError.d.ts +59 -0
- package/dist/errors/OrbytError.d.ts.map +1 -0
- package/dist/errors/OrbytError.js +78 -0
- package/dist/errors/OrbytError.js.map +1 -0
- package/dist/errors/SchedulerError.d.ts +2 -0
- package/dist/errors/SchedulerError.d.ts.map +1 -0
- package/dist/errors/SchedulerError.js +2 -0
- package/dist/errors/SchedulerError.js.map +1 -0
- package/dist/errors/StepError.d.ts +2 -0
- package/dist/errors/StepError.d.ts.map +1 -0
- package/dist/errors/StepError.js +2 -0
- package/dist/errors/StepError.js.map +1 -0
- package/dist/errors/TypoDetector.d.ts +36 -0
- package/dist/errors/TypoDetector.d.ts.map +1 -0
- package/dist/errors/TypoDetector.js +109 -0
- package/dist/errors/TypoDetector.js.map +1 -0
- package/dist/errors/WorkflowError.d.ts +54 -0
- package/dist/errors/WorkflowError.d.ts.map +1 -0
- package/dist/errors/WorkflowError.js +129 -0
- package/dist/errors/WorkflowError.js.map +1 -0
- package/dist/errors/index.d.ts +14 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +17 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/EngineEvents.d.ts +143 -0
- package/dist/events/EngineEvents.d.ts.map +1 -0
- package/dist/events/EngineEvents.js +60 -0
- package/dist/events/EngineEvents.js.map +1 -0
- package/dist/events/EventBus.d.ts +112 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/events/EventBus.js +177 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/execution/ExecutionEngine.d.ts +220 -0
- package/dist/execution/ExecutionEngine.d.ts.map +1 -0
- package/dist/execution/ExecutionEngine.js +442 -0
- package/dist/execution/ExecutionEngine.js.map +1 -0
- package/dist/execution/ExecutionNode.d.ts +114 -0
- package/dist/execution/ExecutionNode.d.ts.map +1 -0
- package/dist/execution/ExecutionNode.js +99 -0
- package/dist/execution/ExecutionNode.js.map +1 -0
- package/dist/execution/ExecutionPlan.d.ts +133 -0
- package/dist/execution/ExecutionPlan.d.ts.map +1 -0
- package/dist/execution/ExecutionPlan.js +207 -0
- package/dist/execution/ExecutionPlan.js.map +1 -0
- package/dist/execution/StepExecutor.d.ts +204 -0
- package/dist/execution/StepExecutor.d.ts.map +1 -0
- package/dist/execution/StepExecutor.js +604 -0
- package/dist/execution/StepExecutor.js.map +1 -0
- package/dist/execution/WorkflowExecutor.d.ts +129 -0
- package/dist/execution/WorkflowExecutor.d.ts.map +1 -0
- package/dist/execution/WorkflowExecutor.js +347 -0
- package/dist/execution/WorkflowExecutor.js.map +1 -0
- package/dist/execution/drivers/AdapterDriver.d.ts +34 -0
- package/dist/execution/drivers/AdapterDriver.d.ts.map +1 -0
- package/dist/execution/drivers/AdapterDriver.js +63 -0
- package/dist/execution/drivers/AdapterDriver.js.map +1 -0
- package/dist/execution/drivers/DriverResolver.d.ts +91 -0
- package/dist/execution/drivers/DriverResolver.d.ts.map +1 -0
- package/dist/execution/drivers/DriverResolver.js +172 -0
- package/dist/execution/drivers/DriverResolver.js.map +1 -0
- package/dist/execution/drivers/ExecutionDriver.d.ts +127 -0
- package/dist/execution/drivers/ExecutionDriver.d.ts.map +1 -0
- package/dist/execution/drivers/ExecutionDriver.js +50 -0
- package/dist/execution/drivers/ExecutionDriver.js.map +1 -0
- package/dist/execution/drivers/index.d.ts +11 -0
- package/dist/execution/drivers/index.d.ts.map +1 -0
- package/dist/execution/drivers/index.js +11 -0
- package/dist/execution/drivers/index.js.map +1 -0
- package/dist/execution/index.d.ts +18 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +19 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/graph/CycleDetector.d.ts +90 -0
- package/dist/graph/CycleDetector.d.ts.map +1 -0
- package/dist/graph/CycleDetector.js +210 -0
- package/dist/graph/CycleDetector.js.map +1 -0
- package/dist/graph/DependencyGraph.d.ts +16 -0
- package/dist/graph/DependencyGraph.d.ts.map +1 -0
- package/dist/graph/DependencyGraph.js +16 -0
- package/dist/graph/DependencyGraph.js.map +1 -0
- package/dist/graph/DependencyResolver.d.ts +90 -0
- package/dist/graph/DependencyResolver.d.ts.map +1 -0
- package/dist/graph/DependencyResolver.js +159 -0
- package/dist/graph/DependencyResolver.js.map +1 -0
- package/dist/graph/TopologicalSorter.d.ts +104 -0
- package/dist/graph/TopologicalSorter.d.ts.map +1 -0
- package/dist/graph/TopologicalSorter.js +213 -0
- package/dist/graph/TopologicalSorter.js.map +1 -0
- package/dist/graph/index.d.ts +15 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +15 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/guards/ResourceGuard.d.ts +90 -0
- package/dist/guards/ResourceGuard.d.ts.map +1 -0
- package/dist/guards/ResourceGuard.js +177 -0
- package/dist/guards/ResourceGuard.js.map +1 -0
- package/dist/guards/StepGuard.d.ts +96 -0
- package/dist/guards/StepGuard.d.ts.map +1 -0
- package/dist/guards/StepGuard.js +184 -0
- package/dist/guards/StepGuard.js.map +1 -0
- package/dist/guards/WorkflowGuard.d.ts +71 -0
- package/dist/guards/WorkflowGuard.d.ts.map +1 -0
- package/dist/guards/WorkflowGuard.js +187 -0
- package/dist/guards/WorkflowGuard.js.map +1 -0
- package/dist/guards/index.d.ts +9 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +9 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/hooks/HookManager.d.ts +114 -0
- package/dist/hooks/HookManager.d.ts.map +1 -0
- package/dist/hooks/HookManager.js +187 -0
- package/dist/hooks/HookManager.js.map +1 -0
- package/dist/hooks/LifecycleHooks.d.ts +126 -0
- package/dist/hooks/LifecycleHooks.d.ts.map +1 -0
- package/dist/hooks/LifecycleHooks.js +23 -0
- package/dist/hooks/LifecycleHooks.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/EngineLifecycle.d.ts +121 -0
- package/dist/lifecycle/EngineLifecycle.d.ts.map +1 -0
- package/dist/lifecycle/EngineLifecycle.js +209 -0
- package/dist/lifecycle/EngineLifecycle.js.map +1 -0
- package/dist/lifecycle/ShutdownManager.d.ts +44 -0
- package/dist/lifecycle/ShutdownManager.d.ts.map +1 -0
- package/dist/lifecycle/ShutdownManager.js +105 -0
- package/dist/lifecycle/ShutdownManager.js.map +1 -0
- package/dist/lifecycle/StartupManager.d.ts +45 -0
- package/dist/lifecycle/StartupManager.d.ts.map +1 -0
- package/dist/lifecycle/StartupManager.js +97 -0
- package/dist/lifecycle/StartupManager.js.map +1 -0
- package/dist/lifecycle/index.d.ts +9 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +9 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/logging/LogLevel.d.ts +2 -0
- package/dist/logging/LogLevel.d.ts.map +1 -0
- package/dist/logging/LogLevel.js +2 -0
- package/dist/logging/LogLevel.js.map +1 -0
- package/dist/logging/Logger.d.ts +2 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +2 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +4 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/marketplace/PluginInstaller.d.ts +81 -0
- package/dist/marketplace/PluginInstaller.d.ts.map +1 -0
- package/dist/marketplace/PluginInstaller.js +89 -0
- package/dist/marketplace/PluginInstaller.js.map +1 -0
- package/dist/marketplace/PluginManifest.d.ts +74 -0
- package/dist/marketplace/PluginManifest.d.ts.map +1 -0
- package/dist/marketplace/PluginManifest.js +67 -0
- package/dist/marketplace/PluginManifest.js.map +1 -0
- package/dist/marketplace/PluginVerifier.d.ts +58 -0
- package/dist/marketplace/PluginVerifier.d.ts.map +1 -0
- package/dist/marketplace/PluginVerifier.js +93 -0
- package/dist/marketplace/PluginVerifier.js.map +1 -0
- package/dist/marketplace/index.d.ts +11 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +11 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/metrics/MetricsCollector.d.ts +2 -0
- package/dist/metrics/MetricsCollector.d.ts.map +1 -0
- package/dist/metrics/MetricsCollector.js +2 -0
- package/dist/metrics/MetricsCollector.js.map +1 -0
- package/dist/metrics/PerformanceTracker.d.ts +2 -0
- package/dist/metrics/PerformanceTracker.d.ts.map +1 -0
- package/dist/metrics/PerformanceTracker.js +2 -0
- package/dist/metrics/PerformanceTracker.js.map +1 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +4 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/parser/SchemaValidator.d.ts +63 -0
- package/dist/parser/SchemaValidator.d.ts.map +1 -0
- package/dist/parser/SchemaValidator.js +212 -0
- package/dist/parser/SchemaValidator.js.map +1 -0
- package/dist/parser/StepParser.d.ts +124 -0
- package/dist/parser/StepParser.d.ts.map +1 -0
- package/dist/parser/StepParser.js +330 -0
- package/dist/parser/StepParser.js.map +1 -0
- package/dist/parser/WorkflowParser.d.ts +124 -0
- package/dist/parser/WorkflowParser.d.ts.map +1 -0
- package/dist/parser/WorkflowParser.js +141 -0
- package/dist/parser/WorkflowParser.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +4 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/queue/InMemoryQueue.d.ts +97 -0
- package/dist/queue/InMemoryQueue.d.ts.map +1 -0
- package/dist/queue/InMemoryQueue.js +268 -0
- package/dist/queue/InMemoryQueue.js.map +1 -0
- package/dist/queue/JobQueue.d.ts +214 -0
- package/dist/queue/JobQueue.d.ts.map +1 -0
- package/dist/queue/JobQueue.js +46 -0
- package/dist/queue/JobQueue.js.map +1 -0
- package/dist/queue/index.d.ts +10 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +10 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/resolution/ActionRegistry.d.ts +2 -0
- package/dist/resolution/ActionRegistry.d.ts.map +1 -0
- package/dist/resolution/ActionRegistry.js +2 -0
- package/dist/resolution/ActionRegistry.js.map +1 -0
- package/dist/resolution/AdapterResolver.d.ts +2 -0
- package/dist/resolution/AdapterResolver.d.ts.map +1 -0
- package/dist/resolution/AdapterResolver.js +2 -0
- package/dist/resolution/AdapterResolver.js.map +1 -0
- package/dist/resolution/StepResolver.d.ts +2 -0
- package/dist/resolution/StepResolver.d.ts.map +1 -0
- package/dist/resolution/StepResolver.js +2 -0
- package/dist/resolution/StepResolver.js.map +1 -0
- package/dist/resolution/index.d.ts +2 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +2 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/scheduling/CronScheduler.d.ts +143 -0
- package/dist/scheduling/CronScheduler.d.ts.map +1 -0
- package/dist/scheduling/CronScheduler.js +370 -0
- package/dist/scheduling/CronScheduler.js.map +1 -0
- package/dist/scheduling/JobScheduler.d.ts +82 -0
- package/dist/scheduling/JobScheduler.d.ts.map +1 -0
- package/dist/scheduling/JobScheduler.js +231 -0
- package/dist/scheduling/JobScheduler.js.map +1 -0
- package/dist/scheduling/ScheduleParser.d.ts +117 -0
- package/dist/scheduling/ScheduleParser.d.ts.map +1 -0
- package/dist/scheduling/ScheduleParser.js +257 -0
- package/dist/scheduling/ScheduleParser.js.map +1 -0
- package/dist/scheduling/ScheduleTypes.d.ts +153 -0
- package/dist/scheduling/ScheduleTypes.d.ts.map +1 -0
- package/dist/scheduling/ScheduleTypes.js +81 -0
- package/dist/scheduling/ScheduleTypes.js.map +1 -0
- package/dist/scheduling/Scheduler.d.ts +154 -0
- package/dist/scheduling/Scheduler.d.ts.map +1 -0
- package/dist/scheduling/Scheduler.js +304 -0
- package/dist/scheduling/Scheduler.js.map +1 -0
- package/dist/scheduling/index.d.ts +6 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +6 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/security/PermissionPolicy.d.ts +72 -0
- package/dist/security/PermissionPolicy.d.ts.map +1 -0
- package/dist/security/PermissionPolicy.js +87 -0
- package/dist/security/PermissionPolicy.js.map +1 -0
- package/dist/security/SandboxManager.d.ts +72 -0
- package/dist/security/SandboxManager.d.ts.map +1 -0
- package/dist/security/SandboxManager.js +78 -0
- package/dist/security/SandboxManager.js.map +1 -0
- package/dist/security/index.d.ts +10 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +10 -0
- package/dist/security/index.js.map +1 -0
- package/dist/state/ExecutionState.d.ts +211 -0
- package/dist/state/ExecutionState.d.ts.map +1 -0
- package/dist/state/ExecutionState.js +256 -0
- package/dist/state/ExecutionState.js.map +1 -0
- package/dist/state/StateMachine.d.ts +120 -0
- package/dist/state/StateMachine.d.ts.map +1 -0
- package/dist/state/StateMachine.js +230 -0
- package/dist/state/StateMachine.js.map +1 -0
- package/dist/state/index.d.ts +16 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +16 -0
- package/dist/state/index.js.map +1 -0
- package/dist/storage/ExecutionStore.d.ts +2 -0
- package/dist/storage/ExecutionStore.d.ts.map +1 -0
- package/dist/storage/ExecutionStore.js +2 -0
- package/dist/storage/ExecutionStore.js.map +1 -0
- package/dist/storage/ScheduleStore.d.ts +2 -0
- package/dist/storage/ScheduleStore.d.ts.map +1 -0
- package/dist/storage/ScheduleStore.js +2 -0
- package/dist/storage/ScheduleStore.js.map +1 -0
- package/dist/storage/WorkflowStore.d.ts +2 -0
- package/dist/storage/WorkflowStore.d.ts.map +1 -0
- package/dist/storage/WorkflowStore.js +2 -0
- package/dist/storage/WorkflowStore.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/testing/EngineTestHarness.d.ts +117 -0
- package/dist/testing/EngineTestHarness.d.ts.map +1 -0
- package/dist/testing/EngineTestHarness.js +132 -0
- package/dist/testing/EngineTestHarness.js.map +1 -0
- package/dist/testing/MockAdapter.d.ts +93 -0
- package/dist/testing/MockAdapter.d.ts.map +1 -0
- package/dist/testing/MockAdapter.js +124 -0
- package/dist/testing/MockAdapter.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/triggers/CronTrigger.d.ts +2 -0
- package/dist/triggers/CronTrigger.d.ts.map +1 -0
- package/dist/triggers/CronTrigger.js +2 -0
- package/dist/triggers/CronTrigger.js.map +1 -0
- package/dist/triggers/EventTrigger.d.ts +2 -0
- package/dist/triggers/EventTrigger.d.ts.map +1 -0
- package/dist/triggers/EventTrigger.js +2 -0
- package/dist/triggers/EventTrigger.js.map +1 -0
- package/dist/triggers/ManualTrigger.d.ts +2 -0
- package/dist/triggers/ManualTrigger.d.ts.map +1 -0
- package/dist/triggers/ManualTrigger.js +2 -0
- package/dist/triggers/ManualTrigger.js.map +1 -0
- package/dist/triggers/Trigger.d.ts +2 -0
- package/dist/triggers/Trigger.d.ts.map +1 -0
- package/dist/triggers/Trigger.js +2 -0
- package/dist/triggers/Trigger.js.map +1 -0
- package/dist/triggers/index.d.ts +2 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +6 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/sources/FileWatcherTrigger.d.ts +2 -0
- package/dist/triggers/sources/FileWatcherTrigger.d.ts.map +1 -0
- package/dist/triggers/sources/FileWatcherTrigger.js +2 -0
- package/dist/triggers/sources/FileWatcherTrigger.js.map +1 -0
- package/dist/triggers/sources/MessageTrigger.d.ts +2 -0
- package/dist/triggers/sources/MessageTrigger.d.ts.map +1 -0
- package/dist/triggers/sources/MessageTrigger.js +2 -0
- package/dist/triggers/sources/MessageTrigger.js.map +1 -0
- package/dist/triggers/sources/WebhookListener.d.ts +2 -0
- package/dist/triggers/sources/WebhookListener.d.ts.map +1 -0
- package/dist/triggers/sources/WebhookListener.js +2 -0
- package/dist/triggers/sources/WebhookListener.js.map +1 -0
- package/dist/triggers/sources/index.d.ts +2 -0
- package/dist/triggers/sources/index.d.ts.map +1 -0
- package/dist/triggers/sources/index.js +2 -0
- package/dist/triggers/sources/index.js.map +1 -0
- package/dist/utils/deepMerge.d.ts +2 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/deepMerge.js +2 -0
- package/dist/utils/deepMerge.js.map +1 -0
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +2 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/safeExec.d.ts +2 -0
- package/dist/utils/safeExec.d.ts.map +1 -0
- package/dist/utils/safeExec.js +2 -0
- package/dist/utils/safeExec.js.map +1 -0
- package/dist/utils/time.d.ts +2 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +2 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/visualization/ExecutionGraphBuilder.d.ts +2 -0
- package/dist/visualization/ExecutionGraphBuilder.d.ts.map +1 -0
- package/dist/visualization/ExecutionGraphBuilder.js +2 -0
- package/dist/visualization/ExecutionGraphBuilder.js.map +1 -0
- package/dist/visualization/ExecutionTraceFormatter.d.ts +2 -0
- package/dist/visualization/ExecutionTraceFormatter.d.ts.map +1 -0
- package/dist/visualization/ExecutionTraceFormatter.js +2 -0
- package/dist/visualization/ExecutionTraceFormatter.js.map +1 -0
- package/dist/visualization/index.d.ts +2 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +2 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/workflow/Step.d.ts +2 -0
- package/dist/workflow/Step.d.ts.map +1 -0
- package/dist/workflow/Step.js +2 -0
- package/dist/workflow/Step.js.map +1 -0
- package/dist/workflow/StepContext.d.ts +2 -0
- package/dist/workflow/StepContext.d.ts.map +1 -0
- package/dist/workflow/StepContext.js +2 -0
- package/dist/workflow/StepContext.js.map +1 -0
- package/dist/workflow/StepResult.d.ts +2 -0
- package/dist/workflow/StepResult.d.ts.map +1 -0
- package/dist/workflow/StepResult.js +2 -0
- package/dist/workflow/StepResult.js.map +1 -0
- package/dist/workflow/Workflow.d.ts +2 -0
- package/dist/workflow/Workflow.d.ts.map +1 -0
- package/dist/workflow/Workflow.js +2 -0
- package/dist/workflow/Workflow.js.map +1 -0
- package/dist/workflow/WorkflowRegistry.d.ts +2 -0
- package/dist/workflow/WorkflowRegistry.d.ts.map +1 -0
- package/dist/workflow/WorkflowRegistry.js +2 -0
- package/dist/workflow/WorkflowRegistry.js.map +1 -0
- package/dist/workflow/WorkflowState.d.ts +2 -0
- package/dist/workflow/WorkflowState.d.ts.map +1 -0
- package/dist/workflow/WorkflowState.js +2 -0
- package/dist/workflow/WorkflowState.js.map +1 -0
- package/dist/workflow/index.d.ts +2 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job Scheduler
|
|
3
|
+
*
|
|
4
|
+
* Worker-based job execution system using Node.js worker_threads.
|
|
5
|
+
* Handles parallel job processing with configurable worker pool.
|
|
6
|
+
*
|
|
7
|
+
* @module scheduling
|
|
8
|
+
*/
|
|
9
|
+
import { Worker } from 'worker_threads';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import { JobPriority, createJob } from '../queue/JobQueue.js';
|
|
13
|
+
/**
|
|
14
|
+
* Job Scheduler
|
|
15
|
+
* Manages worker pool and job execution
|
|
16
|
+
*/
|
|
17
|
+
export class JobScheduler {
|
|
18
|
+
workers = [];
|
|
19
|
+
jobQueue;
|
|
20
|
+
running = false;
|
|
21
|
+
processingInterval;
|
|
22
|
+
config;
|
|
23
|
+
constructor(jobQueue, config = {}) {
|
|
24
|
+
this.jobQueue = jobQueue;
|
|
25
|
+
this.config = {
|
|
26
|
+
workerCount: config.workerCount ?? 4,
|
|
27
|
+
maxConcurrent: config.maxConcurrent ?? 10,
|
|
28
|
+
workerScriptPath: config.workerScriptPath ?? this.getDefaultWorkerPath(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get default worker script path
|
|
33
|
+
*/
|
|
34
|
+
getDefaultWorkerPath() {
|
|
35
|
+
// This will be the path to the default worker implementation
|
|
36
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
37
|
+
const __dirname = path.dirname(__filename);
|
|
38
|
+
return path.join(__dirname, 'workers', 'workflow-worker.js');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Start the job scheduler
|
|
42
|
+
*/
|
|
43
|
+
async start() {
|
|
44
|
+
if (this.running) {
|
|
45
|
+
throw new Error('JobScheduler is already running');
|
|
46
|
+
}
|
|
47
|
+
this.running = true;
|
|
48
|
+
// Initialize worker pool
|
|
49
|
+
for (let i = 0; i < this.config.workerCount; i++) {
|
|
50
|
+
this.createWorker(`worker_${i}`);
|
|
51
|
+
}
|
|
52
|
+
// Start processing loop
|
|
53
|
+
this.processingInterval = setInterval(() => this.processJobs(), 100 // Check every 100ms
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Stop the job scheduler
|
|
58
|
+
*/
|
|
59
|
+
async stop() {
|
|
60
|
+
if (!this.running) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.running = false;
|
|
64
|
+
// Stop processing interval
|
|
65
|
+
if (this.processingInterval) {
|
|
66
|
+
clearInterval(this.processingInterval);
|
|
67
|
+
this.processingInterval = undefined;
|
|
68
|
+
}
|
|
69
|
+
// Terminate all workers
|
|
70
|
+
await Promise.all(this.workers.map(async (workerState) => {
|
|
71
|
+
await workerState.worker.terminate();
|
|
72
|
+
}));
|
|
73
|
+
this.workers = [];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a worker
|
|
77
|
+
*/
|
|
78
|
+
createWorker(workerId) {
|
|
79
|
+
try {
|
|
80
|
+
const worker = new Worker(this.config.workerScriptPath, {
|
|
81
|
+
workerData: { workerId },
|
|
82
|
+
});
|
|
83
|
+
const workerState = {
|
|
84
|
+
id: workerId,
|
|
85
|
+
worker,
|
|
86
|
+
busy: false,
|
|
87
|
+
};
|
|
88
|
+
// Handle worker messages
|
|
89
|
+
worker.on('message', (message) => {
|
|
90
|
+
this.handleWorkerMessage(workerState, message);
|
|
91
|
+
});
|
|
92
|
+
// Handle worker errors
|
|
93
|
+
worker.on('error', (error) => {
|
|
94
|
+
console.error(`Worker ${workerId} error:`, error);
|
|
95
|
+
workerState.busy = false;
|
|
96
|
+
// Mark job as failed if there was one
|
|
97
|
+
if (workerState.currentJobId) {
|
|
98
|
+
this.jobQueue.markFailed(workerState.currentJobId, error);
|
|
99
|
+
workerState.currentJobId = undefined;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// Handle worker exit
|
|
103
|
+
worker.on('exit', (code) => {
|
|
104
|
+
if (code !== 0) {
|
|
105
|
+
console.error(`Worker ${workerId} exited with code ${code}`);
|
|
106
|
+
}
|
|
107
|
+
// Remove from workers array
|
|
108
|
+
const index = this.workers.findIndex(w => w.id === workerId);
|
|
109
|
+
if (index !== -1) {
|
|
110
|
+
this.workers.splice(index, 1);
|
|
111
|
+
}
|
|
112
|
+
// Recreate worker if scheduler is still running
|
|
113
|
+
if (this.running && this.workers.length < this.config.workerCount) {
|
|
114
|
+
this.createWorker(`worker_${Date.now()}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
this.workers.push(workerState);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error(`Failed to create worker ${workerId}:`, error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Handle message from worker
|
|
125
|
+
*/
|
|
126
|
+
handleWorkerMessage(workerState, message) {
|
|
127
|
+
switch (message.type) {
|
|
128
|
+
case 'ready':
|
|
129
|
+
workerState.busy = false;
|
|
130
|
+
workerState.currentJobId = undefined;
|
|
131
|
+
break;
|
|
132
|
+
case 'completed':
|
|
133
|
+
if (workerState.currentJobId) {
|
|
134
|
+
this.jobQueue.markCompleted(workerState.currentJobId, message.result);
|
|
135
|
+
}
|
|
136
|
+
workerState.busy = false;
|
|
137
|
+
workerState.currentJobId = undefined;
|
|
138
|
+
break;
|
|
139
|
+
case 'failed':
|
|
140
|
+
if (workerState.currentJobId) {
|
|
141
|
+
const error = new Error(message.error || 'Job execution failed');
|
|
142
|
+
this.jobQueue.markFailed(workerState.currentJobId, error);
|
|
143
|
+
}
|
|
144
|
+
workerState.busy = false;
|
|
145
|
+
workerState.currentJobId = undefined;
|
|
146
|
+
break;
|
|
147
|
+
case 'progress':
|
|
148
|
+
// Handle progress updates if needed
|
|
149
|
+
console.log(`Job ${workerState.currentJobId} progress:`, message.progress);
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
console.warn(`Unknown message type from worker: ${message.type}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Process pending jobs
|
|
157
|
+
*/
|
|
158
|
+
async processJobs() {
|
|
159
|
+
if (!this.running) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Find available workers
|
|
163
|
+
const availableWorkers = this.workers.filter(w => !w.busy);
|
|
164
|
+
if (availableWorkers.length === 0) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Dequeue and assign jobs to available workers
|
|
168
|
+
for (const workerState of availableWorkers) {
|
|
169
|
+
const job = await this.jobQueue.dequeue();
|
|
170
|
+
if (!job) {
|
|
171
|
+
break; // No more jobs
|
|
172
|
+
}
|
|
173
|
+
// Assign job to worker
|
|
174
|
+
workerState.busy = true;
|
|
175
|
+
workerState.currentJobId = job.id;
|
|
176
|
+
// Send job to worker
|
|
177
|
+
workerState.worker.postMessage({
|
|
178
|
+
type: 'execute',
|
|
179
|
+
job: {
|
|
180
|
+
id: job.id,
|
|
181
|
+
workflowId: job.workflowId,
|
|
182
|
+
payload: job.payload,
|
|
183
|
+
metadata: job.metadata,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Enqueue a job for execution
|
|
190
|
+
*/
|
|
191
|
+
async enqueueJob(workflowId, input, priority = JobPriority.NORMAL) {
|
|
192
|
+
const jobId = `job_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
193
|
+
const job = createJob({
|
|
194
|
+
id: jobId,
|
|
195
|
+
workflowId,
|
|
196
|
+
type: 'workflow',
|
|
197
|
+
payload: input || {},
|
|
198
|
+
priority,
|
|
199
|
+
});
|
|
200
|
+
await this.jobQueue.enqueue(job);
|
|
201
|
+
return jobId;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get job status
|
|
205
|
+
*/
|
|
206
|
+
async getJobStatus(jobId) {
|
|
207
|
+
return await this.jobQueue.getJob(jobId);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get scheduler statistics
|
|
211
|
+
*/
|
|
212
|
+
getStats() {
|
|
213
|
+
const queueStats = this.jobQueue.getStats();
|
|
214
|
+
return {
|
|
215
|
+
running: this.running,
|
|
216
|
+
workers: {
|
|
217
|
+
total: this.workers.length,
|
|
218
|
+
busy: this.workers.filter(w => w.busy).length,
|
|
219
|
+
idle: this.workers.filter(w => !w.busy).length,
|
|
220
|
+
},
|
|
221
|
+
queue: queueStats,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if scheduler is running
|
|
226
|
+
*/
|
|
227
|
+
isRunning() {
|
|
228
|
+
return this.running;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=JobScheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobScheduler.js","sourceRoot":"","sources":["../../src/scheduling/JobScheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses cron expressions and calculates next execution times.
|
|
5
|
+
* Uses node-cron package for robust cron expression handling.
|
|
6
|
+
*
|
|
7
|
+
* Format: ┌─────────────── second (optional, 0-59)
|
|
8
|
+
* │ ┌───────────── minute (0 - 59)
|
|
9
|
+
* │ │ ┌─────────── hour (0 - 23)
|
|
10
|
+
* │ │ │ ┌─────────── day of month (1 - 31)
|
|
11
|
+
* │ │ │ │ ┌───────── month (1 - 12)
|
|
12
|
+
* │ │ │ │ │ ┌─────── day of week (0 - 6) (Sunday = 0)
|
|
13
|
+
* * * * * * *
|
|
14
|
+
*
|
|
15
|
+
* @module scheduling
|
|
16
|
+
*/
|
|
17
|
+
import type { ScheduledTask } from 'node-cron';
|
|
18
|
+
/**
|
|
19
|
+
* Schedule parser for cron expressions
|
|
20
|
+
*/
|
|
21
|
+
export declare class ScheduleParser {
|
|
22
|
+
/**
|
|
23
|
+
* Validate cron expression using node-cron
|
|
24
|
+
*
|
|
25
|
+
* @param cronExpression - Cron expression to validate
|
|
26
|
+
* @returns True if valid
|
|
27
|
+
*/
|
|
28
|
+
static isValidCron(cronExpression: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate next run time from cron expression
|
|
31
|
+
* Uses a simple algorithm since node-cron doesn't provide getNextRunTime
|
|
32
|
+
*
|
|
33
|
+
* @param cronExpression - Cron expression
|
|
34
|
+
* @param from - Start time (default: now)
|
|
35
|
+
* @returns Next run time
|
|
36
|
+
*/
|
|
37
|
+
static getNextRunTime(cronExpression: string, from?: Date): Date;
|
|
38
|
+
/**
|
|
39
|
+
* Find next matching time for cron fields
|
|
40
|
+
*/
|
|
41
|
+
private static findNextMatch;
|
|
42
|
+
/**
|
|
43
|
+
* Check if value matches cron field
|
|
44
|
+
*/
|
|
45
|
+
private static matchesField;
|
|
46
|
+
/**
|
|
47
|
+
* Get multiple future run times
|
|
48
|
+
*
|
|
49
|
+
* @param cronExpression - Cron expression
|
|
50
|
+
* @param count - Number of future times to get
|
|
51
|
+
* @param from - Start time
|
|
52
|
+
* @returns Array of future run times
|
|
53
|
+
*/
|
|
54
|
+
static getNextRunTimes(cronExpression: string, count: number, from?: Date): Date[];
|
|
55
|
+
/**
|
|
56
|
+
* Parse interval string to milliseconds
|
|
57
|
+
* Supports: "5s", "10m", "2h", "1d"
|
|
58
|
+
*
|
|
59
|
+
* @param interval - Interval string
|
|
60
|
+
* @returns Milliseconds
|
|
61
|
+
*/
|
|
62
|
+
static parseInterval(interval: string): number;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate next run time for interval-based schedule
|
|
65
|
+
*
|
|
66
|
+
* @param intervalMs - Interval in milliseconds
|
|
67
|
+
* @param lastRun - Last run time
|
|
68
|
+
* @returns Next run time
|
|
69
|
+
*/
|
|
70
|
+
static getNextIntervalTime(intervalMs: number, lastRun?: Date): Date;
|
|
71
|
+
/**
|
|
72
|
+
* Describe cron expression in human-readable format
|
|
73
|
+
*
|
|
74
|
+
* @param cronExpression - Cron expression
|
|
75
|
+
* @returns Human-readable description
|
|
76
|
+
*/
|
|
77
|
+
static describeCron(cronExpression: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Create a scheduled task using node-cron
|
|
80
|
+
* Returns a scheduled task that can be started/stopped
|
|
81
|
+
*
|
|
82
|
+
* @param cronExpression - Cron expression
|
|
83
|
+
* @param callback - Function to call on schedule
|
|
84
|
+
* @param options - Cron task options
|
|
85
|
+
* @returns Scheduled task
|
|
86
|
+
*/
|
|
87
|
+
static createScheduledTask(cronExpression: string, callback: () => void | Promise<void>, options?: {
|
|
88
|
+
timezone?: string;
|
|
89
|
+
name?: string;
|
|
90
|
+
noOverlap?: boolean;
|
|
91
|
+
maxExecutions?: number;
|
|
92
|
+
}): ScheduledTask;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Common cron expressions
|
|
96
|
+
*/
|
|
97
|
+
export declare const CommonCronExpressions: {
|
|
98
|
+
/** Every minute */
|
|
99
|
+
readonly EVERY_MINUTE: "* * * * *";
|
|
100
|
+
/** Every 5 minutes */
|
|
101
|
+
readonly EVERY_5_MINUTES: "*/5 * * * *";
|
|
102
|
+
/** Every 15 minutes */
|
|
103
|
+
readonly EVERY_15_MINUTES: "*/15 * * * *";
|
|
104
|
+
/** Every 30 minutes */
|
|
105
|
+
readonly EVERY_30_MINUTES: "*/30 * * * *";
|
|
106
|
+
/** Every hour */
|
|
107
|
+
readonly EVERY_HOUR: "0 * * * *";
|
|
108
|
+
/** Every day at midnight */
|
|
109
|
+
readonly DAILY: "0 0 * * *";
|
|
110
|
+
/** Every day at noon */
|
|
111
|
+
readonly DAILY_NOON: "0 12 * * *";
|
|
112
|
+
/** Every week on Sunday at midnight */
|
|
113
|
+
readonly WEEKLY: "0 0 * * 0";
|
|
114
|
+
/** Every month on the 1st at midnight */
|
|
115
|
+
readonly MONTHLY: "0 0 1 * *";
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=ScheduleParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScheduleParser.d.ts","sourceRoot":"","sources":["../../src/scheduling/ScheduleParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAInD;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI;IAmB5E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAwC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA6C3B;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CACpB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,IAAiB,GACtB,IAAI,EAAE;IAYT;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA4B9C;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI;IAKpE;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAyBnD;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CACxB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GACA,aAAa;CASjB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC,mBAAmB;;IAGnB,sBAAsB;;IAGtB,uBAAuB;;IAGvB,uBAAuB;;IAGvB,iBAAiB;;IAGjB,4BAA4B;;IAG5B,wBAAwB;;IAGxB,uCAAuC;;IAGvC,yCAAyC;;CAEjC,CAAC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses cron expressions and calculates next execution times.
|
|
5
|
+
* Uses node-cron package for robust cron expression handling.
|
|
6
|
+
*
|
|
7
|
+
* Format: ┌─────────────── second (optional, 0-59)
|
|
8
|
+
* │ ┌───────────── minute (0 - 59)
|
|
9
|
+
* │ │ ┌─────────── hour (0 - 23)
|
|
10
|
+
* │ │ │ ┌─────────── day of month (1 - 31)
|
|
11
|
+
* │ │ │ │ ┌───────── month (1 - 12)
|
|
12
|
+
* │ │ │ │ │ ┌─────── day of week (0 - 6) (Sunday = 0)
|
|
13
|
+
* * * * * * *
|
|
14
|
+
*
|
|
15
|
+
* @module scheduling
|
|
16
|
+
*/
|
|
17
|
+
import cron from 'node-cron';
|
|
18
|
+
/**
|
|
19
|
+
* Schedule parser for cron expressions
|
|
20
|
+
*/
|
|
21
|
+
export class ScheduleParser {
|
|
22
|
+
/**
|
|
23
|
+
* Validate cron expression using node-cron
|
|
24
|
+
*
|
|
25
|
+
* @param cronExpression - Cron expression to validate
|
|
26
|
+
* @returns True if valid
|
|
27
|
+
*/
|
|
28
|
+
static isValidCron(cronExpression) {
|
|
29
|
+
return cron.validate(cronExpression);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Calculate next run time from cron expression
|
|
33
|
+
* Uses a simple algorithm since node-cron doesn't provide getNextRunTime
|
|
34
|
+
*
|
|
35
|
+
* @param cronExpression - Cron expression
|
|
36
|
+
* @param from - Start time (default: now)
|
|
37
|
+
* @returns Next run time
|
|
38
|
+
*/
|
|
39
|
+
static getNextRunTime(cronExpression, from = new Date()) {
|
|
40
|
+
if (!this.isValidCron(cronExpression)) {
|
|
41
|
+
throw new Error(`Invalid cron expression: "${cronExpression}"`);
|
|
42
|
+
}
|
|
43
|
+
// Parse cron expression (minute hour day month weekday)
|
|
44
|
+
const parts = cronExpression.trim().split(/\s+/);
|
|
45
|
+
// node-cron supports both 5-field and 6-field (with seconds) formats
|
|
46
|
+
// Normalize to 5 fields for our calculation
|
|
47
|
+
const fields = parts.length === 6 ? parts.slice(1) : parts;
|
|
48
|
+
if (fields.length !== 5) {
|
|
49
|
+
throw new Error(`Invalid cron expression format: "${cronExpression}"`);
|
|
50
|
+
}
|
|
51
|
+
return this.findNextMatch(fields, from);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Find next matching time for cron fields
|
|
55
|
+
*/
|
|
56
|
+
static findNextMatch(fields, from) {
|
|
57
|
+
const [minuteField, hourField, dayField, monthField, weekdayField] = fields;
|
|
58
|
+
// Start from the next minute
|
|
59
|
+
const next = new Date(from);
|
|
60
|
+
next.setSeconds(0);
|
|
61
|
+
next.setMilliseconds(0);
|
|
62
|
+
next.setMinutes(next.getMinutes() + 1);
|
|
63
|
+
// Maximum iterations to prevent infinite loop
|
|
64
|
+
const maxIterations = 366 * 24 * 60; // 1 year in minutes
|
|
65
|
+
let iterations = 0;
|
|
66
|
+
while (iterations < maxIterations) {
|
|
67
|
+
iterations++;
|
|
68
|
+
const minute = next.getMinutes();
|
|
69
|
+
const hour = next.getHours();
|
|
70
|
+
const dayOfMonth = next.getDate();
|
|
71
|
+
const month = next.getMonth() + 1; // JS months are 0-indexed
|
|
72
|
+
const dayOfWeek = next.getDay();
|
|
73
|
+
// Check if current time matches all fields
|
|
74
|
+
if (this.matchesField(minute, minuteField, 0, 59) &&
|
|
75
|
+
this.matchesField(hour, hourField, 0, 23) &&
|
|
76
|
+
this.matchesField(dayOfMonth, dayField, 1, 31) &&
|
|
77
|
+
this.matchesField(month, monthField, 1, 12) &&
|
|
78
|
+
this.matchesField(dayOfWeek, weekdayField, 0, 6)) {
|
|
79
|
+
return next;
|
|
80
|
+
}
|
|
81
|
+
// Advance to next minute
|
|
82
|
+
next.setMinutes(next.getMinutes() + 1);
|
|
83
|
+
}
|
|
84
|
+
throw new Error('Could not find next run time (searched 1 year ahead)');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if value matches cron field
|
|
88
|
+
*/
|
|
89
|
+
static matchesField(value, field, min, _max) {
|
|
90
|
+
// Wildcard matches everything
|
|
91
|
+
if (field === '*') {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Split by comma for multiple values
|
|
95
|
+
const parts = field.split(',');
|
|
96
|
+
for (const part of parts) {
|
|
97
|
+
// Handle range (e.g., "1-5")
|
|
98
|
+
if (part.includes('-') && !part.includes('/')) {
|
|
99
|
+
const [start, end] = part.split('-').map(Number);
|
|
100
|
+
if (value >= start && value <= end) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Handle step (e.g., "*/5" or "10-20/2")
|
|
105
|
+
else if (part.includes('/')) {
|
|
106
|
+
const [range, step] = part.split('/');
|
|
107
|
+
const stepNum = Number(step);
|
|
108
|
+
if (range === '*') {
|
|
109
|
+
if ((value - min) % stepNum === 0) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (range.includes('-')) {
|
|
114
|
+
const [start, end] = range.split('-').map(Number);
|
|
115
|
+
if (value >= start && value <= end && (value - start) % stepNum === 0) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Handle single value
|
|
121
|
+
else {
|
|
122
|
+
const fieldValue = Number(part);
|
|
123
|
+
if (value === fieldValue) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get multiple future run times
|
|
132
|
+
*
|
|
133
|
+
* @param cronExpression - Cron expression
|
|
134
|
+
* @param count - Number of future times to get
|
|
135
|
+
* @param from - Start time
|
|
136
|
+
* @returns Array of future run times
|
|
137
|
+
*/
|
|
138
|
+
static getNextRunTimes(cronExpression, count, from = new Date()) {
|
|
139
|
+
const times = [];
|
|
140
|
+
let current = from;
|
|
141
|
+
for (let i = 0; i < count; i++) {
|
|
142
|
+
current = this.getNextRunTime(cronExpression, current);
|
|
143
|
+
times.push(new Date(current));
|
|
144
|
+
}
|
|
145
|
+
return times;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Parse interval string to milliseconds
|
|
149
|
+
* Supports: "5s", "10m", "2h", "1d"
|
|
150
|
+
*
|
|
151
|
+
* @param interval - Interval string
|
|
152
|
+
* @returns Milliseconds
|
|
153
|
+
*/
|
|
154
|
+
static parseInterval(interval) {
|
|
155
|
+
const match = /^(\d+)(ms|s|m|h|d)$/.exec(interval.trim());
|
|
156
|
+
if (!match) {
|
|
157
|
+
throw new Error(`Invalid interval format: "${interval}". Expected: "5s", "10m", "2h", "1d"`);
|
|
158
|
+
}
|
|
159
|
+
const value = parseInt(match[1], 10);
|
|
160
|
+
const unit = match[2];
|
|
161
|
+
switch (unit) {
|
|
162
|
+
case 'ms':
|
|
163
|
+
return value;
|
|
164
|
+
case 's':
|
|
165
|
+
return value * 1000;
|
|
166
|
+
case 'm':
|
|
167
|
+
return value * 60 * 1000;
|
|
168
|
+
case 'h':
|
|
169
|
+
return value * 60 * 60 * 1000;
|
|
170
|
+
case 'd':
|
|
171
|
+
return value * 24 * 60 * 60 * 1000;
|
|
172
|
+
default:
|
|
173
|
+
throw new Error(`Unknown time unit: ${unit}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Calculate next run time for interval-based schedule
|
|
178
|
+
*
|
|
179
|
+
* @param intervalMs - Interval in milliseconds
|
|
180
|
+
* @param lastRun - Last run time
|
|
181
|
+
* @returns Next run time
|
|
182
|
+
*/
|
|
183
|
+
static getNextIntervalTime(intervalMs, lastRun) {
|
|
184
|
+
const base = lastRun || new Date();
|
|
185
|
+
return new Date(base.getTime() + intervalMs);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Describe cron expression in human-readable format
|
|
189
|
+
*
|
|
190
|
+
* @param cronExpression - Cron expression
|
|
191
|
+
* @returns Human-readable description
|
|
192
|
+
*/
|
|
193
|
+
static describeCron(cronExpression) {
|
|
194
|
+
if (!this.isValidCron(cronExpression)) {
|
|
195
|
+
return 'Invalid cron expression';
|
|
196
|
+
}
|
|
197
|
+
// Handle common patterns
|
|
198
|
+
if (cronExpression === '* * * * *') {
|
|
199
|
+
return 'Every minute';
|
|
200
|
+
}
|
|
201
|
+
if (cronExpression === '0 * * * *') {
|
|
202
|
+
return 'Every hour';
|
|
203
|
+
}
|
|
204
|
+
if (cronExpression === '0 0 * * *') {
|
|
205
|
+
return 'Every day at midnight';
|
|
206
|
+
}
|
|
207
|
+
if (cronExpression === '0 0 * * 0') {
|
|
208
|
+
return 'Every Sunday at midnight';
|
|
209
|
+
}
|
|
210
|
+
if (cronExpression === '0 0 1 * *') {
|
|
211
|
+
return 'Monthly on the 1st at midnight';
|
|
212
|
+
}
|
|
213
|
+
return `Cron schedule: ${cronExpression}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create a scheduled task using node-cron
|
|
217
|
+
* Returns a scheduled task that can be started/stopped
|
|
218
|
+
*
|
|
219
|
+
* @param cronExpression - Cron expression
|
|
220
|
+
* @param callback - Function to call on schedule
|
|
221
|
+
* @param options - Cron task options
|
|
222
|
+
* @returns Scheduled task
|
|
223
|
+
*/
|
|
224
|
+
static createScheduledTask(cronExpression, callback, options) {
|
|
225
|
+
const task = cron.schedule(cronExpression, callback, {
|
|
226
|
+
timezone: options?.timezone,
|
|
227
|
+
name: options?.name,
|
|
228
|
+
noOverlap: options?.noOverlap,
|
|
229
|
+
maxExecutions: options?.maxExecutions,
|
|
230
|
+
});
|
|
231
|
+
return task;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Common cron expressions
|
|
236
|
+
*/
|
|
237
|
+
export const CommonCronExpressions = {
|
|
238
|
+
/** Every minute */
|
|
239
|
+
EVERY_MINUTE: '* * * * *',
|
|
240
|
+
/** Every 5 minutes */
|
|
241
|
+
EVERY_5_MINUTES: '*/5 * * * *',
|
|
242
|
+
/** Every 15 minutes */
|
|
243
|
+
EVERY_15_MINUTES: '*/15 * * * *',
|
|
244
|
+
/** Every 30 minutes */
|
|
245
|
+
EVERY_30_MINUTES: '*/30 * * * *',
|
|
246
|
+
/** Every hour */
|
|
247
|
+
EVERY_HOUR: '0 * * * *',
|
|
248
|
+
/** Every day at midnight */
|
|
249
|
+
DAILY: '0 0 * * *',
|
|
250
|
+
/** Every day at noon */
|
|
251
|
+
DAILY_NOON: '0 12 * * *',
|
|
252
|
+
/** Every week on Sunday at midnight */
|
|
253
|
+
WEEKLY: '0 0 * * 0',
|
|
254
|
+
/** Every month on the 1st at midnight */
|
|
255
|
+
MONTHLY: '0 0 1 * *',
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=ScheduleParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScheduleParser.js","sourceRoot":"","sources":["../../src/scheduling/ScheduleParser.ts"],"names":[],"mappings":"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"}
|