nvent 0.4.0 → 0.4.2

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 (71) hide show
  1. package/dist/module.mjs +59 -14
  2. package/dist/runtime/app/assets/vueflow.css +1 -0
  3. package/dist/runtime/app/plugins/vueflow.client.d.ts +0 -4
  4. package/dist/runtime/app/plugins/vueflow.client.js +0 -4
  5. package/dist/runtime/server/api/_flows/[name]/runs.get.js +2 -2
  6. package/dist/runtime/server/api/_flows/ws.js +9 -4
  7. package/dist/runtime/server/api/_queues/index.get.js +2 -2
  8. package/dist/runtime/server/api/_queues/ws.js +9 -4
  9. package/dist/runtime/server/plugins/00.event-store.js +1 -1
  10. package/dist/runtime/server/plugins/00.ws-lifecycle.js +10 -7
  11. package/dist/runtime/server/plugins/flow-management.js +2 -2
  12. package/dist/runtime/server/plugins/queue-management.js +4 -4
  13. package/dist/runtime/server/plugins/state-cleanup.js +3 -3
  14. package/dist/runtime/server/plugins/worker-management.js +1 -1
  15. package/dist/runtime/{server → server-utils}/events/adapters/redis/redisAdapter.js +2 -2
  16. package/dist/runtime/{server → server-utils}/events/adapters/redis/redisPubSubGateway.d.ts +1 -0
  17. package/dist/runtime/{server → server-utils}/events/adapters/redis/redisPubSubGateway.js +5 -5
  18. package/dist/runtime/{server → server-utils}/events/eventBus.d.ts +1 -1
  19. package/dist/runtime/{server → server-utils}/events/eventStoreFactory.js +2 -2
  20. package/dist/runtime/{server → server-utils}/events/types.d.ts +1 -1
  21. package/dist/runtime/{server → server-utils}/events/wiring/flowWiring.d.ts +1 -1
  22. package/dist/runtime/{server → server-utils}/events/wiring/flowWiring.js +5 -2
  23. package/dist/runtime/{server → server-utils}/queue/adapters/bullmq.d.ts +1 -0
  24. package/dist/runtime/{server → server-utils}/queue/adapters/bullmq.js +4 -4
  25. package/dist/runtime/{server → server-utils}/utils/useEventManager.d.ts +1 -1
  26. package/dist/runtime/{server → server-utils}/utils/useEventManager.js +2 -2
  27. package/dist/runtime/{server → server-utils}/utils/useEventStore.d.ts +1 -1
  28. package/dist/runtime/{server → server-utils}/utils/useEventStore.js +2 -2
  29. package/dist/runtime/{server → server-utils}/utils/useFlowEngine.js +2 -2
  30. package/dist/runtime/{server/utils/useServerLogger.d.ts → server-utils/utils/useNventLogger.d.ts} +4 -4
  31. package/dist/runtime/{server/utils/useServerLogger.js → server-utils/utils/useNventLogger.js} +1 -1
  32. package/dist/runtime/server-utils/utils/wsPeerManager.d.ts +44 -0
  33. package/dist/runtime/server-utils/utils/wsPeerManager.js +32 -0
  34. package/dist/runtime/{server → server-utils}/worker/adapter.js +3 -2
  35. package/dist/runtime/{server → server-utils}/worker/runner/node.js +4 -4
  36. package/package.json +1 -1
  37. package/dist/runtime/server/utils/wsPeerManager.d.ts +0 -34
  38. package/dist/runtime/server/utils/wsPeerManager.js +0 -23
  39. /package/dist/runtime/{server → server-utils}/events/adapters/fileAdapter.d.ts +0 -0
  40. /package/dist/runtime/{server → server-utils}/events/adapters/fileAdapter.js +0 -0
  41. /package/dist/runtime/{server → server-utils}/events/adapters/memoryAdapter.d.ts +0 -0
  42. /package/dist/runtime/{server → server-utils}/events/adapters/memoryAdapter.js +0 -0
  43. /package/dist/runtime/{server → server-utils}/events/adapters/redis/redisAdapter.d.ts +0 -0
  44. /package/dist/runtime/{server → server-utils}/events/eventBus.js +0 -0
  45. /package/dist/runtime/{server → server-utils}/events/eventStoreFactory.d.ts +0 -0
  46. /package/dist/runtime/{server → server-utils}/events/streamNames.d.ts +0 -0
  47. /package/dist/runtime/{server → server-utils}/events/streamNames.js +0 -0
  48. /package/dist/runtime/{server → server-utils}/events/types.js +0 -0
  49. /package/dist/runtime/{server → server-utils}/events/wiring/registry.d.ts +0 -0
  50. /package/dist/runtime/{server → server-utils}/events/wiring/registry.js +0 -0
  51. /package/dist/runtime/{server → server-utils}/queue/queueFactory.d.ts +0 -0
  52. /package/dist/runtime/{server → server-utils}/queue/queueFactory.js +0 -0
  53. /package/dist/runtime/{server → server-utils}/queue/types.d.ts +0 -0
  54. /package/dist/runtime/{server → server-utils}/queue/types.js +0 -0
  55. /package/dist/runtime/{server → server-utils}/state/adapters/redis.d.ts +0 -0
  56. /package/dist/runtime/{server → server-utils}/state/adapters/redis.js +0 -0
  57. /package/dist/runtime/{server → server-utils}/state/stateFactory.d.ts +0 -0
  58. /package/dist/runtime/{server → server-utils}/state/stateFactory.js +0 -0
  59. /package/dist/runtime/{server → server-utils}/state/types.d.ts +0 -0
  60. /package/dist/runtime/{server → server-utils}/state/types.js +0 -0
  61. /package/dist/runtime/{server → server-utils}/utils/defineQueueConfig.d.ts +0 -0
  62. /package/dist/runtime/{server → server-utils}/utils/defineQueueConfig.js +0 -0
  63. /package/dist/runtime/{server → server-utils}/utils/defineQueueWorker.d.ts +0 -0
  64. /package/dist/runtime/{server → server-utils}/utils/defineQueueWorker.js +0 -0
  65. /package/dist/runtime/{server → server-utils}/utils/useFlowEngine.d.ts +0 -0
  66. /package/dist/runtime/{server → server-utils}/utils/useLogs.d.ts +0 -0
  67. /package/dist/runtime/{server → server-utils}/utils/useLogs.js +0 -0
  68. /package/dist/runtime/{server → server-utils}/utils/useQueue.d.ts +0 -0
  69. /package/dist/runtime/{server → server-utils}/utils/useQueue.js +0 -0
  70. /package/dist/runtime/{server → server-utils}/worker/adapter.d.ts +0 -0
  71. /package/dist/runtime/{server → server-utils}/worker/runner/node.d.ts +0 -0
