@fixback/node 0.6.3 → 0.6.5

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 CHANGED
@@ -45,9 +45,10 @@ environment and deploy that environment's key.
45
45
 
46
46
  That single call wires:
47
47
 
48
- - a **batched** secret-key transport that backs off on `429` (honouring `Retry-After`) —
49
- each error carries the instant it was captured (`occurredAt`), so a batch flushed
50
- later still records when every error happened;
48
+ - a **batched** secret-key transport that backs off on `429` (honouring `Retry-After`) and
49
+ sends a flush too large for one request in several — each error carries the instant it
50
+ was captured (`occurredAt`), so a batch flushed later still records when every error
51
+ happened;
51
52
  - process-level `uncaughtException` / `unhandledRejection` capture that **never changes
52
53
  your process's exit behaviour** — `autoCapture: false` turns both off (or
53
54
  `captureUncaughtException` / `captureUnhandledRejection` individually);
@@ -128,7 +129,8 @@ with values), method, status, a correlation id, and the app-supplied user ref on
128
129
  query-string values. Request/response bodies are an explicit opt-in, **off by default**:
129
130
  with `captureBodies: true` the failing request's bodies ride on its server context —
130
131
  serialized, PII-redacted at the scrub choke point, and dropped (never truncated) when
131
- larger than `maxBodyBytes` (16384 by default, at most 65536). A `beforeSend(event)` hook
132
+ larger than `maxBodyBytes` (16384 by default, at most 65536) or when they would make their
133
+ error too large to send in one request. A `beforeSend(event)` hook
132
134
  lets you redact further or drop an event entirely (return `null`).
133
135
 
134
136
  ## Fails quiet
package/dist/client.d.ts CHANGED
@@ -13,7 +13,7 @@
13
13
  import { type InitOptions, type ResolvedConfig } from "./config";
14
14
  import { type ProcessLike } from "./process";
15
15
  import { type CaptureTransport } from "./transport";
16
- import type { ServerContext, Severity } from "./wire";
16
+ import { type ServerContext, type Severity } from "./wire";
17
17
  export type { BeforeSend, FixbackErrorEvent, ServerContext, Severity } from "./wire";
18
18
  export type { InitOptions } from "./config";
19
19
  export type { CaptureTransport } from "./transport";
package/dist/client.js CHANGED
@@ -25,6 +25,7 @@ const context_1 = require("./context");
25
25
  const process_1 = require("./process");
26
26
  const stack_1 = require("./stack");
27
27
  const transport_1 = require("./transport");
28
+ const wire_1 = require("./wire");
28
29
  /** Merge two server contexts, the override winning; `undefined` when both are empty. */
29
30
  function mergeServerContext(base, override) {
30
31
  if (!base && !override)
@@ -124,10 +125,13 @@ class FixbackClient {
124
125
  };
125
126
  if (this.config.scrub)
126
127
  applyDefaultScrub(event);
128
+ // The name and message as the default scrub left them, before the hook can change
129
+ // them: only that text is safe to cut short on the wire ({@link capErrorText}).
130
+ const scrubbed = this.config.scrub ? { type: event.type, value: event.value } : undefined;
127
131
  const finalised = this.runBeforeSend(event);
128
132
  if (!finalised)
129
133
  return; // dropped at the choke point — no transport
130
- this.transport.enqueue(toPayload(finalised));
134
+ this.transport.enqueue(toPayload(finalised, scrubbed));
131
135
  }
132
136
  catch {
133
137
  // Capture must never throw into the host (story 34).
@@ -182,16 +186,21 @@ function applyDefaultScrub(event) {
182
186
  }
183
187
  }
184
188
  /**
185
- * Project the event onto the wire payload. The error class + message ride as the
186
- * renamed `errorName` / `errorMessage` (ADR 2026-09-17) — already scrubbed by
187
- * {@link applyDefaultScrub}; `level` stays event-only. An empty message is dropped.
189
+ * Project the event onto the wire payload, bounded as ingest bounds it. The error class
190
+ * + message ride as the renamed `errorName` / `errorMessage` (ADR 2026-09-17), scrubbed
191
+ * by {@link applyDefaultScrub}; when that scrub produced them (`scrubbed`), they are cut
192
+ * to the lengths ingest keeps ({@link capErrorText}). A blank one is dropped, and a frame
193
+ * ingest would discard is not sent. So no bytes go on what the server throws away, and a
194
+ * long message cannot crowd a batch out of the API's body limit. `level` stays event-only.
188
195
  */
