nvent 0.4.5 → 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.
Files changed (124) hide show
  1. package/dist/module.d.mts +1 -1
  2. package/dist/module.mjs +433 -175
  3. package/dist/runtime/adapters/base/index.d.ts +6 -0
  4. package/dist/runtime/adapters/base/index.js +1 -0
  5. package/dist/runtime/adapters/base/store-validator.d.ts +48 -0
  6. package/dist/runtime/adapters/base/store-validator.js +147 -0
  7. package/dist/runtime/adapters/builtin/file-queue.d.ts +15 -1
  8. package/dist/runtime/adapters/builtin/file-queue.js +70 -6
  9. package/dist/runtime/adapters/builtin/file-store.d.ts +4 -18
  10. package/dist/runtime/adapters/builtin/file-store.js +90 -109
  11. package/dist/runtime/adapters/builtin/memory-queue.js +4 -0
  12. package/dist/runtime/adapters/builtin/memory-store.d.ts +42 -31
  13. package/dist/runtime/adapters/builtin/memory-store.js +253 -183
  14. package/dist/runtime/adapters/factory.d.ts +2 -2
  15. package/dist/runtime/adapters/factory.js +54 -20
  16. package/dist/runtime/adapters/interfaces/store.d.ts +177 -113
  17. package/dist/runtime/config/index.d.ts +2 -2
  18. package/dist/runtime/config/index.js +14 -6
  19. package/dist/runtime/config/types.d.ts +32 -2
  20. package/dist/runtime/events/eventBus.d.ts +1 -1
  21. package/dist/runtime/events/types.d.ts +31 -2
  22. package/dist/runtime/events/utils/scheduleTrigger.d.ts +8 -0
  23. package/dist/runtime/events/utils/scheduleTrigger.js +69 -0
  24. package/dist/runtime/events/utils/stallDetector.d.ts +44 -3
  25. package/dist/runtime/events/utils/stallDetector.js +288 -89
  26. package/dist/runtime/events/utils/triggerRuntime.d.ts +58 -0
  27. package/dist/runtime/events/utils/triggerRuntime.js +212 -0
  28. package/dist/runtime/events/wiring/flowWiring.d.ts +11 -5
  29. package/dist/runtime/events/wiring/flowWiring.js +620 -92
  30. package/dist/runtime/events/wiring/registry.d.ts +2 -2
  31. package/dist/runtime/events/wiring/registry.js +8 -6
  32. package/dist/runtime/events/wiring/streamWiring.d.ts +15 -11
  33. package/dist/runtime/events/wiring/streamWiring.js +88 -11
  34. package/dist/runtime/events/wiring/triggerWiring.d.ts +21 -0
  35. package/dist/runtime/events/wiring/triggerWiring.js +412 -0
  36. package/dist/runtime/{server → nitro}/plugins/00.adapters.js +8 -4
  37. package/dist/runtime/{server → nitro}/plugins/02.workers.js +21 -3
  38. package/dist/runtime/nitro/plugins/03.triggers.d.ts +12 -0
  39. package/dist/runtime/nitro/plugins/03.triggers.js +55 -0
  40. package/dist/runtime/nitro/routes/webhook.await.d.ts +23 -0
  41. package/dist/runtime/nitro/routes/webhook.await.js +90 -0
  42. package/dist/runtime/nitro/routes/webhook.trigger.d.ts +69 -0
  43. package/dist/runtime/nitro/routes/webhook.trigger.js +64 -0
  44. package/dist/runtime/{utils → nitro/utils}/adapters.d.ts +6 -6
  45. package/dist/runtime/nitro/utils/awaitPatterns/event.d.ts +15 -0
  46. package/dist/runtime/nitro/utils/awaitPatterns/event.js +120 -0
  47. package/dist/runtime/nitro/utils/awaitPatterns/index.d.ts +28 -0
  48. package/dist/runtime/nitro/utils/awaitPatterns/index.js +55 -0
  49. package/dist/runtime/nitro/utils/awaitPatterns/schedule.d.ts +16 -0
  50. package/dist/runtime/nitro/utils/awaitPatterns/schedule.js +78 -0
  51. package/dist/runtime/nitro/utils/awaitPatterns/time.d.ts +15 -0
  52. package/dist/runtime/nitro/utils/awaitPatterns/time.js +67 -0
  53. package/dist/runtime/nitro/utils/awaitPatterns/webhook.d.ts +15 -0
  54. package/dist/runtime/nitro/utils/awaitPatterns/webhook.js +120 -0
  55. package/dist/runtime/{utils → nitro/utils}/defineFunction.d.ts +2 -2
  56. package/dist/runtime/{utils → nitro/utils}/defineFunction.js +3 -3
  57. package/dist/runtime/{utils → nitro/utils}/defineFunctionConfig.d.ts +156 -0
  58. package/dist/runtime/{utils → nitro/utils}/defineFunctionConfig.js +1 -0
  59. package/dist/runtime/nitro/utils/defineHooks.d.ts +41 -0
  60. package/dist/runtime/nitro/utils/defineHooks.js +6 -0
  61. package/dist/runtime/{utils → nitro/utils}/registerAdapter.d.ts +3 -3
  62. package/dist/runtime/{utils → nitro/utils}/registerAdapter.js +1 -1
  63. package/dist/runtime/nitro/utils/useAwait.d.ts +71 -0
  64. package/dist/runtime/nitro/utils/useAwait.js +139 -0
  65. package/dist/runtime/{utils → nitro/utils}/useEventManager.d.ts +2 -2
  66. package/dist/runtime/{utils → nitro/utils}/useEventManager.js +1 -1
  67. package/dist/runtime/nitro/utils/useFlow.d.ts +68 -0
  68. package/dist/runtime/nitro/utils/useFlow.js +226 -0
  69. package/dist/runtime/nitro/utils/useHookRegistry.d.ts +34 -0
  70. package/dist/runtime/nitro/utils/useHookRegistry.js +25 -0
  71. package/dist/runtime/nitro/utils/useRunContext.d.ts +6 -0
  72. package/dist/runtime/nitro/utils/useRunContext.js +102 -0
  73. package/dist/runtime/nitro/utils/useStreamTopics.d.ts +83 -0
  74. package/dist/runtime/nitro/utils/useStreamTopics.js +94 -0
  75. package/dist/runtime/nitro/utils/useTrigger.d.ts +150 -0
  76. package/dist/runtime/nitro/utils/useTrigger.js +320 -0
  77. package/dist/runtime/scheduler/index.d.ts +33 -0
  78. package/dist/runtime/scheduler/index.js +38 -0
  79. package/dist/runtime/scheduler/scheduler.d.ts +113 -0
  80. package/dist/runtime/scheduler/scheduler.js +623 -0
  81. package/dist/runtime/scheduler/types.d.ts +116 -0
  82. package/dist/runtime/scheduler/types.js +0 -0
  83. package/dist/runtime/worker/node/runner.d.ts +12 -2
  84. package/dist/runtime/worker/node/runner.js +141 -37
  85. package/package.json +6 -6
  86. package/dist/runtime/server/api/_flows/[name]/clear-history.delete.d.ts +0 -10
  87. package/dist/runtime/server/api/_flows/[name]/clear-history.delete.js +0 -55
  88. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.d.ts +0 -2
  89. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.js +0 -21
  90. package/dist/runtime/server/api/_flows/[name]/runs.get.d.ts +0 -17
  91. package/dist/runtime/server/api/_flows/[name]/runs.get.js +0 -64
  92. package/dist/runtime/server/api/_flows/[name]/schedule.post.d.ts +0 -2
  93. package/dist/runtime/server/api/_flows/[name]/schedule.post.js +0 -66
  94. package/dist/runtime/server/api/_flows/[name]/schedules/[id].delete.d.ts +0 -2
  95. package/dist/runtime/server/api/_flows/[name]/schedules/[id].delete.js +0 -47
  96. package/dist/runtime/server/api/_flows/[name]/schedules.get.d.ts +0 -2
  97. package/dist/runtime/server/api/_flows/[name]/schedules.get.js +0 -50
  98. package/dist/runtime/server/api/_flows/[name]/start.post.d.ts +0 -2
  99. package/dist/runtime/server/api/_flows/[name]/start.post.js +0 -9
  100. package/dist/runtime/server/api/_flows/index.get.d.ts +0 -6
  101. package/dist/runtime/server/api/_flows/index.get.js +0 -5
  102. package/dist/runtime/server/api/_flows/ws.d.ts +0 -60
  103. package/dist/runtime/server/api/_flows/ws.js +0 -209
  104. package/dist/runtime/server/api/_queues/[name]/job/[id].get.d.ts +0 -2
  105. package/dist/runtime/server/api/_queues/[name]/job/[id].get.js +0 -14
  106. package/dist/runtime/server/api/_queues/[name]/job/index.get.d.ts +0 -2
  107. package/dist/runtime/server/api/_queues/[name]/job/index.get.js +0 -27
  108. package/dist/runtime/server/api/_queues/index.get.d.ts +0 -2
  109. package/dist/runtime/server/api/_queues/index.get.js +0 -106
  110. package/dist/runtime/server/api/_queues/ws.d.ts +0 -48
  111. package/dist/runtime/server/api/_queues/ws.js +0 -215
  112. package/dist/runtime/utils/useFlowEngine.d.ts +0 -19
  113. package/dist/runtime/utils/useFlowEngine.js +0 -108
  114. package/dist/runtime/utils/useStreamTopics.d.ts +0 -72
  115. package/dist/runtime/utils/useStreamTopics.js +0 -47
  116. /package/dist/runtime/{server → nitro}/plugins/00.adapters.d.ts +0 -0
  117. /package/dist/runtime/{server → nitro}/plugins/01.ws-lifecycle.d.ts +0 -0
  118. /package/dist/runtime/{server → nitro}/plugins/01.ws-lifecycle.js +0 -0
  119. /package/dist/runtime/{server → nitro}/plugins/02.workers.d.ts +0 -0
  120. /package/dist/runtime/{utils → nitro/utils}/adapters.js +0 -0
  121. /package/dist/runtime/{utils → nitro/utils}/useNventLogger.d.ts +0 -0
  122. /package/dist/runtime/{utils → nitro/utils}/useNventLogger.js +0 -0
  123. /package/dist/runtime/{utils → nitro/utils}/wsPeerManager.d.ts +0 -0
  124. /package/dist/runtime/{utils → nitro/utils}/wsPeerManager.js +0 -0
