@bluelibs/runner 5.1.0 → 5.2.1
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 +25 -15
- package/dist/browser/index.cjs +851 -478
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +849 -478
- package/dist/browser/index.mjs.map +1 -1
- package/dist/edge/index.cjs +851 -478
- package/dist/edge/index.cjs.map +1 -1
- package/dist/edge/index.mjs +849 -478
- package/dist/edge/index.mjs.map +1 -1
- package/dist/node/node.cjs +1305 -583
- package/dist/node/node.cjs.map +1 -1
- package/dist/node/node.mjs +1299 -583
- package/dist/node/node.mjs.map +1 -1
- package/dist/types/define.d.ts +9 -0
- package/dist/types/definers/builders/asyncContext/fluent-builder.d.ts +6 -0
- package/dist/types/definers/builders/asyncContext/fluent-builder.interface.d.ts +9 -0
- package/dist/types/definers/builders/asyncContext/index.d.ts +10 -0
- package/dist/types/definers/builders/asyncContext/types.d.ts +13 -0
- package/dist/types/definers/builders/asyncContext/utils.d.ts +5 -0
- package/dist/types/definers/builders/asyncContext.d.ts +1 -0
- package/dist/types/definers/builders/core.d.ts +30 -0
- package/dist/types/definers/builders/error/fluent-builder.d.ts +7 -0
- package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +10 -0
- package/dist/types/definers/builders/error/index.d.ts +11 -0
- package/dist/types/definers/builders/error/types.d.ts +14 -0
- package/dist/types/definers/builders/error/utils.d.ts +6 -0
- package/dist/types/definers/builders/error.d.ts +1 -0
- package/dist/types/definers/builders/event/fluent-builder.d.ts +7 -0
- package/dist/types/definers/builders/event/fluent-builder.interface.d.ts +18 -0
- package/dist/types/definers/builders/event/index.d.ts +10 -0
- package/dist/types/definers/builders/event/types.d.ts +8 -0
- package/dist/types/definers/builders/event/utils.d.ts +9 -0
- package/dist/types/definers/builders/event.d.ts +1 -0
- package/dist/types/definers/builders/hook/fluent-builder.d.ts +8 -0
- package/dist/types/definers/builders/hook/fluent-builder.interface.d.ts +27 -0
- package/dist/types/definers/builders/hook/index.d.ts +12 -0
- package/dist/types/definers/builders/hook/types.d.ts +14 -0
- package/dist/types/definers/builders/hook/utils.d.ts +14 -0
- package/dist/types/definers/builders/hook.d.ts +1 -0
- package/dist/types/definers/builders/middleware/index.d.ts +19 -0
- package/dist/types/definers/builders/middleware/resource.d.ts +7 -0
- package/dist/types/definers/builders/middleware/resource.interface.d.ts +18 -0
- package/dist/types/definers/builders/middleware/task.d.ts +7 -0
- package/dist/types/definers/builders/middleware/task.interface.d.ts +18 -0
- package/dist/types/definers/builders/middleware/types.d.ts +13 -0
- package/dist/types/definers/builders/middleware/utils.d.ts +18 -0
- package/dist/types/definers/builders/middleware.d.ts +1 -0
- package/dist/types/definers/builders/override/hook.d.ts +16 -0
- package/dist/types/definers/builders/override/index.d.ts +11 -0
- package/dist/types/definers/builders/override/resource-middleware.d.ts +3 -0
- package/dist/types/definers/builders/override/resource.d.ts +3 -0
- package/dist/types/definers/builders/override/task-middleware.d.ts +3 -0
- package/dist/types/definers/builders/override/task.d.ts +3 -0
- package/dist/types/definers/builders/resource/fluent-builder.d.ts +8 -0
- package/dist/types/definers/builders/resource/fluent-builder.interface.d.ts +42 -0
- package/dist/types/definers/builders/resource/index.d.ts +13 -0
- package/dist/types/definers/builders/resource/types.d.ts +37 -0
- package/dist/types/definers/builders/resource/utils.d.ts +26 -0
- package/dist/types/definers/builders/resource.d.ts +1 -0
- package/dist/types/definers/builders/tag/fluent-builder.d.ts +6 -0
- package/dist/types/definers/builders/tag/fluent-builder.interface.d.ts +8 -0
- package/dist/types/definers/builders/tag/index.d.ts +10 -0
- package/dist/types/definers/builders/tag/types.d.ts +12 -0
- package/dist/types/definers/builders/tag/utils.d.ts +5 -0
- package/dist/types/definers/builders/tag.d.ts +1 -0
- package/dist/types/definers/builders/task/fluent-builder.d.ts +8 -0
- package/dist/types/definers/builders/task/fluent-builder.interface.d.ts +33 -0
- package/dist/types/definers/builders/task/index.d.ts +21 -0
- package/dist/types/definers/builders/task/phantom-builder.d.ts +8 -0
- package/dist/types/definers/builders/task/phantom-builder.interface.d.ts +31 -0
- package/dist/types/definers/builders/task/types.d.ts +34 -0
- package/dist/types/definers/builders/task/utils.d.ts +14 -0
- package/dist/types/definers/builders/task.d.ts +1 -0
- package/dist/types/definers/builders/task.phantom.d.ts +1 -0
- package/dist/types/definers/builders/utils.d.ts +4 -0
- package/dist/types/definers/defineAsyncContext.d.ts +15 -0
- package/dist/types/definers/defineError.d.ts +27 -0
- package/dist/types/definers/defineEvent.d.ts +2 -0
- package/dist/types/definers/defineHook.d.ts +6 -0
- package/dist/types/definers/defineOverride.d.ts +12 -0
- package/dist/types/definers/defineResource.d.ts +2 -0
- package/dist/types/definers/defineResourceMiddleware.d.ts +2 -0
- package/dist/types/definers/defineTag.d.ts +12 -0
- package/dist/types/definers/defineTask.d.ts +18 -0
- package/dist/types/definers/defineTaskMiddleware.d.ts +2 -0
- package/dist/types/definers/middlewareConfig.d.ts +1 -0
- package/dist/types/definers/resourceFork.d.ts +13 -0
- package/dist/types/definers/tools.d.ts +53 -0
- package/dist/types/defs.d.ts +33 -0
- package/dist/types/errors.d.ts +75 -0
- package/dist/types/globals/debug.d.ts +10 -0
- package/dist/types/globals/globalEvents.d.ts +8 -0
- package/dist/types/globals/globalMiddleware.d.ts +97 -0
- package/dist/types/globals/globalResources.d.ts +64 -0
- package/dist/types/globals/globalTags.d.ts +12 -0
- package/dist/types/globals/middleware/cache.middleware.d.ts +36 -0
- package/dist/types/globals/middleware/circuitBreaker.middleware.d.ts +56 -0
- package/dist/types/globals/middleware/concurrency.middleware.d.ts +47 -0
- package/dist/types/globals/middleware/fallback.middleware.d.ts +23 -0
- package/dist/types/globals/middleware/rateLimit.middleware.d.ts +47 -0
- package/dist/types/globals/middleware/requireContext.middleware.d.ts +5 -0
- package/dist/types/globals/middleware/retry.middleware.d.ts +31 -0
- package/dist/types/globals/middleware/temporal.middleware.d.ts +48 -0
- package/dist/types/globals/middleware/timeout.middleware.d.ts +24 -0
- package/dist/types/globals/middleware/tunnel.middleware.d.ts +3 -0
- package/dist/types/globals/resources/debug/debug.resource.d.ts +7 -0
- package/dist/types/globals/resources/debug/debug.tag.d.ts +2 -0
- package/dist/types/globals/resources/debug/debugConfig.resource.d.ts +22 -0
- package/dist/types/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
- package/dist/types/globals/resources/debug/globalEvent.hook.d.ts +27 -0
- package/dist/types/globals/resources/debug/hook.hook.d.ts +30 -0
- package/dist/types/globals/resources/debug/index.d.ts +6 -0
- package/dist/types/globals/resources/debug/middleware.hook.d.ts +30 -0
- package/dist/types/globals/resources/debug/types.d.ts +25 -0
- package/dist/types/globals/resources/debug/utils.d.ts +2 -0
- package/dist/types/globals/resources/httpClientFactory.resource.d.ts +28 -0
- package/dist/types/globals/resources/queue.resource.d.ts +10 -0
- package/dist/types/globals/resources/tunnel/error-utils.d.ts +1 -0
- package/dist/types/globals/resources/tunnel/plan.d.ts +19 -0
- package/dist/types/globals/resources/tunnel/protocol.d.ts +48 -0
- package/dist/types/globals/resources/tunnel/tunnel.policy.tag.d.ts +26 -0
- package/dist/types/globals/resources/tunnel/tunnel.tag.d.ts +2 -0
- package/dist/types/globals/resources/tunnel/types.d.ts +48 -0
- package/dist/types/globals/tunnels/index.d.ts +23 -0
- package/dist/types/globals/types.d.ts +15 -0
- package/dist/types/http-client.d.ts +26 -0
- package/dist/types/http-fetch-tunnel.resource.d.ts +11 -0
- package/dist/types/index.d.ts +44 -0
- package/dist/types/models/DependencyProcessor.d.ts +46 -0
- package/dist/types/models/EventManager.d.ts +115 -0
- package/dist/types/models/ExecutionJournal.d.ts +35 -0
- package/dist/types/models/LogPrinter.d.ts +56 -0
- package/dist/types/models/Logger.d.ts +85 -0
- package/dist/types/models/MiddlewareManager.d.ts +73 -0
- package/dist/types/models/OverrideManager.d.ts +13 -0
- package/dist/types/models/Queue.d.ts +40 -0
- package/dist/types/models/ResourceInitializer.d.ts +20 -0
- package/dist/types/models/RunResult.d.ts +41 -0
- package/dist/types/models/Semaphore.d.ts +80 -0
- package/dist/types/models/Store.d.ts +76 -0
- package/dist/types/models/StoreRegistry.d.ts +49 -0
- package/dist/types/models/StoreValidator.d.ts +8 -0
- package/dist/types/models/TaskRunner.d.ts +28 -0
- package/dist/types/models/UnhandledError.d.ts +11 -0
- package/dist/types/models/event/CycleContext.d.ts +9 -0
- package/dist/types/models/event/EmissionExecutor.d.ts +11 -0
- package/dist/types/models/event/InterceptorPipeline.d.ts +5 -0
- package/dist/types/models/event/ListenerRegistry.d.ts +31 -0
- package/dist/types/models/event/types.d.ts +50 -0
- package/dist/types/models/index.d.ts +13 -0
- package/dist/types/models/middleware/InterceptorRegistry.d.ts +56 -0
- package/dist/types/models/middleware/MiddlewareResolver.d.ts +31 -0
- package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +34 -0
- package/dist/types/models/middleware/TaskMiddlewareComposer.d.ts +44 -0
- package/dist/types/models/middleware/ValidationHelper.d.ts +20 -0
- package/dist/types/models/middleware/index.d.ts +6 -0
- package/dist/types/models/middleware/types.d.ts +10 -0
- package/dist/types/models/utils/findCircularDependencies.d.ts +16 -0
- package/dist/types/models/utils/safeStringify.d.ts +3 -0
- package/dist/types/node/durable/bus/MemoryEventBus.d.ts +7 -0
- package/dist/types/node/durable/bus/NoopEventBus.d.ts +6 -0
- package/dist/types/node/durable/bus/RedisEventBus.d.ts +30 -0
- package/dist/types/node/durable/core/CronParser.d.ts +15 -0
- package/dist/types/node/durable/core/DurableContext.d.ts +64 -0
- package/dist/types/node/durable/core/DurableOperator.d.ts +47 -0
- package/dist/types/node/durable/core/DurableResource.d.ts +80 -0
- package/dist/types/node/durable/core/DurableService.d.ts +73 -0
- package/dist/types/node/durable/core/DurableWorker.d.ts +19 -0
- package/dist/types/node/durable/core/StepBuilder.d.ts +23 -0
- package/dist/types/node/durable/core/audit.d.ts +152 -0
- package/dist/types/node/durable/core/createRunnerDurableRuntime.d.ts +18 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.audit.d.ts +14 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.determinism.d.ts +13 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.emit.d.ts +16 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.sleep.d.ts +16 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.steps.d.ts +25 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.switch.d.ts +22 -0
- package/dist/types/node/durable/core/durable-context/DurableContext.waitForSignal.d.ts +23 -0
- package/dist/types/node/durable/core/flowShape.d.ts +50 -0
- package/dist/types/node/durable/core/ids.d.ts +11 -0
- package/dist/types/node/durable/core/index.d.ts +11 -0
- package/dist/types/node/durable/core/interfaces/bus.d.ts +13 -0
- package/dist/types/node/durable/core/interfaces/context.d.ts +105 -0
- package/dist/types/node/durable/core/interfaces/queue.d.ts +17 -0
- package/dist/types/node/durable/core/interfaces/service.d.ts +146 -0
- package/dist/types/node/durable/core/interfaces/store.d.ts +66 -0
- package/dist/types/node/durable/core/managers/AuditLogger.d.ts +29 -0
- package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +48 -0
- package/dist/types/node/durable/core/managers/PollingManager.d.ts +48 -0
- package/dist/types/node/durable/core/managers/ScheduleManager.d.ts +33 -0
- package/dist/types/node/durable/core/managers/SignalHandler.d.ts +25 -0
- package/dist/types/node/durable/core/managers/TaskRegistry.d.ts +16 -0
- package/dist/types/node/durable/core/managers/WaitManager.d.ts +26 -0
- package/dist/types/node/durable/core/managers/index.d.ts +7 -0
- package/dist/types/node/durable/core/resource.d.ts +14 -0
- package/dist/types/node/durable/core/types.d.ts +84 -0
- package/dist/types/node/durable/core/utils.d.ts +28 -0
- package/dist/types/node/durable/dashboard/server.d.ts +20 -0
- package/dist/types/node/durable/emitters/runnerAuditEmitter.d.ts +6 -0
- package/dist/types/node/durable/events.d.ts +76 -0
- package/dist/types/node/durable/index.d.ts +34 -0
- package/dist/types/node/durable/optionalDeps/amqplib.d.ts +1 -0
- package/dist/types/node/durable/optionalDeps/ioredis.d.ts +1 -0
- package/dist/types/node/durable/queue/MemoryQueue.d.ts +12 -0
- package/dist/types/node/durable/queue/RabbitMQQueue.d.ts +30 -0
- package/dist/types/node/durable/resources/isolation.d.ts +15 -0
- package/dist/types/node/durable/resources/memoryDurableResource.d.ts +21 -0
- package/dist/types/node/durable/resources/redisDurableResource.d.ts +35 -0
- package/dist/types/node/durable/store/MemoryStore.d.ts +56 -0
- package/dist/types/node/durable/store/RedisStore.d.ts +89 -0
- package/dist/types/node/durable/test-utils.d.ts +29 -0
- package/dist/types/node/exposure/allowList.d.ts +3 -0
- package/dist/types/node/exposure/authenticator.d.ts +16 -0
- package/dist/types/node/exposure/cors.d.ts +4 -0
- package/dist/types/node/exposure/createNodeExposure.d.ts +2 -0
- package/dist/types/node/exposure/exposureServer.d.ts +18 -0
- package/dist/types/node/exposure/handlers/contextWrapper.d.ts +18 -0
- package/dist/types/node/exposure/handlers/errorHandlers.d.ts +23 -0
- package/dist/types/node/exposure/handlers/eventHandler.d.ts +20 -0
- package/dist/types/node/exposure/handlers/taskHandler.d.ts +24 -0
- package/dist/types/node/exposure/httpResponse.d.ts +10 -0
- package/dist/types/node/exposure/index.d.ts +3 -0
- package/dist/types/node/exposure/logging.d.ts +4 -0
- package/dist/types/node/exposure/multipart.d.ts +36 -0
- package/dist/types/node/exposure/requestBody.d.ts +11 -0
- package/dist/types/node/exposure/requestContext.d.ts +17 -0
- package/dist/types/node/exposure/requestHandlers.d.ts +29 -0
- package/dist/types/node/exposure/resource.d.ts +12 -0
- package/dist/types/node/exposure/resourceTypes.d.ts +73 -0
- package/dist/types/node/exposure/router.d.ts +17 -0
- package/dist/types/node/exposure/serverLifecycle.d.ts +13 -0
- package/dist/types/node/exposure/types.d.ts +45 -0
- package/dist/types/node/exposure/utils.d.ts +17 -0
- package/dist/types/node/files/createNodeFile.d.ts +9 -0
- package/dist/types/node/files/index.d.ts +4 -0
- package/dist/types/node/files/inputFile.model.d.ts +22 -0
- package/dist/types/node/files/inputFile.utils.d.ts +14 -0
- package/dist/types/node/http/http-mixed-client.d.ts +45 -0
- package/dist/types/node/http/http-mixed-client.factory.resource.d.ts +17 -0
- package/dist/types/node/http/http-smart-client.factory.resource.d.ts +16 -0
- package/dist/types/node/http/http-smart-client.model.d.ts +27 -0
- package/dist/types/node/http/index.d.ts +4 -0
- package/dist/types/node/index.d.ts +1 -0
- package/dist/types/node/node.d.ts +193 -0
- package/dist/types/node/platform/createFile.d.ts +9 -0
- package/dist/types/node/tunnel/allowlist.d.ts +7 -0
- package/dist/types/node/tunnel/index.d.ts +2 -0
- package/dist/types/node/upload/manifest.d.ts +23 -0
- package/dist/types/platform/adapters/browser.d.ts +14 -0
- package/dist/types/platform/adapters/edge.d.ts +5 -0
- package/dist/types/platform/adapters/node-als.d.ts +1 -0
- package/dist/types/platform/adapters/node.d.ts +15 -0
- package/dist/types/platform/adapters/universal-generic.d.ts +14 -0
- package/dist/types/platform/adapters/universal.d.ts +18 -0
- package/dist/types/platform/createFile.d.ts +10 -0
- package/dist/types/platform/createWebFile.d.ts +11 -0
- package/dist/types/platform/factory.d.ts +2 -0
- package/dist/types/platform/index.d.ts +27 -0
- package/dist/types/platform/types.d.ts +31 -0
- package/dist/types/processHooks.d.ts +2 -0
- package/dist/types/public-types.d.ts +13 -0
- package/dist/types/public.d.ts +210 -0
- package/dist/types/run.d.ts +14 -0
- package/dist/types/serializer/Serializer.d.ts +84 -0
- package/dist/types/serializer/binary-builtins.d.ts +5 -0
- package/dist/types/serializer/builtins.d.ts +47 -0
- package/dist/types/serializer/deserializer.d.ts +27 -0
- package/dist/types/serializer/error-url-builtins.d.ts +13 -0
- package/dist/types/serializer/graph-serializer.d.ts +27 -0
- package/dist/types/serializer/index.d.ts +6 -0
- package/dist/types/serializer/option-normalizers.d.ts +2 -0
- package/dist/types/serializer/regexp-validator.d.ts +34 -0
- package/dist/types/serializer/serialize-utils.d.ts +15 -0
- package/dist/types/serializer/special-values.d.ts +20 -0
- package/dist/types/serializer/tree-serializer.d.ts +20 -0
- package/dist/types/serializer/type-registry.d.ts +58 -0
- package/dist/types/serializer/types.d.ts +126 -0
- package/dist/types/serializer/validation.d.ts +34 -0
- package/dist/types/testing.d.ts +19 -0
- package/dist/types/tools/detectRunnerMode.d.ts +9 -0
- package/dist/types/tools/getCallerFile.d.ts +1 -0
- package/dist/types/tools/throws.d.ts +7 -0
- package/dist/types/tunnels/buildUniversalManifest.d.ts +24 -0
- package/dist/types/types/asyncContext.d.ts +41 -0
- package/dist/types/types/contracts.d.ts +62 -0
- package/dist/types/types/error.d.ts +39 -0
- package/dist/types/types/event.d.ts +79 -0
- package/dist/types/types/executionJournal.d.ts +29 -0
- package/dist/types/types/hook.d.ts +23 -0
- package/dist/types/types/inputFile.d.ts +34 -0
- package/dist/types/types/meta.d.ts +22 -0
- package/dist/types/types/resource.d.ts +133 -0
- package/dist/types/types/resourceMiddleware.d.ts +48 -0
- package/dist/types/types/runner.d.ts +68 -0
- package/dist/types/types/storeTypes.d.ts +46 -0
- package/dist/types/types/symbols.d.ts +34 -0
- package/dist/types/types/tag.d.ts +45 -0
- package/dist/types/types/task.d.ts +76 -0
- package/dist/types/types/taskMiddleware.d.ts +55 -0
- package/dist/types/types/utilities.d.ts +125 -0
- package/dist/universal/index.cjs +851 -476
- package/dist/universal/index.cjs.map +1 -1
- package/dist/universal/index.mjs +849 -476
- package/dist/universal/index.mjs.map +1 -1
- package/package.json +15 -14
- package/readmes/AI.md +30 -9
- package/dist/browser/index.d.mts +0 -2919
- package/dist/browser/index.d.ts +0 -2919
- package/dist/edge/index.d.mts +0 -2919
- package/dist/edge/index.d.ts +0 -2919
- package/dist/node/node.d.mts +0 -4622
- package/dist/node/node.d.ts +0 -4622
- package/dist/universal/index.d.mts +0 -2919
- package/dist/universal/index.d.ts +0 -2919
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DependencyValuesType, EventHandlerType, IEventEmission } from "../../defs";
|
|
2
|
+
import { IHook } from "../../types/hook";
|
|
3
|
+
/**
|
|
4
|
+
* Default options for event handlers.
|
|
5
|
+
*/
|
|
6
|
+
export declare const HandlerOptionsDefaults: {
|
|
7
|
+
order: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Internal storage structure for event listeners.
|
|
11
|
+
*/
|
|
12
|
+
export interface IListenerStorage {
|
|
13
|
+
order: number;
|
|
14
|
+
filter?: (event: IEventEmission<any>) => boolean;
|
|
15
|
+
handler: EventHandlerType;
|
|
16
|
+
/** Optional listener id (from IEventHandlerOptions.id) */
|
|
17
|
+
id?: string;
|
|
18
|
+
/** True when this listener originates from addGlobalListener(). */
|
|
19
|
+
isGlobal: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for configuring event listeners.
|
|
23
|
+
*/
|
|
24
|
+
export interface IEventHandlerOptions<T = any> {
|
|
25
|
+
order?: number;
|
|
26
|
+
filter?: (event: IEventEmission<T>) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Represents the listener ID. Use this to avoid a listener calling itself.
|
|
29
|
+
*/
|
|
30
|
+
id?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Interceptor for event emissions.
|
|
34
|
+
*/
|
|
35
|
+
export type EventEmissionInterceptor = (next: (event: IEventEmission<any>) => Promise<void>, event: IEventEmission<any>) => Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Interceptor for hook execution.
|
|
38
|
+
*/
|
|
39
|
+
export type HookExecutionInterceptor = (next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>, hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>;
|
|
40
|
+
/**
|
|
41
|
+
* Shared contract for cycle-aware hook execution.
|
|
42
|
+
*/
|
|
43
|
+
export type HookExecutor = (hook: IHook<any, any>, event: IEventEmission<any>, computedDependencies: DependencyValuesType<any>) => Promise<any>;
|
|
44
|
+
/**
|
|
45
|
+
* Utility shape representing an emission frame used for cycle detection.
|
|
46
|
+
*/
|
|
47
|
+
export interface IEmissionFrame {
|
|
48
|
+
id: string;
|
|
49
|
+
source: string;
|
|
50
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./DependencyProcessor";
|
|
2
|
+
export * from "./EventManager";
|
|
3
|
+
export * from "./Logger";
|
|
4
|
+
export * from "./Store";
|
|
5
|
+
export * from "./TaskRunner";
|
|
6
|
+
export * from "./ResourceInitializer";
|
|
7
|
+
export * from "./MiddlewareManager";
|
|
8
|
+
export { LogPrinter } from "./LogPrinter";
|
|
9
|
+
export type { PrintableLog, ColorTheme, LogLevels as LogPrinterLevels, PrintStrategy as LogPrinterPrintStrategy, } from "./LogPrinter";
|
|
10
|
+
export * from "./Semaphore";
|
|
11
|
+
export * from "./Queue";
|
|
12
|
+
export * from "./UnhandledError";
|
|
13
|
+
export * from "./RunResult";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { TaskMiddlewareInterceptor, ResourceMiddlewareInterceptor } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized registry for all interceptor types.
|
|
4
|
+
* Manages storage and retrieval of global and per-middleware interceptors.
|
|
5
|
+
*/
|
|
6
|
+
export declare class InterceptorRegistry {
|
|
7
|
+
#private;
|
|
8
|
+
private taskInterceptors;
|
|
9
|
+
private resourceInterceptors;
|
|
10
|
+
private perTaskMiddleware;
|
|
11
|
+
private perResourceMiddleware;
|
|
12
|
+
/**
|
|
13
|
+
* Gets the current lock status
|
|
14
|
+
*/
|
|
15
|
+
get isLocked(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Locks the registry, preventing any further modifications
|
|
18
|
+
*/
|
|
19
|
+
lock(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Throws an error if the registry is locked
|
|
22
|
+
*/
|
|
23
|
+
private checkLock;
|
|
24
|
+
/**
|
|
25
|
+
* Adds a global task interceptor
|
|
26
|
+
*/
|
|
27
|
+
addGlobalTaskInterceptor(interceptor: TaskMiddlewareInterceptor): void;
|
|
28
|
+
/**
|
|
29
|
+
* Adds a global resource interceptor
|
|
30
|
+
*/
|
|
31
|
+
addGlobalResourceInterceptor(interceptor: ResourceMiddlewareInterceptor): void;
|
|
32
|
+
/**
|
|
33
|
+
* Adds an interceptor for a specific task middleware instance
|
|
34
|
+
*/
|
|
35
|
+
addTaskMiddlewareInterceptor(middlewareId: string, interceptor: TaskMiddlewareInterceptor): void;
|
|
36
|
+
/**
|
|
37
|
+
* Adds an interceptor for a specific resource middleware instance
|
|
38
|
+
*/
|
|
39
|
+
addResourceMiddlewareInterceptor(middlewareId: string, interceptor: ResourceMiddlewareInterceptor): void;
|
|
40
|
+
/**
|
|
41
|
+
* Gets all global task interceptors
|
|
42
|
+
*/
|
|
43
|
+
getGlobalTaskInterceptors(): readonly TaskMiddlewareInterceptor[];
|
|
44
|
+
/**
|
|
45
|
+
* Gets all global resource interceptors
|
|
46
|
+
*/
|
|
47
|
+
getGlobalResourceInterceptors(): readonly ResourceMiddlewareInterceptor[];
|
|
48
|
+
/**
|
|
49
|
+
* Gets interceptors for a specific task middleware
|
|
50
|
+
*/
|
|
51
|
+
getTaskMiddlewareInterceptors(middlewareId: string): readonly TaskMiddlewareInterceptor[];
|
|
52
|
+
/**
|
|
53
|
+
* Gets interceptors for a specific resource middleware
|
|
54
|
+
*/
|
|
55
|
+
getResourceMiddlewareInterceptors(middlewareId: string): readonly ResourceMiddlewareInterceptor[];
|
|
56
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ITask, IResource, ITaskMiddleware, IResourceMiddleware } from "../../defs";
|
|
2
|
+
import { Store } from "../Store";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves which middlewares should be applied to tasks and resources.
|
|
5
|
+
* Handles global "everywhere" middlewares, local middlewares, and tunnel policies.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MiddlewareResolver {
|
|
8
|
+
private readonly store;
|
|
9
|
+
constructor(store: Store);
|
|
10
|
+
/**
|
|
11
|
+
* Gets all applicable middlewares for a task (global + local, deduplicated)
|
|
12
|
+
*/
|
|
13
|
+
getApplicableTaskMiddlewares(task: ITask<any, any, any>): ITaskMiddleware[];
|
|
14
|
+
/**
|
|
15
|
+
* Gets all applicable middlewares for a resource (global + local, deduplicated)
|
|
16
|
+
*/
|
|
17
|
+
getApplicableResourceMiddlewares(resource: IResource<any, any, any, any>): IResourceMiddleware[];
|
|
18
|
+
/**
|
|
19
|
+
* For tunneled tasks, controls caller-side task middleware execution.
|
|
20
|
+
* Caller-side middleware is skipped by default and can be re-enabled via allowlist.
|
|
21
|
+
*/
|
|
22
|
+
applyTunnelPolicyFilter(task: ITask<any, any, any>, middlewares: ITaskMiddleware[]): ITaskMiddleware[];
|
|
23
|
+
/**
|
|
24
|
+
* Gets all "everywhere" middlewares that apply to the given task
|
|
25
|
+
*/
|
|
26
|
+
getEverywhereTaskMiddlewares(task: ITask<any, any, any>): ITaskMiddleware[];
|
|
27
|
+
/**
|
|
28
|
+
* Gets all "everywhere" middlewares that apply to the given resource
|
|
29
|
+
*/
|
|
30
|
+
getEverywhereResourceMiddlewares(resource: IResource<any, any, any, any>): IResourceMiddleware[];
|
|
31
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { IResource, DependencyMapType } from "../../defs";
|
|
2
|
+
import { Store } from "../Store";
|
|
3
|
+
import { InterceptorRegistry } from "./InterceptorRegistry";
|
|
4
|
+
import { MiddlewareResolver } from "./MiddlewareResolver";
|
|
5
|
+
/**
|
|
6
|
+
* Composes resource initialization chains with validation, interceptors, and middlewares.
|
|
7
|
+
* Builds the onion-style wrapping of resource init functions.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ResourceMiddlewareComposer {
|
|
10
|
+
private readonly store;
|
|
11
|
+
private readonly interceptorRegistry;
|
|
12
|
+
private readonly middlewareResolver;
|
|
13
|
+
constructor(store: Store, interceptorRegistry: InterceptorRegistry, middlewareResolver: MiddlewareResolver);
|
|
14
|
+
/**
|
|
15
|
+
* Runs resource initialization with all middleware and interceptors applied
|
|
16
|
+
*/
|
|
17
|
+
runInit<TConfig, TValue extends Promise<any>, TDeps extends DependencyMapType, TContext>(resource: IResource<TConfig, TValue, TDeps, TContext>, config: TConfig, dependencies: any, context: TContext): Promise<TValue | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Creates the base resource init runner with result validation
|
|
20
|
+
*/
|
|
21
|
+
private createBaseInitRunner;
|
|
22
|
+
/**
|
|
23
|
+
* Applies resource middleware layers
|
|
24
|
+
*/
|
|
25
|
+
private applyMiddlewares;
|
|
26
|
+
/**
|
|
27
|
+
* Applies global resource middleware interceptors
|
|
28
|
+
*/
|
|
29
|
+
private applyGlobalInterceptors;
|
|
30
|
+
/**
|
|
31
|
+
* Wraps a middleware runner with its specific interceptors in onion style
|
|
32
|
+
*/
|
|
33
|
+
private wrapWithInterceptors;
|
|
34
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ITask, DependencyMapType } from "../../defs";
|
|
2
|
+
import { Store } from "../Store";
|
|
3
|
+
import { InterceptorRegistry } from "./InterceptorRegistry";
|
|
4
|
+
import { MiddlewareResolver } from "./MiddlewareResolver";
|
|
5
|
+
import type { ExecutionJournal } from "../../types/executionJournal";
|
|
6
|
+
/**
|
|
7
|
+
* Composes task execution chains with validation, interceptors, and middlewares.
|
|
8
|
+
* Builds the onion-style wrapping of task runners.
|
|
9
|
+
*/
|
|
10
|
+
export declare class TaskMiddlewareComposer {
|
|
11
|
+
private readonly store;
|
|
12
|
+
private readonly interceptorRegistry;
|
|
13
|
+
private readonly middlewareResolver;
|
|
14
|
+
constructor(store: Store, interceptorRegistry: InterceptorRegistry, middlewareResolver: MiddlewareResolver);
|
|
15
|
+
/**
|
|
16
|
+
* Composes a complete task runner with all middleware and interceptors applied
|
|
17
|
+
*/
|
|
18
|
+
compose<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>): (input: TInput, parentJournal?: ExecutionJournal) => Promise<Awaited<TOutput>>;
|
|
19
|
+
/**
|
|
20
|
+
* Creates the base task runner with input/result validation
|
|
21
|
+
*/
|
|
22
|
+
private createBaseRunner;
|
|
23
|
+
/**
|
|
24
|
+
* Determines which task definition to use for execution
|
|
25
|
+
* Prefers store definition when task is tunneled (tunnel overrides apply)
|
|
26
|
+
*/
|
|
27
|
+
private resolveTaskDefinition;
|
|
28
|
+
/**
|
|
29
|
+
* Applies local per-task interceptors (closest to the task)
|
|
30
|
+
*/
|
|
31
|
+
private applyLocalInterceptors;
|
|
32
|
+
/**
|
|
33
|
+
* Applies global task middleware interceptors
|
|
34
|
+
*/
|
|
35
|
+
private applyGlobalInterceptors;
|
|
36
|
+
/**
|
|
37
|
+
* Applies task middleware layers (global first, then local)
|
|
38
|
+
*/
|
|
39
|
+
private applyMiddlewares;
|
|
40
|
+
/**
|
|
41
|
+
* Wraps a middleware runner with its specific interceptors in onion style
|
|
42
|
+
*/
|
|
43
|
+
private wrapWithInterceptors;
|
|
44
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized validation logic for inputs and results across tasks and resources.
|
|
3
|
+
* Provides consistent error handling and messaging.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ValidationHelper {
|
|
6
|
+
/**
|
|
7
|
+
* Validates input using the provided schema
|
|
8
|
+
* @throws ValidationError if validation fails
|
|
9
|
+
*/
|
|
10
|
+
static validateInput<T>(value: any, schema: {
|
|
11
|
+
parse: (v: any) => T;
|
|
12
|
+
} | undefined, id: string, type: "Task" | "Resource"): T;
|
|
13
|
+
/**
|
|
14
|
+
* Validates result using the provided schema
|
|
15
|
+
* @throws ValidationError if validation fails
|
|
16
|
+
*/
|
|
17
|
+
static validateResult<T>(value: any, schema: {
|
|
18
|
+
parse: (v: any) => T;
|
|
19
|
+
} | undefined, id: string, type: "Task" | "Resource"): T;
|
|
20
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { InterceptorRegistry } from "./InterceptorRegistry";
|
|
2
|
+
export { MiddlewareResolver } from "./MiddlewareResolver";
|
|
3
|
+
export { TaskMiddlewareComposer } from "./TaskMiddlewareComposer";
|
|
4
|
+
export { ResourceMiddlewareComposer } from "./ResourceMiddlewareComposer";
|
|
5
|
+
export { ValidationHelper } from "./ValidationHelper";
|
|
6
|
+
export type { TaskMiddlewareInterceptor, ResourceMiddlewareInterceptor, } from "./types";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ITaskMiddlewareExecutionInput } from "../../types/taskMiddleware";
|
|
2
|
+
import { IResourceMiddlewareExecutionInput } from "../../types/resourceMiddleware";
|
|
3
|
+
/**
|
|
4
|
+
* Interceptor for task middleware execution
|
|
5
|
+
*/
|
|
6
|
+
export type TaskMiddlewareInterceptor = (next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>, input: ITaskMiddlewareExecutionInput<any>) => Promise<any>;
|
|
7
|
+
/**
|
|
8
|
+
* Interceptor for resource middleware execution
|
|
9
|
+
*/
|
|
10
|
+
export type ResourceMiddlewareInterceptor = (next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>, input: IResourceMiddlewareExecutionInput<any>) => Promise<any>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A node that has dependencies.
|
|
3
|
+
*/
|
|
4
|
+
export interface IDependentNode {
|
|
5
|
+
id: string;
|
|
6
|
+
dependencies: Record<string, IDependentNode>;
|
|
7
|
+
}
|
|
8
|
+
interface FindCircularDependenciesResult {
|
|
9
|
+
cycles: string[];
|
|
10
|
+
missingDependencies: Array<{
|
|
11
|
+
nodeId: string;
|
|
12
|
+
dependencyId: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare function findCircularDependencies(nodes: IDependentNode[]): FindCircularDependenciesResult;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bus";
|
|
2
|
+
export declare class MemoryEventBus implements IEventBus {
|
|
3
|
+
private handlers;
|
|
4
|
+
publish(channel: string, event: BusEvent): Promise<void>;
|
|
5
|
+
subscribe(channel: string, handler: BusEventHandler): Promise<void>;
|
|
6
|
+
unsubscribe(channel: string): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bus";
|
|
2
|
+
export declare class NoopEventBus implements IEventBus {
|
|
3
|
+
publish(_channel: string, _event: BusEvent): Promise<void>;
|
|
4
|
+
subscribe(_channel: string, _handler: BusEventHandler): Promise<void>;
|
|
5
|
+
unsubscribe(_channel: string): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bus";
|
|
2
|
+
export interface RedisEventBusConfig {
|
|
3
|
+
prefix?: string;
|
|
4
|
+
redis?: RedisEventBusClient | string;
|
|
5
|
+
}
|
|
6
|
+
export interface RedisEventBusClient {
|
|
7
|
+
publish(channel: string, payload: string): Promise<unknown>;
|
|
8
|
+
subscribe(channel: string): Promise<unknown>;
|
|
9
|
+
unsubscribe(channel: string): Promise<unknown>;
|
|
10
|
+
on(event: "message", fn: (channel: string, message: string) => void): unknown;
|
|
11
|
+
quit(): Promise<unknown>;
|
|
12
|
+
duplicate(): RedisEventBusClient;
|
|
13
|
+
}
|
|
14
|
+
export declare class RedisEventBus implements IEventBus {
|
|
15
|
+
private pub;
|
|
16
|
+
private sub;
|
|
17
|
+
private prefix;
|
|
18
|
+
private readonly channels;
|
|
19
|
+
private readonly serializer;
|
|
20
|
+
constructor(config: RedisEventBusConfig);
|
|
21
|
+
private k;
|
|
22
|
+
private tryParse;
|
|
23
|
+
private coerceTimestamp;
|
|
24
|
+
private toBusEvent;
|
|
25
|
+
private deserializeEvent;
|
|
26
|
+
publish(channel: string, event: BusEvent): Promise<void>;
|
|
27
|
+
subscribe(channel: string, handler: BusEventHandler): Promise<void>;
|
|
28
|
+
unsubscribe(channel: string): Promise<void>;
|
|
29
|
+
dispose(): Promise<void>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cron helper used by `ScheduleManager`.
|
|
3
|
+
*
|
|
4
|
+
* Prefers the optional `cron-parser` dependency when available, but provides a
|
|
5
|
+
* deterministic fallback implementation so durable scheduling works even when
|
|
6
|
+
* optional deps are not installed (important for the multi-platform packaging
|
|
7
|
+
* and optionalDependency setup).
|
|
8
|
+
*/
|
|
9
|
+
export declare class CronParser {
|
|
10
|
+
static getNextRun(cron: string, from?: Date): Date;
|
|
11
|
+
static isValid(cron: string): boolean;
|
|
12
|
+
private static tryGetExternalParser;
|
|
13
|
+
private static parseFallback;
|
|
14
|
+
private static getNextRunFallback;
|
|
15
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { IEventBus } from "./interfaces/bus";
|
|
2
|
+
import type { EmitOptions, IDurableContext, IStepBuilder, SignalOptions, SleepOptions, StepOptions, SwitchBranch } from "./interfaces/context";
|
|
3
|
+
import type { IDurableStore } from "./interfaces/store";
|
|
4
|
+
import type { IEventDefinition } from "../../../types/event";
|
|
5
|
+
import type { DurableStepId } from "./ids";
|
|
6
|
+
import { type DurableAuditEmitter } from "./audit";
|
|
7
|
+
import { type ImplicitInternalStepIdsPolicy } from "./durable-context/DurableContext.determinism";
|
|
8
|
+
/**
|
|
9
|
+
* Per-execution workflow toolkit used by durable tasks.
|
|
10
|
+
*
|
|
11
|
+
* `DurableContext` is created by `ExecutionManager` for each execution attempt and
|
|
12
|
+
* made available to user code via `DurableResource.use()` (AsyncLocalStorage).
|
|
13
|
+
*
|
|
14
|
+
* It provides deterministic "save points" (`step()`), durable suspension primitives
|
|
15
|
+
* (`sleep()`, `waitForSignal()`), and best-effort side-channel notifications (`emit()`).
|
|
16
|
+
* The durable store is the source of truth; this class is intentionally thin state
|
|
17
|
+
* around indexes/guards to keep a single in-memory attempt deterministic.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DurableContext implements IDurableContext {
|
|
20
|
+
private readonly store;
|
|
21
|
+
private readonly bus;
|
|
22
|
+
readonly executionId: string;
|
|
23
|
+
readonly attempt: number;
|
|
24
|
+
private readonly sleepIndexRef;
|
|
25
|
+
private readonly signalIndexes;
|
|
26
|
+
private readonly emitIndexes;
|
|
27
|
+
private noteIndex;
|
|
28
|
+
private readonly implicitInternalStepIdsWarned;
|
|
29
|
+
private readonly seenStepIds;
|
|
30
|
+
private readonly compensations;
|
|
31
|
+
private readonly audit;
|
|
32
|
+
private readonly determinism;
|
|
33
|
+
private readonly auditEnabled;
|
|
34
|
+
private readonly auditEmitter;
|
|
35
|
+
private readonly implicitInternalStepIdsPolicy;
|
|
36
|
+
constructor(store: IDurableStore, bus: IEventBus, executionId: string, attempt: number, options?: {
|
|
37
|
+
auditEnabled?: boolean;
|
|
38
|
+
auditEmitter?: DurableAuditEmitter;
|
|
39
|
+
implicitInternalStepIds?: ImplicitInternalStepIdsPolicy;
|
|
40
|
+
});
|
|
41
|
+
private assertNotCancelled;
|
|
42
|
+
private getStepId;
|
|
43
|
+
private internalStep;
|
|
44
|
+
step<T>(stepId: string): IStepBuilder<T>;
|
|
45
|
+
step<T>(stepId: DurableStepId<T>): IStepBuilder<T>;
|
|
46
|
+
step<T>(stepId: string | DurableStepId<T>, fn: () => Promise<T>): Promise<T>;
|
|
47
|
+
step<T>(stepId: string | DurableStepId<T>, options: StepOptions, fn: () => Promise<T>): Promise<T>;
|
|
48
|
+
_executeStep<T>(stepId: string, options: StepOptions, upFn: () => Promise<T>, downFn?: (result: T) => Promise<void>): Promise<T>;
|
|
49
|
+
rollback(): Promise<void>;
|
|
50
|
+
sleep(durationMs: number, options?: SleepOptions): Promise<void>;
|
|
51
|
+
waitForSignal<TPayload>(signal: IEventDefinition<TPayload>): Promise<TPayload>;
|
|
52
|
+
waitForSignal<TPayload>(signal: IEventDefinition<TPayload>, options: SignalOptions & {
|
|
53
|
+
timeoutMs: number;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
kind: "signal";
|
|
56
|
+
payload: TPayload;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "timeout";
|
|
59
|
+
}>;
|
|
60
|
+
waitForSignal<TPayload>(signal: IEventDefinition<TPayload>, options: SignalOptions): Promise<TPayload>;
|
|
61
|
+
emit<TPayload>(event: IEventDefinition<TPayload>, payload: TPayload, options?: EmitOptions): Promise<void>;
|
|
62
|
+
switch<TValue, TResult>(stepId: string, value: TValue, branches: SwitchBranch<TValue, TResult>[], defaultBranch?: Omit<SwitchBranch<TValue, TResult>, "match">): Promise<TResult>;
|
|
63
|
+
note(message: string, meta?: Record<string, unknown>): Promise<void>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { IDurableStore } from "./interfaces/store";
|
|
2
|
+
import { Execution } from "./types";
|
|
3
|
+
import type { DurableAuditEntry } from "./audit";
|
|
4
|
+
import type { StepResult } from "./types";
|
|
5
|
+
import type { ListExecutionsOptions } from "./interfaces/store";
|
|
6
|
+
/**
|
|
7
|
+
* Administrative / operator API for durable workflows.
|
|
8
|
+
*
|
|
9
|
+
* This class is intentionally store-backed and side-effect free with respect to
|
|
10
|
+
* "running" workflows: it reads execution details and, when supported by the store,
|
|
11
|
+
* can perform operator actions (retry rollback, skip a step, force fail, patch state).
|
|
12
|
+
*
|
|
13
|
+
* Used by dashboards / CLIs / tooling to inspect and recover executions.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DurableOperator {
|
|
16
|
+
private readonly store;
|
|
17
|
+
constructor(store: IDurableStore);
|
|
18
|
+
listExecutions(options?: ListExecutionsOptions): Promise<Execution[]>;
|
|
19
|
+
getExecutionDetail(executionId: string): Promise<{
|
|
20
|
+
execution: Execution | null;
|
|
21
|
+
steps: StepResult[];
|
|
22
|
+
audit: DurableAuditEntry[];
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Resets an execution from `compensation_failed` (or other states) to `pending`.
|
|
26
|
+
* This effectively retries the workflow from the last memoized step.
|
|
27
|
+
*/
|
|
28
|
+
retryRollback(executionId: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Manually marks a step as completed with a specific result.
|
|
31
|
+
* Useful for skipping broken steps or providing a manual fix.
|
|
32
|
+
*/
|
|
33
|
+
skipStep(executionId: string, stepId: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Forces an execution to the `failed` state.
|
|
36
|
+
*/
|
|
37
|
+
forceFail(executionId: string, reason: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Manually patches the result of a step.
|
|
40
|
+
* Useful when a step failed to save its result but the side effect occurred.
|
|
41
|
+
*/
|
|
42
|
+
editState(executionId: string, stepId: string, newState: unknown): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Lists all executions that require manual intervention.
|
|
45
|
+
*/
|
|
46
|
+
listStuckExecutions(): Promise<Execution[]>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import type { Store } from "../../../models/Store";
|
|
3
|
+
import type { IEventDefinition } from "../../../types/event";
|
|
4
|
+
import type { ITask } from "../../../types/task";
|
|
5
|
+
import type { IDurableContext } from "./interfaces/context";
|
|
6
|
+
import type { DurableTask, ExecuteOptions, IDurableService, ScheduleOptions } from "./interfaces/service";
|
|
7
|
+
import type { Schedule } from "./types";
|
|
8
|
+
import type { IDurableStore } from "./interfaces/store";
|
|
9
|
+
import { DurableOperator } from "./DurableOperator";
|
|
10
|
+
import { type DurableFlowShape } from "./flowShape";
|
|
11
|
+
export interface DurableResourceConfig {
|
|
12
|
+
worker?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface IDurableResource extends Pick<IDurableService, "startExecution" | "cancelExecution" | "wait" | "execute" | "executeStrict" | "schedule" | "ensureSchedule" | "pauseSchedule" | "resumeSchedule" | "getSchedule" | "listSchedules" | "updateSchedule" | "removeSchedule" | "recover" | "signal"> {
|
|
15
|
+
/**
|
|
16
|
+
* Reads the durable context for the currently running workflow execution.
|
|
17
|
+
* Throws if called outside of a durable execution.
|
|
18
|
+
*/
|
|
19
|
+
use(): IDurableContext;
|
|
20
|
+
/**
|
|
21
|
+
* Describe a durable workflow task using real runtime dependencies.
|
|
22
|
+
*
|
|
23
|
+
* - Non-durable deps are kept as-is (so pre-step control flow can use them).
|
|
24
|
+
* - Durable deps are shimmed so `durable.use()` returns the recorder context.
|
|
25
|
+
*
|
|
26
|
+
* The task must be registered in the runtime store (ie. part of the app tree).
|
|
27
|
+
*
|
|
28
|
+
* Accepts any Runner `ITask`. Generic `TInput` is inferred from the task,
|
|
29
|
+
* or can be specified explicitly: `describe<MyInput>(task, input)`.
|
|
30
|
+
*/
|
|
31
|
+
describe<TInput>(task: ITask<TInput, any, any, any, any, any>, input?: TInput): Promise<DurableFlowShape>;
|
|
32
|
+
/**
|
|
33
|
+
* Store-backed operator API to inspect and administrate executions
|
|
34
|
+
* (steps/audit/history and operator actions where supported by the store).
|
|
35
|
+
*/
|
|
36
|
+
readonly operator: DurableOperator;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A Runner-facing wrapper around `DurableService` that exposes a per-instance
|
|
40
|
+
* context store and the public durable API (`execute`, `signal`, `wait`, etc.).
|
|
41
|
+
*
|
|
42
|
+
* This enables tasks to depend on a specific durable instance and call
|
|
43
|
+
* `durable.use()` to access the per-execution durable context.
|
|
44
|
+
*/
|
|
45
|
+
export declare class DurableResource implements IDurableResource {
|
|
46
|
+
readonly service: IDurableService;
|
|
47
|
+
private readonly contextStorage;
|
|
48
|
+
private readonly store?;
|
|
49
|
+
private readonly runnerStore?;
|
|
50
|
+
private operatorInstance;
|
|
51
|
+
constructor(service: IDurableService, contextStorage: AsyncLocalStorage<IDurableContext>, store?: IDurableStore | undefined, runnerStore?: Store | undefined);
|
|
52
|
+
get operator(): DurableOperator;
|
|
53
|
+
use(): IDurableContext;
|
|
54
|
+
describe<TInput>(task: ITask<TInput, any, any, any, any, any>, input?: TInput): Promise<DurableFlowShape>;
|
|
55
|
+
private injectRecorderIntoDurableDeps;
|
|
56
|
+
startExecution<TInput>(task: DurableTask<TInput, unknown>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
57
|
+
cancelExecution(executionId: string, reason?: string): Promise<void>;
|
|
58
|
+
wait<TResult>(executionId: string, options?: {
|
|
59
|
+
timeout?: number;
|
|
60
|
+
waitPollIntervalMs?: number;
|
|
61
|
+
}): Promise<TResult>;
|
|
62
|
+
execute<TInput, TResult>(task: DurableTask<TInput, TResult>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
63
|
+
executeStrict<TInput, TResult>(task: undefined extends TResult ? never : DurableTask<TInput, TResult>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
64
|
+
schedule<TInput>(task: DurableTask<TInput, unknown>, input: TInput | undefined, options: ScheduleOptions): Promise<string>;
|
|
65
|
+
ensureSchedule<TInput>(task: DurableTask<TInput, unknown>, input: TInput | undefined, options: ScheduleOptions & {
|
|
66
|
+
id: string;
|
|
67
|
+
}): Promise<string>;
|
|
68
|
+
pauseSchedule(scheduleId: string): Promise<void>;
|
|
69
|
+
resumeSchedule(scheduleId: string): Promise<void>;
|
|
70
|
+
getSchedule(scheduleId: string): Promise<Schedule | null>;
|
|
71
|
+
listSchedules(): Promise<Schedule[]>;
|
|
72
|
+
updateSchedule(scheduleId: string, updates: {
|
|
73
|
+
cron?: string;
|
|
74
|
+
interval?: number;
|
|
75
|
+
input?: unknown;
|
|
76
|
+
}): Promise<void>;
|
|
77
|
+
removeSchedule(scheduleId: string): Promise<void>;
|
|
78
|
+
recover(): Promise<void>;
|
|
79
|
+
signal<TPayload>(executionId: string, signal: IEventDefinition<TPayload>, payload: TPayload): Promise<void>;
|
|
80
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { NoopEventBus } from "../bus/NoopEventBus";
|
|
2
|
+
import type { DurableServiceConfig, DurableTask, ExecuteOptions, IDurableService, ScheduleOptions } from "./interfaces/service";
|
|
3
|
+
import { type Schedule } from "./types";
|
|
4
|
+
import type { IEventDefinition } from "../../../types/event";
|
|
5
|
+
import { ExecutionManager, PollingManager } from "./managers";
|
|
6
|
+
export { DurableExecutionError } from "./utils";
|
|
7
|
+
/**
|
|
8
|
+
* High-level facade for the Durable Workflows subsystem.
|
|
9
|
+
*
|
|
10
|
+
* `DurableService` glues together the durable backends (store/queue/event bus) and
|
|
11
|
+
* the specialized managers that implement durable semantics:
|
|
12
|
+
*
|
|
13
|
+
* - `ExecutionManager` runs workflow attempts and injects `DurableContext`
|
|
14
|
+
* - `SignalHandler` delivers external signals to waiting steps
|
|
15
|
+
* - `WaitManager` waits for results (event-bus first, polling fallback)
|
|
16
|
+
* - `ScheduleManager` creates/updates schedules and their timers
|
|
17
|
+
* - `PollingManager` drives timers (sleep, retries, signal timeouts, schedules)
|
|
18
|
+
* - `AuditLogger` emits/persists an audit trail (best-effort)
|
|
19
|
+
*
|
|
20
|
+
* `DurableResource` wraps this service for Runner integration and provides
|
|
21
|
+
* `durable.use()` to read the per-execution `DurableContext`.
|
|
22
|
+
*/
|
|
23
|
+
export declare class DurableService implements IDurableService {
|
|
24
|
+
private readonly config;
|
|
25
|
+
private readonly taskRegistry;
|
|
26
|
+
private readonly auditLogger;
|
|
27
|
+
private readonly waitManager;
|
|
28
|
+
private readonly scheduleManager;
|
|
29
|
+
private readonly signalHandler;
|
|
30
|
+
private readonly executionManager;
|
|
31
|
+
private readonly pollingManager;
|
|
32
|
+
/** Unique worker ID for distributed timer coordination */
|
|
33
|
+
private readonly workerId;
|
|
34
|
+
constructor(config: DurableServiceConfig);
|
|
35
|
+
registerTask<TInput, TResult>(task: DurableTask<TInput, TResult>): void;
|
|
36
|
+
findTask(taskId: string): DurableTask<any, any> | undefined;
|
|
37
|
+
startExecution<TInput>(task: DurableTask<TInput, unknown>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
38
|
+
cancelExecution(executionId: string, reason?: string): Promise<void>;
|
|
39
|
+
execute<TInput, TResult>(task: DurableTask<TInput, TResult>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
40
|
+
executeStrict<TInput, TResult>(task: undefined extends TResult ? never : DurableTask<TInput, TResult>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
41
|
+
wait<TResult>(executionId: string, options?: {
|
|
42
|
+
timeout?: number;
|
|
43
|
+
waitPollIntervalMs?: number;
|
|
44
|
+
}): Promise<TResult>;
|
|
45
|
+
schedule<TInput>(task: DurableTask<TInput, unknown>, input: TInput | undefined, options: ScheduleOptions): Promise<string>;
|
|
46
|
+
ensureSchedule<TInput>(task: DurableTask<TInput, unknown>, input: TInput | undefined, options: ScheduleOptions & {
|
|
47
|
+
id: string;
|
|
48
|
+
}): Promise<string>;
|
|
49
|
+
recover(): Promise<void>;
|
|
50
|
+
start(): void;
|
|
51
|
+
stop(): Promise<void>;
|
|
52
|
+
pauseSchedule(id: string): Promise<void>;
|
|
53
|
+
resumeSchedule(id: string): Promise<void>;
|
|
54
|
+
getSchedule(id: string): Promise<Schedule | null>;
|
|
55
|
+
listSchedules(): Promise<Schedule[]>;
|
|
56
|
+
updateSchedule(id: string, updates: {
|
|
57
|
+
cron?: string;
|
|
58
|
+
interval?: number;
|
|
59
|
+
input?: unknown;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
removeSchedule(id: string): Promise<void>;
|
|
62
|
+
signal<TPayload>(executionId: string, signal: IEventDefinition<TPayload>, payload: TPayload): Promise<void>;
|
|
63
|
+
processExecution(executionId: string): Promise<void>;
|
|
64
|
+
getEventBus(): NoopEventBus;
|
|
65
|
+
/** @internal - exposed for unit testing */
|
|
66
|
+
get _pollingManager(): PollingManager;
|
|
67
|
+
/** @internal - exposed for unit testing */
|
|
68
|
+
get _executionManager(): ExecutionManager;
|
|
69
|
+
/** @internal - exposed for unit testing (delegates to pollingManager) */
|
|
70
|
+
handleTimer(timer: import("./types").Timer): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
export declare function initDurableService(config: DurableServiceConfig): Promise<DurableService>;
|
|
73
|
+
export declare function disposeDurableService(service: IDurableService, config: DurableServiceConfig): Promise<void>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IDurableQueue } from "./interfaces/queue";
|
|
2
|
+
import type { IDurableExecutionProcessor } from "./interfaces/service";
|
|
3
|
+
/**
|
|
4
|
+
* Durable queue consumer (worker process role).
|
|
5
|
+
*
|
|
6
|
+
* The worker listens to the durable queue and turns queue messages into
|
|
7
|
+
* `processExecution(executionId)` calls on the service layer (`ExecutionManager`
|
|
8
|
+
* behind `IDurableExecutionProcessor`). This is how "resume" work is distributed
|
|
9
|
+
* horizontally: the store is the source of truth, the queue provides delivery.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DurableWorker {
|
|
12
|
+
private readonly service;
|
|
13
|
+
private readonly queue;
|
|
14
|
+
constructor(service: IDurableExecutionProcessor, queue: IDurableQueue);
|
|
15
|
+
start(): Promise<void>;
|
|
16
|
+
private handleMessage;
|
|
17
|
+
private extractExecutionId;
|
|
18
|
+
}
|
|
19
|
+
export declare function initDurableWorker(service: IDurableExecutionProcessor, queue: IDurableQueue): Promise<DurableWorker>;
|