@rudderjs/telescope 0.0.1 → 0.0.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/README.md +101 -27
- package/dist/api/routes.d.ts +10 -6
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +42 -54
- package/dist/api/routes.js.map +1 -1
- package/dist/batch-context.d.ts +19 -0
- package/dist/batch-context.d.ts.map +1 -0
- package/dist/batch-context.js +24 -0
- package/dist/batch-context.js.map +1 -0
- package/dist/collectors/ai.d.ts +13 -0
- package/dist/collectors/ai.d.ts.map +1 -0
- package/dist/collectors/ai.js +61 -0
- package/dist/collectors/ai.js.map +1 -0
- package/dist/collectors/broadcast.d.ts +10 -0
- package/dist/collectors/broadcast.d.ts.map +1 -0
- package/dist/collectors/broadcast.js +46 -0
- package/dist/collectors/broadcast.js.map +1 -0
- package/dist/collectors/cache.d.ts.map +1 -1
- package/dist/collectors/cache.js +5 -4
- package/dist/collectors/cache.js.map +1 -1
- package/dist/collectors/command.d.ts +21 -0
- package/dist/collectors/command.d.ts.map +1 -0
- package/dist/collectors/command.js +55 -0
- package/dist/collectors/command.js.map +1 -0
- package/dist/collectors/dump.d.ts +17 -0
- package/dist/collectors/dump.d.ts.map +1 -0
- package/dist/collectors/dump.js +37 -0
- package/dist/collectors/dump.js.map +1 -0
- package/dist/collectors/event.d.ts.map +1 -1
- package/dist/collectors/event.js +2 -1
- package/dist/collectors/event.js.map +1 -1
- package/dist/collectors/exception.d.ts +1 -0
- package/dist/collectors/exception.d.ts.map +1 -1
- package/dist/collectors/exception.js +23 -4
- package/dist/collectors/exception.js.map +1 -1
- package/dist/collectors/gate.d.ts +18 -0
- package/dist/collectors/gate.d.ts.map +1 -0
- package/dist/collectors/gate.js +49 -0
- package/dist/collectors/gate.js.map +1 -0
- package/dist/collectors/http.d.ts +21 -0
- package/dist/collectors/http.d.ts.map +1 -0
- package/dist/collectors/http.js +64 -0
- package/dist/collectors/http.js.map +1 -0
- package/dist/collectors/job.d.ts.map +1 -1
- package/dist/collectors/job.js +3 -2
- package/dist/collectors/job.js.map +1 -1
- package/dist/collectors/live.d.ts +13 -0
- package/dist/collectors/live.d.ts.map +1 -0
- package/dist/collectors/live.js +60 -0
- package/dist/collectors/live.js.map +1 -0
- package/dist/collectors/log.d.ts.map +1 -1
- package/dist/collectors/log.js +2 -1
- package/dist/collectors/log.js.map +1 -1
- package/dist/collectors/mail.d.ts.map +1 -1
- package/dist/collectors/mail.js +2 -1
- package/dist/collectors/mail.js.map +1 -1
- package/dist/collectors/mcp.d.ts +14 -0
- package/dist/collectors/mcp.d.ts.map +1 -0
- package/dist/collectors/mcp.js +49 -0
- package/dist/collectors/mcp.js.map +1 -0
- package/dist/collectors/model.d.ts +6 -0
- package/dist/collectors/model.d.ts.map +1 -1
- package/dist/collectors/model.js +44 -1
- package/dist/collectors/model.js.map +1 -1
- package/dist/collectors/notification.d.ts.map +1 -1
- package/dist/collectors/notification.js +2 -1
- package/dist/collectors/notification.js.map +1 -1
- package/dist/collectors/query.d.ts.map +1 -1
- package/dist/collectors/query.js +5 -3
- package/dist/collectors/query.js.map +1 -1
- package/dist/collectors/request.d.ts +2 -1
- package/dist/collectors/request.d.ts.map +1 -1
- package/dist/collectors/request.js +78 -4
- package/dist/collectors/request.js.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +152 -95
- package/dist/index.js.map +1 -1
- package/dist/redact.d.ts +25 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +55 -0
- package/dist/redact.js.map +1 -0
- package/dist/routes.d.ts +22 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +105 -0
- package/dist/routes.js.map +1 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +13 -0
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +32 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -1
- package/dist/views/vanilla/Dashboard.d.ts +10 -0
- package/dist/views/vanilla/Dashboard.d.ts.map +1 -0
- package/dist/views/vanilla/Dashboard.js +48 -0
- package/dist/views/vanilla/Dashboard.js.map +1 -0
- package/dist/views/vanilla/EntryList.d.ts +29 -0
- package/dist/views/vanilla/EntryList.d.ts.map +1 -0
- package/dist/views/vanilla/EntryList.js +172 -0
- package/dist/views/vanilla/EntryList.js.map +1 -0
- package/dist/views/vanilla/Layout.d.ts +25 -0
- package/dist/views/vanilla/Layout.d.ts.map +1 -0
- package/dist/views/vanilla/Layout.js +225 -0
- package/dist/views/vanilla/Layout.js.map +1 -0
- package/dist/views/vanilla/_html.d.ts +27 -0
- package/dist/views/vanilla/_html.d.ts.map +1 -0
- package/dist/views/vanilla/_html.js +55 -0
- package/dist/views/vanilla/_html.js.map +1 -0
- package/dist/views/vanilla/columns.d.ts +20 -0
- package/dist/views/vanilla/columns.d.ts.map +1 -0
- package/dist/views/vanilla/columns.js +181 -0
- package/dist/views/vanilla/columns.js.map +1 -0
- package/dist/views/vanilla/details/Batch.d.ts +14 -0
- package/dist/views/vanilla/details/Batch.d.ts.map +1 -0
- package/dist/views/vanilla/details/Batch.js +120 -0
- package/dist/views/vanilla/details/Batch.js.map +1 -0
- package/dist/views/vanilla/details/Layout.d.ts +21 -0
- package/dist/views/vanilla/details/Layout.d.ts.map +1 -0
- package/dist/views/vanilla/details/Layout.js +163 -0
- package/dist/views/vanilla/details/Layout.js.map +1 -0
- package/dist/views/vanilla/details/NotFound.d.ts +8 -0
- package/dist/views/vanilla/details/NotFound.d.ts.map +1 -0
- package/dist/views/vanilla/details/NotFound.js +20 -0
- package/dist/views/vanilla/details/NotFound.js.map +1 -0
- package/dist/views/vanilla/details/index.d.ts +5 -0
- package/dist/views/vanilla/details/index.d.ts.map +1 -0
- package/dist/views/vanilla/details/index.js +5 -0
- package/dist/views/vanilla/details/index.js.map +1 -0
- package/dist/views/vanilla/details/sections.d.ts +46 -0
- package/dist/views/vanilla/details/sections.d.ts.map +1 -0
- package/dist/views/vanilla/details/sections.js +145 -0
- package/dist/views/vanilla/details/sections.js.map +1 -0
- package/dist/views/vanilla/details/views.d.ts +15 -0
- package/dist/views/vanilla/details/views.d.ts.map +1 -0
- package/dist/views/vanilla/details/views.js +534 -0
- package/dist/views/vanilla/details/views.js.map +1 -0
- package/dist/views/vanilla/index.d.ts +5 -0
- package/dist/views/vanilla/index.d.ts.map +1 -0
- package/dist/views/vanilla/index.js +5 -0
- package/dist/views/vanilla/index.js.map +1 -0
- package/package.json +53 -13
- package/dist/ui/layout.d.ts +0 -11
- package/dist/ui/layout.d.ts.map +0 -1
- package/dist/ui/layout.js +0 -69
- package/dist/ui/layout.js.map +0 -1
- package/dist/ui/pages.d.ts +0 -21
- package/dist/ui/pages.d.ts.map +0 -1
- package/dist/ui/pages.js +0 -225
- package/dist/ui/pages.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ServiceProvider } from '@rudderjs/core';
|
|
1
|
+
import { ServiceProvider, config } from '@rudderjs/core';
|
|
2
2
|
import { MemoryStorage, SqliteStorage } from './storage.js';
|
|
3
3
|
import { RequestCollector } from './collectors/request.js';
|
|
4
4
|
import { QueryCollector } from './collectors/query.js';
|
|
@@ -11,7 +11,15 @@ import { EventCollector } from './collectors/event.js';
|
|
|
11
11
|
import { CacheCollector } from './collectors/cache.js';
|
|
12
12
|
import { ScheduleCollector } from './collectors/schedule.js';
|
|
13
13
|
import { ModelCollector } from './collectors/model.js';
|
|
14
|
-
import {
|
|
14
|
+
import { CommandCollector } from './collectors/command.js';
|
|
15
|
+
import { BroadcastCollector } from './collectors/broadcast.js';
|
|
16
|
+
import { LiveCollector } from './collectors/live.js';
|
|
17
|
+
import { HttpCollector } from './collectors/http.js';
|
|
18
|
+
import { GateCollector } from './collectors/gate.js';
|
|
19
|
+
import { DumpCollector } from './collectors/dump.js';
|
|
20
|
+
import { AiCollector } from './collectors/ai.js';
|
|
21
|
+
import { McpCollector } from './collectors/mcp.js';
|
|
22
|
+
import { registerTelescopeRoutes } from './routes.js';
|
|
15
23
|
import { defaultConfig } from './types.js';
|
|
16
24
|
export { MemoryStorage, SqliteStorage, createEntry } from './storage.js';
|
|
17
25
|
export { RequestCollector } from './collectors/request.js';
|
|
@@ -25,13 +33,26 @@ export { EventCollector } from './collectors/event.js';
|
|
|
25
33
|
export { CacheCollector } from './collectors/cache.js';
|
|
26
34
|
export { ScheduleCollector } from './collectors/schedule.js';
|
|
27
35
|
export { ModelCollector } from './collectors/model.js';
|
|
36
|
+
export { CommandCollector } from './collectors/command.js';
|
|
37
|
+
export { BroadcastCollector } from './collectors/broadcast.js';
|
|
38
|
+
export { LiveCollector } from './collectors/live.js';
|
|
39
|
+
export { HttpCollector } from './collectors/http.js';
|
|
40
|
+
export { GateCollector } from './collectors/gate.js';
|
|
41
|
+
export { DumpCollector } from './collectors/dump.js';
|
|
42
|
+
export { AiCollector } from './collectors/ai.js';
|
|
43
|
+
export { McpCollector } from './collectors/mcp.js';
|
|
28
44
|
// ─── Telescope Registry ────────────────────────────────────
|
|
45
|
+
const _g = globalThis;
|
|
46
|
+
const _recKey = '__rudderjs_telescope_recording__';
|
|
29
47
|
export class TelescopeRegistry {
|
|
30
48
|
static storage = null;
|
|
31
49
|
static set(storage) { this.storage = storage; }
|
|
32
50
|
static get() { return this.storage; }
|
|
33
51
|
/** @internal — clears the registered storage. Used for testing. */
|
|
34
52
|
static reset() { this.storage = null; }
|
|
53
|
+
static get recording() { return _g[_recKey] ?? true; }
|
|
54
|
+
static set recording(v) { _g[_recKey] = v; }
|
|
55
|
+
static toggleRecording() { const v = !this.recording; _g[_recKey] = v; return v; }
|
|
35
56
|
}
|
|
36
57
|
// ─── Telescope Facade ──────────────────────────────────────
|
|
37
58
|
export class Telescope {
|
|
@@ -54,6 +75,8 @@ export class Telescope {
|
|
|
54
75
|
return this.store().prune(type);
|
|
55
76
|
}
|
|
56
77
|
static record(entry) {
|
|
78
|
+
if (!TelescopeRegistry.recording)
|
|
79
|
+
return;
|
|
57
80
|
return this.store().store(entry);
|
|
58
81
|
}
|
|
59
82
|
}
|
|
@@ -68,103 +91,137 @@ export class Telescope {
|
|
|
68
91
|
* import { telescope } from '@rudderjs/telescope'
|
|
69
92
|
* export default [..., telescope(configs.telescope), ...]
|
|
70
93
|
*/
|
|
71
|
-
export
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
export class TelescopeProvider extends ServiceProvider {
|
|
95
|
+
register() {
|
|
96
|
+
this.publishes({
|
|
97
|
+
from: new URL('../../boost/guidelines.md', import.meta.url).pathname,
|
|
98
|
+
to: 'boost',
|
|
99
|
+
tag: 'telescope-boost',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async boot() {
|
|
103
|
+
const cfg = config('telescope', {});
|
|
104
|
+
const merged = { ...defaultConfig, ...cfg };
|
|
105
|
+
// Strip undefined values introduced by exactOptionalPropertyTypes spread
|
|
106
|
+
const resolved = {
|
|
107
|
+
enabled: merged.enabled ?? defaultConfig.enabled,
|
|
108
|
+
path: merged.path ?? defaultConfig.path,
|
|
109
|
+
storage: merged.storage ?? defaultConfig.storage,
|
|
110
|
+
sqlitePath: merged.sqlitePath ?? defaultConfig.sqlitePath,
|
|
111
|
+
maxEntries: merged.maxEntries ?? defaultConfig.maxEntries,
|
|
112
|
+
pruneAfterHours: merged.pruneAfterHours ?? defaultConfig.pruneAfterHours,
|
|
113
|
+
recordRequests: merged.recordRequests ?? defaultConfig.recordRequests,
|
|
114
|
+
recordQueries: merged.recordQueries ?? defaultConfig.recordQueries,
|
|
115
|
+
recordJobs: merged.recordJobs ?? defaultConfig.recordJobs,
|
|
116
|
+
recordExceptions: merged.recordExceptions ?? defaultConfig.recordExceptions,
|
|
117
|
+
recordLogs: merged.recordLogs ?? defaultConfig.recordLogs,
|
|
118
|
+
recordMail: merged.recordMail ?? defaultConfig.recordMail,
|
|
119
|
+
recordNotifications: merged.recordNotifications ?? defaultConfig.recordNotifications,
|
|
120
|
+
recordEvents: merged.recordEvents ?? defaultConfig.recordEvents,
|
|
121
|
+
recordCache: merged.recordCache ?? defaultConfig.recordCache,
|
|
122
|
+
recordSchedule: merged.recordSchedule ?? defaultConfig.recordSchedule,
|
|
123
|
+
recordModels: merged.recordModels ?? defaultConfig.recordModels,
|
|
124
|
+
recordCommands: merged.recordCommands ?? defaultConfig.recordCommands,
|
|
125
|
+
recordBroadcasts: merged.recordBroadcasts ?? defaultConfig.recordBroadcasts,
|
|
126
|
+
recordLive: merged.recordLive ?? defaultConfig.recordLive,
|
|
127
|
+
recordHttp: merged.recordHttp ?? defaultConfig.recordHttp,
|
|
128
|
+
recordGate: merged.recordGate ?? defaultConfig.recordGate,
|
|
129
|
+
recordDumps: merged.recordDumps ?? defaultConfig.recordDumps,
|
|
130
|
+
recordAi: merged.recordAi ?? defaultConfig.recordAi,
|
|
131
|
+
recordMcp: merged.recordMcp ?? defaultConfig.recordMcp,
|
|
132
|
+
liveAwarenessSampleMs: merged.liveAwarenessSampleMs ?? defaultConfig.liveAwarenessSampleMs,
|
|
133
|
+
ignoreRequests: merged.ignoreRequests ?? defaultConfig.ignoreRequests,
|
|
134
|
+
slowQueryThreshold: merged.slowQueryThreshold ?? defaultConfig.slowQueryThreshold,
|
|
135
|
+
slowAiThreshold: merged.slowAiThreshold ?? defaultConfig.slowAiThreshold,
|
|
136
|
+
slowMcpThreshold: merged.slowMcpThreshold ?? defaultConfig.slowMcpThreshold,
|
|
137
|
+
hideRequestHeaders: merged.hideRequestHeaders ?? defaultConfig.hideRequestHeaders,
|
|
138
|
+
hideRequestFields: merged.hideRequestFields ?? defaultConfig.hideRequestFields,
|
|
139
|
+
auth: merged.auth ?? defaultConfig.auth,
|
|
140
|
+
};
|
|
141
|
+
if (!resolved.enabled)
|
|
142
|
+
return;
|
|
143
|
+
// ── Create storage ────────────────────────────────────
|
|
144
|
+
let storage;
|
|
145
|
+
if (resolved.storage === 'sqlite') {
|
|
146
|
+
storage = new SqliteStorage(resolved.sqlitePath);
|
|
103
147
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
collectors.push(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
else {
|
|
149
|
+
storage = new MemoryStorage(resolved.maxEntries);
|
|
150
|
+
}
|
|
151
|
+
TelescopeRegistry.set(storage);
|
|
152
|
+
this.app.instance('telescope', storage);
|
|
153
|
+
// ── Auto-prune on interval ────────────────────────────
|
|
154
|
+
const pruneHours = resolved.pruneAfterHours;
|
|
155
|
+
if (pruneHours > 0) {
|
|
156
|
+
const interval = Math.min(pruneHours * 60 * 60 * 1000, 3_600_000);
|
|
157
|
+
const timer = setInterval(() => {
|
|
158
|
+
const cutoff = new Date(Date.now() - pruneHours * 60 * 60 * 1000);
|
|
159
|
+
storage.pruneOlderThan(cutoff);
|
|
160
|
+
}, interval);
|
|
161
|
+
timer.unref();
|
|
162
|
+
}
|
|
163
|
+
// ── Register collectors ───────────────────────────────
|
|
164
|
+
const collectors = [];
|
|
165
|
+
const requestCollector = new RequestCollector(storage, resolved);
|
|
166
|
+
collectors.push(requestCollector);
|
|
167
|
+
if (resolved.recordQueries)
|
|
168
|
+
collectors.push(new QueryCollector(storage, resolved));
|
|
169
|
+
if (resolved.recordJobs)
|
|
170
|
+
collectors.push(new JobCollector(storage));
|
|
171
|
+
if (resolved.recordExceptions)
|
|
172
|
+
collectors.push(new ExceptionCollector(storage));
|
|
173
|
+
if (resolved.recordLogs)
|
|
174
|
+
collectors.push(new LogCollector(storage));
|
|
175
|
+
if (resolved.recordMail)
|
|
176
|
+
collectors.push(new MailCollector(storage));
|
|
177
|
+
if (resolved.recordNotifications)
|
|
178
|
+
collectors.push(new NotificationCollector(storage));
|
|
179
|
+
if (resolved.recordEvents)
|
|
180
|
+
collectors.push(new EventCollector(storage));
|
|
181
|
+
if (resolved.recordCache)
|
|
182
|
+
collectors.push(new CacheCollector(storage));
|
|
183
|
+
if (resolved.recordSchedule)
|
|
184
|
+
collectors.push(new ScheduleCollector(storage));
|
|
185
|
+
if (resolved.recordModels)
|
|
186
|
+
collectors.push(new ModelCollector(storage));
|
|
187
|
+
if (resolved.recordCommands)
|
|
188
|
+
collectors.push(new CommandCollector(storage));
|
|
189
|
+
if (resolved.recordBroadcasts)
|
|
190
|
+
collectors.push(new BroadcastCollector(storage));
|
|
191
|
+
if (resolved.recordLive)
|
|
192
|
+
collectors.push(new LiveCollector(storage, resolved.liveAwarenessSampleMs));
|
|
193
|
+
if (resolved.recordHttp)
|
|
194
|
+
collectors.push(new HttpCollector(storage, resolved.hideRequestHeaders));
|
|
195
|
+
if (resolved.recordGate)
|
|
196
|
+
collectors.push(new GateCollector(storage));
|
|
197
|
+
if (resolved.recordDumps)
|
|
198
|
+
collectors.push(new DumpCollector(storage));
|
|
199
|
+
if (resolved.recordAi)
|
|
200
|
+
collectors.push(new AiCollector(storage, resolved));
|
|
201
|
+
if (resolved.recordMcp)
|
|
202
|
+
collectors.push(new McpCollector(storage, resolved));
|
|
203
|
+
for (const collector of collectors) {
|
|
204
|
+
await collector.register();
|
|
205
|
+
}
|
|
206
|
+
// ── Register request middleware ───────────────────────
|
|
207
|
+
if (resolved.recordRequests) {
|
|
208
|
+
try {
|
|
209
|
+
const { router } = await import('@rudderjs/router');
|
|
210
|
+
router.use(requestCollector.middleware());
|
|
153
211
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
try {
|
|
157
|
-
const { router } = await import('@rudderjs/router');
|
|
158
|
-
router.use(requestCollector.middleware());
|
|
159
|
-
}
|
|
160
|
-
catch {
|
|
161
|
-
// @rudderjs/router not available — request recording disabled
|
|
162
|
-
}
|
|
212
|
+
catch {
|
|
213
|
+
// @rudderjs/router not available — request recording disabled
|
|
163
214
|
}
|
|
164
|
-
// ── Register API routes ───────────────────────────────
|
|
165
|
-
await registerRoutes(storage, resolved);
|
|
166
215
|
}
|
|
216
|
+
// ── Register UI + API routes ──────────────────────────
|
|
217
|
+
const routeOpts = {};
|
|
218
|
+
if (resolved.path)
|
|
219
|
+
routeOpts.path = resolved.path;
|
|
220
|
+
if (resolved.auth)
|
|
221
|
+
routeOpts.auth = resolved.auth;
|
|
222
|
+
await registerTelescopeRoutes(storage, routeOpts);
|
|
167
223
|
}
|
|
168
|
-
return TelescopeServiceProvider;
|
|
169
224
|
}
|
|
225
|
+
// ─── Re-exports ────────────────────────────────────────────
|
|
226
|
+
export { registerTelescopeRoutes } from './routes.js';
|
|
170
227
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,aAAa,EAAsH,MAAM,YAAY,CAAA;AAK9J,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,8DAA8D;AAE9D,MAAM,EAAE,GAAG,UAAqC,CAAA;AAChD,MAAM,OAAO,GAAG,kCAAkC,CAAA;AAElD,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAC,OAAO,GAA4B,IAAI,CAAA;IAEtD,MAAM,CAAC,GAAG,CAAC,OAAyB,IAAU,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,KAAqC,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;IACpE,mEAAmE;IACnE,MAAM,CAAC,KAAK,KAAmC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC;IAEpE,MAAM,KAAK,SAAS,KAAoB,OAAQ,EAAE,CAAC,OAAO,CAAyB,IAAI,IAAI,CAAA,CAAC,CAAC;IAC7F,MAAM,KAAK,SAAS,CAAC,CAAU,IAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;IACzD,MAAM,CAAC,eAAe,KAAkB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;;AAGhG,8DAA8D;AAE9D,MAAM,OAAO,SAAS;IACZ,MAAM,CAAC,KAAK;QAClB,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAA;QACjC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAA;QACpG,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,UAAuB,EAAE;QACnC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAgB;QAC3B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAgB;QAC3B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAqB;QACjC,IAAI,CAAC,iBAAiB,CAAC,SAAS;YAAE,OAAM;QACxC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;CACF;AAED,8DAA8D;AAE9D;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;YACpE,EAAE,EAAI,OAAO;YACb,GAAG,EAAG,iBAAiB;SACxB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,MAAM,CAAkB,WAAW,EAAE,EAAE,CAAC,CAAA;QACpD,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,GAAG,EAAE,CAAA;QAC7C,yEAAyE;QACzE,MAAM,QAAQ,GAAG;YACf,OAAO,EAAc,MAAM,CAAC,OAAO,IAAgB,aAAa,CAAC,OAAO;YACxE,IAAI,EAAiB,MAAM,CAAC,IAAI,IAAmB,aAAa,CAAC,IAAI;YACrE,OAAO,EAAc,MAAM,CAAC,OAAO,IAAgB,aAAa,CAAC,OAAO;YACxE,UAAU,EAAW,MAAM,CAAC,UAAU,IAAa,aAAa,CAAC,UAAU;YAC3E,UAAU,EAAW,MAAM,CAAC,UAAU,IAAa,aAAa,CAAC,UAAU;YAC3E,eAAe,EAAM,MAAM,CAAC,eAAe,IAAQ,aAAa,CAAC,eAAe;YAChF,cAAc,EAAO,MAAM,CAAC,cAAc,IAAS,aAAa,CAAC,cAAc;YAC/E,aAAa,EAAQ,MAAM,CAAC,aAAa,IAAU,aAAa,CAAC,aAAa;YAC9E,UAAU,EAAW,MAAM,CAAC,UAAU,IAAc,aAAa,CAAC,UAAU;YAC5E,gBAAgB,EAAK,MAAM,CAAC,gBAAgB,IAAO,aAAa,CAAC,gBAAgB;YACjF,UAAU,EAAW,MAAM,CAAC,UAAU,IAAc,aAAa,CAAC,UAAU;YAC5E,UAAU,EAAW,MAAM,CAAC,UAAU,IAAc,aAAa,CAAC,UAAU;YAC5E,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,aAAa,CAAC,mBAAmB;YACpF,YAAY,EAAS,MAAM,CAAC,YAAY,IAAW,aAAa,CAAC,YAAY;YAC7E,WAAW,EAAU,MAAM,CAAC,WAAW,IAAY,aAAa,CAAC,WAAW;YAC5E,cAAc,EAAO,MAAM,CAAC,cAAc,IAAS,aAAa,CAAC,cAAc;YAC/E,YAAY,EAAS,MAAM,CAAC,YAAY,IAAW,aAAa,CAAC,YAAY;YAC7E,cAAc,EAAO,MAAM,CAAC,cAAc,IAAS,aAAa,CAAC,cAAc;YAC/E,gBAAgB,EAAK,MAAM,CAAC,gBAAgB,IAAO,aAAa,CAAC,gBAAgB;YACjF,UAAU,EAAW,MAAM,CAAC,UAAU,IAAa,aAAa,CAAC,UAAU;YAC3E,UAAU,EAAW,MAAM,CAAC,UAAU,IAAa,aAAa,CAAC,UAAU;YAC3E,UAAU,EAAW,MAAM,CAAC,UAAU,IAAa,aAAa,CAAC,UAAU;YAC3E,WAAW,EAAU,MAAM,CAAC,WAAW,IAAY,aAAa,CAAC,WAAW;YAC5E,QAAQ,EAAa,MAAM,CAAC,QAAQ,IAAe,aAAa,CAAC,QAAQ;YACzE,SAAS,EAAY,MAAM,CAAC,SAAS,IAAc,aAAa,CAAC,SAAS;YAC1E,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,aAAa,CAAC,qBAAqB;YAC1F,cAAc,EAAO,MAAM,CAAC,cAAc,IAAS,aAAa,CAAC,cAAc;YAC/E,kBAAkB,EAAG,MAAM,CAAC,kBAAkB,IAAK,aAAa,CAAC,kBAAkB;YACnF,eAAe,EAAM,MAAM,CAAC,eAAe,IAAQ,aAAa,CAAC,eAAe;YAChF,gBAAgB,EAAK,MAAM,CAAC,gBAAgB,IAAO,aAAa,CAAC,gBAAgB;YACjF,kBAAkB,EAAG,MAAM,CAAC,kBAAkB,IAAK,aAAa,CAAC,kBAAkB;YACnF,iBAAiB,EAAI,MAAM,CAAC,iBAAiB,IAAM,aAAa,CAAC,iBAAiB;YAClF,IAAI,EAAiB,MAAM,CAAC,IAAI,IAAmB,aAAa,CAAC,IAAI;SACpE,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAM;QAE3B,yDAAyD;QACzD,IAAI,OAAyB,CAAA;QAE7B,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAClD,CAAC;QAED,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAEvC,yDAAyD;QACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAyB,CAAA;QACrD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,CAAC,CAAA;YACjE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;gBACjE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAChC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACZ,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;QAED,yDAAyD;QACzD,MAAM,UAAU,GAAgB,EAAE,CAAA;QAElC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAChE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAEjC,IAAI,QAAQ,CAAC,aAAa;YAAS,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;QACzF,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7E,IAAI,QAAQ,CAAC,gBAAgB;YAAM,UAAU,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAA;QACnF,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7E,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QAC9E,IAAI,QAAQ,CAAC,mBAAmB;YAAG,UAAU,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;QACtF,IAAI,QAAQ,CAAC,YAAY;YAAU,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/E,IAAI,QAAQ,CAAC,WAAW;YAAW,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/E,IAAI,QAAQ,CAAC,cAAc;YAAQ,UAAU,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;QAClF,IAAI,QAAQ,CAAC,YAAY;YAAU,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/E,IAAI,QAAQ,CAAC,cAAc;YAAQ,UAAU,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;QACjF,IAAI,QAAQ,CAAC,gBAAgB;YAAM,UAAU,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAA;QACnF,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA;QAC9G,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC3G,IAAI,QAAQ,CAAC,UAAU;YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QAC9E,IAAI,QAAQ,CAAC,WAAW;YAAW,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QAC9E,IAAI,QAAQ,CAAC,QAAQ;YAAc,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;QACtF,IAAI,QAAQ,CAAC,SAAS;YAAa,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;QAEvF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAA;QAC5B,CAAC;QAED,yDAAyD;QACzD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;gBACnD,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAA;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;QACH,CAAC;QAEH,yDAAyD;QACzD,MAAM,SAAS,GAAkD,EAAE,CAAA;QACnE,IAAI,QAAQ,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACjD,IAAI,QAAQ,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACjD,MAAM,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC;CACF;AAED,8DAA8D;AAE9D,OAAO,EAAE,uBAAuB,EAAuC,MAAM,aAAa,CAAA"}
|
package/dist/redact.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive-data redaction helpers used by collectors before storing
|
|
3
|
+
* entries. Redaction happens at COLLECTION time, not display time, so
|
|
4
|
+
* sensitive values never reach the storage backend (memory, sqlite,
|
|
5
|
+
* future Postgres, etc.) — they can't leak via export, share-link, or
|
|
6
|
+
* a future MCP integration.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Returns a copy of `headers` with values for any header in `hideList`
|
|
10
|
+
* (case-insensitive) replaced with `[REDACTED]`. Header keys are
|
|
11
|
+
* preserved as written by the runtime so the dashboard still shows
|
|
12
|
+
* "Authorization: [REDACTED]" rather than dropping the row entirely.
|
|
13
|
+
*/
|
|
14
|
+
export declare function redactHeaders(headers: Record<string, unknown> | undefined, hideList: string[]): Record<string, unknown> | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Walks an arbitrary value and returns a copy with any object key in
|
|
17
|
+
* `hideList` (case-insensitive) replaced with `[REDACTED]`. Recurses
|
|
18
|
+
* into objects and arrays. Primitives, null, undefined are returned
|
|
19
|
+
* unchanged. Dates and other built-ins pass through.
|
|
20
|
+
*
|
|
21
|
+
* Used for request bodies — `{ password: "abc", user: { token: "xyz" }}`
|
|
22
|
+
* becomes `{ password: "[REDACTED]", user: { token: "[REDACTED]" }}`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function redactFields(value: unknown, hideList: string[]): unknown;
|
|
25
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAQrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAIxE"}
|
package/dist/redact.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive-data redaction helpers used by collectors before storing
|
|
3
|
+
* entries. Redaction happens at COLLECTION time, not display time, so
|
|
4
|
+
* sensitive values never reach the storage backend (memory, sqlite,
|
|
5
|
+
* future Postgres, etc.) — they can't leak via export, share-link, or
|
|
6
|
+
* a future MCP integration.
|
|
7
|
+
*/
|
|
8
|
+
const REDACTED = '[REDACTED]';
|
|
9
|
+
/**
|
|
10
|
+
* Returns a copy of `headers` with values for any header in `hideList`
|
|
11
|
+
* (case-insensitive) replaced with `[REDACTED]`. Header keys are
|
|
12
|
+
* preserved as written by the runtime so the dashboard still shows
|
|
13
|
+
* "Authorization: [REDACTED]" rather than dropping the row entirely.
|
|
14
|
+
*/
|
|
15
|
+
export function redactHeaders(headers, hideList) {
|
|
16
|
+
if (!headers || hideList.length === 0)
|
|
17
|
+
return headers;
|
|
18
|
+
const lowerHide = new Set(hideList.map(h => h.toLowerCase()));
|
|
19
|
+
const out = {};
|
|
20
|
+
for (const [k, v] of Object.entries(headers)) {
|
|
21
|
+
out[k] = lowerHide.has(k.toLowerCase()) ? REDACTED : v;
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Walks an arbitrary value and returns a copy with any object key in
|
|
27
|
+
* `hideList` (case-insensitive) replaced with `[REDACTED]`. Recurses
|
|
28
|
+
* into objects and arrays. Primitives, null, undefined are returned
|
|
29
|
+
* unchanged. Dates and other built-ins pass through.
|
|
30
|
+
*
|
|
31
|
+
* Used for request bodies — `{ password: "abc", user: { token: "xyz" }}`
|
|
32
|
+
* becomes `{ password: "[REDACTED]", user: { token: "[REDACTED]" }}`.
|
|
33
|
+
*/
|
|
34
|
+
export function redactFields(value, hideList) {
|
|
35
|
+
if (hideList.length === 0)
|
|
36
|
+
return value;
|
|
37
|
+
const lowerHide = new Set(hideList.map(h => h.toLowerCase()));
|
|
38
|
+
return walk(value, lowerHide);
|
|
39
|
+
}
|
|
40
|
+
function walk(value, hide) {
|
|
41
|
+
if (value === null || value === undefined)
|
|
42
|
+
return value;
|
|
43
|
+
if (Array.isArray(value))
|
|
44
|
+
return value.map(v => walk(v, hide));
|
|
45
|
+
if (typeof value !== 'object')
|
|
46
|
+
return value;
|
|
47
|
+
if (value instanceof Date)
|
|
48
|
+
return value;
|
|
49
|
+
const out = {};
|
|
50
|
+
for (const [k, v] of Object.entries(value)) {
|
|
51
|
+
out[k] = hide.has(k.toLowerCase()) ? REDACTED : walk(v, hide);
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,QAAQ,GAAG,YAAY,CAAA;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA4C,EAC5C,QAAkB;IAElB,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC7D,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,QAAkB;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC7D,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,IAAiB;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAA;IAEvC,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/dist/routes.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from '@rudderjs/contracts';
|
|
2
|
+
import type { TelescopeStorage, TelescopeConfig } from './types.js';
|
|
3
|
+
export interface RegisterTelescopeRoutesOptions {
|
|
4
|
+
/** Path prefix for all telescope routes — default `/telescope` */
|
|
5
|
+
path?: string;
|
|
6
|
+
/** Auth gate — receives request, returns boolean. Same shape as TelescopeConfig.auth. */
|
|
7
|
+
auth?: TelescopeConfig['auth'];
|
|
8
|
+
/** Extra middleware to prepend to all routes */
|
|
9
|
+
middleware?: MiddlewareHandler[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Register all Telescope routes — UI pages, per-entry detail pages, batch
|
|
13
|
+
* groupings, API endpoints. Called from `TelescopeProvider.boot()` once
|
|
14
|
+
* the router peer is resolved.
|
|
15
|
+
*
|
|
16
|
+
* Mirrors the package-UI shape established by `@rudderjs/auth`'s
|
|
17
|
+
* `registerAuthRoutes()`. Package-internal pages live under
|
|
18
|
+
* `views/vanilla/`, route registration is centralised here, the API
|
|
19
|
+
* handler implementations live in `api/routes.ts`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerTelescopeRoutes(storage: TelescopeStorage, opts?: RegisterTelescopeRoutesOptions): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAa,MAAM,YAAY,CAAA;AAW9E,MAAM,WAAW,8BAA8B;IAC7C,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yFAAyF;IACzF,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,IAAI,GAAK,8BAAmC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAuHf"}
|
package/dist/routes.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Dashboard, EntryList, pages } from './views/vanilla/index.js';
|
|
2
|
+
import { DetailLayout, detailViews, NotFoundPage, BatchPage } from './views/vanilla/details/index.js';
|
|
3
|
+
import { listEntries, showEntry, overview, prune, listBatch, getRecording, toggleRecording, authMiddleware } from './api/routes.js';
|
|
4
|
+
const ENTRY_TYPES = [
|
|
5
|
+
'request', 'query', 'job', 'exception', 'log',
|
|
6
|
+
'mail', 'notification', 'event', 'cache', 'schedule', 'model', 'command', 'broadcast', 'live',
|
|
7
|
+
'http', 'gate', 'dump', 'ai', 'mcp',
|
|
8
|
+
];
|
|
9
|
+
/**
|
|
10
|
+
* Register all Telescope routes — UI pages, per-entry detail pages, batch
|
|
11
|
+
* groupings, API endpoints. Called from `TelescopeProvider.boot()` once
|
|
12
|
+
* the router peer is resolved.
|
|
13
|
+
*
|
|
14
|
+
* Mirrors the package-UI shape established by `@rudderjs/auth`'s
|
|
15
|
+
* `registerAuthRoutes()`. Package-internal pages live under
|
|
16
|
+
* `views/vanilla/`, route registration is centralised here, the API
|
|
17
|
+
* handler implementations live in `api/routes.ts`.
|
|
18
|
+
*/
|
|
19
|
+
export async function registerTelescopeRoutes(storage, opts = {}) {
|
|
20
|
+
let router;
|
|
21
|
+
try {
|
|
22
|
+
router = (await import('@rudderjs/router')).router;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return; // @rudderjs/router not installed — telescope routes disabled
|
|
26
|
+
}
|
|
27
|
+
const basePath = `/${(opts.path ?? 'telescope').replace(/^\/+/, '')}`;
|
|
28
|
+
const apiPrefix = `${basePath}/api`;
|
|
29
|
+
const middleware = [
|
|
30
|
+
...(opts.middleware ?? []),
|
|
31
|
+
...(opts.auth ? [authMiddleware({ auth: opts.auth })] : []),
|
|
32
|
+
];
|
|
33
|
+
const html = (_req, res, content) => {
|
|
34
|
+
res.header('Content-Type', 'text/html').send(content);
|
|
35
|
+
};
|
|
36
|
+
// ── Dashboard ─────────────────────────────────────────────
|
|
37
|
+
router.get(basePath, (r, s) => html(r, s, Dashboard({ basePath, apiPrefix })), middleware);
|
|
38
|
+
// ── List + detail pages per watcher ──────────────────────
|
|
39
|
+
for (const [pageKey, config] of Object.entries(pages)) {
|
|
40
|
+
// List
|
|
41
|
+
router.get(`${basePath}/${pageKey}`, (r, s) => html(r, s, EntryList({
|
|
42
|
+
basePath,
|
|
43
|
+
apiPrefix,
|
|
44
|
+
type: config.type,
|
|
45
|
+
pageKey,
|
|
46
|
+
title: config.title,
|
|
47
|
+
columns: config.columns,
|
|
48
|
+
})), middleware);
|
|
49
|
+
// Detail — fetches the entry, dispatches to the watcher-specific view
|
|
50
|
+
router.get(`${basePath}/${pageKey}/:id`, async (req, res) => {
|
|
51
|
+
const id = req.params['id'] ?? '';
|
|
52
|
+
const entry = await storage.find(id);
|
|
53
|
+
if (!entry) {
|
|
54
|
+
res.status(404).header('Content-Type', 'text/html').send(NotFoundPage({ basePath, what: config.title.replace(/s$/, ''), id }));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const viewFn = detailViews[entry.type];
|
|
58
|
+
if (!viewFn) {
|
|
59
|
+
res.status(500).header('Content-Type', 'text/html').send(NotFoundPage({ basePath, what: 'Detail view', id: entry.type }));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Fetch related entries from the same batch (queries, cache, events, etc.)
|
|
63
|
+
let relatedEntries = [];
|
|
64
|
+
if (entry.batchId) {
|
|
65
|
+
const all = await storage.list({ batchId: entry.batchId, perPage: 200 });
|
|
66
|
+
relatedEntries = all.filter(e => e.id !== entry.id);
|
|
67
|
+
}
|
|
68
|
+
res.header('Content-Type', 'text/html').send(DetailLayout({
|
|
69
|
+
basePath,
|
|
70
|
+
pageKey,
|
|
71
|
+
pageTitle: config.title,
|
|
72
|
+
entry,
|
|
73
|
+
body: viewFn(entry),
|
|
74
|
+
relatedEntries,
|
|
75
|
+
}));
|
|
76
|
+
}, middleware);
|
|
77
|
+
}
|
|
78
|
+
// ── Batch detail page ─────────────────────────────────────
|
|
79
|
+
router.get(`${basePath}/batches/:batchId`, async (req, res) => {
|
|
80
|
+
const batchId = req.params['batchId'] ?? '';
|
|
81
|
+
const entries = await storage.list({ batchId, perPage: 500 });
|
|
82
|
+
if (entries.length === 0) {
|
|
83
|
+
res.status(404).header('Content-Type', 'text/html').send(NotFoundPage({ basePath, what: 'Batch', id: batchId }));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
res.header('Content-Type', 'text/html').send(BatchPage({ basePath, batchId, entries }));
|
|
87
|
+
}, middleware);
|
|
88
|
+
// ── API: list + show per entry type ──────────────────────
|
|
89
|
+
for (const type of ENTRY_TYPES) {
|
|
90
|
+
const apiPath = type === 'query' ? 'queries'
|
|
91
|
+
: type === 'http' ? 'http'
|
|
92
|
+
: type === 'ai' ? 'ai'
|
|
93
|
+
: type === 'mcp' ? 'mcp'
|
|
94
|
+
: `${type}s`;
|
|
95
|
+
router.get(`${apiPrefix}/${apiPath}`, (req, res) => listEntries(storage, type, req, res), middleware);
|
|
96
|
+
router.get(`${apiPrefix}/${apiPath}/:id`, (req, res) => showEntry(storage, req, res), middleware);
|
|
97
|
+
}
|
|
98
|
+
// ── API: batches + overview + prune ──────────────────────
|
|
99
|
+
router.get(`${apiPrefix}/batches/:batchId`, (req, res) => listBatch(storage, req, res), middleware);
|
|
100
|
+
router.get(`${apiPrefix}/overview`, (_req, res) => overview(storage, res), middleware);
|
|
101
|
+
router.delete(`${apiPrefix}/entries`, (req, res) => prune(storage, req, res), middleware);
|
|
102
|
+
router.get(`${apiPrefix}/recording`, (_req, res) => getRecording(res), middleware);
|
|
103
|
+
router.patch(`${apiPrefix}/recording`, (_req, res) => toggleRecording(res), middleware);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAW1F,wBAAgB,WAAW,CACzB,IAAI,EAAK,SAAS,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE,cAAc,CAUhB;AAID,qBAAa,aAAc,YAAW,gBAAgB;IAGxC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,OAAO,CAAuB;gBAET,UAAU,GAAE,MAAa;IAEtD,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQlC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAK3C,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,EAAE;IA2B5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIvC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAK/B,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI;IAQ7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAIjC;AAID,qBAAa,aAAc,YAAW,gBAAgB;IAGxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,EAAE,CAAiD;gBAE9B,MAAM,EAAE,MAAM;IAE3C,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,OAAO;IAYf,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IASlC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAa3C,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,EAAE;IAwB5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAOvC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM;IAQ/B,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI;IAQ7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAGjC"}
|
package/dist/storage.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
const _g = globalThis;
|
|
3
|
+
const _recKey = '__rudderjs_telescope_recording__';
|
|
4
|
+
function isRecording() {
|
|
5
|
+
return _g[_recKey] ?? true;
|
|
6
|
+
}
|
|
2
7
|
// ─── Helpers ───────────────────────────────────────────────
|
|
3
8
|
export function createEntry(type, content, options) {
|
|
4
9
|
return {
|
|
@@ -19,12 +24,16 @@ export class MemoryStorage {
|
|
|
19
24
|
this.maxEntries = maxEntries;
|
|
20
25
|
}
|
|
21
26
|
store(entry) {
|
|
27
|
+
if (!isRecording())
|
|
28
|
+
return;
|
|
22
29
|
this.entries.unshift(entry);
|
|
23
30
|
if (this.entries.length > this.maxEntries) {
|
|
24
31
|
this.entries.length = this.maxEntries;
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
34
|
storeBatch(entries) {
|
|
35
|
+
if (!isRecording())
|
|
36
|
+
return;
|
|
28
37
|
for (const entry of entries)
|
|
29
38
|
this.store(entry);
|
|
30
39
|
}
|
|
@@ -129,11 +138,15 @@ export class SqliteStorage {
|
|
|
129
138
|
};
|
|
130
139
|
}
|
|
131
140
|
store(entry) {
|
|
141
|
+
if (!isRecording())
|
|
142
|
+
return;
|
|
132
143
|
const row = this.toRow(entry);
|
|
133
144
|
this.getDb().prepare(`INSERT INTO telescope_entries (id, batch_id, type, content, tags, family_hash, created_at)
|
|
134
145
|
VALUES (@id, @batch_id, @type, @content, @tags, @family_hash, @created_at)`).run(row);
|
|
135
146
|
}
|
|
136
147
|
storeBatch(entries) {
|
|
148
|
+
if (!isRecording())
|
|
149
|
+
return;
|
|
137
150
|
const db = this.getDb();
|
|
138
151
|
const stmt = db.prepare(`INSERT INTO telescope_entries (id, batch_id, type, content, tags, family_hash, created_at)
|
|
139
152
|
VALUES (@id, @batch_id, @type, @content, @tags, @family_hash, @created_at)`);
|