@wizeworks/lens-node 0.0.0-stage → 0.3.0-alpha.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -2
  3. package/dist/adapters/drizzle.d.ts +7 -0
  4. package/dist/adapters/drizzle.d.ts.map +1 -0
  5. package/dist/adapters/drizzle.js +41 -0
  6. package/dist/adapters/drizzle.js.map +1 -0
  7. package/dist/adapters/mysql2.d.ts +6 -0
  8. package/dist/adapters/mysql2.d.ts.map +1 -0
  9. package/dist/adapters/mysql2.js +60 -0
  10. package/dist/adapters/mysql2.js.map +1 -0
  11. package/dist/adapters/pg.d.ts +6 -0
  12. package/dist/adapters/pg.d.ts.map +1 -0
  13. package/dist/adapters/pg.js +50 -0
  14. package/dist/adapters/pg.js.map +1 -0
  15. package/dist/adapters/prisma.d.ts +22 -0
  16. package/dist/adapters/prisma.d.ts.map +1 -0
  17. package/dist/adapters/prisma.js +48 -0
  18. package/dist/adapters/prisma.js.map +1 -0
  19. package/dist/adapters/registry.d.ts +37 -0
  20. package/dist/adapters/registry.d.ts.map +1 -0
  21. package/dist/adapters/registry.js +41 -0
  22. package/dist/adapters/registry.js.map +1 -0
  23. package/dist/adapters/sqlite.d.ts +10 -0
  24. package/dist/adapters/sqlite.d.ts.map +1 -0
  25. package/dist/adapters/sqlite.js +59 -0
  26. package/dist/adapters/sqlite.js.map +1 -0
  27. package/dist/adapters/typeorm.d.ts +4 -0
  28. package/dist/adapters/typeorm.d.ts.map +1 -0
  29. package/dist/adapters/typeorm.js +43 -0
  30. package/dist/adapters/typeorm.js.map +1 -0
  31. package/dist/api.d.ts +26 -0
  32. package/dist/api.d.ts.map +1 -0
  33. package/dist/api.js +112 -0
  34. package/dist/api.js.map +1 -0
  35. package/dist/body-capture.d.ts +13 -0
  36. package/dist/body-capture.d.ts.map +1 -0
  37. package/dist/body-capture.js +54 -0
  38. package/dist/body-capture.js.map +1 -0
  39. package/dist/capture.d.ts +8 -0
  40. package/dist/capture.d.ts.map +1 -0
  41. package/dist/capture.js +33 -0
  42. package/dist/capture.js.map +1 -0
  43. package/dist/client-spans.d.ts +11 -0
  44. package/dist/client-spans.d.ts.map +1 -0
  45. package/dist/client-spans.js +83 -0
  46. package/dist/client-spans.js.map +1 -0
  47. package/dist/db.d.ts +25 -0
  48. package/dist/db.d.ts.map +1 -0
  49. package/dist/db.js +107 -0
  50. package/dist/db.js.map +1 -0
  51. package/dist/disabled.d.ts +4 -0
  52. package/dist/disabled.d.ts.map +1 -0
  53. package/dist/disabled.js +25 -0
  54. package/dist/disabled.js.map +1 -0
  55. package/dist/expose-headers.d.ts +6 -0
  56. package/dist/expose-headers.d.ts.map +1 -0
  57. package/dist/expose-headers.js +43 -0
  58. package/dist/expose-headers.js.map +1 -0
  59. package/dist/federation.d.ts +7 -0
  60. package/dist/federation.d.ts.map +1 -0
  61. package/dist/federation.js +33 -0
  62. package/dist/federation.js.map +1 -0
  63. package/dist/frameworks/fastify.d.ts +6 -0
  64. package/dist/frameworks/fastify.d.ts.map +1 -0
  65. package/dist/frameworks/fastify.js +60 -0
  66. package/dist/frameworks/fastify.js.map +1 -0
  67. package/dist/frameworks/hono.d.ts +6 -0
  68. package/dist/frameworks/hono.d.ts.map +1 -0
  69. package/dist/frameworks/hono.js +34 -0
  70. package/dist/frameworks/hono.js.map +1 -0
  71. package/dist/frameworks/koa.d.ts +13 -0
  72. package/dist/frameworks/koa.d.ts.map +1 -0
  73. package/dist/frameworks/koa.js +42 -0
  74. package/dist/frameworks/koa.js.map +1 -0
  75. package/dist/frameworks/next.d.ts +25 -0
  76. package/dist/frameworks/next.d.ts.map +1 -0
  77. package/dist/frameworks/next.js +49 -0
  78. package/dist/frameworks/next.js.map +1 -0
  79. package/dist/frameworks/node-server.d.ts +6 -0
  80. package/dist/frameworks/node-server.d.ts.map +1 -0
  81. package/dist/frameworks/node-server.js +35 -0
  82. package/dist/frameworks/node-server.js.map +1 -0
  83. package/dist/grpc/client.d.ts +6 -0
  84. package/dist/grpc/client.d.ts.map +1 -0
  85. package/dist/grpc/client.js +52 -0
  86. package/dist/grpc/client.js.map +1 -0
  87. package/dist/grpc/index.d.ts +4 -0
  88. package/dist/grpc/index.d.ts.map +1 -0
  89. package/dist/grpc/index.js +16 -0
  90. package/dist/grpc/index.js.map +1 -0
  91. package/dist/grpc/server.d.ts +10 -0
  92. package/dist/grpc/server.d.ts.map +1 -0
  93. package/dist/grpc/server.js +98 -0
  94. package/dist/grpc/server.js.map +1 -0
  95. package/dist/grpc/shared.d.ts +40 -0
  96. package/dist/grpc/shared.d.ts.map +1 -0
  97. package/dist/grpc/shared.js +45 -0
  98. package/dist/grpc/shared.js.map +1 -0
  99. package/dist/http-util.d.ts +10 -0
  100. package/dist/http-util.d.ts.map +1 -0
  101. package/dist/http-util.js +47 -0
  102. package/dist/http-util.js.map +1 -0
  103. package/dist/hub-connect.d.ts +10 -0
  104. package/dist/hub-connect.d.ts.map +1 -0
  105. package/dist/hub-connect.js +22 -0
  106. package/dist/hub-connect.js.map +1 -0
  107. package/dist/hub-export.d.ts +34 -0
  108. package/dist/hub-export.d.ts.map +1 -0
  109. package/dist/hub-export.js +135 -0
  110. package/dist/hub-export.js.map +1 -0
  111. package/dist/index.d.ts +35 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +27 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/info.d.ts +18 -0
  116. package/dist/info.d.ts.map +1 -0
  117. package/dist/info.js +31 -0
  118. package/dist/info.js.map +1 -0
  119. package/dist/kit.d.ts +14 -0
  120. package/dist/kit.d.ts.map +1 -0
  121. package/dist/kit.js +12 -0
  122. package/dist/kit.js.map +1 -0
  123. package/dist/logger.d.ts +29 -0
  124. package/dist/logger.d.ts.map +1 -0
  125. package/dist/logger.js +82 -0
  126. package/dist/logger.js.map +1 -0
  127. package/dist/logs/bunyan.d.ts +4 -0
  128. package/dist/logs/bunyan.d.ts.map +1 -0
  129. package/dist/logs/bunyan.js +42 -0
  130. package/dist/logs/bunyan.js.map +1 -0
  131. package/dist/logs/captured.d.ts +4 -0
  132. package/dist/logs/captured.d.ts.map +1 -0
  133. package/dist/logs/captured.js +9 -0
  134. package/dist/logs/captured.js.map +1 -0
  135. package/dist/logs/consola.d.ts +4 -0
  136. package/dist/logs/consola.d.ts.map +1 -0
  137. package/dist/logs/consola.js +25 -0
  138. package/dist/logs/consola.js.map +1 -0
  139. package/dist/logs/console.d.ts +4 -0
  140. package/dist/logs/console.d.ts.map +1 -0
  141. package/dist/logs/console.js +49 -0
  142. package/dist/logs/console.js.map +1 -0
  143. package/dist/logs/levels.d.ts +14 -0
  144. package/dist/logs/levels.d.ts.map +1 -0
  145. package/dist/logs/levels.js +58 -0
  146. package/dist/logs/levels.js.map +1 -0
  147. package/dist/logs/log4js.d.ts +16 -0
  148. package/dist/logs/log4js.d.ts.map +1 -0
  149. package/dist/logs/log4js.js +21 -0
  150. package/dist/logs/log4js.js.map +1 -0
  151. package/dist/logs/nest.d.ts +6 -0
  152. package/dist/logs/nest.d.ts.map +1 -0
  153. package/dist/logs/nest.js +34 -0
  154. package/dist/logs/nest.js.map +1 -0
  155. package/dist/logs/otel.d.ts +24 -0
  156. package/dist/logs/otel.d.ts.map +1 -0
  157. package/dist/logs/otel.js +31 -0
  158. package/dist/logs/otel.js.map +1 -0
  159. package/dist/logs/pino.d.ts +4 -0
  160. package/dist/logs/pino.d.ts.map +1 -0
  161. package/dist/logs/pino.js +86 -0
  162. package/dist/logs/pino.js.map +1 -0
  163. package/dist/logs/winston.d.ts +4 -0
  164. package/dist/logs/winston.d.ts.map +1 -0
  165. package/dist/logs/winston.js +65 -0
  166. package/dist/logs/winston.js.map +1 -0
  167. package/dist/mcp-find.d.ts +5 -0
  168. package/dist/mcp-find.d.ts.map +1 -0
  169. package/dist/mcp-find.js +42 -0
  170. package/dist/mcp-find.js.map +1 -0
  171. package/dist/mcp-metrics.d.ts +5 -0
  172. package/dist/mcp-metrics.d.ts.map +1 -0
  173. package/dist/mcp-metrics.js +77 -0
  174. package/dist/mcp-metrics.js.map +1 -0
  175. package/dist/mcp-shared.d.ts +30 -0
  176. package/dist/mcp-shared.d.ts.map +1 -0
  177. package/dist/mcp-shared.js +5 -0
  178. package/dist/mcp-shared.js.map +1 -0
  179. package/dist/mcp-traces.d.ts +5 -0
  180. package/dist/mcp-traces.d.ts.map +1 -0
  181. package/dist/mcp-traces.js +51 -0
  182. package/dist/mcp-traces.js.map +1 -0
  183. package/dist/mcp.d.ts +6 -0
  184. package/dist/mcp.d.ts.map +1 -0
  185. package/dist/mcp.js +26 -0
  186. package/dist/mcp.js.map +1 -0
  187. package/dist/messaging/amqplib.d.ts +4 -0
  188. package/dist/messaging/amqplib.d.ts.map +1 -0
  189. package/dist/messaging/amqplib.js +89 -0
  190. package/dist/messaging/amqplib.js.map +1 -0
  191. package/dist/messaging/kafkajs.d.ts +4 -0
  192. package/dist/messaging/kafkajs.d.ts.map +1 -0
  193. package/dist/messaging/kafkajs.js +78 -0
  194. package/dist/messaging/kafkajs.js.map +1 -0
  195. package/dist/messaging/servicebus.d.ts +4 -0
  196. package/dist/messaging/servicebus.d.ts.map +1 -0
  197. package/dist/messaging/servicebus.js +85 -0
  198. package/dist/messaging/servicebus.js.map +1 -0
  199. package/dist/messaging/shared.d.ts +30 -0
  200. package/dist/messaging/shared.d.ts.map +1 -0
  201. package/dist/messaging/shared.js +74 -0
  202. package/dist/messaging/shared.js.map +1 -0
  203. package/dist/metrics/exponential.d.ts +17 -0
  204. package/dist/metrics/exponential.d.ts.map +1 -0
  205. package/dist/metrics/exponential.js +12 -0
  206. package/dist/metrics/exponential.js.map +1 -0
  207. package/dist/metrics/gc.d.ts +15 -0
  208. package/dist/metrics/gc.d.ts.map +1 -0
  209. package/dist/metrics/gc.js +44 -0
  210. package/dist/metrics/gc.js.map +1 -0
  211. package/dist/metrics/otel.d.ts +39 -0
  212. package/dist/metrics/otel.d.ts.map +1 -0
  213. package/dist/metrics/otel.js +62 -0
  214. package/dist/metrics/otel.js.map +1 -0
  215. package/dist/metrics/runtime.d.ts +17 -0
  216. package/dist/metrics/runtime.d.ts.map +1 -0
  217. package/dist/metrics/runtime.js +100 -0
  218. package/dist/metrics/runtime.js.map +1 -0
  219. package/dist/metrics/setup.d.ts +13 -0
  220. package/dist/metrics/setup.d.ts.map +1 -0
  221. package/dist/metrics/setup.js +20 -0
  222. package/dist/metrics/setup.js.map +1 -0
  223. package/dist/metrics/store.d.ts +34 -0
  224. package/dist/metrics/store.d.ts.map +1 -0
  225. package/dist/metrics/store.js +94 -0
  226. package/dist/metrics/store.js.map +1 -0
  227. package/dist/mode.d.ts +6 -0
  228. package/dist/mode.d.ts.map +1 -0
  229. package/dist/mode.js +7 -0
  230. package/dist/mode.js.map +1 -0
  231. package/dist/next.d.ts +5 -0
  232. package/dist/next.d.ts.map +1 -0
  233. package/dist/next.js +2 -0
  234. package/dist/next.js.map +1 -0
  235. package/dist/persist-schema.d.ts +14 -0
  236. package/dist/persist-schema.d.ts.map +1 -0
  237. package/dist/persist-schema.js +41 -0
  238. package/dist/persist-schema.js.map +1 -0
  239. package/dist/persist-util.d.ts +4 -0
  240. package/dist/persist-util.d.ts.map +1 -0
  241. package/dist/persist-util.js +30 -0
  242. package/dist/persist-util.js.map +1 -0
  243. package/dist/persist.d.ts +27 -0
  244. package/dist/persist.d.ts.map +1 -0
  245. package/dist/persist.js +159 -0
  246. package/dist/persist.js.map +1 -0
  247. package/dist/precise.d.ts +8 -0
  248. package/dist/precise.d.ts.map +1 -0
  249. package/dist/precise.js +28 -0
  250. package/dist/precise.js.map +1 -0
  251. package/dist/processor.d.ts +20 -0
  252. package/dist/processor.d.ts.map +1 -0
  253. package/dist/processor.js +102 -0
  254. package/dist/processor.js.map +1 -0
  255. package/dist/request-api.d.ts +12 -0
  256. package/dist/request-api.d.ts.map +1 -0
  257. package/dist/request-api.js +31 -0
  258. package/dist/request-api.js.map +1 -0
  259. package/dist/request-attributes.d.ts +9 -0
  260. package/dist/request-attributes.d.ts.map +1 -0
  261. package/dist/request-attributes.js +48 -0
  262. package/dist/request-attributes.js.map +1 -0
  263. package/dist/request-capture.d.ts +32 -0
  264. package/dist/request-capture.d.ts.map +1 -0
  265. package/dist/request-capture.js +94 -0
  266. package/dist/request-capture.js.map +1 -0
  267. package/dist/route-timing.d.ts +6 -0
  268. package/dist/route-timing.d.ts.map +1 -0
  269. package/dist/route-timing.js +25 -0
  270. package/dist/route-timing.js.map +1 -0
  271. package/dist/sampling.d.ts +37 -0
  272. package/dist/sampling.d.ts.map +1 -0
  273. package/dist/sampling.js +120 -0
  274. package/dist/sampling.js.map +1 -0
  275. package/dist/spans.d.ts +9 -0
  276. package/dist/spans.d.ts.map +1 -0
  277. package/dist/spans.js +17 -0
  278. package/dist/spans.js.map +1 -0
  279. package/dist/store-types.d.ts +22 -0
  280. package/dist/store-types.d.ts.map +1 -0
  281. package/dist/store-types.js +2 -0
  282. package/dist/store-types.js.map +1 -0
  283. package/dist/store.d.ts +59 -0
  284. package/dist/store.d.ts.map +1 -0
  285. package/dist/store.js +194 -0
  286. package/dist/store.js.map +1 -0
  287. package/dist/tracing.d.ts +20 -0
  288. package/dist/tracing.d.ts.map +1 -0
  289. package/dist/tracing.js +45 -0
  290. package/dist/tracing.js.map +1 -0
  291. package/dist/types.d.ts +127 -0
  292. package/dist/types.d.ts.map +1 -0
  293. package/dist/types.js +2 -0
  294. package/dist/types.js.map +1 -0
  295. package/dist/ui.d.ts +6 -0
  296. package/dist/ui.d.ts.map +1 -0
  297. package/dist/ui.js +62 -0
  298. package/dist/ui.js.map +1 -0
  299. package/dist/wizelens.d.ts +5 -0
  300. package/dist/wizelens.d.ts.map +1 -0
  301. package/dist/wizelens.js +127 -0
  302. package/dist/wizelens.js.map +1 -0
  303. package/package.json +109 -3
