nvent 0.4.4 → 0.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/dist/module.d.mts +4 -185
- package/dist/module.json +3 -3
- package/dist/module.mjs +451 -257
- package/dist/runtime/adapters/base/index.d.ts +6 -0
- package/dist/runtime/adapters/base/index.js +1 -0
- package/dist/runtime/adapters/base/store-validator.d.ts +48 -0
- package/dist/runtime/adapters/base/store-validator.js +147 -0
- package/dist/runtime/adapters/builtin/file-queue.d.ts +67 -0
- package/dist/runtime/adapters/builtin/file-queue.js +499 -0
- package/dist/runtime/adapters/builtin/file-store.d.ts +32 -0
- package/dist/runtime/adapters/builtin/file-store.js +206 -0
- package/dist/runtime/adapters/builtin/file-stream.d.ts +39 -0
- package/dist/runtime/adapters/builtin/file-stream.js +56 -0
- package/dist/runtime/adapters/builtin/index.d.ts +10 -0
- package/dist/runtime/adapters/builtin/index.js +5 -0
- package/dist/runtime/adapters/builtin/memory-queue.d.ts +52 -0
- package/dist/runtime/adapters/builtin/memory-queue.js +243 -0
- package/dist/runtime/adapters/builtin/memory-store.d.ts +68 -0
- package/dist/runtime/adapters/builtin/memory-store.js +333 -0
- package/dist/runtime/adapters/builtin/memory-stream.d.ts +21 -0
- package/dist/runtime/adapters/builtin/memory-stream.js +56 -0
- package/dist/runtime/adapters/factory.d.ts +31 -0
- package/dist/runtime/adapters/factory.js +134 -0
- package/dist/runtime/adapters/index.d.ts +8 -0
- package/dist/runtime/adapters/index.js +3 -0
- package/dist/runtime/adapters/interfaces/index.d.ts +11 -0
- package/dist/runtime/adapters/interfaces/index.js +3 -0
- package/dist/runtime/adapters/interfaces/queue.d.ts +150 -0
- package/dist/runtime/adapters/interfaces/store.d.ts +297 -0
- package/dist/runtime/adapters/interfaces/stream.d.ts +62 -0
- package/dist/runtime/adapters/registry.d.ts +85 -0
- package/dist/runtime/adapters/registry.js +161 -0
- package/dist/runtime/config/index.d.ts +29 -0
- package/dist/runtime/config/index.js +175 -0
- package/dist/runtime/config/types.d.ts +397 -0
- package/dist/runtime/config/types.js +0 -0
- package/dist/runtime/{server-utils/events → events}/eventBus.d.ts +1 -1
- package/dist/runtime/events/types.d.ts +145 -0
- package/dist/runtime/events/types.js +0 -0
- package/dist/runtime/events/utils/scheduleTrigger.d.ts +8 -0
- package/dist/runtime/events/utils/scheduleTrigger.js +69 -0
- package/dist/runtime/events/utils/stallDetector.d.ts +140 -0
- package/dist/runtime/events/utils/stallDetector.js +436 -0
- package/dist/runtime/events/utils/triggerRuntime.d.ts +58 -0
- package/dist/runtime/events/utils/triggerRuntime.js +212 -0
- package/dist/runtime/{server-utils/events → events}/wiring/flowWiring.d.ts +12 -11
- package/dist/runtime/events/wiring/flowWiring.js +1020 -0
- package/dist/runtime/events/wiring/registry.d.ts +19 -0
- package/dist/runtime/events/wiring/registry.js +35 -0
- package/dist/runtime/events/wiring/stateWiring.d.ts +37 -0
- package/dist/runtime/events/wiring/stateWiring.js +92 -0
- package/dist/runtime/events/wiring/streamWiring.d.ts +36 -0
- package/dist/runtime/events/wiring/streamWiring.js +156 -0
- package/dist/runtime/events/wiring/triggerWiring.d.ts +21 -0
- package/dist/runtime/events/wiring/triggerWiring.js +412 -0
- package/dist/runtime/nitro/plugins/00.adapters.d.ts +14 -0
- package/dist/runtime/nitro/plugins/00.adapters.js +73 -0
- package/dist/runtime/nitro/plugins/02.workers.js +63 -0
- package/dist/runtime/nitro/plugins/03.triggers.d.ts +12 -0
- package/dist/runtime/nitro/plugins/03.triggers.js +55 -0
- package/dist/runtime/nitro/routes/webhook.await.d.ts +23 -0
- package/dist/runtime/nitro/routes/webhook.await.js +90 -0
- package/dist/runtime/nitro/routes/webhook.trigger.d.ts +69 -0
- package/dist/runtime/nitro/routes/webhook.trigger.js +64 -0
- package/dist/runtime/nitro/utils/adapters.d.ts +66 -0
- package/dist/runtime/nitro/utils/adapters.js +51 -0
- package/dist/runtime/nitro/utils/awaitPatterns/event.d.ts +15 -0
- package/dist/runtime/nitro/utils/awaitPatterns/event.js +120 -0
- package/dist/runtime/nitro/utils/awaitPatterns/index.d.ts +28 -0
- package/dist/runtime/nitro/utils/awaitPatterns/index.js +55 -0
- package/dist/runtime/nitro/utils/awaitPatterns/schedule.d.ts +16 -0
- package/dist/runtime/nitro/utils/awaitPatterns/schedule.js +78 -0
- package/dist/runtime/nitro/utils/awaitPatterns/time.d.ts +15 -0
- package/dist/runtime/nitro/utils/awaitPatterns/time.js +67 -0
- package/dist/runtime/nitro/utils/awaitPatterns/webhook.d.ts +15 -0
- package/dist/runtime/nitro/utils/awaitPatterns/webhook.js +120 -0
- package/dist/runtime/nitro/utils/defineFunction.d.ts +10 -0
- package/dist/runtime/nitro/utils/defineFunction.js +17 -0
- package/dist/runtime/nitro/utils/defineFunctionConfig.d.ts +310 -0
- package/dist/runtime/nitro/utils/defineFunctionConfig.js +3 -0
- package/dist/runtime/nitro/utils/defineHooks.d.ts +41 -0
- package/dist/runtime/nitro/utils/defineHooks.js +6 -0
- package/dist/runtime/nitro/utils/registerAdapter.d.ts +59 -0
- package/dist/runtime/nitro/utils/registerAdapter.js +13 -0
- package/dist/runtime/nitro/utils/useAwait.d.ts +71 -0
- package/dist/runtime/nitro/utils/useAwait.js +139 -0
- package/dist/runtime/{server-utils → nitro}/utils/useEventManager.d.ts +2 -2
- package/dist/runtime/{server-utils → nitro}/utils/useEventManager.js +1 -1
- package/dist/runtime/nitro/utils/useFlow.d.ts +68 -0
- package/dist/runtime/nitro/utils/useFlow.js +226 -0
- package/dist/runtime/nitro/utils/useHookRegistry.d.ts +34 -0
- package/dist/runtime/nitro/utils/useHookRegistry.js +25 -0
- package/dist/runtime/{server-utils → nitro}/utils/useNventLogger.js +2 -2
- package/dist/runtime/nitro/utils/useRunContext.d.ts +6 -0
- package/dist/runtime/nitro/utils/useRunContext.js +102 -0
- package/dist/runtime/nitro/utils/useStreamTopics.d.ts +83 -0
- package/dist/runtime/nitro/utils/useStreamTopics.js +94 -0
- package/dist/runtime/nitro/utils/useTrigger.d.ts +150 -0
- package/dist/runtime/nitro/utils/useTrigger.js +320 -0
- package/dist/runtime/scheduler/index.d.ts +33 -0
- package/dist/runtime/scheduler/index.js +38 -0
- package/dist/runtime/scheduler/scheduler.d.ts +113 -0
- package/dist/runtime/scheduler/scheduler.js +623 -0
- package/dist/runtime/scheduler/types.d.ts +116 -0
- package/dist/runtime/scheduler/types.js +0 -0
- package/dist/runtime/tsconfig.json +8 -0
- package/dist/runtime/worker/node/runner.d.ts +53 -0
- package/dist/runtime/worker/node/runner.js +327 -0
- package/dist/types.d.mts +2 -2
- package/package.json +16 -46
- package/LICENSE +0 -21
- package/README.md +0 -389
- package/dist/runtime/app/assets/vueflow.css +0 -1
- package/dist/runtime/app/components/ConfirmDialog.d.vue.ts +0 -33
- package/dist/runtime/app/components/ConfirmDialog.vue +0 -121
- package/dist/runtime/app/components/ConfirmDialog.vue.d.ts +0 -33
- package/dist/runtime/app/components/FlowDiagram.d.vue.ts +0 -64
- package/dist/runtime/app/components/FlowDiagram.vue +0 -338
- package/dist/runtime/app/components/FlowDiagram.vue.d.ts +0 -64
- package/dist/runtime/app/components/FlowNodeCard.d.vue.ts +0 -29
- package/dist/runtime/app/components/FlowNodeCard.vue +0 -156
- package/dist/runtime/app/components/FlowNodeCard.vue.d.ts +0 -29
- package/dist/runtime/app/components/FlowRunOverview.d.vue.ts +0 -9
- package/dist/runtime/app/components/FlowRunOverview.vue +0 -291
- package/dist/runtime/app/components/FlowRunOverview.vue.d.ts +0 -9
- package/dist/runtime/app/components/FlowRunStatusBadge.d.vue.ts +0 -14
- package/dist/runtime/app/components/FlowRunStatusBadge.vue +0 -60
- package/dist/runtime/app/components/FlowRunStatusBadge.vue.d.ts +0 -14
- package/dist/runtime/app/components/FlowRunTimeline.d.vue.ts +0 -12
- package/dist/runtime/app/components/FlowRunTimeline.vue +0 -127
- package/dist/runtime/app/components/FlowRunTimeline.vue.d.ts +0 -12
- package/dist/runtime/app/components/FlowScheduleDialog.d.vue.ts +0 -16
- package/dist/runtime/app/components/FlowScheduleDialog.vue +0 -226
- package/dist/runtime/app/components/FlowScheduleDialog.vue.d.ts +0 -16
- package/dist/runtime/app/components/FlowSchedulesList.d.vue.ts +0 -12
- package/dist/runtime/app/components/FlowSchedulesList.vue +0 -99
- package/dist/runtime/app/components/FlowSchedulesList.vue.d.ts +0 -12
- package/dist/runtime/app/components/JobScheduling.d.vue.ts +0 -6
- package/dist/runtime/app/components/JobScheduling.vue +0 -203
- package/dist/runtime/app/components/JobScheduling.vue.d.ts +0 -6
- package/dist/runtime/app/components/ListItem.d.vue.ts +0 -23
- package/dist/runtime/app/components/ListItem.vue +0 -70
- package/dist/runtime/app/components/ListItem.vue.d.ts +0 -23
- package/dist/runtime/app/components/QueueConfigDetails.d.vue.ts +0 -45
- package/dist/runtime/app/components/QueueConfigDetails.vue +0 -412
- package/dist/runtime/app/components/QueueConfigDetails.vue.d.ts +0 -45
- package/dist/runtime/app/components/StatCounter.d.vue.ts +0 -9
- package/dist/runtime/app/components/StatCounter.vue +0 -25
- package/dist/runtime/app/components/StatCounter.vue.d.ts +0 -9
- package/dist/runtime/app/components/TimelineList.d.vue.ts +0 -7
- package/dist/runtime/app/components/TimelineList.vue +0 -210
- package/dist/runtime/app/components/TimelineList.vue.d.ts +0 -7
- package/dist/runtime/app/components/nhealth/component-router.d.vue.ts +0 -46
- package/dist/runtime/app/components/nhealth/component-router.vue +0 -26
- package/dist/runtime/app/components/nhealth/component-router.vue.d.ts +0 -46
- package/dist/runtime/app/components/nhealth/component-shell.d.vue.ts +0 -24
- package/dist/runtime/app/components/nhealth/component-shell.vue +0 -89
- package/dist/runtime/app/components/nhealth/component-shell.vue.d.ts +0 -24
- package/dist/runtime/app/composables/useAnalyzedFlows.d.ts +0 -14
- package/dist/runtime/app/composables/useAnalyzedFlows.js +0 -8
- package/dist/runtime/app/composables/useComponentRouter.d.ts +0 -38
- package/dist/runtime/app/composables/useComponentRouter.js +0 -240
- package/dist/runtime/app/composables/useFlowRunTimeline.d.ts +0 -80
- package/dist/runtime/app/composables/useFlowRunTimeline.js +0 -68
- package/dist/runtime/app/composables/useFlowRuns.d.ts +0 -18
- package/dist/runtime/app/composables/useFlowRuns.js +0 -32
- package/dist/runtime/app/composables/useFlowRunsInfinite.d.ts +0 -24
- package/dist/runtime/app/composables/useFlowRunsInfinite.js +0 -123
- package/dist/runtime/app/composables/useFlowRunsPolling.d.ts +0 -9
- package/dist/runtime/app/composables/useFlowRunsPolling.js +0 -33
- package/dist/runtime/app/composables/useFlowState.d.ts +0 -125
- package/dist/runtime/app/composables/useFlowState.js +0 -211
- package/dist/runtime/app/composables/useFlowWebSocket.d.ts +0 -27
- package/dist/runtime/app/composables/useFlowWebSocket.js +0 -205
- package/dist/runtime/app/composables/useFlowsNavigation.d.ts +0 -10
- package/dist/runtime/app/composables/useFlowsNavigation.js +0 -58
- package/dist/runtime/app/composables/useQueueJobs.d.ts +0 -26
- package/dist/runtime/app/composables/useQueueJobs.js +0 -20
- package/dist/runtime/app/composables/useQueueUpdates.d.ts +0 -26
- package/dist/runtime/app/composables/useQueueUpdates.js +0 -122
- package/dist/runtime/app/composables/useQueues.d.ts +0 -45
- package/dist/runtime/app/composables/useQueues.js +0 -26
- package/dist/runtime/app/composables/useQueuesLive.d.ts +0 -19
- package/dist/runtime/app/composables/useQueuesLive.js +0 -143
- package/dist/runtime/app/pages/flows/index.d.vue.ts +0 -3
- package/dist/runtime/app/pages/flows/index.vue +0 -645
- package/dist/runtime/app/pages/flows/index.vue.d.ts +0 -3
- package/dist/runtime/app/pages/index.d.vue.ts +0 -3
- package/dist/runtime/app/pages/index.vue +0 -34
- package/dist/runtime/app/pages/index.vue.d.ts +0 -3
- package/dist/runtime/app/pages/queues/index.d.vue.ts +0 -3
- package/dist/runtime/app/pages/queues/index.vue +0 -229
- package/dist/runtime/app/pages/queues/index.vue.d.ts +0 -3
- package/dist/runtime/app/pages/queues/job.d.vue.ts +0 -3
- package/dist/runtime/app/pages/queues/job.vue +0 -262
- package/dist/runtime/app/pages/queues/job.vue.d.ts +0 -3
- package/dist/runtime/app/pages/queues/jobs.d.vue.ts +0 -3
- package/dist/runtime/app/pages/queues/jobs.vue +0 -291
- package/dist/runtime/app/pages/queues/jobs.vue.d.ts +0 -3
- package/dist/runtime/app/plugins/vueflow.client.d.ts +0 -2
- package/dist/runtime/app/plugins/vueflow.client.js +0 -11
- package/dist/runtime/constants.d.ts +0 -11
- package/dist/runtime/constants.js +0 -11
- package/dist/runtime/schema.d.ts +0 -37
- package/dist/runtime/schema.js +0 -20
- package/dist/runtime/server/api/_flows/[name]/clear-history.delete.d.ts +0 -10
- package/dist/runtime/server/api/_flows/[name]/clear-history.delete.js +0 -44
- package/dist/runtime/server/api/_flows/[name]/runs.get.d.ts +0 -7
- package/dist/runtime/server/api/_flows/[name]/runs.get.js +0 -53
- package/dist/runtime/server/api/_flows/[name]/schedule.post.js +0 -57
- package/dist/runtime/server/api/_flows/[name]/schedules/[id].delete.d.ts +0 -2
- package/dist/runtime/server/api/_flows/[name]/schedules/[id].delete.js +0 -42
- package/dist/runtime/server/api/_flows/[name]/schedules.get.d.ts +0 -2
- package/dist/runtime/server/api/_flows/[name]/schedules.get.js +0 -48
- package/dist/runtime/server/api/_flows/[name]/start.post.d.ts +0 -2
- package/dist/runtime/server/api/_flows/[name]/start.post.js +0 -9
- package/dist/runtime/server/api/_flows/index.get.d.ts +0 -6
- package/dist/runtime/server/api/_flows/index.get.js +0 -5
- package/dist/runtime/server/api/_flows/ws.d.ts +0 -60
- package/dist/runtime/server/api/_flows/ws.js +0 -188
- package/dist/runtime/server/api/_queues/[name]/job/[id].get.d.ts +0 -2
- package/dist/runtime/server/api/_queues/[name]/job/[id].get.js +0 -9
- package/dist/runtime/server/api/_queues/[name]/job/index.get.d.ts +0 -2
- package/dist/runtime/server/api/_queues/[name]/job/index.get.js +0 -18
- package/dist/runtime/server/api/_queues/index.get.d.ts +0 -2
- package/dist/runtime/server/api/_queues/index.get.js +0 -63
- package/dist/runtime/server/api/_queues/ws.d.ts +0 -48
- package/dist/runtime/server/api/_queues/ws.js +0 -205
- package/dist/runtime/server/plugins/00.event-store.d.ts +0 -13
- package/dist/runtime/server/plugins/00.event-store.js +0 -16
- package/dist/runtime/server/plugins/flow-management.d.ts +0 -13
- package/dist/runtime/server/plugins/flow-management.js +0 -65
- package/dist/runtime/server/plugins/queue-management.d.ts +0 -2
- package/dist/runtime/server/plugins/queue-management.js +0 -27
- package/dist/runtime/server/plugins/state-cleanup.d.ts +0 -11
- package/dist/runtime/server/plugins/state-cleanup.js +0 -93
- package/dist/runtime/server/plugins/worker-management.d.ts +0 -2
- package/dist/runtime/server/plugins/worker-management.js +0 -33
- package/dist/runtime/server/tsconfig.json +0 -3
- package/dist/runtime/server-utils/events/adapters/fileAdapter.d.ts +0 -2
- package/dist/runtime/server-utils/events/adapters/fileAdapter.js +0 -382
- package/dist/runtime/server-utils/events/adapters/memoryAdapter.d.ts +0 -2
- package/dist/runtime/server-utils/events/adapters/memoryAdapter.js +0 -171
- package/dist/runtime/server-utils/events/adapters/redis/redisAdapter.d.ts +0 -2
- package/dist/runtime/server-utils/events/adapters/redis/redisAdapter.js +0 -348
- package/dist/runtime/server-utils/events/adapters/redis/redisPubSubGateway.d.ts +0 -30
- package/dist/runtime/server-utils/events/adapters/redis/redisPubSubGateway.js +0 -82
- package/dist/runtime/server-utils/events/eventStoreFactory.d.ts +0 -19
- package/dist/runtime/server-utils/events/eventStoreFactory.js +0 -44
- package/dist/runtime/server-utils/events/streamNames.d.ts +0 -17
- package/dist/runtime/server-utils/events/streamNames.js +0 -17
- package/dist/runtime/server-utils/events/types.d.ts +0 -63
- package/dist/runtime/server-utils/events/wiring/flowWiring.js +0 -409
- package/dist/runtime/server-utils/events/wiring/registry.d.ts +0 -10
- package/dist/runtime/server-utils/events/wiring/registry.js +0 -24
- package/dist/runtime/server-utils/queue/adapters/bullmq.d.ts +0 -18
- package/dist/runtime/server-utils/queue/adapters/bullmq.js +0 -164
- package/dist/runtime/server-utils/queue/queueFactory.d.ts +0 -3
- package/dist/runtime/server-utils/queue/queueFactory.js +0 -10
- package/dist/runtime/server-utils/queue/types.d.ts +0 -47
- package/dist/runtime/server-utils/state/adapters/redis.d.ts +0 -2
- package/dist/runtime/server-utils/state/adapters/redis.js +0 -42
- package/dist/runtime/server-utils/state/stateFactory.d.ts +0 -3
- package/dist/runtime/server-utils/state/stateFactory.js +0 -17
- package/dist/runtime/server-utils/state/types.d.ts +0 -23
- package/dist/runtime/server-utils/utils/defineQueueConfig.d.ts +0 -154
- package/dist/runtime/server-utils/utils/defineQueueConfig.js +0 -2
- package/dist/runtime/server-utils/utils/defineQueueWorker.d.ts +0 -10
- package/dist/runtime/server-utils/utils/defineQueueWorker.js +0 -17
- package/dist/runtime/server-utils/utils/useEventStore.d.ts +0 -20
- package/dist/runtime/server-utils/utils/useEventStore.js +0 -119
- package/dist/runtime/server-utils/utils/useFlowEngine.d.ts +0 -9
- package/dist/runtime/server-utils/utils/useFlowEngine.js +0 -44
- package/dist/runtime/server-utils/utils/useLogs.d.ts +0 -41
- package/dist/runtime/server-utils/utils/useLogs.js +0 -74
- package/dist/runtime/server-utils/utils/useQueue.d.ts +0 -31
- package/dist/runtime/server-utils/utils/useQueue.js +0 -24
- package/dist/runtime/server-utils/worker/adapter.d.ts +0 -4
- package/dist/runtime/server-utils/worker/adapter.js +0 -66
- package/dist/runtime/server-utils/worker/runner/node.d.ts +0 -27
- package/dist/runtime/server-utils/worker/runner/node.js +0 -196
- package/dist/runtime/types.d.ts +0 -132
- /package/dist/runtime/{server-utils/events/types.js → adapters/interfaces/queue.js} +0 -0
- /package/dist/runtime/{server-utils/queue/types.js → adapters/interfaces/store.js} +0 -0
- /package/dist/runtime/{server-utils/state/types.js → adapters/interfaces/stream.js} +0 -0
- /package/dist/runtime/{server-utils/events → events}/eventBus.js +0 -0
- /package/dist/runtime/{server/plugins/00.ws-lifecycle.d.ts → nitro/plugins/01.ws-lifecycle.d.ts} +0 -0
- /package/dist/runtime/{server/plugins/00.ws-lifecycle.js → nitro/plugins/01.ws-lifecycle.js} +0 -0
- /package/dist/runtime/{server/api/_flows/[name]/schedule.post.d.ts → nitro/plugins/02.workers.d.ts} +0 -0
- /package/dist/runtime/{server-utils → nitro}/utils/useNventLogger.d.ts +0 -0
- /package/dist/runtime/{server-utils → nitro}/utils/wsPeerManager.d.ts +0 -0
- /package/dist/runtime/{server-utils → nitro}/utils/wsPeerManager.js +0 -0
- /package/dist/runtime/{python → worker/python}/get_config.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { StoreValidator, createStoreValidator } from "./store-validator.js";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store Adapter Validation
|
|
3
|
+
*
|
|
4
|
+
* Centralized validation logic for index updates to ensure correct usage
|
|
5
|
+
* across all store adapter implementations.
|
|
6
|
+
*/
|
|
7
|
+
export interface StoreValidatorOptions {
|
|
8
|
+
/** Adapter name for error messages */
|
|
9
|
+
adapterName: string;
|
|
10
|
+
/** Enable counter misuse warnings (default: true in development) */
|
|
11
|
+
warnCounters?: boolean;
|
|
12
|
+
/** Throw errors on validation failures (default: true) */
|
|
13
|
+
throwOnError?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class StoreValidator {
|
|
16
|
+
private readonly adapterName;
|
|
17
|
+
private readonly warnCounters;
|
|
18
|
+
private readonly throwOnError;
|
|
19
|
+
constructor(options: StoreValidatorOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Validate index update payload
|
|
22
|
+
* Throws error if dot notation keys are detected (except 'version')
|
|
23
|
+
* Recursively checks all nested objects
|
|
24
|
+
*/
|
|
25
|
+
validateUpdatePayload(payload: Record<string, any>, method: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Recursively check for dot notation in object keys
|
|
28
|
+
*/
|
|
29
|
+
private checkDotNotationKeys;
|
|
30
|
+
/**
|
|
31
|
+
* Build a nested object suggestion from a dot notation key
|
|
32
|
+
*/
|
|
33
|
+
private buildNestedObjectSuggestion;
|
|
34
|
+
/**
|
|
35
|
+
* Detect potential counter misuse
|
|
36
|
+
* Logs warnings when numeric fields that look like counters are updated
|
|
37
|
+
* via update() instead of increment()
|
|
38
|
+
*/
|
|
39
|
+
private detectCounterMisuse;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a field looks like a counter that should use increment()
|
|
42
|
+
*/
|
|
43
|
+
private isCounterField;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Factory function to create a validator for an adapter
|
|
47
|
+
*/
|
|
48
|
+
export declare function createStoreValidator(adapterName: string, options?: Partial<StoreValidatorOptions>): StoreValidator;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export class StoreValidator {
|
|
2
|
+
adapterName;
|
|
3
|
+
warnCounters;
|
|
4
|
+
throwOnError;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.adapterName = options.adapterName;
|
|
7
|
+
this.warnCounters = options.warnCounters ?? process.env.NODE_ENV === "development";
|
|
8
|
+
this.throwOnError = options.throwOnError ?? true;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Validate index update payload
|
|
12
|
+
* Throws error if dot notation keys are detected (except 'version')
|
|
13
|
+
* Recursively checks all nested objects
|
|
14
|
+
*/
|
|
15
|
+
validateUpdatePayload(payload, method) {
|
|
16
|
+
this.checkDotNotationKeys(payload, method, []);
|
|
17
|
+
if (this.warnCounters) {
|
|
18
|
+
this.detectCounterMisuse(payload, method);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Recursively check for dot notation in object keys
|
|
23
|
+
*/
|
|
24
|
+
checkDotNotationKeys(obj, method, path) {
|
|
25
|
+
for (const key of Object.keys(obj)) {
|
|
26
|
+
const currentPath = [...path, key];
|
|
27
|
+
if (key.includes(".") && key !== "version") {
|
|
28
|
+
const fullPath = currentPath.join(".");
|
|
29
|
+
const suggestion = this.buildNestedObjectSuggestion(key);
|
|
30
|
+
const message = [
|
|
31
|
+
`[${this.adapterName}] Invalid update payload in ${method}:`,
|
|
32
|
+
`Dot notation key "${key}" detected at path "${fullPath}".`,
|
|
33
|
+
`Keys should not contain dots. Split "${key}" into nested objects: ${suggestion}`
|
|
34
|
+
].join("\n");
|
|
35
|
+
console.error(message);
|
|
36
|
+
if (this.throwOnError) {
|
|
37
|
+
throw new Error(
|
|
38
|
+
`Invalid index update: dot notation keys not supported. Key "${key}" at path "${fullPath}" contains dots.`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const value = obj[key];
|
|
43
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
44
|
+
this.checkDotNotationKeys(value, method, currentPath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build a nested object suggestion from a dot notation key
|
|
50
|
+
*/
|
|
51
|
+
buildNestedObjectSuggestion(dotKey) {
|
|
52
|
+
const parts = dotKey.split(".");
|
|
53
|
+
let suggestion = "{ ";
|
|
54
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
55
|
+
suggestion += `${parts[i]}: { `;
|
|
56
|
+
}
|
|
57
|
+
suggestion += `${parts[parts.length - 1]}: value `;
|
|
58
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
59
|
+
suggestion += "}";
|
|
60
|
+
}
|
|
61
|
+
suggestion += " }";
|
|
62
|
+
return suggestion;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Detect potential counter misuse
|
|
66
|
+
* Logs warnings when numeric fields that look like counters are updated
|
|
67
|
+
* via update() instead of increment()
|
|
68
|
+
*/
|
|
69
|
+
detectCounterMisuse(payload, method) {
|
|
70
|
+
const checkNested = (obj, path = []) => {
|
|
71
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
72
|
+
const currentPath = [...path, key];
|
|
73
|
+
if (this.isCounterField(key, value, currentPath)) {
|
|
74
|
+
console.warn(
|
|
75
|
+
`[${this.adapterName}] Potential counter misuse in ${method}:`,
|
|
76
|
+
`Field "${currentPath.join(".")}" is numeric.`,
|
|
77
|
+
`Consider using index.increment() for atomic updates instead of ${method}.`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
81
|
+
checkNested(value, currentPath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
checkNested(payload);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if a field looks like a counter that should use increment()
|
|
89
|
+
*/
|
|
90
|
+
isCounterField(key, value, path) {
|
|
91
|
+
if (typeof value !== "number") {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (path.includes("emittedEvents")) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const metadataFields = [
|
|
98
|
+
"stepCount",
|
|
99
|
+
// Total steps in flow (constant)
|
|
100
|
+
"timeout",
|
|
101
|
+
// Timeout duration
|
|
102
|
+
"delay",
|
|
103
|
+
// Delay duration
|
|
104
|
+
"timestamp",
|
|
105
|
+
// Timestamp values
|
|
106
|
+
"score",
|
|
107
|
+
// Score values
|
|
108
|
+
"priority",
|
|
109
|
+
// Priority values
|
|
110
|
+
"version"
|
|
111
|
+
// Version field
|
|
112
|
+
];
|
|
113
|
+
if (metadataFields.includes(key)) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (key.endsWith("At")) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
const counterKeywords = [
|
|
120
|
+
"count",
|
|
121
|
+
"total",
|
|
122
|
+
"running",
|
|
123
|
+
"awaiting",
|
|
124
|
+
"success",
|
|
125
|
+
"failure",
|
|
126
|
+
"cancel",
|
|
127
|
+
"pending",
|
|
128
|
+
"completed",
|
|
129
|
+
"failed",
|
|
130
|
+
"retries",
|
|
131
|
+
"attempts"
|
|
132
|
+
];
|
|
133
|
+
if (counterKeywords.some((keyword) => key.toLowerCase().includes(keyword))) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
if (path.includes("stats")) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function createStoreValidator(adapterName, options) {
|
|
143
|
+
return new StoreValidator({
|
|
144
|
+
adapterName,
|
|
145
|
+
...options
|
|
146
|
+
});
|
|
147
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Queue Adapter
|
|
3
|
+
*
|
|
4
|
+
* File-based queue implementation for development/small deployments
|
|
5
|
+
* - Uses fastq for job processing (same as memory adapter)
|
|
6
|
+
* - Persists jobs to file system
|
|
7
|
+
* - Survives restarts
|
|
8
|
+
* - Single instance only (no distributed lock)
|
|
9
|
+
*
|
|
10
|
+
* Storage format:
|
|
11
|
+
* - {dataDir}/{queueName}/jobs/{jobId}.json - Individual job files
|
|
12
|
+
* - Jobs are loaded on init and kept in memory with fastq
|
|
13
|
+
*/
|
|
14
|
+
import type { QueueAdapter, JobInput, Job, JobsQuery, ScheduleOptions, JobCounts, QueueEvent, WorkerHandler, WorkerOptions } from '../interfaces/queue.js';
|
|
15
|
+
export interface FileQueueAdapterOptions {
|
|
16
|
+
dataDir: string;
|
|
17
|
+
maxQueueSize?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class FileQueueAdapter implements QueueAdapter {
|
|
20
|
+
private jobs;
|
|
21
|
+
private eventListeners;
|
|
22
|
+
private workers;
|
|
23
|
+
private scheduledJobs;
|
|
24
|
+
private options;
|
|
25
|
+
private initialized;
|
|
26
|
+
constructor(options: FileQueueAdapterOptions);
|
|
27
|
+
init(): Promise<void>;
|
|
28
|
+
private loadJobsFromDisk;
|
|
29
|
+
private persistJob;
|
|
30
|
+
private deleteJobFile;
|
|
31
|
+
enqueue(queueName: string, job: JobInput): Promise<string>;
|
|
32
|
+
schedule(queueName: string, job: JobInput, opts?: ScheduleOptions): Promise<string>;
|
|
33
|
+
getJob(_queueName: string, id: string): Promise<Job | null>;
|
|
34
|
+
getJobs(queueName: string, query?: JobsQuery): Promise<Job[]>;
|
|
35
|
+
on(queueName: string, event: QueueEvent, callback: (payload: any) => void): () => void;
|
|
36
|
+
isPaused(queueName: string): Promise<boolean>;
|
|
37
|
+
getJobCounts(queueName: string): Promise<JobCounts>;
|
|
38
|
+
getScheduledJobs(queueName: string): Promise<Array<any>>;
|
|
39
|
+
removeScheduledJob(scheduleId: string): Promise<boolean>;
|
|
40
|
+
pause(queueName: string): Promise<void>;
|
|
41
|
+
resume(queueName: string): Promise<void>;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
registerWorker(queueName: string, jobName: string, handler: WorkerHandler, opts?: WorkerOptions): void;
|
|
44
|
+
/**
|
|
45
|
+
* Start processing waiting jobs for a queue
|
|
46
|
+
* Should be called after all handlers are registered
|
|
47
|
+
*/
|
|
48
|
+
startProcessingQueue(queueName: string): void;
|
|
49
|
+
private updateJobState;
|
|
50
|
+
private emitEvent;
|
|
51
|
+
/**
|
|
52
|
+
* Clean up completed jobs based on removeOnComplete option
|
|
53
|
+
* - true: delete immediately
|
|
54
|
+
* - false/undefined: keep forever
|
|
55
|
+
* - number: keep last N jobs, delete older ones
|
|
56
|
+
*/
|
|
57
|
+
private cleanupCompletedJobs;
|
|
58
|
+
/**
|
|
59
|
+
* Clean up failed jobs based on removeOnFail option
|
|
60
|
+
* - true: delete immediately
|
|
61
|
+
* - false/undefined: keep forever
|
|
62
|
+
* - number: keep last N jobs, delete older ones
|
|
63
|
+
*/
|
|
64
|
+
private cleanupFailedJobs;
|
|
65
|
+
private generateId;
|
|
66
|
+
private scheduleCronJob;
|
|
67
|
+
}
|