From a52ba5fb4cde1ca2a606549dfb80c824f68571ac Mon Sep 17 00:00:00 2001 From: Matt Robenolt Date: Mon, 2 Nov 2015 12:45:27 -0800 Subject: [PATCH 1/2] Update to v7 of API spec --- README.md | 2 +- src/raven.js | 11 ++--- test/raven.test.js | 110 +++++++++++++++++++++++++-------------------- 3 files changed, 69 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index aeb27070c7c3..cdc6da748c30 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Raven.js is a tiny standalone JavaScript client for [Sentry](https://www.getsentry.com/). -**Raven.js v1.1 requires Sentry v6.0 or later.** +**Raven.js v1.3 requires Sentry v7.7.0 or later.** ## Resources diff --git a/src/raven.js b/src/raven.js index 0c991fa55d5c..56385b1c7c99 100644 --- a/src/raven.js +++ b/src/raven.js @@ -697,11 +697,12 @@ function processException(type, message, fileurl, lineno, frames, options) { objectMerge({ // sentry.interfaces.Exception exception: { - type: type, - value: message + values: [{ + type: type, + value: message, + stacktrace: stacktrace + }] }, - // sentry.interfaces.Stacktrace - stacktrace: stacktrace, culprit: fileurl, message: fullMessage }, options) @@ -805,7 +806,7 @@ function send(data) { (globalOptions.transport || makeRequest)({ url: globalServer, auth: { - sentry_version: '4', + sentry_version: '7', sentry_client: 'raven-js/' + Raven.VERSION, sentry_key: globalKey }, diff --git a/test/raven.test.js b/test/raven.test.js index c647a4ef0e53..ac28083b53d9 100644 --- a/test/raven.test.js +++ b/test/raven.test.js @@ -769,11 +769,13 @@ describe('globals', function() { processException('Error', 'lol', 'http://example.com/override.js', 10, frames.slice(0), {}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: framesFlipped + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: framesFlipped + } + }] }, culprit: 'http://example.com/file1.js', message: 'Error: lol' @@ -782,11 +784,13 @@ describe('globals', function() { processException('Error', 'lol', '', 10, frames.slice(0), {}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: framesFlipped + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: framesFlipped + } + }] }, culprit: 'http://example.com/file1.js', message: 'Error: lol' @@ -795,11 +799,13 @@ describe('globals', function() { processException('Error', 'lol', '', 10, frames.slice(0), {extra: 'awesome'}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: framesFlipped + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: framesFlipped + } + }] }, culprit: 'http://example.com/file1.js', message: 'Error: lol', @@ -813,14 +819,16 @@ describe('globals', function() { processException('Error', 'lol', 'http://example.com/override.js', 10, [], {}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: [{ - filename: 'http://example.com/override.js', - lineno: 10, - in_app: true + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: [{ + filename: 'http://example.com/override.js', + lineno: 10, + in_app: true + }] + } }] }, culprit: 'http://example.com/override.js', @@ -830,14 +838,16 @@ describe('globals', function() { processException('Error', 'lol', 'http://example.com/override.js', 10, [], {}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: [{ - filename: 'http://example.com/override.js', - lineno: 10, - in_app: true + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: [{ + filename: 'http://example.com/override.js', + lineno: 10, + in_app: true + }] + } }] }, culprit: 'http://example.com/override.js', @@ -847,14 +857,16 @@ describe('globals', function() { processException('Error', 'lol', 'http://example.com/override.js', 10, [], {extra: 'awesome'}); assert.deepEqual(window.send.lastCall.args, [{ exception: { - type: 'Error', - value: 'lol' - }, - stacktrace: { - frames: [{ - filename: 'http://example.com/override.js', - lineno: 10, - in_app: true + values: [{ + type: 'Error', + value: 'lol', + stacktrace: { + frames: [{ + filename: 'http://example.com/override.js', + lineno: 10, + in_app: true + }] + } }] }, culprit: 'http://example.com/override.js', @@ -879,14 +891,16 @@ describe('globals', function() { assert.deepEqual(window.send.lastCall.args, [{ message: 'TypeError: ' + new Array(140).join('a')+'\u2026', exception: { - type: 'TypeError', - value: new Array(151).join('a')+'\u2026' - }, - stacktrace: { - frames: [{ - filename: 'http://example.com', - lineno: 34, - in_app: true + values: [{ + type: 'TypeError', + value: new Array(151).join('a')+'\u2026', + stacktrace: { + frames: [{ + filename: 'http://example.com', + lineno: 34, + in_app: true + }] + } }] }, culprit: 'http://example.com', @@ -1192,7 +1206,7 @@ describe('globals', function() { assert.deepEqual(opts.auth, { sentry_client: 'raven-js/<%= pkg.version %>', sentry_key: 'abc', - sentry_version: '4' + sentry_version: '7' }); assert.deepEqual(opts.options, globalOptions); assert.isFunction(opts.onSuccess); From dfdd247031c89032882a07f8f8b25c7c1906fb69 Mon Sep 17 00:00:00 2001 From: Matt Robenolt Date: Mon, 2 Nov 2015 15:20:49 -0800 Subject: [PATCH 2/2] Tell react-native plugin to use the right stacktrace --- plugins/react-native.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/react-native.js b/plugins/react-native.js index 03ebb8ace457..e8a3d06caabb 100644 --- a/plugins/react-native.js +++ b/plugins/react-native.js @@ -64,8 +64,9 @@ module.exports = function (Raven) { data.culprit = normalizeUrl(data.culprit); } - if (data.stacktrace && data.stacktrace.frames && data.stacktrace.frames.length) { - data.stacktrace.frames.forEach(function (frame) { + if (data.exception) { + // if data.exception exists, all of the other keys are guaranteed to exist + data.exception.values[0].stacktrace.frames.forEach(function (frame) { frame.filename = normalizeUrl(frame.filename); }); }