Skip to content

Commit e6f3b7e

Browse files
committed
Rename reportError to logError to avoid new global type
There's a relatively recent addition to the DOM global types, due to a real method available for web workers, which means it's very very easy to accidentally call reportError without importing it, which fails everywhere except web workers, where it merely does completely the wrong thing. logError is exactly the same, but without that problem.
1 parent 42987f2 commit e6f3b7e

20 files changed

+69
-69
lines changed

src/api/api-model.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { getSystemProxy } from 'os-proxy-config';
66

77
import { SERVER_VERSION } from "../constants";
88
import { delay } from '../util/promise';
9-
import { reportError, addBreadcrumb } from '../error-tracking';
9+
import { logError, addBreadcrumb } from '../error-tracking';
1010
import { HtkConfig } from "../config";
1111
import { ActivationError, Interceptor } from "../interceptors";
1212
import { getDnsServer } from '../dns-server';
@@ -170,7 +170,7 @@ export class ApiModel {
170170
// After 30s, don't stop activating, but report an error if we're not done yet
171171
let activationDone = false;
172172
delay(30000).then(() => {
173-
if (!activationDone) reportError(`Timeout activating ${id}`)
173+
if (!activationDone) logError(`Timeout activating ${id}`)
174174
});
175175

176176
try {
@@ -183,7 +183,7 @@ export class ApiModel {
183183
activationDone = true;
184184
if (activationError.reportable !== false) {
185185
addBreadcrumb(`Failed to activate ${id}`, { category: 'interceptor' });
186-
reportError(err);
186+
logError(err);
187187
}
188188
return {
189189
success: false,
@@ -202,7 +202,7 @@ export class ApiModel {
202202
const interceptor = this.interceptors[id];
203203
if (!interceptor) throw new Error(`Unknown interceptor ${id}`);
204204

205-
await interceptor.deactivate(proxyPort, options).catch(reportError);
205+
await interceptor.deactivate(proxyPort, options).catch(logError);
206206
return { success: !interceptor.isActive(proxyPort) };
207207
}
208208

@@ -219,7 +219,7 @@ export class ApiModel {
219219
const withFallback = <R>(p: () => Promise<R>, timeoutMs: number, defaultValue: R) =>
220220
Promise.race([
221221
p().catch((error) => {
222-
reportError(error);
222+
logError(error);
223223
return defaultValue;
224224
}),
225225
delay(timeoutMs).then(() => defaultValue)

src/api/rest-api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type {
1212
import type { ParsedQs } from 'qs';
1313

1414
import { ErrorLike, StatusError } from '../util/error';
15-
import { reportError } from '../error-tracking';
15+
import { logError } from '../error-tracking';
1616
import { ApiModel } from './api-model';
1717
import * as Client from '../client/client-types';
1818

@@ -175,7 +175,7 @@ function handleErrors<
175175
const error = e as ErrorLike;
176176

177177
console.log(`Error handling request to ${req.path}: ${error.message ?? error}`);
178-
reportError(error);
178+
logError(error);
179179

180180
// Use default error handler if response started (kills the connection)
181181
if (res.headersSent) return next(error)

src/browsers.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
update as updateBrowserCacheCb
1111
} from '@httptoolkit/browser-launcher';
1212

13-
import { reportError } from './error-tracking';
13+
import { logError } from './error-tracking';
1414
import { delay } from './util/promise';
1515
import { isErrorLike } from './util/error';
1616
import { readFile, deleteFile } from './util/fs';
@@ -40,7 +40,7 @@ export async function checkBrowserConfig(configPath: string) {
4040
if (isErrorLike(err) && err.code === 'ENOENT') return;
4141

4242
console.error('Failed to clear broken config file:', err);
43-
reportError(err);
43+
logError(err);
4444
});
4545
}
4646
}
@@ -63,13 +63,13 @@ function getLauncher(configPath: string) {
6363
// Need to reload the launcher after updating the cache:
6464
launcher = getBrowserLauncher(browserConfig);
6565
} catch (e) {
66-
reportError(e)
66+
logError(e)
6767
}
6868
});
6969

7070
// Reset & retry if this fails somehow:
7171
launcher.catch((e) => {
72-
reportError(e);
72+
logError(e);
7373
launcher = undefined;
7474
});
7575
}
@@ -92,7 +92,7 @@ export const launchBrowser = async (url: string, options: LaunchOptions, configP
9292
// fallback error handling: log & report & don't crash.
9393
if (browserInstance.process.listenerCount('error') === 1) {
9494
console.log('Browser launch error');
95-
reportError(e);
95+
logError(e);
9696
}
9797
});
9898

