1/**
2 * Object for logging to sentry
3 */
4var SentryPlugin = (function () {
5
6    /**
7     * Log a javascript error to the server
8     *
9     * @see https://docs.sentry.io/clientdev/attributes/ for for supported attributes in data
10     * @param {Error} e The error to log
11     * @param {object} [data] Any additional data to pass in the sentry event
12     */
13    var logSentryException = function (e, data) {
14        data = data || {};
15
16        data.request = {
17            url: window.location.href,
18            headers: {
19                referer: document.referrer
20            },
21            cookies: document.cookie,
22        };
23
24        jQuery.post(DOKU_BASE + 'lib/exe/ajax.php', {
25            'call': 'plugin_sentry',
26            'name': e.name,
27            'message': e.message,
28            'stack': e.stack,
29            'id': JSINFO.id,
30            'additionalData': data
31        });
32    };
33
34    // register as global error handler
35    var originalErrorHandler = window.onerror;
36    window.onerror = function (msg, url, lineNo, columnNo, error) {
37        logSentryException(error, {});
38        originalErrorHandler(error);
39    };
40
41    // wrap around DokuWiki's plugin error handling
42    var originalLogError = window.logError;
43    window.logError = function (e, file) {
44        logSentryException(e, {culprit: file});
45        originalLogError(e, file);
46    };
47
48    // exports
49    return {
50        logSentryException: logSentryException
51    }
52})();
53