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.
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/Logger.d.ts +24 -0
- package/dist/client/Logger.d.ts.map +1 -1
- package/dist/client/Logger.js +125 -24
- package/dist/client/Logger.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/Logger.ts +149 -27
- package/src/client/errorLogWireEntry.test.ts +147 -0
- package/src/server/errorDedup.test.ts +26 -0
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.1067";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
package/dist/client/Logger.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/client/Logger.js
CHANGED
|
@@ -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
|
-
//
|
|
217
|
-
//
|
|
218
|
-
//
|
|
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.
|
|
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": [
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.1067";
|
package/src/client/Logger.ts
CHANGED
|
@@ -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
|
-
//
|
|
259
|
-
//
|
|
260
|
-
//
|
|
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
|
});
|