From 48a45d819087c9b6fff5878a1c60dae58dd2d982 Mon Sep 17 00:00:00 2001 From: Arie Trouw Date: Fri, 6 Dec 2024 11:37:43 -0800 Subject: [PATCH] timestamp in bw made timestamp in bw optional, but this causes a problem with the archivist, so round trip fails until archivist fixed --- .../client/boundwitness/BoundWitnessTest.kt | 20 +++++++-- .../xyo/client/node/client/NodeClientTest.kt | 4 +- .../witness/WitnessLocationHandlerTest.kt | 16 +++---- .../xyo/client/witness/XyoPanelTest.kt | 4 +- .../xyo/client/boundwitness/BoundWitness.kt | 31 ++++++++++++++ .../client/boundwitness/BoundWitnessBody.kt | 42 ++++++++++++++----- .../boundwitness/BoundWitnessBodyJson.kt | 29 ------------- ...tnessBuilder.kt => BoundWitnessBuilder.kt} | 10 ++--- .../client/boundwitness/BoundWitnessJson.kt | 34 --------------- .../client/boundwitness/BoundWitnessMeta.kt | 11 +++++ ...undWitnessJson.kt => QueryBoundWitness.kt} | 6 +-- .../boundwitness/QueryBoundWitnessBody.kt | 13 ++++++ .../boundwitness/QueryBoundWitnessBodyJson.kt | 8 ---- .../boundwitness/QueryBoundWitnessBuilder.kt | 6 +-- .../XyoBoundWitnessMetaInterface.kt | 6 --- .../boundwitness/model/BoundWitnessBody.kt | 13 ++++++ .../boundwitness/model/BoundWitnessMeta.kt | 8 ++++ ...XyoSerializable.kt => JsonSerializable.kt} | 24 +++++++++++ .../xyo/client/module/ModuleQueryResult.kt | 4 +- .../xyo/client/node/client/NodeClient.kt | 4 +- .../xyo/client/node/client/QueryResponse.kt | 8 ++-- .../xyo/client/payload/model/Payload.kt | 6 --- .../xyo/client/payload/model/WithMeta.kt | 11 +++++ .../network/xyo/client/witness/XyoPanel.kt | 6 +-- .../client/witness/location/info/Handler.kt | 10 ++--- 25 files changed, 199 insertions(+), 135 deletions(-) create mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/BoundWitness.kt delete mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBodyJson.kt rename sdk/src/main/java/network/xyo/client/boundwitness/{XyoBoundWitnessBuilder.kt => BoundWitnessBuilder.kt} (92%) delete mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessJson.kt create mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessMeta.kt rename sdk/src/main/java/network/xyo/client/boundwitness/{QueryBoundWitnessJson.kt => QueryBoundWitness.kt} (72%) create mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBody.kt delete mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBodyJson.kt delete mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessMetaInterface.kt create mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessBody.kt create mode 100644 sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessMeta.kt rename sdk/src/main/java/network/xyo/client/lib/{XyoSerializable.kt => JsonSerializable.kt} (83%) create mode 100644 sdk/src/main/java/network/xyo/client/payload/model/WithMeta.kt diff --git a/sdk/src/androidTest/java/network/xyo/client/boundwitness/BoundWitnessTest.kt b/sdk/src/androidTest/java/network/xyo/client/boundwitness/BoundWitnessTest.kt index fd244f5..fae8026 100644 --- a/sdk/src/androidTest/java/network/xyo/client/boundwitness/BoundWitnessTest.kt +++ b/sdk/src/androidTest/java/network/xyo/client/boundwitness/BoundWitnessTest.kt @@ -79,8 +79,8 @@ class BoundWitnessTest { TestPayload1() )).build() assert(bw.dataHash() == bw.getBodyJson().dataHash()) - assert(bw.meta.client == "android") - assert(bw.meta.signatures?.size == 1) + assert(bw._meta.client == "android") + assert(bw._meta.signatures?.size == 1) } } @@ -119,7 +119,21 @@ class BoundWitnessTest { val testAccount = Account.random() val testPayload = TestPayload1() val bw = BoundWitnessBuilder().signer(testAccount).payloads(listOf(testPayload)).build() - client.insert(listOf(bw, testPayload)) + val bwJson: String = bw.toPrettyJson() + println("bwJson-start") + println(bwJson) + println("bwJson-end") + val queryResult = client.insert(listOf(bw, testPayload)) + + assert((queryResult.errors?.size ?: 0) == 0) + assert((queryResult.response?.payloads?.size == 2)) + + val bwDataHash = bw.dataHash() + assert(((queryResult.response?.payloads?.filter { it.dataHash() == bwDataHash})?.size == 1)) + + val dataResult = client.get(listOf(bwDataHash)) + val dataResponse = dataResult.response?.rawResponse + assert(dataResponse!!.contains(bwDataHash)) val bwHash = bw.dataHash() val result = client.get(listOf(bwHash)) diff --git a/sdk/src/androidTest/java/network/xyo/client/node/client/NodeClientTest.kt b/sdk/src/androidTest/java/network/xyo/client/node/client/NodeClientTest.kt index 72c88ed..282b3b8 100644 --- a/sdk/src/androidTest/java/network/xyo/client/node/client/NodeClientTest.kt +++ b/sdk/src/androidTest/java/network/xyo/client/node/client/NodeClientTest.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.runBlocking import network.xyo.client.lib.TestConstants import network.xyo.client.account.Account import network.xyo.client.archivist.wrapper.ArchivistWrapper -import network.xyo.client.boundwitness.BoundWitnessBodyJson +import network.xyo.client.boundwitness.BoundWitnessBody import network.xyo.client.payload.Payload import org.junit.Before import org.junit.Test @@ -71,7 +71,7 @@ class NodeClientTest { assertEquals(errors, null) if (response != null) { - assertEquals(response.bw?.schema, BoundWitnessBodyJson.SCHEMA) + assertEquals(response.bw?.schema, BoundWitnessBody.SCHEMA) } else { throw(Error("Response should not be null")) } diff --git a/sdk/src/androidTest/java/network/xyo/client/witness/WitnessLocationHandlerTest.kt b/sdk/src/androidTest/java/network/xyo/client/witness/WitnessLocationHandlerTest.kt index 7a9eedf..ce6ea26 100644 --- a/sdk/src/androidTest/java/network/xyo/client/witness/WitnessLocationHandlerTest.kt +++ b/sdk/src/androidTest/java/network/xyo/client/witness/WitnessLocationHandlerTest.kt @@ -9,8 +9,8 @@ import androidx.test.rule.GrantPermissionRule import kotlinx.coroutines.runBlocking import network.xyo.client.lib.TestConstants import network.xyo.client.account.Account -import network.xyo.client.boundwitness.BoundWitnessBodyJson -import network.xyo.client.boundwitness.BoundWitnessJson +import network.xyo.client.boundwitness.BoundWitnessBody +import network.xyo.client.boundwitness.BoundWitness import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRepository import network.xyo.client.witness.types.WitnessResult import network.xyo.client.payload.Payload @@ -49,12 +49,12 @@ class WitnessLocationHandlerTest { @Test fun testObserve() { runBlocking { - var firstBw: BoundWitnessJson? = null + var firstBw: BoundWitness? = null val result1 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null))) when (result1) { - is WitnessResult.Success> -> { + is WitnessResult.Success> -> { firstBw = result1.data.first - assertInstanceOf(firstBw) + assertInstanceOf(firstBw) assertInstanceOf(result1.data.second) assertInstanceOf(result1.data.third) } @@ -63,12 +63,12 @@ class WitnessLocationHandlerTest { } } - var secondBw: BoundWitnessJson? = null + var secondBw: BoundWitness? = null val result2 = WitnessLocationHandler().witness(appContext.applicationContext, arrayListOf(Pair(apiDomainBeta, null))) when (result2) { - is WitnessResult.Success> -> { + is WitnessResult.Success> -> { secondBw = result2.data.first - assertInstanceOf(secondBw) + assertInstanceOf(secondBw) assertInstanceOf(result2.data.second) assertInstanceOf(result2.data.third) diff --git a/sdk/src/androidTest/java/network/xyo/client/witness/XyoPanelTest.kt b/sdk/src/androidTest/java/network/xyo/client/witness/XyoPanelTest.kt index 957c8b1..68f2d0b 100644 --- a/sdk/src/androidTest/java/network/xyo/client/witness/XyoPanelTest.kt +++ b/sdk/src/androidTest/java/network/xyo/client/witness/XyoPanelTest.kt @@ -11,7 +11,7 @@ import network.xyo.client.lib.BasicPayload import network.xyo.client.lib.TestConstants import network.xyo.client.payload.EventPayload import network.xyo.client.account.Account -import network.xyo.client.boundwitness.BoundWitnessJson +import network.xyo.client.boundwitness.BoundWitness import network.xyo.client.datastore.previous_hash_store.PreviousHashStorePrefsRepository import network.xyo.client.payload.Payload import network.xyo.client.witness.location.info.LocationActivity @@ -134,7 +134,7 @@ class XyoPanelTest { runBlocking { val panel = XyoPanel(appContext, Account.random(), arrayListOf(), listOf(XyoSystemInfoWitness())) val results = panel.reportAsyncQuery() - assertInstanceOf(results.bw) + assertInstanceOf(results.bw) assertInstanceOf(results.payloads?.first()) } } diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitness.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitness.kt new file mode 100644 index 0000000..959ee95 --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitness.kt @@ -0,0 +1,31 @@ +package network.xyo.client.boundwitness + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +import network.xyo.client.payload.model.WithMeta +import network.xyo.client.types.HashHex + +@JsonClass(generateAdapter = true) +open class BoundWitness: WithMeta, BoundWitnessBody() { + @Json(name = "\$meta") + override var _meta = BoundWitnessMeta() + + @Json(name = "\$hash") + override var _hash: HashHex + get() { + return this.dataHash() + } + set(value){} + + override fun dataHash(): String { + return getBodyJson().dataHash() + } + + fun rootHash(): String { + return sha256String(this) + } + + open fun getBodyJson(): BoundWitnessBody { + return BoundWitnessBody(this.addresses, this.previous_hashes, this.payload_hashes, this.payload_schemas, this.timestamp) + } +} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBody.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBody.kt index a0a12e7..9ceb010 100644 --- a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBody.kt +++ b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBody.kt @@ -1,13 +1,35 @@ package network.xyo.client.boundwitness -import network.xyo.client.payload.model.Payload - -interface BoundWitnessBodyFields : Payload { - var addresses: List - var payload_hashes: List - var payload_schemas: List - var previous_hashes: List - // Note: Long is a higher precision type than JavaScript's Number type but it is the default type from - // Kotlin's System.currentTimeMillis(). - var timestamp: Long +import com.squareup.moshi.JsonClass +import network.xyo.client.boundwitness.model.BoundWitnessBody +import network.xyo.client.payload.Payload + +@JsonClass(generateAdapter = true) +open class BoundWitnessBody(): BoundWitnessBody, Payload(SCHEMA) { + final override var addresses = emptyList() + final override var payload_hashes = emptyList() + final override var payload_schemas = emptyList() + final override var previous_hashes = emptyList() + final override var timestamp: Long? = null + + override fun dataHash(): String { + return sha256String(this) + } + + constructor ( + addresses: List, + previous_hashes: List, + payload_hashes: List, + payload_schemas: List, + timestamp: Long? = null, + ) : this() { + this.addresses = addresses + this.previous_hashes = previous_hashes + this.payload_hashes = payload_hashes + this.payload_schemas = payload_schemas + } + + companion object { + const val SCHEMA = "network.xyo.boundwitness" + } } \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBodyJson.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBodyJson.kt deleted file mode 100644 index 461b8aa..0000000 --- a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBodyJson.kt +++ /dev/null @@ -1,29 +0,0 @@ -package network.xyo.client.boundwitness - -import com.squareup.moshi.JsonClass -import network.xyo.client.payload.Payload - -@JsonClass(generateAdapter = true) -open class BoundWitnessBodyJson(): BoundWitnessBodyFields, Payload(SCHEMA) { - final override var addresses = emptyList() - final override var payload_hashes = emptyList() - final override var payload_schemas = emptyList() - final override var previous_hashes = emptyList() - final override var timestamp: Long = System.currentTimeMillis() - - override fun dataHash(): String { - return sha256String(this) - } - - constructor (addresses: List, previous_hashes: List, payload_hashes: List, payload_schemas: List, timestamp: Long) : this() { - this.addresses = addresses - this.previous_hashes = previous_hashes - this.payload_hashes = payload_hashes - this.payload_schemas = payload_schemas - this.timestamp = timestamp - } - - companion object { - const val SCHEMA = "network.xyo.boundwitness" - } -} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessBuilder.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBuilder.kt similarity index 92% rename from sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessBuilder.kt rename to sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBuilder.kt index 317b4e5..a595471 100644 --- a/sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessBuilder.kt +++ b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessBuilder.kt @@ -14,7 +14,7 @@ open class BoundWitnessBuilder { protected var _payload_hashes = mutableListOf() protected var _payload_schemas = mutableListOf() protected var _payloads = mutableListOf() - protected open var bw: BoundWitnessJson = BoundWitnessJson() + protected open var bw: BoundWitness = BoundWitness() var _timestamp: Long? = null @@ -33,7 +33,7 @@ open class BoundWitnessBuilder { } @OptIn(ExperimentalStdlibApi::class) - private fun hashableFields(): BoundWitnessBodyJson { + private fun hashableFields(): BoundWitnessBody { // if a timestamp is not provided, set one at the time hashable fields are set bw.timestamp = _timestamp ?: System.currentTimeMillis() @@ -78,7 +78,7 @@ open class BoundWitnessBuilder { bw.addresses = addresses // update underscore fields - bw.meta.client = "android" + bw._meta.client = "android" // construct fields involved in hashing constructHashableFieldsFields() @@ -89,10 +89,10 @@ open class BoundWitnessBuilder { // in the serialized version of the bw because they will invalidate the hash val hashable = hashableFields() val hash = hashable.dataHash() - bw.meta.signatures = this.sign(hash) + bw._meta.signatures = this.sign(hash) } - open suspend fun build(): BoundWitnessJson { + open suspend fun build(): BoundWitness { return bw.let{ // update fields constructFields() diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessJson.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessJson.kt deleted file mode 100644 index 8980a79..0000000 --- a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessJson.kt +++ /dev/null @@ -1,34 +0,0 @@ -package network.xyo.client.boundwitness - -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass -import network.xyo.client.lib.JsonSerializable - -@JsonClass(generateAdapter = true) -class XyoBoundWitnessMeta: XyoBoundWitnessMetaInterface, JsonSerializable() { - override var signatures: List? = null - override var client: String? = null -} - -@JsonClass(generateAdapter = true) -open class BoundWitnessJson: BoundWitnessBodyJson() { - @Json(ignore = true) - val _meta: XyoBoundWitnessMeta = XyoBoundWitnessMeta() - - @Json(name = "\$meta") - var meta: XyoBoundWitnessMeta - get() = _meta - set(value) = Unit - - override fun dataHash(): String { - return getBodyJson().dataHash() - } - - fun rootHash(): String { - return sha256String(this) - } - - open fun getBodyJson(): BoundWitnessBodyJson { - return BoundWitnessBodyJson(this.addresses, this.previous_hashes, this.payload_hashes, this.payload_schemas, this.timestamp) - } -} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessMeta.kt b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessMeta.kt new file mode 100644 index 0000000..88cd5d1 --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/boundwitness/BoundWitnessMeta.kt @@ -0,0 +1,11 @@ +package network.xyo.client.boundwitness + +import com.squareup.moshi.JsonClass +import network.xyo.client.boundwitness.model.BoundWitnessMeta +import network.xyo.client.lib.JsonSerializable + +@JsonClass(generateAdapter = true) +class BoundWitnessMeta: BoundWitnessMeta, JsonSerializable() { + override var signatures: List? = null + override var client: String? = null +} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessJson.kt b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitness.kt similarity index 72% rename from sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessJson.kt rename to sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitness.kt index 59571a0..f270978 100644 --- a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessJson.kt +++ b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitness.kt @@ -3,12 +3,12 @@ package network.xyo.client.boundwitness import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -open class QueryBoundWitnessJson: BoundWitnessJson() { +open class QueryBoundWitness: BoundWitness() { var query: String? = null // override to return a bound witness json body that has query in its hashable fields - override fun getBodyJson(): QueryBoundWitnessBodyJson { - return QueryBoundWitnessBodyJson( + override fun getBodyJson(): QueryBoundWitnessBody { + return QueryBoundWitnessBody( addresses, previous_hashes, payload_hashes, diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBody.kt b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBody.kt new file mode 100644 index 0000000..e8006d5 --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBody.kt @@ -0,0 +1,13 @@ +package network.xyo.client.boundwitness + +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +open class QueryBoundWitnessBody( + addresses: List, + previous_hashes: List, + payload_hashes: List, + payload_schemas: List, + val query: String, + timestamp: Long? +): BoundWitnessBody(addresses, previous_hashes, payload_hashes, payload_schemas, timestamp) \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBodyJson.kt b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBodyJson.kt deleted file mode 100644 index f329a4b..0000000 --- a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBodyJson.kt +++ /dev/null @@ -1,8 +0,0 @@ -package network.xyo.client.boundwitness - -import com.squareup.moshi.JsonClass - -@JsonClass(generateAdapter = true) -open class QueryBoundWitnessBodyJson( - addresses: List, previous_hashes: List, payload_hashes: List, payload_schemas: List, val query: String, timestamp: Long -): BoundWitnessBodyJson(addresses, previous_hashes, payload_hashes, payload_schemas, timestamp) \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBuilder.kt b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBuilder.kt index fe49cf8..bea8f68 100644 --- a/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBuilder.kt +++ b/sdk/src/main/java/network/xyo/client/boundwitness/QueryBoundWitnessBuilder.kt @@ -26,11 +26,11 @@ class QueryBoundWitnessBuilder : BoundWitnessBuilder() { return this } - override suspend fun build(): QueryBoundWitnessJson { - bw = QueryBoundWitnessJson() + override suspend fun build(): QueryBoundWitness { + bw = QueryBoundWitness() // override to support additional properties for query bound witnesses return bw.let { - val qbw = it as QueryBoundWitnessJson + val qbw = it as QueryBoundWitness qbw.query = this.queryHash constructFields() it diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessMetaInterface.kt b/sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessMetaInterface.kt deleted file mode 100644 index 9a21b7f..0000000 --- a/sdk/src/main/java/network/xyo/client/boundwitness/XyoBoundWitnessMetaInterface.kt +++ /dev/null @@ -1,6 +0,0 @@ -package network.xyo.client.boundwitness - -interface XyoBoundWitnessMetaInterface { - var signatures: List? - var client: String? -} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessBody.kt b/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessBody.kt new file mode 100644 index 0000000..09bfd52 --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessBody.kt @@ -0,0 +1,13 @@ +package network.xyo.client.boundwitness.model + +import network.xyo.client.payload.model.Payload + +interface BoundWitnessBody : Payload { + var addresses: List + var payload_hashes: List + var payload_schemas: List + var previous_hashes: List + // Note: Long is a higher precision type than JavaScript's Number type but it is the default type from + // Kotlin's System.currentTimeMillis(). + var timestamp: Long? +} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessMeta.kt b/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessMeta.kt new file mode 100644 index 0000000..47b522d --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/boundwitness/model/BoundWitnessMeta.kt @@ -0,0 +1,8 @@ +package network.xyo.client.boundwitness.model + +import java.io.Serializable + +interface BoundWitnessMeta: Serializable { + var signatures: List? + var client: String? +} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/lib/XyoSerializable.kt b/sdk/src/main/java/network/xyo/client/lib/JsonSerializable.kt similarity index 83% rename from sdk/src/main/java/network/xyo/client/lib/XyoSerializable.kt rename to sdk/src/main/java/network/xyo/client/lib/JsonSerializable.kt index 590df46..73d9a53 100644 --- a/sdk/src/main/java/network/xyo/client/lib/XyoSerializable.kt +++ b/sdk/src/main/java/network/xyo/client/lib/JsonSerializable.kt @@ -1,8 +1,11 @@ package network.xyo.client.lib +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonWriter import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import network.xyo.client.account.hexStringToByteArray +import okio.Buffer import org.json.JSONArray import org.json.JSONObject import java.io.Serializable @@ -14,6 +17,10 @@ abstract class JsonSerializable: Serializable { return JsonSerializable.toJson(this, removeMeta) } + fun toPrettyJson(removeMeta: Boolean = false): String { + return JsonSerializable.toPrettyJson(this, removeMeta) + } + companion object { fun sortJson(json: String, removeMeta: Boolean = false): String { @@ -67,6 +74,14 @@ abstract class JsonSerializable: Serializable { return sortJson(adapter.toJson(obj), removeMeta) } + fun toPrettyJson(obj: Any, removeMeta: Boolean = false): String { + val moshi = Moshi.Builder() + .addLast(KotlinJsonAdapterFactory()) + .build() + val adapter = moshi.adapter(obj.javaClass) + return sortJson(adapter.toPrettyJson(obj), removeMeta) + } + fun toJson(obj: List, removeMeta: Boolean = false): String { val moshi = Moshi.Builder() .addLast(KotlinJsonAdapterFactory()) @@ -118,4 +133,13 @@ abstract class JsonSerializable: Serializable { fun String.hexToBytes(): ByteArray { return hexStringToByteArray(this) +} + +fun JsonAdapter.toPrettyJson(value: T, indent: String = " "): String { + val buffer = Buffer() + val writer: JsonWriter = JsonWriter.of(buffer).apply { + indent(indent) + } + this.toJson(writer, value) + return buffer.readUtf8() } \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/module/ModuleQueryResult.kt b/sdk/src/main/java/network/xyo/client/module/ModuleQueryResult.kt index e313ea0..6c2023c 100644 --- a/sdk/src/main/java/network/xyo/client/module/ModuleQueryResult.kt +++ b/sdk/src/main/java/network/xyo/client/module/ModuleQueryResult.kt @@ -1,5 +1,5 @@ package network.xyo.client.module -import network.xyo.client.boundwitness.BoundWitnessJson +import network.xyo.client.boundwitness.BoundWitness -typealias ModuleQueryResult = Triple, List> \ No newline at end of file +typealias ModuleQueryResult = Triple, List> \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/node/client/NodeClient.kt b/sdk/src/main/java/network/xyo/client/node/client/NodeClient.kt index 220fec8..e47bb65 100644 --- a/sdk/src/main/java/network/xyo/client/node/client/NodeClient.kt +++ b/sdk/src/main/java/network/xyo/client/node/client/NodeClient.kt @@ -12,7 +12,7 @@ import network.xyo.client.lib.JsonSerializable import network.xyo.client.account.Account import network.xyo.client.account.model.AccountInstance import network.xyo.client.boundwitness.QueryBoundWitnessBuilder -import network.xyo.client.boundwitness.QueryBoundWitnessJson +import network.xyo.client.boundwitness.QueryBoundWitness import network.xyo.client.payload.Payload import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient @@ -89,7 +89,7 @@ class NodeClient(private val url: String, private val accountToUse: AccountInsta return builtQueryTuple.joinToString(",", "[", "]") } - private suspend fun queryBuilder(query: Payload, payloads: List?): QueryBoundWitnessJson { + private suspend fun queryBuilder(query: Payload, payloads: List?): QueryBoundWitness { return QueryBoundWitnessBuilder().let { payloads?.let { payload -> it.payloads(payload) diff --git a/sdk/src/main/java/network/xyo/client/node/client/QueryResponse.kt b/sdk/src/main/java/network/xyo/client/node/client/QueryResponse.kt index 8ce1959..2ec9d4d 100644 --- a/sdk/src/main/java/network/xyo/client/node/client/QueryResponse.kt +++ b/sdk/src/main/java/network/xyo/client/node/client/QueryResponse.kt @@ -3,7 +3,7 @@ package network.xyo.client.node.client import com.squareup.moshi.Moshi import com.squareup.moshi.Types import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory -import network.xyo.client.boundwitness.BoundWitnessBodyJson +import network.xyo.client.boundwitness.BoundWitnessBody import network.xyo.client.payload.Payload import org.json.JSONArray import org.json.JSONObject @@ -11,7 +11,7 @@ import org.json.JSONObject open class QueryResponseWrapper(val rawResponse: String) { val moshi: Moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build() var bwHash: String? = null - var bw: BoundWitnessBodyJson? = null + var bw: BoundWitnessBody? = null var payloads: List? = null private fun unwrap() { @@ -32,8 +32,8 @@ open class QueryResponseWrapper(val rawResponse: String) { payloads = parsePayloads(payloadsString) } - protected open fun parseBW(bwString: String): BoundWitnessBodyJson? { - val bwAdapter = moshi.adapter(BoundWitnessBodyJson::class.java) + protected open fun parseBW(bwString: String): BoundWitnessBody? { + val bwAdapter = moshi.adapter(BoundWitnessBody::class.java) val bw = bwAdapter.fromJson(bwString) return bw } diff --git a/sdk/src/main/java/network/xyo/client/payload/model/Payload.kt b/sdk/src/main/java/network/xyo/client/payload/model/Payload.kt index 6f18495..c7e059d 100644 --- a/sdk/src/main/java/network/xyo/client/payload/model/Payload.kt +++ b/sdk/src/main/java/network/xyo/client/payload/model/Payload.kt @@ -1,13 +1,7 @@ package network.xyo.client.payload.model -import com.squareup.moshi.Json import java.io.Serializable interface Payload : Serializable { var schema: String -} - -interface WithMeta : Serializable { - @Json(name = "\$meta") - var _meta: Serializable } \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/payload/model/WithMeta.kt b/sdk/src/main/java/network/xyo/client/payload/model/WithMeta.kt new file mode 100644 index 0000000..d5d2c30 --- /dev/null +++ b/sdk/src/main/java/network/xyo/client/payload/model/WithMeta.kt @@ -0,0 +1,11 @@ +package network.xyo.client.payload.model + +import com.squareup.moshi.Json +import network.xyo.client.types.HashHex +import java.io.Serializable + +interface WithMeta : Serializable { + @Json(name = "\$meta") + var _meta: T + var _hash: HashHex +} \ No newline at end of file diff --git a/sdk/src/main/java/network/xyo/client/witness/XyoPanel.kt b/sdk/src/main/java/network/xyo/client/witness/XyoPanel.kt index 417405b..888086e 100644 --- a/sdk/src/main/java/network/xyo/client/witness/XyoPanel.kt +++ b/sdk/src/main/java/network/xyo/client/witness/XyoPanel.kt @@ -7,12 +7,12 @@ import androidx.annotation.RequiresApi import network.xyo.client.account.model.AccountInstance import network.xyo.client.archivist.wrapper.ArchivistWrapper import network.xyo.client.boundwitness.BoundWitnessBuilder -import network.xyo.client.boundwitness.BoundWitnessJson +import network.xyo.client.boundwitness.BoundWitness import network.xyo.client.node.client.NodeClient import network.xyo.client.node.client.PostQueryResult import network.xyo.client.payload.Payload -data class XyoPanelReportQueryResult(val bw: BoundWitnessJson, val apiResults: List?, val payloads: List?) +data class XyoPanelReportQueryResult(val bw: BoundWitness, val apiResults: List?, val payloads: List?) @RequiresApi(Build.VERSION_CODES.M) class XyoPanel( @@ -60,7 +60,7 @@ class XyoPanel( } } - private suspend fun generateBoundWitnessJson(payloads: List): BoundWitnessJson { + private suspend fun generateBoundWitnessJson(payloads: List): BoundWitness { return BoundWitnessBuilder() .payloads(payloads) .signer(account) diff --git a/sdk/src/main/java/network/xyo/client/witness/location/info/Handler.kt b/sdk/src/main/java/network/xyo/client/witness/location/info/Handler.kt index 23ea4e1..93a7681 100644 --- a/sdk/src/main/java/network/xyo/client/witness/location/info/Handler.kt +++ b/sdk/src/main/java/network/xyo/client/witness/location/info/Handler.kt @@ -10,13 +10,13 @@ import network.xyo.client.witness.types.WitnessHandlerInterface import network.xyo.client.witness.types.WitnessResult import network.xyo.client.witness.XyoPanel import network.xyo.client.account.model.AccountInstance -import network.xyo.client.boundwitness.BoundWitnessJson +import network.xyo.client.boundwitness.BoundWitness import network.xyo.client.payload.Payload import network.xyo.client.settings.XyoSdk -open class WitnessLocationHandler : WitnessHandlerInterface> { +open class WitnessLocationHandler : WitnessHandlerInterface> { @RequiresApi(Build.VERSION_CODES.M) - override suspend fun witness(context: Context, nodeUrlsAndAccounts: ArrayList>): WitnessResult> { + override suspend fun witness(context: Context, nodeUrlsAndAccounts: ArrayList>): WitnessResult> { val account = XyoSdk.getInstance(context.applicationContext).getAccount(context) val panel = XyoPanel(context, account, nodeUrlsAndAccounts, listOf( XyoLocationWitness(account) @@ -26,11 +26,11 @@ open class WitnessLocationHandler : WitnessHandlerInterface> { + private suspend fun getLocation(panel: XyoPanel): WitnessResult> { return withContext(Dispatchers.IO) { var locationPayload: Payload? = null var locationPayloadRaw: Payload? = null - var bw: BoundWitnessJson? = null + var bw: BoundWitness? = null val errors: MutableList = mutableListOf() panel.let { it.reportAsyncQuery().let { result ->