33 lines
1 KiB
TypeScript
33 lines
1 KiB
TypeScript
|
|
import Bugsnag from "@bugsnag/js"
|
||
|
|
|
||
|
|
export const setupTracking = () => {
|
||
|
|
if (!import.meta.env.VITE_BUGSNAG_API_KEY) return
|
||
|
|
|
||
|
|
// Initialize
|
||
|
|
Bugsnag.start({
|
||
|
|
apiKey: import.meta.env.VITE_BUGSNAG_API_KEY,
|
||
|
|
collectUserIp: false,
|
||
|
|
})
|
||
|
|
|
||
|
|
// Redact long strings, especially hex and bech32 keys which are 64 and 63
|
||
|
|
// characters long, respectively. Put the threshold a little lower in case
|
||
|
|
// someone accidentally enters a key with the last few digits missing
|
||
|
|
const redactErrorInfo = (info: any) =>
|
||
|
|
JSON.parse(
|
||
|
|
JSON.stringify(info || null)
|
||
|
|
.replace(/\d+:{60}\w+:\w+/g, "[REDACTED]")
|
||
|
|
.replace(/\w{60}\w+/g, "[REDACTED]"),
|
||
|
|
)
|
||
|
|
|
||
|
|
Bugsnag.addOnError((event: any) => {
|
||
|
|
// Redact individual properties since the event needs to be
|
||
|
|
// mutated, and we don't want to lose the prototype
|
||
|
|
event.context = redactErrorInfo(event.context)
|
||
|
|
event.request = redactErrorInfo(event.request)
|
||
|
|
event.exceptions = redactErrorInfo(event.exceptions)
|
||
|
|
event.breadcrumbs = redactErrorInfo(event.breadcrumbs)
|
||
|
|
|
||
|
|
return true
|
||
|
|
})
|
||
|
|
}
|