@@ -0,0 +1,38 @@
1
+ import { Scheduler } from "./scheduler.js";
2
+ import { useRuntimeConfig } from "#imports";
3
+ let schedulerInstance = null;
4
+ export function createScheduler(store) {
5
+ const config = useRuntimeConfig();
6
+ const prefix = config.nvent.store?.prefix || "nvent";
7
+ const useIndexLocking = !!(store.indexAdd && store.index.get);
8
+ return new Scheduler({
9
+ store,
10
+ keyPrefix: `${prefix}:scheduler`,
11
+ lockTTL: 3e5,
12
+ // 5 minutes
13
+ useIndexLocking
14
+ });
15
+ }
16
+ export function useScheduler() {
17
+ if (!schedulerInstance) {
18
+ throw new Error("Scheduler not initialized. Call initializeScheduler() first.");
19
+ }
20
+ return schedulerInstance;
21
+ }
22
+ export async function initializeScheduler(store) {
23
+ if (schedulerInstance) {
24
+ return schedulerInstance;
25
+ }
26
+ schedulerInstance = createScheduler(store);
27
+ await schedulerInstance.start();
28
+ return schedulerInstance;
29
+ }
30
+ export async function shutdownScheduler() {
31
+ if (schedulerInstance) {
32
+ await schedulerInstance.stop();
33
+ schedulerInstance = null;
34
+ }
35
+ }
36
+ export function resetScheduler() {
37
+ schedulerInstance = null;
38
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Scheduler
3
+ *
4
+ * Store-based scheduler with distributed locking for horizontal scaling.
5
+ * Ensures only one instance executes each scheduled job.
6
+ */
7
+ import type { ScheduledJob, SchedulerAdapter } from './types.js';
8
+ import type { StoreAdapter } from '../adapters/interfaces/store.js';
9
+ export interface SchedulerOptions {
10
+ /**
11
+ * Store adapter for locking (Redis recommended)
12
+ */
13
+ store: StoreAdapter;
14
+ /**
15
+ * Key prefix for locks and job data
16
+ * Uses configured store prefix + ':scheduler'
17
+ * @default '{prefix}:scheduler' (e.g., 'nvent:scheduler')
18
+ */
19
+ keyPrefix?: string;
20
+ /**
21
+ * Lock TTL in milliseconds
22
+ * @default 300000 (5 minutes)
23
+ */
24
+ lockTTL?: number;
25
+ /**
26
+ * Unique instance identifier
27
+ * @default Auto-generated
28
+ */
29
+ instanceId?: string;
30
+ /**
31
+ * Use store indexes for locking (more robust) vs simple KV
32
+ * @default true
33
+ */
34
+ useIndexLocking?: boolean;
35
+ }
36
+ export declare class Scheduler implements SchedulerAdapter {
37
+ private store;
38
+ private keyPrefix;
39
+ private lockTTL;
40
+ private instanceId;
41
+ private useIndexLocking;
42
+ private jobs;
43
+ private jobConfigs;
44
+ private lockRenewalTimers;
45
+ private started;
46
+ private logger;
47
+ constructor(options: SchedulerOptions);
48
+ schedule(job: ScheduledJob): Promise<string>;
49
+ /**
50
+ * Execute job with distributed lock
51
+ * Prevents multiple instances from running the same job
52
+ */
53
+ private executeWithLock;
54
+ private executeJob;
55
+ /**
56
+ * Acquire distributed lock using store adapter
57
+ */
58
+ private acquireLock;
59
+ /**
60
+ * Release distributed lock
61
+ */
62
+ private releaseLock;
63
+ /**
64
+ * Start periodic lock renewal (for long-running jobs)
65
+ */
66
+ private startLockRenewal;
67
+ /**
68
+ * Stop lock renewal
69
+ */
70
+ private stopLockRenewal;
71
+ /**
72
+ * Persist job configuration
73
+ */
74
+ private persistJob;
75
+ /**
76
+ * Update job statistics
77
+ */
78
+ private updateJobStats;
79
+ unschedule(jobId: string): Promise<boolean>;
80
+ /**
81
+ * Recover jobs from store on startup
82
+ * Critical for:
83
+ * - Restarts: Re-create in-memory schedulers
84
+ * - Horizontal scaling: New instances pick up existing jobs
85
+ * - Orphaned awaits: Resume flows waiting on schedules
86
+ */
87
+ private recoverJobs;
88
+ /**
89
+ * Recover a single job from persisted data
90
+ *
91
+ * IMPORTANT: This method reconstructs in-memory schedulers (CronJob/setInterval)
92
+ * WITHOUT calling schedule() to avoid re-persisting handler functions (which
93
+ * cannot be serialized). Handlers are reconstructed from metadata where possible.
94
+ */
95
+ private recoverJob;
96
+ /**
97
+ * Recover well-known job patterns when index scan is not available
98
+ * This includes:
99
+ * - stall-detection (always exists)
100
+ * - await-time-* (flows waiting on time delays)
101
+ * - await-schedule-* (flows waiting on cron schedules)
102
+ */
103
+ private recoverWellKnownJobs;
104
+ start(): Promise<void>;
105
+ stop(): Promise<void>;
106
+ getScheduledJobs(): Promise<ScheduledJob[]>;
107
+ /**
108
+ * Get all persisted jobs from store (for debugging/monitoring)
109
+ * This shows ALL jobs across ALL instances with their runtime stats
110
+ */
111
+ getAllPersistedJobs(): Promise<ScheduledJob[]>;
112
+ isHealthy(): Promise<boolean>;
113
+ }