diff --git a/Sources/Bugsnag/BugsnagReporter.swift b/Sources/Bugsnag/BugsnagReporter.swift index f02ac7c..6031374 100644 --- a/Sources/Bugsnag/BugsnagReporter.swift +++ b/Sources/Bugsnag/BugsnagReporter.swift @@ -5,7 +5,7 @@ public struct BugsnagReporter: Service { private let config: BugsnagConfig private let headers: HTTPHeaders - private let hostName = "notify.bugsnag.com" + private let hostName = "https://notify.bugsnag.com" private let jsonEncoder = JSONEncoder() private let notifier = BugsnagNotifier( name: "nodes-vapor/bugsnag", @@ -13,20 +13,20 @@ public struct BugsnagReporter: Service { version: "3" ) private let payloadVersion = "4" - private let sendReport: (String, HTTPHeaders, Data, Container) -> Future + private let sendReport: (String, HTTPHeaders, Data, Container) throws -> Future public init( config: BugsnagConfig, - sendReport: ((String, HTTPHeaders, Data, Container) -> Future)? = nil + sendReport: ((String, HTTPHeaders, Data, Container) throws -> Future)? = nil ) { self.config = config self.sendReport = sendReport ?? { (hostName, headers, body, container) in - HTTPClient - .connect(hostname: hostName, on: container) - .flatMap(to: HTTPResponse.self) { client in - client.send(.init(method: .POST, headers: headers, body: body)) - } + try container + .client() + .post(hostName, headers: headers, beforeSend: { req in + req.http.body = .init(data: body) + }) } app = BugsnagApp( @@ -77,7 +77,6 @@ extension BugsnagReporter: ErrorReporter { return try jsonEncoder.encode(payload) } - @discardableResult public func report( _ error: Error, severity: Severity = .error, @@ -108,12 +107,12 @@ extension BugsnagReporter: ErrorReporter { ) ) - return self + return try self .sendReport(self.hostName, self.headers, body, container) .do { response in if self.config.debug { - print("Bugsnag response:") - print(response.status.code, response.status.reasonPhrase) + let status = response.http.status + print("Bugsnag response:\n", status.code, status.reasonPhrase) } } .transform(to: ()) diff --git a/Sources/Bugsnag/ErrorReporter.swift b/Sources/Bugsnag/ErrorReporter.swift index cab18a8..236bbce 100644 --- a/Sources/Bugsnag/ErrorReporter.swift +++ b/Sources/Bugsnag/ErrorReporter.swift @@ -15,7 +15,7 @@ public protocol ErrorReporter { } extension ErrorReporter { - func report( + public func report( _ error: Error, severity: Severity = .error, userId: CustomStringConvertible? = nil, @@ -39,7 +39,7 @@ extension ErrorReporter { ) } - func report( + public func report( _ error: Error, severity: Severity = .error, userType: U.Type, diff --git a/Tests/BugsnagTests/BugsnagTests.swift b/Tests/BugsnagTests/BugsnagTests.swift index 2d16f3c..1ce34ba 100644 --- a/Tests/BugsnagTests/BugsnagTests.swift +++ b/Tests/BugsnagTests/BugsnagTests.swift @@ -115,20 +115,21 @@ final class BugsnagTests: XCTestCase { config: .init(apiKey: "apiKey", releaseStage: "test"), sendReport: { host, headers, data, container in capturedSendReportParameters = (host, headers, data, container) - return container.future(HTTPResponse(status: .ok)) + return container.future(Response(http: HTTPResponse(status: .ok), using: container)) }) let application = try Application.test() let request = Request(using: application) request.breadcrumb(name: "a", type: .log) - reporter.report(NotFound(), severity: .info, userId: 1, metadata: ["a": "b"], on: request) + _ = reporter + .report(NotFound(), severity: .info, userId: 1, metadata: ["a": "b"], on: request) guard let params = capturedSendReportParameters else { XCTFail() return } - XCTAssertEqual(params.host, "notify.bugsnag.com") + XCTAssertEqual(params.host, "https://notify.bugsnag.com") XCTAssertEqual(params.headers["Content-Type"].first, "application/json") XCTAssertEqual(params.headers["Bugsnag-Api-Key"].first, "apiKey") XCTAssertEqual(params.headers["Bugsnag-Payload-Version"].first, "4") @@ -145,9 +146,9 @@ final class BugsnagTests: XCTestCase { func testReportingCanBeDisabled() throws { let reporter = BugsnagReporter( config: .init(apiKey: "apiKey", releaseStage: "test", shouldReport: false), - sendReport: { host, headers, data, request in + sendReport: { host, headers, data, container in XCTFail("No error should be reported") - return request.future(HTTPResponse(status: .ok)) + return container.future(Response(http: HTTPResponse(status: .ok), using: container)) }) let application = try Application.test()