robosats/frontend/src/components/ErrorBoundary.tsx
Reckless_Satoshi e6ddcf9e4b
Add RobotTokenSHA256 middleware, /api/robot and frontend entropy calc (#512)
* Add RobotTokenSHA256 middleware for in-the-fly robot generation/login

* Add RobotView, fix middleware, upgrade frontend

* Token header as base91

* Add OAS schema of RobotView

* Use RobotView on new fetchRobot(), mimick old fetchRobot() functionality

* Upgrade websockets for token based authentication

* Small fixes

* Add frontend token entropy checks, add token on route /robot/<token>

* Rename admin panel

* Collect phrases
2023-05-05 10:12:38 +00:00

55 lines
1.5 KiB
TypeScript

import React, { Component } from 'react';
interface ErrorBoundaryProps {
children: React.ReactNode;
}
interface ErrorBoundaryState {
hasError: boolean;
error: Error;
errorInfo: React.ErrorInfo;
}
export default class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
// In case the app crashes this component will restart it in 10 seconds
// It will also print an obnoxious error message (useful for end users to grab a screenshot and report)
constructor(props: ErrorBoundaryProps) {
super(props);
this.state = {
hasError: false,
error: { name: '', message: '' },
errorInfo: { componentStack: '' },
};
}
componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {
console.error(error, errorInfo);
this.setState({ hasError: true, error, errorInfo });
setTimeout(() => {
window.location.reload();
}, 30000);
}
render() {
if (this.state.hasError) {
return (
<div style={{ overflow: 'auto', height: '100%', width: '100%', background: 'white' }}>
<h2>Something is borked! Restarting app in 30 seconds...</h2>
<p>
<b>Error:</b> {this.state.error.name}
</p>
<p>
<b>Error message:</b> {this.state.error.message}
</p>
<p>
<b>Error cause:</b> {this.state.error.cause}
</p>
<p>
<b>Error component stack:</b> {this.state.errorInfo.componentStack}
</p>
</div>
);
}
return this.props.children;
}
}