@reprova/sdk 0.2.0 → 0.4.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 +206 -11
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/drizzle.d.ts +11 -0
- package/dist/drizzle.d.ts.map +1 -0
- package/dist/drizzle.js +72 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- 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/proto.gen.d.ts +65 -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 +24 -4
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +424 -15
- 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 +13 -1
package/dist/sdk.js
CHANGED
|
@@ -1,34 +1,344 @@
|
|
|
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';
|
|
4
8
|
let instance = null;
|
|
9
|
+
// Zero-code-change async error capture: Express 4 discards the promise an
|
|
10
|
+
// async handler returns, so a rejection never reaches error middleware unless
|
|
11
|
+
// the app hand-plumbs next(err). We patch the router's Layer dispatch (the
|
|
12
|
+
// same semantics Express 5's router ships natively) so every handler's
|
|
13
|
+
// returned promise gets a rejection-forwarder attached automatically.
|
|
14
|
+
const kAsyncWrapped = Symbol('reprova.asyncWrapped');
|
|
15
|
+
// Apps we've already probed (added even when probing no-ops, e.g. Express 5).
|
|
16
|
+
const patchedApps = new WeakSet();
|
|
17
|
+
// Layer prototypes already patched — one per physical express copy.
|
|
18
|
+
const patchedLayerProtos = new WeakSet();
|
|
19
|
+
// refreshRequestSnapshot re-reads body and auth claims from the live req at
|
|
20
|
+
// capture time. The request middleware runs at the very front of the stack
|
|
21
|
+
// (before body parsers and auth middleware), so its eager snapshot can miss
|
|
22
|
+
// req.body/req.auth — by the time anything is captured, both are final.
|
|
23
|
+
// Mutating ctx.request in place keeps cohort snapshots consistent too.
|
|
24
|
+
function refreshRequestSnapshot(ctx) {
|
|
25
|
+
const req = ctx.rawRequest;
|
|
26
|
+
if (!req)
|
|
27
|
+
return;
|
|
28
|
+
if (req.body !== undefined) {
|
|
29
|
+
ctx.request.body = typeof req.body === 'string' ? req.body : JSON.stringify(req.body ?? '');
|
|
30
|
+
}
|
|
31
|
+
if (req.auth !== undefined && ctx.request.authClaims === undefined) {
|
|
32
|
+
ctx.request.authClaims = req.auth;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Universal HTTP instrumentation: wrap the 'request' event on node's own
|
|
36
|
+
// http/https servers, so EVERY Node app — vanilla http.createServer, Koa,
|
|
37
|
+
// Fastify, Express — runs its request handling inside a Reprova context.
|
|
38
|
+
// Framework middleware becomes an enrichment, not a requirement. Installed
|
|
39
|
+
// once; per-request behavior is gated on the CURRENT init'd instance, so
|
|
40
|
+
// re-inits (and disabled mode) behave correctly without re-patching.
|
|
41
|
+
let httpInstrumented = false;
|
|
42
|
+
function instrumentHttpServers() {
|
|
43
|
+
if (httpInstrumented)
|
|
44
|
+
return;
|
|
45
|
+
httpInstrumented = true;
|
|
46
|
+
// https.Server does NOT inherit from http.Server (it extends tls.Server),
|
|
47
|
+
// and neither defines its own emit — both use EventEmitter's. Patch both
|
|
48
|
+
// prototypes with an own emit that delegates upward.
|
|
49
|
+
for (const proto of [http.Server.prototype, https.Server.prototype]) {
|
|
50
|
+
const originalEmit = proto.emit;
|
|
51
|
+
proto.emit = function (event, ...args) {
|
|
52
|
+
const sdk = instance;
|
|
53
|
+
if (event !== 'request' || !sdk || sdk.disabled) {
|
|
54
|
+
return originalEmit.apply(this, [event, ...args]);
|
|
55
|
+
}
|
|
56
|
+
const req = args[0];
|
|
57
|
+
const res = args[1];
|
|
58
|
+
const ctx = contextFromIncoming(req);
|
|
59
|
+
registerContext(ctx);
|
|
60
|
+
res.on('finish', () => {
|
|
61
|
+
// Silent 5xx: the handler responded 5xx without throwing. Vanilla
|
|
62
|
+
// responses have no res.json to wrap, so the check runs at finish.
|
|
63
|
+
if (res.statusCode >= 500 && !ctx.captured) {
|
|
64
|
+
contextStorage.run(ctx, () => sdk.captureHttp5xx(null, res.statusCode, ''));
|
|
65
|
+
}
|
|
66
|
+
completeContext(ctx);
|
|
67
|
+
});
|
|
68
|
+
res.on('close', () => completeContext(ctx));
|
|
69
|
+
try {
|
|
70
|
+
return contextStorage.run(ctx, () => originalEmit.apply(this, [event, ...args]));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// A synchronous throw unwinds out of the ALS frame before the
|
|
74
|
+
// process-level handler could see the store — capture WITH context
|
|
75
|
+
// here, then rethrow to preserve Node's semantics. The process
|
|
76
|
+
// handler skips already-captured contexts.
|
|
77
|
+
if (err instanceof Error)
|
|
78
|
+
sdk.capture('unhandled_exception', err, ctx);
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function contextFromIncoming(req) {
|
|
85
|
+
let path = req.url ?? '/';
|
|
86
|
+
try {
|
|
87
|
+
path = new URL(path, 'http://placeholder').pathname;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// keep raw url
|
|
91
|
+
}
|
|
92
|
+
const traceId = req.headers['traceparent'] ?? generateTraceId();
|
|
93
|
+
return {
|
|
94
|
+
traceId,
|
|
95
|
+
capturedAt: new Date(),
|
|
96
|
+
request: {
|
|
97
|
+
method: req.method ?? 'GET',
|
|
98
|
+
path,
|
|
99
|
+
headers: captureHeaders(req.headers),
|
|
100
|
+
body: '', // refreshed at capture time from rawRequest if a framework parsed it
|
|
101
|
+
},
|
|
102
|
+
footprint: [],
|
|
103
|
+
outboundCalls: [],
|
|
104
|
+
rawRequest: req,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// The error-middleware layer setupExpress mounted for each app, so the
|
|
108
|
+
// request middleware can keep it at the end of the stack even when routes
|
|
109
|
+
// are registered after setup (position independence).
|
|
110
|
+
const setupErrorLayers = new WeakMap();
|
|
111
|
+
// keepErrorHandlerLast repositions setupExpress's error layer when ROUTE
|
|
112
|
+
// registrations have landed after it — but never past the app's own error
|
|
113
|
+
// middleware (4-arg layers), which must stay downstream so it still receives
|
|
114
|
+
// the error after we capture and next(err) it. Runs from the request
|
|
115
|
+
// middleware, i.e. early in dispatch: moving a NOT-YET-VISITED layer within
|
|
116
|
+
// the live stack array is safe — express iterates with a forward-only index
|
|
117
|
+
// and re-reads stack.length each step, so unvisited layers shift one slot
|
|
118
|
+
// and are still each visited exactly once.
|
|
119
|
+
function keepErrorHandlerLast(app) {
|
|
120
|
+
const errLayer = setupErrorLayers.get(app);
|
|
121
|
+
if (!errLayer)
|
|
122
|
+
return;
|
|
123
|
+
const stack = app._router?.stack;
|
|
124
|
+
if (!stack || stack.length === 0)
|
|
125
|
+
return;
|
|
126
|
+
const i = stack.indexOf(errLayer);
|
|
127
|
+
if (i === -1)
|
|
128
|
+
return;
|
|
129
|
+
// Find the last NON-error layer (handler arity < 4) after ours — a route
|
|
130
|
+
// or middleware registered after setupExpress. If none, we're already
|
|
131
|
+
// positioned correctly (anything after us is user error middleware).
|
|
132
|
+
let lastNonError = -1;
|
|
133
|
+
for (let j = i + 1; j < stack.length; j++) {
|
|
134
|
+
const handle = stack[j].handle;
|
|
135
|
+
if (typeof handle === 'function' && handle.length < 4)
|
|
136
|
+
lastNonError = j;
|
|
137
|
+
}
|
|
138
|
+
if (lastNonError === -1)
|
|
139
|
+
return;
|
|
140
|
+
stack.splice(i, 1);
|
|
141
|
+
// Indices shifted down by one past i; insert right AFTER the late layer.
|
|
142
|
+
stack.splice(lastNonError, 0, errLayer);
|
|
143
|
+
}
|
|
144
|
+
// forwardAsyncErrors applies the rejection-forwarding patch to an app
|
|
145
|
+
// explicitly. requestHandler() does this automatically on the first request,
|
|
146
|
+
// so most apps never call it — it exists for the cases that middleware can't
|
|
147
|
+
// reach: a sub-app running a different physical copy of express, or an app
|
|
148
|
+
// that mounts routes needing Express-5 rejection semantics WITHOUT running
|
|
149
|
+
// the SDK (e.g. the demo app under `repro run` replay, where no DSN is set).
|
|
150
|
+
// Call it after routes are registered. Idempotent.
|
|
151
|
+
export function forwardAsyncErrors(app) {
|
|
152
|
+
patchLayerPrototype(app);
|
|
153
|
+
}
|
|
154
|
+
// Express error middleware that emits the structured error `repro run` needs to
|
|
155
|
+
// compare a replayed failure against the originally captured one — the type,
|
|
156
|
+
// message, and normalized stack (via the SAME parseStack used at capture, so
|
|
157
|
+
// the two can never drift). Active ONLY under REPROVA_REPLAY=1, which the CLI
|
|
158
|
+
// sets when it launches the app for replay; otherwise it forwards to the app's
|
|
159
|
+
// own error handler (next(err)), so it's a transparent no-op in normal
|
|
160
|
+
// operation. Register it BEFORE the app's own 500 responder.
|
|
161
|
+
export function replayErrorHandler() {
|
|
162
|
+
const replay = process.env.REPROVA_REPLAY === '1';
|
|
163
|
+
return (err, _req, res, next) => {
|
|
164
|
+
if (!replay)
|
|
165
|
+
return next(err);
|
|
166
|
+
res.status(500).json({
|
|
167
|
+
error: {
|
|
168
|
+
type: err.constructor?.name ?? err.name ?? 'Error',
|
|
169
|
+
message: err.message,
|
|
170
|
+
stack: parseStack(err),
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function patchLayerPrototype(app) {
|
|
176
|
+
if (patchedApps.has(app))
|
|
177
|
+
return;
|
|
178
|
+
patchedApps.add(app);
|
|
179
|
+
// Express 4 keeps the router at app._router; Express 5 renamed it (and its
|
|
180
|
+
// router forwards rejected promises natively), so failing any of these
|
|
181
|
+
// guards means there is nothing for us to do.
|
|
182
|
+
const router = app._router;
|
|
183
|
+
const firstLayer = router?.stack?.[0];
|
|
184
|
+
if (!firstLayer)
|
|
185
|
+
return;
|
|
186
|
+
const proto = Object.getPrototypeOf(firstLayer);
|
|
187
|
+
if (!proto || typeof proto.handle_request !== 'function')
|
|
188
|
+
return;
|
|
189
|
+
if (patchedLayerProtos.has(proto))
|
|
190
|
+
return;
|
|
191
|
+
patchedLayerProtos.add(proto);
|
|
192
|
+
const original = proto.handle_request;
|
|
193
|
+
proto.handle_request = function handle_request(req, res, next) {
|
|
194
|
+
const fn = this.handle;
|
|
195
|
+
// Wrap plain request handlers only (arity < 4 — express uses fn.length to
|
|
196
|
+
// recognize error middleware; the wrapper keeps arity 3 for the same
|
|
197
|
+
// reason). Wrapping is once per layer, marked with a symbol.
|
|
198
|
+
if (typeof fn === 'function' && fn.length < 4 && !(kAsyncWrapped in fn)) {
|
|
199
|
+
const inner = fn;
|
|
200
|
+
const wrapped = function (rq, rs, nx) {
|
|
201
|
+
const ret = inner(rq, rs, nx);
|
|
202
|
+
if (ret && typeof ret.then === 'function') {
|
|
203
|
+
// Same coercion as Express 5's router: a falsy rejection reason
|
|
204
|
+
// still has to travel the error chain as *something*.
|
|
205
|
+
ret.then(undefined, (err) => nx(err || new Error('unhandled promise rejection in request handler')));
|
|
206
|
+
}
|
|
207
|
+
return ret;
|
|
208
|
+
};
|
|
209
|
+
Object.defineProperty(wrapped, kAsyncWrapped, { value: true });
|
|
210
|
+
this.handle = wrapped;
|
|
211
|
+
}
|
|
212
|
+
return original.call(this, req, res, next);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
5
215
|
export class Reprova {
|
|
6
216
|
opts;
|
|
7
217
|
transport;
|
|
8
218
|
release;
|
|
9
|
-
sdkVersion = '0.
|
|
219
|
+
sdkVersion = '0.4.0';
|
|
220
|
+
disabled;
|
|
10
221
|
migrationId = 'unknown';
|
|
11
222
|
outboundOpts;
|
|
12
223
|
constructor(opts) {
|
|
13
224
|
this.opts = opts;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
225
|
+
this.disabled = !opts.dsn;
|
|
226
|
+
if (this.disabled) {
|
|
227
|
+
// Inert transport: constructed so internal wiring stays uniform, but
|
|
228
|
+
// never started and capture() never enqueues into it.
|
|
229
|
+
this.transport = new BatchTransport({ endpoint: 'http://disabled.invalid/v1/ingest', apiKey: '' });
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const url = new URL(opts.dsn);
|
|
233
|
+
const apiKey = url.pathname.slice(1); // strip leading slash
|
|
234
|
+
const endpoint = `${url.protocol}//${url.host}/v1/ingest`;
|
|
235
|
+
this.transport = new BatchTransport({ endpoint, apiKey });
|
|
236
|
+
this.transport.start();
|
|
237
|
+
}
|
|
19
238
|
this.release = opts.release;
|
|
20
239
|
this.outboundOpts = opts.recordOutbound;
|
|
21
240
|
}
|
|
22
241
|
static init(opts) {
|
|
23
242
|
instance = new Reprova(opts);
|
|
24
|
-
instance.
|
|
243
|
+
if (!instance.disabled) {
|
|
244
|
+
instance.patchOutbound();
|
|
245
|
+
if (opts.instrumentHttp !== false)
|
|
246
|
+
instrumentHttpServers();
|
|
247
|
+
if (opts.processHandlers !== false)
|
|
248
|
+
instance.attachProcessHandlers();
|
|
249
|
+
}
|
|
25
250
|
return instance;
|
|
26
251
|
}
|
|
27
252
|
static getInstance() { return instance; }
|
|
28
253
|
setMigrationId(id) { this.migrationId = id; }
|
|
29
|
-
//
|
|
254
|
+
// One-call Prisma integration. Splices the footprint-recording extension
|
|
255
|
+
// onto an existing PrismaClient (in place, preserving its identity) and
|
|
256
|
+
// best-effort reads the latest applied migration into migration_id.
|
|
257
|
+
//
|
|
258
|
+
// Typed structurally so the SDK never has to import '@prisma/client' —
|
|
259
|
+
// Prisma stays an optional peer. No-op when the SDK is disabled (no DSN /
|
|
260
|
+
// replay), like recordFootprint, so callers need no `if (dsn)` guard.
|
|
261
|
+
//
|
|
262
|
+
// Mutates `client` in place via Object.assign($extends(...)) because
|
|
263
|
+
// $extends returns a NEW client and the shared singleton must keep
|
|
264
|
+
// recording. Await it so migration_id is set before the first request.
|
|
265
|
+
async instrumentPrisma(client, opts) {
|
|
266
|
+
if (this.disabled)
|
|
267
|
+
return;
|
|
268
|
+
const c = client;
|
|
269
|
+
// 1. Footprint capture: extend, then copy the extended client's behavior
|
|
270
|
+
// back onto the original so every importer of the singleton records.
|
|
271
|
+
const ext = createPrismaExtension(opts?.dmmf);
|
|
272
|
+
Object.assign(c, c.$extends(ext));
|
|
273
|
+
// 2. migration_id: best-effort. Absent table (migrations not run) or any
|
|
274
|
+
// query error leaves it at the 'unknown' default — never fatal at boot.
|
|
275
|
+
if (opts?.readMigrationId !== false) {
|
|
276
|
+
try {
|
|
277
|
+
const rows = await c.$queryRaw `
|
|
278
|
+
SELECT migration_name FROM _prisma_migrations ORDER BY finished_at DESC LIMIT 1
|
|
279
|
+
`;
|
|
280
|
+
if (rows[0]?.migration_name) {
|
|
281
|
+
this.setMigrationId(rows[0].migration_name);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
// migration_id stays 'unknown'
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// One-call Express integration (Sentry-style): mounts the request context
|
|
290
|
+
// middleware (repositioned to run before everything, wherever setup is
|
|
291
|
+
// called), the error-capture middleware (kept last even if routes are
|
|
292
|
+
// registered later), the http_5xx response hook, and async rejection
|
|
293
|
+
// forwarding. Equivalent to the manual requestHandler/errorHandler/
|
|
294
|
+
// wrapResponse wiring — same capture payloads, one line.
|
|
295
|
+
setupExpress(app) {
|
|
296
|
+
app.use(this.requestHandler());
|
|
297
|
+
const router = app._router;
|
|
298
|
+
const stack = router?.stack;
|
|
299
|
+
if (stack && stack.length > 0) {
|
|
300
|
+
// Move the just-pushed request layer to sit right after express's
|
|
301
|
+
// leading built-ins (query/expressInit), so it runs first even when
|
|
302
|
+
// setupExpress is called after the routes.
|
|
303
|
+
const reqLayer = stack[stack.length - 1];
|
|
304
|
+
let insertAt = 0;
|
|
305
|
+
while (insertAt < stack.length - 1) {
|
|
306
|
+
const name = stack[insertAt].name;
|
|
307
|
+
if (name === 'query' || name === 'expressInit') {
|
|
308
|
+
insertAt++;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
stack.splice(stack.length - 1, 1);
|
|
315
|
+
stack.splice(insertAt, 0, reqLayer);
|
|
316
|
+
}
|
|
317
|
+
app.use(this.errorHandler());
|
|
318
|
+
if (stack && stack.length > 0) {
|
|
319
|
+
setupErrorLayers.set(app, stack[stack.length - 1]);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Express middleware: opens per-request context. Also installs the async
|
|
323
|
+
// rejection forwarder on first request (see patchLayerPrototype) so plain
|
|
324
|
+
// `async (req, res) => ...` handlers need no wrapper and no next(err).
|
|
30
325
|
requestHandler() {
|
|
31
|
-
return (req,
|
|
326
|
+
return (req, res, next) => {
|
|
327
|
+
if (req.app) {
|
|
328
|
+
patchLayerPrototype(req.app);
|
|
329
|
+
keepErrorHandlerLast(req.app);
|
|
330
|
+
}
|
|
331
|
+
// http_5xx-without-throw hook rides along automatically.
|
|
332
|
+
if (!this.disabled)
|
|
333
|
+
wrapResponse(res, this);
|
|
334
|
+
// With HTTP-server instrumentation active (init default), a context
|
|
335
|
+
// for this very request already exists — don't shadow it with a
|
|
336
|
+
// second one; every capture path reads the same store either way.
|
|
337
|
+
const existing = contextStorage.getStore();
|
|
338
|
+
if (existing && existing.rawRequest === req) {
|
|
339
|
+
next();
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
32
342
|
const traceId = req.headers['traceparent'] ?? generateTraceId();
|
|
33
343
|
const ctx = {
|
|
34
344
|
traceId,
|
|
@@ -42,7 +352,14 @@ export class Reprova {
|
|
|
42
352
|
},
|
|
43
353
|
footprint: [],
|
|
44
354
|
outboundCalls: [],
|
|
355
|
+
rawRequest: req,
|
|
45
356
|
};
|
|
357
|
+
// Track this context so a concurrent request's capture can see it
|
|
358
|
+
// (and, briefly after completion, that it recently overlapped).
|
|
359
|
+
registerContext(ctx);
|
|
360
|
+
const done = () => completeContext(ctx);
|
|
361
|
+
res.on('finish', done);
|
|
362
|
+
res.on('close', done);
|
|
46
363
|
contextStorage.run(ctx, next);
|
|
47
364
|
};
|
|
48
365
|
}
|
|
@@ -77,8 +394,12 @@ export class Reprova {
|
|
|
77
394
|
});
|
|
78
395
|
}
|
|
79
396
|
capture(trigger, err, ctx, extra) {
|
|
80
|
-
if (
|
|
397
|
+
if (this.disabled)
|
|
398
|
+
return;
|
|
399
|
+
if (ctx) {
|
|
81
400
|
ctx.captured = true;
|
|
401
|
+
refreshRequestSnapshot(ctx);
|
|
402
|
+
}
|
|
82
403
|
const payload = {
|
|
83
404
|
trigger: trigger,
|
|
84
405
|
trace_id: ctx?.traceId ?? generateTraceId(),
|
|
@@ -104,22 +425,81 @@ export class Reprova {
|
|
|
104
425
|
data_footprint: { queries: ctx?.footprint ?? [] },
|
|
105
426
|
outbound_calls: ctx?.outboundCalls ?? [],
|
|
106
427
|
};
|
|
428
|
+
// Concurrency cohort: what else was in flight (or just finished) when
|
|
429
|
+
// this error happened — the raw material for race-condition replay.
|
|
430
|
+
// The key is omitted entirely when the request was alone.
|
|
431
|
+
const cohort = ctx ? snapshotCohort(ctx) : [];
|
|
432
|
+
if (cohort.length > 0) {
|
|
433
|
+
payload.concurrent_requests = cohort;
|
|
434
|
+
}
|
|
107
435
|
this.transport.enqueue(payload);
|
|
108
436
|
}
|
|
109
|
-
// Attach process-level handlers.
|
|
437
|
+
// Attach process-level handlers. AsyncLocalStorage context survives into
|
|
438
|
+
// both handlers for errors from async continuations (verified on Node 22),
|
|
439
|
+
// so even these captures carry request context when one exists. Contexts
|
|
440
|
+
// already captured (e.g. by the http emit wrapper's sync-throw catch) are
|
|
441
|
+
// skipped to avoid double-reporting.
|
|
110
442
|
attachProcessHandlers() {
|
|
111
443
|
process.on('uncaughtException', (err) => {
|
|
112
444
|
const ctx = contextStorage.getStore();
|
|
113
|
-
|
|
445
|
+
if (!ctx?.captured)
|
|
446
|
+
this.capture('unhandled_exception', err, ctx);
|
|
114
447
|
// Allow flush before exit.
|
|
115
448
|
void this.transport.flush().finally(() => process.exit(1));
|
|
116
449
|
});
|
|
117
450
|
process.on('unhandledRejection', (reason) => {
|
|
118
451
|
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
119
452
|
const ctx = contextStorage.getStore();
|
|
120
|
-
|
|
453
|
+
if (!ctx?.captured)
|
|
454
|
+
this.capture('unhandled_exception', err, ctx);
|
|
121
455
|
});
|
|
122
456
|
}
|
|
457
|
+
// Run any operation — a queue consumer, a script step, anything without
|
|
458
|
+
// an HTTP request — inside a capture context: errors are captured (then
|
|
459
|
+
// rethrown, so the caller's error flow is unchanged), and footprints /
|
|
460
|
+
// outbound calls recorded inside land on the capture.
|
|
461
|
+
async runWithContext(info, fn) {
|
|
462
|
+
return this.runInContext('unhandled_exception', info, fn);
|
|
463
|
+
}
|
|
464
|
+
// Background-job wrapper: like runWithContext, but failures ingest with
|
|
465
|
+
// the job_failure trigger so they're distinguishable on the dashboard.
|
|
466
|
+
async runJob(name, fn) {
|
|
467
|
+
return this.runInContext('job_failure', { name }, fn);
|
|
468
|
+
}
|
|
469
|
+
async runInContext(trigger, info, fn) {
|
|
470
|
+
const ctx = {
|
|
471
|
+
traceId: generateTraceId(),
|
|
472
|
+
capturedAt: new Date(),
|
|
473
|
+
request: {
|
|
474
|
+
method: info.method ?? 'JOB',
|
|
475
|
+
path: info.path ?? info.name ?? 'task',
|
|
476
|
+
headers: info.headers ?? {},
|
|
477
|
+
body: info.body ?? '',
|
|
478
|
+
},
|
|
479
|
+
footprint: [],
|
|
480
|
+
outboundCalls: [],
|
|
481
|
+
};
|
|
482
|
+
registerContext(ctx);
|
|
483
|
+
try {
|
|
484
|
+
return await contextStorage.run(ctx, () => fn());
|
|
485
|
+
}
|
|
486
|
+
catch (err) {
|
|
487
|
+
if (err instanceof Error)
|
|
488
|
+
this.capture(trigger, err, ctx);
|
|
489
|
+
throw err;
|
|
490
|
+
}
|
|
491
|
+
finally {
|
|
492
|
+
completeContext(ctx);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
// Record a data-footprint entry from ANY data layer (knex, raw SQL, an
|
|
496
|
+
// in-house DAO): one call per query site is what makes an error
|
|
497
|
+
// REPRODUCIBLE rather than just visible. `model` maps to a table via the
|
|
498
|
+
// tenant's naming strategy, exactly like a Prisma model name. Silent
|
|
499
|
+
// no-op outside a capture context.
|
|
500
|
+
recordFootprint(query) {
|
|
501
|
+
contextStorage.getStore()?.footprint.push(query);
|
|
502
|
+
}
|
|
123
503
|
patchOutbound() {
|
|
124
504
|
const sdk = this;
|
|
125
505
|
const allowHosts = this.outboundOpts?.allowHosts;
|
|
@@ -135,10 +515,35 @@ export class Reprova {
|
|
|
135
515
|
const originalFetch = globalThis.fetch;
|
|
136
516
|
if (typeof originalFetch === 'function') {
|
|
137
517
|
globalThis.fetch = async function patchedFetch(input, init) {
|
|
138
|
-
|
|
518
|
+
// Parse the URL before the fetch so the failure path below can name
|
|
519
|
+
// the destination even when the call never connects.
|
|
520
|
+
const url = typeof input === 'string' ? new URL(input) : input instanceof URL ? input : new URL(input.url);
|
|
521
|
+
const started = performance.now();
|
|
522
|
+
let res;
|
|
523
|
+
try {
|
|
524
|
+
res = await originalFetch(input, init);
|
|
525
|
+
}
|
|
526
|
+
catch (err) {
|
|
527
|
+
// A failed call (timeout, DNS, refused connection) is often THE
|
|
528
|
+
// cause of the error being captured — record it, then re-throw so
|
|
529
|
+
// application behavior is untouched.
|
|
530
|
+
const ctx = contextStorage.getStore();
|
|
531
|
+
if (ctx && shouldRecord(url.host)) {
|
|
532
|
+
const name = err?.name;
|
|
533
|
+
ctx.outboundCalls.push({
|
|
534
|
+
host: url.host,
|
|
535
|
+
method: (init?.method ?? 'GET').toUpperCase(),
|
|
536
|
+
path: url.pathname + url.search,
|
|
537
|
+
status: 0,
|
|
538
|
+
duration_ms: Math.round(performance.now() - started),
|
|
539
|
+
outcome: name === 'TimeoutError' || name === 'AbortError' ? 'timeout' : 'network_error',
|
|
540
|
+
recorded_for_replay: true,
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
throw err;
|
|
544
|
+
}
|
|
139
545
|
const ctx = contextStorage.getStore();
|
|
140
546
|
if (ctx) {
|
|
141
|
-
const url = typeof input === 'string' ? new URL(input) : input instanceof URL ? input : new URL(input.url);
|
|
142
547
|
const host = url.host;
|
|
143
548
|
if (shouldRecord(host)) {
|
|
144
549
|
const ct = res.headers.get('content-type') ?? '';
|
|
@@ -157,6 +562,8 @@ export class Reprova {
|
|
|
157
562
|
path: url.pathname + url.search,
|
|
158
563
|
status: res.status,
|
|
159
564
|
response_body: responseBody,
|
|
565
|
+
duration_ms: Math.round(performance.now() - started),
|
|
566
|
+
outcome: 'success',
|
|
160
567
|
recorded_for_replay: true,
|
|
161
568
|
});
|
|
162
569
|
}
|
|
@@ -172,6 +579,8 @@ export class Reprova {
|
|
|
172
579
|
}
|
|
173
580
|
// Auto-setup http_5xx hook for Express responses.
|
|
174
581
|
export function wrapResponse(res, sdk) {
|
|
582
|
+
if (typeof res.json !== 'function')
|
|
583
|
+
return; // non-standard res (tests, mocks)
|
|
175
584
|
const originalJson = res.json.bind(res);
|
|
176
585
|
res.json = function (body) {
|
|
177
586
|
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"}
|