update oracle explorer client to use v2 of the API (#3747)

This commit is contained in:
Chris Stewart 2021-10-12 15:43:27 -05:00 committed by GitHub
parent d8722c3f32
commit ab8649a6a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 6 deletions

View file

@ -18,18 +18,18 @@ object ExplorerEnv extends StringFactory[ExplorerEnv] {
case object Production extends ExplorerEnv {
override val siteUrl: String = "https://oracle.suredbits.com/"
override val baseUri: String = s"${siteUrl}v1/"
override val baseUri: String = s"${siteUrl}v2/"
}
case object Test extends ExplorerEnv {
override val siteUrl: String = "https://test.oracle.suredbits.com/"
override val baseUri: String = s"${siteUrl}v1/"
override val baseUri: String = s"${siteUrl}v2/"
}
/** For local testing purposes */
case object Local extends ExplorerEnv {
override val siteUrl: String = "http://localhost:9000/"
override val baseUri: String = s"${siteUrl}v1/"
override val baseUri: String = s"${siteUrl}v2/"
}
val all: Vector[ExplorerEnv] = Vector(Production, Test, Local)

View file

@ -16,7 +16,18 @@ import org.bitcoins.explorer.model.{
}
import org.bitcoins.explorer.picklers.ExplorerPicklers
import org.bitcoins.tor.{Socks5ClientTransport, Socks5ProxyParams}
import play.api.libs.json.{JsError, JsSuccess, JsValue, Json}
import play.api.libs.json.{
JsArray,
JsBoolean,
JsError,
JsNull,
JsNumber,
JsObject,
JsString,
JsSuccess,
JsValue,
Json
}
import java.net.URI
import scala.concurrent.Future
@ -137,7 +148,6 @@ case class SbExplorerClient(
}
private def sendRequest(httpReq: HttpRequest): Future[JsValue] = {
val responsePayloadF: Future[String] = {
httpClient
.singleRequest(httpReq, settings = httpConnectionPoolSettings)
@ -147,6 +157,25 @@ case class SbExplorerClient(
.map(payload => payload.decodeString(ByteString.UTF_8)))
}
responsePayloadF.map(Json.parse)
val responseJsonF: Future[JsValue] = responsePayloadF.map(Json.parse)
responseJsonF.flatMap {
case x @ (_: JsNumber | _: JsString | _: JsArray | JsNull |
_: JsBoolean) =>
Future.failed(
new RuntimeException(
s"Incorrect formatted response from oracle explorer, got=$x"))
case obj: JsObject =>
val map = obj.value
val error = map.get("error")
val result = map.get("result")
if (error.get != JsNull) {
Future.failed(
new RuntimeException(
s"Error returned by oracle explroer, err=${error}"))
} else {
Future.successful(result.get)
}
}
}
}