sanitize error reports
This commit is contained in:
parent
577e9ee0a3
commit
7b625dbe0d
1 changed files with 18 additions and 1 deletions
|
@ -343,6 +343,18 @@ const getRoomStats = (roomId: string) => {
|
|||
}
|
||||
}
|
||||
|
||||
// async wrapper for regex-powered String.prototype.replace
|
||||
const strReplaceAsync = async (str: string, regex: RegExp, fn: (...args: string[]) => Promise<string>) => {
|
||||
const promises: Promise<string>[] = [];
|
||||
// dry-run to calculate the replace values
|
||||
str.replace(regex, (...args: string[]) => {
|
||||
promises.push(fn(...args));
|
||||
return "";
|
||||
});
|
||||
const values = await Promise.all(promises);
|
||||
return str.replace(regex, () => values.shift());
|
||||
};
|
||||
|
||||
export default class CountlyAnalytics {
|
||||
private baseUrl: URL = null;
|
||||
private appKey: string = null;
|
||||
|
@ -495,7 +507,7 @@ export default class CountlyAnalytics {
|
|||
return this.lastMsTs;
|
||||
}
|
||||
|
||||
public recordError(err: Error | string, fatal = false) {
|
||||
public async recordError(err: Error | string, fatal = false) {
|
||||
if (this.disabled || this.anonymous) return;
|
||||
|
||||
let error = "";
|
||||
|
@ -523,6 +535,11 @@ export default class CountlyAnalytics {
|
|||
error = err + "";
|
||||
}
|
||||
|
||||
// sanitize the error from identifiers
|
||||
error = await strReplaceAsync(error, /([!@+#]).+?:[\w:.]+/g, async (substring: string, glyph: string) => {
|
||||
return glyph + await hashHex(substring.substring(1));
|
||||
});
|
||||
|
||||
const metrics = this.getMetrics();
|
||||
const ob: ICrash = {
|
||||
_resolution: metrics?._resolution,
|
||||
|
|
Loading…
Reference in a new issue