in notificationworkerlambda/src/main/scala/com/gu/notifications/worker/delivery/fcm/FcmTransportJdkImpl.scala [106:133]
def sendAsync(token: String, payload: FcmPayload, dryRun: Boolean): Future[String] = {
val message = Message
.builder
.setToken(token)
.setAndroidConfig(payload.androidConfig)
.build
val body = createBody(message, dryRun)
val request: HttpRequest = HttpRequest.newBuilder(new URI(url))
.version(HttpClient.Version.HTTP_2)
.header("Authorization", "Bearer " + getAccessToken())
.header("Content-Type", mediaType)
.POST(HttpRequest.BodyPublishers.ofByteArray(body))
.timeout(Duration.ofSeconds(requestTimeout))
.build()
val p = Promise[String]()
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()).whenComplete((response, err) => {
if (response == null) {
p.failure(FcmServerTransportException(err))
} else {
handleResponse(response).fold(
ex => p.failure(ex),
fcmResponse => p.success(fcmResponse.name)
)
}
})
p.future
}