All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.figure.eventstream.stream.models.EncodedBlockchainEvent.kt Maven / Gradle / Ivy

package tech.figure.eventstream.stream.models

import java.util.Base64

/**
 * Common interface for various blockchain event types that are encoded as an event type followed by a series of
 * event key/value attributes conforming to the format defined in `provenance/attribute/v1/attribute.proto`.
 *
 * Example:
 *
 * ```
 * {
 *   "eventType": "provenance.metadata.v1.EventRecordCreated",
 *   "attributes": [
 *     {
 *       "key": "cmVjb3JkX2FkZHI=",
 *       "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
 *       "index": false
 *     },
 *     {
 *       "key": "c2Vzc2lvbl9hZGRy",
 *       "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
 *       "index": false
 *     },
 *     {
 *       "key": "c2NvcGVfYWRkcg==",
 *       "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci",
 *       "index": false
 *     }
 *   ]
 * }
 * ```
 *
 * @see https://github.com/provenance-io/provenance/blob/v1.7.1/docs/proto-docs.md#provenanceattributev1attributeproto
 */
interface EncodedBlockchainEvent {
    /**
     * The type of the event, e.g. "message", "reward", "provenance.metadata.v1.EventRecordCreated", etc.
     */
    val eventType: String

    /**
     * A list of attributes, as defined `provenance/attribute/v1/attribute.proto`.
     */
    val attributes: List

    /**
     * A utility function which converts a list of key/value event attributes like:
     *
     * ```
     * [
     *   {
     *     "key": "cmVjb3JkX2FkZHI=",
     *     "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI="
     *   },
     *   {
     *     "key": "c2Vzc2lvbl9hZGRy",
     *     "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi"
     *   },
     *   {
     *     "key": "c2NvcGVfYWRkcg==",
     *     "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
     *   }
     * ]
     * ```
     *
     * which have been deserialized in `List`, into `Map`,
     *
     * where keys have been base64 decoded:
     *
     * ```
     * {
     *   "record_addr"  to "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
     *   "session_addr" to "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
     *   "scope_addr"   to "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
     * }
     * ```
     */
    fun toDecodedMap(): Map = attributes.toDecodedMap()
}

/**
 * A utility function which converts a list of key/value event attributes like:
 *
 *   [
 *     {
 *       "key": "cmVjb3JkX2FkZHI=",
 *       "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI="
 *     },
 *     {
 *       "key": "c2Vzc2lvbl9hZGRy",
 *       "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi"
 *     },
 *     {
 *       "key": "c2NvcGVfYWRkcg==",
 *       "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
 *     }
 *   ]
 *
 * which have been deserialized in `List`, into `Map`,
 *
 * where keys have been base64 decoded:
 *
 *   {
 *     "record_addr"  to "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
 *     "session_addr" to "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
 *     "scope_addr"   to "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
 *   }
 */
fun List.toDecodedMap(): Map = associate { e ->
    Base64.getDecoder().decode(e.key).decodeToString() to e.value
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy