ugly-app 0.1.1066 → 0.1.1067

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.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.1066";
1
+ export declare const CLI_VERSION = "0.1.1067";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.1066";
2
+ export const CLI_VERSION = "0.1.1067";
3
3
  //# sourceMappingURL=version.js.map
@@ -1,4 +1,28 @@
1
1
  import type { ErrorLogEntry } from '../shared/DB.js';
2
+ export interface CapturedEntry {
3
+ type: 'console' | 'error' | 'network';
4
+ data: Record<string, unknown>;
5
+ timestamp: number;
6
+ }
7
+ /** Size-bound a context object: cap each string/array/key count, then drop
8
+ * the largest keys until the whole thing serializes under the byte budget. */
9
+ export declare function boundContext(ctx: Record<string, unknown>): Record<string, unknown>;
10
+ /**
11
+ * Transform one captured error/warn entry into the `errorLogCaptureNoAuth`
12
+ * wire shape. Keeps the real `type` and forwards the diagnostic fields as
13
+ * `context` (merged over any `context` the capture site already set,
14
+ * size-bounded). Exported for tests.
15
+ */
16
+ export declare function toErrorLogWireEntry(e: CapturedEntry, fallbackUrl: string): {
17
+ level: 'error' | 'warn';
18
+ message: string;
19
+ stack?: string;
20
+ url: string;
21
+ timestamp: number;
22
+ source: 'browser';
23
+ type: 'console' | 'exception' | 'unhandled';
24
+ context?: Record<string, unknown>;
25
+ };
2
26
  /** True while this session still has opaque-error budget. Counts every call. */
3
27
  export declare function shouldReportOpaqueError(): boolean;
4
28
  /** Test seam — resets the per-session opaque budget. */
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAySpE,gFAAgF;AAChF,wBAAgB,uBAAuB,IAAI,OAAO,CAGjD;AAED,wDAAwD;AACxD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAuBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAqBhE;AAsOD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAK,GAAG,IAAI,CAEtD"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAuBpE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AA0JD;+EAC+E;AAC/E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBzB;AAUD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,aAAa,EAChB,WAAW,EAAE,MAAM,GAClB;IACD,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAmCA;AAqJD,gFAAgF;AAChF,wBAAgB,uBAAuB,IAAI,OAAO,CAGjD;AAED,wDAAwD;AACxD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAuBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAqBhE;AAsOD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAK,GAAG,IAAI,CAEtD"}
@@ -73,27 +73,7 @@ function flush() {
73
73
  .filter((e) => e.type === 'error' ||
74
74
  (e.type === 'console' &&
75
75
  (e.data['level'] === 'error' || e.data['level'] === 'warn')))
76
- .map((e) => {
77
- const level = e.type === 'error'
78
- ? 'error'
79
- : (e.data['level'] ?? 'error');
80
- const message = e.type === 'error'
81
- ? typeof e.data['message'] === 'string'
82
- ? e.data['message']
83
- : JSON.stringify(e.data['message'] ?? '')
84
- : (e.data['args'] ?? []).join(' ');
85
- const stack = e.data['stack'];
86
- const url = e.data['url'] ?? window.location.href;
87
- return {
88
- level,
89
- message,
90
- ...(stack ? { stack } : {}),
91
- url,
92
- timestamp: e.timestamp,
93
- source: 'browser',
94
- type: 'console',
95
- };
96
- });
76
+ .map((e) => toErrorLogWireEntry(e, window.location.href));
97
77
  if (errorEntries.length === 0)
98
78
  return;
99
79
  // Snapshot of the recent console history (all levels) so the stored
@@ -113,6 +93,125 @@ function flush() {
113
93
  ...(version ? { version } : {}),
114
94
  }, _origFetch ?? fetch);
115
95
  }
