@beignet/devtools 0.0.35 → 0.0.37

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @beignet/devtools
2
2
 
3
+ ## 0.0.37
4
+
5
+ ## 0.0.36
6
+
3
7
  ## 0.0.35
4
8
 
5
9
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/devtools",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "type": "module",
5
5
  "description": "Development-time devtools for Beignet - mini Telescope for the server runtime",
6
6
  "main": "./dist/index.js",
@@ -1,38 +0,0 @@
1
- import type { DevtoolsEvent } from "./events.js";
2
- export type DevtoolsPanelMetric = {
3
- label: string;
4
- value: string | number;
5
- };
6
- export type DevtoolsPanelMeta = {
7
- title: string;
8
- subtitle: string;
9
- };
10
- export type DevtoolsPanelRow = {
11
- primary: string;
12
- secondary: string;
13
- summary: string;
14
- durationMs?: number;
15
- result: string;
16
- detail: DevtoolsPanelDetail;
17
- };
18
- export type DevtoolsPanelDetail = {
19
- fields: DevtoolsPanelMetric[];
20
- note: string;
21
- };
22
- export declare function inferDevtoolsWatcher(event: DevtoolsEvent): string;
23
- export declare function devtoolsEventBadgeLabel(event: DevtoolsEvent): string;
24
- export declare function devtoolsEventBadgeClass(event: DevtoolsEvent): string;
25
- export declare function summarizeDevtoolsEvent(event: DevtoolsEvent): string;
26
- export declare function devtoolsEventDuration(event: DevtoolsEvent): number | undefined;
27
- export declare function devtoolsEventProvider(event: DevtoolsEvent): string;
28
- export declare function devtoolsEventFailure(event: DevtoolsEvent): boolean;
29
- export declare function hasDevtoolsRedactedValue(value: unknown): boolean;
30
- export declare function devtoolsPanelMeta(tabId: string, label?: string): DevtoolsPanelMeta;
31
- export declare function devtoolsPanelMetrics(tabId: string, events: readonly DevtoolsEvent[]): DevtoolsPanelMetric[];
32
- export declare function devtoolsPanelDetail(tabId: string, event: DevtoolsEvent): DevtoolsPanelDetail;
33
- export declare function devtoolsPanelPrimary(tabId: string, event: DevtoolsEvent): string;
34
- export declare function devtoolsPanelSecondary(tabId: string, event: DevtoolsEvent): string;
35
- export declare function devtoolsPanelResult(event: DevtoolsEvent): string;
36
- export declare function createDevtoolsPanelRow(tabId: string, event: DevtoolsEvent): DevtoolsPanelRow;
37
- export declare function devtoolsPanelModelBrowserSource(): string;
38
- //# sourceMappingURL=ui-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-model.d.ts","sourceRoot":"","sources":["../src/ui-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAsDF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAwBjE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA2BpE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA2BpE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA6BnE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,GACnB,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAOlE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAYlE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIhE;AAgMD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,SAAc,GAClB,iBAAiB,CA6DnB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,mBAAmB,EAAE,CAuQvB;AAyBD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GACnB,mBAAmB,CA+NrB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GACnB,MAAM,CAoDR;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GACnB,MAAM,CAyER;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAkBhE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GACnB,gBAAgB,CASlB;AAED,wBAAgB,+BAA+B,IAAI,MAAM,CAoDxD"}
package/dist/ui-model.js DELETED
@@ -1,1039 +0,0 @@
1
- function isRecord(value) {
2
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
3
- }
4
- function detailsObject(event) {
5
- return isRecord(event.details) ? event.details : {};
6
- }
7
- function detailValue(event, key) {
8
- return detailsObject(event)[key];
9
- }
10
- function detailString(event, key) {
11
- const value = detailValue(event, key);
12
- return typeof value === "string" ? value : "";
13
- }
14
- function detailNumber(event, key) {
15
- const value = detailValue(event, key);
16
- return typeof value === "number" && Number.isFinite(value)
17
- ? value
18
- : undefined;
19
- }
20
- function detailBoolean(event, key) {
21
- const value = detailValue(event, key);
22
- return typeof value === "boolean" ? value : undefined;
23
- }
24
- function valueText(value) {
25
- if (value === undefined || value === null || value === "")
26
- return "";
27
- if (typeof value === "string")
28
- return value;
29
- if (typeof value === "number" || typeof value === "boolean") {
30
- return String(value);
31
- }
32
- try {
33
- return JSON.stringify(value);
34
- }
35
- catch {
36
- return String(value);
37
- }
38
- }
39
- function jsonSearch(value) {
40
- return valueText(value);
41
- }
42
- function containsText(event, text) {
43
- return jsonSearch(event).toLowerCase().includes(text.toLowerCase());
44
- }
45
- export function inferDevtoolsWatcher(event) {
46
- if (event.watcher)
47
- return event.watcher;
48
- switch (event.type) {
49
- case "request":
50
- return "requests";
51
- case "error":
52
- return "errors";
53
- case "usecase":
54
- return "useCases";
55
- case "eventBus":
56
- return "eventBus";
57
- case "job":
58
- return "jobs";
59
- case "outbox":
60
- return "outbox";
61
- case "schedule":
62
- return "schedules";
63
- case "provider":
64
- return "providers";
65
- case "custom":
66
- return "custom";
67
- default:
68
- return "";
69
- }
70
- }
71
- export function devtoolsEventBadgeLabel(event) {
72
- if (event.type === "custom") {
73
- switch (inferDevtoolsWatcher(event)) {
74
- case "auth":
75
- return "auth";
76
- case "audit":
77
- return "audit";
78
- case "cache":
79
- return "cache";
80
- case "db":
81
- return "database";
82
- case "mail":
83
- return "mail";
84
- case "notifications":
85
- return "notifications";
86
- case "rateLimit":
87
- return "rate limit";
88
- case "storage":
89
- return "storage";
90
- case "uploads":
91
- return "uploads";
92
- default:
93
- return "custom";
94
- }
95
- }
96
- return event.type;
97
- }
98
- export function devtoolsEventBadgeClass(event) {
99
- if (event.type === "custom") {
100
- switch (inferDevtoolsWatcher(event)) {
101
- case "auth":
102
- return "auth";
103
- case "audit":
104
- return "audit";
105
- case "cache":
106
- return "cache";
107
- case "db":
108
- return "db";
109
- case "mail":
110
- return "mail";
111
- case "notifications":
112
- return "notifications";
113
- case "rateLimit":
114
- return "rateLimit";
115
- case "storage":
116
- return "storage";
117
- case "uploads":
118
- return "uploads";
119
- default:
120
- return "custom";
121
- }
122
- }
123
- return event.type;
124
- }
125
- export function summarizeDevtoolsEvent(event) {
126
- switch (event.type) {
127
- case "request":
128
- return `${event.method || ""} ${event.path || ""}${event.status ? ` -> ${event.status}` : ""}${event.durationMs !== undefined ? ` (${event.durationMs}ms)` : ""}`;
129
- case "error":
130
- return event.message || "Unknown error";
131
- case "usecase":
132
- return `${event.name} (${event.phase})${event.durationMs !== undefined ? ` ${event.durationMs}ms` : ""}`;
133
- case "eventBus":
134
- return event.eventName || "Domain event";
135
- case "job":
136
- return `${event.jobName} -> ${event.status}`;
137
- case "outbox":
138
- return `${event.messageName} (${event.messageKind}) -> ${event.status}`;
139
- case "schedule":
140
- return `${event.scheduleName} -> ${event.status}`;
141
- case "provider":
142
- return `${event.providerName} -> ${event.action}`;
143
- case "custom":
144
- return `${event.label || event.name || "Custom event"}${event.summary ? ` - ${event.summary}` : ""}`;
145
- default:
146
- return "";
147
- }
148
- }
149
- export function devtoolsEventDuration(event) {
150
- const detailDuration = detailNumber(event, "durationMs");
151
- const eventDuration = "durationMs" in event && typeof event.durationMs === "number"
152
- ? event.durationMs
153
- : undefined;
154
- const duration = eventDuration !== undefined ? eventDuration : detailDuration;
155
- return typeof duration === "number" && Number.isFinite(duration)
156
- ? duration
157
- : undefined;
158
- }
159
- export function devtoolsEventProvider(event) {
160
- if (event.type === "provider")
161
- return event.providerName;
162
- const details = detailsObject(event);
163
- return valueText(details.providerName ?? details.provider ?? details.portName ?? "");
164
- }
165
- export function devtoolsEventFailure(event) {
166
- const details = detailsObject(event);
167
- if (event.type === "error")
168
- return true;
169
- if ("status" in event && typeof event.status === "string") {
170
- return (event.status === "failed" ||
171
- event.status === "deadLettered" ||
172
- event.status === "retryScheduled");
173
- }
174
- if (event.type === "custom" && event.name.includes("failed"))
175
- return true;
176
- return Boolean(details.error) || details.allowed === false;
177
- }
178
- export function hasDevtoolsRedactedValue(value) {
179
- if (value === "[redacted]")
180
- return true;
181
- if (!isRecord(value) && !Array.isArray(value))
182
- return false;
183
- return Object.values(value).some(hasDevtoolsRedactedValue);
184
- }
185
- function averageDuration(events) {
186
- const durations = events
187
- .map(devtoolsEventDuration)
188
- .filter((value) => value !== undefined);
189
- if (!durations.length)
190
- return "n/a";
191
- const total = durations.reduce((sum, value) => sum + value, 0);
192
- return `${Math.round(total / durations.length)}ms`;
193
- }
194
- function averageNumber(events, selector) {
195
- const values = events
196
- .map(selector)
197
- .filter((value) => value !== undefined);
198
- if (!values.length)
199
- return "n/a";
200
- const total = values.reduce((sum, value) => sum + value, 0);
201
- return Math.round((total / values.length) * 10) / 10;
202
- }
203
- function sumNumber(events, selector) {
204
- return events.reduce((sum, event) => sum + (selector(event) ?? 0), 0);
205
- }
206
- function distinctCount(events, selector) {
207
- const values = new Set();
208
- for (const event of events) {
209
- const value = selector(event);
210
- if (value !== undefined && value !== null && String(value) !== "") {
211
- values.add(String(value));
212
- }
213
- }
214
- return values.size;
215
- }
216
- function operationFor(event) {
217
- const operation = detailString(event, "operation");
218
- if (operation)
219
- return operation;
220
- if (event.type === "custom") {
221
- const parts = event.name.split(".");
222
- return parts.length > 1 ? parts.slice(1).join(".") : event.name;
223
- }
224
- if (event.type === "provider")
225
- return event.action;
226
- if ("status" in event && typeof event.status === "string") {
227
- return event.status;
228
- }
229
- return inferDevtoolsWatcher(event);
230
- }
231
- function operationBase(event) {
232
- return operationFor(event).replace(/\.failed$/, "");
233
- }
234
- function errorTextFor(event) {
235
- const detailError = detailValue(event, "error");
236
- if (typeof detailError === "string" && detailError)
237
- return detailError;
238
- if (isRecord(detailError)) {
239
- if (typeof detailError.message === "string")
240
- return detailError.message;
241
- return jsonSearch(detailError);
242
- }
243
- if ("error" in event && typeof event.error === "string")
244
- return event.error;
245
- return "";
246
- }
247
- function queryFor(event) {
248
- const query = detailString(event, "query");
249
- return query || ("summary" in event && event.summary ? event.summary : "");
250
- }
251
- function dbOperationFor(event) {
252
- const query = queryFor(event).trim();
253
- const match = query.match(/^([a-z]+)/i);
254
- return match ? match[1].toLowerCase() : "query";
255
- }
256
- function dbTargetFor(event) {
257
- const query = queryFor(event);
258
- const patterns = [
259
- /\bfrom\s+"?([a-zA-Z0-9_]+)"?/i,
260
- /\binto\s+"?([a-zA-Z0-9_]+)"?/i,
261
- /\bupdate\s+"?([a-zA-Z0-9_]+)"?/i,
262
- /\bdelete\s+from\s+"?([a-zA-Z0-9_]+)"?/i,
263
- ];
264
- for (const pattern of patterns) {
265
- const match = query.match(pattern);
266
- if (match)
267
- return match[1] ?? "";
268
- }
269
- return "";
270
- }
271
- function attemptLabel(event) {
272
- const attempt = detailValue(event, "attempt");
273
- const max = detailValue(event, "maxAttempts");
274
- if (attempt !== undefined && max !== undefined)
275
- return `${attempt}/${max}`;
276
- if (attempt !== undefined)
277
- return `attempt ${attempt}`;
278
- return "";
279
- }
280
- function retryFor(event) {
281
- const retryAt = detailValue(event, "retryAt") || detailValue(event, "availableAt");
282
- const retryDelayMs = detailValue(event, "retryDelayMs");
283
- if (retryAt && retryDelayMs !== undefined)
284
- return `${retryAt} (${retryDelayMs}ms)`;
285
- return valueText(retryAt);
286
- }
287
- function channelList(event) {
288
- const channels = notificationChannels(event);
289
- if (channels.length)
290
- return channels.join(", ");
291
- return "";
292
- }
293
- function notificationChannels(event) {
294
- const channels = detailValue(event, "channels");
295
- if (Array.isArray(channels))
296
- return channels.map(String);
297
- const channel = detailValue(event, "channel");
298
- if (channel)
299
- return [String(channel)];
300
- const results = detailValue(event, "results");
301
- if (Array.isArray(results)) {
302
- return results
303
- .map((result) => (isRecord(result) ? valueText(result.channel) : ""))
304
- .filter(Boolean);
305
- }
306
- return [];
307
- }
308
- function distinctNotificationChannels(events) {
309
- const values = new Set();
310
- for (const event of events) {
311
- for (const channel of notificationChannels(event)) {
312
- values.add(channel);
313
- }
314
- }
315
- return values.size;
316
- }
317
- function recipientSummary(event) {
318
- const to = detailValue(event, "to");
319
- if (Array.isArray(to))
320
- return `${to.length} recipient${to.length === 1 ? "" : "s"}`;
321
- return valueText(to);
322
- }
323
- function actorId(event) {
324
- const actor = detailValue(event, "actor");
325
- return isRecord(actor) ? valueText(actor.id) : "";
326
- }
327
- function resourceId(event) {
328
- const resource = detailValue(event, "resource");
329
- return isRecord(resource) ? valueText(resource.id ?? resource.type) : "";
330
- }
331
- function scheduleStatus(event, status) {
332
- return event.type === "schedule" && event.status === status;
333
- }
334
- function notificationFailed(event) {
335
- const results = detailValue(event, "results");
336
- if (Array.isArray(results)) {
337
- return results.some((result) => isRecord(result) && valueText(result.status) === "failed");
338
- }
339
- return devtoolsEventFailure(event);
340
- }
341
- function storageMissing(event) {
342
- return (detailBoolean(event, "exists") === false ||
343
- detailValue(event, "object") === null ||
344
- containsText(event, "missing"));
345
- }
346
- export function devtoolsPanelMeta(tabId, label = "Subsystem") {
347
- switch (tabId) {
348
- case "events":
349
- return {
350
- title: "Domain events",
351
- subtitle: "Published facts and event bus activity",
352
- };
353
- case "jobs":
354
- return { title: "Jobs", subtitle: "Background job lifecycle" };
355
- case "outbox":
356
- return {
357
- title: "Outbox",
358
- subtitle: "Durable message delivery, retries, and dead letters",
359
- };
360
- case "schedules":
361
- return { title: "Schedules", subtitle: "Cron and schedule runs" };
362
- case "db":
363
- return {
364
- title: "Database",
365
- subtitle: "Queries and database provider diagnostics",
366
- };
367
- case "cache":
368
- return {
369
- title: "Cache",
370
- subtitle: "Reads, writes, deletes, and hit rates",
371
- };
372
- case "storage":
373
- return {
374
- title: "Storage",
375
- subtitle: "Object reads, writes, deletes, and public URL resolution",
376
- };
377
- case "uploads":
378
- return {
379
- title: "Uploads",
380
- subtitle: "Upload preparation, signing, server upload, and completion",
381
- };
382
- case "mail":
383
- return {
384
- title: "Mail",
385
- subtitle: "Delivery attempts, recipients, and provider results",
386
- };
387
- case "notifications":
388
- return {
389
- title: "Notifications",
390
- subtitle: "Notification intent and per-channel delivery",
391
- };
392
- case "auth":
393
- return { title: "Auth", subtitle: "Session and authentication activity" };
394
- case "audit":
395
- return {
396
- title: "Audit",
397
- subtitle: "Durable activity records emitted by application code",
398
- };
399
- case "rateLimit":
400
- return {
401
- title: "Rate limits",
402
- subtitle: "Allowed, blocked, and failed checks",
403
- };
404
- default:
405
- return { title: label, subtitle: "Subsystem activity" };
406
- }
407
- }
408
- export function devtoolsPanelMetrics(tabId, events) {
409
- switch (tabId) {
410
- case "events":
411
- return [
412
- { label: "Events", value: events.length },
413
- {
414
- label: "Names",
415
- value: distinctCount(events, (event) => event.type === "eventBus" ? event.eventName : ""),
416
- },
417
- {
418
- label: "Traces",
419
- value: distinctCount(events, (event) => event.traceId),
420
- },
421
- {
422
- label: "Requests",
423
- value: distinctCount(events, (event) => event.requestId),
424
- },
425
- ];
426
- case "jobs":
427
- return [
428
- { label: "Jobs", value: events.length },
429
- {
430
- label: "Scheduled",
431
- value: events.filter((event) => event.type === "job" && event.status === "scheduled").length,
432
- },
433
- {
434
- label: "Failed",
435
- value: events.filter((event) => event.type === "job" && event.status === "failed").length,
436
- },
437
- {
438
- label: "Retried",
439
- value: events.filter((event) => event.type === "job" && event.status === "retryScheduled").length,
440
- },
441
- {
442
- label: "Dead letters",
443
- value: events.filter((event) => event.type === "job" && event.status === "deadLettered").length,
444
- },
445
- ];
446
- case "outbox":
447
- return [
448
- {
449
- label: "Delivered",
450
- value: events.filter((event) => event.type === "outbox" && event.status === "delivered").length,
451
- },
452
- {
453
- label: "Retried",
454
- value: events.filter((event) => event.type === "outbox" && event.status === "retryScheduled").length,
455
- },
456
- {
457
- label: "Dead letters",
458
- value: events.filter((event) => event.type === "outbox" && event.status === "deadLettered").length,
459
- },
460
- {
461
- label: "Avg attempt",
462
- value: averageNumber(events, (event) => detailNumber(event, "attempt")),
463
- },
464
- ];
465
- case "schedules":
466
- return [
467
- { label: "Runs", value: events.length },
468
- {
469
- label: "Completed",
470
- value: events.filter((event) => scheduleStatus(event, "completed"))
471
- .length,
472
- },
473
- {
474
- label: "Failed",
475
- value: events.filter((event) => scheduleStatus(event, "failed"))
476
- .length,
477
- },
478
- {
479
- label: "Names",
480
- value: distinctCount(events, (event) => event.type === "schedule" ? event.scheduleName : ""),
481
- },
482
- ];
483
- case "cache":
484
- return [
485
- { label: "Operations", value: events.length },
486
- {
487
- label: "Hits",
488
- value: events.filter((event) => detailBoolean(event, "hit") === true ||
489
- detailBoolean(event, "exists") === true).length,
490
- },
491
- {
492
- label: "Misses",
493
- value: events.filter((event) => detailBoolean(event, "hit") === false ||
494
- detailBoolean(event, "exists") === false).length,
495
- },
496
- {
497
- label: "Failures",
498
- value: events.filter(devtoolsEventFailure).length,
499
- },
500
- ];
501
- case "db":
502
- return [
503
- { label: "Queries", value: events.length },
504
- {
505
- label: "Failures",
506
- value: events.filter(devtoolsEventFailure).length,
507
- },
508
- { label: "Tables", value: distinctCount(events, dbTargetFor) },
509
- {
510
- label: "Redacted",
511
- value: events.filter(hasDevtoolsRedactedValue).length,
512
- },
513
- ];
514
- case "storage":
515
- return [
516
- { label: "Operations", value: events.length },
517
- {
518
- label: "Writes",
519
- value: events.filter((event) => operationBase(event) === "put")
520
- .length,
521
- },
522
- { label: "Missing", value: events.filter(storageMissing).length },
523
- {
524
- label: "Failures",
525
- value: events.filter(devtoolsEventFailure).length,
526
- },
527
- ];
528
- case "uploads":
529
- return [
530
- { label: "Uploads", value: events.length },
531
- {
532
- label: "Completed",
533
- value: events.filter((event) => event.type === "custom" && event.name.endsWith(".completed")).length,
534
- },
535
- { label: "Failed", value: events.filter(devtoolsEventFailure).length },
536
- {
537
- label: "Files",
538
- value: sumNumber(events, (event) => detailNumber(event, "fileCount")),
539
- },
540
- ];
541
- case "mail":
542
- return [
543
- {
544
- label: "Attempts",
545
- value: events.filter((event) => event.type === "custom" && event.name === "mail.send").length,
546
- },
547
- {
548
- label: "Sent",
549
- value: events.filter((event) => event.type === "custom" && event.name === "mail.sent").length,
550
- },
551
- { label: "Failed", value: events.filter(devtoolsEventFailure).length },
552
- {
553
- label: "Providers",
554
- value: distinctCount(events, devtoolsEventProvider),
555
- },
556
- ];
557
- case "notifications":
558
- return [
559
- { label: "Notifications", value: events.length },
560
- {
561
- label: "Completed",
562
- value: events.filter((event) => event.type === "custom" && event.name.endsWith(".completed")).length,
563
- },
564
- { label: "Failed", value: events.filter(notificationFailed).length },
565
- { label: "Channels", value: distinctNotificationChannels(events) },
566
- ];
567
- case "auth":
568
- return [
569
- { label: "Checks", value: events.length },
570
- {
571
- label: "Signed in",
572
- value: events.filter((event) => detailBoolean(event, "authenticated") === true).length,
573
- },
574
- {
575
- label: "Guest",
576
- value: events.filter((event) => detailBoolean(event, "authenticated") === false &&
577
- !devtoolsEventFailure(event)).length,
578
- },
579
- {
580
- label: "Failures",
581
- value: events.filter(devtoolsEventFailure).length,
582
- },
583
- ];
584
- case "audit":
585
- return [
586
- { label: "Entries", value: events.length },
587
- {
588
- label: "Failures",
589
- value: events.filter((event) => detailValue(event, "outcome") === "failure").length,
590
- },
591
- { label: "Actors", value: distinctCount(events, actorId) },
592
- { label: "Resources", value: distinctCount(events, resourceId) },
593
- ];
594
- case "rateLimit":
595
- return [
596
- { label: "Checks", value: events.length },
597
- {
598
- label: "Allowed",
599
- value: events.filter((event) => detailBoolean(event, "allowed") === true).length,
600
- },
601
- {
602
- label: "Blocked",
603
- value: events.filter((event) => detailBoolean(event, "allowed") === false).length,
604
- },
605
- { label: "Avg", value: averageDuration(events) },
606
- ];
607
- default:
608
- return [
609
- { label: "Events", value: events.length },
610
- {
611
- label: "Failures",
612
- value: events.filter(devtoolsEventFailure).length,
613
- },
614
- {
615
- label: "Requests",
616
- value: distinctCount(events, (event) => event.requestId),
617
- },
618
- { label: "Avg", value: averageDuration(events) },
619
- ];
620
- }
621
- }
622
- function field(label, value) {
623
- return { label, value: valueText(value) };
624
- }
625
- function genericDetail(event) {
626
- return {
627
- fields: [
628
- field("Provider", devtoolsEventProvider(event)),
629
- field("Operation", operationFor(event)),
630
- field("Duration", devtoolsEventDuration(event) !== undefined
631
- ? `${devtoolsEventDuration(event)}ms`
632
- : ""),
633
- field("Request", event.requestId),
634
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
635
- field("Error", errorTextFor(event)),
636
- ],
637
- note: summarizeDevtoolsEvent(event),
638
- };
639
- }
640
- export function devtoolsPanelDetail(tabId, event) {
641
- const details = detailsObject(event);
642
- switch (tabId) {
643
- case "db":
644
- return {
645
- fields: [
646
- field("Provider", devtoolsEventProvider(event)),
647
- field("Operation", dbOperationFor(event)),
648
- field("Table", dbTargetFor(event)),
649
- field("Port", details.portName),
650
- field("Params", details.paramsCount),
651
- field("Duration", devtoolsEventDuration(event) !== undefined
652
- ? `${devtoolsEventDuration(event)}ms`
653
- : ""),
654
- field("Request", event.requestId),
655
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
656
- ],
657
- note: "summary" in event && event.summary
658
- ? event.summary
659
- : "Database provider activity",
660
- };
661
- case "outbox":
662
- return {
663
- fields: [
664
- field("Message", event.type === "outbox" ? event.messageName : ""),
665
- field("Kind", event.type === "outbox" ? event.messageKind : ""),
666
- field("Status", "status" in event ? event.status : ""),
667
- field("Attempt", attemptLabel(event)),
668
- field("Retry", retryFor(event)),
669
- field("Error", errorTextFor(event)),
670
- field("Request", event.requestId),
671
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
672
- ],
673
- note: summarizeDevtoolsEvent(event),
674
- };
675
- case "jobs":
676
- return {
677
- fields: [
678
- field("Job", event.type === "job" ? event.jobName : ""),
679
- field("Status", "status" in event ? event.status : ""),
680
- field("Phase", details.phase),
681
- field("Provider", devtoolsEventProvider(event)),
682
- field("Attempt", attemptLabel(event)),
683
- field("Retry", retryFor(event)),
684
- field("Error", errorTextFor(event)),
685
- field("Request", event.requestId),
686
- ],
687
- note: summarizeDevtoolsEvent(event),
688
- };
689
- case "schedules":
690
- return {
691
- fields: [
692
- field("Schedule", event.type === "schedule" ? event.scheduleName : ""),
693
- field("Status", "status" in event ? event.status : ""),
694
- field("Cron", event.type === "schedule" ? event.cron : details.cron),
695
- field("Timezone", event.type === "schedule" ? event.timezone : details.timezone),
696
- field("Provider", devtoolsEventProvider(event)),
697
- field("Duration", devtoolsEventDuration(event) !== undefined
698
- ? `${devtoolsEventDuration(event)}ms`
699
- : ""),
700
- field("Error", errorTextFor(event)),
701
- field("Request", event.requestId),
702
- ],
703
- note: summarizeDevtoolsEvent(event),
704
- };
705
- case "cache":
706
- return {
707
- fields: [
708
- field("Operation", operationFor(event)),
709
- field("Key", details.key),
710
- field("Result", devtoolsPanelResult(event)),
711
- field("TTL", details.ttlSeconds),
712
- field("Provider", devtoolsEventProvider(event)),
713
- field("Duration", devtoolsEventDuration(event) !== undefined
714
- ? `${devtoolsEventDuration(event)}ms`
715
- : ""),
716
- field("Error", errorTextFor(event)),
717
- field("Request", event.requestId),
718
- ],
719
- note: summarizeDevtoolsEvent(event),
720
- };
721
- case "storage":
722
- return {
723
- fields: [
724
- field("Operation", operationFor(event)),
725
- field("Key", details.key),
726
- field("Bucket", details.bucket),
727
- field("Visibility", details.visibility),
728
- field("Provider", devtoolsEventProvider(event)),
729
- field("Duration", devtoolsEventDuration(event) !== undefined
730
- ? `${devtoolsEventDuration(event)}ms`
731
- : ""),
732
- field("Error", errorTextFor(event)),
733
- field("Request", event.requestId),
734
- ],
735
- note: summarizeDevtoolsEvent(event),
736
- };
737
- case "uploads":
738
- return {
739
- fields: [
740
- field("Upload", details.uploadName || ("summary" in event ? event.summary : "")),
741
- field("Operation", operationFor(event)),
742
- field("Mode", details.mode),
743
- field("Files", details.fileCount),
744
- field("Key", details.key),
745
- field("Provider", devtoolsEventProvider(event)),
746
- field("Duration", devtoolsEventDuration(event) !== undefined
747
- ? `${devtoolsEventDuration(event)}ms`
748
- : ""),
749
- field("Error", errorTextFor(event)),
750
- ],
751
- note: summarizeDevtoolsEvent(event),
752
- };
753
- case "mail":
754
- return {
755
- fields: [
756
- field("Subject", details.subject),
757
- field("Provider", devtoolsEventProvider(event)),
758
- field("Recipients", recipientSummary(event)),
759
- field("Message ID", details.id),
760
- field("Operation", operationFor(event)),
761
- field("Error", errorTextFor(event)),
762
- field("Request", event.requestId),
763
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
764
- ],
765
- note: summarizeDevtoolsEvent(event),
766
- };
767
- case "notifications":
768
- return {
769
- fields: [
770
- field("Notification", details.notificationName ||
771
- ("summary" in event ? event.summary : "")),
772
- field("Channels", channelList(event)),
773
- field("Status", devtoolsPanelResult(event)),
774
- field("Provider", devtoolsEventProvider(event)),
775
- field("Error", errorTextFor(event)),
776
- field("Request", event.requestId),
777
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
778
- field("Metadata", details.metadata ? "present" : ""),
779
- ],
780
- note: summarizeDevtoolsEvent(event),
781
- };
782
- case "auth":
783
- return {
784
- fields: [
785
- field("Operation", operationFor(event)),
786
- field("Authenticated", detailBoolean(event, "authenticated")),
787
- field("Provider", devtoolsEventProvider(event)),
788
- field("Duration", devtoolsEventDuration(event) !== undefined
789
- ? `${devtoolsEventDuration(event)}ms`
790
- : ""),
791
- field("Error", errorTextFor(event)),
792
- field("Request", event.requestId),
793
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
794
- field("Result", devtoolsPanelResult(event)),
795
- ],
796
- note: summarizeDevtoolsEvent(event),
797
- };
798
- case "audit":
799
- return {
800
- fields: [
801
- field("Action", details.action || ("name" in event ? event.name : "")),
802
- field("Outcome", details.outcome),
803
- field("Actor", actorId(event)),
804
- field("Resource", resourceId(event)),
805
- field("Tenant", isRecord(details.tenant) ? details.tenant.id : ""),
806
- field("Occurred", details.occurredAt),
807
- field("Request", event.requestId),
808
- field("Trace", event.traceId ? event.traceId.slice(0, 12) : ""),
809
- ],
810
- note: valueText(details.message) || summarizeDevtoolsEvent(event),
811
- };
812
- case "rateLimit":
813
- return {
814
- fields: [
815
- field("Key", details.key),
816
- field("Allowed", detailBoolean(event, "allowed")),
817
- field("Remaining", details.remaining),
818
- field("Limit", details.limit),
819
- field("Window", details.windowSec ? `${details.windowSec}s` : ""),
820
- field("Retry after", details.retryAfterSeconds),
821
- field("Provider", devtoolsEventProvider(event)),
822
- field("Error", errorTextFor(event)),
823
- ],
824
- note: summarizeDevtoolsEvent(event),
825
- };
826
- default:
827
- return genericDetail(event);
828
- }
829
- }
830
- export function devtoolsPanelPrimary(tabId, event) {
831
- const details = detailsObject(event);
832
- switch (tabId) {
833
- case "db":
834
- return (dbTargetFor(event) ||
835
- ("summary" in event ? event.summary : "") ||
836
- "Database query");
837
- case "cache":
838
- return valueText(details.key) || "Cache operation";
839
- case "storage":
840
- return valueText(details.key) || "Storage operation";
841
- case "uploads":
842
- return (valueText(details.uploadName || ("summary" in event ? event.summary : "")) || "Upload");
843
- case "mail":
844
- return valueText(details.subject) || "Mail";
845
- case "notifications":
846
- return (valueText(details.notificationName || ("summary" in event ? event.summary : "")) || "Notification");
847
- case "auth":
848
- return operationFor(event) || "Auth";
849
- case "audit":
850
- return (valueText(details.action || ("name" in event ? event.name : "")) ||
851
- "Audit entry");
852
- case "rateLimit":
853
- return valueText(details.key) || "Rate limit";
854
- default:
855
- switch (event.type) {
856
- case "eventBus":
857
- return event.eventName || "Domain event";
858
- case "job":
859
- return event.jobName || "Job";
860
- case "outbox":
861
- return event.messageName || "Outbox message";
862
- case "schedule":
863
- return event.scheduleName || "Schedule";
864
- case "custom":
865
- return event.label || event.name || "Custom event";
866
- default:
867
- return summarizeDevtoolsEvent(event);
868
- }
869
- }
870
- }
871
- export function devtoolsPanelSecondary(tabId, event) {
872
- const details = detailsObject(event);
873
- switch (tabId) {
874
- case "db":
875
- return ([dbOperationFor(event), details.portName].filter(Boolean).join(" / ") ||
876
- "query");
877
- case "cache":
878
- case "storage":
879
- return [operationFor(event), devtoolsEventProvider(event)]
880
- .filter(Boolean)
881
- .join(" / ");
882
- case "uploads":
883
- return [
884
- operationFor(event),
885
- details.mode,
886
- details.fileCount ? `${details.fileCount} files` : "",
887
- ]
888
- .filter(Boolean)
889
- .join(" / ");
890
- case "mail":
891
- return [devtoolsEventProvider(event), recipientSummary(event)]
892
- .filter(Boolean)
893
- .join(" / ");
894
- case "notifications":
895
- return [channelList(event), devtoolsPanelResult(event)]
896
- .filter(Boolean)
897
- .join(" / ");
898
- case "auth":
899
- return [
900
- detailBoolean(event, "authenticated") === true
901
- ? "authenticated"
902
- : detailBoolean(event, "authenticated") === false
903
- ? "guest"
904
- : "",
905
- devtoolsEventProvider(event),
906
- ]
907
- .filter(Boolean)
908
- .join(" / ");
909
- case "audit":
910
- return [details.outcome, actorId(event), resourceId(event)]
911
- .filter(Boolean)
912
- .join(" / ");
913
- case "rateLimit":
914
- return [
915
- detailBoolean(event, "allowed") === true
916
- ? "allowed"
917
- : detailBoolean(event, "allowed") === false
918
- ? "blocked"
919
- : "",
920
- details.remaining !== undefined ? `${details.remaining} remaining` : "",
921
- ]
922
- .filter(Boolean)
923
- .join(" / ");
924
- default:
925
- if (event.type === "provider")
926
- return event.action;
927
- if (event.type === "outbox")
928
- return [event.messageKind, attemptLabel(event)]
929
- .filter(Boolean)
930
- .join(" / ");
931
- if (event.type === "job")
932
- return [event.status, details.phase, attemptLabel(event)]
933
- .filter(Boolean)
934
- .join(" / ");
935
- if (event.type === "schedule")
936
- return [event.status, event.cron].filter(Boolean).join(" / ");
937
- if (event.type === "eventBus")
938
- return event.requestId || event.traceId || "";
939
- if (details.operation)
940
- return valueText(details.operation);
941
- if (event.type === "custom")
942
- return event.name;
943
- return inferDevtoolsWatcher(event);
944
- }
945
- }
946
- export function devtoolsPanelResult(event) {
947
- const details = detailsObject(event);
948
- if (details.allowed === true)
949
- return "allowed";
950
- if (details.allowed === false)
951
- return "blocked";
952
- if (details.hit === true)
953
- return "hit";
954
- if (details.hit === false)
955
- return "miss";
956
- if (details.exists === true)
957
- return "exists";
958
- if (details.exists === false)
959
- return "missing";
960
- if (details.authenticated === true)
961
- return "signed in";
962
- if (details.authenticated === false)
963
- return "guest";
964
- if (event.type === "custom" && event.name.endsWith(".completed"))
965
- return "completed";
966
- if (event.type === "custom" && event.name.endsWith(".sent"))
967
- return "sent";
968
- if ("status" in event && typeof event.status === "string")
969
- return event.status;
970
- if (details.outcome)
971
- return valueText(details.outcome);
972
- if (details.error)
973
- return "failed";
974
- return devtoolsEventProvider(event) || inferDevtoolsWatcher(event);
975
- }
976
- export function createDevtoolsPanelRow(tabId, event) {
977
- return {
978
- primary: devtoolsPanelPrimary(tabId, event),
979
- secondary: devtoolsPanelSecondary(tabId, event),
980
- summary: summarizeDevtoolsEvent(event),
981
- durationMs: devtoolsEventDuration(event),
982
- result: devtoolsPanelResult(event),
983
- detail: devtoolsPanelDetail(tabId, event),
984
- };
985
- }
986
- export function devtoolsPanelModelBrowserSource() {
987
- return [
988
- isRecord,
989
- detailsObject,
990
- detailValue,
991
- detailString,
992
- detailNumber,
993
- detailBoolean,
994
- valueText,
995
- jsonSearch,
996
- containsText,
997
- inferDevtoolsWatcher,
998
- devtoolsEventBadgeLabel,
999
- devtoolsEventBadgeClass,
1000
- summarizeDevtoolsEvent,
1001
- devtoolsEventDuration,
1002
- devtoolsEventProvider,
1003
- devtoolsEventFailure,
1004
- hasDevtoolsRedactedValue,
1005
- averageDuration,
1006
- averageNumber,
1007
- sumNumber,
1008
- distinctCount,
1009
- operationFor,
1010
- operationBase,
1011
- errorTextFor,
1012
- queryFor,
1013
- dbOperationFor,
1014
- dbTargetFor,
1015
- attemptLabel,
1016
- retryFor,
1017
- channelList,
1018
- notificationChannels,
1019
- distinctNotificationChannels,
1020
- recipientSummary,
1021
- actorId,
1022
- resourceId,
1023
- scheduleStatus,
1024
- notificationFailed,
1025
- storageMissing,
1026
- devtoolsPanelMeta,
1027
- devtoolsPanelMetrics,
1028
- field,
1029
- genericDetail,
1030
- devtoolsPanelDetail,
1031
- devtoolsPanelPrimary,
1032
- devtoolsPanelSecondary,
1033
- devtoolsPanelResult,
1034
- createDevtoolsPanelRow,
1035
- ]
1036
- .map((fn) => fn.toString())
1037
- .join("\n");
1038
- }
1039
- //# sourceMappingURL=ui-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-model.js","sourceRoot":"","sources":["../src/ui-model.ts"],"names":[],"mappings":"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"}