package/dist/module.mjs CHANGED
@@ -837,8 +837,10 @@ const module = defineNuxtModule({
837
837
  addImportsDir(resolve("./runtime/shared/utils"));
838
838
  addImportsDir(resolve("./runtime/app/composables"));
839
839
  if (config.ui) {
840
+ nuxt.options.css = nuxt.options.css || [];
841
+ nuxt.options.css.push(resolve("./runtime/app/assets/vueflow.css"));
840
842
  addPlugin({
841
- src: resolve("./runtime/app/plugins/vueflow.client.ts"),
843
+ src: resolve("./runtime/app/plugins/vueflow.client"),
842
844
  mode: "client"
843
845
  });
844
846
  addComponentsDir({
@@ -917,19 +919,62 @@ const module = defineNuxtModule({
917
919
  write: true,
918
920
  getContents: () => generateAnalyzedFlowsTemplate(lastCompiledRegistry)
919
921
  });
920
- addServerImports([{
921
- name: "useQueueRegistry",
922
- as: "$useQueueRegistry",
923
- from: resolve(nuxt.options.buildDir, "queue-registry")
924
- }, {
925
- name: "useWorkerHandlers",
926
- as: "$useWorkerHandlers",
927
- from: resolve(nuxt.options.buildDir, "worker-handlers")
928
- }, {
929
- name: "useAnalyzedFlows",
930
- as: "$useAnalyzedFlows",
931
- from: resolve(nuxt.options.buildDir, "analyzed-flows")
932
- }]);
922
+ addServerImports([
923
+ // Generated templates
924
+ {
925
+ name: "useQueueRegistry",
926
+ as: "$useQueueRegistry",
927
+ from: resolve(nuxt.options.buildDir, "queue-registry")
928
+ },
929
+ {
930
+ name: "useWorkerHandlers",
931
+ as: "$useWorkerHandlers",
932
+ from: resolve(nuxt.options.buildDir, "worker-handlers")
933
+ },
934
+ {
935
+ name: "useAnalyzedFlows",
936
+ as: "$useAnalyzedFlows",
937
+ from: resolve(nuxt.options.buildDir, "analyzed-flows")
938
+ },
939
+ // Core utilities for user code (moved to server-utils to avoid bundling issues)
940
+ {
941
+ name: "defineQueueConfig",
942
+ from: resolve("./runtime/server-utils/utils/defineQueueConfig")
943
+ },
944
+ {
945
+ name: "defineQueueWorker",
946
+ from: resolve("./runtime/server-utils/utils/defineQueueWorker")
947
+ },
948
+ // Composables users may need in server code
949
+ {
950
+ name: "useQueue",
951
+ from: resolve("./runtime/server-utils/utils/useQueue")
952
+ },
953
+ {
954
+ name: "useFlowEngine",
955
+ from: resolve("./runtime/server-utils/utils/useFlowEngine")
956
+ },
957
+ {
958
+ name: "useEventStore",
959
+ from: resolve("./runtime/server-utils/utils/useEventStore")
960
+ },
961
+ {
962
+ name: "useLogs",
963
+ from: resolve("./runtime/server-utils/utils/useLogs")
964
+ },
965
+ {
966
+ name: "useEventManager",
967
+ from: resolve("./runtime/server-utils/utils/useEventManager")
968
+ },
969
+ {
970
+ name: "usePeerManager",
971
+ from: resolve("./runtime/server-utils/utils/wsPeerManager")
972
+ },
973
+ {
974
+ name: "useNventLogger",
975
+ from: resolve("./runtime/server-utils/utils/useNventLogger")
976
+ }
977
+ ]);
933
978
  const refreshRegistry = async (reason, changedPath) => {
934
979
  const queuesRel = config.dir || "queues";
935
980
  const updatedRegistry = await compileRegistryFromServerWorkers(layerInfos, queuesRel, defaultConfigs);
@@ -0,0 +1 @@
1
+ @import "@vue-flow/core/dist/style.css";@import "@vue-flow/core/dist/theme-default.css";@import "@vue-flow/controls/dist/style.css";@import "@vue-flow/minimap/dist/style.css";
@@ -1,6 +1,2 @@
1
- import '@vue-flow/core/dist/style.css';
2
- import '@vue-flow/core/dist/theme-default.css';
3
- import '@vue-flow/controls/dist/style.css';
4
- import '@vue-flow/minimap/dist/style.css';
5
1
  declare const _default: import("#app").Plugin<Record<string, unknown>> & import("#app").ObjectPlugin<Record<string, unknown>>;
6
2
  export default _default;
@@ -3,10 +3,6 @@ import { VueFlow } from "@vue-flow/core";
3
3
  import { Controls } from "@vue-flow/controls";
4
4
  import { MiniMap } from "@vue-flow/minimap";
5
5
  import { Background } from "@vue-flow/background";
6
- import "@vue-flow/core/dist/style.css";
7
- import "@vue-flow/core/dist/theme-default.css";
8
- import "@vue-flow/controls/dist/style.css";
9
- import "@vue-flow/minimap/dist/style.css";
10
6
  export default defineNuxtPlugin((nuxtApp) => {
11
7
  nuxtApp.vueApp.component("VueFlow", VueFlow);
12
8
  nuxtApp.vueApp.component("Controls", Controls);
@@ -1,6 +1,6 @@
1
- import { defineEventHandler, getRouterParam, getQuery, useEventStore, useServerLogger } from "#imports";
2
- const logger = useServerLogger("api-flows-runs");
1
+ import { defineEventHandler, getRouterParam, getQuery, useEventStore, useNventLogger } from "#imports";
3
2
  export default defineEventHandler(async (event) => {
3
+ const logger = useNventLogger("api-flows-runs");
4
4
  const flowName = getRouterParam(event, "name");
5
5
  const query = getQuery(event);
6
6
  const limit = Math.min(Number.parseInt(query.limit) || 50, 100);
@@ -1,11 +1,9 @@
1
1
  import {
2
2
  defineWebSocketHandler,
3
3
  useEventStore,
4
- registerWsPeer,
5
- unregisterWsPeer,
6
- useServerLogger
4
+ usePeerManager,
5
+ useNventLogger
7
6
  } from "#imports";
8
- const logger = useServerLogger("api-flows-ws");
9
7
  const peerContexts = /* @__PURE__ */ new WeakMap();
10
8
  function safeSend(peer, data) {
11
9
  try {
@@ -17,7 +15,9 @@ function safeSend(peer, data) {
17
15
  }
18
16
  export default defineWebSocketHandler({
19
17
  open(peer) {
18
+ const logger = useNventLogger("api-flows-ws");
20
19
  logger.info("[ws] client connected:", { peerId: peer.id });
20
+ const { registerWsPeer } = usePeerManager();
21
21
  registerWsPeer(peer);
22
22
  peerContexts.set(peer, {
23
23
  subscriptions: /* @__PURE__ */ new Map()
@@ -28,6 +28,7 @@ export default defineWebSocketHandler({
28
28
  });
29
29
  },
30
30
  async message(peer, message) {
31
+ const logger = useNventLogger("api-flows-ws");
31
32
  const context = peerContexts.get(peer);
32
33
  if (!context) {
33
34
  logger.error("[ws] no context for peer:", { peerId: peer.id });
@@ -144,10 +145,12 @@ export default defineWebSocketHandler({
144
145
  }
145
146
  },
146
147
  close(peer, event) {
148
+ const logger = useNventLogger("api-flows-ws");
147
149
  const isNormalClosure = event?.code === 1e3 || event?.code === 1001;
148
150
  if (!isNormalClosure) {
149
151
  logger.info("[ws] client disconnected:", { peerId: peer.id, code: event?.code, reason: event?.reason });
150
152
  }
153
+ const { unregisterWsPeer } = usePeerManager();
151
154
  unregisterWsPeer(peer);
152
155
  const context = peerContexts.get(peer);
153
156
  if (context) {
@@ -165,7 +168,9 @@ export default defineWebSocketHandler({
165
168
  }
166
169
  },
167
170
  error(peer, error) {
171
+ const logger = useNventLogger("api-flows-ws");
168
172
  logger.error("[ws] error for peer:", { peerId: peer.id, error });
173
+ const { unregisterWsPeer } = usePeerManager();
169
174
  unregisterWsPeer(peer);
170
175
  const context = peerContexts.get(peer);
171
176
  if (context) {
@@ -1,7 +1,7 @@
1
- import { defineEventHandler, useRuntimeConfig, $useQueueRegistry, useQueue, useServerLogger } from "#imports";
2
- const logger = useServerLogger("api-queues-index");
1
+ import { defineEventHandler, useRuntimeConfig, $useQueueRegistry, useQueue, useNventLogger } from "#imports";
3
2
  export default defineEventHandler(async () => {
4
3
  const rc = useRuntimeConfig();
4
+ const logger = useNventLogger("api-queues-index");
5
5
  const cfgQueues = rc?.queue?.queues || {};
6
6
  const registry = $useQueueRegistry();
7
7
  const queue = useQueue();
@@ -1,12 +1,10 @@
1
1
  import {
2
2
  defineWebSocketHandler,
3
3
  useQueue,
4
- registerWsPeer,
5
- unregisterWsPeer,
6
- useServerLogger
4
+ usePeerManager,
5
+ useNventLogger
7
6
  } from "#imports";
8
7
  const peerContexts = /* @__PURE__ */ new WeakMap();
9
- const logger = useServerLogger("api-queues-ws");
10
8
  function safeSend(peer, data) {
11
9
  try {
12
10
  peer.send(JSON.stringify(data));
@@ -17,7 +15,9 @@ function safeSend(peer, data) {
17
15
  }
18
16
  export default defineWebSocketHandler({
19
17
  open(peer) {
18
+ const logger = useNventLogger("api-queues-ws");
20
19
  logger.info("[ws:queues] client connected:", peer.id);
20
+ const { registerWsPeer } = usePeerManager();
21
21
  registerWsPeer(peer);
22
22
  peerContexts.set(peer, {
23
23
  subscriptions: /* @__PURE__ */ new Map()
@@ -28,6 +28,7 @@ export default defineWebSocketHandler({
28
28
  });
29
29
  },
30
30
  async message(peer, message) {
31
+ const logger = useNventLogger("api-queues-ws");
31
32
  const context = peerContexts.get(peer);
32
33
  if (!context) {
33
34
  logger.error("[ws:queues] no context for peer:", peer.id);
@@ -154,6 +155,7 @@ export default defineWebSocketHandler({
154
155
  }
155
156
  },
156
157
  close(peer, event) {
158
+ const logger = useNventLogger("api-queues-ws");
157
159
  const isNormalClosure = event?.code === 1e3 || event?.code === 1001;
158
160
  if (!isNormalClosure) {
159
161
  logger.info("[ws:queues] client disconnected:", {
@@ -162,6 +164,7 @@ export default defineWebSocketHandler({
162
164
  reason: event?.reason
163
165
  });
164
166
  }
167
+ const { unregisterWsPeer } = usePeerManager();
165
168
  unregisterWsPeer(peer);
166
169
  const context = peerContexts.get(peer);
167
170
  if (context) {
@@ -179,10 +182,12 @@ export default defineWebSocketHandler({
179
182
  }
180
183
  },
181
184
  error(peer, error) {
185
+ const logger = useNventLogger("api-queues-ws");
182
186
  logger.error("[ws:queues] error for peer:", {
183
187
  peerId: peer.id,
184
188
  error
185
189
  });
190
+ const { unregisterWsPeer } = usePeerManager();
186
191
  unregisterWsPeer(peer);
187
192
  const context = peerContexts.get(peer);
188
193
  if (context) {
@@ -1,5 +1,5 @@
1
1
  import { defineNitroPlugin } from "#imports";
2
- import { getEventStoreFactory } from "../events/eventStoreFactory.js";
2
+ import { getEventStoreFactory } from "../../server-utils/events/eventStoreFactory.js";
3
3
  export default defineNitroPlugin(() => {
4
4
  const factory = getEventStoreFactory();
5
5
  factory.start();
@@ -1,15 +1,18 @@
1
1
  import {
2
2
  defineNitroPlugin,
3
- getActivePeerCount,
4
- getActivePeers,
5
- setShuttingDown,
6
- clearAllPeers,
7
- isServerShuttingDown,
8
- useServerLogger
3
+ useNventLogger,
4
+ usePeerManager
9
5
  } from "#imports";
10
- const logger = useServerLogger("plugin-ws-lifecycle");
11
6
  export default defineNitroPlugin((nitroApp) => {
7
+ const logger = useNventLogger("plugin-ws-lifecycle");
12
8
  logger.info("[ws-lifecycle] WebSocket lifecycle plugin initialized");
9
+ const {
10
+ getActivePeers,
11
+ isServerShuttingDown,
12
+ setShuttingDown,
13
+ clearAllPeers,
14
+ getActivePeerCount
15
+ } = usePeerManager();
13
16
  const originalUnhandledRejection = process.listeners("unhandledRejection");
14
17
  nitroApp.hooks.hook("close", async () => {
15
18
  setShuttingDown(true);
@@ -1,6 +1,6 @@
1
- import { defineNitroPlugin, useEventManager, $useQueueRegistry, useQueue, useServerLogger } from "#imports";
2
- const logger = useServerLogger("plugin-flow-management");
1
+ import { defineNitroPlugin, useEventManager, $useQueueRegistry, useQueue, useNventLogger } from "#imports";
3
2
  export default defineNitroPlugin((nitro) => {
3
+ const logger = useNventLogger("plugin-flow-management");
4
4
  const { onType, publishBus } = useEventManager();
5
5
  const registry = $useQueueRegistry();
6
6
  const flowIdToName = /* @__PURE__ */ new Map();
@@ -1,8 +1,8 @@
1
- import { defineNitroPlugin, useServerLogger } from "#imports";
2
- import { BullMQProvider } from "../queue/adapters/bullmq.js";
3
- import { setQueueProvider, getQueueProvider } from "../queue/queueFactory.js";
4
- const logger = useServerLogger("plugin-queue-management");
1
+ import { defineNitroPlugin, useNventLogger } from "#imports";
2
+ import { BullMQProvider } from "../../server-utils/queue/adapters/bullmq.js";
3
+ import { setQueueProvider, getQueueProvider } from "../../server-utils/queue/queueFactory.js";
5
4
  export default defineNitroPlugin(async (nitroApp) => {
5
+ const logger = useNventLogger("plugin-queue-management");
6
6
  try {
7
7
  const existingProvider = getQueueProvider();
8
8
  if (existingProvider) {
@@ -1,7 +1,7 @@
1
- import { useServerLogger, defineNitroPlugin, useEventManager, useRuntimeConfig } from "#imports";
2
- import { getStateProvider } from "../state/stateFactory.js";
3
- const logger = useServerLogger("plugin-state-cleanup");
1
+ import { useNventLogger, defineNitroPlugin, useEventManager, useRuntimeConfig } from "#imports";
2
+ import { getStateProvider } from "../../server-utils/state/stateFactory.js";
4
3
  export default defineNitroPlugin(() => {
4
+ const logger = useNventLogger("plugin-state-cleanup");
5
5
  const rc = useRuntimeConfig();
6
6
  const cleanup = rc?.queue?.state?.cleanup || { strategy: "never" };
7
7
  if (cleanup.strategy === "never" || cleanup.strategy === "ttl") {
@@ -1,5 +1,5 @@
1
1
  import { defineNitroPlugin, $useWorkerHandlers, $useQueueRegistry } from "#imports";
2
- import { registerTsWorker, closeAllWorkers } from "../worker/adapter.js";
2
+ import { registerTsWorker, closeAllWorkers } from "../../server-utils/worker/adapter.js";
3
3
  export default defineNitroPlugin(async (nitroApp) => {
4
4
  nitroApp.hooks.hook("close", async () => {
5
5
  await closeAllWorkers();
@@ -1,12 +1,12 @@
1
- import { useRuntimeConfig, useServerLogger } from "#imports";
1
+ import { useRuntimeConfig, useNventLogger } from "#imports";
2
2
  import IORedis from "ioredis";
3
3
  import { RedisPubSubGateway } from "./redisPubSubGateway.js";
4
- const logger = useServerLogger("redis-adapter");
5
4
  function nowIso() {
6
5
  return (/* @__PURE__ */ new Date()).toISOString();
7
6
  }
8
7
  export function createRedisAdapter() {
9
8
  const rc = useRuntimeConfig();
9
+ const logger = useNventLogger("redis-adapter");
10
10
  const conn = rc?.queue?.eventStore?.redis || {};
11
11
  const rsOpts = rc?.queue?.eventStore?.options?.redisStreams || {};
12
12
  const redis = new IORedis({
@@ -7,6 +7,7 @@ export declare class RedisPubSubGateway {
7
7
  private subscriber;
8
8
  private channelSubscribers;
9
9
  private initialized;
10
+ private logger;
10
11
  constructor(subscriber: IORedis);
11
12
  private initialize;
12
13
  /**
@@ -1,11 +1,11 @@
1
- import { useServerLogger } from "#imports";
2
- const logger = useServerLogger("redis-adapter");
1
+ import { useNventLogger } from "#imports";
3
2
  export class RedisPubSubGateway {
4
3
  constructor(subscriber) {
5
4
  this.subscriber = subscriber;
6
5
  }
7
6
  channelSubscribers = /* @__PURE__ */ new Map();
8
7
  initialized = false;
8
+ logger = useNventLogger("redis-pubsub-gateway");
9
9
  initialize() {
10
10
  if (this.initialized) return;
11
11
  this.initialized = true;
@@ -17,7 +17,7 @@ export class RedisPubSubGateway {
17
17
  handler(messageId);
18
18
  } catch (err) {
19
19
  if (process.env.NQ_DEBUG_EVENTS === "1") {
20
- logger.error("[redis-pubsub-gateway] Handler error:", err);
20
+ this.logger.error("[redis-pubsub-gateway] Handler error:", err);
21
21
  }
22
22
  }
23
23
  }
@@ -33,7 +33,7 @@ export class RedisPubSubGateway {
33
33
  this.channelSubscribers.set(channel, /* @__PURE__ */ new Set());
34
34
  await this.subscriber.subscribe(channel);
35
35
  if (process.env.NQ_DEBUG_EVENTS === "1") {
36
- logger.info("[redis-pubsub-gateway] Subscribed to channel:", channel);
36
+ this.logger.info("[redis-pubsub-gateway] Subscribed to channel:", channel);
37
37
  }
38
38
  }
39
39
  this.channelSubscribers.get(channel).add(handler);
@@ -46,7 +46,7 @@ export class RedisPubSubGateway {
46
46
  this.subscriber.unsubscribe(channel).catch(() => {
47
47
  });
48
48
  if (process.env.NQ_DEBUG_EVENTS === "1") {
49
- logger.info("[redis-pubsub-gateway] Unsubscribed from channel:", channel);
49
+ this.logger.info("[redis-pubsub-gateway] Unsubscribed from channel:", channel);
50
50
  }
51
51
  }
52
52
  }
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  type Handler = (e: EventRecord) => void;
4
4
  declare global {
5
5
  var __nq_bus_emitter: EventEmitter | undefined;
@@ -1,13 +1,13 @@
1
- import { useRuntimeConfig, useServerLogger } from "#imports";
1
+ import { useRuntimeConfig, useNventLogger } from "#imports";
2
2
  import { getStreamNames } from "./streamNames.js";
3
3
  import { createRedisAdapter } from "./adapters/redis/redisAdapter.js";
4
4
  import { createMemoryAdapter } from "./adapters/memoryAdapter.js";
5
5
  import { createFileAdapter } from "./adapters/fileAdapter.js";
6
6
  import { createWiringRegistry } from "./wiring/registry.js";
7
- const logger = useServerLogger("event-store-factory");
8
7
  let cachedFactory = null;
9
8
  export function getEventStoreFactory() {
10
9
  if (cachedFactory) return cachedFactory;
10
+ const logger = useNventLogger("event-store-factory");
11
11
  const rc = useRuntimeConfig();
12
12
  const adapter = rc?.queue?.eventStore?.adapter || "memory";
13
13
  let adapterInstance;
@@ -1,4 +1,4 @@
1
- import type { EventRecord } from '../../types.js';
1
+ import type { EventRecord } from '../types.js';
2
2
  export interface PublishContext {
3
3
  queue?: string;
4
4
  jobId?: string;
@@ -1,5 +1,5 @@
1
1
  import type { EventStoreAdapter } from '../types.js';
2
- import type { EventRecord } from '../../../types.js';
2
+ import type { EventRecord } from '../../types.js';
3
3
  export interface FlowWiringDeps {
4
4
  adapter: EventStoreAdapter;
5
5
  }
@@ -1,6 +1,5 @@
1
1
  import { getEventBus } from "../eventBus.js";
2
- import { useServerLogger, useEventStore, $useAnalyzedFlows, $useQueueRegistry, useQueue } from "#imports";
3
- const logger = useServerLogger("flow-wiring");
2
+ import { useEventStore, $useAnalyzedFlows, $useQueueRegistry, useQueue, useNventLogger } from "#imports";
4
3
  export function checkPendingStepTriggers(step, emittedEvents, completedSteps) {
5
4
  if (!step.subscribes || step.subscribes.length === 0) {
6
5
  return true;
@@ -15,6 +14,7 @@ export function checkPendingStepTriggers(step, emittedEvents, completedSteps) {
15
14
  });
16
15
  }
17
16
  async function checkAndTriggerPendingSteps(flowName, runId, store) {
17
+ const logger = useNventLogger("flow-wiring");
18
18
  try {
19
19
  const analyzedFlows = $useAnalyzedFlows();
20
20
  const registry = $useQueueRegistry();
@@ -177,6 +177,7 @@ export function createFlowWiring(deps) {
177
177
  const unsubs = [];
178
178
  let wired = false;
179
179
  const indexFlowRun = async (flowName, flowId, timestamp, metadata) => {
180
+ const logger = useNventLogger("flow-wiring");
180
181
  try {
181
182
  const store = useEventStore();
182
183
  const names = store.names();
@@ -190,6 +191,7 @@ export function createFlowWiring(deps) {
190
191
  function start() {
191
192
  if (wired) return;
192
193
  wired = true;
194
+ const logger = useNventLogger("flow-wiring");
193
195
  const store = useEventStore();
194
196
  const names = store.names();
195
197
  const handlePersistence = async (e) => {
@@ -393,6 +395,7 @@ export function createFlowWiring(deps) {
393
395
  }
394
396
  }
395
397
  function stop() {
398
+ const logger = useNventLogger("flow-wiring");
396
399
  for (const u of unsubs.splice(0)) {
397
400
  try {
398
401
  u();
@@ -1,6 +1,7 @@
1
1
  import type { QueueProvider, JobInput, Job, JobsQuery, ScheduleOptions, QueueEvent, JobCounts } from '../types.js';
2
2
  export declare class BullMQProvider implements QueueProvider {
3
3
  private queues;
4
+ private logger;
4
5
  init(): Promise<void>;
5
6
  private ensureQueue;
6
7
  enqueue(queueName: string, job: JobInput): Promise<string>;
@@ -1,9 +1,9 @@
1
1
  import { Queue, QueueEvents } from "bullmq";
2
2
  import defu from "defu";
3
- import { useServerLogger, useRuntimeConfig, $useQueueRegistry, useEventManager } from "#imports";
4
- const logger = useServerLogger("bullmq-adapter");
3
+ import { useRuntimeConfig, $useQueueRegistry, useEventManager, useNventLogger } from "#imports";
5
4
  export class BullMQProvider {
6
5
  queues = /* @__PURE__ */ new Map();
6
+ logger = useNventLogger("bullmq-adapter");
7
7
  async init() {
8
8
  }
9
9
  ensureQueue(name) {
@@ -132,14 +132,14 @@ export class BullMQProvider {
132
132
  closePromises.push(
133
133
  queue.close().catch((err) => {
134
134
  if (err.code !== "EPIPE" && !err.message?.includes("Connection is closed")) {
135
- logger.warn("Error closing queue", { queueName, error: err });
135
+ this.logger.warn("Error closing queue", { queueName, error: err });
136
136
  }
137
137
  })
138
138
  );
139
139
  closePromises.push(
140
140
  events.close().catch((err) => {
141
141
  if (err.code !== "EPIPE" && !err.message?.includes("Connection is closed")) {
142
- logger.warn("Error closing events for queue", { queueName, error: err });
142
+ this.logger.warn("Error closing events for queue", { queueName, error: err });
143
143
  }
144
144
  })
145
145
  );
@@ -1,5 +1,5 @@
1
1
  import { getEventBus } from '../events/eventBus.js';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  export interface EventManager {
4
4
  /**
5
5
  * Publish an event directly to the in-proc bus.
@@ -1,8 +1,8 @@
1
1
  import { getEventBus } from "../events/eventBus.js";
2
- import { useServerLogger } from "#imports";
3
- const logger = useServerLogger("event-manager");
2
+ import { useNventLogger } from "#imports";
4
3
  export function useEventManager() {
5
4
  if (globalThis.__nq_event_manager) return globalThis.__nq_event_manager;
5
+ const logger = useNventLogger("event-manager");
6
6
  const bus = getEventBus();
7
7
  const publishBus = async (evt) => {
8
8
  const rec = {
@@ -1,5 +1,5 @@
1
1
  import type { EventReadOptions } from '../events/types.js';
2
- import type { EventRecord } from '../../types.js';
2
+ import type { EventRecord } from '../types.js';
3
3
  export declare function useEventStore(): {
4
4
  names: () => import("../events/streamNames.js").StreamNames;
5
5
  read: (stream: string, opts?: EventReadOptions) => Promise<EventRecord[]>;
@@ -1,7 +1,7 @@
1
1
  import { getEventStoreFactory } from "../events/eventStoreFactory.js";
2
- import { useServerLogger } from "#imports";
3
- const logger = useServerLogger("event-store");
2
+ import { useNventLogger } from "#imports";
4
3
  export function useEventStore() {
4
+ const logger = useNventLogger("event-store");
5
5
  const factory = getEventStoreFactory();
6
6
  async function read(stream, opts) {
7
7
  return await factory.adapter.read(stream, opts);
@@ -1,10 +1,10 @@
1
- import { $useQueueRegistry, useQueue, useEventManager, useServerLogger } from "#imports";
1
+ import { $useQueueRegistry, useQueue, useEventManager, useNventLogger } from "#imports";
2
2
  import { randomUUID } from "node:crypto";
3
- const logger = useServerLogger("flow-engine");
4
3
  export const useFlowEngine = () => {
5
4
  const registry = $useQueueRegistry();
6
5
  const queueAdapter = useQueue();
7
6
  const eventsManager = useEventManager();
7
+ const logger = useNventLogger("flow-engine");
8
8
  const startFlow = async (flowName, payload = {}) => {
9
9
  const flow = registry?.flows?.[flowName];
10
10
  if (!flow || !flow.entry) throw new Error("Flow not found");
@@ -1,6 +1,6 @@
1
1
  import { type ConsolaInstance } from 'consola';
2
2
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
3
- export interface ServerLogger {
3
+ export interface NventLogger {
4
4
  debug: (message: string, context?: any) => void;
5
5
  info: (message: string, context?: any) => void;
6
6
  warn: (message: string, context?: any) => void;
@@ -20,11 +20,11 @@ export interface ServerLogger {
20
20
  * - NQ_DEBUG_<SCOPE>: environment variable for scope (e.g., NQ_DEBUG_FLOW_WIRING=1)
21
21
  *
22
22
  * @param scope - Logger scope/namespace (e.g., 'flow-wiring', 'event-manager')
23
- * @returns ServerLogger instance with scoped logging methods
23
+ * @returns NventLogger instance with scoped logging methods
24
24
  *
25
25
  * @example
26
26
  * ```ts
27
- * const logger = useServerLogger('flow-wiring')
27
+ * const logger = useNventLogger('flow-wiring')
28
28
  * logger.debug('Step triggered', { stepName: 'process', runId: '123' })
29
29
  * logger.info('Flow completed', { flowName: 'example' })
30
30
  * logger.warn('Retry attempt', { attempt: 3 })
@@ -35,7 +35,7 @@ export interface ServerLogger {
35
35
  * logger.consola.box('🚀 Flow Started')
36
36
  * ```
37
37
  */
38
- export declare function useServerLogger(scope: string): ServerLogger;
38
+ export declare function useNventLogger(scope: string): NventLogger;
39
39
  /**
40
40
  * Type guard to check if debug logging is enabled for any scope
41
41
  */
@@ -7,7 +7,7 @@ const LOG_LEVELS = {
7
7
  error: 3
8
8
  };
9
9
  const loggerCache = /* @__PURE__ */ new Map();
10
- export function useServerLogger(scope) {
10
+ export function useNventLogger(scope) {
11
11
  const rc = useRuntimeConfig();
12
12
  const debugConfig = rc?.queue?.debug;
13
13
  const configLevel = debugConfig?.level || process.env.NQ_DEBUG_LEVEL || "info";
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WebSocket Peer Manager
3
+ *
4
+ * Tracks active WebSocket connections for graceful shutdown during HMR.
5
+ * Auto-imported in Nitro server context.
6
+ */
7
+ /**
8
+ * Register a peer to be tracked for graceful shutdown
9
+ */
10
+ declare function registerWsPeer(peer: any): void;
11
+ /**
12
+ * Unregister a peer (called when connection closes normally)
13
+ */
14
+ declare function unregisterWsPeer(peer: any): void;
15
+ /**
16
+ * Get all currently active WebSocket peers
17
+ */
18
+ declare function getActivePeers(): any[];
19
+ /**
20
+ * Check if server is currently shutting down
21
+ */
22
+ declare function isServerShuttingDown(): boolean;
23
+ /**
24
+ * Set the shutdown state
25
+ */
26
+ declare function setShuttingDown(state: boolean): void;
27
+ /**
28
+ * Clear all tracked peers
29
+ */
30
+ declare function clearAllPeers(): void;
31
+ /**
32
+ * Get the count of active peers
33
+ */
34
+ declare function getActivePeerCount(): number;
35
+ export declare const usePeerManager: () => {
36
+ registerWsPeer: typeof registerWsPeer;
37
+ unregisterWsPeer: typeof unregisterWsPeer;
38
+ getActivePeers: typeof getActivePeers;
39
+ isServerShuttingDown: typeof isServerShuttingDown;
40
+ setShuttingDown: typeof setShuttingDown;
41
+ clearAllPeers: typeof clearAllPeers;
42
+ getActivePeerCount: typeof getActivePeerCount;
43
+ };
44
+ export {};
@@ -0,0 +1,32 @@
1
+ const activePeers = /* @__PURE__ */ new Set();
2
+ let isShuttingDown = false;
3
+ function registerWsPeer(peer) {
4
+ activePeers.add(peer);
5
+ }
6
+ function unregisterWsPeer(peer) {
7
+ activePeers.delete(peer);
8
+ }
9
+ function getActivePeers() {
10
+ return Array.from(activePeers);
11
+ }
12
+ function isServerShuttingDown() {
13
+ return isShuttingDown;
14
+ }
15
+ function setShuttingDown(state) {
16
+ isShuttingDown = state;
17
+ }
18
+ function clearAllPeers() {
19
+ activePeers.clear();
20
+ }
21
+ function getActivePeerCount() {
22
+ return activePeers.size;
23
+ }
24
+ export const usePeerManager = () => ({
25
+ registerWsPeer,
26
+ unregisterWsPeer,
27
+ getActivePeers,
28
+ isServerShuttingDown,
29
+ setShuttingDown,
30
+ clearAllPeers,
31
+ getActivePeerCount
32
+ });
@@ -1,9 +1,9 @@
1
1
  import { Worker } from "bullmq";
2
2
  import { createBullMQProcessor } from "./runner/node.js";
3
- import { useRuntimeConfig, useServerLogger } from "#imports";
3
+ import { useRuntimeConfig, useNventLogger } from "#imports";
4
4
  const registeredWorkers = /* @__PURE__ */ new Map();
5
- const logger = useServerLogger("worker-adapter");
6
5
  export async function closeAllWorkers() {
6
+ const logger = useNventLogger("worker-adapter");
7
7
  const closePromises = [];
8
8
  for (const [queueName, info] of registeredWorkers.entries()) {
9
9
  closePromises.push(
@@ -20,6 +20,7 @@ export async function closeAllWorkers() {
20
20
  }
21
21
  export async function registerTsWorker(queueName, jobName, handler, opts) {
22
22
  let info = registeredWorkers.get(queueName);
23
+ const logger = useNventLogger("worker-adapter");
23
24
  if (info) {
24
25
  logger.info(`[registerTsWorker] Adding handler for job "${jobName}" to existing worker for queue "${queueName}"`);
25
26
  info.handlers.set(jobName, handler);
@@ -1,7 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { getStateProvider } from "../../state/stateFactory.js";
3
- import { useRuntimeConfig, useLogs, useFlowEngine, useEventManager, useServerLogger } from "#imports";
4
- const logger = useServerLogger("node-runner");
3
+ import { useRuntimeConfig, useLogs, useFlowEngine, useEventManager, useNventLogger } from "#imports";
5
4
  const defaultState = {
6
5
  async get() {
7
6
  return null;
@@ -37,7 +36,7 @@ export function buildContext(partial) {
37
36
  return defaultState;
38
37
  }
39
38
  })();
40
- const logger2 = partial?.logger || (() => {
39
+ const logger = partial?.logger || (() => {
41
40
  const logs = useLogs();
42
41
  return {
43
42
  log: (level, msg, meta) => {
@@ -66,12 +65,13 @@ export function buildContext(partial) {
66
65
  stepName: partial?.stepName,
67
66
  stepId: partial?.stepId,
68
67
  attempt: partial?.attempt,
69
- logger: logger2,
68
+ logger,
70
69
  state,
71
70
  flow
72
71
  };
73
72
  }
74
73
  export function createBullMQProcessor(handler, queueName) {
74
+ const logger = useNventLogger("node-runner");
75
75
  return async function processor(job) {
76
76
  if (job.data?.__scheduledFlowStart) {
77
77
  const { __flowName, __flowInput } = job.data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nvent",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Nuxt queue service based on Bullmq",
5
5
  "repository": "DevJoghurt/nuxt-queue",
6
6
  "license": "MIT",
@@ -1,34 +0,0 @@
1
- /**
2
- * WebSocket Peer Manager
3
- *
4
- * Tracks active WebSocket connections for graceful shutdown during HMR.
5
- * Auto-imported in Nitro server context.
6
- */
7
- /**
8
- * Register a peer to be tracked for graceful shutdown
9
- */
10
- export declare function registerWsPeer(peer: any): void;
11
- /**
12
- * Unregister a peer (called when connection closes normally)
13
- */
14
- export declare function unregisterWsPeer(peer: any): void;
15
- /**
16
- * Get all currently active WebSocket peers
17
- */
18
- export declare function getActivePeers(): any[];
19
- /**
20
- * Check if server is currently shutting down
21
- */
22
- export declare function isServerShuttingDown(): boolean;
23
- /**
24
- * Set the shutdown state
25
- */
26
- export declare function setShuttingDown(state: boolean): void;
27
- /**
28
- * Clear all tracked peers
29
- */
30
- export declare function clearAllPeers(): void;
31
- /**
32
- * Get the count of active peers
33
- */
34
- export declare function getActivePeerCount(): number;
@@ -1,23 +0,0 @@
1
- const activePeers = /* @__PURE__ */ new Set();
2
- let isShuttingDown = false;
3
- export function registerWsPeer(peer) {
4
- activePeers.add(peer);
5
- }
6
- export function unregisterWsPeer(peer) {
7
- activePeers.delete(peer);
8
- }
9
- export function getActivePeers() {
10
- return Array.from(activePeers);
11
- }
12
- export function isServerShuttingDown() {
13
- return isShuttingDown;
14
- }
15
- export function setShuttingDown(state) {
16
- isShuttingDown = state;
17
- }
18
- export function clearAllPeers() {
19
- activePeers.clear();
20
- }
21
- export function getActivePeerCount() {
22
- return activePeers.size;
23
- }