Hawk allows to track JavaScript and TypeScript errors in your applications.
Here is the Hawk Web client and here is the Documentation.
We recommend adding Hawk script to page above others to prevent missing any errors.
Install package
npm install @hawk.so/javascript --save
yarn add @hawk.so/javascript
Then import @hawk.so/javascript
module to your code.
import HawkCatcher from '@hawk.so/javascript';
Get the newest bundle path from @hawk.so/javascript — open site and get the link to latest distributed JS bundle.
Then require this script on your site.
<script src="..." async></script>
First of all, you should register an account on hawk.so.
Then create a Workspace and a Project in there. You'll get an Integration Token.
Create HawkCatcher
class instance when script will be ready and pass your Integration Token:
const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'});
// or
const hawk = new HawkCatcher('INTEGRATION_TOKEN');
Alternately, add onload="const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'})"
attribute to the <script>
tag.
<script src="https://cdn.rawgit.com/codex-team/hawk.javascript/master/hawk.js" onload="const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'})"></script>
Initialization settings:
name | type | required | description |
---|---|---|---|
token |
string | required | Your project's Integration Token |
release |
string/number | optional | Unique identifier of the release. Used for source map consuming (see below) |
user |
{id: string, name?: string, image?: string, url?: string} | optional | Current authenticated user |
context |
object | optional | Any data you want to pass with every message. Has limitation of length. |
vue |
Vue constructor | optional | Pass Vue constructor to set up the Vue integration |
disableGlobalErrorsHandling |
boolean | optional | Do not initialize global errors handling |
disableVueErrorHandler |
boolean | optional | Do not initialize Vue errors handling |
beforeSend |
function(event) => event | optional | This Method allows you to filter any data you don't want sending to Hawk |
Other available initial settings are described at the type definition.
You can use the JavaScript catcher in your React project. Create the Hawk Catcher instance in a index.js
file of your project.
You can send errors or other messages to the Hawk manually, for example at your catch
blocks or any debug conditions.
Use the .send(message, context)
method for that. This method accepts the message
of type Error
or string
as the first parameter. The second parameter is optional, it allows passing any additional data with the event.
If you specify the context
with the HawkCatcher
constructor, it will be merged with the context passed to the send
method.
// init Hawk Catcher instance
const hawk = new HawkCatcher({token: 'INTEGRATION_TOKEN'});
// somewhere in try-catch block or other custom place
hawk.send(new Error('Something went wrong'), {
myOwnDebugInfo: '1234'
});
If your bundle is minified, it is useful to pass source-map files to the Hawk. After that you will see beautiful original source code lines in Hawk Garage instead of minified code.
To enable source map consuming you should do two things:
- Send the source map and the release identifier to the Hawk after you build a new version of the script. For example with the Hawk Webpack Plugin or with cURL request.
- Pass the release identifier to the Hawk Catcher using
release
option.
To make sure that Hawk is working right, call test()
method from HawkCatcher
class instance in browser's console.
test()
method sends fake error to server. Then, open Hawk and find a test event at the Project's page.
You can filter any data that you don't want to send to Hawk. Use the beforeSend()
hook for that reason.
window.hawk = new HawkCatcher({
token: 'INTEGRATION TOKEN',
beforeSend(event){
if (event.user && event.user.name){
delete event.user.name;
}
return event;
}
})
You can use the beforeSend()
hook to prevent sending a particular event. Return false
for that.
Vue apps have their own error handler, so if you want to catcher errors thrown inside Vue components, you should set up a Vue integration.
Pass the Vue constructor with the initial settings:
import Vue from 'vue';
const hawk = new HawkCatcher({
token: 'INTEGRATION_TOKEN',
vue: Vue // the Vue constructor you tweak
});
or pass it any moment after Hawk Catcher was instantiated:
import Vue from 'vue';
const hawk = new HawkCatcher({
token: 'INTEGRATION_TOKEN',
});
hawk.connectVue(Vue)