@nvent-addon/app 0.5.15 → 1.0.0-alpha.10
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.json +1 -1
- package/dist/module.mjs +3 -2
- package/dist/runtime/app/components/DashboardCard.d.vue.ts +1 -1
- package/dist/runtime/app/components/DashboardCard.vue.d.ts +1 -1
- package/dist/runtime/app/composables/useWorkers.d.ts +57 -0
- package/dist/runtime/app/composables/useWorkers.js +42 -0
- package/dist/runtime/app/pages/dashboard.vue +1 -654
- package/dist/runtime/app/pages/index.vue +25 -41
- package/dist/runtime/app/pages/workers.vue +458 -0
- package/dist/runtime/server/api/_workers/index.get.d.ts +8 -0
- package/dist/runtime/server/api/_workers/index.get.js +14 -0
- package/package.json +13 -12
- package/dist/runtime/app/components/ComponentRouter.d.vue.ts +0 -46
- package/dist/runtime/app/components/ComponentRouter.vue +0 -26
- package/dist/runtime/app/components/ComponentRouter.vue.d.ts +0 -46
- package/dist/runtime/app/components/ComponentShell.d.vue.ts +0 -23
- package/dist/runtime/app/components/ComponentShell.vue +0 -97
- package/dist/runtime/app/components/ComponentShell.vue.d.ts +0 -23
- package/dist/runtime/app/components/ConfirmDialog.d.vue.ts +0 -33
- package/dist/runtime/app/components/ConfirmDialog.vue +0 -120
- package/dist/runtime/app/components/ConfirmDialog.vue.d.ts +0 -33
- package/dist/runtime/app/composables/useComponentRouter.d.ts +0 -46
- package/dist/runtime/app/composables/useComponentRouter.js +0 -248
- package/dist/runtime/app/pages/flows/[name].vue +0 -750
- package/dist/runtime/app/pages/flows/index.d.vue.ts +0 -3
- package/dist/runtime/app/pages/flows/index.vue +0 -381
- package/dist/runtime/app/pages/flows/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 -236
- 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 -261
- 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 -595
- package/dist/runtime/app/pages/queues/jobs.vue.d.ts +0 -3
- package/dist/runtime/app/pages/settings/scheduler.d.vue.ts +0 -3
- package/dist/runtime/app/pages/settings/scheduler.vue +0 -310
- package/dist/runtime/app/pages/settings/scheduler.vue.d.ts +0 -3
- package/dist/runtime/app/pages/triggers/[name]/edit.d.vue.ts +0 -3
- package/dist/runtime/app/pages/triggers/[name]/edit.vue +0 -429
- package/dist/runtime/app/pages/triggers/[name]/edit.vue.d.ts +0 -3
- package/dist/runtime/app/pages/triggers/[name].d.vue.ts +0 -3
- package/dist/runtime/app/pages/triggers/[name].vue +0 -870
- package/dist/runtime/app/pages/triggers/[name].vue.d.ts +0 -3
- package/dist/runtime/app/pages/triggers/index.d.vue.ts +0 -3
- package/dist/runtime/app/pages/triggers/index.vue +0 -525
- package/dist/runtime/app/pages/triggers/index.vue.d.ts +0 -3
- package/dist/runtime/app/pages/triggers/new.d.vue.ts +0 -3
- package/dist/runtime/app/pages/triggers/new.vue +0 -610
- package/dist/runtime/app/pages/triggers/new.vue.d.ts +0 -3
- 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 -49
- package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.d.ts +0 -2
- package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.js +0 -21
- package/dist/runtime/server/api/_flows/[name]/runs/[runId]/restart.post.d.ts +0 -2
- package/dist/runtime/server/api/_flows/[name]/runs/[runId]/restart.post.js +0 -21
- package/dist/runtime/server/api/_flows/[name]/runs.get.d.ts +0 -17
- package/dist/runtime/server/api/_flows/[name]/runs.get.js +0 -64
- 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 -7
- package/dist/runtime/server/api/_flows/index.get.js +0 -5
- package/dist/runtime/server/api/_flows/recent-runs.get.d.ts +0 -15
- package/dist/runtime/server/api/_flows/recent-runs.get.js +0 -67
- package/dist/runtime/server/api/_flows/ws.d.ts +0 -80
- package/dist/runtime/server/api/_flows/ws.js +0 -309
- 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 -14
- 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 -39
- package/dist/runtime/server/api/_queues/index.get.d.ts +0 -2
- package/dist/runtime/server/api/_queues/index.get.js +0 -106
- package/dist/runtime/server/api/_queues/ws.d.ts +0 -48
- package/dist/runtime/server/api/_queues/ws.js +0 -215
- package/dist/runtime/server/api/_scheduler/jobs.get.d.ts +0 -19
- package/dist/runtime/server/api/_scheduler/jobs.get.js +0 -36
- package/dist/runtime/server/api/_triggers/[name]/events.get.d.ts +0 -6
- package/dist/runtime/server/api/_triggers/[name]/events.get.js +0 -43
- package/dist/runtime/server/api/_triggers/[name]/index.get.d.ts +0 -6
- package/dist/runtime/server/api/_triggers/[name]/index.get.js +0 -76
- package/dist/runtime/server/api/_triggers/[name].delete.d.ts +0 -7
- package/dist/runtime/server/api/_triggers/[name].delete.js +0 -37
- package/dist/runtime/server/api/_triggers/[name].patch.d.ts +0 -7
- package/dist/runtime/server/api/_triggers/[name].patch.js +0 -117
- package/dist/runtime/server/api/_triggers/index.get.d.ts +0 -6
- package/dist/runtime/server/api/_triggers/index.get.js +0 -44
- package/dist/runtime/server/api/_triggers/index.post.d.ts +0 -7
- package/dist/runtime/server/api/_triggers/index.post.js +0 -124
- package/dist/runtime/server/api/_triggers/stats.get.d.ts +0 -6
- package/dist/runtime/server/api/_triggers/stats.get.js +0 -41
- package/dist/runtime/server/api/_triggers/ws.d.ts +0 -74
- package/dist/runtime/server/api/_triggers/ws.js +0 -315
- /package/dist/runtime/app/pages/{flows/[name].d.vue.ts → workers.d.vue.ts} +0 -0
- /package/dist/runtime/app/pages/{flows/[name].vue.d.ts → workers.vue.d.ts} +0 -0
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineWebSocketHandler,
|
|
3
|
-
usePeerManager,
|
|
4
|
-
useNventLogger,
|
|
5
|
-
useStreamAdapter,
|
|
6
|
-
useStoreAdapter,
|
|
7
|
-
useStreamTopics,
|
|
8
|
-
useTrigger
|
|
9
|
-
} from "#imports";
|
|
10
|
-
const peerContexts = /* @__PURE__ */ new WeakMap();
|
|
11
|
-
function safeSend(peer, data) {
|
|
12
|
-
try {
|
|
13
|
-
peer.send(JSON.stringify(data));
|
|
14
|
-
return true;
|
|
15
|
-
} catch {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export default defineWebSocketHandler({
|
|
20
|
-
async open(peer) {
|
|
21
|
-
const logger = useNventLogger("api-triggers-ws");
|
|
22
|
-
logger.info("[ws] client connected:", { peerId: peer.id });
|
|
23
|
-
const { registerWsPeer } = usePeerManager();
|
|
24
|
-
registerWsPeer(peer);
|
|
25
|
-
peerContexts.set(peer, {
|
|
26
|
-
subscriptions: /* @__PURE__ */ new Map()
|
|
27
|
-
});
|
|
28
|
-
safeSend(peer, {
|
|
29
|
-
type: "connected",
|
|
30
|
-
timestamp: Date.now()
|
|
31
|
-
});
|
|
32
|
-
},
|
|
33
|
-
async message(peer, message) {
|
|
34
|
-
const logger = useNventLogger("api-triggers-ws");
|
|
35
|
-
const context = peerContexts.get(peer);
|
|
36
|
-
if (!context) {
|
|
37
|
-
logger.error("[ws] no context for peer:", { peerId: peer.id });
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
let data;
|
|
41
|
-
try {
|
|
42
|
-
data = JSON.parse(message.text());
|
|
43
|
-
} catch {
|
|
44
|
-
safeSend(peer, {
|
|
45
|
-
type: "error",
|
|
46
|
-
message: "Invalid JSON"
|
|
47
|
-
});
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const { type, triggerName } = data;
|
|
51
|
-
if (type === "subscribe") {
|
|
52
|
-
if (!triggerName) {
|
|
53
|
-
safeSend(peer, {
|
|
54
|
-
type: "error",
|
|
55
|
-
message: "Missing triggerName"
|
|
56
|
-
});
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
let stream;
|
|
60
|
-
let store;
|
|
61
|
-
try {
|
|
62
|
-
stream = useStreamAdapter();
|
|
63
|
-
store = useStoreAdapter();
|
|
64
|
-
} catch (err) {
|
|
65
|
-
logger.error("[ws] Adapters not initialized yet:", { error: err });
|
|
66
|
-
safeSend(peer, {
|
|
67
|
-
type: "error",
|
|
68
|
-
message: "Server initializing, please retry"
|
|
69
|
-
});
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const existingHandle = context.subscriptions.get(triggerName);
|
|
73
|
-
if (existingHandle) {
|
|
74
|
-
try {
|
|
75
|
-
if (typeof existingHandle === "function") {
|
|
76
|
-
await existingHandle();
|
|
77
|
-
} else {
|
|
78
|
-
await existingHandle.unsubscribe();
|
|
79
|
-
}
|
|
80
|
-
} catch (err) {
|
|
81
|
-
logger.error("[ws] error unsubscribing:", { error: err });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const { StoreSubjects, StreamTopics } = useStreamTopics();
|
|
85
|
-
const streamTopic = StreamTopics.triggerEvents(triggerName);
|
|
86
|
-
const storeSubject = StoreSubjects.triggerStream(triggerName);
|
|
87
|
-
const handle = await stream.subscribe(streamTopic, async (message2) => {
|
|
88
|
-
const event = message2.data?.event;
|
|
89
|
-
if (!event) {
|
|
90
|
-
logger.warn("[ws] Received message without event data:", message2);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
safeSend(peer, {
|
|
94
|
-
type: "event",
|
|
95
|
-
triggerName,
|
|
96
|
-
event
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
context.subscriptions.set(triggerName, handle);
|
|
100
|
-
try {
|
|
101
|
-
const historicalEvents = await store.stream.read(storeSubject, {
|
|
102
|
-
limit: 100,
|
|
103
|
-
order: "asc"
|
|
104
|
-
// Forward order to match flows
|
|
105
|
-
});
|
|
106
|
-
safeSend(peer, {
|
|
107
|
-
type: "history",
|
|
108
|
-
triggerName,
|
|
109
|
-
events: historicalEvents || []
|
|
110
|
-
});
|
|
111
|
-
} catch (err) {
|
|
112
|
-
logger.error("[ws] error sending history:", { error: err });
|
|
113
|
-
safeSend(peer, {
|
|
114
|
-
type: "error",
|
|
115
|
-
message: "Failed to load history"
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
safeSend(peer, {
|
|
119
|
-
type: "subscribed",
|
|
120
|
-
triggerName
|
|
121
|
-
});
|
|
122
|
-
} else if (type === "unsubscribe") {
|
|
123
|
-
if (!triggerName) {
|
|
124
|
-
safeSend(peer, {
|
|
125
|
-
type: "error",
|
|
126
|
-
message: "Missing triggerName"
|
|
127
|
-
});
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
const handle = context.subscriptions.get(triggerName);
|
|
131
|
-
if (handle) {
|
|
132
|
-
try {
|
|
133
|
-
if (typeof handle === "function") {
|
|
134
|
-
await handle();
|
|
135
|
-
} else {
|
|
136
|
-
await handle.unsubscribe();
|
|
137
|
-
}
|
|
138
|
-
context.subscriptions.delete(triggerName);
|
|
139
|
-
safeSend(peer, {
|
|
140
|
-
type: "unsubscribed",
|
|
141
|
-
triggerName
|
|
142
|
-
});
|
|
143
|
-
} catch (err) {
|
|
144
|
-
logger.error("[ws] error unsubscribing:", { error: err });
|
|
145
|
-
safeSend(peer, {
|
|
146
|
-
type: "error",
|
|
147
|
-
message: "Failed to unsubscribe"
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
} else if (type === "subscribe.stats") {
|
|
152
|
-
const statsKey = "stats";
|
|
153
|
-
const existingUnsub = context.subscriptions.get(statsKey);
|
|
154
|
-
if (existingUnsub) {
|
|
155
|
-
safeSend(peer, {
|
|
156
|
-
type: "error",
|
|
157
|
-
message: "Already subscribed to stats"
|
|
158
|
-
});
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
try {
|
|
162
|
-
const stream = useStreamAdapter();
|
|
163
|
-
const { StreamTopics } = useStreamTopics();
|
|
164
|
-
const topic = StreamTopics.triggerStats();
|
|
165
|
-
const handle = await stream.subscribe(topic, (message2) => {
|
|
166
|
-
safeSend(peer, {
|
|
167
|
-
type: "trigger.stats.update",
|
|
168
|
-
data: message2,
|
|
169
|
-
timestamp: Date.now()
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
const unsub = async () => {
|
|
173
|
-
try {
|
|
174
|
-
await handle.unsubscribe();
|
|
175
|
-
} catch (err) {
|
|
176
|
-
logger.error("[ws] error in stats unsub:", { error: err });
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
context.subscriptions.set(statsKey, unsub);
|
|
180
|
-
try {
|
|
181
|
-
const trigger = useTrigger();
|
|
182
|
-
const allTriggers = trigger.getAllTriggers();
|
|
183
|
-
const { getSubscribedFlows, getTriggerStats } = trigger;
|
|
184
|
-
if (allTriggers && allTriggers.length > 0) {
|
|
185
|
-
for (const triggerEntry of allTriggers) {
|
|
186
|
-
const subscribedFlows = getSubscribedFlows(triggerEntry.name);
|
|
187
|
-
const stats = await getTriggerStats(triggerEntry.name);
|
|
188
|
-
safeSend(peer, {
|
|
189
|
-
type: "trigger.stats.initial",
|
|
190
|
-
data: {
|
|
191
|
-
id: triggerEntry.name,
|
|
192
|
-
metadata: {
|
|
193
|
-
"name": triggerEntry.name,
|
|
194
|
-
"type": triggerEntry.type,
|
|
195
|
-
"scope": triggerEntry.scope,
|
|
196
|
-
"displayName": triggerEntry.displayName,
|
|
197
|
-
"description": triggerEntry.description,
|
|
198
|
-
"source": triggerEntry.source,
|
|
199
|
-
"status": triggerEntry.status || "active",
|
|
200
|
-
"registeredAt": triggerEntry.registeredAt,
|
|
201
|
-
"lastActivityAt": triggerEntry.lastActivityAt,
|
|
202
|
-
"webhook": triggerEntry.webhook,
|
|
203
|
-
"schedule": triggerEntry.schedule,
|
|
204
|
-
"config": triggerEntry.config,
|
|
205
|
-
"subscribedFlows": subscribedFlows,
|
|
206
|
-
"subscriptionCount": subscribedFlows.length,
|
|
207
|
-
"stats.totalFires": stats?.totalFires || 0,
|
|
208
|
-
"stats.totalFlowsStarted": stats?.totalFlowsStarted || 0,
|
|
209
|
-
"stats.activeSubscribers": stats?.activeSubscribers || subscribedFlows.length,
|
|
210
|
-
"stats.lastFiredAt": stats?.lastFiredAt
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
timestamp: Date.now()
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
} catch (err) {
|
|
218
|
-
logger.error("[ws] error fetching initial trigger stats:", { error: err });
|
|
219
|
-
}
|
|
220
|
-
safeSend(peer, {
|
|
221
|
-
type: "stats.subscribed",
|
|
222
|
-
timestamp: Date.now()
|
|
223
|
-
});
|
|
224
|
-
} catch (err) {
|
|
225
|
-
logger.error("[ws] error subscribing to stats:", { error: err });
|
|
226
|
-
safeSend(peer, {
|
|
227
|
-
type: "error",
|
|
228
|
-
message: "Failed to subscribe to stats"
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
} else if (type === "unsubscribe.stats") {
|
|
232
|
-
const statsKey = "stats";
|
|
233
|
-
const unsub = context.subscriptions.get(statsKey);
|
|
234
|
-
if (unsub) {
|
|
235
|
-
try {
|
|
236
|
-
if (typeof unsub === "function") {
|
|
237
|
-
await unsub();
|
|
238
|
-
} else {
|
|
239
|
-
await unsub.unsubscribe();
|
|
240
|
-
}
|
|
241
|
-
context.subscriptions.delete(statsKey);
|
|
242
|
-
safeSend(peer, {
|
|
243
|
-
type: "stats.unsubscribed",
|
|
244
|
-
timestamp: Date.now()
|
|
245
|
-
});
|
|
246
|
-
} catch (err) {
|
|
247
|
-
logger.error("[ws] error unsubscribing from stats:", { error: err });
|
|
248
|
-
safeSend(peer, {
|
|
249
|
-
type: "error",
|
|
250
|
-
message: "Failed to unsubscribe from stats"
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
} else if (type === "ping") {
|
|
255
|
-
safeSend(peer, {
|
|
256
|
-
type: "pong",
|
|
257
|
-
timestamp: Date.now()
|
|
258
|
-
});
|
|
259
|
-
} else {
|
|
260
|
-
safeSend(peer, {
|
|
261
|
-
type: "error",
|
|
262
|
-
message: `Unknown message type: ${type}`
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
async close(peer, event) {
|
|
267
|
-
const logger = useNventLogger("api-triggers-ws");
|
|
268
|
-
const isNormalClosure = event?.code === 1e3 || event?.code === 1001;
|
|
269
|
-
if (!isNormalClosure) {
|
|
270
|
-
logger.info("[ws] client disconnected:", { peerId: peer.id, code: event?.code, reason: event?.reason });
|
|
271
|
-
}
|
|
272
|
-
const { unregisterWsPeer } = usePeerManager();
|
|
273
|
-
unregisterWsPeer(peer);
|
|
274
|
-
const context = peerContexts.get(peer);
|
|
275
|
-
if (context) {
|
|
276
|
-
for (const handleOrUnsub of Array.from(context.subscriptions.values())) {
|
|
277
|
-
try {
|
|
278
|
-
if (typeof handleOrUnsub === "function") {
|
|
279
|
-
await handleOrUnsub();
|
|
280
|
-
} else {
|
|
281
|
-
await handleOrUnsub.unsubscribe();
|
|
282
|
-
}
|
|
283
|
-
} catch (err) {
|
|
284
|
-
if (!isNormalClosure) {
|
|
285
|
-
logger.error("[ws] error unsubscribing on close:", { error: err });
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
context.subscriptions.clear();
|
|
290
|
-
peerContexts.delete(peer);
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
async error(peer, error) {
|
|
294
|
-
const logger = useNventLogger("api-triggers-ws");
|
|
295
|
-
logger.error("[ws] error for peer:", { peerId: peer.id, error });
|
|
296
|
-
const { unregisterWsPeer } = usePeerManager();
|
|
297
|
-
unregisterWsPeer(peer);
|
|
298
|
-
const context = peerContexts.get(peer);
|
|
299
|
-
if (context) {
|
|
300
|
-
for (const handleOrUnsub of Array.from(context.subscriptions.values())) {
|
|
301
|
-
try {
|
|
302
|
-
if (typeof handleOrUnsub === "function") {
|
|
303
|
-
await handleOrUnsub();
|
|
304
|
-
} else {
|
|
305
|
-
await handleOrUnsub.unsubscribe();
|
|
306
|
-
}
|
|
307
|
-
} catch (err) {
|
|
308
|
-
logger.error("[ws] error unsubscribing on error:", { error: err });
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
context.subscriptions.clear();
|
|
312
|
-
peerContexts.delete(peer);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
});
|
|
File without changes
|
|
File without changes
|