96
+ /** Diagnostic fields a capture site attaches to `data` that the errorLog row
97
+ * has no column for. They travel in `context` instead. The opaque
98
+ * "Script error." ones (crossOriginOpaque and friends) are the reason this
99
+ * exists: before they were forwarded, every prod row arrived without them. */
100
+ const CONTEXT_FIELDS = [
101
+ 'crossOriginOpaque',
102
+ 'crossOriginScriptOrigins',
103
+ 'inlineScripts',
104
+ 'nativeBridge',
105
+ 'userAgent',
106
+ 'filename',
107
+ 'lineno',
108
+ 'colno',
109
+ 'unhandledRejection',
110
+ ];
111
+ /** Bounds for the forwarded context, so one entry can't blow the batch size. */
112
+ const CONTEXT_MAX_STRING = 1000;
113
+ const CONTEXT_MAX_ARRAY = 20;
114
+ const CONTEXT_MAX_KEYS = 40;
115
+ const CONTEXT_MAX_BYTES = 8000;
116
+ function boundContextValue(value, depth) {
117
+ if (typeof value === 'string') {
118
+ return value.length > CONTEXT_MAX_STRING
119
+ ? value.slice(0, CONTEXT_MAX_STRING) + '…'
120
+ : value;
121
+ }
122
+ if (value === null ||
123
+ typeof value === 'number' ||
124
+ typeof value === 'boolean') {
125
+ return value;
126
+ }
127
+ if (depth >= 3)
128
+ return safeStringify(value).slice(0, CONTEXT_MAX_STRING);
129
+ if (Array.isArray(value)) {
130
+ return value
131
+ .slice(0, CONTEXT_MAX_ARRAY)
132
+ .map((v) => boundContextValue(v, depth + 1));
133
+ }
134
+ if (typeof value === 'object') {
135
+ const out = {};
136
+ for (const [k, v] of Object.entries(value).slice(0, CONTEXT_MAX_KEYS)) {
137
+ out[k] = boundContextValue(v, depth + 1);
138
+ }
139
+ return out;
140
+ }
141
+ return undefined; // functions, symbols, bigint, undefined: not JSON
142
+ }
143
+ /** Size-bound a context object: cap each string/array/key count, then drop
144
+ * the largest keys until the whole thing serializes under the byte budget. */
145
+ export function boundContext(ctx) {
146
+ const bounded = boundContextValue(ctx, 0);
147
+ for (const k of Object.keys(bounded)) {
148
+ if (bounded[k] === undefined)
149
+ delete bounded[k];
150
+ }
151
+ let size = safeStringify(bounded).length;
152
+ while (size > CONTEXT_MAX_BYTES) {
153
+ let biggest = '';
154
+ let biggestSize = -1;
155
+ for (const [k, v] of Object.entries(bounded)) {
156
+ const n = safeStringify(v).length;
157
+ if (n > biggestSize) {
158
+ biggest = k;
159
+ biggestSize = n;
160
+ }
161
+ }
162
+ if (!biggest)
163
+ break;
164
+ delete bounded[biggest];
165
+ bounded['contextTruncated'] = true;
166
+ size = safeStringify(bounded).length;
167
+ }
168
+ return bounded;
169
+ }
170
+ /** The errorLog row type for a captured entry. Matches the server's
171
+ * `ErrorLogType`: window.onerror is an exception, an unhandled promise
172
+ * rejection is 'unhandled', console.error/warn stays 'console'. */
173
+ function errorLogType(e) {
174
+ if (e.type !== 'error')
175
+ return 'console';
176
+ return e.data['unhandledRejection'] === true ? 'unhandled' : 'exception';
177
+ }
178
+ /**
179
+ * Transform one captured error/warn entry into the `errorLogCaptureNoAuth`
180
+ * wire shape. Keeps the real `type` and forwards the diagnostic fields as
181
+ * `context` (merged over any `context` the capture site already set,
182
+ * size-bounded). Exported for tests.
183
+ */
184
+ export function toErrorLogWireEntry(e, fallbackUrl) {
185
+ const level = e.type === 'error'
186
+ ? 'error'
187
+ : (e.data['level'] ?? 'error');
188
+ const message = e.type === 'error'
189
+ ? typeof e.data['message'] === 'string'
190
+ ? e.data['message']
191
+ : JSON.stringify(e.data['message'] ?? '')
192
+ : (e.data['args'] ?? []).join(' ');
193
+ const stack = e.data['stack'];
194
+ const url = e.data['url'] ?? fallbackUrl;
195
+ const existing = e.data['context'];
196
+ const merged = existing && typeof existing === 'object' && !Array.isArray(existing)
197
+ ? { ...existing }
198
+ : {};
199
+ for (const key of CONTEXT_FIELDS) {
200
+ if (e.data[key] !== undefined)
201
+ merged[key] = e.data[key];
202
+ }
203
+ const context = Object.keys(merged).length > 0 ? boundContext(merged) : undefined;
204
+ return {
205
+ level,
206
+ message,
207
+ ...(stack ? { stack } : {}),
208
+ url,
209
+ timestamp: e.timestamp,
210
+ source: 'browser',
211
+ type: errorLogType(e),
212
+ ...(context ? { context } : {}),
213
+ };
214
+ }
116
215
  // Serialize a console arg without ever throwing. Plain `JSON.stringify`
