Skip to content

Commit

Permalink
Merge branch 'next' into integration/bugsnag-integrity-header
Browse files Browse the repository at this point in the history
  • Loading branch information
imjoehaines committed Dec 3, 2020
2 parents eb7a227 + 42b5d2b commit 125d71e
Show file tree
Hide file tree
Showing 234 changed files with 1,676 additions and 1,251 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,22 @@

## TBD

### Changed

- (react-native): Update bugsnag-android to v5.3.0
- Add integrity header to verify Error and Session API payloads have not changed. [bugsnag-android#978](https://github.com/bugsnag/bugsnag-android/pull/978)
- (react-native): Update bugsnag-cocoa to v6.3.0
- Add integrity header to verify Error and Session API payloads have not changed. [bugsnag-cocoa#881](https://github.com/bugsnag/bugsnag-cocoa/pull/881)
- Out Of Memory errors now include more information, including custom metadata and user information. [bugsnag-cocoa#915](https://github.com/bugsnag/bugsnag-cocoa/pull/915) [bugsnag-cocoa#908](https://github.com/bugsnag/bugsnag-cocoa/pull/908)
- Fixed incorrect app version reported when sending crash reports from older versions of Bugsnag (before 6.2.3) [bugsnag-cocoa#911](https://github.com/bugsnag/bugsnag-cocoa/pull/911)
- Fixed a rare crash in -[BugsnagClient computeDidCrashLastLaunch] [bugsnag-cocoa#917](https://github.com/bugsnag/bugsnag-cocoa/pull/917)

## v7.5.3 (2020-12-01)

- (react-native): Update bugsnag-cocoa to v6.2.5
- Fixed a rare crash due to a race condition in BugsnagSystemState. [bugsnag-cocoa#893](https://github.com/bugsnag/bugsnag-cocoa/pull/893)
- Out Of Memory errors are no longer reported if a device reboot was detected. [bugsnag-cocoa#822](https://github.com/bugsnag/bugsnag-cocoa/pull/882)
- (core) The `event.unhandled` flag can now be changed in callbacks [#1148](https://github.com/bugsnag/bugsnag-js/pull/1148)

## v7.5.2 (2020-11-09)

Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"packages": [
"packages/*"
],
"version": "7.5.2"
"version": "7.5.3"
}
2 changes: 1 addition & 1 deletion packages/browser/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 19 additions & 19 deletions packages/browser/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bugsnag/browser",
"version": "7.5.1",
"version": "7.5.3",
"main": "dist/bugsnag.js",
"types": "types/bugsnag.d.ts",
"description": "Bugsnag error reporter for browser JavaScript",
Expand Down Expand Up @@ -32,29 +32,29 @@
"license": "MIT",
"devDependencies": {
"@bugsnag/core": "^7.0.1",
"@bugsnag/delivery-x-domain-request": "^7.3.5",
"@bugsnag/delivery-xml-http-request": "^7.3.5",
"@bugsnag/plugin-app-duration": "^7.3.5",
"@bugsnag/plugin-browser-context": "^7.3.5",
"@bugsnag/plugin-browser-device": "^7.4.0",
"@bugsnag/plugin-browser-request": "^7.3.5",
"@bugsnag/plugin-browser-session": "^7.3.5",
"@bugsnag/plugin-client-ip": "^7.3.5",
"@bugsnag/plugin-console-breadcrumbs": "^7.3.5",
"@bugsnag/plugin-inline-script-content": "^7.3.5",
"@bugsnag/plugin-interaction-breadcrumbs": "^7.3.5",
"@bugsnag/plugin-navigation-breadcrumbs": "^7.4.0",
"@bugsnag/plugin-network-breadcrumbs": "^7.4.0",
"@bugsnag/plugin-simple-throttle": "^7.3.5",
"@bugsnag/plugin-strip-query-string": "^7.3.5",
"@bugsnag/plugin-window-onerror": "^7.3.5",
"@bugsnag/plugin-window-unhandled-rejection": "^7.3.5",
"@bugsnag/delivery-x-domain-request": "^7.5.3",
"@bugsnag/delivery-xml-http-request": "^7.5.3",
"@bugsnag/plugin-app-duration": "^7.5.3",
"@bugsnag/plugin-browser-context": "^7.5.3",
"@bugsnag/plugin-browser-device": "^7.5.3",
"@bugsnag/plugin-browser-request": "^7.5.3",
"@bugsnag/plugin-browser-session": "^7.5.3",
"@bugsnag/plugin-client-ip": "^7.5.3",
"@bugsnag/plugin-console-breadcrumbs": "^7.5.3",
"@bugsnag/plugin-inline-script-content": "^7.5.3",
"@bugsnag/plugin-interaction-breadcrumbs": "^7.5.3",
"@bugsnag/plugin-navigation-breadcrumbs": "^7.5.3",
"@bugsnag/plugin-network-breadcrumbs": "^7.5.3",
"@bugsnag/plugin-simple-throttle": "^7.5.3",
"@bugsnag/plugin-strip-query-string": "^7.5.3",
"@bugsnag/plugin-window-onerror": "^7.5.3",
"@bugsnag/plugin-window-unhandled-rejection": "^7.5.3",
"cloudfront": "^0.4.1",
"knox": "^0.9.2",
"mime": "1.4.1",
"semver": "^5.5.1"
},
"dependencies": {
"@bugsnag/core": "^7.3.5"
"@bugsnag/core": "^7.5.3"
}
}
15 changes: 10 additions & 5 deletions packages/core/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,6 @@ class Client {
event._user = assign({}, event._user, this._user)
event.breadcrumbs = this._breadcrumbs.slice()

if (this._session) {
this._session._track(event)
event._session = this._session
}

// exit early if events should not be sent on the current releaseStage
if (this._config.enabledReleaseStages !== null && !includes(this._config.enabledReleaseStages, this._config.releaseStage)) {
this._logger.warn('Event not sent due to releaseStage/enabledReleaseStages configuration')
Expand Down Expand Up @@ -314,6 +309,16 @@ class Client {
event._handledState.severityReason = { type: 'userCallbackSetSeverity' }
}

if (event.unhandled !== event._handledState.unhandled) {
event._handledState.severityReason.unhandledOverridden = true
event._handledState.unhandled = event.unhandled
}

if (this._session) {
this._session._track(event)
event._session = this._session
}

this._delivery.sendEvent({
apiKey: event.apiKey || this._config.apiKey,
notifier: this._notifier,
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@bugsnag/core",
"main": "index.js",
"version": "7.3.5",
"version": "7.5.3",
"types": "types/index.d.ts",
"description": "Core classes and utilities for Bugsnag notifiers",
"homepage": "https://www.bugsnag.com/",
Expand Down
24 changes: 24 additions & 0 deletions packages/core/session.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import Session from './types/session'

interface MinimalEvent {
_handledState: {
unhandled: boolean
}
}

interface SessionJson {
id: string
startedAt: Date
events: {
handled: number
unhandled: number
}
}

export default class SessionWithInternals extends Session {
_track(event: MinimalEvent): void
toJSON(): SessionJson

public _handled: number
public _unhandled: number
}
68 changes: 63 additions & 5 deletions packages/core/test/client.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Client from '../client'
import Event from '../event'
import { Session } from '..'
import Session from '../session'

describe('@bugsnag/core/client', () => {
describe('constructor', () => {
Expand Down Expand Up @@ -158,6 +158,41 @@ describe('@bugsnag/core/client', () => {
event.severity = 'info'
})
})

it('supports setting unhandled via callback', done => {
const client = new Client({ apiKey: 'API_KEY_YEAH' })

const session = new Session()
// @ts-ignore
client._session = session

client._setDelivery(client => ({
sendEvent: (payload) => {
expect(payload).toBeTruthy()
expect(Array.isArray(payload.events)).toBe(true)

const event = payload.events[0].toJSON()

expect(event.unhandled).toBe(true)
expect(event.severityReason).toEqual({
type: 'handledException',
unhandledOverridden: true
})

expect(event.session).toEqual(session)
expect((event.session as Session)._handled).toBe(0)
expect((event.session as Session)._unhandled).toBe(1)

done()
},
sendSession: () => {}
}))

client.notify(new Error('oh em gee'), event => {
event.unhandled = true
})
})

// eslint-disable-next-line jest/expect-expect
it('supports preventing send by returning false in onError callback', done => {
const client = new Client({
Expand All @@ -177,6 +212,7 @@ describe('@bugsnag/core/client', () => {
// give the event loop a tick to see if the event gets sent
process.nextTick(() => done())
})

// eslint-disable-next-line jest/expect-expect
it('supports preventing send by returning false in notify callback', done => {
const client = new Client({ apiKey: 'API_KEY_YEAH' })
Expand Down Expand Up @@ -355,11 +391,18 @@ describe('@bugsnag/core/client', () => {
sendSession: () => {},
sendEvent: (payload, cb) => cb(null)
}))

const session = new Session()
// @ts-ignore
client.notify(new Error('111'), {}, (err, event) => {
client._session = session

client.notify(new Error('111'), () => {}, (err, event) => {
expect(err).toBe(null)
expect(event).toBeTruthy()
expect(event.errors[0].errorMessage).toBe('111')

expect((event as Event)._session).toBe(session)
expect(session.toJSON().events.handled).toBe(1)
done()
})
})
Expand All @@ -370,12 +413,19 @@ describe('@bugsnag/core/client', () => {
sendSession: () => {},
sendEvent: (payload, cb) => cb(new Error('flerp'))
}))

const session = new Session()
// @ts-ignore
client.notify(new Error('111'), {}, (err, event) => {
client._session = session

client.notify(new Error('111'), () => {}, (err, event) => {
expect(err).toBeTruthy()
expect(err.message).toBe('flerp')
expect(event).toBeTruthy()
expect(event.errors[0].errorMessage).toBe('111')

expect((event as Event)._session).toBe(session)
expect(session.toJSON().events.handled).toBe(1)
done()
})
})
Expand All @@ -388,11 +438,15 @@ describe('@bugsnag/core/client', () => {
sendEvent: () => { done('sendEvent() should not be called') }
}))

const session = new Session()
// @ts-ignore
client.notify(new Error('111'), {}, (err, event) => {
client._session = session

client.notify(new Error('111'), () => {}, (err, event) => {
expect(err).toBe(null)
expect(event).toBeTruthy()
expect(event.errors[0].errorMessage).toBe('111')
expect((event as Event)._session).toBe(undefined)
done()
})
})
Expand All @@ -405,11 +459,15 @@ describe('@bugsnag/core/client', () => {
sendEvent: () => { done('sendEvent() should not be called') }
}))

const session = new Session()
// @ts-ignore
client.notify(new Error('111'), {}, (err, event) => {
client._session = session

client.notify(new Error('111'), () => {}, (err, event) => {
expect(err).toBe(null)
expect(event).toBeTruthy()
expect(event.errors[0].errorMessage).toBe('111')
expect((event as Event)._session).toBe(undefined)
done()
})
})
Expand Down
2 changes: 1 addition & 1 deletion packages/core/types/event.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ declare class Event {
public severity: 'info' | 'warning' | 'error'

public readonly originalError: any
public readonly unhandled: boolean
public unhandled: boolean

public apiKey?: string
public context?: string
Expand Down
2 changes: 1 addition & 1 deletion packages/delivery-expo/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/delivery-expo/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bugsnag/delivery-expo",
"version": "7.5.1",
"version": "7.5.3",
"main": "delivery.js",
"description": "@bugsnag/js delivery mechanism to send events and sessions from Expo, using the FileSystem API to cache and retry sending failed payloads",
"homepage": "https://www.bugsnag.com/",
Expand All @@ -22,7 +22,7 @@
"expo-crypto": "~8.3.0"
},
"devDependencies": {
"@bugsnag/core": "^7.3.5"
"@bugsnag/core": "^7.5.3"
},
"peerDependencies": {
"@bugsnag/core": "^7.0.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/delivery-node/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/delivery-node/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bugsnag/delivery-node",
"version": "7.3.5",
"version": "7.5.3",
"main": "delivery.js",
"description": "@bugsnag/node delivery mechanism",
"homepage": "https://www.bugsnag.com/",
Expand All @@ -17,7 +17,7 @@
"author": "Bugsnag",
"license": "MIT",
"devDependencies": {
"@bugsnag/core": "^7.3.5"
"@bugsnag/core": "^7.5.3"
},
"peerDependencies": {
"@bugsnag/core": "^7.0.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/delivery-react-native/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/delivery-react-native/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bugsnag/delivery-react-native",
"version": "7.4.0",
"version": "7.5.3",
"main": "delivery.js",
"description": "@bugsnag/js delivery mechanism for React Native",
"homepage": "https://www.bugsnag.com/",
Expand All @@ -17,7 +17,7 @@
"author": "Bugsnag",
"license": "MIT",
"devDependencies": {
"@bugsnag/core": "^7.3.5"
"@bugsnag/core": "^7.5.3"
},
"peerDependencies": {
"@bugsnag/core": "^7.0.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/delivery-x-domain-request/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 125d71e

Please sign in to comment.