nvent 0.4.1 → 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.
- package/dist/module.mjs +9 -6
- package/dist/runtime/server/api/_flows/[name]/runs.get.js +2 -2
- package/dist/runtime/server/api/_flows/ws.js +5 -2
- package/dist/runtime/server/api/_queues/index.get.js +2 -2
- package/dist/runtime/server/api/_queues/ws.js +5 -2
- package/dist/runtime/server/plugins/00.ws-lifecycle.js +2 -2
- package/dist/runtime/server/plugins/flow-management.js +2 -2
- package/dist/runtime/server/plugins/queue-management.js +2 -2
- package/dist/runtime/server/plugins/state-cleanup.js +2 -2
- package/dist/runtime/server-utils/events/adapters/redis/redisAdapter.js +2 -2
- package/dist/runtime/server-utils/events/adapters/redis/redisPubSubGateway.d.ts +1 -0
- package/dist/runtime/server-utils/events/adapters/redis/redisPubSubGateway.js +5 -5
- package/dist/runtime/server-utils/events/eventStoreFactory.js +2 -2
- package/dist/runtime/server-utils/events/wiring/flowWiring.js +5 -2
- package/dist/runtime/server-utils/queue/adapters/bullmq.d.ts +1 -0
- package/dist/runtime/server-utils/queue/adapters/bullmq.js +4 -4
- package/dist/runtime/server-utils/utils/useEventManager.js +2 -2
- package/dist/runtime/server-utils/utils/useEventStore.js +2 -2
- package/dist/runtime/server-utils/utils/useFlowEngine.js +2 -2
- package/dist/runtime/server-utils/utils/{useServerLogger.d.ts → useNventLogger.d.ts} +4 -4
- package/dist/runtime/server-utils/utils/{useServerLogger.js → useNventLogger.js} +1 -1
- package/dist/runtime/server-utils/worker/adapter.js +3 -2
- package/dist/runtime/server-utils/worker/runner/node.js +4 -4
- package/package.json +1 -1
package/dist/module.mjs
CHANGED
|
@@ -840,7 +840,7 @@ const module = defineNuxtModule({
|
|
|
840
840
|
nuxt.options.css = nuxt.options.css || [];
|
|
841
841
|
nuxt.options.css.push(resolve("./runtime/app/assets/vueflow.css"));
|
|
842
842
|
addPlugin({
|
|
843
|
-
src: resolve("./runtime/app/plugins/vueflow.client
|
|
843
|
+
src: resolve("./runtime/app/plugins/vueflow.client"),
|
|
844
844
|
mode: "client"
|
|
845
845
|
});
|
|
846
846
|
addComponentsDir({
|
|
@@ -958,10 +958,6 @@ const module = defineNuxtModule({
|
|
|
958
958
|
name: "useEventStore",
|
|
959
959
|
from: resolve("./runtime/server-utils/utils/useEventStore")
|
|
960
960
|
},
|
|
961
|
-
{
|
|
962
|
-
name: "useServerLogger",
|
|
963
|
-
from: resolve("./runtime/server-utils/utils/useServerLogger")
|
|
964
|
-
},
|
|
965
961
|
{
|
|
966
962
|
name: "useLogs",
|
|
967
963
|
from: resolve("./runtime/server-utils/utils/useLogs")
|
|
@@ -970,7 +966,14 @@ const module = defineNuxtModule({
|
|
|
970
966
|
name: "useEventManager",
|
|
971
967
|
from: resolve("./runtime/server-utils/utils/useEventManager")
|
|
972
968
|
},
|
|
973
|
-
{
|
|
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
|
+
}
|
|
974
977
|
]);
|
|
975
978
|
const refreshRegistry = async (reason, changedPath) => {
|
|
976
979
|
const queuesRel = config.dir || "queues";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineEventHandler, getRouterParam, getQuery, useEventStore,
|
|
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);
|
|
@@ -2,9 +2,8 @@ import {
|
|
|
2
2
|
defineWebSocketHandler,
|
|
3
3
|
useEventStore,
|
|
4
4
|
usePeerManager,
|
|
5
|
-
|
|
5
|
+
useNventLogger
|
|
6
6
|
} from "#imports";
|
|
7
|
-
const logger = useServerLogger("api-flows-ws");
|
|
8
7
|
const peerContexts = /* @__PURE__ */ new WeakMap();
|
|
9
8
|
function safeSend(peer, data) {
|
|
10
9
|
try {
|
|
@@ -16,6 +15,7 @@ function safeSend(peer, data) {
|
|
|
16
15
|
}
|
|
17
16
|
export default defineWebSocketHandler({
|
|
18
17
|
open(peer) {
|
|
18
|
+
const logger = useNventLogger("api-flows-ws");
|
|
19
19
|
logger.info("[ws] client connected:", { peerId: peer.id });
|
|
20
20
|
const { registerWsPeer } = usePeerManager();
|
|
21
21
|
registerWsPeer(peer);
|
|
@@ -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,6 +145,7 @@ 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 });
|
|
@@ -166,6 +168,7 @@ export default defineWebSocketHandler({
|
|
|
166
168
|
}
|
|
167
169
|
},
|
|
168
170
|
error(peer, error) {
|
|
171
|
+
const logger = useNventLogger("api-flows-ws");
|
|
169
172
|
logger.error("[ws] error for peer:", { peerId: peer.id, error });
|
|
170
173
|
const { unregisterWsPeer } = usePeerManager();
|
|
171
174
|
unregisterWsPeer(peer);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineEventHandler, useRuntimeConfig, $useQueueRegistry, useQueue,
|
|
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();
|
|
@@ -2,10 +2,9 @@ import {
|
|
|
2
2
|
defineWebSocketHandler,
|
|
3
3
|
useQueue,
|
|
4
4
|
usePeerManager,
|
|
5
|
-
|
|
5
|
+
useNventLogger
|
|
6
6
|
} from "#imports";
|
|
7
7
|
const peerContexts = /* @__PURE__ */ new WeakMap();
|
|
8
|
-
const logger = useServerLogger("api-queues-ws");
|
|
9
8
|
function safeSend(peer, data) {
|
|
10
9
|
try {
|
|
11
10
|
peer.send(JSON.stringify(data));
|
|
@@ -16,6 +15,7 @@ function safeSend(peer, data) {
|
|
|
16
15
|
}
|
|
17
16
|
export default defineWebSocketHandler({
|
|
18
17
|
open(peer) {
|
|
18
|
+
const logger = useNventLogger("api-queues-ws");
|
|
19
19
|
logger.info("[ws:queues] client connected:", peer.id);
|
|
20
20
|
const { registerWsPeer } = usePeerManager();
|
|
21
21
|
registerWsPeer(peer);
|
|
@@ -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:", {
|
|
@@ -180,6 +182,7 @@ export default defineWebSocketHandler({
|
|
|
180
182
|
}
|
|
181
183
|
},
|
|
182
184
|
error(peer, error) {
|
|
185
|
+
const logger = useNventLogger("api-queues-ws");
|
|
183
186
|
logger.error("[ws:queues] error for peer:", {
|
|
184
187
|
peerId: peer.id,
|
|
185
188
|
error
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
defineNitroPlugin,
|
|
3
|
-
|
|
3
|
+
useNventLogger,
|
|
4
4
|
usePeerManager
|
|
5
5
|
} from "#imports";
|
|
6
|
-
const logger = useServerLogger("plugin-ws-lifecycle");
|
|
7
6
|
export default defineNitroPlugin((nitroApp) => {
|
|
7
|
+
const logger = useNventLogger("plugin-ws-lifecycle");
|
|
8
8
|
logger.info("[ws-lifecycle] WebSocket lifecycle plugin initialized");
|
|
9
9
|
const {
|
|
10
10
|
getActivePeers,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineNitroPlugin, useEventManager, $useQueueRegistry, useQueue,
|
|
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,
|
|
1
|
+
import { defineNitroPlugin, useNventLogger } from "#imports";
|
|
2
2
|
import { BullMQProvider } from "../../server-utils/queue/adapters/bullmq.js";
|
|
3
3
|
import { setQueueProvider, getQueueProvider } from "../../server-utils/queue/queueFactory.js";
|
|
4
|
-
const logger = useServerLogger("plugin-queue-management");
|
|
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 {
|
|
1
|
+
import { useNventLogger, defineNitroPlugin, useEventManager, useRuntimeConfig } from "#imports";
|
|
2
2
|
import { getStateProvider } from "../../server-utils/state/stateFactory.js";
|
|
3
|
-
const logger = useServerLogger("plugin-state-cleanup");
|
|
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,12 +1,12 @@
|
|
|
1
|
-
import { useRuntimeConfig,
|
|
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({
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
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,13 +1,13 @@
|
|
|
1
|
-
import { useRuntimeConfig,
|
|
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,6 +1,5 @@
|
|
|
1
1
|
import { getEventBus } from "../eventBus.js";
|
|
2
|
-
import {
|
|
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 {
|
|
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,8 +1,8 @@
|
|
|
1
1
|
import { getEventBus } from "../events/eventBus.js";
|
|
2
|
-
import {
|
|
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,7 +1,7 @@
|
|
|
1
1
|
import { getEventStoreFactory } from "../events/eventStoreFactory.js";
|
|
2
|
-
import {
|
|
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,
|
|
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
|
|
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
|
|
23
|
+
* @returns NventLogger instance with scoped logging methods
|
|
24
24
|
*
|
|
25
25
|
* @example
|
|
26
26
|
* ```ts
|
|
27
|
-
* const logger =
|
|
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
|
|
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
|
|
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";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Worker } from "bullmq";
|
|
2
2
|
import { createBullMQProcessor } from "./runner/node.js";
|
|
3
|
-
import { useRuntimeConfig,
|
|
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,
|
|
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
|
|
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
|
|
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;
|