117
216
  // throws "Converting circular structure to JSON" on circular objects — and
118
217
  // because this runs *inside* the wrapped `console.log` (synchronously, often
@@ -213,9 +312,11 @@ function captureConsole(level, args) {
213
312
  // the suspect origins; do the same here so this one doesn't land in the error
214
313
  // log as an unactionable one-liner.
215
314
  const opaqueFromConsole = level === 'error' && !stack && isOpaqueMessage(message);
216
- // This is the route the native shells actually take — every prod row was
217
- // `type: 'console'`, not a window.onerror report — so the budget has to apply
218
- // here too, or the flood just arrives by the other door.
315
+ // Native shells mirror uncaught errors into console.error, so this is a
316
+ // real second route for opaque errors, not just window.onerror. (Prod rows
317
+ // before 0.1.1067 all read `type: 'console'` only because Logger.flush
318
+ // hard-coded it; that said nothing about which route they took.) The budget
319
+ // has to apply here too, or the flood just arrives by the other door.
219
320
  if (opaqueFromConsole && !shouldReportOpaqueError())
220
321
  return;
221
322
  pushSend({
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/client/Logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ugly-app",
3
3
  "packageManager": "pnpm@10.34.5",
4
- "version": "0.1.1066",
4
+ "version": "0.1.1067",
5
5
  "type": "module",
6
6
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
7
7
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.1066";
2
+ export const CLI_VERSION = "0.1.1067";
@@ -21,7 +21,7 @@ import { maybeStreamLine } from './debugStreamClient.js';
21
21
  // One pipeline, one wrap of each browser global, one buffer. The
22
22
  // destination is the only branch.
23
23
 
24
- interface CapturedEntry {
24
+ export interface CapturedEntry {
25
25
  type: 'console' | 'error' | 'network';
26
26
  data: Record<string, unknown>;
27
27
  timestamp: number;
@@ -104,29 +104,7 @@ function flush(): void {
104
104
  (e.type === 'console' &&
105
105
  (e.data['level'] === 'error' || e.data['level'] === 'warn')),
106
106
  )
107
- .map((e) => {
108
- const level: 'error' | 'warn' =
109
- e.type === 'error'
110
- ? 'error'
111
- : ((e.data['level'] as 'error' | 'warn') ?? 'error');
112
- const message =
113
- e.type === 'error'
114
- ? typeof e.data['message'] === 'string'
115
- ? e.data['message']
116
- : JSON.stringify(e.data['message'] ?? '')
117
- : ((e.data['args'] as string[] | undefined) ?? []).join(' ');
118
- const stack = e.data['stack'] as string | undefined;
119
- const url = (e.data['url'] as string | undefined) ?? window.location.href;
120
- return {
121
- level,
122
- message,
123
- ...(stack ? { stack } : {}),
124
- url,
125
- timestamp: e.timestamp,
126
- source: 'browser' as const,
127
- type: 'console' as const,
128
- };
129
- });
107
+ .map((e) => toErrorLogWireEntry(e, window.location.href));
130
108
  if (errorEntries.length === 0) return;
131
109
  // Snapshot of the recent console history (all levels) so the stored
132
110
  // errors carry the logs that led up to them. Bounded to the last 50.
@@ -150,6 +128,148 @@ function flush(): void {
150
128
  );
151
129
  }
152
130
 
131
+ /** Diagnostic fields a capture site attaches to `data` that the errorLog row
132
+ * has no column for. They travel in `context` instead. The opaque
133
+ * "Script error." ones (crossOriginOpaque and friends) are the reason this
134
+ * exists: before they were forwarded, every prod row arrived without them. */
135
+ const CONTEXT_FIELDS = [
136
+ 'crossOriginOpaque',
137
+ 'crossOriginScriptOrigins',
138
+ 'inlineScripts',
139
+ 'nativeBridge',
140
+ 'userAgent',
141
+ 'filename',
142
+ 'lineno',
143
+ 'colno',
144
+ 'unhandledRejection',
145
+ ] as const;
146
+
147
+ /** Bounds for the forwarded context, so one entry can't blow the batch size. */
148
+ const CONTEXT_MAX_STRING = 1000;
149
+ const CONTEXT_MAX_ARRAY = 20;
150
+ const CONTEXT_MAX_KEYS = 40;
151
+ const CONTEXT_MAX_BYTES = 8000;
152
+
153
+ function boundContextValue(value: unknown, depth: number): unknown {
154
+ if (typeof value === 'string') {
155
+ return value.length > CONTEXT_MAX_STRING
156
+ ? value.slice(0, CONTEXT_MAX_STRING) + '…'
157
+ : value;
158
+ }
159
+ if (
160
+ value === null ||
161
+ typeof value === 'number' ||
162
+ typeof value === 'boolean'
163
+ ) {
164
+ return value;
165
+ }
166
+ if (depth >= 3) return safeStringify(value).slice(0, CONTEXT_MAX_STRING);
167
+ if (Array.isArray(value)) {
168
+ return value
169
+ .slice(0, CONTEXT_MAX_ARRAY)
170
+ .map((v) => boundContextValue(v, depth + 1));
171
+ }
172
+ if (typeof value === 'object') {
173
+ const out: Record<string, unknown> = {};
174
+ for (const [k, v] of Object.entries(value).slice(0, CONTEXT_MAX_KEYS)) {
175
+ out[k] = boundContextValue(v, depth + 1);
176
+ }
177
+ return out;
178
+ }
179
+ return undefined; // functions, symbols, bigint, undefined: not JSON
180
+ }
181
+
182
+ /** Size-bound a context object: cap each string/array/key count, then drop
183
+ * the largest keys until the whole thing serializes under the byte budget. */
184
+ export function boundContext(
185
+ ctx: Record<string, unknown>,
186
+ ): Record<string, unknown> {
187
+ const bounded = boundContextValue(ctx, 0) as Record<string, unknown>;
188
+ for (const k of Object.keys(bounded)) {
189
+ if (bounded[k] === undefined) delete bounded[k];
190
+ }
191
+ let size = safeStringify(bounded).length;
192
+ while (size > CONTEXT_MAX_BYTES) {
193
+ let biggest = '';
194
+ let biggestSize = -1;
195
+ for (const [k, v] of Object.entries(bounded)) {
196
+ const n = safeStringify(v).length;
197
+ if (n > biggestSize) {
198
+ biggest = k;
199
+ biggestSize = n;
200
+ }
201
+ }
202
+ if (!biggest) break;
203
+ delete bounded[biggest];
204
+ bounded['contextTruncated'] = true;
205
+ size = safeStringify(bounded).length;
206
+ }
207
+ return bounded;
208
+ }
209
+
210
+ /** The errorLog row type for a captured entry. Matches the server's
211
+ * `ErrorLogType`: window.onerror is an exception, an unhandled promise
212
+ * rejection is 'unhandled', console.error/warn stays 'console'. */
213
+ function errorLogType(e: CapturedEntry): 'console' | 'exception' | 'unhandled' {
214
+ if (e.type !== 'error') return 'console';
215
+ return e.data['unhandledRejection'] === true ? 'unhandled' : 'exception';
216
+ }
217
+
218
+ /**
219
+ * Transform one captured error/warn entry into the `errorLogCaptureNoAuth`
220
+ * wire shape. Keeps the real `type` and forwards the diagnostic fields as
221
+ * `context` (merged over any `context` the capture site already set,
222
+ * size-bounded). Exported for tests.
223
+ */
224
+ export function toErrorLogWireEntry(
225
+ e: CapturedEntry,
226
+ fallbackUrl: string,
227
+ ): {
228
+ level: 'error' | 'warn';
229
+ message: string;
230
+ stack?: string;
231
+ url: string;
232
+ timestamp: number;
233
+ source: 'browser';
234
+ type: 'console' | 'exception' | 'unhandled';
235
+ context?: Record<string, unknown>;
236
+ } {
237
+ const level: 'error' | 'warn' =
238
+ e.type === 'error'
239
+ ? 'error'
240
+ : ((e.data['level'] as 'error' | 'warn' | undefined) ?? 'error');
241
+ const message =
242
+ e.type === 'error'
243
+ ? typeof e.data['message'] === 'string'
244
+ ? e.data['message']
245
+ : JSON.stringify(e.data['message'] ?? '')
246
+ : ((e.data['args'] as string[] | undefined) ?? []).join(' ');
247
+ const stack = e.data['stack'] as string | undefined;
248
+ const url = (e.data['url'] as string | undefined) ?? fallbackUrl;
249
+
250
+ const existing = e.data['context'];
251
+ const merged: Record<string, unknown> =
252
+ existing && typeof existing === 'object' && !Array.isArray(existing)
253
+ ? { ...(existing as Record<string, unknown>) }
254
+ : {};
255
+ for (const key of CONTEXT_FIELDS) {
256
+ if (e.data[key] !== undefined) merged[key] = e.data[key];
257
+ }
258
+ const context =
259
+ Object.keys(merged).length > 0 ? boundContext(merged) : undefined;
260
+
261
+ return {
262
+ level,
263
+ message,
264
+ ...(stack ? { stack } : {}),
265
+ url,
266
+ timestamp: e.timestamp,
267
+ source: 'browser',
268
+ type: errorLogType(e),
269
+ ...(context ? { context } : {}),
270
+ };
271
+ }
272
+
153
273
  // Serialize a console arg without ever throwing. Plain `JSON.stringify`
154
274
  // throws "Converting circular structure to JSON" on circular objects — and
155
275
  // because this runs *inside* the wrapped `console.log` (synchronously, often
@@ -255,9 +375,11 @@ function captureConsole(level: ErrorLogLevel, args: unknown[]): void {
255
375
  const opaqueFromConsole =
256
376
  level === 'error' && !stack && isOpaqueMessage(message);
257
377
 
258
- // This is the route the native shells actually take — every prod row was
259
- // `type: 'console'`, not a window.onerror report — so the budget has to apply
260
- // here too, or the flood just arrives by the other door.
378
+ // Native shells mirror uncaught errors into console.error, so this is a
379
+ // real second route for opaque errors, not just window.onerror. (Prod rows
380
+ // before 0.1.1067 all read `type: 'console'` only because Logger.flush
381
+ // hard-coded it; that said nothing about which route they took.) The budget
382
+ // has to apply here too, or the flood just arrives by the other door.
261
383
  if (opaqueFromConsole && !shouldReportOpaqueError()) return;
262
384
 
263
385
  pushSend({
@@ -0,0 +1,147 @@
1
+ // @vitest-environment jsdom
2
+ //
3
+ // Logger.flush used to keep only level/message/stack/url/timestamp and
4
+ // hard-code `type: 'console'`, so the diagnostics attached to opaque
5
+ // "Script error." reports (crossOriginOpaque, the suspect origins, the native
6
+ // bridge, the user agent, filename/lineno/colno) never reached the prod
7
+ // errorLog, and every row looked like a console.error.
8
+ import { describe, it, expect } from 'vitest';
9
+ import { toErrorLogWireEntry, boundContext } from './Logger.js';
10
+
11
+ const PAGE = 'https://app.example.com/page';
12
+
13
+ describe('toErrorLogWireEntry', () => {
14
+ it('forwards opaque-error diagnostics as context and keeps type exception', () => {
15
+ const out = toErrorLogWireEntry(
16
+ {
17
+ type: 'error',
18
+ data: {
19
+ message: 'Script error.',
20
+ url: PAGE,
21
+ filename: 'https://cdn.example.com/x.js',
22
+ lineno: 0,
23
+ colno: 0,
24
+ crossOriginOpaque: true,
25
+ crossOriginScriptOrigins: ['https://cdn.example.com'],
26
+ inlineScripts: 2,
27
+ nativeBridge: ['webkit'],
28
+ userAgent: 'TestUA/1.0',
29
+ },
30
+ timestamp: 123,
31
+ },
32
+ PAGE,
33
+ );
34
+ expect(out).toEqual({
35
+ level: 'error',
36
+ message: 'Script error.',
37
+ url: PAGE,
38
+ timestamp: 123,
39
+ source: 'browser',
40
+ type: 'exception',
41
+ context: {
42
+ filename: 'https://cdn.example.com/x.js',
43
+ lineno: 0,
44
+ colno: 0,
45
+ crossOriginOpaque: true,
46
+ crossOriginScriptOrigins: ['https://cdn.example.com'],
47
+ inlineScripts: 2,
48
+ nativeBridge: ['webkit'],
49
+ userAgent: 'TestUA/1.0',
50
+ },
51
+ });
52
+ });
53
+
54
+ it('marks unhandled rejections as type unhandled', () => {
55
+ const out = toErrorLogWireEntry(
56
+ {
57
+ type: 'error',
58
+ data: {
59
+ message: 'nope',
60
+ stack: 'Error: nope',
61
+ unhandledRejection: true,
62
+ },
63
+ timestamp: 1,
64
+ },
65
+ PAGE,
66
+ );
67
+ expect(out.type).toBe('unhandled');
68
+ expect(out.stack).toBe('Error: nope');
69
+ expect(out.url).toBe(PAGE);
70
+ expect(out.context).toEqual({ unhandledRejection: true });
71
+ });
72
+
73
+ it('keeps console entries as type console, with opaque context when present', () => {
74
+ const out = toErrorLogWireEntry(
75
+ {
76
+ type: 'console',
77
+ data: {
78
+ level: 'error',
79
+ args: ['Script error.'],
80
+ crossOriginOpaque: true,
81
+ userAgent: 'UA',
82
+ },
83
+ timestamp: 5,
84
+ },
85
+ PAGE,
86
+ );
87
+ expect(out.type).toBe('console');
88
+ expect(out.level).toBe('error');
89
+ expect(out.message).toBe('Script error.');
90
+ expect(out.context).toEqual({ crossOriginOpaque: true, userAgent: 'UA' });
91
+ });
92
+
93
+ it('omits context when there is nothing to forward', () => {
94
+ const out = toErrorLogWireEntry(
95
+ {
96
+ type: 'console',
97
+ data: { level: 'warn', args: ['a', 'b'] },
98
+ timestamp: 9,
99
+ },
100
+ PAGE,
101
+ );
102
+ expect(out).not.toHaveProperty('context');
103
+ expect(out.message).toBe('a b');
104
+ expect(out.level).toBe('warn');
105
+ });
106
+
107
+ it('merges with an existing context, the diagnostics winning on collision', () => {
108
+ const out = toErrorLogWireEntry(
109
+ {
110
+ type: 'error',
111
+ data: {
112
+ message: 'x',
113
+ context: { route: '/home', userAgent: 'stale' },
114
+ userAgent: 'fresh',
115
+ },
116
+ timestamp: 1,
117
+ },
118
+ PAGE,
119
+ );
120
+ expect(out.context).toEqual({ route: '/home', userAgent: 'fresh' });
121
+ });
122
+ });
123
+
124
+ describe('boundContext', () => {
125
+ it('caps long strings and long arrays', () => {
126
+ const out = boundContext({
127
+ userAgent: 'u'.repeat(5000),
128
+ crossOriginScriptOrigins: Array.from({ length: 100 }, (_, i) => `o${i}`),
129
+ });
130
+ expect((out['userAgent'] as string).length).toBeLessThanOrEqual(1001);
131
+ expect(out['crossOriginScriptOrigins']).toHaveLength(20);
132
+ });
133
+
134
+ it('drops the largest keys until under the byte budget', () => {
135
+ const big: Record<string, unknown> = { keep: 1 };
136
+ for (let i = 0; i < 30; i++) big[`k${i}`] = 'v'.repeat(900);
137
+ const out = boundContext(big);
138
+ expect(JSON.stringify(out).length).toBeLessThanOrEqual(8000);
139
+ expect(out['keep']).toBe(1);
140
+ expect(out['contextTruncated']).toBe(true);
141
+ });
142
+
143
+ it('drops values that are not JSON', () => {
144
+ const out = boundContext({ fn: () => 1, ok: 'y' });
145
+ expect(out).toEqual({ ok: 'y' });
146
+ });
147
+ });
@@ -144,4 +144,30 @@ describe('error level filtering', () => {
144
144
  await flushErrors();
145
145
  expect(errorBinds).toHaveLength(1);
146
146
  });
147
+
148
+ it('stores the client-sent type and context as sent', async () => {
149
+ const { db, errorBinds } = capturingDb();
150
+ setTelemetryDb(db);
151
+ captureClientErrors([
152
+ {
153
+ level: 'error',
154
+ message: 'Script error. (type/context passthrough)',
155
+ type: 'exception',
156
+ context: {
157
+ crossOriginOpaque: true,
158
+ crossOriginScriptOrigins: ['https://cdn.example.com'],
159
+ lineno: 0,
160
+ },
161
+ },
162
+ ]);
163
+ await flushErrors();
164
+ expect(errorBinds).toHaveLength(1);
165
+ const row = errorBinds[0]!;
166
+ expect(row[7]).toBe('exception'); // type column
167
+ expect(JSON.parse(row[15] as string)).toEqual({
168
+ crossOriginOpaque: true,
169
+ crossOriginScriptOrigins: ['https://cdn.example.com'],
170
+ lineno: 0,
171
+ });
172
+ });
147
173
  });