@wizeworks/lens-node 0.3.0-alpha.2 → 0.3.0-alpha.4
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/dist/adapters/elasticsearch.d.ts +21 -0
- package/dist/adapters/elasticsearch.d.ts.map +1 -0
- package/dist/adapters/elasticsearch.js +93 -0
- package/dist/adapters/elasticsearch.js.map +1 -0
- package/dist/adapters/ioredis.d.ts +4 -0
- package/dist/adapters/ioredis.d.ts.map +1 -0
- package/dist/adapters/ioredis.js +60 -0
- package/dist/adapters/ioredis.js.map +1 -0
- package/dist/adapters/mongodb-shape.d.ts +16 -0
- package/dist/adapters/mongodb-shape.d.ts.map +1 -0
- package/dist/adapters/mongodb-shape.js +81 -0
- package/dist/adapters/mongodb-shape.js.map +1 -0
- package/dist/adapters/mongodb.d.ts +4 -0
- package/dist/adapters/mongodb.d.ts.map +1 -0
- package/dist/adapters/mongodb.js +95 -0
- package/dist/adapters/mongodb.js.map +1 -0
- package/dist/adapters/nosql.d.ts +14 -0
- package/dist/adapters/nosql.d.ts.map +1 -0
- package/dist/adapters/nosql.js +61 -0
- package/dist/adapters/nosql.js.map +1 -0
- package/dist/adapters/redis-shape.d.ts +31 -0
- package/dist/adapters/redis-shape.d.ts.map +1 -0
- package/dist/adapters/redis-shape.js +80 -0
- package/dist/adapters/redis-shape.js.map +1 -0
- package/dist/adapters/redis.d.ts +4 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +93 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/adapters/registry.d.ts +2 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +2 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/api.d.ts +5 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +25 -7
- package/dist/api.js.map +1 -1
- package/dist/auto/config.d.ts +14 -0
- package/dist/auto/config.d.ts.map +1 -0
- package/dist/auto/config.js +51 -0
- package/dist/auto/config.js.map +1 -0
- package/dist/auto/esm-loader.d.ts +10 -0
- package/dist/auto/esm-loader.d.ts.map +1 -0
- package/dist/auto/esm-loader.js +10 -0
- package/dist/auto/esm-loader.js.map +1 -0
- package/dist/auto/esm-source.d.ts +15 -0
- package/dist/auto/esm-source.d.ts.map +1 -0
- package/dist/auto/esm-source.js +23 -0
- package/dist/auto/esm-source.js.map +1 -0
- package/dist/auto/frameworks.d.ts +3 -0
- package/dist/auto/frameworks.d.ts.map +1 -0
- package/dist/auto/frameworks.js +112 -0
- package/dist/auto/frameworks.js.map +1 -0
- package/dist/auto/handle.d.ts +7 -0
- package/dist/auto/handle.d.ts.map +1 -0
- package/dist/auto/handle.js +47 -0
- package/dist/auto/handle.js.map +1 -0
- package/dist/auto/hono.d.ts +3 -0
- package/dist/auto/hono.d.ts.map +1 -0
- package/dist/auto/hono.js +43 -0
- package/dist/auto/hono.js.map +1 -0
- package/dist/auto/http.d.ts +18 -0
- package/dist/auto/http.d.ts.map +1 -0
- package/dist/auto/http.js +77 -0
- package/dist/auto/http.js.map +1 -0
- package/dist/auto/install.d.ts +5 -0
- package/dist/auto/install.d.ts.map +1 -0
- package/dist/auto/install.js +26 -0
- package/dist/auto/install.js.map +1 -0
- package/dist/auto/libraries.d.ts +3 -0
- package/dist/auto/libraries.d.ts.map +1 -0
- package/dist/auto/libraries.js +108 -0
- package/dist/auto/libraries.js.map +1 -0
- package/dist/auto/module-hooks.d.ts +14 -0
- package/dist/auto/module-hooks.d.ts.map +1 -0
- package/dist/auto/module-hooks.js +90 -0
- package/dist/auto/module-hooks.js.map +1 -0
- package/dist/auto/nest.d.ts +7 -0
- package/dist/auto/nest.d.ts.map +1 -0
- package/dist/auto/nest.js +26 -0
- package/dist/auto/nest.js.map +1 -0
- package/dist/auto/owner.d.ts +19 -0
- package/dist/auto/owner.d.ts.map +1 -0
- package/dist/auto/owner.js +52 -0
- package/dist/auto/owner.js.map +1 -0
- package/dist/auto/prisma.d.ts +3 -0
- package/dist/auto/prisma.d.ts.map +1 -0
- package/dist/auto/prisma.js +55 -0
- package/dist/auto/prisma.js.map +1 -0
- package/dist/auto/sqlite.d.ts +3 -0
- package/dist/auto/sqlite.d.ts.map +1 -0
- package/dist/auto/sqlite.js +31 -0
- package/dist/auto/sqlite.js.map +1 -0
- package/dist/auto/state.d.ts +14 -0
- package/dist/auto/state.d.ts.map +1 -0
- package/dist/auto/state.js +16 -0
- package/dist/auto/state.js.map +1 -0
- package/dist/auto.d.ts +2 -0
- package/dist/auto.d.ts.map +1 -0
- package/dist/auto.js +4 -0
- package/dist/auto.js.map +1 -0
- package/dist/capture.d.ts +3 -1
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +4 -4
- package/dist/capture.js.map +1 -1
- package/dist/client-attributes.d.ts +19 -0
- package/dist/client-attributes.d.ts.map +1 -0
- package/dist/client-attributes.js +56 -0
- package/dist/client-attributes.js.map +1 -0
- package/dist/client-spans.d.ts +6 -4
- package/dist/client-spans.d.ts.map +1 -1
- package/dist/client-spans.js +20 -9
- package/dist/client-spans.js.map +1 -1
- package/dist/db.js +1 -1
- package/dist/db.js.map +1 -1
- package/dist/frameworks/fastify.d.ts.map +1 -1
- package/dist/frameworks/fastify.js +4 -2
- package/dist/frameworks/fastify.js.map +1 -1
- package/dist/frameworks/hono.d.ts +16 -0
- package/dist/frameworks/hono.d.ts.map +1 -1
- package/dist/frameworks/hono.js +4 -4
- package/dist/frameworks/hono.js.map +1 -1
- package/dist/frameworks/koa.d.ts +2 -0
- package/dist/frameworks/koa.d.ts.map +1 -1
- package/dist/frameworks/koa.js +4 -4
- package/dist/frameworks/koa.js.map +1 -1
- package/dist/frameworks/nest-errors.d.ts +10 -0
- package/dist/frameworks/nest-errors.d.ts.map +1 -0
- package/dist/frameworks/nest-errors.js +75 -0
- package/dist/frameworks/nest-errors.js.map +1 -0
- package/dist/frameworks/nest-route.d.ts +31 -0
- package/dist/frameworks/nest-route.d.ts.map +1 -0
- package/dist/frameworks/nest-route.js +58 -0
- package/dist/frameworks/nest-route.js.map +1 -0
- package/dist/frameworks/nest.d.ts +16 -0
- package/dist/frameworks/nest.d.ts.map +1 -0
- package/dist/frameworks/nest.js +73 -0
- package/dist/frameworks/nest.js.map +1 -0
- package/dist/frameworks/node-server.d.ts +3 -0
- package/dist/frameworks/node-server.d.ts.map +1 -1
- package/dist/frameworks/node-server.js +5 -3
- package/dist/frameworks/node-server.js.map +1 -1
- package/dist/graphql/document.d.ts +13 -0
- package/dist/graphql/document.d.ts.map +1 -0
- package/dist/graphql/document.js +62 -0
- package/dist/graphql/document.js.map +1 -0
- package/dist/graphql/index.d.ts +11 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +83 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/graphql/operation.d.ts +37 -0
- package/dist/graphql/operation.d.ts.map +1 -0
- package/dist/graphql/operation.js +58 -0
- package/dist/graphql/operation.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +5 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +79 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/shared.d.ts +14 -0
- package/dist/graphql/shared.d.ts.map +1 -0
- package/dist/graphql/shared.js +21 -0
- package/dist/graphql/shared.js.map +1 -0
- package/dist/http-client.d.ts +8 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +132 -0
- package/dist/http-client.js.map +1 -0
- package/dist/hub-connect.d.ts +2 -0
- package/dist/hub-connect.d.ts.map +1 -1
- package/dist/hub-connect.js +3 -1
- package/dist/hub-connect.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/info.d.ts +2 -0
- package/dist/info.d.ts.map +1 -1
- package/dist/info.js +1 -1
- package/dist/info.js.map +1 -1
- package/dist/kit.d.ts +3 -1
- package/dist/kit.d.ts.map +1 -1
- package/dist/kit.js +1 -0
- package/dist/kit.js.map +1 -1
- package/dist/logger.d.ts +4 -4
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +11 -7
- package/dist/logger.js.map +1 -1
- package/dist/logs/bunyan.d.ts +1 -1
- package/dist/logs/bunyan.d.ts.map +1 -1
- package/dist/logs/bunyan.js +2 -3
- package/dist/logs/bunyan.js.map +1 -1
- package/dist/logs/consola.d.ts +1 -1
- package/dist/logs/consola.d.ts.map +1 -1
- package/dist/logs/consola.js +1 -1
- package/dist/logs/consola.js.map +1 -1
- package/dist/logs/console.d.ts +1 -1
- package/dist/logs/console.d.ts.map +1 -1
- package/dist/logs/console.js +5 -3
- package/dist/logs/console.js.map +1 -1
- package/dist/logs/otel.d.ts.map +1 -1
- package/dist/logs/otel.js +1 -3
- package/dist/logs/otel.js.map +1 -1
- package/dist/logs/pino.d.ts +1 -1
- package/dist/logs/pino.d.ts.map +1 -1
- package/dist/logs/pino.js +2 -3
- package/dist/logs/pino.js.map +1 -1
- package/dist/logs/winston.d.ts +1 -1
- package/dist/logs/winston.d.ts.map +1 -1
- package/dist/logs/winston.js +2 -3
- package/dist/logs/winston.js.map +1 -1
- package/dist/loose-logs.d.ts +13 -0
- package/dist/loose-logs.d.ts.map +1 -0
- package/dist/loose-logs.js +21 -0
- package/dist/loose-logs.js.map +1 -0
- package/dist/mcp-find.d.ts +2 -2
- package/dist/mcp-find.d.ts.map +1 -1
- package/dist/mcp-find.js +68 -26
- package/dist/mcp-find.js.map +1 -1
- package/dist/mcp-memory.d.ts +7 -0
- package/dist/mcp-memory.d.ts.map +1 -0
- package/dist/mcp-memory.js +10 -0
- package/dist/mcp-memory.js.map +1 -0
- package/dist/mcp-metrics.d.ts +2 -2
- package/dist/mcp-metrics.d.ts.map +1 -1
- package/dist/mcp-metrics.js +11 -9
- package/dist/mcp-metrics.js.map +1 -1
- package/dist/mcp-overview.d.ts +5 -0
- package/dist/mcp-overview.d.ts.map +1 -0
- package/dist/mcp-overview.js +71 -0
- package/dist/mcp-overview.js.map +1 -0
- package/dist/mcp-page.d.ts +28 -0
- package/dist/mcp-page.d.ts.map +1 -0
- package/dist/mcp-page.js +77 -0
- package/dist/mcp-page.js.map +1 -0
- package/dist/mcp-problems.d.ts +5 -0
- package/dist/mcp-problems.d.ts.map +1 -0
- package/dist/mcp-problems.js +56 -0
- package/dist/mcp-problems.js.map +1 -0
- package/dist/mcp-projects.d.ts +11 -0
- package/dist/mcp-projects.d.ts.map +1 -0
- package/dist/mcp-projects.js +54 -0
- package/dist/mcp-projects.js.map +1 -0
- package/dist/mcp-search.d.ts +5 -0
- package/dist/mcp-search.d.ts.map +1 -0
- package/dist/mcp-search.js +53 -0
- package/dist/mcp-search.js.map +1 -0
- package/dist/mcp-shared.d.ts +83 -4
- package/dist/mcp-shared.d.ts.map +1 -1
- package/dist/mcp-shared.js +3 -0
- package/dist/mcp-shared.js.map +1 -1
- package/dist/mcp-store.d.ts +27 -0
- package/dist/mcp-store.d.ts.map +1 -0
- package/dist/mcp-store.js +56 -0
- package/dist/mcp-store.js.map +1 -0
- package/dist/mcp-tags.d.ts +8 -0
- package/dist/mcp-tags.d.ts.map +1 -0
- package/dist/mcp-tags.js +22 -0
- package/dist/mcp-tags.js.map +1 -0
- package/dist/mcp-traces.d.ts +2 -2
- package/dist/mcp-traces.d.ts.map +1 -1
- package/dist/mcp-traces.js +37 -25
- package/dist/mcp-traces.js.map +1 -1
- package/dist/mcp-traffic.d.ts +5 -0
- package/dist/mcp-traffic.d.ts.map +1 -0
- package/dist/mcp-traffic.js +87 -0
- package/dist/mcp-traffic.js.map +1 -0
- package/dist/mcp.d.ts +7 -4
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +27 -8
- package/dist/mcp.js.map +1 -1
- package/dist/messaging/bullmq.d.ts +4 -0
- package/dist/messaging/bullmq.d.ts.map +1 -0
- package/dist/messaging/bullmq.js +137 -0
- package/dist/messaging/bullmq.js.map +1 -0
- package/dist/messaging/shared.d.ts +10 -4
- package/dist/messaging/shared.d.ts.map +1 -1
- package/dist/messaging/shared.js +13 -4
- package/dist/messaging/shared.js.map +1 -1
- package/dist/messaging/sqs-message.d.ts +35 -0
- package/dist/messaging/sqs-message.d.ts.map +1 -0
- package/dist/messaging/sqs-message.js +66 -0
- package/dist/messaging/sqs-message.js.map +1 -0
- package/dist/messaging/sqs.d.ts +4 -0
- package/dist/messaging/sqs.d.ts.map +1 -0
- package/dist/messaging/sqs.js +104 -0
- package/dist/messaging/sqs.js.map +1 -0
- package/dist/processor.d.ts +2 -1
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +8 -3
- package/dist/processor.js.map +1 -1
- package/dist/request-capture.d.ts +7 -1
- package/dist/request-capture.d.ts.map +1 -1
- package/dist/request-capture.js +14 -1
- package/dist/request-capture.js.map +1 -1
- package/dist/request-naming.d.ts +8 -0
- package/dist/request-naming.d.ts.map +1 -0
- package/dist/request-naming.js +29 -0
- package/dist/request-naming.js.map +1 -0
- package/dist/sampling.d.ts.map +1 -1
- package/dist/sampling.js +2 -2
- package/dist/sampling.js.map +1 -1
- package/dist/search-api.d.ts +8 -0
- package/dist/search-api.d.ts.map +1 -0
- package/dist/search-api.js +21 -0
- package/dist/search-api.js.map +1 -0
- package/dist/sourcemaps.d.ts +15 -0
- package/dist/sourcemaps.d.ts.map +1 -0
- package/dist/sourcemaps.js +68 -0
- package/dist/sourcemaps.js.map +1 -0
- package/dist/spans.d.ts +3 -0
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +9 -1
- package/dist/spans.js.map +1 -1
- package/dist/store-entries.d.ts +34 -0
- package/dist/store-entries.d.ts.map +1 -0
- package/dist/store-entries.js +70 -0
- package/dist/store-entries.js.map +1 -0
- package/dist/store.d.ts +4 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +19 -22
- package/dist/store.js.map +1 -1
- package/dist/tags-api.d.ts +9 -0
- package/dist/tags-api.d.ts.map +1 -0
- package/dist/tags-api.js +16 -0
- package/dist/tags-api.js.map +1 -0
- package/dist/tracing.d.ts +6 -0
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +11 -7
- package/dist/tracing.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +3 -2
- package/dist/ui.js.map +1 -1
- package/dist/wizelens.d.ts +3 -1
- package/dist/wizelens.d.ts.map +1 -1
- package/dist/wizelens.js +29 -13
- package/dist/wizelens.js.map +1 -1
- package/package.json +14 -4
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Module from "node:module";
|
|
2
|
+
import { transformSource } from "./esm-source.js";
|
|
3
|
+
const api = Module;
|
|
4
|
+
const cjs = [];
|
|
5
|
+
const builtins = new Map();
|
|
6
|
+
const esm = [];
|
|
7
|
+
const report = (file, err) => console.warn(`[wizelens] Could not hook ${file}: ${String(err)}`);
|
|
8
|
+
function afterCompile(mod, filename) {
|
|
9
|
+
const file = filename.replaceAll("\\", "/");
|
|
10
|
+
for (const { pattern, fn } of cjs) {
|
|
11
|
+
if (!pattern.test(file))
|
|
12
|
+
continue;
|
|
13
|
+
try {
|
|
14
|
+
const next = fn(mod.exports, file);
|
|
15
|
+
if (next !== undefined)
|
|
16
|
+
mod.exports = next;
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
report(file, err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function runBuiltin(name) {
|
|
24
|
+
const fn = builtins.get(name);
|
|
25
|
+
if (!fn)
|
|
26
|
+
return;
|
|
27
|
+
builtins.delete(name);
|
|
28
|
+
try {
|
|
29
|
+
fn(process.getBuiltinModule(`node:${name}`), `node:${name}`);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
report(`node:${name}`, err);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Every CommonJS file runs through _compile, whether it was required or imported from ESM.
|
|
36
|
+
function hookCommonJs() {
|
|
37
|
+
const compile = api.prototype._compile;
|
|
38
|
+
api.prototype._compile = function wizelensCompile(...args) {
|
|
39
|
+
const out = compile.apply(this, args);
|
|
40
|
+
if (typeof args[1] === "string")
|
|
41
|
+
afterCompile(this, args[1]);
|
|
42
|
+
return out;
|
|
43
|
+
};
|
|
44
|
+
const load = api._load;
|
|
45
|
+
api._load = function wizelensLoad(request, ...rest) {
|
|
46
|
+
const out = load.call(this, request, ...rest);
|
|
47
|
+
if (builtins.size > 0)
|
|
48
|
+
runBuiltin(request.replace(/^node:/, ""));
|
|
49
|
+
return out;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const syncLoad = (url, context, next) => {
|
|
53
|
+
const result = next(url, context);
|
|
54
|
+
if (url.startsWith("node:"))
|
|
55
|
+
runBuiltin(url.slice(5));
|
|
56
|
+
return transformSource(url, result, esm);
|
|
57
|
+
};
|
|
58
|
+
// ES modules have no exports object to patch, so a short line is added to their source instead.
|
|
59
|
+
function hookEsm() {
|
|
60
|
+
if (api.registerHooks)
|
|
61
|
+
api.registerHooks({ load: syncLoad });
|
|
62
|
+
else
|
|
63
|
+
api.register?.(new URL("./esm-loader.js", import.meta.url), { data: esm });
|
|
64
|
+
}
|
|
65
|
+
const ESM_KEY = Symbol.for("wizeworks.wizelens.auto.esm");
|
|
66
|
+
const bindings = new Map();
|
|
67
|
+
function dispatchBinding(id, value) {
|
|
68
|
+
try {
|
|
69
|
+
return bindings.get(id)?.(value);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
report(id, err);
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Install the module hooks. Call once, after every onLoad, onBuiltin, and onEsm call. */
|
|
77
|
+
export function installModuleHooks() {
|
|
78
|
+
globalThis[ESM_KEY] = dispatchBinding;
|
|
79
|
+
hookCommonJs();
|
|
80
|
+
hookEsm();
|
|
81
|
+
}
|
|
82
|
+
/** Run `fn` with a binding an ES module patch hands over (see replaceBinding). A returned value replaces it. */
|
|
83
|
+
export const onEsmBinding = (id, fn) => void bindings.set(id, fn);
|
|
84
|
+
/** Run `fn` with the exports of every CommonJS file whose path (forward slashes) matches. */
|
|
85
|
+
export const onLoad = (pattern, fn) => void cjs.push({ pattern, fn });
|
|
86
|
+
/** Run `fn` once with a built-in module ("sqlite"), when the app first loads it. */
|
|
87
|
+
export const onBuiltin = (name, fn) => void builtins.set(name, fn);
|
|
88
|
+
/** Add `code` to the end of every ES module whose URL matches. */
|
|
89
|
+
export const onEsm = (patch) => void esm.push(patch);
|
|
90
|
+
//# sourceMappingURL=module-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-hooks.js","sourceRoot":"","sources":["../../src/auto/module-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @nestjs/core's RouterExceptionFilters: every exception handler it makes records what Nest's filters answer. */
|
|
2
|
+
export declare function hookNestFilters(exports: unknown): void;
|
|
3
|
+
/** @nestjs/core's NestApplication: the WizeLens interceptor is added when the app starts, before its routes are made. */
|
|
4
|
+
export declare function hookNestApplication(exports: unknown): void;
|
|
5
|
+
/** NestJS on Express or Fastify. The request itself is captured by the server and framework hooks. */
|
|
6
|
+
export declare function hookNest(): void;
|
|
7
|
+
//# sourceMappingURL=nest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.d.ts","sourceRoot":"","sources":["../../src/auto/nest.ts"],"names":[],"mappings":"AAOA,kHAAkH;AAClH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGtD;AAED,yHAAyH;AACzH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ1D;AAED,sGAAsG;AACtG,wBAAgB,QAAQ,IAAI,IAAI,CAG/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { patchMethod } from "../adapters/registry.js";
|
|
2
|
+
import { addNestHooks } from "../frameworks/nest.js";
|
|
3
|
+
import { hookExceptionFilters } from "../frameworks/nest-errors.js";
|
|
4
|
+
import { onLoad } from "./module-hooks.js";
|
|
5
|
+
/** @nestjs/core's RouterExceptionFilters: every exception handler it makes records what Nest's filters answer. */
|
|
6
|
+
export function hookNestFilters(exports) {
|
|
7
|
+
const proto = exports?.RouterExceptionFilters?.prototype;
|
|
8
|
+
if (proto)
|
|
9
|
+
hookExceptionFilters(proto);
|
|
10
|
+
}
|
|
11
|
+
/** @nestjs/core's NestApplication: the WizeLens interceptor is added when the app starts, before its routes are made. */
|
|
12
|
+
export function hookNestApplication(exports) {
|
|
13
|
+
const proto = exports?.NestApplication?.prototype;
|
|
14
|
+
if (!proto)
|
|
15
|
+
return;
|
|
16
|
+
patchMethod(proto, "init", (init) => function (...args) {
|
|
17
|
+
addNestHooks(this);
|
|
18
|
+
return init.apply(this, args);
|
|
19
|
+
}, "auto-nest");
|
|
20
|
+
}
|
|
21
|
+
/** NestJS on Express or Fastify. The request itself is captured by the server and framework hooks. */
|
|
22
|
+
export function hookNest() {
|
|
23
|
+
onLoad(/\/node_modules\/@nestjs\/core\/router\/router-exception-filters\.js$/, hookNestFilters);
|
|
24
|
+
onLoad(/\/node_modules\/@nestjs\/core\/nest-application\.js$/, hookNestApplication);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=nest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.js","sourceRoot":"","sources":["../../src/auto/nest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,kHAAkH;AAClH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,KAAK,GAAI,OAAqD,EAAE,sBAAsB,EAAE,SAAS,CAAC;IACxG,IAAI,KAAK;QAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,KAAK,GAAI,OAA8C,EAAE,eAAe,EAAE,SAAS,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAClC,UAAyB,GAAG,IAAe;QACzC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,WAAW,CAAC,CAAC;AACpB,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,sEAAsE,EAAE,eAAe,CAAC,CAAC;IAChG,MAAM,CAAC,sDAAsD,EAAE,mBAAmB,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type AdapterParts } from "../adapters/registry.js";
|
|
2
|
+
import type { WizeLens, WizeLensOptions } from "../types.js";
|
|
3
|
+
/** The instance that gets the data now, and whether the auto install made it. */
|
|
4
|
+
export interface Owner {
|
|
5
|
+
wizelens: WizeLens;
|
|
6
|
+
parts: AdapterParts;
|
|
7
|
+
auto: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Set the auto install's options. Nothing starts until the process serves or records something. */
|
|
10
|
+
export declare function configureAuto(o: WizeLensOptions): void;
|
|
11
|
+
/** The instance to use now: the app's own when it made one, else the auto instance, started on first use. Null when off. */
|
|
12
|
+
export declare function currentOwner(): Owner | null;
|
|
13
|
+
/** True when the auto instance gets the data, so the auto request hooks must capture. */
|
|
14
|
+
export declare const autoOwns: () => boolean;
|
|
15
|
+
/** The app installed WizeLens in code. It wins: the auto instance stops, and the hooks hand their data to it. */
|
|
16
|
+
export declare function handOver(wizelens: WizeLens, parts: AdapterParts | null): void;
|
|
17
|
+
/** Forget every instance. For tests. */
|
|
18
|
+
export declare function resetOwner(): void;
|
|
19
|
+
//# sourceMappingURL=owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/auto/owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG7D,iFAAiF;AACjF,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAQD,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAEtD;AAWD,4HAA4H;AAC5H,wBAAgB,YAAY,IAAI,KAAK,GAAG,IAAI,CAO3C;AAED,yFAAyF;AACzF,eAAO,MAAM,QAAQ,QAAO,OAAwC,CAAC;AAErE,iHAAiH;AACjH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAQ7E;AAED,wCAAwC;AACxC,wBAAgB,UAAU,IAAI,IAAI,CAKjC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { partsOf } from "../adapters/registry.js";
|
|
2
|
+
import { hubUrlOf } from "../hub-connect.js";
|
|
3
|
+
import { buildWizeLens } from "../wizelens.js";
|
|
4
|
+
let options = null;
|
|
5
|
+
let auto = null;
|
|
6
|
+
let code = null;
|
|
7
|
+
const log = (message) => console.info(`[wizelens] ${message}`);
|
|
8
|
+
/** Set the auto install's options. Nothing starts until the process serves or records something. */
|
|
9
|
+
export function configureAuto(o) {
|
|
10
|
+
options = o;
|
|
11
|
+
}
|
|
12
|
+
function startAuto(o) {
|
|
13
|
+
const wizelens = buildWizeLens(o);
|
|
14
|
+
const parts = partsOf(wizelens);
|
|
15
|
+
if (!parts)
|
|
16
|
+
return null;
|
|
17
|
+
const hub = hubUrlOf(o);
|
|
18
|
+
log(`Auto install on for ${o.serviceName}${hub ? `, sending to ${hub}` : ""}.`);
|
|
19
|
+
return { wizelens, parts, auto: true };
|
|
20
|
+
}
|
|
21
|
+
/** The instance to use now: the app's own when it made one, else the auto instance, started on first use. Null when off. */
|
|
22
|
+
export function currentOwner() {
|
|
23
|
+
if (code)
|
|
24
|
+
return code.parts ? { wizelens: code.wizelens, parts: code.parts, auto: false } : null;
|
|
25
|
+
if (!auto && options) {
|
|
26
|
+
auto = startAuto(options);
|
|
27
|
+
options = null;
|
|
28
|
+
}
|
|
29
|
+
return auto;
|
|
30
|
+
}
|
|
31
|
+
/** True when the auto instance gets the data, so the auto request hooks must capture. */
|
|
32
|
+
export const autoOwns = () => currentOwner()?.auto === true;
|
|
33
|
+
/** The app installed WizeLens in code. It wins: the auto instance stops, and the hooks hand their data to it. */
|
|
34
|
+
export function handOver(wizelens, parts) {
|
|
35
|
+
if (code)
|
|
36
|
+
return;
|
|
37
|
+
code = { wizelens, parts };
|
|
38
|
+
options = null;
|
|
39
|
+
const stopped = auto;
|
|
40
|
+
auto = null;
|
|
41
|
+
log(`${wizelens.serviceName} installs WizeLens in code, so the auto install steps aside.`);
|
|
42
|
+
if (stopped)
|
|
43
|
+
void stopped.wizelens.shutdown();
|
|
44
|
+
}
|
|
45
|
+
/** Forget every instance. For tests. */
|
|
46
|
+
export function resetOwner() {
|
|
47
|
+
void auto?.wizelens.shutdown();
|
|
48
|
+
options = null;
|
|
49
|
+
auto = null;
|
|
50
|
+
code = null;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/auto/owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS/C,IAAI,OAAO,GAA2B,IAAI,CAAC;AAC3C,IAAI,IAAI,GAAiB,IAAI,CAAC;AAC9B,IAAI,IAAI,GAA8D,IAAI,CAAC;AAE3E,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;AAEvE,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,CAAkB;IAC9C,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,CAAkB;IACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,GAAG,CAAC,uBAAuB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,YAAY;IAC1B,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;QACrB,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAY,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC;AAErE,iHAAiH;AACjH,MAAM,UAAU,QAAQ,CAAC,QAAkB,EAAE,KAA0B;IACrE,IAAI,IAAI;QAAE,OAAO;IACjB,IAAI,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3B,OAAO,GAAG,IAAI,CAAC;IACf,MAAM,OAAO,GAAG,IAAI,CAAC;IACrB,IAAI,GAAG,IAAI,CAAC;IACZ,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,8DAA8D,CAAC,CAAC;IAC3F,IAAI,OAAO;QAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,UAAU;IACxB,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC;IACf,IAAI,GAAG,IAAI,CAAC;IACZ,IAAI,GAAG,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/auto/prisma.ts"],"names":[],"mappings":"AAkDA,iEAAiE;AACjE,wBAAgB,UAAU,IAAI,IAAI,CAMjC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { prismaExtension } from "../adapters/prisma.js";
|
|
2
|
+
import { autoHandle } from "./handle.js";
|
|
3
|
+
import { onLoad } from "./module-hooks.js";
|
|
4
|
+
import { currentOwner } from "./owner.js";
|
|
5
|
+
const WRAPPED = Symbol.for("wizeworks.wizelens.auto.prisma");
|
|
6
|
+
// Extended clients drop $on and $use, so those still go to the plain client.
|
|
7
|
+
const KEEP_ON_BASE = new Set(["$on", "$use"]);
|
|
8
|
+
// A code install adds its own extension, so this one only traces while the auto instance owns the data.
|
|
9
|
+
function autoExtension() {
|
|
10
|
+
const traced = prismaExtension(autoHandle);
|
|
11
|
+
const $allOperations = (call) => (currentOwner()?.auto ? traced.query.$allOperations(call) : call.query(call.args));
|
|
12
|
+
return { name: traced.name, query: { $allOperations } };
|
|
13
|
+
}
|
|
14
|
+
function extend(base) {
|
|
15
|
+
const extended = base.$extends?.(autoExtension());
|
|
16
|
+
if (!extended)
|
|
17
|
+
return base;
|
|
18
|
+
return new Proxy(extended, {
|
|
19
|
+
get: (target, key) => {
|
|
20
|
+
if (!KEEP_ON_BASE.has(key))
|
|
21
|
+
return Reflect.get(target, key);
|
|
22
|
+
const value = base[key];
|
|
23
|
+
return typeof value === "function" ? value.bind(base) : value;
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** A PrismaClient class whose instances trace every operation, through the same extension as `prismaExtension`. */
|
|
28
|
+
function wrapClient(Base) {
|
|
29
|
+
if (typeof Base !== "function" || Base[WRAPPED])
|
|
30
|
+
return undefined;
|
|
31
|
+
class WizeLensPrismaClient extends Base {
|
|
32
|
+
constructor(...args) {
|
|
33
|
+
super(...args);
|
|
34
|
+
try {
|
|
35
|
+
return extend(this);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// A client that cannot be extended still works, untraced.
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
Object.defineProperty(WizeLensPrismaClient, WRAPPED, { value: true });
|
|
43
|
+
Object.defineProperty(WizeLensPrismaClient, "name", { value: "PrismaClient" });
|
|
44
|
+
return WizeLensPrismaClient;
|
|
45
|
+
}
|
|
46
|
+
/** Prisma Client from @prisma/client (the classic generator). */
|
|
47
|
+
export function hookPrisma() {
|
|
48
|
+
onLoad(/\/node_modules\/@prisma\/client\/(default|index)\.js$/, (exports) => {
|
|
49
|
+
const e = exports;
|
|
50
|
+
const wrapped = wrapClient(e.PrismaClient);
|
|
51
|
+
if (wrapped)
|
|
52
|
+
e.PrismaClient = wrapped;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=prisma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/auto/prisma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAE7D,6EAA6E;AAC7E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAI/D,wGAAwG;AACxG,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1H,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,mHAAmH;AACnH,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,OAAO,IAAI,KAAK,UAAU,IAAK,IAA2C,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1G,MAAM,oBAAqB,SAAS,IAA2C;QAC7E,YAAY,GAAG,IAAe;YAC5B,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,IAAyB,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;QACH,CAAC;KACF;IACD,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/E,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,uDAAuD,EAAE,CAAC,OAAO,EAAE,EAAE;QAC1E,MAAM,CAAC,GAAG,OAAqC,CAAC;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,OAAO;YAAE,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/auto/sqlite.ts"],"names":[],"mappings":"AA4BA,mDAAmD;AACnD,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { patchMethod } from "../adapters/registry.js";
|
|
2
|
+
import { instrumentBetterSqlite3, instrumentNodeSqlite } from "../adapters/sqlite.js";
|
|
3
|
+
import { autoHandle } from "./handle.js";
|
|
4
|
+
import { onBuiltin, onLoad } from "./module-hooks.js";
|
|
5
|
+
const seen = new WeakSet();
|
|
6
|
+
// The SQLite adapter needs a database: it reads the statement class from one. So each database is instrumented on its first call.
|
|
7
|
+
function patchDatabase(Database, instrument) {
|
|
8
|
+
const proto = Database?.prototype;
|
|
9
|
+
if (!proto)
|
|
10
|
+
return;
|
|
11
|
+
for (const name of ["prepare", "exec"]) {
|
|
12
|
+
patchMethod(proto, name, (original) => function (...args) {
|
|
13
|
+
if (seen.has(this))
|
|
14
|
+
return original.apply(this, args);
|
|
15
|
+
seen.add(this);
|
|
16
|
+
try {
|
|
17
|
+
instrument(autoHandle, this);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return original.apply(this, args);
|
|
21
|
+
}
|
|
22
|
+
return this[name](...args);
|
|
23
|
+
}, "auto-sqlite");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** better-sqlite3 and the built-in node:sqlite. */
|
|
27
|
+
export function hookSqlite() {
|
|
28
|
+
onLoad(/\/node_modules\/better-sqlite3\/lib\/index\.js$/, (Database) => void patchDatabase(Database, instrumentBetterSqlite3));
|
|
29
|
+
onBuiltin("sqlite", (sqlite) => void patchDatabase(sqlite.DatabaseSync, instrumentNodeSqlite));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/auto/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;AAEnC,kIAAkI;AAClI,SAAS,aAAa,CAAC,QAAiB,EAAE,UAAsB;IAC9D,MAAM,KAAK,GAAI,QAA0C,EAAE,SAAS,CAAC;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpC,UAA8D,GAAG,IAAe;YAC9E,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9B,CAAC,EAAE,aAAa,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,iDAAiD,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC/H,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,aAAa,CAAE,MAAqC,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC;AACjI,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AdapterParts } from "../adapters/registry.js";
|
|
2
|
+
import type { WizeLens } from "../types.js";
|
|
3
|
+
/** The auto install's link to this process. It lives on globalThis, so a second copy of the package finds it. */
|
|
4
|
+
export interface AutoHolder {
|
|
5
|
+
/** The app made its own instance: the code install wins. `parts` is null when that instance is off. */
|
|
6
|
+
codeInstall(wizelens: WizeLens, parts: AdapterParts | null): void;
|
|
7
|
+
}
|
|
8
|
+
/** The auto install of this process, if `--import @wizeworks/lens-node/auto` ran. */
|
|
9
|
+
export declare const autoHolder: () => AutoHolder | undefined;
|
|
10
|
+
/** Claim the process for one auto install. False when another copy already did. */
|
|
11
|
+
export declare function claimAuto(holder: AutoHolder): boolean;
|
|
12
|
+
/** Tell the auto install, if any, that the app installed WizeLens in code. */
|
|
13
|
+
export declare function noteCodeInstall(wizelens: WizeLens, parts: AdapterParts | null): void;
|
|
14
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auto/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,iHAAiH;AACjH,MAAM,WAAW,UAAU;IACzB,uGAAuG;IACvG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;CACnE;AAKD,qFAAqF;AACrF,eAAO,MAAM,UAAU,QAAO,UAAU,GAAG,SAAwC,CAAC;AAEpF,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAKrD;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAEpF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const KEY = Symbol.for("wizeworks.wizelens.auto");
|
|
2
|
+
/** The auto install of this process, if `--import @wizeworks/lens-node/auto` ran. */
|
|
3
|
+
export const autoHolder = () => globalThis[KEY];
|
|
4
|
+
/** Claim the process for one auto install. False when another copy already did. */
|
|
5
|
+
export function claimAuto(holder) {
|
|
6
|
+
const g = globalThis;
|
|
7
|
+
if (g[KEY])
|
|
8
|
+
return false;
|
|
9
|
+
g[KEY] = holder;
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
/** Tell the auto install, if any, that the app installed WizeLens in code. */
|
|
13
|
+
export function noteCodeInstall(wizelens, parts) {
|
|
14
|
+
autoHolder()?.codeInstall(wizelens, parts);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/auto/state.ts"],"names":[],"mappings":"AASA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAGlD,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,GAA2B,EAAE,CAAE,UAAqB,CAAC,GAAG,CAAC,CAAC;AAEpF,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC1C,MAAM,CAAC,GAAG,UAAoB,CAAC;IAC/B,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,KAA0B;IAC5E,UAAU,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/auto.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":""}
|
package/dist/auto.js
ADDED
package/dist/auto.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.js","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":"AAAA,uIAAuI;AACvI,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,WAAW,EAAE,CAAC"}
|
package/dist/capture.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import { type CaptureDeps } from "./request-capture.js";
|
|
3
|
-
import type { Next } from "./types.js";
|
|
3
|
+
import type { Next, Req } from "./types.js";
|
|
4
4
|
export type { CaptureDeps } from "./request-capture.js";
|
|
5
5
|
export { requestSpan } from "./request-capture.js";
|
|
6
|
+
/** Express route template, including the mount path of nested routers. */
|
|
7
|
+
export declare function expressRoute(req: Req): string | undefined;
|
|
6
8
|
/** Express / Connect middleware: one server span per request, plus the WizeLens routes. */
|
|
7
9
|
export declare function createMiddleware(d: CaptureDeps): (req: IncomingMessage, res: ServerResponse, next: Next) => void;
|
|
8
10
|
//# sourceMappingURL=capture.d.ts.map
|
package/dist/capture.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAkB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAkB,KAAK,WAAW,EAA+D,MAAM,sBAAsB,CAAC;AAGrI,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,SACb,eAAe,OAAO,cAAc,QAAQ,IAAI,KAAG,IAAI,CAgBxF"}
|
package/dist/capture.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { context } from "@opentelemetry/api";
|
|
2
|
-
import { captureRequest, isOwnPath,
|
|
2
|
+
import { captureRequest, isOwnPath, isUntraced, pathOf, serveOwnPath, withoutTracing } from "./request-capture.js";
|
|
3
3
|
import { watchRoute } from "./route-timing.js";
|
|
4
4
|
import { recordOn } from "./spans.js";
|
|
5
5
|
export { requestSpan } from "./request-capture.js";
|
|
6
6
|
/** Express route template, including the mount path of nested routers. */
|
|
7
|
-
function expressRoute(req) {
|
|
7
|
+
export function expressRoute(req) {
|
|
8
8
|
const routePath = req.route?.path;
|
|
9
9
|
return typeof routePath === "string" ? `${req.baseUrl ?? ""}${routePath}` : undefined;
|
|
10
10
|
}
|
|
@@ -15,8 +15,8 @@ export function createMiddleware(d) {
|
|
|
15
15
|
const rawUrl = r.originalUrl ?? r.url ?? "/";
|
|
16
16
|
if (isOwnPath(d, pathOf(rawUrl)))
|
|
17
17
|
return void serveOwnPath(d, req, res);
|
|
18
|
-
if (
|
|
19
|
-
return next
|
|
18
|
+
if (isUntraced(req))
|
|
19
|
+
return withoutTracing(next);
|
|
20
20
|
const { span, ctx, startedAt } = captureRequest(d, req, res, rawUrl, () => expressRoute(r));
|
|
21
21
|
watchRoute(req, "route", span, startedAt);
|
|
22
22
|
context.with(ctx, () => {
|
package/dist/capture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAoB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAoB,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrI,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;IAClC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxF,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,CAAc;IAC7C,OAAO,SAAS,UAAU,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAU;QAC9E,MAAM,CAAC,GAAG,GAAU,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;QAC7C,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,KAAK,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxE,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC;YACT,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACpB,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Attributes, type Span as OtelSpan } from "@opentelemetry/api";
|
|
2
|
+
import type { TraceStore } from "./store.js";
|
|
3
|
+
/** Called with the trace id and the WizeLens endpoint a called service reported. */
|
|
4
|
+
export type OnRemote = (traceId: string, endpoint: string) => void;
|
|
5
|
+
/** `http.request.method`: upper case when known, else "_OTHER". */
|
|
6
|
+
export declare const clientMethod: (original: string) => string;
|
|
7
|
+
/** The span name before the store renames it to "METHOD host/path". */
|
|
8
|
+
export declare const clientSpanName: (method: string) => string;
|
|
9
|
+
/** Attributes known when an outgoing call starts. */
|
|
10
|
+
export declare function clientRequestAttributes(originalMethod: string, url: URL, userAgent?: string): Attributes;
|
|
11
|
+
/** The response status. 400 and up is an error with `error.type` set to the status. */
|
|
12
|
+
export declare function setClientStatus(span: OtelSpan, status: number): void;
|
|
13
|
+
/** True when the caller cancelled the call (an AbortSignal). That is not an error. */
|
|
14
|
+
export declare function isAbort(err: unknown): boolean;
|
|
15
|
+
/** A failed call: the exception, `error.type` from the error code or name, and an error status. */
|
|
16
|
+
export declare function setClientError(span: OtelSpan, err: unknown): void;
|
|
17
|
+
/** Keep the WizeLens endpoint a called service reported, so its part of the trace can be federated. */
|
|
18
|
+
export declare function remoteNoter(store: TraceStore, selfEndpoints: ReadonlySet<string>): OnRemote;
|
|
19
|
+
//# sourceMappingURL=client-attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-attributes.d.ts","sourceRoot":"","sources":["../src/client-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7C,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnE,mEAAmE;AACnE,eAAO,MAAM,YAAY,aAAc,MAAM,KAAG,MAAyF,CAAC;AAE1I,uEAAuE;AACvE,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,MAAiD,CAAC;AAElG,qDAAqD;AACrD,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAexG;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKpE;AAED,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG7C;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAMjE;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,CAI3F"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
2
|
+
// The fetch spans come from @opentelemetry/instrumentation-undici. These helpers give the node:http spans the same shape.
|
|
3
|
+
const KNOWN_METHODS = new Set(["CONNECT", "OPTIONS", "HEAD", "GET", "POST", "PUT", "PATCH", "DELETE", "TRACE", "QUERY"]);
|
|
4
|
+
const DEFAULT_PORTS = { http: 80, https: 443 };
|
|
5
|
+
/** `http.request.method`: upper case when known, else "_OTHER". */
|
|
6
|
+
export const clientMethod = (original) => (KNOWN_METHODS.has(original.toUpperCase()) ? original.toUpperCase() : "_OTHER");
|
|
7
|
+
/** The span name before the store renames it to "METHOD host/path". */
|
|
8
|
+
export const clientSpanName = (method) => (method === "_OTHER" ? "HTTP" : method);
|
|
9
|
+
/** Attributes known when an outgoing call starts. */
|
|
10
|
+
export function clientRequestAttributes(originalMethod, url, userAgent) {
|
|
11
|
+
const scheme = url.protocol.replace(":", "");
|
|
12
|
+
const port = Number(url.port || DEFAULT_PORTS[scheme]);
|
|
13
|
+
const attributes = {
|
|
14
|
+
"http.request.method": clientMethod(originalMethod),
|
|
15
|
+
"http.request.method_original": originalMethod,
|
|
16
|
+
"url.full": url.toString(),
|
|
17
|
+
"url.path": url.pathname,
|
|
18
|
+
"url.query": url.search,
|
|
19
|
+
"url.scheme": scheme,
|
|
20
|
+
"server.address": url.hostname,
|
|
21
|
+
};
|
|
22
|
+
if (Number.isFinite(port))
|
|
23
|
+
attributes["server.port"] = port;
|
|
24
|
+
if (userAgent)
|
|
25
|
+
attributes["user_agent.original"] = userAgent;
|
|
26
|
+
return attributes;
|
|
27
|
+
}
|
|
28
|
+
/** The response status. 400 and up is an error with `error.type` set to the status. */
|
|
29
|
+
export function setClientStatus(span, status) {
|
|
30
|
+
span.setAttribute("http.response.status_code", status);
|
|
31
|
+
if (status < 400)
|
|
32
|
+
return;
|
|
33
|
+
span.setAttribute("error.type", String(status));
|
|
34
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
35
|
+
}
|
|
36
|
+
/** True when the caller cancelled the call (an AbortSignal). That is not an error. */
|
|
37
|
+
export function isAbort(err) {
|
|
38
|
+
const e = err;
|
|
39
|
+
return !!e && (e.name === "AbortError" || e.code === "ABORT_ERR" || e.code === 20);
|
|
40
|
+
}
|
|
41
|
+
/** A failed call: the exception, `error.type` from the error code or name, and an error status. */
|
|
42
|
+
export function setClientError(span, err) {
|
|
43
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
44
|
+
const code = error.code;
|
|
45
|
+
span.setAttribute("error.type", typeof code === "string" && code ? code : error.name || "Error");
|
|
46
|
+
span.recordException(error);
|
|
47
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
48
|
+
}
|
|
49
|
+
/** Keep the WizeLens endpoint a called service reported, so its part of the trace can be federated. */
|
|
50
|
+
export function remoteNoter(store, selfEndpoints) {
|
|
51
|
+
return (traceId, endpoint) => {
|
|
52
|
+
if (endpoint && !selfEndpoints.has(endpoint))
|
|
53
|
+
store.addRemote(traceId, endpoint);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=client-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-attributes.js","sourceRoot":"","sources":["../src/client-attributes.ts"],"names":[],"mappings":"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"}
|
package/dist/client-spans.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type LogRecord, type Span } from "@wizeworks/lens-core";
|
|
2
|
-
/**
|
|
3
|
-
export declare function
|
|
4
|
-
/** Validate and redact one browser
|
|
5
|
-
export declare function
|
|
2
|
+
/** How far (ms) to move a browser's times onto this server's clock: 0 when it sent no clock, or one close enough. */
|
|
3
|
+
export declare function browserClockOffset(sentAt: unknown, receivedAt: number): number;
|
|
4
|
+
/** Validate and redact one span posted by the browser, moved by `shiftMs` (see browserClockOffset). Returns null when it is not a valid span. */
|
|
5
|
+
export declare function sanitizeClientSpan(raw: unknown, redactKeys: readonly string[], shiftMs?: number): Span | null;
|
|
6
|
+
/** Validate and redact one browser log line, moved by `shiftMs`. Returns null when it has no valid trace. */
|
|
7
|
+
export declare function sanitizeClientLog(raw: unknown, redactKeys: readonly string[], shiftMs?: number): {
|
|
6
8
|
traceId: string;
|
|
7
9
|
log: LogRecord;
|
|
8
10
|
} | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-spans.d.ts","sourceRoot":"","sources":["../src/client-spans.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,IAAI,EAKV,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client-spans.d.ts","sourceRoot":"","sources":["../src/client-spans.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,IAAI,EAKV,MAAM,sBAAsB,CAAC;AAa9B,qHAAqH;AACrH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK9E;AAqBD,iJAAiJ;AACjJ,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,SAAI,GAAG,IAAI,GAAG,IAAI,CAqBxG;AAED,6GAA6G;AAC7G,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,SAAI,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CActI;AAED,iJAAiJ;AACjJ,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS9E"}
|