server-devtools 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +544 -0
  3. package/dist/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  4. package/dist/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  5. package/dist/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  6. package/dist/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  7. package/dist/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  8. package/dist/dashboard/assets/index-DvYSUjO3.css +2 -0
  9. package/dist/dashboard/assets/index-vQGCvuXC.js +9 -0
  10. package/dist/dashboard/favicon.svg +9 -0
  11. package/dist/dashboard/icons.svg +24 -0
  12. package/dist/dashboard/index.html +14 -0
  13. package/dist/src/config/index.d.ts +21 -0
  14. package/dist/src/config/index.d.ts.map +1 -0
  15. package/dist/src/config/index.js +30 -0
  16. package/dist/src/config/index.js.map +1 -0
  17. package/dist/src/core/execution-tree-builder.d.ts +6 -0
  18. package/dist/src/core/execution-tree-builder.d.ts.map +1 -0
  19. package/dist/src/core/execution-tree-builder.js +44 -0
  20. package/dist/src/core/execution-tree-builder.js.map +1 -0
  21. package/dist/src/dashboard/dashboard-errors-mapper.d.ts +5 -0
  22. package/dist/src/dashboard/dashboard-errors-mapper.d.ts.map +1 -0
  23. package/dist/src/dashboard/dashboard-errors-mapper.js +19 -0
  24. package/dist/src/dashboard/dashboard-errors-mapper.js.map +1 -0
  25. package/dist/src/dashboard/dashboard-request-detail-mapper.d.ts +16 -0
  26. package/dist/src/dashboard/dashboard-request-detail-mapper.d.ts.map +1 -0
  27. package/dist/src/dashboard/dashboard-request-detail-mapper.js +79 -0
  28. package/dist/src/dashboard/dashboard-request-detail-mapper.js.map +1 -0
  29. package/dist/src/dashboard/dashboard-response-detail-mapper.d.ts +6 -0
  30. package/dist/src/dashboard/dashboard-response-detail-mapper.d.ts.map +1 -0
  31. package/dist/src/dashboard/dashboard-response-detail-mapper.js +39 -0
  32. package/dist/src/dashboard/dashboard-response-detail-mapper.js.map +1 -0
  33. package/dist/src/dashboard/dashboard-server.d.ts +21 -0
  34. package/dist/src/dashboard/dashboard-server.d.ts.map +1 -0
  35. package/dist/src/dashboard/dashboard-server.js +676 -0
  36. package/dist/src/dashboard/dashboard-server.js.map +1 -0
  37. package/dist/src/index.d.ts +16 -0
  38. package/dist/src/index.d.ts.map +1 -0
  39. package/dist/src/index.js +118 -0
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/src/instrumentation/exporter.d.ts +11 -0
  42. package/dist/src/instrumentation/exporter.d.ts.map +1 -0
  43. package/dist/src/instrumentation/exporter.js +46 -0
  44. package/dist/src/instrumentation/exporter.js.map +1 -0
  45. package/dist/src/instrumentation/instrumentation.d.ts +11 -0
  46. package/dist/src/instrumentation/instrumentation.d.ts.map +1 -0
  47. package/dist/src/instrumentation/instrumentation.js +144 -0
  48. package/dist/src/instrumentation/instrumentation.js.map +1 -0
  49. package/dist/src/instrumentation/outbound-http/outbound-http-capture.d.ts +24 -0
  50. package/dist/src/instrumentation/outbound-http/outbound-http-capture.d.ts.map +1 -0
  51. package/dist/src/instrumentation/outbound-http/outbound-http-capture.js +245 -0
  52. package/dist/src/instrumentation/outbound-http/outbound-http-capture.js.map +1 -0
  53. package/dist/src/instrumentation/span-mapper.d.ts +8 -0
  54. package/dist/src/instrumentation/span-mapper.d.ts.map +1 -0
  55. package/dist/src/instrumentation/span-mapper.js +54 -0
  56. package/dist/src/instrumentation/span-mapper.js.map +1 -0
  57. package/dist/src/integrations/nestjs/server-devtools-nest.interceptor.d.ts +6 -0
  58. package/dist/src/integrations/nestjs/server-devtools-nest.interceptor.d.ts.map +1 -0
  59. package/dist/src/integrations/nestjs/server-devtools-nest.interceptor.js +23 -0
  60. package/dist/src/integrations/nestjs/server-devtools-nest.interceptor.js.map +1 -0
  61. package/dist/src/nestjs.d.ts +2 -0
  62. package/dist/src/nestjs.d.ts.map +1 -0
  63. package/dist/src/nestjs.js +9 -0
  64. package/dist/src/nestjs.js.map +1 -0
  65. package/dist/src/security/auth.service.d.ts +16 -0
  66. package/dist/src/security/auth.service.d.ts.map +1 -0
  67. package/dist/src/security/auth.service.js +96 -0
  68. package/dist/src/security/auth.service.js.map +1 -0
  69. package/dist/src/security/encrypt-decrypt.service.d.ts +10 -0
  70. package/dist/src/security/encrypt-decrypt.service.d.ts.map +1 -0
  71. package/dist/src/security/encrypt-decrypt.service.js +93 -0
  72. package/dist/src/security/encrypt-decrypt.service.js.map +1 -0
  73. package/dist/src/storage/sqlite-storage.d.ts +35 -0
  74. package/dist/src/storage/sqlite-storage.d.ts.map +1 -0
  75. package/dist/src/storage/sqlite-storage.js +583 -0
  76. package/dist/src/storage/sqlite-storage.js.map +1 -0
  77. package/dist/src/types/dashboard.d.ts +32 -0
  78. package/dist/src/types/dashboard.d.ts.map +1 -0
  79. package/dist/src/types/dashboard.js +3 -0
  80. package/dist/src/types/dashboard.js.map +1 -0
  81. package/dist/src/types/database.d.ts +16 -0
  82. package/dist/src/types/database.d.ts.map +1 -0
  83. package/dist/src/types/database.js +3 -0
  84. package/dist/src/types/database.js.map +1 -0
  85. package/dist/src/types/http-client.d.ts +8 -0
  86. package/dist/src/types/http-client.d.ts.map +1 -0
  87. package/dist/src/types/http-client.js +3 -0
  88. package/dist/src/types/http-client.js.map +1 -0
  89. package/dist/src/types/index.d.ts +7 -0
  90. package/dist/src/types/index.d.ts.map +1 -0
  91. package/dist/src/types/index.js +23 -0
  92. package/dist/src/types/index.js.map +1 -0
  93. package/dist/src/types/misc.d.ts +25 -0
  94. package/dist/src/types/misc.d.ts.map +1 -0
  95. package/dist/src/types/misc.js +3 -0
  96. package/dist/src/types/misc.js.map +1 -0
  97. package/dist/src/types/span.d.ts +25 -0
  98. package/dist/src/types/span.d.ts.map +1 -0
  99. package/dist/src/types/span.js +3 -0
  100. package/dist/src/types/span.js.map +1 -0
  101. package/dist/src/types/trace.d.ts +32 -0
  102. package/dist/src/types/trace.d.ts.map +1 -0
  103. package/dist/src/types/trace.js +4 -0
  104. package/dist/src/types/trace.js.map +1 -0
  105. package/dist/src/utils/logger.d.ts +2 -0
  106. package/dist/src/utils/logger.d.ts.map +1 -0
  107. package/dist/src/utils/logger.js +19 -0
  108. package/dist/src/utils/logger.js.map +1 -0
  109. package/package.json +82 -0