src/commands/start.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function maybeBundleImport<T>(moduleName: string): T {
2222
return require('../' + moduleName);
2323
}
2424
}
25-
const { initErrorTracking, reportError } = maybeBundleImport<ErrorTrackingModule>('error-tracking');
25+
const { initErrorTracking, logError } = maybeBundleImport<ErrorTrackingModule>('error-tracking');
2626
initErrorTracking();
2727

2828
import { Command, flags } from '@oclif/command'
@@ -49,7 +49,7 @@ class HttpToolkitServer extends Command {
4949
configPath: flags.config,
5050
authToken: envToken || flags.token
5151
}).catch(async (error) => {
52-
await reportError(error);
52+
await logError(error);
5353
throw error;
5454
});
5555
}
@@ -65,7 +65,7 @@ class HttpToolkitServer extends Command {
6565

6666
// Be careful - if the server path isn't clearly ours somehow, ignore it.
6767
if (!isOwnedPath(serverUpdatesPath)) {
68-
reportError(`Unexpected server updates path (${serverUpdatesPath}), ignoring`);
68+
logError(`Unexpected server updates path (${serverUpdatesPath}), ignoring`);
6969
return;
7070
}
7171

@@ -84,19 +84,19 @@ class HttpToolkitServer extends Command {
8484
filename !== '.DS_Store' // Meaningless Mac folder metadata
8585
)) {
8686
console.log(serverPaths);
87-
reportError(
87+
logError(
8888
`Server path (${serverUpdatesPath}) contains unexpected content, ignoring`
8989
);
9090
return;
9191
}
9292

93-
const maybeReportError = (error: Error & { code?: string }) => {
93+
const maybeLogError = (error: Error & { code?: string }) => {
9494
if ([
9595
'EBUSY',
9696
'EPERM'
9797
].includes(error.code!)) return;
9898

99-
else reportError(error);
99+
else logError(error);
100100
};
101101

102102
if (serverPaths.every((filename) => {
@@ -107,7 +107,7 @@ class HttpToolkitServer extends Command {
107107
// a new server standalone (not just from an update), because otherwise the
108108
// update dir can end up in a broken state. Better to clear it completely.
109109
console.log("Downloaded server directory is entirely outdated, deleting it");
110-
deleteFolder(serverUpdatesPath).catch(maybeReportError);
110+
deleteFolder(serverUpdatesPath).catch(maybeLogError);
111111
} else {
112112
// Some of the servers are outdated, but not all (maybe it includes us).
113113
// Async delete all server versions older than this currently running version.
@@ -116,7 +116,7 @@ class HttpToolkitServer extends Command {
116116

117117
if (version && semver.lt(version, currentVersion)) {
118118
console.log(`Deleting old server ${filename}`);
119-
deleteFolder(path.join(serverUpdatesPath, filename)).catch(maybeReportError);
119+
deleteFolder(path.join(serverUpdatesPath, filename)).catch(maybeLogError);
120120
}
121121
});
122122
}
@@ -151,7 +151,7 @@ function isOwnedPath(input: string) {
151151
if (input.split(path.sep).includes('httptoolkit-server')) {
152152
return true;
153153
} else {
154-
reportError(`Unexpected unowned path ${input}`);
154+
logError(`Unexpected unowned path ${input}`);
155155
return false;
156156
}
157157
}

src/error-tracking.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export function addBreadcrumb(message: string, data: Sentry.Breadcrumb) {
113113
Sentry.addBreadcrumb(Object.assign({ message }, data));
114114
}
115115

116-
export function reportError(error: Error | string | unknown): undefined | Promise<void> {
116+
export function logError(error: Error | string | unknown): undefined | Promise<void> {
117117
console.warn(error);
118118
if (!sentryInitialized) return;
119119

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import updateCommand from '@oclif/plugin-update/lib/commands/update';
1818

1919
import { HttpToolkitServerApi } from './api/api-server';
2020
import { checkBrowserConfig } from './browsers';
21-
import { reportError } from './error-tracking';
21+
import { logError } from './error-tracking';
2222
import { MOCKTTP_ALLOWED_ORIGINS } from './constants';
2323

2424
import { delay } from './util/promise';
@@ -207,7 +207,7 @@ export async function runHTK(options: {
207207
}
208208

209209
console.log(error);
210-
reportError('Failed to check for updates');
210+
logError('Failed to check for updates');
211211
})
212212
);
213213
});

src/interceptors/android/adb-commands.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as stream from 'stream';
22
import * as path from 'path';
33
import adb, * as Adb from '@devicefarmer/adbkit';
4-
import { reportError } from '../../error-tracking';
4+
import { logError } from '../../error-tracking';
55
import { isErrorLike } from '../../util/error';
66
import { delay, waitUntil } from '../../util/promise';
77
import { getCertificateFingerprint, parseCert } from '../../certificates';
@@ -35,7 +35,7 @@ export function createAdbClient() {
3535

3636
// We listen for errors and report them. This only happens if adbkit completely
3737
// fails to handle or listen to a connection error. We'd rather report that than crash.
38-
client.on('error', reportError);
38+
client.on('error', logError);
3939

4040
return client;
4141
}
@@ -92,7 +92,7 @@ export const getConnectedDevices = batchCalls(async (adbClient: Adb.Client) => {
9292
}
9393
return [];
9494
} else {
95-
reportError(e);
95+
logError(e);
9696
throw e;
9797
}
9898
}
@@ -222,7 +222,7 @@ export async function getRootCommand(adbClient: Adb.DeviceClient): Promise<RootC
222222
: undefined; // Still not root, no luck.
223223
} catch (e) {
224224
console.error(e);
225-
reportError('ADB root check crashed');
225+
logError('ADB root check crashed');
226226
return undefined;
227227
} finally {
228228
// Try to clean up the root test script, just to be tidy

src/interceptors/android/android-adb-interceptor.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Interceptor } from '..';
66
import { HtkConfig } from '../../config';
77
import { generateSPKIFingerprint } from 'mockttp';
88