@@ -0,0 +1,127 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { Tracer } from "@opentelemetry/api";
3
+ import type { Trace } from "@wizeworks/lens-core";
4
+ import type { SamplingOptions } from "./sampling.js";
5
+ import type { TraceStore } from "./store.js";
6
+ export interface WizeLensOptions {
7
+ /** Service name shown in the dashboard, e.g. "orders-api". */
8
+ serviceName: string;
9
+ /** Base path for the dashboard and API. Default "/_wizelens". */
10
+ basePath?: string;
11
+ /** Turn WizeLens on. Default: the WIZELENS_ENABLED variable, else on unless NODE_ENV is "production". */
12
+ enabled?: boolean;
13
+ /** Serve the dashboard, read API, and MCP. Off is send-only: capture and send, no reads. Default: WIZELENS_DASHBOARD, else off in production. */
14
+ dashboard?: boolean;
15
+ /** Where traces live. "sqlite" keeps them across restarts. Default "sqlite", or "memory" when the dashboard is off. */
16
+ storage?: "sqlite" | "memory";
17
+ /** SQLite file for `storage: "sqlite"`. Default `{cwd}/.wizelens/traces.db`. */
18
+ storagePath?: string;
19
+ /** Max traces kept (memory and file). Default 2000. */
20
+ maxTraces?: number;
21
+ /** Max trace age in ms (memory and file). Default 24 h. */
22
+ maxAgeMs?: number;
23
+ /** Expose the read-only MCP endpoint at `{basePath}/mcp`. Default false. */
24
+ enableMcp?: boolean;
25
+ /** Key fragments to redact. Default: the contract list. */
26
+ redactKeys?: string[];
27
+ /** Override the `X-WizeLens-Endpoint` value (useful behind proxies). */
28
+ publicEndpoint?: string;
29
+ /** Override where the dashboard build lives. */
30
+ uiDir?: string;
31
+ /** Capture outgoing fetch / undici calls. Default true. */
32
+ instrumentFetch?: boolean;
33
+ /** Database adapters also trace queries that run outside a request (startup, jobs). Default false. */
34
+ traceQueriesOutsideRequests?: boolean;
35
+ /** Copy `console.log`, `warn`, `error`, `info`, `debug`, and `trace` calls made during a request into its trace. Default true. */
36
+ captureConsole?: boolean;
37
+ /** Keep runtime metrics (CPU, memory, heap, event loop, GC) and app metrics from `wizelensMetricExporter`. Default true. */
38
+ captureMetrics?: boolean;
39
+ /** How often runtime metrics are sampled, in ms. Default 10000. */
40
+ metricsIntervalMs?: number;
41
+ /** Oldest metric point kept, in ms. Default 1 h. Metrics are kept in memory only. */
42
+ metricsMaxAgeMs?: number;
43
+ /** Also write wizelens logs to the console. Default false. */
44
+ logToConsole?: boolean;
45
+ /** Where MCP audit lines go. Default console.info. */
46
+ audit?: (line: string) => void;
47
+ /** Keep the first 16 KB of text and JSON response bodies. Default false. */
48
+ captureResponseBody?: boolean;
49
+ /** Queries at or over this many ms are slow. Default 100. */
50
+ slowQueryMs?: number;
51
+ /** Repeats that make an N+1 pattern. Default 5. */
52
+ nPlusOneThreshold?: number;
53
+ /** The project this service belongs to, so a shared hub can group it. Default: the WIZELENS_PROJECT variable. */
54
+ project?: string;
55
+ /** Also send everything to this local hub, for example "http://localhost:5960". Default: the WIZELENS_HUB variable. */
56
+ hub?: string;
57
+ /** Access token for the hub. Default: the WIZELENS_HUB_TOKEN variable. */
58
+ hubToken?: string;
59
+ /** Keep only part of the traces, for busy services. Default: all, or the WIZELENS_SAMPLE_RATE variable. */
60
+ sampling?: SamplingOptions;
61
+ }
62
+ export interface DbCallInfo {
63
+ /** OTel `db.system.name`, e.g. "sqlite", "postgresql", "mysql". */
64
+ system: string;
65
+ /** Adapter name for `wizelens.db.adapter`, e.g. "node-sqlite", "pg", "prisma". */
66
+ adapter?: string;
67
+ /** Database name for `db.namespace`. */
68
+ namespace?: string;
69
+ /** Override the parsed operation (SELECT, INSERT, ...). */
70
+ operation?: string;
71
+ /** Override the parsed table / collection. */
72
+ collection?: string;
73
+ /** Rows in a result that is not a plain array, for `db.response.returned_rows`. */
74
+ rowsOf?: (result: unknown) => number | undefined;
75
+ /** An ORM-level call: driver calls inside it are part of this span, not new ones. */
76
+ outermost?: boolean;
77
+ /** Skip the span when no request (or other span) is active. Set by the database adapters. */
78
+ requireParent?: boolean;
79
+ }
80
+ export type LogFn = (message: string, attributes?: Record<string, unknown>) => void;
81
+ export interface WizeLensLogger {
82
+ trace: LogFn;
83
+ debug: LogFn;
84
+ info: LogFn;
85
+ warn: LogFn;
86
+ error: LogFn;
87
+ critical: LogFn;
88
+ /** Logger with a custom category. */
89
+ child(category: string): WizeLensLogger;
90
+ }
91
+ export type Next = (err?: unknown) => void;
92
+ export type Req = IncomingMessage & {
93
+ originalUrl?: string;
94
+ body?: unknown;
95
+ route?: {
96
+ path?: unknown;
97
+ };
98
+ baseUrl?: string;
99
+ };
100
+ export interface WizeLens {
101
+ readonly enabled: boolean;
102
+ readonly serviceName: string;
103
+ readonly basePath: string;
104
+ readonly store: TraceStore;
105
+ /** The SQLite file in use, or null when traces are kept in memory only. */
106
+ readonly storagePath: string | null;
107
+ readonly tracer: Tracer;
108
+ /** Express / Connect middleware. Traces requests and serves `{basePath}`. Mount it first. */
109
+ middleware: (req: IncomingMessage, res: ServerResponse, next: Next) => void;
110
+ /** Express error middleware. Mount it after your routes to record exceptions. */
111
+ errorMiddleware: (err: unknown, req: IncomingMessage, res: ServerResponse, next: Next) => void;
112
+ /** Plain Node handler for `{basePath}` only. Resolves false when the request is not for WizeLens. */
113
+ handler: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
114
+ /** Wrap one database call (sync or async). Driver-level floor for any database. */
115
+ traceDb<T>(info: DbCallInfo, sql: string, params: unknown, fn: () => T): T;
116
+ logger: WizeLensLogger;
117
+ /** Record an exception on the active span. */
118
+ recordException(err: unknown): void;
119
+ /** Tag the current request, e.g. tag("cache", "hit") shows as "cache:hit". No-op outside a request. */
120
+ tag(key: string, value?: string): void;
121
+ /** Set the user of the current request (`enduser.id`). No-op outside a request. */
122
+ setUser(id: string): void;
123
+ /** Get one trace, optionally federated across downstream services. */
124
+ getTrace(traceId: string, federate?: boolean, hop?: number): Promise<Trace | undefined>;
125
+ shutdown(): Promise<void>;
126
+ }
127
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { ServerResponse } from "node:http";
2
+ /** Find the built dashboard (`@wizeworks/lens-ui/dist`). Returns null when it is not built. */
3
+ export declare function resolveUiDir(explicit?: string): string | null;
4
+ /** Serve one UI file. `relPath` is the path below the base path, without a leading slash. */
5
+ export declare function serveUi(uiDir: string | null, relPath: string, res: ServerResponse): Promise<void>;
6
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqBhD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7D;AAED,6FAA6F;AAC7F,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBvG"}
package/dist/ui.js ADDED
@@ -0,0 +1,62 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { createRequire } from "node:module";
4
+ import { dirname, extname, join, normalize, sep } from "node:path";
5
+ const TYPES = {
6
+ ".html": "text/html; charset=utf-8",
7
+ ".js": "text/javascript; charset=utf-8",
8
+ ".css": "text/css; charset=utf-8",
9
+ ".json": "application/json; charset=utf-8",
10
+ ".svg": "image/svg+xml",
11
+ ".png": "image/png",
12
+ ".ico": "image/x-icon",
13
+ ".woff2": "font/woff2",
14
+ ".map": "application/json; charset=utf-8",
15
+ };
16
+ const FALLBACK = `<!doctype html><html><head><meta charset="utf-8"><title>WizeLens</title></head>
17
+ <body style="font-family:system-ui;padding:2rem"><h1>WizeLens</h1>
18
+ <p>The dashboard build was not found. Run <code>pnpm build</code> in the WizeLens repo.</p>
19
+ <p>The API is still available at <a href="./api/traces">./api/traces</a>.</p></body></html>`;
20
+ /** Find the built dashboard (`@wizeworks/lens-ui/dist`). Returns null when it is not built. */
21
+ export function resolveUiDir(explicit) {
22
+ if (explicit)
23
+ return existsSync(explicit) ? explicit : null;
24
+ try {
25
+ const require = createRequire(import.meta.url);
26
+ const pkg = require.resolve("@wizeworks/lens-ui/package.json");
27
+ const dist = join(dirname(pkg), "dist");
28
+ return existsSync(join(dist, "index.html")) ? dist : null;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /** Serve one UI file. `relPath` is the path below the base path, without a leading slash. */
35
+ export async function serveUi(uiDir, relPath, res) {
36
+ if (!uiDir) {
37
+ res.writeHead(200, { "Content-Type": TYPES[".html"] });
38
+ res.end(FALLBACK);
39
+ return;
40
+ }
41
+ const clean = normalize(decodeURIComponent(relPath || "index.html")).replace(/^([/\\])+/, "");
42
+ let file = join(uiDir, clean);
43
+ if (!file.startsWith(uiDir + sep) && file !== uiDir) {
44
+ res.writeHead(400).end();
45
+ return;
46
+ }
47
+ if (!existsSync(file) || extname(file) === "")
48
+ file = join(uiDir, "index.html");
49
+ try {
50
+ const body = await readFile(file);
51
+ const isIndex = file.endsWith("index.html");
52
+ res.writeHead(200, {
53
+ "Content-Type": TYPES[extname(file)] ?? "application/octet-stream",
54
+ "Cache-Control": isIndex ? "no-cache" : "public, max-age=31536000, immutable",
55
+ });
56
+ res.end(body);
57
+ }
58
+ catch {
59
+ res.writeHead(404).end();
60
+ }
61
+ }
62
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WizeLens, WizeLensOptions } from "./types.js";
2
+ export type { DbCallInfo, LogFn, WizeLens, WizeLensLogger, WizeLensOptions } from "./types.js";
3
+ /** Create the WizeLens add-on for one Node service. */
4
+ export declare function createWizeLens(options: WizeLensOptions): WizeLens;
5
+ //# sourceMappingURL=wizelens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizelens.d.ts","sourceRoot":"","sources":["../src/wizelens.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG5D,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmE/F,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAsCjE"}
@@ -0,0 +1,127 @@
1
+ import { join } from "node:path";
2
+ import { W3CTraceContextPropagator } from "@opentelemetry/core";
3
+ import { DEFAULT_BASE_PATH, DEFAULT_REDACT_KEYS } from "@wizeworks/lens-core";
4
+ import { createHandler } from "./api.js";
5
+ import { createMiddleware } from "./capture.js";
6
+ import { addCleanup, registerParts, runCleanups } from "./adapters/registry.js";
7
+ import { createDbSpans, createTraceDb } from "./db.js";
8
+ import { disabledWizeLens } from "./disabled.js";
9
+ import { createGetTrace } from "./federation.js";
10
+ import { connectHub } from "./hub-connect.js";
11
+ import { samplingInfo, TraceSampler } from "./sampling.js";
12
+ import { buildInfo, DEFAULT_N_PLUS_ONE, DEFAULT_SLOW_QUERY_MS, VERSION } from "./info.js";
13
+ import { createLogSink, createLogWriter, makeLogger } from "./logger.js";
14
+ import { captureConsole } from "./logs/console.js";
15
+ import { createMetricParts, mcpMetrics } from "./metrics/setup.js";
16
+ import { SqlitePersister } from "./persist.js";
17
+ import { createErrorMiddleware, recordException, setUser, tag } from "./request-api.js";
18
+ import { TraceStore } from "./store.js";
19
+ import { isEnabled, servesDashboard } from "./mode.js";
20
+ import { createTracing, installGlobals } from "./tracing.js";
21
+ import { resolveUiDir } from "./ui.js";
22
+ function normalizeBasePath(basePath) {
23
+ return ("/" + (basePath ?? DEFAULT_BASE_PATH).replace(/^\/+|\/+$/g, "")).replace(/^\/$/, DEFAULT_BASE_PATH);
24
+ }
25
+ function openPersister(store, options, dashboard) {
26
+ if ((options.storage ?? (dashboard ? "sqlite" : "memory")) !== "sqlite")
27
+ return undefined;
28
+ const persister = new SqlitePersister(store, {
29
+ path: options.storagePath ?? join(process.cwd(), ".wizelens", "traces.db"),
30
+ serviceName: options.serviceName,
31
+ });
32
+ if (!persister.open())
33
+ return undefined;
34
+ persister.start();
35
+ return persister;
36
+ }
37
+ function mcpSource(options, store, getTrace, metrics) {
38
+ return {
39
+ service: options.serviceName,
40
+ version: VERSION,
41
+ slowQueryMs: options.slowQueryMs ?? DEFAULT_SLOW_QUERY_MS,
42
+ nPlusOneThreshold: options.nPlusOneThreshold ?? DEFAULT_N_PLUS_ONE,
43
+ list: (limit) => store.list(limit),
44
+ all: () => store.all(),
45
+ get: getTrace,
46
+ audit: options.audit ?? ((line) => console.info(line)),
47
+ ...mcpMetrics(metrics),
48
+ };
49
+ }
50
+ function buildParts(options, basePath) {
51
+ installGlobals();
52
+ const service = options.serviceName;
53
+ const redactKeys = options.redactKeys ?? DEFAULT_REDACT_KEYS;
54
+ const sampling = samplingInfo(options.sampling);
55
+ const sampler = sampling ? new TraceSampler(sampling) : undefined;
56
+ const store = new TraceStore({ maxTraces: options.maxTraces ?? 2000, maxAgeMs: options.maxAgeMs, sampler });
57
+ const dashboard = servesDashboard(options);
58
+ const persister = openPersister(store, options, dashboard);
59
+ const selfEndpoints = new Set(options.publicEndpoint ? [options.publicEndpoint] : []);
60
+ const fetch = options.instrumentFetch ?? true;
61
+ const tracing = createTracing(store, { service, version: VERSION, redactKeys, fetch }, selfEndpoints);
62
+ const logs = createLogSink(store, service, redactKeys);
63
+ const write = createLogWriter(logs, !!options.logToConsole);
64
+ const getTrace = createGetTrace(store, selfEndpoints);
65
+ const startedMs = Date.now();
66
+ const sqlite = () => !!persister?.active;
67
+ const metrics = createMetricParts(options, redactKeys);
68
+ const info = () => buildInfo({ options, store, redactKeys, startedMs, sqlite, metrics: !!metrics });
69
+ const mcp = mcpSource(options, store, getTrace, metrics?.store ?? null);
70
+ const uiDir = resolveUiDir(options.uiDir);
71
+ const hub = connectHub(options, store, info, dashboard ? selfEndpoints : null, metrics?.store ?? null);
72
+ const enableMcp = dashboard && !!options.enableMcp;
73
+ const handler = createHandler({ basePath, store, redactKeys, uiDir, enableMcp, mcp, info, getTrace, metrics: metrics?.store ?? null, selfEndpoints, dashboard });
74
+ const capture = {
75
+ tracer: tracing.tracer,
76
+ basePath,
77
+ publicEndpoint: options.publicEndpoint,
78
+ selfEndpoints,
79
+ w3c: new W3CTraceContextPropagator(),
80
+ captureResponseBody: !!options.captureResponseBody,
81
+ handler,
82
+ };
83
+ return { hub, service, redactKeys, store, persister, tracing, logs, write, getTrace, handler, capture, metrics, middleware: createMiddleware(capture) };
84
+ }
85
+ /** Create the WizeLens add-on for one Node service. */
86
+ export function createWizeLens(options) {
87
+ const basePath = normalizeBasePath(options.basePath);
88
+ if (!isEnabled(options))
89
+ return disabledWizeLens(options, basePath);
90
+ const p = buildParts(options, basePath);
91
+ const startDbSpan = createDbSpans(p.tracing.tracer, p.redactKeys, !!options.traceQueriesOutsideRequests);
92
+ const wizelens = {
93
+ enabled: true,
94
+ serviceName: p.service,
95
+ basePath,
96
+ store: p.store,
97
+ get storagePath() {
98
+ return p.persister?.active ? p.persister.path : null;
99
+ },
100
+ tracer: p.tracing.tracer,
101
+ middleware: p.middleware,
102
+ errorMiddleware: createErrorMiddleware(p.write, p.service),
103
+ handler: p.handler,
104
+ traceDb: createTraceDb(startDbSpan),
105
+ logger: makeLogger(p.write, p.service),
106
+ recordException,
107
+ tag,
108
+ setUser,
109
+ getTrace: p.getTrace,
110
+ shutdown: async () => {
111
+ runCleanups(wizelens);
112
+ await p.hub?.stop();
113
+ p.tracing.undici?.disable();
114
+ await p.tracing.provider.shutdown();
115
+ p.persister?.close();
116
+ },
117
+ };
118
+ registerParts(wizelens, { dbSpans: startDbSpan, capture: p.capture, logs: p.logs, metrics: p.metrics?.store ?? null, provider: p.tracing.provider });
119
+ if (p.metrics) {
120
+ p.metrics.collector.start();
121
+ addCleanup(wizelens, () => p.metrics.collector.stop());
122
+ }
123
+ if (options.captureConsole ?? true)
124
+ addCleanup(wizelens, captureConsole(p.logs));
125
+ return wizelens;
126
+ }
127
+ //# sourceMappingURL=wizelens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizelens.js","sourceRoot":"","sources":["../src/wizelens.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,112 @@
1
1
  {
2
2
  "name": "@wizeworks/lens-node",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.3.0-alpha.2",
4
+ "description": "WizeLens add-on for Node.js: request timeline, outgoing HTTP, database calls, logs, errors, and an in-app dashboard.",
5
+ "license": "MIT",
6
+ "author": "WizeWorks LLC",
7
+ "homepage": "https://github.com/brandonkorous/wizelens#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/brandonkorous/wizelens.git",
11
+ "directory": "js/packages/node"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/brandonkorous/wizelens/issues"
15
+ },
16
+ "keywords": [
17
+ "wizelens",
18
+ "node",
19
+ "express",
20
+ "fastify",
21
+ "koa",
22
+ "hono",
23
+ "nextjs",
24
+ "tracing",
25
+ "opentelemetry",
26
+ "profiler",
27
+ "prisma",
28
+ "typeorm",
29
+ "drizzle"
30
+ ],
31
+ "type": "module",
32
+ "main": "./dist/index.js",
33
+ "types": "./dist/index.d.ts",
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "import": "./dist/index.js"
38
+ },
39
+ "./kit": {
40
+ "types": "./dist/kit.d.ts",
41
+ "import": "./dist/kit.js"
42
+ },
43
+ "./next": {
44
+ "types": "./dist/next.d.ts",
45
+ "import": "./dist/next.js"
46
+ },
47
+ "./package.json": "./package.json"
48
+ },
49
+ "files": [
50
+ "dist"
51
+ ],
52
+ "engines": {
53
+ "node": ">=22.13"
54
+ },
55
+ "dependencies": {
56
+ "@modelcontextprotocol/sdk": "^1.32.1",
57
+ "@opentelemetry/api": "^1.9.1",
58
+ "@opentelemetry/context-async-hooks": "^2.12.0",
59
+ "@opentelemetry/core": "^2.12.0",
60
+ "@opentelemetry/instrumentation-undici": "^0.33.0",
61
+ "@opentelemetry/resources": "^2.12.0",
62
+ "@opentelemetry/sdk-trace-base": "^2.12.0",
63
+ "zod": "^4.6.7",
64
+ "@wizeworks/lens-core": "^0.3.0-alpha.2",
65
+ "@wizeworks/lens-ui": "^0.3.0-alpha.2"
66
+ },
67
+ "devDependencies": {
68
+ "@azure/service-bus": "^7.10.0",
69
+ "@grpc/grpc-js": "^1.14.6",
70
+ "@grpc/proto-loader": "^0.8.1",
71
+ "@hono/node-server": "^2.1.5",
72
+ "@koa/router": "^15.7.0",
73
+ "@opentelemetry/api-logs": "^0.223.0",
74
+ "@opentelemetry/sdk-logs": "^0.223.0",
75
+ "@opentelemetry/sdk-metrics": "^2.12.0",
76
+ "@types/amqplib": "^0.10.8",
77
+ "@types/better-sqlite3": "^9.6.0",
78
+ "@types/bunyan": "^1.8.11",
79
+ "@types/express": "^5.0.6",
80
+ "@types/koa": "^3.0.3",
81
+ "@types/koa__router": "^15.0.0",
82
+ "@types/node": "^24.19.2",
83
+ "@types/pg": "^8.23.1",
84
+ "amqplib": "^2.2.0",
85
+ "better-sqlite3": "^13.0.3",
86
+ "bunyan": "^1.8.15",
87
+ "consola": "^3.4.2",
88
+ "drizzle-orm": "^0.45.4",
89
+ "express": "^5.3.0",
90
+ "fastify": "^5.12.7",
91
+ "hono": "^4.13.13",
92
+ "kafkajs": "^2.2.4",
93
+ "koa": "^3.2.1",
94
+ "log4js": "^6.9.1",
95
+ "mysql2": "^3.24.6",
96
+ "pg": "^8.23.1",
97
+ "pino": "^10.4.0",
98
+ "reflect-metadata": "^0.2.2",
99
+ "sql.js": "^1.15.0",
100
+ "typeorm": "^1.1.2",
101
+ "typescript": "^7.0.2",
102
+ "vitest": "^5.0.5",
103
+ "winston": "^3.19.0"
104
+ },
105
+ "publishConfig": {
106
+ "access": "public"
107
+ },
108
+ "scripts": {
109
+ "build": "tsc -p tsconfig.build.json",
110
+ "test": "vitest run"
111
+ }
6
112
  }