189
- function toPayload(event) {
196
+ function toPayload(event, scrubbed) {
190
197
  const payload = { errorSignature: event.errorSignature };
191
- if (event.type)
192
- payload.errorName = event.type;
193
- if (event.value)
194
- payload.errorMessage = event.value;
198
+ const errorName = capErrorText(event.type, wire_1.ERROR_NAME_MAX_LENGTH, event.type === scrubbed?.type);
199
+ if (errorName !== undefined)
200
+ payload.errorName = errorName;
201
+ const errorMessage = capErrorText(event.value, wire_1.ERROR_MESSAGE_MAX_LENGTH, event.value === scrubbed?.value);
202
+ if (errorMessage !== undefined)
203
+ payload.errorMessage = errorMessage;
195
204
  if (event.handled !== undefined)
196
205
  payload.handled = event.handled;
197
206
  if (event.release !== undefined)
@@ -201,12 +210,43 @@ function toPayload(event) {
201
210
  if (typeof event.occurredAt === "number" && Number.isFinite(event.occurredAt)) {
202
211
  payload.occurredAt = event.occurredAt;
203
212
  }
204
- if (event.errorFrames && event.errorFrames.length > 0)
205
- payload.errorFrames = event.errorFrames;
213
+ const frames = Array.isArray(event.errorFrames)
214
+ ? event.errorFrames.filter(keptByIngest).slice(0, wire_1.MAX_CAPTURED_FRAMES)
215
+ : [];
216
+ if (frames.length > 0)
217
+ payload.errorFrames = frames;
206
218
  if (event.server)
207
219
  payload.server = event.server;
208
220
  return payload;
209
221
  }
222
+ /**
223
+ * A captured name or message bounded as ingest bounds it: `undefined` when absent or
224
+ * blank, and cut to `max` UTF-16 code units when it is the default scrub's output.
225
+ * Ingest scrubs and then cuts, and cutting raw text first could split an email or a
226
+ * digit run into a fragment its re-scrub no longer matches. So raw text (`scrub: false`,
227
+ * or rewritten by `beforeSend`) goes whole, for ingest to cut once it has scrubbed it.
228
+ */
229
+ function capErrorText(value, max, scrubbed) {
230
+ if (typeof value !== "string" || value.trim().length === 0)
231
+ return undefined;
232
+ return scrubbed && value.length > max ? value.slice(0, max) : value;
233
+ }
234
+ /**
235
+ * Whether ingest keeps a frame (its frame schema, `apps/api/src/errors/frames.ts`): a
236
+ * file and a function within their lengths, a positive line, and a column that is a
237
+ * count. It discards any other, so the SDK does not send it.
238
+ */
239
+ function keptByIngest(frame) {
240
+ const { file, line, column, function: fn } = frame;
241
+ return (typeof file === "string" &&
242
+ file.length > 0 &&
243
+ file.length <= wire_1.FRAME_FILE_MAX_LENGTH &&
244
+ Number.isInteger(line) &&
245
+ line > 0 &&
246
+ (column == null || (Number.isInteger(column) && column >= 0)) &&
247
+ (fn == null ||
248
+ (typeof fn === "string" && fn.length > 0 && fn.length <= wire_1.FRAME_FUNCTION_MAX_LENGTH)));
249
+ }
210
250
  // --- Module-level singleton API ----------------------------------------------
211
251
  let activeClient = null;
212
252
  let activeUninstall = null;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAsPH,oBAqBC;AAGD,8BAEC;AAGD,4CAEC;AAGD,wCAEC;AAGD,sBAEC;AAGD,sBAOC;AAvSD,gDAAqG;AAErG,qCAAgF;AAChF,uCAAiD;AACjD,uCAAqE;AACrE,mCAAuC;AACvC,2CAA+D;AA+B/D,wFAAwF;AACxF,SAAS,kBAAkB,CACzB,IAA+B,EAC/B,QAAmC;IAEnC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAA4B,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;IACjF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,MAAa,aAAa;IACP,MAAM,CAAiB;IACvB,SAAS,CAA0B;IAEpD,YAAY,MAAsB,EAAE,OAAmB,EAAE;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,SAAS;gBACd,CAAC,MAAM,CAAC,OAAO;oBACb,CAAC,CAAC,IAAI,qBAAS,CAAC;wBACZ,QAAQ,EAAE,MAAM,CAAC,cAAc;wBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;wBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;qBAC5B,CAAC;oBACJ,CAAC,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,qFAAqF;IACrF,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,6EAA6E;IAC7E,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACrC,CAAC;IAED,qFAAqF;IACrF,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,CAAC;IAED,iFAAiF;IACjF,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,KAAc,EAAE,UAA0B,EAAE;QAC3D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAA,kCAAuB,EAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CACX;YACE,cAAc,EAAE,IAAA,6BAAkB,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;YACtD,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACpD,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,cAAc,CAAC,OAAe,EAAE,QAAkB,MAAM,EAAE,UAA0B,EAAE;QACpF,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CACX;YACE,cAAc,EAAE,IAAA,6BAAkB,EAAC,SAAS,EAAE,KAAK,CAAC;YACpD,IAAI,EAAE,SAAS;YACf,KAAK;YACL,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;SACjC,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,6DAA6D;IAC7D,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,+EAA+E;IACvE,QAAQ,CACd,OAC2D,EAC3D,OAAuB;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QACpD,IAAI,CAAC;YACH,MAAM,KAAK,GAAsB;gBAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,+EAA+E;gBAC/E,yEAAyE;gBACzE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,MAAM,EAAE,kBAAkB,CAAC,IAAA,8BAAoB,GAAE,EAAE,OAAO,CAAC,MAAM,CAAC;aACnE,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,4CAA4C;YACpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IAED,oFAAoF;IAC5E,aAAa,CAAC,KAAwB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,CAAC,sEAAsE;QACtF,CAAC;IACH,CAAC;CACF;AA5HD,sCA4HC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,KAAwB;IACjD,+EAA+E;IAC/E,gFAAgF;IAChF,KAAK,CAAC,IAAI,GAAG,IAAA,oBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,CAAC,KAAK,GAAG,IAAA,oBAAS,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,GAAG,KAAK;YACR,IAAI,EAAE,IAAA,mBAAQ,EAAC,KAAK,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IACE,MAAM;QACN,CAAC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,EACnF,CAAC;QACD,KAAK,CAAC,MAAM,GAAG;YACb,GAAG,MAAM;YACT,GAAG,CAAC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;gBACxC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAA,oBAAS,EAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gBAChD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;gBACzC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAA,oBAAS,EAAC,MAAM,CAAC,YAAY,CAAC,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAwB;IACzC,MAAM,OAAO,GAAmB,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;IACzE,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC7E,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/F,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,IAAI,YAAY,GAAyB,IAAI,CAAC;AAC9C,IAAI,eAAe,GAAwB,IAAI,CAAC;AAEhD;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,OAAoB,EAAE,IAAiB;IAC1D,MAAM,cAAc,GAAG,YAAY,CAAC;IACpC,MAAM,iBAAiB,GAAG,eAAe,CAAC;IAC1C,IAAI,iBAAiB;QAAE,iBAAiB,EAAE,CAAC;IAC3C,IAAI,cAAc;QAAE,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,YAAY,GAAG,MAAM,CAAC;IACtB,eAAe;QACb,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,IAAI,MAAM,CAAC,yBAAyB,CAAC;YACrF,CAAC,CAAC,IAAA,gCAAsB,EACpB,MAAM,EACN;gBACE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;gBACzD,yBAAyB,EAAE,MAAM,CAAC,yBAAyB;aAC5D,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAC7D;YACH,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,oFAAoF;AACpF,SAAgB,gBAAgB,CAAC,KAAc,EAAE,OAAwB;IACvE,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,wEAAwE;AACxE,SAAgB,cAAc,CAAC,OAAe,EAAE,KAAgB,EAAE,OAAwB;IACxF,YAAY,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,8DAA8D;AAC9D,SAAgB,KAAK;IACnB,OAAO,YAAY,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,8FAA8F;AAC9F,SAAgB,KAAK;IACnB,MAAM,OAAO,GAAG,YAAY,CAAC;IAC7B,MAAM,SAAS,GAAG,eAAe,CAAC;IAClC,YAAY,GAAG,IAAI,CAAC;IACpB,eAAe,GAAG,IAAI,CAAC;IACvB,IAAI,SAAS;QAAE,SAAS,EAAE,CAAC;IAC3B,OAAO,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,9 @@
4
4
  * Project secret key as an `Authorization: Bearer` token.
5
5
  *
6
6
  * - **Batched:** a server emits many errors, so they buffer and flush together
7
- * (on the batch cap, on an interval, on demand, and on `close`).
7
+ * (on the batch cap, on an interval, on demand, and on `close`). Each request is filled
8
+ * to a byte budget a little under the API's body limit ({@link MAX_BATCH_BYTES}); the
9
+ * rest goes in the next one.
8
10
  * - **Coalesced:** repeats of one fingerprint in a flush window fold into a single
9
11
  * item with a summed occurrence count — the client half of the crash-loop defence
10
12
  * (the server folds across flushes, ADR-0062).
@@ -32,6 +34,8 @@ export interface TransportConfig {
32
34
  readonly maxQueueSize: number;
33
35
  readonly flushIntervalMs: number;
34
36
  readonly timeoutMs: number;
37
+ /** The most bytes one request's body may take. Defaults to {@link MAX_BATCH_BYTES}. */
38
+ readonly maxBatchBytes?: number;
35
39
  }
36
40
  /** Injectable collaborators, defaulted to the real implementations. */
37
41
  export interface TransportDeps {
@@ -40,6 +44,7 @@ export interface TransportDeps {
40
44
  }
41
45
  export declare class Transport implements CaptureTransport {
42
46
  private readonly config;
47
+ private readonly maxBatchBytes;
43
48
  private readonly fetchImpl;
44
49
  private readonly backoff;
45
50
  /** Insertion-ordered buffer keyed by fingerprint, so a coalesce is O(1). */
@@ -61,8 +66,22 @@ export declare class Transport implements CaptureTransport {
61
66
  close(): Promise<void>;
62
67
  /** Send batches until the buffer drains, the window opens, or a send fails. */
63
68
  private drain;
64
- /** Remove and return up to `maxBatchSize` buffered errors, oldest first. */
69
+ /**
70
+ * Remove and return the oldest buffered errors as one request's batch: at most
71
+ * `maxBatchSize` of them, and only as many as fit the body budget. An error that would
72
+ * overflow the request waits, whole, for the next one. An error that alone exceeds the
73
+ * budget leads its own request, shedding evidence to fit ({@link shedEvidence}).
74
+ */
65
75
  private takeBatch;
76
+ /**
77
+ * Fit an error that alone exceeds the body budget by shedding the evidence it can
78
+ * lose: its captured request/response bodies first, then its stack frames. `undefined`
79
+ * when even that is not enough, which takes an outsized value the SDK sends whole: a raw
80
+ * message it does not cut (`capErrorText` in `client.ts`), a user ref, a release.
81
+ */
82
+ private shedEvidence;
83
+ /** Whether an error fits the body budget in a request of its own. */
84
+ private fitsAlone;
66
85
  /**
67
86
  * POST one batch. Returns `true` on acceptance; on a `429` it opens the backoff
68
87
  * window from `Retry-After` and returns `false`; any other failure (unreachable,
package/dist/transport.js CHANGED
@@ -5,7 +5,9 @@
5
5
  * Project secret key as an `Authorization: Bearer` token.
6
6
  *
7
7
  * - **Batched:** a server emits many errors, so they buffer and flush together
8
- * (on the batch cap, on an interval, on demand, and on `close`).
8
+ * (on the batch cap, on an interval, on demand, and on `close`). Each request is filled
9
+ * to a byte budget a little under the API's body limit ({@link MAX_BATCH_BYTES}); the
10
+ * rest goes in the next one.
9
11
  * - **Coalesced:** repeats of one fingerprint in a flush window fold into a single
10
12
  * item with a summed occurrence count — the client half of the crash-loop defence
11
13
  * (the server folds across flushes, ADR-0062).
@@ -17,8 +19,21 @@
17
19
  Object.defineProperty(exports, "__esModule", { value: true });
18
20
  exports.Transport = void 0;
19
21
  const sdk_core_1 = require("@fixback/sdk-core");
22
+ /**
23
+ * The most bytes one request's JSON body may take. The API parses JSON bodies up to
24
+ * Express's default 100 KB and refuses a larger one whole with a `413`, losing every
25
+ * error in it, so each request fills to a little under that.
26
+ */
27
+ const MAX_BATCH_BYTES = 96 * 1024;
28
+ /** The size of a value's JSON, in UTF-8 bytes — what it weighs in a request body. */
29
+ function jsonBytes(value) {
30
+ return Buffer.byteLength(JSON.stringify(value), "utf8");
31
+ }
32
+ /** The bytes the batch envelope adds around its errors: `{"errors":[` and `]}`. */
33
+ const ENVELOPE_BYTES = jsonBytes({ errors: [] });
20
34
  class Transport {
21
35
  config;
36
+ maxBatchBytes;
22
37
  fetchImpl;
23
38
  backoff;
24
39
  /** Insertion-ordered buffer keyed by fingerprint, so a coalesce is O(1). */
@@ -28,6 +43,7 @@ class Transport {
28
43
  closed = false;
29
44
  constructor(config, deps = {}) {
30
45
  this.config = config;
46
+ this.maxBatchBytes = config.maxBatchBytes ?? MAX_BATCH_BYTES;
31
47
  this.fetchImpl = deps.fetchImpl ?? (0, sdk_core_1.resolveFetch)();
32
48
  this.backoff = deps.backoff ?? new sdk_core_1.AutoReportBackoff();
33
49
  if (config.flushIntervalMs > 0) {
@@ -93,17 +109,68 @@ class Transport {
93
109
  return; // 429 (held) or unreachable/refused — stop; the rest waits or is dropped
94
110
  }
95
111
  }
96
- /** Remove and return up to `maxBatchSize` buffered errors, oldest first. */
112
+ /**
113
+ * Remove and return the oldest buffered errors as one request's batch: at most
114
+ * `maxBatchSize` of them, and only as many as fit the body budget. An error that would
115
+ * overflow the request waits, whole, for the next one. An error that alone exceeds the
116
+ * budget leads its own request, shedding evidence to fit ({@link shedEvidence}).
117
+ */
97
118
  takeBatch() {
98
119
  const batch = [];
120
+ let bytes = ENVELOPE_BYTES;
99
121
  for (const [signature, entry] of this.buffer) {
100
- batch.push(entry);
101
- this.buffer.delete(signature);
102
122
  if (batch.length >= this.config.maxBatchSize)
103
123
  break;
124
+ let item = entry;
125
+ let size;
126
+ try {
127
+ size = jsonBytes(item);
128
+ }
129
+ catch {
130
+ // A value JSON cannot carry (a BigInt or a cycle a hook left in) can never be
131
+ // sent: drop it, rather than let it stall every flush behind it.
132
+ this.buffer.delete(signature);
133
+ continue;
134
+ }
135
+ const comma = batch.length > 0 ? 1 : 0;
136
+ if (bytes + comma + size > this.maxBatchBytes) {
137
+ if (batch.length > 0)
138
+ break; // full: the rest goes in the next request
139
+ const shed = this.shedEvidence(item);
140
+ if (shed === undefined) {
141
+ // Over the budget even bare, so it cannot go: drop it rather than send a request
142
+ // the API may refuse, which would also stop the drain behind it.
143
+ this.buffer.delete(signature);
144
+ continue;
145
+ }
146
+ item = shed;
147
+ size = jsonBytes(item);
148
+ }
149
+ batch.push(item);
150
+ bytes += comma + size;
151
+ this.buffer.delete(signature);
104
152
  }
105
153
  return batch;
106
154
  }
155
+ /**
156
+ * Fit an error that alone exceeds the body budget by shedding the evidence it can
157
+ * lose: its captured request/response bodies first, then its stack frames. `undefined`
158
+ * when even that is not enough, which takes an outsized value the SDK sends whole: a raw
159
+ * message it does not cut (`capErrorText` in `client.ts`), a user ref, a release.
160
+ */
161
+ shedEvidence(item) {
162
+ const bodiless = item.server
163
+ ? { ...item, server: { ...item.server, requestBody: undefined, responseBody: undefined } }
164
+ : item;
165
+ if (this.fitsAlone(bodiless))
166
+ return bodiless;
167
+ const frameless = { ...bodiless, errorFrames: undefined };
168
+ return this.fitsAlone(frameless) ? frameless : undefined;
169
+ }
170
+ /** Whether an error fits the body budget in a request of its own. */
171
+ fitsAlone(item) {
172
+ return ENVELOPE_BYTES + jsonBytes(item) <= this.maxBatchBytes;
173
+ }
107
174
  /**
108
175
  * POST one batch. Returns `true` on acceptance; on a `429` it opens the backoff
109
176
  * window from `Retry-After` and returns `false`; any other failure (unreachable,
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -10,4 +10,4 @@
10
10
  * ever drift. Do not hand-edit this line to a value other than `package.json`'s
11
11
  * version.
12
12
  */
13
- export declare const NODE_SDK_VERSION = "0.6.3";
13
+ export declare const NODE_SDK_VERSION = "0.6.5";
package/dist/version.js CHANGED
@@ -13,5 +13,5 @@ exports.NODE_SDK_VERSION = void 0;
13
13
  * ever drift. Do not hand-edit this line to a value other than `package.json`'s
14
14
  * version.
15
15
  */
16
- exports.NODE_SDK_VERSION = "0.6.3";
16
+ exports.NODE_SDK_VERSION = "0.6.5";
17
17
  //# sourceMappingURL=version.js.map
package/dist/wire.d.ts CHANGED
@@ -144,3 +144,13 @@ export interface ServerErrorPayload {
144
144
  export interface ServerErrorBatch {
145
145
  readonly errors: readonly ServerErrorPayload[];
146
146
  }
147
+ /** The longest error name ingest keeps. */
148
+ export declare const ERROR_NAME_MAX_LENGTH = 256;
149
+ /** The longest error message ingest keeps. */
150
+ export declare const ERROR_MESSAGE_MAX_LENGTH = 2048;
151
+ /** The longest frame file ingest accepts; it discards a frame with a longer one. */
152
+ export declare const FRAME_FILE_MAX_LENGTH = 1024;
153
+ /** The longest frame function ingest accepts; it discards a frame with a longer one. */
154
+ export declare const FRAME_FUNCTION_MAX_LENGTH = 256;
155
+ /** The most frames ingest keeps, top of stack first. */
156
+ export declare const MAX_CAPTURED_FRAMES = 30;
package/dist/wire.js CHANGED
@@ -12,4 +12,22 @@
12
12
  * shared core, so the browser and node SDKs describe a frame identically.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MAX_CAPTURED_FRAMES = exports.FRAME_FUNCTION_MAX_LENGTH = exports.FRAME_FILE_MAX_LENGTH = exports.ERROR_MESSAGE_MAX_LENGTH = exports.ERROR_NAME_MAX_LENGTH = void 0;
16
+ /*
17
+ * The bounds the endpoint keeps, mirrored by value from `@fixback/shared` (which is
18
+ * workspace-private) under the same names. Ingest slices the name and message to
19
+ * these lengths and discards a frame outside them, so the SDK applies them before
20
+ * transport: no bytes are spent on what the server throws away, and a long message
21
+ * cannot crowd a batch out of the API's body limit.
22
+ */
23
+ /** The longest error name ingest keeps. */
24
+ exports.ERROR_NAME_MAX_LENGTH = 256;
25
+ /** The longest error message ingest keeps. */
26
+ exports.ERROR_MESSAGE_MAX_LENGTH = 2048;
27
+ /** The longest frame file ingest accepts; it discards a frame with a longer one. */
28
+ exports.FRAME_FILE_MAX_LENGTH = 1024;
29
+ /** The longest frame function ingest accepts; it discards a frame with a longer one. */
30
+ exports.FRAME_FUNCTION_MAX_LENGTH = 256;
31
+ /** The most frames ingest keeps, top of stack first. */
32
+ exports.MAX_CAPTURED_FRAMES = 30;
15
33
  //# sourceMappingURL=wire.js.map
package/dist/wire.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG"}
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAmJH;;;;;;GAMG;AAEH,2CAA2C;AAC9B,QAAA,qBAAqB,GAAG,GAAG,CAAC;AAEzC,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAE7C,oFAAoF;AACvE,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAE1C,wFAAwF;AAC3E,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAE7C,wDAAwD;AAC3C,QAAA,mBAAmB,GAAG,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fixback/node",
3
- "version": "0.6.3",
3
+ "version": "0.6.5",
4
4
  "description": "The Fixback backend error SDK for Node servers — one-call init, batched secret-key capture, process handlers, and Express + NestJS adapters.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@fixback/sdk-core": "0.11.1"
53
+ "@fixback/sdk-core": "0.12.0"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@nestjs/common": ">=10.0.0",
@@ -73,8 +73,8 @@
73
73
  }
74
74
  },
75
75
  "devDependencies": {
76
- "@nestjs/common": "^11.1.29",
77
- "@nestjs/core": "^11.1.29",
76
+ "@nestjs/common": "^11.2.7",
77
+ "@nestjs/core": "^11.2.7",
78
78
  "@types/node": "^22.20.1",
79
79
  "reflect-metadata": "^0.2.2",
80
80
  "rxjs": "^7.8.2",