9-
import { reportError } from '../../error-tracking';
9+
import { logError } from '../../error-tracking';
1010
import { delay } from '../../util/promise';
1111
import { isErrorLike } from '../../util/error';
1212
import {
@@ -89,7 +89,7 @@ export class AndroidAdbInterceptor implements Interceptor {
8989
await bringToFront(
9090
deviceClient,
9191
'tech.httptoolkit.android.v1/tech.httptoolkit.android.MainActivity'
92-
).catch(reportError); // Not that important, so we continue if this fails somehow
92+
).catch(logError); // Not that important, so we continue if this fails somehow
9393

9494
// Build a trigger URL to activate the proxy on the device:
9595
const setupParams = {
@@ -225,7 +225,7 @@ export class AndroidAdbInterceptor implements Interceptor {
225225
]);
226226
console.log('Android Chrome flags set');
227227
} catch (e) {
228-
reportError(e);
228+
logError(e);
229229
}
230230
}
231231
}

src/interceptors/android/fetch-apk.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import fetch from 'node-fetch';
66

77
import { readDir, createTmp, moveFile, deleteFile } from '../../util/fs';
88
import { HtkConfig } from '../../config';
9-
import { reportError } from '../../error-tracking';
9+
import { logError } from '../../error-tracking';
1010

1111
async function getLatestRelease(): Promise<{ version: string, url: string } | undefined> {
1212
try {
@@ -53,7 +53,7 @@ async function getLatestLocalApk(config: HtkConfig) {
5353
else return latestLocalApk;
5454
} catch (e) {
5555
console.log("Could not check for local Android app APK", e);
56-
reportError(e);
56+
logError(e);
5757
}
5858
}
5959

@@ -131,7 +131,7 @@ export async function streamLatestApk(config: HtkConfig): Promise<stream.Readabl
131131
const apkOutputStream = new stream.PassThrough({ highWaterMark: 10485760 });
132132
apkStream.pipe(apkOutputStream);
133133

134-
updateLocalApk(latestApkRelease.version, apkFileStream, config).catch(reportError);
134+
updateLocalApk(latestApkRelease.version, apkFileStream, config).catch(logError);
135135
return apkOutputStream;
136136
}
137137
}
@@ -147,7 +147,7 @@ export async function streamLatestApk(config: HtkConfig): Promise<stream.Readabl
147147
fetch(latestApkRelease.url).then((apkResponse) => {
148148
const apkStream = apkResponse.body;
149149
return updateLocalApk(latestApkRelease.version, apkStream, config);
150-
}).catch(reportError);
150+
}).catch(logError);
151151

152152
console.log('Streaming local APK, and updating it async');
153153
return fs.createReadStream(localApk.path);

src/interceptors/chromium-based-interceptors.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { readFile, deleteFolder } from '../util/fs';
1515
import { listRunningProcesses, windowsClose, waitForExit } from '../util/process-management';
1616
import { HideWarningServer } from '../hide-warning-server';
1717
import { Interceptor } from '.';
18-
import { reportError } from '../error-tracking';
18+
import { logError } from '../error-tracking';
1919
import { WEBEXTENSION_INSTALL } from '../webextension';
2020

2121
const getBrowserDetails = async (config: HtkConfig, variant: string): Promise<Browser | undefined> => {
@@ -135,7 +135,7 @@ abstract class FreshChromiumBasedInterceptor implements Interceptor {
135135

136136
const profilePath = browserDetails.profile;
137137
if (!profilePath.startsWith(this.config.configPath)) {
138-
reportError(
138+
logError(
139139
`Unexpected ${this.variantName} profile location, not deleting: ${profilePath}`
140140
);
141141
} else {

0 commit comments

Comments
 (0)