@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.
Files changed (150) hide show
  1. package/README.md +101 -27
  2. package/dist/api/routes.d.ts +10 -6
  3. package/dist/api/routes.d.ts.map +1 -1
  4. package/dist/api/routes.js +42 -54
  5. package/dist/api/routes.js.map +1 -1
  6. package/dist/batch-context.d.ts +19 -0
  7. package/dist/batch-context.d.ts.map +1 -0
  8. package/dist/batch-context.js +24 -0
  9. package/dist/batch-context.js.map +1 -0
  10. package/dist/collectors/ai.d.ts +13 -0
  11. package/dist/collectors/ai.d.ts.map +1 -0
  12. package/dist/collectors/ai.js +61 -0
  13. package/dist/collectors/ai.js.map +1 -0
  14. package/dist/collectors/broadcast.d.ts +10 -0
  15. package/dist/collectors/broadcast.d.ts.map +1 -0
  16. package/dist/collectors/broadcast.js +46 -0
  17. package/dist/collectors/broadcast.js.map +1 -0
  18. package/dist/collectors/cache.d.ts.map +1 -1
  19. package/dist/collectors/cache.js +5 -4
  20. package/dist/collectors/cache.js.map +1 -1
  21. package/dist/collectors/command.d.ts +21 -0
  22. package/dist/collectors/command.d.ts.map +1 -0
  23. package/dist/collectors/command.js +55 -0
  24. package/dist/collectors/command.js.map +1 -0
  25. package/dist/collectors/dump.d.ts +17 -0
  26. package/dist/collectors/dump.d.ts.map +1 -0
  27. package/dist/collectors/dump.js +37 -0
  28. package/dist/collectors/dump.js.map +1 -0
  29. package/dist/collectors/event.d.ts.map +1 -1
  30. package/dist/collectors/event.js +2 -1
  31. package/dist/collectors/event.js.map +1 -1
  32. package/dist/collectors/exception.d.ts +1 -0
  33. package/dist/collectors/exception.d.ts.map +1 -1
  34. package/dist/collectors/exception.js +23 -4
  35. package/dist/collectors/exception.js.map +1 -1
  36. package/dist/collectors/gate.d.ts +18 -0
  37. package/dist/collectors/gate.d.ts.map +1 -0
  38. package/dist/collectors/gate.js +49 -0
  39. package/dist/collectors/gate.js.map +1 -0
  40. package/dist/collectors/http.d.ts +21 -0
  41. package/dist/collectors/http.d.ts.map +1 -0
  42. package/dist/collectors/http.js +64 -0
  43. package/dist/collectors/http.js.map +1 -0
  44. package/dist/collectors/job.d.ts.map +1 -1
  45. package/dist/collectors/job.js +3 -2
  46. package/dist/collectors/job.js.map +1 -1
  47. package/dist/collectors/live.d.ts +13 -0
  48. package/dist/collectors/live.d.ts.map +1 -0
  49. package/dist/collectors/live.js +60 -0
  50. package/dist/collectors/live.js.map +1 -0
  51. package/dist/collectors/log.d.ts.map +1 -1
  52. package/dist/collectors/log.js +2 -1
  53. package/dist/collectors/log.js.map +1 -1
  54. package/dist/collectors/mail.d.ts.map +1 -1
  55. package/dist/collectors/mail.js +2 -1
  56. package/dist/collectors/mail.js.map +1 -1
  57. package/dist/collectors/mcp.d.ts +14 -0
  58. package/dist/collectors/mcp.d.ts.map +1 -0
  59. package/dist/collectors/mcp.js +49 -0
  60. package/dist/collectors/mcp.js.map +1 -0
  61. package/dist/collectors/model.d.ts +6 -0
  62. package/dist/collectors/model.d.ts.map +1 -1
  63. package/dist/collectors/model.js +44 -1
  64. package/dist/collectors/model.js.map +1 -1
  65. package/dist/collectors/notification.d.ts.map +1 -1
  66. package/dist/collectors/notification.js +2 -1
  67. package/dist/collectors/notification.js.map +1 -1
  68. package/dist/collectors/query.d.ts.map +1 -1
  69. package/dist/collectors/query.js +5 -3
  70. package/dist/collectors/query.js.map +1 -1
  71. package/dist/collectors/request.d.ts +2 -1
  72. package/dist/collectors/request.d.ts.map +1 -1
  73. package/dist/collectors/request.js +78 -4
  74. package/dist/collectors/request.js.map +1 -1
  75. package/dist/index.d.ts +17 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +152 -95
  78. package/dist/index.js.map +1 -1
  79. package/dist/redact.d.ts +25 -0
  80. package/dist/redact.d.ts.map +1 -0
  81. package/dist/redact.js +55 -0
  82. package/dist/redact.js.map +1 -0
  83. package/dist/routes.d.ts +22 -0
  84. package/dist/routes.d.ts.map +1 -0
  85. package/dist/routes.js +105 -0
  86. package/dist/routes.js.map +1 -0
  87. package/dist/storage.d.ts.map +1 -1
  88. package/dist/storage.js +13 -0
  89. package/dist/storage.js.map +1 -1
  90. package/dist/types.d.ts +32 -1
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/types.js +13 -0
  93. package/dist/types.js.map +1 -1
  94. package/dist/views/vanilla/Dashboard.d.ts +10 -0
  95. package/dist/views/vanilla/Dashboard.d.ts.map +1 -0
  96. package/dist/views/vanilla/Dashboard.js +48 -0
  97. package/dist/views/vanilla/Dashboard.js.map +1 -0
  98. package/dist/views/vanilla/EntryList.d.ts +29 -0
  99. package/dist/views/vanilla/EntryList.d.ts.map +1 -0
  100. package/dist/views/vanilla/EntryList.js +172 -0
  101. package/dist/views/vanilla/EntryList.js.map +1 -0
  102. package/dist/views/vanilla/Layout.d.ts +25 -0
  103. package/dist/views/vanilla/Layout.d.ts.map +1 -0
  104. package/dist/views/vanilla/Layout.js +225 -0
  105. package/dist/views/vanilla/Layout.js.map +1 -0
  106. package/dist/views/vanilla/_html.d.ts +27 -0
  107. package/dist/views/vanilla/_html.d.ts.map +1 -0
  108. package/dist/views/vanilla/_html.js +55 -0
  109. package/dist/views/vanilla/_html.js.map +1 -0
  110. package/dist/views/vanilla/columns.d.ts +20 -0
  111. package/dist/views/vanilla/columns.d.ts.map +1 -0
  112. package/dist/views/vanilla/columns.js +181 -0
  113. package/dist/views/vanilla/columns.js.map +1 -0
  114. package/dist/views/vanilla/details/Batch.d.ts +14 -0
  115. package/dist/views/vanilla/details/Batch.d.ts.map +1 -0
  116. package/dist/views/vanilla/details/Batch.js +120 -0
  117. package/dist/views/vanilla/details/Batch.js.map +1 -0
  118. package/dist/views/vanilla/details/Layout.d.ts +21 -0
  119. package/dist/views/vanilla/details/Layout.d.ts.map +1 -0
  120. package/dist/views/vanilla/details/Layout.js +163 -0
  121. package/dist/views/vanilla/details/Layout.js.map +1 -0
  122. package/dist/views/vanilla/details/NotFound.d.ts +8 -0
  123. package/dist/views/vanilla/details/NotFound.d.ts.map +1 -0
  124. package/dist/views/vanilla/details/NotFound.js +20 -0
  125. package/dist/views/vanilla/details/NotFound.js.map +1 -0
  126. package/dist/views/vanilla/details/index.d.ts +5 -0
  127. package/dist/views/vanilla/details/index.d.ts.map +1 -0
  128. package/dist/views/vanilla/details/index.js +5 -0
  129. package/dist/views/vanilla/details/index.js.map +1 -0
  130. package/dist/views/vanilla/details/sections.d.ts +46 -0
  131. package/dist/views/vanilla/details/sections.d.ts.map +1 -0
  132. package/dist/views/vanilla/details/sections.js +145 -0
  133. package/dist/views/vanilla/details/sections.js.map +1 -0
  134. package/dist/views/vanilla/details/views.d.ts +15 -0
  135. package/dist/views/vanilla/details/views.d.ts.map +1 -0
  136. package/dist/views/vanilla/details/views.js +534 -0
  137. package/dist/views/vanilla/details/views.js.map +1 -0
  138. package/dist/views/vanilla/index.d.ts +5 -0
  139. package/dist/views/vanilla/index.d.ts.map +1 -0
  140. package/dist/views/vanilla/index.js +5 -0
  141. package/dist/views/vanilla/index.js.map +1 -0
  142. package/package.json +53 -13
  143. package/dist/ui/layout.d.ts +0 -11
  144. package/dist/ui/layout.d.ts.map +0 -1
  145. package/dist/ui/layout.js +0 -69
  146. package/dist/ui/layout.js.map +0 -1
  147. package/dist/ui/pages.d.ts +0 -21
  148. package/dist/ui/pages.d.ts.map +0 -1
  149. package/dist/ui/pages.js +0 -225
  150. 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 { registerRoutes } from './api/routes.js';
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 function telescope(config = {}) {
72
- const merged = { ...defaultConfig, ...config };
73
- // Strip undefined values introduced by exactOptionalPropertyTypes spread
74
- const resolved = {
75
- enabled: merged.enabled ?? defaultConfig.enabled,
76
- path: merged.path ?? defaultConfig.path,
77
- storage: merged.storage ?? defaultConfig.storage,
78
- sqlitePath: merged.sqlitePath ?? defaultConfig.sqlitePath,
79
- maxEntries: merged.maxEntries ?? defaultConfig.maxEntries,
80
- pruneAfterHours: merged.pruneAfterHours ?? defaultConfig.pruneAfterHours,
81
- recordRequests: merged.recordRequests ?? defaultConfig.recordRequests,
82
- recordQueries: merged.recordQueries ?? defaultConfig.recordQueries,
83
- recordJobs: merged.recordJobs ?? defaultConfig.recordJobs,
84
- recordExceptions: merged.recordExceptions ?? defaultConfig.recordExceptions,
85
- recordLogs: merged.recordLogs ?? defaultConfig.recordLogs,
86
- recordMail: merged.recordMail ?? defaultConfig.recordMail,
87
- recordNotifications: merged.recordNotifications ?? defaultConfig.recordNotifications,
88
- recordEvents: merged.recordEvents ?? defaultConfig.recordEvents,
89
- recordCache: merged.recordCache ?? defaultConfig.recordCache,
90
- recordSchedule: merged.recordSchedule ?? defaultConfig.recordSchedule,
91
- recordModels: merged.recordModels ?? defaultConfig.recordModels,
92
- ignoreRequests: merged.ignoreRequests ?? defaultConfig.ignoreRequests,
93
- slowQueryThreshold: merged.slowQueryThreshold ?? defaultConfig.slowQueryThreshold,
94
- auth: merged.auth ?? defaultConfig.auth,
95
- };
96
- class TelescopeServiceProvider extends ServiceProvider {
97
- register() {
98
- this.publishes({
99
- from: new URL('../../boost/guidelines.md', import.meta.url).pathname,
100
- to: 'boost',
101
- tag: 'telescope-boost',
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
- async boot() {
105
- if (!resolved.enabled)
106
- return;
107
- // ── Create storage ────────────────────────────────────
108
- let storage;
109
- if (resolved.storage === 'sqlite') {
110
- storage = new SqliteStorage(resolved.sqlitePath);
111
- }
112
- else {
113
- storage = new MemoryStorage(resolved.maxEntries);
114
- }
115
- TelescopeRegistry.set(storage);
116
- this.app.instance('telescope', storage);
117
- // ── Auto-prune on interval ────────────────────────────
118
- const pruneHours = resolved.pruneAfterHours;
119
- if (pruneHours > 0) {
120
- const interval = Math.min(pruneHours * 60 * 60 * 1000, 3_600_000);
121
- const timer = setInterval(() => {
122
- const cutoff = new Date(Date.now() - pruneHours * 60 * 60 * 1000);
123
- storage.pruneOlderThan(cutoff);
124
- }, interval);
125
- timer.unref();
126
- }
127
- // ── Register collectors ───────────────────────────────
128
- const collectors = [];
129
- const requestCollector = new RequestCollector(storage, resolved);
130
- collectors.push(requestCollector);
131
- if (resolved.recordQueries)
132
- collectors.push(new QueryCollector(storage, resolved));
133
- if (resolved.recordJobs)
134
- collectors.push(new JobCollector(storage));
135
- if (resolved.recordExceptions)
136
- collectors.push(new ExceptionCollector(storage));
137
- if (resolved.recordLogs)
138
- collectors.push(new LogCollector(storage));
139
- if (resolved.recordMail)
140
- collectors.push(new MailCollector(storage));
141
- if (resolved.recordNotifications)
142
- collectors.push(new NotificationCollector(storage));
143
- if (resolved.recordEvents)
144
- collectors.push(new EventCollector(storage));
145
- if (resolved.recordCache)
146
- collectors.push(new CacheCollector(storage));
147
- if (resolved.recordSchedule)
148
- collectors.push(new ScheduleCollector(storage));
149
- if (resolved.recordModels)
150
- collectors.push(new ModelCollector(storage));
151
- for (const collector of collectors) {
152
- await collector.register();
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
- // ── Register request middleware ───────────────────────
155
- if (resolved.recordRequests) {
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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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"}
@@ -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;AAI1F,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;IAOlC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAI3C,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;IAQlC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAY3C,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"}
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)`);