@bluelibs/runner 5.4.0 → 5.5.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 +23 -22
- package/dist/browser/index.cjs +5426 -2403
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +5426 -2400
- package/dist/browser/index.mjs.map +1 -1
- package/dist/edge/index.cjs +5426 -2403
- package/dist/edge/index.cjs.map +1 -1
- package/dist/edge/index.mjs +5426 -2400
- package/dist/edge/index.mjs.map +1 -1
- package/dist/node/node.cjs +7208 -6935
- package/dist/node/node.cjs.map +1 -1
- package/dist/node/node.mjs +7167 -6936
- package/dist/node/node.mjs.map +1 -1
- package/dist/types/definers/builders/asyncContext/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +8 -1
- package/dist/types/definers/builders/error/index.d.ts +1 -0
- package/dist/types/definers/builders/error/types.d.ts +2 -1
- package/dist/types/definers/builders/error/utils.d.ts +1 -0
- package/dist/types/definers/builders/event/fluent-builder.interface.d.ts +10 -0
- package/dist/types/definers/builders/hook/fluent-builder.interface.d.ts +3 -0
- package/dist/types/definers/builders/hook/types.d.ts +3 -0
- package/dist/types/definers/builders/middleware/index.d.ts +4 -2
- package/dist/types/definers/builders/middleware/resource.interface.d.ts +7 -0
- package/dist/types/definers/builders/middleware/task.interface.d.ts +7 -0
- package/dist/types/definers/builders/middleware/types.d.ts +22 -3
- package/dist/types/definers/builders/middleware/utils.d.ts +2 -0
- package/dist/types/definers/builders/override/hook.d.ts +3 -0
- package/dist/types/definers/builders/override/index.d.ts +5 -0
- package/dist/types/definers/builders/resource/fluent-builder.interface.d.ts +15 -0
- package/dist/types/definers/builders/resource/index.d.ts +0 -1
- package/dist/types/definers/builders/resource/types.d.ts +1 -0
- package/dist/types/definers/builders/tag/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/tag/utils.d.ts +1 -0
- package/dist/types/definers/builders/task/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/task/index.d.ts +2 -2
- package/dist/types/definers/builders/utils.d.ts +6 -1
- package/dist/types/definers/defineError.d.ts +12 -2
- package/dist/types/definers/resourceFork.d.ts +3 -1
- package/dist/types/definers/tools.d.ts +12 -12
- package/dist/types/errors/domain-error-ids.d.ts +44 -0
- package/dist/types/errors/domain-runtime.errors.d.ts +136 -0
- package/dist/types/errors/foundation.errors.d.ts +125 -0
- package/dist/types/errors/generic.errors.d.ts +1 -0
- package/dist/types/errors/model-runtime.errors.d.ts +20 -0
- package/dist/types/errors.d.ts +5 -73
- package/dist/types/globals/cron/cron-parser.d.ts +4 -0
- package/dist/types/globals/cron/cron.errors.d.ts +8 -0
- package/dist/types/globals/cron/cron.resource.d.ts +12 -0
- package/dist/types/globals/cron/cron.tag.d.ts +2 -0
- package/dist/types/globals/cron/types.d.ts +25 -0
- package/dist/types/globals/globalMiddleware.d.ts +87 -13
- package/dist/types/globals/globalResources.d.ts +110 -24
- package/dist/types/globals/globalTags.d.ts +10 -2
- package/dist/types/globals/middleware/cache.middleware.d.ts +173 -13
- package/dist/types/globals/middleware/circuitBreaker.middleware.d.ts +5 -1
- package/dist/types/globals/middleware/concurrency.middleware.d.ts +3 -0
- package/dist/types/globals/middleware/fallback.middleware.d.ts +8 -1
- package/dist/types/globals/middleware/rateLimit.middleware.d.ts +4 -1
- package/dist/types/globals/middleware/retry.middleware.d.ts +5 -0
- package/dist/types/globals/middleware/temporal.middleware.d.ts +19 -19
- package/dist/types/globals/middleware/timeout.middleware.d.ts +4 -1
- package/dist/types/globals/resources/eventManager.resource.d.ts +2 -0
- package/dist/types/globals/resources/logger.resource.d.ts +2 -0
- package/dist/types/globals/resources/middlewareManager.resource.d.ts +2 -0
- package/dist/types/globals/resources/queue.resource.d.ts +2 -0
- package/dist/types/globals/resources/runtime.resource.d.ts +2 -0
- package/dist/types/globals/resources/serializer.resource.d.ts +2 -0
- package/dist/types/globals/resources/store.resource.d.ts +2 -0
- package/dist/types/globals/resources/taskRunner.resource.d.ts +2 -0
- package/dist/types/globals/resources/tunnel/plan.d.ts +6 -3
- package/dist/types/globals/resources/tunnel/tunnel.policy.tag.d.ts +2 -0
- package/dist/types/globals/resources/tunnel/types.d.ts +7 -2
- package/dist/types/globals/types.d.ts +6 -1
- package/dist/types/models/BuiltinsRegistry.d.ts +2 -0
- package/dist/types/models/DependencyProcessor.d.ts +26 -5
- package/dist/types/models/EventManager.d.ts +9 -9
- package/dist/types/models/LogPrinter.d.ts +5 -5
- package/dist/types/models/Logger.d.ts +16 -16
- package/dist/types/models/MiddlewareManager.d.ts +18 -0
- package/dist/types/models/OverrideManager.d.ts +4 -1
- package/dist/types/models/Queue.d.ts +2 -0
- package/dist/types/models/RunResult.d.ts +290 -26
- package/dist/types/models/Store.d.ts +20 -3
- package/dist/types/models/StoreRegistry.d.ts +2 -0
- package/dist/types/models/StoreValidator.d.ts +2 -0
- package/dist/types/models/TaskRunner.d.ts +3 -1
- package/dist/types/models/VisibilityTracker.d.ts +75 -0
- package/dist/types/models/dependency-processor/DependencyExtractor.d.ts +23 -0
- package/dist/types/models/dependency-processor/HookEventBuffer.d.ts +15 -0
- package/dist/types/models/dependency-processor/ResourceScheduler.d.ts +10 -0
- package/dist/types/models/event/EmissionExecutor.d.ts +5 -4
- package/dist/types/models/event/ListenerRegistry.d.ts +2 -0
- package/dist/types/models/index.d.ts +1 -3
- package/dist/types/models/middleware/InterceptorRegistry.d.ts +13 -4
- package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +1 -0
- package/dist/types/models/middleware/ValidationHelper.d.ts +3 -6
- package/dist/types/models/utils/disposeOrder.d.ts +5 -1
- package/dist/types/models/utils/resourceDependencyIds.d.ts +1 -0
- package/dist/types/node/durable/bus/MemoryEventBus.d.ts +10 -1
- package/dist/types/node/durable/bus/NoopEventBus.d.ts +1 -1
- package/dist/types/node/durable/bus/RedisEventBus.d.ts +8 -2
- package/dist/types/node/durable/core/CronParser.d.ts +2 -13
- package/dist/types/node/durable/core/DurableResource.d.ts +14 -32
- package/dist/types/node/durable/core/DurableService.d.ts +1 -0
- package/dist/types/node/durable/core/DurableWorker.d.ts +4 -2
- package/dist/types/node/durable/core/createRunnerDurableRuntime.d.ts +2 -0
- package/dist/types/node/durable/core/interfaces/bus.d.ts +1 -1
- package/dist/types/node/durable/core/interfaces/resource.d.ts +61 -0
- package/dist/types/node/durable/core/interfaces/service.d.ts +2 -0
- package/dist/types/node/durable/core/interfaces/store.d.ts +5 -0
- package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +1 -0
- package/dist/types/node/durable/core/managers/PollingManager.d.ts +3 -1
- package/dist/types/node/durable/core/resource.d.ts +4 -3
- package/dist/types/node/durable/core/utils.d.ts +11 -1
- package/dist/types/node/durable/queue/RabbitMQQueue.d.ts +4 -0
- package/dist/types/node/durable/resources/memoryDurableResource.d.ts +5 -3
- package/dist/types/node/durable/resources/redisDurableResource.d.ts +5 -3
- package/dist/types/node/durable/store/MemoryStore.d.ts +2 -0
- package/dist/types/node/durable/store/RedisStore.d.ts +1 -0
- package/dist/types/node/exposure/allowList.d.ts +2 -1
- package/dist/types/node/exposure/handlers/contextWrapper.d.ts +6 -2
- package/dist/types/node/exposure/handlers/errorHandlers.d.ts +1 -0
- package/dist/types/node/exposure/handlers/eventHandler.d.ts +1 -0
- package/dist/types/node/exposure/handlers/taskHandler.d.ts +3 -1
- package/dist/types/node/exposure/logging.d.ts +1 -0
- package/dist/types/node/exposure/requestHandlers.d.ts +3 -1
- package/dist/types/node/exposure/requestIdentity.d.ts +3 -0
- package/dist/types/node/exposure/resource.d.ts +4 -4
- package/dist/types/node/exposure/resourceTypes.d.ts +6 -0
- package/dist/types/node/exposure/serverLifecycle.d.ts +2 -0
- package/dist/types/node/node.d.ts +1 -1
- package/dist/types/node/tunnel/allowlist.d.ts +10 -1
- package/dist/types/platform/adapters/browser.d.ts +1 -1
- package/dist/types/platform/adapters/node-als.d.ts +1 -1
- package/dist/types/platform/adapters/node.d.ts +1 -1
- package/dist/types/platform/adapters/universal-generic.d.ts +2 -2
- package/dist/types/platform/adapters/universal.d.ts +1 -1
- package/dist/types/platform/index.d.ts +2 -2
- package/dist/types/platform/types.d.ts +1 -1
- package/dist/types/public.d.ts +374 -20
- package/dist/types/run.d.ts +17 -1
- package/dist/types/serializer/Serializer.d.ts +1 -41
- package/dist/types/serializer/errors.d.ts +8 -0
- package/dist/types/serializer/marker-key-escapes.d.ts +2 -0
- package/dist/types/serializer/serialize-utils.d.ts +1 -1
- package/dist/types/serializer/type-registry.d.ts +0 -1
- package/dist/types/serializer/types.d.ts +7 -6
- package/dist/types/testing.d.ts +1 -0
- package/dist/types/tools/getAllThrows.d.ts +13 -0
- package/dist/types/tools/throws.d.ts +1 -1
- package/dist/types/types/error.d.ts +25 -2
- package/dist/types/types/event.d.ts +35 -0
- package/dist/types/types/hook.d.ts +8 -0
- package/dist/types/types/resource.d.ts +13 -1
- package/dist/types/types/resourceMiddleware.d.ts +8 -0
- package/dist/types/types/runner.d.ts +56 -0
- package/dist/types/types/storeTypes.d.ts +5 -1
- package/dist/types/types/tag.d.ts +1 -0
- package/dist/types/types/tagged.d.ts +2 -2
- package/dist/types/types/task.d.ts +2 -2
- package/dist/types/types/taskMiddleware.d.ts +8 -0
- package/dist/types/types/utilities.d.ts +25 -3
- package/dist/ui/assets/{index-Bo7Gi6Vq.js → index-B4lZaXFJ.js} +48 -48
- package/dist/ui/index.html +1 -1
- package/dist/universal/index.cjs +5426 -2403
- package/dist/universal/index.cjs.map +1 -1
- package/dist/universal/index.mjs +5426 -2400
- package/dist/universal/index.mjs.map +1 -1
- package/package.json +18 -14
- package/readmes/AI.md +147 -42
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { TaskMiddlewareInterceptor, ResourceMiddlewareInterceptor } from "./types";
|
|
2
|
+
export type InterceptorOwnerSnapshot = {
|
|
3
|
+
globalTaskInterceptorOwnerIds: readonly string[];
|
|
4
|
+
globalResourceInterceptorOwnerIds: readonly string[];
|
|
5
|
+
perTaskMiddlewareInterceptorOwnerIds: Readonly<Record<string, readonly string[]>>;
|
|
6
|
+
perResourceMiddlewareInterceptorOwnerIds: Readonly<Record<string, readonly string[]>>;
|
|
7
|
+
};
|
|
2
8
|
/**
|
|
3
9
|
* Centralized registry for all interceptor types.
|
|
4
10
|
* Manages storage and retrieval of global and per-middleware interceptors.
|
|
@@ -24,19 +30,19 @@ export declare class InterceptorRegistry {
|
|
|
24
30
|
/**
|
|
25
31
|
* Adds a global task interceptor
|
|
26
32
|
*/
|
|
27
|
-
addGlobalTaskInterceptor(interceptor: TaskMiddlewareInterceptor): void;
|
|
33
|
+
addGlobalTaskInterceptor(interceptor: TaskMiddlewareInterceptor, ownerResourceId?: string): void;
|
|
28
34
|
/**
|
|
29
35
|
* Adds a global resource interceptor
|
|
30
36
|
*/
|
|
31
|
-
addGlobalResourceInterceptor(interceptor: ResourceMiddlewareInterceptor): void;
|
|
37
|
+
addGlobalResourceInterceptor(interceptor: ResourceMiddlewareInterceptor, ownerResourceId?: string): void;
|
|
32
38
|
/**
|
|
33
39
|
* Adds an interceptor for a specific task middleware instance
|
|
34
40
|
*/
|
|
35
|
-
addTaskMiddlewareInterceptor(middlewareId: string, interceptor: TaskMiddlewareInterceptor): void;
|
|
41
|
+
addTaskMiddlewareInterceptor(middlewareId: string, interceptor: TaskMiddlewareInterceptor, ownerResourceId?: string): void;
|
|
36
42
|
/**
|
|
37
43
|
* Adds an interceptor for a specific resource middleware instance
|
|
38
44
|
*/
|
|
39
|
-
addResourceMiddlewareInterceptor(middlewareId: string, interceptor: ResourceMiddlewareInterceptor): void;
|
|
45
|
+
addResourceMiddlewareInterceptor(middlewareId: string, interceptor: ResourceMiddlewareInterceptor, ownerResourceId?: string): void;
|
|
40
46
|
/**
|
|
41
47
|
* Gets all global task interceptors
|
|
42
48
|
*/
|
|
@@ -53,4 +59,7 @@ export declare class InterceptorRegistry {
|
|
|
53
59
|
* Gets interceptors for a specific resource middleware
|
|
54
60
|
*/
|
|
55
61
|
getResourceMiddlewareInterceptors(middlewareId: string): readonly ResourceMiddlewareInterceptor[];
|
|
62
|
+
getOwnerSnapshot(): InterceptorOwnerSnapshot;
|
|
63
|
+
private extractOwnerIds;
|
|
64
|
+
private extractOwnerIdsMap;
|
|
56
65
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IValidationSchema } from "../../defs";
|
|
1
2
|
/**
|
|
2
3
|
* Centralized validation logic for inputs and results across tasks and resources.
|
|
3
4
|
* Provides consistent error handling and messaging.
|
|
@@ -7,14 +8,10 @@ export declare class ValidationHelper {
|
|
|
7
8
|
* Validates input using the provided schema
|
|
8
9
|
* @throws ValidationError if validation fails
|
|
9
10
|
*/
|
|
10
|
-
static validateInput<T>(value:
|
|
11
|
-
parse: (v: any) => T;
|
|
12
|
-
} | undefined, id: string, type: "Task" | "Resource"): T;
|
|
11
|
+
static validateInput<T>(value: unknown, schema: IValidationSchema<T> | undefined, id: string, type: "Task" | "Resource"): T;
|
|
13
12
|
/**
|
|
14
13
|
* Validates result using the provided schema
|
|
15
14
|
* @throws ValidationError if validation fails
|
|
16
15
|
*/
|
|
17
|
-
static validateResult<T>(value:
|
|
18
|
-
parse: (v: any) => T;
|
|
19
|
-
} | undefined, id: string, type: "Task" | "Resource"): T;
|
|
16
|
+
static validateResult<T>(value: unknown, schema: IValidationSchema<T> | undefined, id: string, type: "Task" | "Resource"): T;
|
|
20
17
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ResourceStoreElementType } from "../../types/storeTypes";
|
|
2
|
+
type DisposeOrderOptions = {
|
|
3
|
+
preferInitOrderFastPath?: boolean;
|
|
4
|
+
};
|
|
2
5
|
/**
|
|
3
6
|
* Returns initialized resources sorted in dispose order (dependents first).
|
|
4
7
|
* Uses the recorded init-order when complete, otherwise falls back to a
|
|
5
8
|
* topological sort derived from the resource dependency graph.
|
|
6
9
|
*/
|
|
7
|
-
export declare function getResourcesInDisposeOrder(resources: Map<string, ResourceStoreElementType>, initializedResourceIds: readonly string[]): ResourceStoreElementType[];
|
|
10
|
+
export declare function getResourcesInDisposeOrder(resources: Map<string, ResourceStoreElementType>, initializedResourceIds: readonly string[], options?: DisposeOrderOptions): ResourceStoreElementType[];
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getResourceDependencyIds(rawDependencies: unknown): string[];
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bus";
|
|
2
|
+
import { Logger } from "../../../models/Logger";
|
|
3
|
+
export interface MemoryEventBusConfig {
|
|
4
|
+
logger?: Logger;
|
|
5
|
+
onHandlerError?: (error: unknown) => void | Promise<void>;
|
|
6
|
+
}
|
|
2
7
|
export declare class MemoryEventBus implements IEventBus {
|
|
3
8
|
private handlers;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly onHandlerError?;
|
|
11
|
+
constructor(config?: MemoryEventBusConfig);
|
|
12
|
+
private reportHandlerError;
|
|
4
13
|
publish(channel: string, event: BusEvent): Promise<void>;
|
|
5
14
|
subscribe(channel: string, handler: BusEventHandler): Promise<void>;
|
|
6
|
-
unsubscribe(channel: string): Promise<void>;
|
|
15
|
+
unsubscribe(channel: string, handler?: BusEventHandler): Promise<void>;
|
|
7
16
|
}
|
|
@@ -2,5 +2,5 @@ import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bu
|
|
|
2
2
|
export declare class NoopEventBus implements IEventBus {
|
|
3
3
|
publish(_channel: string, _event: BusEvent): Promise<void>;
|
|
4
4
|
subscribe(_channel: string, _handler: BusEventHandler): Promise<void>;
|
|
5
|
-
unsubscribe(_channel: string): Promise<void>;
|
|
5
|
+
unsubscribe(_channel: string, _handler?: BusEventHandler): Promise<void>;
|
|
6
6
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { BusEvent, BusEventHandler, IEventBus } from "../core/interfaces/bus";
|
|
2
|
+
import { Logger } from "../../../models/Logger";
|
|
2
3
|
export interface RedisEventBusConfig {
|
|
3
4
|
prefix?: string;
|
|
4
5
|
redis?: RedisEventBusClient | string;
|
|
6
|
+
logger?: Logger;
|
|
7
|
+
onHandlerError?: (error: unknown) => void | Promise<void>;
|
|
5
8
|
}
|
|
6
9
|
export interface RedisEventBusClient {
|
|
7
10
|
publish(channel: string, payload: string): Promise<unknown>;
|
|
@@ -17,7 +20,10 @@ export declare class RedisEventBus implements IEventBus {
|
|
|
17
20
|
private prefix;
|
|
18
21
|
private readonly channels;
|
|
19
22
|
private readonly serializer;
|
|
20
|
-
|
|
23
|
+
private readonly logger;
|
|
24
|
+
private readonly onHandlerError?;
|
|
25
|
+
constructor(config?: RedisEventBusConfig);
|
|
26
|
+
private reportHandlerError;
|
|
21
27
|
private k;
|
|
22
28
|
private tryParse;
|
|
23
29
|
private coerceTimestamp;
|
|
@@ -25,6 +31,6 @@ export declare class RedisEventBus implements IEventBus {
|
|
|
25
31
|
private deserializeEvent;
|
|
26
32
|
publish(channel: string, event: BusEvent): Promise<void>;
|
|
27
33
|
subscribe(channel: string, handler: BusEventHandler): Promise<void>;
|
|
28
|
-
unsubscribe(channel: string): Promise<void>;
|
|
34
|
+
unsubscribe(channel: string, handler?: BusEventHandler): Promise<void>;
|
|
29
35
|
dispose(): Promise<void>;
|
|
30
36
|
}
|
|
@@ -1,15 +1,4 @@
|
|
|
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
1
|
export declare class CronParser {
|
|
10
|
-
static getNextRun(
|
|
11
|
-
static isValid(
|
|
12
|
-
private static tryGetExternalParser;
|
|
13
|
-
private static parseFallback;
|
|
14
|
-
private static getNextRunFallback;
|
|
2
|
+
static getNextRun(expression: string, from?: Date): Date;
|
|
3
|
+
static isValid(expression: string): boolean;
|
|
15
4
|
}
|
|
@@ -3,46 +3,16 @@ import type { Store } from "../../../models/Store";
|
|
|
3
3
|
import type { IEventDefinition } from "../../../types/event";
|
|
4
4
|
import type { AnyTask, ITask } from "../../../types/task";
|
|
5
5
|
import type { IDurableContext } from "./interfaces/context";
|
|
6
|
+
import type { IDurableResource } from "./interfaces/resource";
|
|
6
7
|
import type { DurableStartAndWaitResult, ExecuteOptions, IDurableService, ScheduleOptions } from "./interfaces/service";
|
|
7
8
|
import type { Schedule } from "./types";
|
|
8
9
|
import type { IDurableStore } from "./interfaces/store";
|
|
9
10
|
import { DurableOperator } from "./DurableOperator";
|
|
10
11
|
import { type DurableFlowShape } from "./flowShape";
|
|
12
|
+
export type { IDurableResource } from "./interfaces/resource";
|
|
11
13
|
export interface DurableResourceConfig {
|
|
12
14
|
worker?: boolean;
|
|
13
15
|
}
|
|
14
|
-
export interface IDurableResource extends Pick<IDurableService, "cancelExecution" | "wait" | "schedule" | "ensureSchedule" | "pauseSchedule" | "resumeSchedule" | "getSchedule" | "listSchedules" | "updateSchedule" | "removeSchedule" | "recover" | "signal"> {
|
|
15
|
-
start<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
16
|
-
start(task: string, input?: unknown, options?: ExecuteOptions): Promise<string>;
|
|
17
|
-
startAndWait<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
18
|
-
startAndWait<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
19
|
-
/**
|
|
20
|
-
* Reads the durable context for the currently running workflow execution.
|
|
21
|
-
* Throws if called outside of a durable execution.
|
|
22
|
-
*/
|
|
23
|
-
use(): IDurableContext;
|
|
24
|
-
/**
|
|
25
|
-
* Describe a durable workflow task using real runtime dependencies.
|
|
26
|
-
*
|
|
27
|
-
* - Non-durable deps are kept as-is (so pre-step control flow can use them).
|
|
28
|
-
* - Durable deps are shimmed so `durable.use()` returns the recorder context.
|
|
29
|
-
*
|
|
30
|
-
* The task must be registered in the runtime store (ie. part of the app tree).
|
|
31
|
-
*
|
|
32
|
-
* Accepts any Runner `ITask`. Generic `TInput` is inferred from the task,
|
|
33
|
-
* or can be specified explicitly: `describe<MyInput>(task, input)`.
|
|
34
|
-
*/
|
|
35
|
-
describe<TInput>(task: ITask<TInput, any, any, any, any, any>, input?: TInput): Promise<DurableFlowShape>;
|
|
36
|
-
/**
|
|
37
|
-
* Store-backed operator API to inspect and administrate executions
|
|
38
|
-
* (steps/audit/history and operator actions where supported by the store).
|
|
39
|
-
*/
|
|
40
|
-
readonly operator: DurableOperator;
|
|
41
|
-
/**
|
|
42
|
-
* Returns all tasks tagged as durable workflows in the current runtime.
|
|
43
|
-
*/
|
|
44
|
-
getWorkflows(): AnyTask[];
|
|
45
|
-
}
|
|
46
16
|
/**
|
|
47
17
|
* A Runner-facing wrapper around `DurableService` that exposes a per-instance
|
|
48
18
|
* context store and the public durable API (`start`, `startAndWait`, `signal`, `wait`, etc.).
|
|
@@ -65,6 +35,10 @@ export declare class DurableResource implements IDurableResource {
|
|
|
65
35
|
private resolveDescribeInput;
|
|
66
36
|
start<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
67
37
|
start(task: string, input?: unknown, options?: ExecuteOptions): Promise<string>;
|
|
38
|
+
/** @deprecated Use start(task, input, options). */
|
|
39
|
+
startExecution<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
40
|
+
/** @deprecated Use start(task, input, options). */
|
|
41
|
+
startExecution(task: string, input?: unknown, options?: ExecuteOptions): Promise<string>;
|
|
68
42
|
cancelExecution(executionId: string, reason?: string): Promise<void>;
|
|
69
43
|
wait<TResult>(executionId: string, options?: {
|
|
70
44
|
timeout?: number;
|
|
@@ -72,6 +46,14 @@ export declare class DurableResource implements IDurableResource {
|
|
|
72
46
|
}): Promise<TResult>;
|
|
73
47
|
startAndWait<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
74
48
|
startAndWait<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
49
|
+
/** @deprecated Use startAndWait(task, input, options) and read `result.data`. */
|
|
50
|
+
execute<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
51
|
+
/** @deprecated Use startAndWait(task, input, options) and read `result.data`. */
|
|
52
|
+
execute<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<TResult>;
|
|
53
|
+
/** @deprecated Use startAndWait(task, input, options). */
|
|
54
|
+
executeStrict<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
55
|
+
/** @deprecated Use startAndWait(task, input, options). */
|
|
56
|
+
executeStrict<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
75
57
|
schedule<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input: TInput | undefined, options: ScheduleOptions): Promise<string>;
|
|
76
58
|
schedule(task: string, input: unknown, options: ScheduleOptions): Promise<string>;
|
|
77
59
|
ensureSchedule<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input: TInput | undefined, options: ScheduleOptions & {
|
|
@@ -30,6 +30,7 @@ export declare class DurableService implements IDurableService {
|
|
|
30
30
|
private readonly signalHandler;
|
|
31
31
|
private readonly executionManager;
|
|
32
32
|
private readonly pollingManager;
|
|
33
|
+
private readonly logger;
|
|
33
34
|
/** Unique worker ID for distributed timer coordination */
|
|
34
35
|
private readonly workerId;
|
|
35
36
|
constructor(config: DurableServiceConfig);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IDurableQueue } from "./interfaces/queue";
|
|
2
2
|
import type { IDurableExecutionProcessor } from "./interfaces/service";
|
|
3
|
+
import { Logger } from "../../../models/Logger";
|
|
3
4
|
/**
|
|
4
5
|
* Durable queue consumer (worker process role).
|
|
5
6
|
*
|
|
@@ -11,9 +12,10 @@ import type { IDurableExecutionProcessor } from "./interfaces/service";
|
|
|
11
12
|
export declare class DurableWorker {
|
|
12
13
|
private readonly service;
|
|
13
14
|
private readonly queue;
|
|
14
|
-
|
|
15
|
+
private readonly logger;
|
|
16
|
+
constructor(service: IDurableExecutionProcessor, queue: IDurableQueue, logger?: Logger);
|
|
15
17
|
start(): Promise<void>;
|
|
16
18
|
private handleMessage;
|
|
17
19
|
private extractExecutionId;
|
|
18
20
|
}
|
|
19
|
-
export declare function initDurableWorker(service: IDurableExecutionProcessor, queue: IDurableQueue): Promise<DurableWorker>;
|
|
21
|
+
export declare function initDurableWorker(service: IDurableExecutionProcessor, queue: IDurableQueue, logger?: Logger): Promise<DurableWorker>;
|
|
@@ -3,6 +3,7 @@ import { DurableResource } from "./DurableResource";
|
|
|
3
3
|
import type { EventManager } from "../../../models/EventManager";
|
|
4
4
|
import type { TaskRunner } from "../../../models/TaskRunner";
|
|
5
5
|
import type { Store } from "../../../models/Store";
|
|
6
|
+
import type { Logger } from "../../../models/Logger";
|
|
6
7
|
export type RunnerDurableRuntimeConfig = Omit<DurableServiceConfig, "taskExecutor" | "tasks" | "taskResolver" | "contextProvider"> & {
|
|
7
8
|
/**
|
|
8
9
|
* Starts an embedded worker (queue consumer) in this process.
|
|
@@ -14,5 +15,6 @@ export interface RunnerDurableDeps {
|
|
|
14
15
|
taskRunner: TaskRunner;
|
|
15
16
|
eventManager: EventManager;
|
|
16
17
|
runnerStore: Store;
|
|
18
|
+
logger: Logger;
|
|
17
19
|
}
|
|
18
20
|
export declare function createRunnerDurableRuntime(config: RunnerDurableRuntimeConfig, deps: RunnerDurableDeps): Promise<DurableResource>;
|
|
@@ -7,7 +7,7 @@ export type BusEventHandler = (event: BusEvent) => Promise<void>;
|
|
|
7
7
|
export interface IEventBus {
|
|
8
8
|
publish(channel: string, event: BusEvent): Promise<void>;
|
|
9
9
|
subscribe(channel: string, handler: BusEventHandler): Promise<void>;
|
|
10
|
-
unsubscribe(channel: string): Promise<void>;
|
|
10
|
+
unsubscribe(channel: string, handler?: BusEventHandler): Promise<void>;
|
|
11
11
|
init?(): Promise<void>;
|
|
12
12
|
dispose?(): Promise<void>;
|
|
13
13
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AnyTask, ITask } from "../../../../types/task";
|
|
2
|
+
import type { IDurableContext } from "./context";
|
|
3
|
+
import type { DurableStartAndWaitResult, ExecuteOptions, IDurableService } from "./service";
|
|
4
|
+
import type { DurableOperator } from "../DurableOperator";
|
|
5
|
+
import type { DurableFlowShape } from "../flowShape";
|
|
6
|
+
export interface IDurableResource extends Pick<IDurableService, "cancelExecution" | "wait" | "schedule" | "ensureSchedule" | "pauseSchedule" | "resumeSchedule" | "getSchedule" | "listSchedules" | "updateSchedule" | "removeSchedule" | "recover" | "signal"> {
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use start(task, input, options).
|
|
9
|
+
*/
|
|
10
|
+
startExecution<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Use start(task, input, options).
|
|
13
|
+
*/
|
|
14
|
+
startExecution(task: string, input?: unknown, options?: ExecuteOptions): Promise<string>;
|
|
15
|
+
start<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<string>;
|
|
16
|
+
start(task: string, input?: unknown, options?: ExecuteOptions): Promise<string>;
|
|
17
|
+
startAndWait<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
18
|
+
startAndWait<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use startAndWait(task, input, options) and read `result.data`.
|
|
21
|
+
*/
|
|
22
|
+
execute<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<TResult>;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use startAndWait(task, input, options) and read `result.data`.
|
|
25
|
+
*/
|
|
26
|
+
execute<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<TResult>;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use startAndWait(task, input, options).
|
|
29
|
+
*/
|
|
30
|
+
executeStrict<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Use startAndWait(task, input, options).
|
|
33
|
+
*/
|
|
34
|
+
executeStrict<TResult = unknown>(task: string, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<TResult>>;
|
|
35
|
+
/**
|
|
36
|
+
* Reads the durable context for the currently running workflow execution.
|
|
37
|
+
* Throws if called outside of a durable execution.
|
|
38
|
+
*/
|
|
39
|
+
use(): IDurableContext;
|
|
40
|
+
/**
|
|
41
|
+
* Describe a durable workflow task using real runtime dependencies.
|
|
42
|
+
*
|
|
43
|
+
* - Non-durable deps are kept as-is (so pre-step control flow can use them).
|
|
44
|
+
* - Durable deps are shimmed so `durable.use()` returns the recorder context.
|
|
45
|
+
*
|
|
46
|
+
* The task must be registered in the runtime store (ie. part of the app tree).
|
|
47
|
+
*
|
|
48
|
+
* Accepts any Runner `ITask`. Generic `TInput` is inferred from the task,
|
|
49
|
+
* or can be specified explicitly: `describe<MyInput>(task, input)`.
|
|
50
|
+
*/
|
|
51
|
+
describe<TInput>(task: ITask<TInput, any, any, any, any, any>, input?: TInput): Promise<DurableFlowShape>;
|
|
52
|
+
/**
|
|
53
|
+
* Store-backed operator API to inspect and administrate executions
|
|
54
|
+
* (steps/audit/history and operator actions where supported by the store).
|
|
55
|
+
*/
|
|
56
|
+
readonly operator: DurableOperator;
|
|
57
|
+
/**
|
|
58
|
+
* Returns all tasks tagged as durable workflows in the current runtime.
|
|
59
|
+
*/
|
|
60
|
+
getWorkflows(): AnyTask[];
|
|
61
|
+
}
|
|
@@ -6,6 +6,7 @@ import type { IEventBus } from "./bus";
|
|
|
6
6
|
import type { IDurableContext } from "./context";
|
|
7
7
|
import type { Schedule } from "../types";
|
|
8
8
|
import type { DurableAuditEmitter } from "../audit";
|
|
9
|
+
import type { Logger } from "../../../../models/Logger";
|
|
9
10
|
export interface ITaskExecutor {
|
|
10
11
|
run<TInput, TResult>(task: ITask<TInput, Promise<TResult>, any, any, any, any>, input?: TInput): Promise<TResult>;
|
|
11
12
|
}
|
|
@@ -20,6 +21,7 @@ export interface DurableServiceConfig {
|
|
|
20
21
|
store: IDurableStore;
|
|
21
22
|
queue?: IDurableQueue;
|
|
22
23
|
eventBus?: IEventBus;
|
|
24
|
+
logger?: Logger;
|
|
23
25
|
taskExecutor?: ITaskExecutor;
|
|
24
26
|
determinism?: {
|
|
25
27
|
/**
|
|
@@ -62,5 +62,10 @@ export interface IDurableStore {
|
|
|
62
62
|
init?(): Promise<void>;
|
|
63
63
|
dispose?(): Promise<void>;
|
|
64
64
|
acquireLock?(resource: string, ttlMs: number): Promise<string | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Renews an existing lock if and only if `lockId` still owns `resource`.
|
|
67
|
+
* Returns true when renewed, false when lock is missing/expired/re-owned.
|
|
68
|
+
*/
|
|
69
|
+
renewLock?(resource: string, lockId: string, ttlMs: number): Promise<boolean>;
|
|
65
70
|
releaseLock?(resource: string, lockId: string): Promise<void>;
|
|
66
71
|
}
|
|
@@ -71,6 +71,7 @@ export declare class ExecutionManager {
|
|
|
71
71
|
cancelExecution(executionId: string, reason?: string): Promise<void>;
|
|
72
72
|
startAndWait(taskRef: string | ITask<any, Promise<any>, any, any, any, any>, input?: unknown, options?: ExecuteOptions): Promise<DurableStartAndWaitResult<unknown>>;
|
|
73
73
|
processExecution(executionId: string): Promise<void>;
|
|
74
|
+
private startLockHeartbeat;
|
|
74
75
|
kickoffExecution(executionId: string): Promise<void>;
|
|
75
76
|
notifyExecutionFinished(execution: Execution): Promise<void>;
|
|
76
77
|
private runExecutionAttempt;
|
|
@@ -4,6 +4,7 @@ import { type Timer } from "../types";
|
|
|
4
4
|
import type { AuditLogger } from "./AuditLogger";
|
|
5
5
|
import type { TaskRegistry } from "./TaskRegistry";
|
|
6
6
|
import type { ScheduleManager } from "./ScheduleManager";
|
|
7
|
+
import { Logger } from "../../../../models/Logger";
|
|
7
8
|
export interface PollingConfig {
|
|
8
9
|
enabled?: boolean;
|
|
9
10
|
interval?: number;
|
|
@@ -39,7 +40,8 @@ export declare class PollingManager {
|
|
|
39
40
|
private isRunning;
|
|
40
41
|
private pollingTimer;
|
|
41
42
|
private pollingWake;
|
|
42
|
-
|
|
43
|
+
private readonly logger;
|
|
44
|
+
constructor(workerId: string, config: PollingConfig, store: IDurableStore, queue: IDurableQueue | undefined, maxAttempts: number, defaultTimeout: number | undefined, taskRegistry: TaskRegistry, auditLogger: AuditLogger, scheduleManager: ScheduleManager, callbacks: PollingManagerCallbacks, logger?: Logger);
|
|
43
45
|
start(): void;
|
|
44
46
|
stop(): Promise<void>;
|
|
45
47
|
private poll;
|
|
@@ -8,7 +8,8 @@ export type DurableResourceRuntimeConfig = RunnerDurableRuntimeConfig;
|
|
|
8
8
|
* - Register it via `durable.with({ store, queue, eventBus, ... })`
|
|
9
9
|
*/
|
|
10
10
|
export declare const durableResource: import("../../../defs").IResource<RunnerDurableRuntimeConfig, Promise<import("./DurableResource").DurableResource>, {
|
|
11
|
-
taskRunner: import("../../../defs").IResource<void, Promise<import("
|
|
12
|
-
eventManager: import("../../../defs").IResource<void, Promise<import("
|
|
13
|
-
runnerStore: import("../../../defs").IResource<void, Promise<import("
|
|
11
|
+
taskRunner: import("../../../defs").IResource<void, Promise<import("../..").TaskRunner>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
12
|
+
eventManager: import("../../../defs").IResource<void, Promise<import("../..").EventManager>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
13
|
+
runnerStore: import("../../../defs").IResource<void, Promise<import("../..").Store>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
14
|
+
logger: import("../../../defs").IResource<void, Promise<import("../..").Logger>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
14
15
|
}, any, import("../../../defs").IResourceMeta, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RunnerError } from "../../../definers/defineError";
|
|
1
2
|
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
2
3
|
export declare function sleepMs(ms: number): Promise<void>;
|
|
3
4
|
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T>;
|
|
@@ -13,7 +14,16 @@ export declare function parseSignalState(value: unknown): {
|
|
|
13
14
|
* task errors by carrying execution metadata and a (serialized) cause payload.
|
|
14
15
|
* `WaitManager` is the primary producer of this error.
|
|
15
16
|
*/
|
|
16
|
-
export declare class DurableExecutionError extends
|
|
17
|
+
export declare class DurableExecutionError extends RunnerError<{
|
|
18
|
+
message: string;
|
|
19
|
+
executionId: string;
|
|
20
|
+
taskId: string;
|
|
21
|
+
attempt: number;
|
|
22
|
+
causeInfo?: {
|
|
23
|
+
message: string;
|
|
24
|
+
stack?: string;
|
|
25
|
+
};
|
|
26
|
+
}> {
|
|
17
27
|
readonly executionId: string;
|
|
18
28
|
readonly taskId: string;
|
|
19
29
|
readonly attempt: number;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IDurableQueue, MessageHandler, QueueMessage } from "../core/interfaces/queue";
|
|
2
|
+
import { Logger } from "../../../models/Logger";
|
|
2
3
|
export interface RabbitMQQueueConfig {
|
|
3
4
|
url?: string;
|
|
4
5
|
queueName?: string;
|
|
@@ -9,6 +10,7 @@ export interface RabbitMQQueueConfig {
|
|
|
9
10
|
messageTtl?: number;
|
|
10
11
|
};
|
|
11
12
|
prefetch?: number;
|
|
13
|
+
logger?: Pick<Logger, "error">;
|
|
12
14
|
}
|
|
13
15
|
export declare class RabbitMQQueue implements IDurableQueue {
|
|
14
16
|
private connection;
|
|
@@ -19,8 +21,10 @@ export declare class RabbitMQQueue implements IDurableQueue {
|
|
|
19
21
|
private readonly isQuorum;
|
|
20
22
|
private readonly deadLetterQueue?;
|
|
21
23
|
private readonly messageTtl?;
|
|
24
|
+
private readonly logger;
|
|
22
25
|
private messageMap;
|
|
23
26
|
constructor(config: RabbitMQQueueConfig);
|
|
27
|
+
private reportError;
|
|
24
28
|
init(): Promise<void>;
|
|
25
29
|
enqueue<T>(message: Omit<QueueMessage<T>, "id" | "createdAt" | "attempts">): Promise<string>;
|
|
26
30
|
consume<T>(handler: MessageHandler<T>): Promise<void>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { RunnerDurableRuntimeConfig } from "../core/createRunnerDurableRuntime";
|
|
2
2
|
import type { DurableResource } from "../core/DurableResource";
|
|
3
|
+
import { Logger } from "../../../models/Logger";
|
|
3
4
|
export type MemoryDurableResourceConfig = Omit<RunnerDurableRuntimeConfig, "store" | "queue" | "eventBus"> & {
|
|
4
5
|
/**
|
|
5
6
|
* Isolation namespace (used for defaults and docs).
|
|
@@ -14,8 +15,9 @@ interface MemoryDurableResourceContext {
|
|
|
14
15
|
runtimeConfig: RunnerDurableRuntimeConfig | null;
|
|
15
16
|
}
|
|
16
17
|
export declare const memoryDurableResource: import("../../../defs").IResource<MemoryDurableResourceConfig, Promise<DurableResource>, {
|
|
17
|
-
taskRunner: import("../../../defs").IResource<void, Promise<import("
|
|
18
|
-
eventManager: import("../../../defs").IResource<void, Promise<import("
|
|
19
|
-
runnerStore: import("../../../defs").IResource<void, Promise<import("
|
|
18
|
+
taskRunner: import("../../../defs").IResource<void, Promise<import("../..").TaskRunner>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
19
|
+
eventManager: import("../../../defs").IResource<void, Promise<import("../..").EventManager>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
20
|
+
runnerStore: import("../../../defs").IResource<void, Promise<import("../..").Store>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
21
|
+
logger: import("../../../defs").IResource<void, Promise<Logger>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
20
22
|
}, MemoryDurableResourceContext, import("../../../defs").IResourceMeta, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
21
23
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { RunnerDurableRuntimeConfig } from "../core/createRunnerDurableRuntime";
|
|
2
2
|
import type { DurableResource } from "../core/DurableResource";
|
|
3
|
+
import { Logger } from "../../../models/Logger";
|
|
3
4
|
export type RedisDurableResourceConfig = Omit<RunnerDurableRuntimeConfig, "store" | "queue" | "eventBus"> & {
|
|
4
5
|
/**
|
|
5
6
|
* Isolation namespace (used for key prefixes and queue names).
|
|
@@ -28,8 +29,9 @@ interface RedisDurableResourceContext {
|
|
|
28
29
|
runtimeConfig: RunnerDurableRuntimeConfig | null;
|
|
29
30
|
}
|
|
30
31
|
export declare const redisDurableResource: import("../../../defs").IResource<RedisDurableResourceConfig, Promise<DurableResource>, {
|
|
31
|
-
taskRunner: import("../../../defs").IResource<void, Promise<import("
|
|
32
|
-
eventManager: import("../../../defs").IResource<void, Promise<import("
|
|
33
|
-
runnerStore: import("../../../defs").IResource<void, Promise<import("
|
|
32
|
+
taskRunner: import("../../../defs").IResource<void, Promise<import("../..").TaskRunner>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
33
|
+
eventManager: import("../../../defs").IResource<void, Promise<import("../..").EventManager>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
34
|
+
runnerStore: import("../../../defs").IResource<void, Promise<import("../..").Store>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
35
|
+
logger: import("../../../defs").IResource<void, Promise<Logger>, {}, any, any, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
34
36
|
}, RedisDurableResourceContext, import("../../../defs").IResourceMeta, import("../../../defs").TagType[], import("../../../defs").ResourceMiddlewareAttachmentType[]>;
|
|
35
37
|
export {};
|
|
@@ -9,6 +9,7 @@ export declare class MemoryStore implements IDurableStore {
|
|
|
9
9
|
private timers;
|
|
10
10
|
private schedules;
|
|
11
11
|
private locks;
|
|
12
|
+
private pruneExpiredLocks;
|
|
12
13
|
private getIdempotencyMapKey;
|
|
13
14
|
getExecutionIdByIdempotencyKey(params: {
|
|
14
15
|
taskId: string;
|
|
@@ -52,5 +53,6 @@ export declare class MemoryStore implements IDurableStore {
|
|
|
52
53
|
listSchedules(): Promise<Schedule[]>;
|
|
53
54
|
listActiveSchedules(): Promise<Schedule[]>;
|
|
54
55
|
acquireLock(resource: string, ttlMs: number): Promise<string | null>;
|
|
56
|
+
renewLock(resource: string, lockId: string, ttlMs: number): Promise<boolean>;
|
|
55
57
|
releaseLock(resource: string, lockId: string): Promise<void>;
|
|
56
58
|
}
|
|
@@ -85,5 +85,6 @@ export declare class RedisStore implements IDurableStore {
|
|
|
85
85
|
listActiveSchedules(): Promise<Schedule[]>;
|
|
86
86
|
acquireLock(resource: string, ttlMs: number): Promise<string | null>;
|
|
87
87
|
releaseLock(resource: string, lockId: string): Promise<void>;
|
|
88
|
+
renewLock(resource: string, lockId: string, ttlMs: number): Promise<boolean>;
|
|
88
89
|
dispose(): Promise<void>;
|
|
89
90
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Store } from "../../models/Store";
|
|
2
|
+
import type { Logger } from "../../models/Logger";
|
|
2
3
|
import type { AllowListGuard } from "./types";
|
|
3
|
-
export declare function createAllowListGuard(store: Store, allowOpen?: boolean): AllowListGuard;
|
|
4
|
+
export declare function createAllowListGuard(store: Store, allowOpen?: boolean, logger?: Logger): AllowListGuard;
|
|
@@ -8,11 +8,15 @@ export interface ExposureContextDeps {
|
|
|
8
8
|
};
|
|
9
9
|
serializer: SerializerLike;
|
|
10
10
|
}
|
|
11
|
+
interface AsyncContextHydrationOptions {
|
|
12
|
+
allowAsyncContext?: boolean;
|
|
13
|
+
}
|
|
11
14
|
/**
|
|
12
15
|
* Builds a composed provider: first user async contexts (if any), then exposure context
|
|
13
16
|
*/
|
|
14
|
-
export declare const withExposureContext: <T>(req: IncomingMessage, res: ServerResponse, controller: AbortController, deps: ExposureContextDeps, fn: () => Promise<T
|
|
17
|
+
export declare const withExposureContext: <T>(req: IncomingMessage, res: ServerResponse, controller: AbortController, deps: ExposureContextDeps, fn: () => Promise<T>, options?: AsyncContextHydrationOptions) => Promise<T>;
|
|
15
18
|
/**
|
|
16
19
|
* Builds user async contexts (if any), without exposure context (for events)
|
|
17
20
|
*/
|
|
18
|
-
export declare const withUserContexts: <T>(req: IncomingMessage, deps: Pick<ExposureContextDeps, "store" | "serializer">, fn: () => Promise<T
|
|
21
|
+
export declare const withUserContexts: <T>(req: IncomingMessage, deps: Pick<ExposureContextDeps, "store" | "serializer">, fn: () => Promise<T>, options?: AsyncContextHydrationOptions) => Promise<T>;
|
|
22
|
+
export {};
|
|
@@ -15,6 +15,7 @@ interface EventHandlerDeps {
|
|
|
15
15
|
maxSize?: number;
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
+
allowAsyncContext?: (eventId: string) => boolean;
|
|
18
19
|
}
|
|
19
20
|
export declare const createEventHandler: (deps: EventHandlerDeps) => (req: IncomingMessage, res: ServerResponse, eventId: string) => Promise<void>;
|
|
20
21
|
export {};
|
|
@@ -2,6 +2,7 @@ import type { IncomingMessage, ServerResponse } from "http";
|
|
|
2
2
|
import type { SerializerLike } from "../../../serializer";
|
|
3
3
|
import type { Authenticator, AllowListGuard } from "../types";
|
|
4
4
|
import type { NodeExposureDeps, NodeExposureHttpCorsConfig } from "../resourceTypes";
|
|
5
|
+
import type { MultipartLimits } from "../multipart";
|
|
5
6
|
interface TaskHandlerDeps {
|
|
6
7
|
store: NodeExposureDeps["store"];
|
|
7
8
|
taskRunner: NodeExposureDeps["taskRunner"];
|
|
@@ -17,8 +18,9 @@ interface TaskHandlerDeps {
|
|
|
17
18
|
json?: {
|
|
18
19
|
maxSize?: number;
|
|
19
20
|
};
|
|
20
|
-
multipart?:
|
|
21
|
+
multipart?: MultipartLimits;
|
|
21
22
|
};
|
|
23
|
+
allowAsyncContext?: (taskId: string) => boolean;
|
|
22
24
|
}
|
|
23
25
|
export declare const createTaskHandler: (deps: TaskHandlerDeps) => (req: IncomingMessage, res: ServerResponse, taskId: string) => Promise<void>;
|
|
24
26
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Logger } from "../../models/Logger";
|
|
2
2
|
export declare function safeLogError(logger: Logger, message: string, data: Record<string, unknown>): void;
|
|
3
3
|
export declare function safeLogInfo(logger: Logger, message: string, data: Record<string, unknown>): void;
|
|
4
|
+
export declare function safeLogWarn(logger: Logger, message: string, data: Record<string, unknown>): void;
|
|
4
5
|
export declare function errorMessage(error: unknown): string;
|