@reprova/sdk 0.2.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +293 -11
- package/dist/context.d.ts +17 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +18 -0
- package/dist/context.js.map +1 -1
- package/dist/drizzle.d.ts +33 -0
- package/dist/drizzle.d.ts.map +1 -0
- package/dist/drizzle.js +194 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/knex.d.ts +5 -0
- package/dist/knex.d.ts.map +1 -0
- package/dist/knex.js +83 -0
- package/dist/knex.js.map +1 -0
- package/dist/kysely.d.ts +22 -0
- package/dist/kysely.d.ts.map +1 -0
- package/dist/kysely.js +172 -0
- package/dist/kysely.js.map +1 -0
- package/dist/nest.d.ts +18 -0
- package/dist/nest.d.ts.map +1 -0
- package/dist/nest.js +94 -0
- package/dist/nest.js.map +1 -0
- package/dist/proto.gen.d.ts +75 -1
- package/dist/proto.gen.d.ts.map +1 -1
- package/dist/registry.d.ts +22 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +70 -0
- package/dist/registry.js.map +1 -0
- package/dist/sdk.d.ts +30 -4
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +482 -16
- package/dist/sdk.js.map +1 -1
- package/dist/sequelize.d.ts +5 -0
- package/dist/sequelize.d.ts.map +1 -0
- package/dist/sequelize.js +105 -0
- package/dist/sequelize.js.map +1 -0
- package/dist/typeorm.d.ts +2 -0
- package/dist/typeorm.d.ts.map +1 -0
- package/dist/typeorm.js +65 -0
- package/dist/typeorm.js.map +1 -0
- package/package.json +19 -1
package/dist/sdk.js
CHANGED
|
@@ -1,34 +1,371 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import https from 'node:https';
|
|
1
3
|
import { contextStorage } from './context.js';
|
|
4
|
+
import { registerContext, completeContext, snapshotCohort } from './registry.js';
|
|
2
5
|
import { BatchTransport } from './transport.js';
|
|
3
6
|
import { parseStack, generateTraceId, stripHeaders, captureHeaders } from './stack.js';
|
|
7
|
+
import { createPrismaExtension } from './prisma.js';
|
|
8
|
+
import { createNestExceptionFilter } from './nest.js';
|
|
4
9
|
let instance = null;
|
|
10
|
+
// Zero-code-change async error capture: Express 4 discards the promise an
|
|
11
|
+
// async handler returns, so a rejection never reaches error middleware unless
|
|
12
|
+
// the app hand-plumbs next(err). We patch the router's Layer dispatch (the
|
|
13
|
+
// same semantics Express 5's router ships natively) so every handler's
|
|
14
|
+
// returned promise gets a rejection-forwarder attached automatically.
|
|
15
|
+
const kAsyncWrapped = Symbol('reprova.asyncWrapped');
|
|
16
|
+
// Apps we've already probed (added even when probing no-ops, e.g. Express 5).
|
|
17
|
+
const patchedApps = new WeakSet();
|
|
18
|
+
// Layer prototypes already patched — one per physical express copy.
|
|
19
|
+
const patchedLayerProtos = new WeakSet();
|
|
20
|
+
// Best-effort auto-detection, no app code changes required: req.auth is the
|
|
21
|
+
// express-oauth2-jwt-bearer / Auth0 convention; req.user is what Passport
|
|
22
|
+
// and the overwhelming majority of hand-rolled Express JWT middleware
|
|
23
|
+
// assigns instead (`req.user = decoded` right after verifying the token).
|
|
24
|
+
// req.auth wins when both are present since it's the more specific,
|
|
25
|
+
// auth-only convention — req.user sometimes carries a broader profile.
|
|
26
|
+
// Apps using neither (a custom property, a non-Express framework) still
|
|
27
|
+
// need the explicit setAuthClaims() escape hatch from context.ts.
|
|
28
|
+
function detectAuthClaims(req) {
|
|
29
|
+
return req.auth ?? req.user;
|
|
30
|
+
}
|
|
31
|
+
// refreshRequestSnapshot re-reads body and auth claims from the live req at
|
|
32
|
+
// capture time. The request middleware runs at the very front of the stack
|
|
33
|
+
// (before body parsers and auth middleware), so its eager snapshot can miss
|
|
34
|
+
// req.body/req.auth/req.user — by the time anything is captured, all three
|
|
35
|
+
// are final. Mutating ctx.request in place keeps cohort snapshots consistent
|
|
36
|
+
// too.
|
|
37
|
+
function refreshRequestSnapshot(ctx) {
|
|
38
|
+
const req = ctx.rawRequest;
|
|
39
|
+
if (!req)
|
|
40
|
+
return;
|
|
41
|
+
if (req.body !== undefined) {
|
|
42
|
+
ctx.request.body = typeof req.body === 'string' ? req.body : JSON.stringify(req.body ?? '');
|
|
43
|
+
}
|
|
44
|
+
const claims = detectAuthClaims(req);
|
|
45
|
+
if (claims !== undefined && ctx.request.authClaims === undefined) {
|
|
46
|
+
ctx.request.authClaims = claims;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Universal HTTP instrumentation: wrap the 'request' event on node's own
|
|
50
|
+
// http/https servers, so EVERY Node app — vanilla http.createServer, Koa,
|
|
51
|
+
// Fastify, Express — runs its request handling inside a Reprova context.
|
|
52
|
+
// Framework middleware becomes an enrichment, not a requirement. Installed
|
|
53
|
+
// once; per-request behavior is gated on the CURRENT init'd instance, so
|
|
54
|
+
// re-inits (and disabled mode) behave correctly without re-patching.
|
|
55
|
+
let httpInstrumented = false;
|
|
56
|
+
function instrumentHttpServers() {
|
|
57
|
+
if (httpInstrumented)
|
|
58
|
+
return;
|
|
59
|
+
httpInstrumented = true;
|
|
60
|
+
// https.Server does NOT inherit from http.Server (it extends tls.Server),
|
|
61
|
+
// and neither defines its own emit — both use EventEmitter's. Patch both
|
|
62
|
+
// prototypes with an own emit that delegates upward.
|
|
63
|
+
for (const proto of [http.Server.prototype, https.Server.prototype]) {
|
|
64
|
+
const originalEmit = proto.emit;
|
|
65
|
+
proto.emit = function (event, ...args) {
|
|
66
|
+
const sdk = instance;
|
|
67
|
+
if (event !== 'request' || !sdk || sdk.disabled) {
|
|
68
|
+
return originalEmit.apply(this, [event, ...args]);
|
|
69
|
+
}
|
|
70
|
+
const req = args[0];
|
|
71
|
+
const res = args[1];
|
|
72
|
+
const ctx = contextFromIncoming(req);
|
|
73
|
+
registerContext(ctx);
|
|
74
|
+
res.on('finish', () => {
|
|
75
|
+
// Silent 5xx: the handler responded 5xx without throwing. Vanilla
|
|
76
|
+
// responses have no res.json to wrap, so the check runs at finish.
|
|
77
|
+
if (res.statusCode >= 500 && !ctx.captured) {
|
|
78
|
+
contextStorage.run(ctx, () => sdk.captureHttp5xx(null, res.statusCode, ''));
|
|
79
|
+
}
|
|
80
|
+
completeContext(ctx);
|
|
81
|
+
});
|
|
82
|
+
res.on('close', () => completeContext(ctx));
|
|
83
|
+
try {
|
|
84
|
+
return contextStorage.run(ctx, () => originalEmit.apply(this, [event, ...args]));
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
// A synchronous throw unwinds out of the ALS frame before the
|
|
88
|
+
// process-level handler could see the store — capture WITH context
|
|
89
|
+
// here, then rethrow to preserve Node's semantics. The process
|
|
90
|
+
// handler skips already-captured contexts.
|
|
91
|
+
if (err instanceof Error)
|
|
92
|
+
sdk.capture('unhandled_exception', err, ctx);
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function contextFromIncoming(req) {
|
|
99
|
+
let path = req.url ?? '/';
|
|
100
|
+
try {
|
|
101
|
+
path = new URL(path, 'http://placeholder').pathname;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// keep raw url
|
|
105
|
+
}
|
|
106
|
+
const traceId = req.headers['traceparent'] ?? generateTraceId();
|
|
107
|
+
return {
|
|
108
|
+
traceId,
|
|
109
|
+
capturedAt: new Date(),
|
|
110
|
+
request: {
|
|
111
|
+
method: req.method ?? 'GET',
|
|
112
|
+
path,
|
|
113
|
+
headers: captureHeaders(req.headers),
|
|
114
|
+
body: '', // refreshed at capture time from rawRequest if a framework parsed it
|
|
115
|
+
},
|
|
116
|
+
footprint: [],
|
|
117
|
+
outboundCalls: [],
|
|
118
|
+
rawRequest: req,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// The error-middleware layer setupExpress mounted for each app, so the
|
|
122
|
+
// request middleware can keep it at the end of the stack even when routes
|
|
123
|
+
// are registered after setup (position independence).
|
|
124
|
+
const setupErrorLayers = new WeakMap();
|
|
125
|
+
// keepErrorHandlerLast repositions setupExpress's error layer when ROUTE
|
|
126
|
+
// registrations have landed after it — but never past the app's own error
|
|
127
|
+
// middleware (4-arg layers), which must stay downstream so it still receives
|
|
128
|
+
// the error after we capture and next(err) it. Runs from the request
|
|
129
|
+
// middleware, i.e. early in dispatch: moving a NOT-YET-VISITED layer within
|
|
130
|
+
// the live stack array is safe — express iterates with a forward-only index
|
|
131
|
+
// and re-reads stack.length each step, so unvisited layers shift one slot
|
|
132
|
+
// and are still each visited exactly once.
|
|
133
|
+
function keepErrorHandlerLast(app) {
|
|
134
|
+
const errLayer = setupErrorLayers.get(app);
|
|
135
|
+
if (!errLayer)
|
|
136
|
+
return;
|
|
137
|
+
const stack = app._router?.stack;
|
|
138
|
+
if (!stack || stack.length === 0)
|
|
139
|
+
return;
|
|
140
|
+
const i = stack.indexOf(errLayer);
|
|
141
|
+
if (i === -1)
|
|
142
|
+
return;
|
|
143
|
+
// Find the last NON-error layer (handler arity < 4) after ours — a route
|
|
144
|
+
// or middleware registered after setupExpress. If none, we're already
|
|
145
|
+
// positioned correctly (anything after us is user error middleware).
|
|
146
|
+
let lastNonError = -1;
|
|
147
|
+
for (let j = i + 1; j < stack.length; j++) {
|
|
148
|
+
const handle = stack[j].handle;
|
|
149
|
+
if (typeof handle === 'function' && handle.length < 4)
|
|
150
|
+
lastNonError = j;
|
|
151
|
+
}
|
|
152
|
+
if (lastNonError === -1)
|
|
153
|
+
return;
|
|
154
|
+
stack.splice(i, 1);
|
|
155
|
+
// Indices shifted down by one past i; insert right AFTER the late layer.
|
|
156
|
+
stack.splice(lastNonError, 0, errLayer);
|
|
157
|
+
}
|
|
158
|
+
// forwardAsyncErrors applies the rejection-forwarding patch to an app
|
|
159
|
+
// explicitly. requestHandler() does this automatically on the first request,
|
|
160
|
+
// so most apps never call it — it exists for the cases that middleware can't
|
|
161
|
+
// reach: a sub-app running a different physical copy of express, or an app
|
|
162
|
+
// that mounts routes needing Express-5 rejection semantics WITHOUT running
|
|
163
|
+
// the SDK (e.g. the demo app under `repro run` replay, where no DSN is set).
|
|
164
|
+
// Call it after routes are registered. Idempotent.
|
|
165
|
+
export function forwardAsyncErrors(app) {
|
|
166
|
+
patchLayerPrototype(app);
|
|
167
|
+
}
|
|
168
|
+
// Express error middleware that emits the structured error `repro run` needs to
|
|
169
|
+
// compare a replayed failure against the originally captured one — the type,
|
|
170
|
+
// message, and normalized stack (via the SAME parseStack used at capture, so
|
|
171
|
+
// the two can never drift). Active ONLY under REPROVA_REPLAY=1, which the CLI
|
|
172
|
+
// sets when it launches the app for replay; otherwise it forwards to the app's
|
|
173
|
+
// own error handler (next(err)), so it's a transparent no-op in normal
|
|
174
|
+
// operation. Register it BEFORE the app's own 500 responder.
|
|
175
|
+
export function replayErrorHandler() {
|
|
176
|
+
const replay = process.env.REPROVA_REPLAY === '1';
|
|
177
|
+
return (err, _req, res, next) => {
|
|
178
|
+
if (!replay)
|
|
179
|
+
return next(err);
|
|
180
|
+
res.status(500).json({
|
|
181
|
+
error: {
|
|
182
|
+
type: err.constructor?.name ?? err.name ?? 'Error',
|
|
183
|
+
message: err.message,
|
|
184
|
+
stack: parseStack(err),
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function patchLayerPrototype(app) {
|
|
190
|
+
if (patchedApps.has(app))
|
|
191
|
+
return;
|
|
192
|
+
patchedApps.add(app);
|
|
193
|
+
// Express 4 keeps the router at app._router; Express 5 renamed it (and its
|
|
194
|
+
// router forwards rejected promises natively), so failing any of these
|
|
195
|
+
// guards means there is nothing for us to do.
|
|
196
|
+
const router = app._router;
|
|
197
|
+
const firstLayer = router?.stack?.[0];
|
|
198
|
+
if (!firstLayer)
|
|
199
|
+
return;
|
|
200
|
+
const proto = Object.getPrototypeOf(firstLayer);
|
|
201
|
+
if (!proto || typeof proto.handle_request !== 'function')
|
|
202
|
+
return;
|
|
203
|
+
if (patchedLayerProtos.has(proto))
|
|
204
|
+
return;
|
|
205
|
+
patchedLayerProtos.add(proto);
|
|
206
|
+
const original = proto.handle_request;
|
|
207
|
+
proto.handle_request = function handle_request(req, res, next) {
|
|
208
|
+
const fn = this.handle;
|
|
209
|
+
// Wrap plain request handlers only (arity < 4 — express uses fn.length to
|
|
210
|
+
// recognize error middleware; the wrapper keeps arity 3 for the same
|
|
211
|
+
// reason). Wrapping is once per layer, marked with a symbol.
|
|
212
|
+
if (typeof fn === 'function' && fn.length < 4 && !(kAsyncWrapped in fn)) {
|
|
213
|
+
const inner = fn;
|
|
214
|
+
const wrapped = function (rq, rs, nx) {
|
|
215
|
+
const ret = inner(rq, rs, nx);
|
|
216
|
+
if (ret && typeof ret.then === 'function') {
|
|
217
|
+
// Same coercion as Express 5's router: a falsy rejection reason
|
|
218
|
+
// still has to travel the error chain as *something*.
|
|
219
|
+
ret.then(undefined, (err) => nx(err || new Error('unhandled promise rejection in request handler')));
|
|
220
|
+
}
|
|
221
|
+
return ret;
|
|
222
|
+
};
|
|
223
|
+
Object.defineProperty(wrapped, kAsyncWrapped, { value: true });
|
|
224
|
+
this.handle = wrapped;
|
|
225
|
+
}
|
|
226
|
+
return original.call(this, req, res, next);
|
|
227
|
+
};
|
|
228
|
+
}
|
|
5
229
|
export class Reprova {
|
|
6
230
|
opts;
|
|
7
231
|
transport;
|
|
8
232
|
release;
|
|
9
|
-
sdkVersion = '0.
|
|
233
|
+
sdkVersion = '0.4.0';
|
|
234
|
+
disabled;
|
|
10
235
|
migrationId = 'unknown';
|
|
11
236
|
outboundOpts;
|
|
12
237
|
constructor(opts) {
|
|
13
238
|
this.opts = opts;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
239
|
+
this.disabled = !opts.dsn;
|
|
240
|
+
if (this.disabled) {
|
|
241
|
+
// Inert transport: constructed so internal wiring stays uniform, but
|
|
242
|
+
// never started and capture() never enqueues into it.
|
|
243
|
+
this.transport = new BatchTransport({ endpoint: 'http://disabled.invalid/v1/ingest', apiKey: '' });
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
const url = new URL(opts.dsn);
|
|
247
|
+
const apiKey = url.pathname.slice(1); // strip leading slash
|
|
248
|
+
const endpoint = `${url.protocol}//${url.host}/v1/ingest`;
|
|
249
|
+
this.transport = new BatchTransport({ endpoint, apiKey });
|
|
250
|
+
this.transport.start();
|
|
251
|
+
}
|
|
19
252
|
this.release = opts.release;
|
|
20
253
|
this.outboundOpts = opts.recordOutbound;
|
|
21
254
|
}
|
|
22
255
|
static init(opts) {
|
|
23
256
|
instance = new Reprova(opts);
|
|
24
|
-
instance.
|
|
257
|
+
if (!instance.disabled) {
|
|
258
|
+
instance.patchOutbound();
|
|
259
|
+
if (opts.instrumentHttp !== false)
|
|
260
|
+
instrumentHttpServers();
|
|
261
|
+
if (opts.processHandlers !== false)
|
|
262
|
+
instance.attachProcessHandlers();
|
|
263
|
+
}
|
|
25
264
|
return instance;
|
|
26
265
|
}
|
|
27
266
|
static getInstance() { return instance; }
|
|
28
267
|
setMigrationId(id) { this.migrationId = id; }
|
|
29
|
-
//
|
|
268
|
+
// One-call Prisma integration. Splices the footprint-recording extension
|
|
269
|
+
// onto an existing PrismaClient (in place, preserving its identity) and
|
|
270
|
+
// best-effort reads the latest applied migration into migration_id.
|
|
271
|
+
//
|
|
272
|
+
// Typed structurally so the SDK never has to import '@prisma/client' —
|
|
273
|
+
// Prisma stays an optional peer. No-op when the SDK is disabled (no DSN /
|
|
274
|
+
// replay), like recordFootprint, so callers need no `if (dsn)` guard.
|
|
275
|
+
//
|
|
276
|
+
// Mutates `client` in place via Object.assign($extends(...)) because
|
|
277
|
+
// $extends returns a NEW client and the shared singleton must keep
|
|
278
|
+
// recording. Await it so migration_id is set before the first request.
|
|
279
|
+
async instrumentPrisma(client, opts) {
|
|
280
|
+
if (this.disabled)
|
|
281
|
+
return;
|
|
282
|
+
const c = client;
|
|
283
|
+
// 1. Footprint capture: extend, then copy the extended client's behavior
|
|
284
|
+
// back onto the original so every importer of the singleton records.
|
|
285
|
+
const ext = createPrismaExtension(opts?.dmmf);
|
|
286
|
+
Object.assign(c, c.$extends(ext));
|
|
287
|
+
// 2. migration_id: best-effort. Absent table (migrations not run) or any
|
|
288
|
+
// query error leaves it at the 'unknown' default — never fatal at boot.
|
|
289
|
+
// Two dialects of the same query, tried in order: SQL Server has no
|
|
290
|
+
// LIMIT (TOP goes right after SELECT instead), and the SDK deliberately
|
|
291
|
+
// has no notion of "which dialect" — it never imports @prisma/client, so
|
|
292
|
+
// it can't inspect the datasource provider; trying both is simpler than
|
|
293
|
+
// adding a dialect option just for this one query.
|
|
294
|
+
if (opts?.readMigrationId !== false) {
|
|
295
|
+
let rows = [];
|
|
296
|
+
try {
|
|
297
|
+
rows = await c.$queryRaw `
|
|
298
|
+
SELECT migration_name FROM _prisma_migrations ORDER BY finished_at DESC LIMIT 1
|
|
299
|
+
`;
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
try {
|
|
303
|
+
rows = await c.$queryRaw `
|
|
304
|
+
SELECT TOP 1 migration_name FROM _prisma_migrations ORDER BY finished_at DESC
|
|
305
|
+
`;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// migration_id stays 'unknown'
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (rows[0]?.migration_name) {
|
|
312
|
+
this.setMigrationId(rows[0].migration_name);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// One-call Express integration (Sentry-style): mounts the request context
|
|
317
|
+
// middleware (repositioned to run before everything, wherever setup is
|
|
318
|
+
// called), the error-capture middleware (kept last even if routes are
|
|
319
|
+
// registered later), the http_5xx response hook, and async rejection
|
|
320
|
+
// forwarding. Equivalent to the manual requestHandler/errorHandler/
|
|
321
|
+
// wrapResponse wiring — same capture payloads, one line.
|
|
322
|
+
setupExpress(app) {
|
|
323
|
+
app.use(this.requestHandler());
|
|
324
|
+
const router = app._router;
|
|
325
|
+
const stack = router?.stack;
|
|
326
|
+
if (stack && stack.length > 0) {
|
|
327
|
+
// Move the just-pushed request layer to sit right after express's
|
|
328
|
+
// leading built-ins (query/expressInit), so it runs first even when
|
|
329
|
+
// setupExpress is called after the routes.
|
|
330
|
+
const reqLayer = stack[stack.length - 1];
|
|
331
|
+
let insertAt = 0;
|
|
332
|
+
while (insertAt < stack.length - 1) {
|
|
333
|
+
const name = stack[insertAt].name;
|
|
334
|
+
if (name === 'query' || name === 'expressInit') {
|
|
335
|
+
insertAt++;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
stack.splice(stack.length - 1, 1);
|
|
342
|
+
stack.splice(insertAt, 0, reqLayer);
|
|
343
|
+
}
|
|
344
|
+
app.use(this.errorHandler());
|
|
345
|
+
if (stack && stack.length > 0) {
|
|
346
|
+
setupErrorLayers.set(app, stack[stack.length - 1]);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Express middleware: opens per-request context. Also installs the async
|
|
350
|
+
// rejection forwarder on first request (see patchLayerPrototype) so plain
|
|
351
|
+
// `async (req, res) => ...` handlers need no wrapper and no next(err).
|
|
30
352
|
requestHandler() {
|
|
31
|
-
return (req,
|
|
353
|
+
return (req, res, next) => {
|
|
354
|
+
if (req.app) {
|
|
355
|
+
patchLayerPrototype(req.app);
|
|
356
|
+
keepErrorHandlerLast(req.app);
|
|
357
|
+
}
|
|
358
|
+
// http_5xx-without-throw hook rides along automatically.
|
|
359
|
+
if (!this.disabled)
|
|
360
|
+
wrapResponse(res, this);
|
|
361
|
+
// With HTTP-server instrumentation active (init default), a context
|
|
362
|
+
// for this very request already exists — don't shadow it with a
|
|
363
|
+
// second one; every capture path reads the same store either way.
|
|
364
|
+
const existing = contextStorage.getStore();
|
|
365
|
+
if (existing && existing.rawRequest === req) {
|
|
366
|
+
next();
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
32
369
|
const traceId = req.headers['traceparent'] ?? generateTraceId();
|
|
33
370
|
const ctx = {
|
|
34
371
|
traceId,
|
|
@@ -38,11 +375,18 @@ export class Reprova {
|
|
|
38
375
|
path: req.path,
|
|
39
376
|
headers: captureHeaders(req.headers),
|
|
40
377
|
body: typeof req.body === 'string' ? req.body : JSON.stringify(req.body ?? ''),
|
|
41
|
-
authClaims: req
|
|
378
|
+
authClaims: detectAuthClaims(req),
|
|
42
379
|
},
|
|
43
380
|
footprint: [],
|
|
44
381
|
outboundCalls: [],
|
|
382
|
+
rawRequest: req,
|
|
45
383
|
};
|
|
384
|
+
// Track this context so a concurrent request's capture can see it
|
|
385
|
+
// (and, briefly after completion, that it recently overlapped).
|
|
386
|
+
registerContext(ctx);
|
|
387
|
+
const done = () => completeContext(ctx);
|
|
388
|
+
res.on('finish', done);
|
|
389
|
+
res.on('close', done);
|
|
46
390
|
contextStorage.run(ctx, next);
|
|
47
391
|
};
|
|
48
392
|
}
|
|
@@ -61,6 +405,36 @@ export class Reprova {
|
|
|
61
405
|
const ctx = contextStorage.getStore();
|
|
62
406
|
this.capture(opts?.trigger ?? 'manual_capture', err, ctx);
|
|
63
407
|
}
|
|
408
|
+
// NestJS global exception filter: hands Nest-caught exceptions to the
|
|
409
|
+
// capture pipeline with the ORIGINAL stack (Nest's exception layer
|
|
410
|
+
// otherwise converts them to 500s before Express error middleware ever
|
|
411
|
+
// sees them, leaving only the silent-5xx capture), honors the
|
|
412
|
+
// REPROVA_REPLAY contract for exact replay verdicts, and responds the way
|
|
413
|
+
// Nest's own default filter would. Usage:
|
|
414
|
+
// app.useGlobalFilters(sdk.nestExceptionFilter());
|
|
415
|
+
nestExceptionFilter() {
|
|
416
|
+
return createNestExceptionFilter({
|
|
417
|
+
capture: (err) => {
|
|
418
|
+
const ctx = contextStorage.getStore();
|
|
419
|
+
if (!ctx?.captured)
|
|
420
|
+
this.capture('unhandled_exception', err, ctx);
|
|
421
|
+
},
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
// One-call NestJS setup, the setupExpress of the Nest world: registers the
|
|
425
|
+
// exception filter and (when given a Prisma client) wires automatic data
|
|
426
|
+
// footprints + migration_id in the same breath. The whole integration:
|
|
427
|
+
// const sdk = Reprova.init({ dsn, release });
|
|
428
|
+
// const app = await NestFactory.create(AppModule);
|
|
429
|
+
// await sdk.setupNest(app, { prisma: app.get(PrismaService), dmmf: Prisma.dmmf });
|
|
430
|
+
// Other ORMs stay their usual one line (installTypeOrmSubscriber(dataSource),
|
|
431
|
+
// installKnexHooks(knex), ...) — they aren't Reprova-instance methods.
|
|
432
|
+
async setupNest(app, opts) {
|
|
433
|
+
app.useGlobalFilters(this.nestExceptionFilter());
|
|
434
|
+
if (opts?.prisma) {
|
|
435
|
+
await this.instrumentPrisma(opts.prisma, { dmmf: opts.dmmf });
|
|
436
|
+
}
|
|
437
|
+
}
|
|
64
438
|
// Called by response hook for http_5xx (no thrown error).
|
|
65
439
|
captureHttp5xx(err, statusCode, responseBody) {
|
|
66
440
|
const ctx = contextStorage.getStore();
|
|
@@ -77,8 +451,12 @@ export class Reprova {
|
|
|
77
451
|
});
|
|
78
452
|
}
|
|
79
453
|
capture(trigger, err, ctx, extra) {
|
|
80
|
-
if (
|
|
454
|
+
if (this.disabled)
|
|
455
|
+
return;
|
|
456
|
+
if (ctx) {
|
|
81
457
|
ctx.captured = true;
|
|
458
|
+
refreshRequestSnapshot(ctx);
|
|
459
|
+
}
|
|
82
460
|
const payload = {
|
|
83
461
|
trigger: trigger,
|
|
84
462
|
trace_id: ctx?.traceId ?? generateTraceId(),
|
|
@@ -104,22 +482,81 @@ export class Reprova {
|
|
|
104
482
|
data_footprint: { queries: ctx?.footprint ?? [] },
|
|
105
483
|
outbound_calls: ctx?.outboundCalls ?? [],
|
|
106
484
|
};
|
|
485
|
+
// Concurrency cohort: what else was in flight (or just finished) when
|
|
486
|
+
// this error happened — the raw material for race-condition replay.
|
|
487
|
+
// The key is omitted entirely when the request was alone.
|
|
488
|
+
const cohort = ctx ? snapshotCohort(ctx) : [];
|
|
489
|
+
if (cohort.length > 0) {
|
|
490
|
+
payload.concurrent_requests = cohort;
|
|
491
|
+
}
|
|
107
492
|
this.transport.enqueue(payload);
|
|
108
493
|
}
|
|
109
|
-
// Attach process-level handlers.
|
|
494
|
+
// Attach process-level handlers. AsyncLocalStorage context survives into
|
|
495
|
+
// both handlers for errors from async continuations (verified on Node 22),
|
|
496
|
+
// so even these captures carry request context when one exists. Contexts
|
|
497
|
+
// already captured (e.g. by the http emit wrapper's sync-throw catch) are
|
|
498
|
+
// skipped to avoid double-reporting.
|
|
110
499
|
attachProcessHandlers() {
|
|
111
500
|
process.on('uncaughtException', (err) => {
|
|
112
501
|
const ctx = contextStorage.getStore();
|
|
113
|
-
|
|
502
|
+
if (!ctx?.captured)
|
|
503
|
+
this.capture('unhandled_exception', err, ctx);
|
|
114
504
|
// Allow flush before exit.
|
|
115
505
|
void this.transport.flush().finally(() => process.exit(1));
|
|
116
506
|
});
|
|
117
507
|
process.on('unhandledRejection', (reason) => {
|
|
118
508
|
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
119
509
|
const ctx = contextStorage.getStore();
|
|
120
|
-
|
|
510
|
+
if (!ctx?.captured)
|
|
511
|
+
this.capture('unhandled_exception', err, ctx);
|
|
121
512
|
});
|
|
122
513
|
}
|
|
514
|
+
// Run any operation — a queue consumer, a script step, anything without
|
|
515
|
+
// an HTTP request — inside a capture context: errors are captured (then
|
|
516
|
+
// rethrown, so the caller's error flow is unchanged), and footprints /
|
|
517
|
+
// outbound calls recorded inside land on the capture.
|
|
518
|
+
async runWithContext(info, fn) {
|
|
519
|
+
return this.runInContext('unhandled_exception', info, fn);
|
|
520
|
+
}
|
|
521
|
+
// Background-job wrapper: like runWithContext, but failures ingest with
|
|
522
|
+
// the job_failure trigger so they're distinguishable on the dashboard.
|
|
523
|
+
async runJob(name, fn) {
|
|
524
|
+
return this.runInContext('job_failure', { name }, fn);
|
|
525
|
+
}
|
|
526
|
+
async runInContext(trigger, info, fn) {
|
|
527
|
+
const ctx = {
|
|
528
|
+
traceId: generateTraceId(),
|
|
529
|
+
capturedAt: new Date(),
|
|
530
|
+
request: {
|
|
531
|
+
method: info.method ?? 'JOB',
|
|
532
|
+
path: info.path ?? info.name ?? 'task',
|
|
533
|
+
headers: info.headers ?? {},
|
|
534
|
+
body: info.body ?? '',
|
|
535
|
+
},
|
|
536
|
+
footprint: [],
|
|
537
|
+
outboundCalls: [],
|
|
538
|
+
};
|
|
539
|
+
registerContext(ctx);
|
|
540
|
+
try {
|
|
541
|
+
return await contextStorage.run(ctx, () => fn());
|
|
542
|
+
}
|
|
543
|
+
catch (err) {
|
|
544
|
+
if (err instanceof Error)
|
|
545
|
+
this.capture(trigger, err, ctx);
|
|
546
|
+
throw err;
|
|
547
|
+
}
|
|
548
|
+
finally {
|
|
549
|
+
completeContext(ctx);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
// Record a data-footprint entry from ANY data layer (knex, raw SQL, an
|
|
553
|
+
// in-house DAO): one call per query site is what makes an error
|
|
554
|
+
// REPRODUCIBLE rather than just visible. `model` maps to a table via the
|
|
555
|
+
// tenant's naming strategy, exactly like a Prisma model name. Silent
|
|
556
|
+
// no-op outside a capture context.
|
|
557
|
+
recordFootprint(query) {
|
|
558
|
+
contextStorage.getStore()?.footprint.push(query);
|
|
559
|
+
}
|
|
123
560
|
patchOutbound() {
|
|
124
561
|
const sdk = this;
|
|
125
562
|
const allowHosts = this.outboundOpts?.allowHosts;
|
|
@@ -135,10 +572,35 @@ export class Reprova {
|
|
|
135
572
|
const originalFetch = globalThis.fetch;
|
|
136
573
|
if (typeof originalFetch === 'function') {
|
|
137
574
|
globalThis.fetch = async function patchedFetch(input, init) {
|
|
138
|
-
|
|
575
|
+
// Parse the URL before the fetch so the failure path below can name
|
|
576
|
+
// the destination even when the call never connects.
|
|
577
|
+
const url = typeof input === 'string' ? new URL(input) : input instanceof URL ? input : new URL(input.url);
|
|
578
|
+
const started = performance.now();
|
|
579
|
+
let res;
|
|
580
|
+
try {
|
|
581
|
+
res = await originalFetch(input, init);
|
|
582
|
+
}
|
|
583
|
+
catch (err) {
|
|
584
|
+
// A failed call (timeout, DNS, refused connection) is often THE
|
|
585
|
+
// cause of the error being captured — record it, then re-throw so
|
|
586
|
+
// application behavior is untouched.
|
|
587
|
+
const ctx = contextStorage.getStore();
|
|
588
|
+
if (ctx && shouldRecord(url.host)) {
|
|
589
|
+
const name = err?.name;
|
|
590
|
+
ctx.outboundCalls.push({
|
|
591
|
+
host: url.host,
|
|
592
|
+
method: (init?.method ?? 'GET').toUpperCase(),
|
|
593
|
+
path: url.pathname + url.search,
|
|
594
|
+
status: 0,
|
|
595
|
+
duration_ms: Math.round(performance.now() - started),
|
|
596
|
+
outcome: name === 'TimeoutError' || name === 'AbortError' ? 'timeout' : 'network_error',
|
|
597
|
+
recorded_for_replay: true,
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
throw err;
|
|
601
|
+
}
|
|
139
602
|
const ctx = contextStorage.getStore();
|
|
140
603
|
if (ctx) {
|
|
141
|
-
const url = typeof input === 'string' ? new URL(input) : input instanceof URL ? input : new URL(input.url);
|
|
142
604
|
const host = url.host;
|
|
143
605
|
if (shouldRecord(host)) {
|
|
144
606
|
const ct = res.headers.get('content-type') ?? '';
|
|
@@ -157,6 +619,8 @@ export class Reprova {
|
|
|
157
619
|
path: url.pathname + url.search,
|
|
158
620
|
status: res.status,
|
|
159
621
|
response_body: responseBody,
|
|
622
|
+
duration_ms: Math.round(performance.now() - started),
|
|
623
|
+
outcome: 'success',
|
|
160
624
|
recorded_for_replay: true,
|
|
161
625
|
});
|
|
162
626
|
}
|
|
@@ -172,6 +636,8 @@ export class Reprova {
|
|
|
172
636
|
}
|
|
173
637
|
// Auto-setup http_5xx hook for Express responses.
|
|
174
638
|
export function wrapResponse(res, sdk) {
|
|
639
|
+
if (typeof res.json !== 'function')
|
|
640
|
+
return; // non-standard res (tests, mocks)
|
|
175
641
|
const originalJson = res.json.bind(res);
|
|
176
642
|
res.json = function (body) {
|
|
177
643
|
if (res.statusCode >= 500) {
|
package/dist/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequelize.d.ts","sourceRoot":"","sources":["../src/sequelize.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,uBAAuB;IAItC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyFD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,GAAE,uBAA4B,GAAG,IAAI,CASlG"}
|