@@ -0,0 +1,35 @@
1
+ import { IDevToolsCurrentUser, IDevToolsSpan, IDevToolsTrace, IHttpClientDetails, ISession, ITraceMetadata, ITraceSummary } from "../types";
2
+ import EncryptDecryptService from "../security/encrypt-decrypt.service";
3
+ export default class SQLiteStorage {
4
+ private readonly encryptionService?;
5
+ private readonly db;
6
+ constructor(path: string, encryptionService?: EncryptDecryptService | undefined);
7
+ private getSchemaVersion;
8
+ private setSchemaVersion;
9
+ private initializeV1Schema;
10
+ private initialize;
11
+ private deserializeSensitiveValue;
12
+ private serializeSensitiveValue;
13
+ saveSpan(span: IDevToolsSpan): void;
14
+ getSpansByTraceId(traceId: string): IDevToolsSpan[];
15
+ getTrace(traceId: string): IDevToolsTrace | undefined;
16
+ saveTraceSummary(span: IDevToolsSpan): void;
17
+ getTraceSummaries(): ITraceSummary[];
18
+ getPaginatedTraceSummaries(page: number, limit: number): {
19
+ summaries: ITraceSummary[];
20
+ total: number;
21
+ };
22
+ saveRequestBody(traceId: string, body: unknown): void;
23
+ saveResponseBody(traceId: string, body: unknown): void;
24
+ getTraceMetadata(traceId: string): ITraceMetadata | undefined;
25
+ deleteTrace(traceId: string): void;
26
+ clearHistory(): void;
27
+ saveSession(session: ISession): void;
28
+ getSessionByHash(sessionHash: string): ISession | undefined;
29
+ deleteSession(sessionHash: string): void;
30
+ saveCurrentUser(traceId: string, user: IDevToolsCurrentUser): void;
31
+ updateHttpClientDetails(spanId: string, details: Partial<Omit<IHttpClientDetails, "spanId">>): void;
32
+ getHttpClientDetails(spanId: string): IHttpClientDetails | undefined;
33
+ close(): void;
34
+ }
35
+ //# sourceMappingURL=sqlite-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC5I,OAAO,qBAAqB,MAAM,qCAAqC,CAAC;AAUxE,MAAM,CAAC,OAAO,OAAO,aAAa;IAI1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAHvC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;IAElC,YAAY,IAAI,EAAE,MAAM,EACH,iBAAiB,CAAC,EAAE,qBAAqB,YAAA,EAK7D;IAED,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IA0E1B,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,uBAAuB;IAQ/B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAyClC;IAED,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAkClD;IAED,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAoBpD;IAED,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA+E1C;IAED,iBAAiB,IAAI,aAAa,EAAE,CAmCnC;IAED,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QACrD,SAAS,EAAE,aAAa,EAAE,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;KACjB,CA4CA;IAED,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAmBpD;IAED,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAmBrD;IAED,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAsD5D;IAED,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAuBjC;IAED,YAAY,IAAI,IAAI,CAenB;IAED,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAenC;IAED,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAmB1D;IAED,aAAa,CAAC,WAAW,EAAE,MAAM,QAKhC;IAED,eAAe,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,oBAAoB,QAiB7B;IAED,uBAAuB,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,GACrD,IAAI,CAsEN;IAED,oBAAoB,CAChB,MAAM,EAAE,MAAM,GACf,kBAAkB,GAAG,SAAS,CA6ChC;IAED,KAAK,IAAI,IAAI,CAEZ;CACJ"}
@@ -0,0 +1,583 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_sqlite_1 = require("node:sqlite");
7
+ const config_1 = __importDefault(require("../config"));
8
+ class SQLiteStorage {
9
+ encryptionService;
10
+ db;
11
+ constructor(path, encryptionService) {
12
+ this.encryptionService = encryptionService;
13
+ this.db = new node_sqlite_1.DatabaseSync(path);
14
+ this.initialize();
15
+ }
16
+ getSchemaVersion() {
17
+ const row = this.db
18
+ .prepare("PRAGMA user_version")
19
+ .get();
20
+ return row.user_version;
21
+ }
22
+ setSchemaVersion(version) {
23
+ this.db.exec(`PRAGMA user_version = ${version}`);
24
+ }
25
+ initializeV1Schema() {
26
+ this.db.exec(`
27
+ CREATE TABLE IF NOT EXISTS spans (
28
+ span_id TEXT PRIMARY KEY,
29
+ trace_id TEXT NOT NULL,
30
+ parent_span_id TEXT,
31
+ type TEXT NOT NULL,
32
+ name TEXT NOT NULL,
33
+ started_at INTEGER NOT NULL,
34
+ duration_ms REAL NOT NULL,
35
+ attributes_json TEXT NOT NULL,
36
+ status_json TEXT NOT NULL,
37
+ error_json TEXT
38
+ );
39
+
40
+ CREATE INDEX IF NOT EXISTS idx_spans_trace_id
41
+ ON spans(trace_id);
42
+
43
+ CREATE TABLE IF NOT EXISTS traces (
44
+ trace_id TEXT PRIMARY KEY,
45
+ root_span_id TEXT,
46
+ started_at INTEGER NOT NULL,
47
+ duration_ms REAL,
48
+ method TEXT,
49
+ path TEXT,
50
+ route TEXT,
51
+ status_code INTEGER,
52
+ has_error INTEGER NOT NULL DEFAULT 0,
53
+ created_at INTEGER NOT NULL
54
+ );
55
+
56
+ CREATE INDEX IF NOT EXISTS idx_traces_started_at
57
+ ON traces(started_at);
58
+
59
+ CREATE TABLE IF NOT EXISTS trace_metadata (
60
+ trace_id TEXT PRIMARY KEY,
61
+ request_body TEXT,
62
+ response_body TEXT,
63
+ user_json TEXT
64
+ );
65
+
66
+ CREATE TABLE IF NOT EXISTS sessions (
67
+ session_hash TEXT PRIMARY KEY,
68
+ username TEXT NOT NULL,
69
+ created_at INTEGER NOT NULL,
70
+ expires_at INTEGER NOT NULL
71
+ );
72
+
73
+ CREATE TABLE IF NOT EXISTS http_client_details (
74
+ span_id TEXT PRIMARY KEY,
75
+ request_headers TEXT,
76
+ request_body TEXT,
77
+ response_headers TEXT,
78
+ response_body TEXT
79
+ );
80
+ `);
81
+ const traceColumns = this.db
82
+ .prepare(`PRAGMA table_info(traces)`)
83
+ .all();
84
+ if (traceColumns.some(column => column.name === "user_json")) {
85
+ this.db.exec(`ALTER TABLE traces DROP COLUMN user_json`);
86
+ }
87
+ const metadataColumns = this.db
88
+ .prepare(`PRAGMA table_info(trace_metadata)`)
89
+ .all();
90
+ if (!metadataColumns.some(column => column.name === "user_json")) {
91
+ this.db.exec(`ALTER TABLE trace_metadata ADD COLUMN user_json TEXT`);
92
+ }
93
+ }
94
+ initialize() {
95
+ const version = this.getSchemaVersion();
96
+ if (version === config_1.default.STORAGE.SCHEMA_VERSION) {
97
+ return;
98
+ }
99
+ if (version === 0) {
100
+ this.db.exec("BEGIN");
101
+ try {
102
+ this.initializeV1Schema();
103
+ this.setSchemaVersion(1);
104
+ this.db.exec("COMMIT");
105
+ }
106
+ catch (error) {
107
+ this.db.exec("ROLLBACK");
108
+ throw error;
109
+ }
110
+ }
111
+ }
112
+ deserializeSensitiveValue(value) {
113
+ const parsed = JSON.parse(value);
114
+ return this.encryptionService
115
+ ? this.encryptionService.decryptData(parsed)
116
+ : parsed;
117
+ }
118
+ serializeSensitiveValue(value) {
119
+ const encrypted = this.encryptionService
120
+ ? this.encryptionService.encryptData(value)
121
+ : value;
122
+ return JSON.stringify(encrypted);
123
+ }
124
+ saveSpan(span) {
125
+ const statement = this.db.prepare(`
126
+ INSERT OR REPLACE INTO spans (
127
+ span_id,
128
+ trace_id,
129
+ parent_span_id,
130
+ type,
131
+ name,
132
+ started_at,
133
+ duration_ms,
134
+ attributes_json,
135
+ status_json,
136
+ error_json
137
+ )
138
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
139
+ `);
140
+ statement.run(span.spanId, span.traceId, span.parentSpanId ?? null, span.type, span.name, span.startedAt, span.durationMs, JSON.stringify(span.attributes), JSON.stringify(span.status), span.error
141
+ ? JSON.stringify(span.error)
142
+ : null);
143
+ // Handles the case where the trace summary already exists
144
+ // when an errored child span arrives.
145
+ if (span.error) {
146
+ this.db.prepare(`
147
+ UPDATE traces
148
+ SET has_error = 1
149
+ WHERE trace_id = ?
150
+ `).run(span.traceId);
151
+ }
152
+ }
153
+ getSpansByTraceId(traceId) {
154
+ const statement = this.db.prepare(`
155
+ SELECT
156
+ span_id,
157
+ trace_id,
158
+ parent_span_id,
159
+ type,
160
+ name,
161
+ started_at,
162
+ duration_ms,
163
+ attributes_json,
164
+ status_json,
165
+ error_json
166
+ FROM spans
167
+ WHERE trace_id = ?
168
+ ORDER BY started_at ASC
169
+ `);
170
+ const rows = statement.all(traceId);
171
+ return rows.map((row) => ({
172
+ spanId: row.span_id,
173
+ traceId: row.trace_id,
174
+ parentSpanId: row.parent_span_id ?? undefined,
175
+ type: row.type,
176
+ name: row.name,
177
+ startedAt: row.started_at,
178
+ durationMs: row.duration_ms,
179
+ attributes: JSON.parse(row.attributes_json),
180
+ status: JSON.parse(row.status_json),
181
+ error: row.error_json
182
+ ? JSON.parse(row.error_json)
183
+ : undefined,
184
+ }));
185
+ }
186
+ getTrace(traceId) {
187
+ const spans = this.getSpansByTraceId(traceId);
188
+ if (spans.length === 0) {
189
+ return undefined;
190
+ }
191
+ const rootSpan = spans.find(span => !span.parentSpanId);
192
+ return {
193
+ traceId,
194
+ rootSpanId: rootSpan?.spanId,
195
+ spans,
196
+ startedAt: Math.min(...spans.map(span => span.startedAt)),
197
+ durationMs: rootSpan?.durationMs,
198
+ };
199
+ }
200
+ saveTraceSummary(span) {
201
+ if (span.parentSpanId) {
202
+ return;
203
+ }
204
+ const method = typeof span.attributes["http.request.method"] === "string"
205
+ ? span.attributes["http.request.method"]
206
+ : null;
207
+ const path = typeof span.attributes["url.path"] === "string"
208
+ ? span.attributes["url.path"]
209
+ : null;
210
+ const statusCode = typeof span.attributes["http.response.status_code"] === "number"
211
+ ? span.attributes["http.response.status_code"]
212
+ : null;
213
+ const route = typeof span.attributes["http.route"] === "string"
214
+ ? span.attributes["http.route"]
215
+ : null;
216
+ // The error may exist on a child span rather than the root HTTP span.
217
+ const errorSpan = this.db.prepare(`
218
+ SELECT 1
219
+ FROM spans
220
+ WHERE trace_id = ?
221
+ AND error_json IS NOT NULL
222
+ LIMIT 1
223
+ `).get(span.traceId);
224
+ const hasError = errorSpan ? 1 : 0;
225
+ const statement = this.db.prepare(`
226
+ INSERT INTO traces (
227
+ trace_id,
228
+ root_span_id,
229
+ started_at,
230
+ duration_ms,
231
+ method,
232
+ path,
233
+ route,
234
+ status_code,
235
+ has_error,
236
+ created_at
237
+ )
238
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
239
+
240
+ ON CONFLICT(trace_id) DO UPDATE SET
241
+ root_span_id = excluded.root_span_id,
242
+ started_at = excluded.started_at,
243
+ duration_ms = excluded.duration_ms,
244
+ method = excluded.method,
245
+ path = excluded.path,
246
+ route = excluded.route,
247
+ status_code = excluded.status_code,
248
+ has_error = CASE
249
+ WHEN traces.has_error = 1
250
+ OR excluded.has_error = 1
251
+ THEN 1
252
+ ELSE 0
253
+ END
254
+ `);
255
+ statement.run(span.traceId, span.spanId, span.startedAt, span.durationMs, method, path, route, statusCode, hasError, Date.now());
256
+ }
257
+ getTraceSummaries() {
258
+ const statement = this.db.prepare(`
259
+ SELECT
260
+ t.*,
261
+ tm.user_json
262
+ FROM traces t
263
+ LEFT JOIN trace_metadata tm
264
+ ON tm.trace_id = t.trace_id
265
+ ORDER BY started_at DESC
266
+ `);
267
+ const rows = statement.all();
268
+ return rows.map((row) => {
269
+ const userJson = row.user_json !== null
270
+ ? JSON.parse(row.user_json)
271
+ : undefined;
272
+ return {
273
+ traceId: row.trace_id,
274
+ rootSpanId: row.root_span_id ?? undefined,
275
+ startedAt: row.started_at,
276
+ durationMs: row.duration_ms ?? undefined,
277
+ method: row.method ?? undefined,
278
+ path: row.path ?? undefined,
279
+ route: row.route ?? undefined,
280
+ statusCode: row.status_code ?? undefined,
281
+ hasError: row.has_error === 1,
282
+ user: userJson !== undefined
283
+ ? this.encryptionService
284
+ ? this.encryptionService.decryptData(userJson)
285
+ : userJson
286
+ : undefined,
287
+ };
288
+ });
289
+ }
290
+ getPaginatedTraceSummaries(page, limit) {
291
+ const offset = (page - 1) * limit;
292
+ const totalRow = this.db.prepare(`
293
+ SELECT COUNT(*) AS total
294
+ FROM traces t
295
+ LEFT JOIN trace_metadata tm
296
+ ON tm.trace_id = t.trace_id
297
+ `).get();
298
+ const rows = this.db.prepare(`
299
+ SELECT
300
+ t.*,
301
+ tm.user_json
302
+ FROM traces t
303
+ LEFT JOIN trace_metadata tm
304
+ ON tm.trace_id = t.trace_id
305
+ ORDER BY t.started_at DESC
306
+ LIMIT ? OFFSET ?
307
+ `).all(limit, offset);
308
+ const summaries = rows.map((row) => {
309
+ const userJson = row.user_json !== null
310
+ ? JSON.parse(row.user_json)
311
+ : undefined;
312
+ return {
313
+ traceId: row.trace_id,
314
+ rootSpanId: row.root_span_id ?? undefined,
315
+ startedAt: row.started_at,
316
+ durationMs: row.duration_ms ?? undefined,
317
+ method: row.method ?? undefined,
318
+ path: row.path ?? undefined,
319
+ route: row.route ?? undefined,
320
+ statusCode: row.status_code ?? undefined,
321
+ hasError: row.has_error === 1,
322
+ user: userJson !== undefined
323
+ ? this.encryptionService
324
+ ? this.encryptionService.decryptData(userJson)
325
+ : userJson
326
+ : undefined,
327
+ };
328
+ });
329
+ return { summaries, total: totalRow.total };
330
+ }
331
+ saveRequestBody(traceId, body) {
332
+ const statement = this.db.prepare(`
333
+ INSERT INTO trace_metadata (
334
+ trace_id,
335
+ request_body
336
+ )
337
+ VALUES (?, ?)
338
+ ON CONFLICT(trace_id) DO UPDATE SET
339
+ request_body = excluded.request_body
340
+ `);
341
+ const data = this.encryptionService
342
+ ? this.encryptionService.encryptData(body)
343
+ : body;
344
+ statement.run(traceId, JSON.stringify(data));
345
+ }
346
+ saveResponseBody(traceId, body) {
347
+ const statement = this.db.prepare(`
348
+ INSERT INTO trace_metadata (
349
+ trace_id,
350
+ response_body
351
+ )
352
+ VALUES (?, ?)
353
+ ON CONFLICT(trace_id) DO UPDATE SET
354
+ response_body = excluded.response_body
355
+ `);
356
+ const data = this.encryptionService
357
+ ? this.encryptionService.encryptData(body)
358
+ : body;
359
+ statement.run(traceId, JSON.stringify(data));
360
+ }
361
+ getTraceMetadata(traceId) {
362
+ const statement = this.db.prepare(`
363
+ SELECT
364
+ request_body,
365
+ response_body,
366
+ user_json
367
+ FROM trace_metadata
368
+ WHERE trace_id = ?
369
+ `);
370
+ const row = statement.get(traceId);
371
+ if (!row) {
372
+ return undefined;
373
+ }
374
+ const requestBody = row.request_body !== null
375
+ ? JSON.parse(row.request_body)
376
+ : undefined;
377
+ const responseBody = row.response_body !== null
378
+ ? JSON.parse(row.response_body)
379
+ : undefined;
380
+ const userJson = row.user_json !== null
381
+ ? JSON.parse(row.user_json)
382
+ : undefined;
383
+ return {
384
+ request: requestBody !== undefined
385
+ ? {
386
+ body: this.encryptionService
387
+ ? this.encryptionService.decryptData(requestBody)
388
+ : requestBody,
389
+ }
390
+ : undefined,
391
+ response: responseBody !== undefined
392
+ ? {
393
+ body: this.encryptionService
394
+ ? this.encryptionService.decryptData(responseBody)
395
+ : responseBody,
396
+ }
397
+ : undefined,
398
+ user: userJson !== undefined
399
+ ? this.encryptionService
400
+ ? this.encryptionService.decryptData(userJson)
401
+ : userJson
402
+ : undefined,
403
+ };
404
+ }
405
+ deleteTrace(traceId) {
406
+ this.db.exec("BEGIN");
407
+ try {
408
+ this.db.prepare(`
409
+ DELETE FROM trace_metadata
410
+ WHERE trace_id = ?
411
+ `).run(traceId);
412
+ this.db.prepare(`
413
+ DELETE FROM spans
414
+ WHERE trace_id = ?
415
+ `).run(traceId);
416
+ this.db.prepare(`
417
+ DELETE FROM traces
418
+ WHERE trace_id = ?
419
+ `).run(traceId);
420
+ this.db.exec("COMMIT");
421
+ }
422
+ catch (error) {
423
+ this.db.exec("ROLLBACK");
424
+ }
425
+ }
426
+ clearHistory() {
427
+ this.db.exec("BEGIN");
428
+ try {
429
+ this.db.exec(`
430
+ DELETE FROM trace_metadata;
431
+ DELETE FROM spans;
432
+ DELETE FROM traces;
433
+ `);
434
+ this.db.exec("COMMIT");
435
+ }
436
+ catch (error) {
437
+ this.db.exec("ROLLBACK");
438
+ throw error;
439
+ }
440
+ }
441
+ saveSession(session) {
442
+ this.db.prepare(`
443
+ INSERT INTO sessions (
444
+ session_hash,
445
+ username,
446
+ created_at,
447
+ expires_at
448
+ )
449
+ VALUES (?, ?, ?, ?)
450
+ `).run(session.sessionHash, session.username, session.createdAt, session.expiresAt);
451
+ }
452
+ getSessionByHash(sessionHash) {
453
+ const row = this.db.prepare(`
454
+ SELECT
455
+ session_hash,
456
+ username,
457
+ created_at,
458
+ expires_at
459
+ FROM sessions
460
+ WHERE session_hash = ?
461
+ `).get(sessionHash);
462
+ if (!row)
463
+ return undefined;
464
+ return {
465
+ sessionHash: row.session_hash,
466
+ username: row.username,
467
+ createdAt: row.created_at,
468
+ expiresAt: row.expires_at,
469
+ };
470
+ }
471
+ deleteSession(sessionHash) {
472
+ this.db.prepare(`
473
+ DELETE FROM sessions
474
+ WHERE session_hash = ?
475
+ `).run(sessionHash);
476
+ }
477
+ saveCurrentUser(traceId, user) {
478
+ const processedUser = this.encryptionService
479
+ ? this.encryptionService.encryptData(user)
480
+ : user;
481
+ const userJson = JSON.stringify(processedUser);
482
+ this.db.prepare(`
483
+ INSERT INTO trace_metadata (
484
+ trace_id,
485
+ user_json
486
+ )
487
+ VALUES (?, ?)
488
+ ON CONFLICT(trace_id) DO UPDATE SET
489
+ user_json = excluded.user_json
490
+ `).run(traceId, userJson);
491
+ }
492
+ updateHttpClientDetails(spanId, details) {
493
+ const fields = [];
494
+ const values = [];
495
+ if (Object.prototype.hasOwnProperty.call(details, "requestHeaders")) {
496
+ fields.push("request_headers = ?");
497
+ values.push(details.requestHeaders === undefined
498
+ ? null
499
+ : this.serializeSensitiveValue(details.requestHeaders));
500
+ }
501
+ if (Object.prototype.hasOwnProperty.call(details, "requestBody")) {
502
+ fields.push("request_body = ?");
503
+ values.push(details.requestBody === undefined
504
+ ? null
505
+ : this.serializeSensitiveValue(details.requestBody));
506
+ }
507
+ if (Object.prototype.hasOwnProperty.call(details, "responseHeaders")) {
508
+ fields.push("response_headers = ?");
509
+ values.push(details.responseHeaders === undefined
510
+ ? null
511
+ : this.serializeSensitiveValue(details.responseHeaders));
512
+ }
513
+ if (Object.prototype.hasOwnProperty.call(details, "responseBody")) {
514
+ fields.push("response_body = ?");
515
+ values.push(details.responseBody === undefined
516
+ ? null
517
+ : this.serializeSensitiveValue(details.responseBody));
518
+ }
519
+ if (fields.length === 0) {
520
+ return;
521
+ }
522
+ const existing = this.db
523
+ .prepare(`
524
+ SELECT span_id
525
+ FROM http_client_details
526
+ WHERE span_id = ?
527
+ `)
528
+ .get(spanId);
529
+ if (!existing) {
530
+ this.db
531
+ .prepare(`
532
+ INSERT INTO http_client_details (span_id)
533
+ VALUES (?)
534
+ `)
535
+ .run(spanId);
536
+ }
537
+ values.push(spanId);
538
+ this.db
539
+ .prepare(`
540
+ UPDATE http_client_details
541
+ SET ${fields.join(", ")}
542
+ WHERE span_id = ?
543
+ `)
544
+ .run(...values);
545
+ }
546
+ getHttpClientDetails(spanId) {
547
+ const row = this.db
548
+ .prepare(`
549
+ SELECT
550
+ span_id,
551
+ request_headers,
552
+ request_body,
553
+ response_headers,
554
+ response_body
555
+ FROM http_client_details
556
+ WHERE span_id = ?
557
+ `)
558
+ .get(spanId);
559
+ if (!row) {
560
+ return undefined;
561
+ }
562
+ return {
563
+ spanId: row.span_id,
564
+ requestHeaders: row.request_headers
565
+ ? this.deserializeSensitiveValue(row.request_headers)
566
+ : undefined,
567
+ requestBody: row.request_body
568
+ ? this.deserializeSensitiveValue(row.request_body)
569
+ : undefined,
570
+ responseHeaders: row.response_headers
571
+ ? this.deserializeSensitiveValue(row.response_headers)
572
+ : undefined,
573
+ responseBody: row.response_body
574
+ ? this.deserializeSensitiveValue(row.response_body)
575
+ : undefined,
576
+ };
577
+ }
578
+ close() {
579
+ this.db.close();
580
+ }
581
+ }
582
+ exports.default = SQLiteStorage;
583
+ //# sourceMappingURL=sqlite-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../../../src/storage/sqlite-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { IDevToolsSpanType } from "./span";
2
+ export interface IDashboardRequest {
3
+ id: string;
4
+ method: string;
5
+ path: string;
6
+ route?: string;
7
+ statusCode?: number;
8
+ durationMs?: number;
9
+ startedAt: number;
10
+ hasError: boolean;
11
+ }
12
+ export interface IDevToolsResponse {
13
+ statusCode?: number;
14
+ headers: Record<string, string | string[]>;
15
+ body?: unknown;
16
+ }
17
+ export interface IDevToolsError {
18
+ spanId: string;
19
+ spanName: string;
20
+ spanType: IDevToolsSpanType;
21
+ type?: string;
22
+ message?: string;
23
+ stack?: string;
24
+ startedAt: number;
25
+ }
26
+ export interface ISession {
27
+ sessionHash: string;
28
+ username: string;
29
+ createdAt: number;
30
+ expiresAt: number;
31
+ }
32
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/types/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IAEX,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dashboard.js.map