def sendAsync()

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
  }